From 6e3bbee5c8e6f80a8258746ed9b8801c61ada6d8 Mon Sep 17 00:00:00 2001 From: vignesh Date: Sat, 10 Oct 2026 19:39:18 +0530 Subject: [PATCH] feat: add Delhivery shipping service integration and API documentation --- delhivery/__init__.py | 1 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 157 bytes delhivery/__pycache__/apps.cpython-314.pyc | Bin 0 -> 568 bytes delhivery/__pycache__/client.cpython-314.pyc | Bin 0 -> 12734 bytes delhivery/__pycache__/models.cpython-314.pyc | Bin 0 -> 5655 bytes delhivery/__pycache__/urls.cpython-314.pyc | Bin 0 -> 447 bytes delhivery/__pycache__/views.cpython-314.pyc | Bin 0 -> 5638 bytes delhivery/apps.py | 6 + delhivery/client.py | 240 +++++++++++ delhivery/migrations/0001_initial.py | 69 ++++ delhivery/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-314.pyc | Bin 0 -> 4491 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 168 bytes delhivery/models.py | 85 ++++ delhivery/urls.py | 6 + delhivery/views.py | 92 +++++ documentation/delhivery/b2c_api_spec.md | 362 ++++++++++++++++ scratch/bundle.js | 104 +++++ scratch/fetch_delhivery.py | 29 ++ scratch/parse_delhivery.py | 387 ++++++++++++++++++ .../carrier_allocator.cpython-314.pyc | Bin 14529 -> 16312 bytes shipping/__pycache__/tests.cpython-314.pyc | Bin 11915 -> 13219 bytes shipping/__pycache__/views.cpython-314.pyc | Bin 58122 -> 57840 bytes shipping/carrier_allocator.py | 221 +++++----- shipping/tests.py | 70 ++-- shipping/views.py | 19 +- .../__pycache__/settings.cpython-314.pyc | Bin 5083 -> 4867 bytes .../__pycache__/urls.cpython-314.pyc | Bin 516 -> 588 bytes shippingservice_project/settings.py | 2 + shippingservice_project/urls.py | 2 + 30 files changed, 1552 insertions(+), 143 deletions(-) create mode 100644 delhivery/__init__.py create mode 100644 delhivery/__pycache__/__init__.cpython-314.pyc create mode 100644 delhivery/__pycache__/apps.cpython-314.pyc create mode 100644 delhivery/__pycache__/client.cpython-314.pyc create mode 100644 delhivery/__pycache__/models.cpython-314.pyc create mode 100644 delhivery/__pycache__/urls.cpython-314.pyc create mode 100644 delhivery/__pycache__/views.cpython-314.pyc create mode 100644 delhivery/apps.py create mode 100644 delhivery/client.py create mode 100644 delhivery/migrations/0001_initial.py create mode 100644 delhivery/migrations/__init__.py create mode 100644 delhivery/migrations/__pycache__/0001_initial.cpython-314.pyc create mode 100644 delhivery/migrations/__pycache__/__init__.cpython-314.pyc create mode 100644 delhivery/models.py create mode 100644 delhivery/urls.py create mode 100644 delhivery/views.py create mode 100644 documentation/delhivery/b2c_api_spec.md create mode 100644 scratch/bundle.js create mode 100644 scratch/fetch_delhivery.py create mode 100644 scratch/parse_delhivery.py diff --git a/delhivery/__init__.py b/delhivery/__init__.py new file mode 100644 index 0000000..1ea9fad --- /dev/null +++ b/delhivery/__init__.py @@ -0,0 +1 @@ +# Delhivery Logistics Integration Module diff --git a/delhivery/__pycache__/__init__.cpython-314.pyc b/delhivery/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79dc5792bc26775357a0e29809f7b6e399c81d8a GIT binary patch literal 157 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 literal 0 HcmV?d00001 diff --git a/delhivery/__pycache__/urls.cpython-314.pyc b/delhivery/__pycache__/urls.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..799fc622530bf40b17238d5f4e11dcea899836c1 GIT binary patch literal 447 zcmYLDzfZzI7`^K+zy=v`G$DqGn6xD^nh?UoKos=}0Wc+X3+?@Oe zoFJNzT*Bn!hT$LZPAPoJ-Fx5N``-JG_p^I|)?593@JjKEHAzVuvc93@5p;n8b0kCmChw)GzAZcK!eW literal 0 HcmV?d00001 diff --git a/delhivery/__pycache__/views.cpython-314.pyc b/delhivery/__pycache__/views.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..581c172aa6cde361a7d5806321688a02c5c78f47 GIT binary patch literal 5638 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 + """ + if isinstance(shipment_data, dict): + json_str = json.dumps(shipment_data) + else: + json_str = str(shipment_data) + + form_data = { + "format": "json", + "data": json_str + } + + resp = self._execute_request( + action_name="Create Shipment (CMU)", + method="POST", + path="/api/cmu/create.json", + data=form_data, + content_type="application/x-www-form-urlencoded" + ) + + res_json = resp.json() + + # Track shipment locally if created successfully + if resp.status_code == 200 and isinstance(res_json, dict) and res_json.get("success"): + packages = res_json.get("packages", []) + for pkg in packages: + waybill = pkg.get("waybill") + if waybill: + shipment_info = shipment_data.get("shipments", [{}])[0] if isinstance(shipment_data, dict) else {} + DelhiveryShipment.objects.create( + waybill=str(waybill), + order_number=pkg.get("refnum") or shipment_info.get("order", ""), + vendor="DELHIVERY", + payment_mode=pkg.get("payment", "Prepaid"), + shipping_mode=shipment_info.get("shipping_mode", "Surface"), + status="MANIFESTED", + consignee_name=shipment_info.get("name", ""), + consignee_phone=str(shipment_info.get("phone", "")), + consignee_pincode=str(shipment_info.get("pin", "")), + pickup_location_name=shipment_data.get("pickup_location", {}).get("name", "") if isinstance(shipment_data, dict) else "", + raw_response=json.dumps(res_json) + ) + + return res_json + + # --- 3. Tracking --- + + def track_shipment(self, waybill): + """GET /api/v1/packages/json/?waybill={waybill}""" + params = {"waybill": str(waybill)} + resp = self._execute_request("Track Shipment", "GET", "/api/v1/packages/json/", params=params) + data = resp.json() + + # Update local tracking status + if resp.status_code == 200 and isinstance(data, dict): + shipment_list = data.get("ShipmentData", []) + if shipment_list: + st_info = shipment_list[0].get("Shipment", {}).get("Status", {}) + st_name = st_info.get("Status", "") + if st_name: + DelhiveryShipment.objects.filter(waybill=str(waybill)).update(current_tracking_status=st_name) + + return data + + # --- 4. Pricing / Rate Estimates --- + + def get_rate_estimate(self, origin_pin, dest_pin, weight=500, mode="S", payment_type="Prepaid"): + """GET /api/kcs/v1/summary/get""" + params = { + "md": mode, + "ss": "Delivered", + "d_pin": str(dest_pin), + "o_pin": str(origin_pin), + "cgm": str(weight), + "pt": payment_type + } + resp = self._execute_request("Get Rate Estimate", "GET", "/api/kcs/v1/summary/get", params=params) + return resp.json() + + # --- 5. Labels & Packing Slips --- + + def download_label(self, waybills, pdf=True): + """GET /api/p/packing_slip""" + wb_str = ",".join(waybills) if isinstance(waybills, list) else str(waybills) + params = { + "wbns": wb_str, + "pdf": "true" if pdf else "false" + } + resp = self._execute_request("Download Label", "GET", "/api/p/packing_slip", params=params, is_stream=pdf) + if pdf: + return resp.content + return resp.json() + + # --- 6. Pickup Request Creation --- + + def create_pickup_request(self, pickup_time, pickup_date, pickup_location, expected_package_count=1): + """POST /fm/request/create/""" + payload = { + "pickup_time": pickup_time, + "pickup_date": pickup_date, + "pickup_location": pickup_location, + "expected_package_count": int(expected_package_count) + } + resp = self._execute_request("Create Pickup Request", "POST", "/fm/request/create/", payload=payload) + return resp.json() + + # --- 7. Order Cancellation --- + + def cancel_shipment(self, waybill): + """POST /api/p/edit""" + payload = { + "waybill": str(waybill), + "cancellation": "true" + } + resp = self._execute_request("Cancel Shipment", "POST", "/api/p/edit", payload=payload) + res_json = resp.json() + if resp.status_code == 200: + DelhiveryShipment.objects.filter(waybill=str(waybill)).update(status="CANCELLED") + return res_json + + # --- 8. NDR Re-attempt Action --- + + def take_ndr_action(self, waybill, action="RE-ATTEMPT", deferred_date=None, comments=None): + """POST /api/backend/ndr/action/""" + payload = { + "waybill": str(waybill), + "action": action + } + if deferred_date: + payload["deferred_date"] = str(deferred_date) + if comments: + payload["comments"] = str(comments) + + resp = self._execute_request("Take NDR Action", "POST", "/api/backend/ndr/action/", payload=payload) + return resp.json() diff --git a/delhivery/migrations/0001_initial.py b/delhivery/migrations/0001_initial.py new file mode 100644 index 0000000..f6a88b6 --- /dev/null +++ b/delhivery/migrations/0001_initial.py @@ -0,0 +1,69 @@ +# Generated by Django 6.1 on 2026-10-10 14:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='DelhiveryActivityLog', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('action_name', models.CharField(max_length=100)), + ('endpoint_url', models.CharField(max_length=500)), + ('http_method', models.CharField(default='POST', max_length=10)), + ('request_headers', models.TextField(blank=True, default='')), + ('request_body', models.TextField(blank=True, default='')), + ('response_status_code', models.IntegerField(default=200)), + ('response_body', models.TextField(blank=True, default='')), + ('execution_time_ms', models.FloatField(default=0.0)), + ('status', models.CharField(choices=[('SUCCESS', 'Success (2xx)'), ('ERROR', 'Error (4xx/5xx)'), ('WARNING', 'Warning')], default='SUCCESS', max_length=20)), + ('timestamp', models.DateTimeField(auto_now_add=True)), + ('notes', models.TextField(blank=True, default='')), + ], + options={ + 'ordering': ['-timestamp'], + }, + ), + migrations.CreateModel( + name='DelhiveryCredential', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('client_name', models.CharField(default='Default Delhivery Client', max_length=100)), + ('api_token', models.CharField(help_text='Delhivery Production API Token Key', max_length=255)), + ('base_url', models.URLField(default='https://track.delhivery.com')), + ('is_active', models.BooleanField(default=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + ), + migrations.CreateModel( + name='DelhiveryShipment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('waybill', models.CharField(db_index=True, max_length=100, unique=True)), + ('order_number', models.CharField(db_index=True, max_length=100)), + ('vendor', models.CharField(default='DELHIVERY', max_length=50)), + ('payment_mode', models.CharField(choices=[('COD', 'Cash On Delivery'), ('Prepaid', 'Prepaid'), ('Pickup', 'Reverse Pickup')], default='Prepaid', max_length=20)), + ('shipping_mode', models.CharField(choices=[('Surface', 'Surface Logistics'), ('Express', 'Express Logistics')], default='Surface', max_length=20)), + ('status', models.CharField(choices=[('MANIFESTED', 'Manifested'), ('IN_TRANSIT', 'In Transit'), ('OUT_FOR_DELIVERY', 'Out For Delivery'), ('DELIVERED', 'Delivered'), ('CANCELLED', 'Cancelled'), ('RTO', 'Return To Origin'), ('NDR', 'Non-Delivery Exception'), ('FAILED', 'Failed')], default='MANIFESTED', max_length=30)), + ('current_tracking_status', models.CharField(blank=True, default='', max_length=100)), + ('consignee_name', models.CharField(max_length=150)), + ('consignee_phone', models.CharField(max_length=20)), + ('consignee_pincode', models.CharField(max_length=10)), + ('pickup_location_name', models.CharField(blank=True, default='', max_length=100)), + ('raw_response', models.TextField(blank=True, default='')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + options={ + 'ordering': ['-created_at'], + }, + ), + ] diff --git a/delhivery/migrations/__init__.py b/delhivery/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/delhivery/migrations/__pycache__/0001_initial.cpython-314.pyc b/delhivery/migrations/__pycache__/0001_initial.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83d2e507f8833a673de70e84953555e5d5e891b3 GIT binary patch literal 4491 zcmb_gOHkWb7L{z{9|mM_AOYGK@Q|1ghhHEcrUUqsI3YGIJDu(+K#`>fRUk_mV* zoyF9wd(}nFW~f>9?6PFZlA4vq>Q%bEKm8%zqP=&ErQ*87}y-+kwv zd!Nkh&JH&LpPAU--rS-H;vcxv__Wm<9~YtVp4cF0GC@2gRr0AtwG0v0h+%@Z^bxdm zom{my7M(w5t!7)b(za0|)b>x@4Ow(|LD-U6RggqQw-+QHvmoLTGyWbb7=gO^=2)r9n38QBfU2767Whl!12x~J(h zzAIb22FU&w*B@`vE_Asa=vDX!3OMs-A{D z^jEY$Ox`8wp~gNfRTB7>Dj9BdI(h_j(j3*%mdN17f9c;eMRg32{!1CSd4btmfD2rT zBQM}WfV&E#<6pqtK4(7cpeGvMw&d~7ujDZddta&&ngkw6`fej~ppeNgVy7Cu0dl$} za%N-tLUd+ZAwi{4Q0cwTR65rRPsiwZ*h0^LhW}C)JOTUnH~bf};6Y3KPy>LGhfRDu zYK7hS=|TlsXo>S(!2Px*?qWszx)l!Bsn2|T4A`sHwEwqSyCC})FJ^z(s(R@qwVPgs z%jc=?deOLbGP*B{@;PA#$$LwjD(ndA-ioxPTLeC?TN2TbP4}=RRbn_9u`1&A_M$8l zSb2}xMtizTL9)Q+g)-7TU?D3hh!NQW(%V_EC5c8SM8Yk{?lO5KZmBulgG9b438KoB zaG!fYhAC>$cTYIs-SOgGZZeDX+?1knnn!jNX=zqB1$e@<>*6e0jEI z^Q^cn_h5jh0mw@Hp6-*8QiMAdF^bBnC57SOY7LPlwBu~jz0?PA>?vRS+n?TQ5Od>Mkk*EU6dOMdFplNVgz8*E%37jDV5o20+ zu|ENJ^4* zS2VWrH1TbW{$BSK**$ER!LL-hV^u~)R^asx1@Al8AI~(|{mi3F^M0z-^a`OkU!Q zw>~pnJTm)^X{fT?e&?LezY@ui6;6w9vvNne#DVgZz^&=s-4ITI7)__>a#u{2B{^_w zc6aygJ#)tKYKcxJl23HUD^?ca6xfPxjijPwD#9wcKuW~YG4dYF&*78dF96wB4HwIu zG=iK~P{8a1>OOYDTPH05WkOI?fm2|OBeq)v|CO@0-e{V2!paA*5?E$MVG|Ms@vy|5 zNHQ6EDVa`W%I<_1$jB_Pslp7EdYNJ3DVl+J8sRKcsgfFq!x7J2HlmGZA!M%luwmB~ zSxQD?D=T)rPH5A#t_l1Ug^REA=JIl9WfRX!hJv5jB2$Tw@HG3moLFDht^XR4s;) z7r~j2@JHy0=)*M#5ucNGnRk-BtrQ_~)*AT)_rMMm#Wgs9d6%r6|E^h^oSdA3j5dxR zF7CWSBXV6O!xD}l+wNHwsiQA;P@p@ZJq@Kj}Z>M&g$Uec)LW>oL- zay5|BsMQni$U(dooUH_B4`+|NtHBkGdeOYtc9g9SCp79AxbSmtEwoSxEgYq*A#*5j zFjgCxu8d3{`i|u4$TN+4e&P)tY}Ur+D`WFV*6LVPqhcrC8~by$f!mdV+y5endkM=a zL8L8f_#s%fEuRQtFpoRlg5|_JxW8HRPgnfYN4Bazrcv<|@Adt$TK{;ZfBb{*P_Fhb zYgFX)Mu)HS)K7Q^_Sg24r&i0g&QHTVF8ArJCeFsL#+mjYt-a=|0bZj}egAO9AJ!hM zYi|lwzo=2t3GDOjpP4@~+C94ZRa&Dmb>LLRKXn+a`X6i5;)(aG{hiv-Ol4^1$X6YT zYt)mbp~Fmd$nd<&>FfN|)(*a2Z}K(xMPK{(YFCAKRkyp513&-lLJKHQ4+KLorT2@(Ne?_78vuJ^BG) z&n#&Scx}mI^eAVbc|czXtzZL;V*3FS{m5GI;S?wEx z^9hsl;e)x_=uBmF=1{4QMl>qgB+Da9HE0eQx|*wu%^i(Y$4q4yl6+7JJvg!*XSMa$ z)ex&u*=Amv^n0b~3{jw~AlB9Te#+F<&0dIAguLHv|HCtxYb0$FUI|_N8&=$s!hF^! zU`EX{(|QrZ3@i^V-ML`a$FJp0=;D7NDEKBjwUQ+HA3H&YKG`3W_8;9fD)@IQ_-_I_ H#_In8$`D>0 literal 0 HcmV?d00001 diff --git a/delhivery/migrations/__pycache__/__init__.cpython-314.pyc b/delhivery/migrations/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1bc58ad288fb8c125ec296309e67b379f3899667 GIT binary patch literal 168 zcmdPq_I|p@<2{{|u763 literal 0 HcmV?d00001 diff --git a/delhivery/models.py b/delhivery/models.py new file mode 100644 index 0000000..a0b6c51 --- /dev/null +++ b/delhivery/models.py @@ -0,0 +1,85 @@ +from django.db import models +from django.utils import timezone + +class DelhiveryCredential(models.Model): + client_name = models.CharField(max_length=100, default='Default Delhivery Client') + api_token = models.CharField(max_length=255, help_text='Delhivery Production API Token Key') + base_url = models.URLField(default='https://track.delhivery.com') + is_active = models.BooleanField(default=True) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + def __str__(self): + return f"Delhivery Credential ({self.client_name}) - {'Active' if self.is_active else 'Inactive'}" + + +class DelhiveryShipment(models.Model): + PAYMENT_MODE_CHOICES = [ + ('COD', 'Cash On Delivery'), + ('Prepaid', 'Prepaid'), + ('Pickup', 'Reverse Pickup'), + ] + + SERVICE_CHOICES = [ + ('Surface', 'Surface Logistics'), + ('Express', 'Express Logistics'), + ] + + STATUS_CHOICES = [ + ('MANIFESTED', 'Manifested'), + ('IN_TRANSIT', 'In Transit'), + ('OUT_FOR_DELIVERY', 'Out For Delivery'), + ('DELIVERED', 'Delivered'), + ('CANCELLED', 'Cancelled'), + ('RTO', 'Return To Origin'), + ('NDR', 'Non-Delivery Exception'), + ('FAILED', 'Failed'), + ] + + waybill = models.CharField(max_length=100, unique=True, db_index=True) + order_number = models.CharField(max_length=100, db_index=True) + vendor = models.CharField(max_length=50, default='DELHIVERY') + payment_mode = models.CharField(max_length=20, choices=PAYMENT_MODE_CHOICES, default='Prepaid') + shipping_mode = models.CharField(max_length=20, choices=SERVICE_CHOICES, default='Surface') + status = models.CharField(max_length=30, choices=STATUS_CHOICES, default='MANIFESTED') + current_tracking_status = models.CharField(max_length=100, blank=True, default='') + consignee_name = models.CharField(max_length=150) + consignee_phone = models.CharField(max_length=20) + consignee_pincode = models.CharField(max_length=10) + pickup_location_name = models.CharField(max_length=100, blank=True, default='') + raw_response = models.TextField(blank=True, default='') + created_at = models.DateTimeField(auto_now_add=True) + + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering = ['-created_at'] + + def __str__(self): + return f"Delhivery Shipment {self.waybill} (Order: {self.order_number}) - {self.status}" + + +class DelhiveryActivityLog(models.Model): + STATUS_CHOICES = [ + ('SUCCESS', 'Success (2xx)'), + ('ERROR', 'Error (4xx/5xx)'), + ('WARNING', 'Warning'), + ] + + action_name = models.CharField(max_length=100) + endpoint_url = models.CharField(max_length=500) + http_method = models.CharField(max_length=10, default='POST') + request_headers = models.TextField(blank=True, default='') + request_body = models.TextField(blank=True, default='') + response_status_code = models.IntegerField(default=200) + response_body = models.TextField(blank=True, default='') + execution_time_ms = models.FloatField(default=0.0) + status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='SUCCESS') + timestamp = models.DateTimeField(auto_now_add=True) + notes = models.TextField(blank=True, default='') + + class Meta: + ordering = ['-timestamp'] + + def __str__(self): + return f"[Delhivery] {self.action_name} - {self.response_status_code} ({self.timestamp.strftime('%H:%M:%S')})" diff --git a/delhivery/urls.py b/delhivery/urls.py new file mode 100644 index 0000000..88ac6f6 --- /dev/null +++ b/delhivery/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('api/v1/delhivery//', views.DelhiveryRouterView.as_view(), name='api_delhivery_router'), +] diff --git a/delhivery/views.py b/delhivery/views.py new file mode 100644 index 0000000..2bf7ea7 --- /dev/null +++ b/delhivery/views.py @@ -0,0 +1,92 @@ +import json +from django.http import JsonResponse, HttpResponse +from django.views import View +from django.views.decorators.csrf import csrf_exempt +from django.utils.decorators import method_decorator +from .client import DelhiveryAPIClient +from .models import DelhiveryActivityLog, DelhiveryCredential, DelhiveryShipment + +@method_decorator(csrf_exempt, name='dispatch') +class DelhiveryRouterView(View): + """ + REST API Gateway Router for Delhivery B2C Logistics. + Handles serviceability, order booking, tracking, pricing estimate, labels, + pickup requests, cancellations, and NDR actions. + """ + def dispatch(self, request, *args, **kwargs): + return super().dispatch(request, *args, **kwargs) + + def post(self, request, action_name): + return self._handle_action(request, action_name) + + def get(self, request, action_name): + return self._handle_action(request, action_name) + + def _handle_action(self, request, action_name): + try: + data = json.loads(request.body.decode('utf-8')) if request.body else {} + except Exception: + data = {} + + client = DelhiveryAPIClient() + + try: + if action_name == 'serviceability': + pincode = request.GET.get('pincode') or data.get('pincode') or '560077' + res = client.check_serviceability(pincode) + return JsonResponse(res, status=200) + + elif action_name in ['create-shipment', 'create_shipment']: + res = client.create_shipment(data.get('payload', data)) + return JsonResponse(res, status=200) + + elif action_name == 'track': + waybill = request.GET.get('waybill') or data.get('waybill') or '1234567890123' + res = client.track_shipment(waybill) + return JsonResponse(res, status=200) + + elif action_name == 'estimate': + res = client.get_rate_estimate( + origin_pin=data.get('origin_pin', '560077'), + dest_pin=data.get('dest_pin', '110009'), + weight=data.get('weight', 500), + mode=data.get('mode', 'S'), + payment_type=data.get('payment_type', 'Prepaid') + ) + return JsonResponse(res, status=200) + + elif action_name == 'label': + waybills = data.get('waybills', ['1234567890123']) + pdf = data.get('pdf', False) + res = client.download_label(waybills, pdf=pdf) + if pdf: + return HttpResponse(res, content_type='application/pdf') + return JsonResponse(res, status=200) + + elif action_name in ['pickup-request', 'pickup_request']: + res = client.create_pickup_request( + pickup_time=data.get('pickup_time', '14:00:00'), + pickup_date=data.get('pickup_date', '2026-10-11'), + pickup_location=data.get('pickup_location', 'Default Warehouse'), + expected_package_count=data.get('expected_package_count', 1) + ) + return JsonResponse(res, status=200) + + elif action_name in ['cancel-shipment', 'cancel_shipment']: + waybill = data.get('waybill') or request.GET.get('waybill') + res = client.cancel_shipment(waybill) + return JsonResponse(res, status=200) + + elif action_name in ['ndr-action', 'ndr_action']: + res = client.take_ndr_action( + waybill=data.get('waybill'), + action=data.get('action', 'RE-ATTEMPT'), + deferred_date=data.get('deferred_date'), + comments=data.get('comments') + ) + return JsonResponse(res, status=200) + + return JsonResponse({'error': f'Delhivery action {action_name} not supported'}, status=400) + + except Exception as e: + return JsonResponse({'status': False, 'error': str(e)}, status=500) diff --git a/documentation/delhivery/b2c_api_spec.md b/documentation/delhivery/b2c_api_spec.md new file mode 100644 index 0000000..9a1138e --- /dev/null +++ b/documentation/delhivery/b2c_api_spec.md @@ -0,0 +1,362 @@ +# Delhivery B2C REST API Documentation + +Comprehensive API integration guide for Delhivery B2C Express & Surface Logistics Platform. + +--- + +## 🔑 1. Authentication & Base URLs + +Delhivery APIs use **Token Authentication**. Pass your API Key in headers or query parameters as specified per endpoint. + +| Environment | Base URL | Header / Parameter | +| :--- | :--- | :--- | +| **Staging / Sandbox** | `https://staging-express.delhivery.com` | `Authorization: Token ` | +| **Production** | `https://track.delhivery.com` | `Authorization: Token ` | + +--- + +## 📍 2. Pincode Serviceability API + +Check if pickup and destination pincodes are serviceable for Express, Surface, and COD delivery. + +- **Endpoint**: `GET /c/api/pin-codes/json/` +- **Headers**: + - `Authorization: Token ` + - `Accept: application/json` +- **Query Parameters**: + - `filter_codes`: Comma-separated pincodes (e.g. `560077,110009`) + - `client`: Client name / Code (optional) + +### Request Example +```http +GET /c/api/pin-codes/json/?filter_codes=560077,110009 HTTP/1.1 +Host: track.delhivery.com +Authorization: Token 7328f980a6eca01fedf37a63e39e44893481f856 +``` + +### Response Example (`200 OK`) +```json +{ + "delivery_codes": [ + { + "postal_code": { + "pin": 560077, + "city": "Bengaluru", + "state_code": "KA", + "country_code": "IN", + "is_oda": "N", + "cod": "Y", + "pickup": "Y", + "pre_paid": "Y", + "cash": "Y", + "repl": "Y" + } + }, + { + "postal_code": { + "pin": 110009, + "city": "Delhi", + "state_code": "DL", + "country_code": "IN", + "is_oda": "N", + "cod": "Y", + "pickup": "Y", + "pre_paid": "Y", + "cash": "Y", + "repl": "Y" + } + } + ] +} +``` + +--- + +## 📦 3. Create Shipment / B2C Order API (CMU API) + +Book forward shipments and generate Delhivery Waybill (AWB) numbers. + +- **Endpoint**: `POST /api/cmu/create.json` +- **Headers**: + - `Authorization: Token ` + - `Content-Type: application/x-www-form-urlencoded` +- **Body**: Form parameter `format=json` and `data=` + +### Payload Schema +```json +{ + "shipments": [ + { + "name": "Ananya Sharma", + "add": "Flat 402, Sunshine Apartments, Indiranagar", + "pin": "560038", + "city": "Bengaluru", + "state": "Karnataka", + "country": "India", + "phone": "9876543210", + "order": "ORD-DELHIVERY-2026-001", + "payment_mode": "COD", + "return_add": "Plot 12, Industrial Area Phase 2", + "return_city": "Bengaluru", + "return_country": "India", + "return_name": "StyleHub Returns Center", + "return_phone": "9123456789", + "return_pin": "560077", + "return_state": "Karnataka", + "products_desc": "Wireless Earbuds", + "hsn_code": "85183011", + "cod_amount": "1499.00", + "order_date": "2026-10-10T18:00:00Z", + "total_amount": "1499.00", + "seller_add": "Plot 12, Industrial Area Phase 2", + "seller_name": "StyleHub Retail Store", + "seller_inv": "INV-2026-9901", + "quantity": "1", + "waybill": "", + "shipment_width": "10", + "shipment_height": "10", + "weight": "500", + "seller_gst_tin": "29ABCDE1234F1Z5", + "shipping_mode": "Surface", + "address_type": "home" + } + ], + "pickup_location": { + "name": "StyleHub Retail Store", + "add": "Plot 12, Industrial Area Phase 2", + "city": "Bengaluru", + "pin": "560077", + "country": "India", + "phone": "9123456789" + } +} +``` + +### Response Example (`200 OK`) +```json +{ + "cash_pickups": 0, + "cod_count": 1, + "cod_amount": 1499.0, + "prepaid_count": 0, + "packages": [ + { + "status": "Success", + "client": "TRADHOX_SELLER", + "sort_code": "BLR/IND", + "remarks": [], + "waybill": "1234567890123", + "cod_amount": 1499.0, + "payment": "COD", + "serviceable": true, + "refnum": "ORD-DELHIVERY-2026-001" + } + ], + "success": true +} +``` + +--- + +## 🚚 4. Real-Time Shipment Tracking API + +Track shipment status, package journey milestones, and courier delivery scan logs. + +- **Endpoint**: `GET /api/v1/packages/json/` +- **Headers**: + - `Authorization: Token ` +- **Query Parameters**: + - `waybill`: Delhivery AWB/Waybill number (e.g. `1234567890123`) + - `ref_ids`: Order reference ID (optional) + +### Request Example +```http +GET /api/v1/packages/json/?waybill=1234567890123 HTTP/1.1 +Host: track.delhivery.com +Authorization: Token 7328f980a6eca01fedf37a63e39e44893481f856 +``` + +### Response Example (`200 OK`) +```json +{ + "ShipmentData": [ + { + "Shipment": { + "AWB": "1234567890123", + "ReferenceNo": "ORD-DELHIVERY-2026-001", + "Status": { + "Status": "In Transit", + "StatusDateTime": "2026-10-10T14:30:00Z", + "StatusType": "UD", + "Instructions": "Package arrived at origin processing center", + "Scans": [ + { + "ScanDetail": { + "ScanDateTime": "2026-10-10T10:00:00Z", + "ScanType": "Manifested", + "ScannedLocation": "Bengaluru Hub", + "Instructions": "Manifest Created" + } + }, + { + "ScanDetail": { + "ScanDateTime": "2026-10-10T14:30:00Z", + "ScanType": "In Transit", + "ScannedLocation": "Bengaluru Hub", + "Instructions": "In transit to destination facility" + } + } + ] + }, + "Consignee": { + "Name": "Ananya Sharma", + "City": "Bengaluru", + "PinCode": "560038" + } + } + } + ] +} +``` + +--- + +## 💰 5. Shipping Cost / Rate Calculation API + +Calculate estimated freight charges, fuel surcharge, ODA charges, and total shipping cost. + +- **Endpoint**: `GET /api/kcs/v1/summary/get` +- **Headers**: + - `Authorization: Token ` +- **Query Parameters**: + - `md`: Mode (`S` for Surface, `E` for Express) + - `ss`: Status (`Delivered` / `RTO`) + - `d_pin`: Destination Pincode + - `o_pin`: Origin Pincode + - `cgm`: Chargeable Gross Weight in grams (e.g. `500`) + - `pt`: Payment Type (`Prepaid` / `COD`) + +### Request Example +```http +GET /api/kcs/v1/summary/get?md=S&ss=Delivered&d_pin=110009&o_pin=560077&cgm=500&pt=Prepaid HTTP/1.1 +Host: track.delhivery.com +Authorization: Token 7328f980a6eca01fedf37a63e39e44893481f856 +``` + +### Response Example (`200 OK`) +```json +{ + "total_amount": 52.5, + "freight_charge": 40.0, + "fuel_surcharge": 8.0, + "gst": 4.5, + "currency": "INR" +} +``` + +--- + +## 🏷️ 6. Shipping Label / Packing Slip API + +Download printable shipping labels for manifested packages. + +- **Endpoint**: `GET /api/p/packing_slip` +- **Headers**: + - `Authorization: Token ` +- **Query Parameters**: + - `wbns`: Comma-separated Waybill numbers (e.g. `1234567890123`) + - `pdf`: `true` for PDF stream or `false` for HTML label JSON + +### Request Example +```http +GET /api/p/packing_slip?wbns=1234567890123&pdf=true HTTP/1.1 +Host: track.delhivery.com +Authorization: Token 7328f980a6eca01fedf37a63e39e44893481f856 +``` + +--- + +## 🚚 7. Pickup Request Creation API + +Schedule a courier pickup at origin seller warehouse. + +- **Endpoint**: `POST /fm/request/create/` +- **Headers**: + - `Authorization: Token ` + - `Content-Type: application/json` + +### Request Body Example +```json +{ + "pickup_time": "14:00:00", + "pickup_date": "2026-10-11", + "pickup_location": "StyleHub Retail Store", + "expected_package_count": 5 +} +``` + +### Response Example (`200 OK`) +```json +{ + "status": "success", + "pickup_id": 987654, + "message": "Pickup request scheduled successfully for 2026-10-11 at 14:00:00" +} +``` + +--- + +## ❌ 8. Order Edit / Cancellation API + +Cancel or edit shipment details prior to pickup dispatch. + +- **Endpoint**: `POST /api/p/edit` +- **Headers**: + - `Authorization: Token ` + - `Content-Type: application/json` + +### Request Body Example +```json +{ + "waybill": "1234567890123", + "cancellation": "true" +} +``` + +### Response Example (`200 OK`) +```json +{ + "status": true, + "waybill": "1234567890123", + "remark": "Shipment cancelled successfully" +} +``` + +--- + +## 🔄 9. NDR & Re-Attempt Management API + +Take action on Non-Delivery Reports (NDR exceptions). + +- **Endpoint**: `POST /api/backend/ndr/action/` +- **Headers**: + - `Authorization: Token ` + - `Content-Type: application/json` + +### Request Body Example +```json +{ + "waybill": "1234567890123", + "action": "RE-ATTEMPT", + "deferred_date": "2026-10-12", + "comments": "Customer requested delivery on Monday" +} +``` + +### Response Example (`200 OK`) +```json +{ + "status": "success", + "message": "NDR action recorded for waybill 1234567890123" +} +``` diff --git a/scratch/bundle.js b/scratch/bundle.js new file mode 100644 index 0000000..67e64e8 --- /dev/null +++ b/scratch/bundle.js @@ -0,0 +1,104 @@ +var _c=Object.defineProperty;var bc=(c,d,f)=>d in c?_c(c,d,{enumerable:!0,configurable:!0,writable:!0,value:f}):c[d]=f;var vc=(c,d,f)=>(bc(c,typeof d!="symbol"?d+"":d,f),f);var __glob_0_0$1=Object.freeze(Object.defineProperty({__proto__:null,get getGlobalDirectiveAll(){return getGlobalDirectiveAll},get registerGlobalDirective(){return registerGlobalDirective}},Symbol.toStringTag,{value:"Module"}));const p$1=function(){const d=document.createElement("link").relList;if(d&&d.supports&&d.supports("modulepreload"))return;for(const g of document.querySelectorAll('link[rel="modulepreload"]'))m(g);new MutationObserver(g=>{for(const v of g)if(v.type==="childList")for(const y of v.addedNodes)y.tagName==="LINK"&&y.rel==="modulepreload"&&m(y)}).observe(document,{childList:!0,subtree:!0});function f(g){const v={};return g.integrity&&(v.integrity=g.integrity),g.referrerpolicy&&(v.referrerPolicy=g.referrerpolicy),g.crossorigin==="use-credentials"?v.credentials="include":g.crossorigin==="anonymous"?v.credentials="omit":v.credentials="same-origin",v}function m(g){if(g.ep)return;g.ep=!0;const v=f(g);fetch(g.href,v)}};p$1();var index="";function makeMap(c,d){const f=Object.create(null),m=c.split(",");for(let g=0;g!!f[g.toLowerCase()]:g=>!!f[g]}const specialBooleanAttrs="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",isSpecialBooleanAttr=makeMap(specialBooleanAttrs);function includeBooleanAttr(c){return!!c||c===""}function normalizeStyle(c){if(isArray$e(c)){const d={};for(let f=0;f{if(f){const m=f.split(propertyDelimiterRE);m.length>1&&(d[m[0].trim()]=m[1].trim())}}),d}function normalizeClass(c){let d="";if(isString$2(c))d=c;else if(isArray$e(c))for(let f=0;flooseEqual(f,d))}const toDisplayString$1=c=>isString$2(c)?c:c==null?"":isArray$e(c)||isObject$7(c)&&(c.toString===objectToString$4||!isFunction$5(c.toString))?JSON.stringify(c,replacer,2):String(c),replacer=(c,d)=>d&&d.__v_isRef?replacer(c,d.value):isMap(d)?{[`Map(${d.size})`]:[...d.entries()].reduce((f,[m,g])=>(f[`${m} =>`]=g,f),{})}:isSet(d)?{[`Set(${d.size})`]:[...d.values()]}:isObject$7(d)&&!isArray$e(d)&&!isPlainObject$2(d)?String(d):d,EMPTY_OBJ=Object.freeze({}),EMPTY_ARR=Object.freeze([]),NOOP=()=>{},NO=()=>!1,onRE=/^on[^a-z]/,isOn=c=>onRE.test(c),isModelListener=c=>c.startsWith("onUpdate:"),extend$1=Object.assign,remove=(c,d)=>{const f=c.indexOf(d);f>-1&&c.splice(f,1)},hasOwnProperty$c=Object.prototype.hasOwnProperty,hasOwn$1=(c,d)=>hasOwnProperty$c.call(c,d),isArray$e=Array.isArray,isMap=c=>toTypeString$1(c)==="[object Map]",isSet=c=>toTypeString$1(c)==="[object Set]",isDate$3=c=>toTypeString$1(c)==="[object Date]",isFunction$5=c=>typeof c=="function",isString$2=c=>typeof c=="string",isSymbol$5=c=>typeof c=="symbol",isObject$7=c=>c!==null&&typeof c=="object",isPromise=c=>isObject$7(c)&&isFunction$5(c.then)&&isFunction$5(c.catch),objectToString$4=Object.prototype.toString,toTypeString$1=c=>objectToString$4.call(c),toRawType=c=>toTypeString$1(c).slice(8,-1),isPlainObject$2=c=>toTypeString$1(c)==="[object Object]",isIntegerKey=c=>isString$2(c)&&c!=="NaN"&&c[0]!=="-"&&""+parseInt(c,10)===c,isReservedProp=makeMap(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),isBuiltInDirective=makeMap("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),cacheStringFunction=c=>{const d=Object.create(null);return f=>d[f]||(d[f]=c(f))},camelizeRE=/-(\w)/g,camelize=cacheStringFunction(c=>c.replace(camelizeRE,(d,f)=>f?f.toUpperCase():"")),hyphenateRE=/\B([A-Z])/g,hyphenate=cacheStringFunction(c=>c.replace(hyphenateRE,"-$1").toLowerCase()),capitalize$3=cacheStringFunction(c=>c.charAt(0).toUpperCase()+c.slice(1)),toHandlerKey=cacheStringFunction(c=>c?`on${capitalize$3(c)}`:""),hasChanged=(c,d)=>!Object.is(c,d),invokeArrayFns=(c,d)=>{for(let f=0;f{Object.defineProperty(c,d,{configurable:!0,enumerable:!1,value:f})},toNumber=c=>{const d=parseFloat(c);return isNaN(d)?c:d};let _globalThis$1;const getGlobalThis$1=()=>_globalThis$1||(_globalThis$1=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});function warn$3(c,...d){console.warn(`[Vue warn] ${c}`,...d)}let activeEffectScope;class EffectScope{constructor(d=!1){this.active=!0,this.effects=[],this.cleanups=[],!d&&activeEffectScope&&(this.parent=activeEffectScope,this.index=(activeEffectScope.scopes||(activeEffectScope.scopes=[])).push(this)-1)}run(d){if(this.active){const f=activeEffectScope;try{return activeEffectScope=this,d()}finally{activeEffectScope=f}}else warn$3("cannot run an inactive effect scope.")}on(){activeEffectScope=this}off(){activeEffectScope=this.parent}stop(d){if(this.active){let f,m;for(f=0,m=this.effects.length;f{const d=new Set(c);return d.w=0,d.n=0,d},wasTracked=c=>(c.w&trackOpBit)>0,newTracked=c=>(c.n&trackOpBit)>0,initDepMarkers=({deps:c})=>{if(c.length)for(let d=0;d{const{deps:d}=c;if(d.length){let f=0;for(let m=0;m{(k==="length"||k>=m)&&_.push(C)});else switch(f!==void 0&&_.push(y.get(f)),d){case"add":isArray$e(c)?isIntegerKey(f)&&_.push(y.get("length")):(_.push(y.get(ITERATE_KEY)),isMap(c)&&_.push(y.get(MAP_KEY_ITERATE_KEY)));break;case"delete":isArray$e(c)||(_.push(y.get(ITERATE_KEY)),isMap(c)&&_.push(y.get(MAP_KEY_ITERATE_KEY)));break;case"set":isMap(c)&&_.push(y.get(ITERATE_KEY));break}const b={target:c,type:d,key:f,newValue:m,oldValue:g,oldTarget:v};if(_.length===1)_[0]&&triggerEffects(_[0],b);else{const C=[];for(const k of _)k&&C.push(...k);triggerEffects(createDep(C),b)}}function triggerEffects(c,d){const f=isArray$e(c)?c:[...c];for(const m of f)m.computed&&triggerEffect(m,d);for(const m of f)m.computed||triggerEffect(m,d)}function triggerEffect(c,d){(c!==activeEffect||c.allowRecurse)&&(c.onTrigger&&c.onTrigger(extend$1({effect:c},d)),c.scheduler?c.scheduler():c.run())}const isNonTrackableKeys=makeMap("__proto__,__v_isRef,__isVue"),builtInSymbols=new Set(Object.getOwnPropertyNames(Symbol).filter(c=>c!=="arguments"&&c!=="caller").map(c=>Symbol[c]).filter(isSymbol$5)),get$2=createGetter(),shallowGet=createGetter(!1,!0),readonlyGet=createGetter(!0),shallowReadonlyGet=createGetter(!0,!0),arrayInstrumentations=createArrayInstrumentations();function createArrayInstrumentations(){const c={};return["includes","indexOf","lastIndexOf"].forEach(d=>{c[d]=function(...f){const m=toRaw(this);for(let v=0,y=this.length;v{c[d]=function(...f){pauseTracking();const m=toRaw(this)[d].apply(this,f);return resetTracking(),m}}),c}function createGetter(c=!1,d=!1){return function(m,g,v){if(g==="__v_isReactive")return!c;if(g==="__v_isReadonly")return c;if(g==="__v_isShallow")return d;if(g==="__v_raw"&&v===(c?d?shallowReadonlyMap:readonlyMap:d?shallowReactiveMap:reactiveMap).get(m))return m;const y=isArray$e(m);if(!c&&y&&hasOwn$1(arrayInstrumentations,g))return Reflect.get(arrayInstrumentations,g,v);const _=Reflect.get(m,g,v);return(isSymbol$5(g)?builtInSymbols.has(g):isNonTrackableKeys(g))||(c||track(m,"get",g),d)?_:isRef(_)?y&&isIntegerKey(g)?_:_.value:isObject$7(_)?c?readonly(_):reactive(_):_}}const set$3=createSetter(),shallowSet=createSetter(!0);function createSetter(c=!1){return function(f,m,g,v){let y=f[m];if(isReadonly(y)&&isRef(y)&&!isRef(g))return!1;if(!c&&!isReadonly(g)&&(isShallow$1(g)||(g=toRaw(g),y=toRaw(y)),!isArray$e(f)&&isRef(y)&&!isRef(g)))return y.value=g,!0;const _=isArray$e(f)&&isIntegerKey(m)?Number(m)c,getProto=c=>Reflect.getPrototypeOf(c);function get$1$1(c,d,f=!1,m=!1){c=c.__v_raw;const g=toRaw(c),v=toRaw(d);f||(d!==v&&track(g,"get",d),track(g,"get",v));const{has:y}=getProto(g),_=m?toShallow:f?toReadonly:toReactive;if(y.call(g,d))return _(c.get(d));if(y.call(g,v))return _(c.get(v));c!==g&&c.get(d)}function has$1$1(c,d=!1){const f=this.__v_raw,m=toRaw(f),g=toRaw(c);return d||(c!==g&&track(m,"has",c),track(m,"has",g)),c===g?f.has(c):f.has(c)||f.has(g)}function size(c,d=!1){return c=c.__v_raw,!d&&track(toRaw(c),"iterate",ITERATE_KEY),Reflect.get(c,"size",c)}function add(c){c=toRaw(c);const d=toRaw(this);return getProto(d).has.call(d,c)||(d.add(c),trigger(d,"add",c,c)),this}function set$1$1(c,d){d=toRaw(d);const f=toRaw(this),{has:m,get:g}=getProto(f);let v=m.call(f,c);v?checkIdentityKeys(f,m,c):(c=toRaw(c),v=m.call(f,c));const y=g.call(f,c);return f.set(c,d),v?hasChanged(d,y)&&trigger(f,"set",c,d,y):trigger(f,"add",c,d),this}function deleteEntry(c){const d=toRaw(this),{has:f,get:m}=getProto(d);let g=f.call(d,c);g?checkIdentityKeys(d,f,c):(c=toRaw(c),g=f.call(d,c));const v=m?m.call(d,c):void 0,y=d.delete(c);return g&&trigger(d,"delete",c,void 0,v),y}function clear(){const c=toRaw(this),d=c.size!==0,f=isMap(c)?new Map(c):new Set(c),m=c.clear();return d&&trigger(c,"clear",void 0,void 0,f),m}function createForEach(c,d){return function(m,g){const v=this,y=v.__v_raw,_=toRaw(y),b=d?toShallow:c?toReadonly:toReactive;return!c&&track(_,"iterate",ITERATE_KEY),y.forEach((C,k)=>m.call(g,b(C),b(k),v))}}function createIterableMethod(c,d,f){return function(...m){const g=this.__v_raw,v=toRaw(g),y=isMap(v),_=c==="entries"||c===Symbol.iterator&&y,b=c==="keys"&&y,C=g[c](...m),k=f?toShallow:d?toReadonly:toReactive;return!d&&track(v,"iterate",b?MAP_KEY_ITERATE_KEY:ITERATE_KEY),{next(){const{value:$,done:S}=C.next();return S?{value:$,done:S}:{value:_?[k($[0]),k($[1])]:k($),done:S}},[Symbol.iterator](){return this}}}}function createReadonlyMethod(c){return function(...d){{const f=d[0]?`on key "${d[0]}" `:"";console.warn(`${capitalize$3(c)} operation ${f}failed: target is readonly.`,toRaw(this))}return c==="delete"?!1:this}}function createInstrumentations(){const c={get(v){return get$1$1(this,v)},get size(){return size(this)},has:has$1$1,add,set:set$1$1,delete:deleteEntry,clear,forEach:createForEach(!1,!1)},d={get(v){return get$1$1(this,v,!1,!0)},get size(){return size(this)},has:has$1$1,add,set:set$1$1,delete:deleteEntry,clear,forEach:createForEach(!1,!0)},f={get(v){return get$1$1(this,v,!0)},get size(){return size(this,!0)},has(v){return has$1$1.call(this,v,!0)},add:createReadonlyMethod("add"),set:createReadonlyMethod("set"),delete:createReadonlyMethod("delete"),clear:createReadonlyMethod("clear"),forEach:createForEach(!0,!1)},m={get(v){return get$1$1(this,v,!0,!0)},get size(){return size(this,!0)},has(v){return has$1$1.call(this,v,!0)},add:createReadonlyMethod("add"),set:createReadonlyMethod("set"),delete:createReadonlyMethod("delete"),clear:createReadonlyMethod("clear"),forEach:createForEach(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(v=>{c[v]=createIterableMethod(v,!1,!1),f[v]=createIterableMethod(v,!0,!1),d[v]=createIterableMethod(v,!1,!0),m[v]=createIterableMethod(v,!0,!0)}),[c,f,d,m]}const[mutableInstrumentations,readonlyInstrumentations,shallowInstrumentations,shallowReadonlyInstrumentations]=createInstrumentations();function createInstrumentationGetter(c,d){const f=d?c?shallowReadonlyInstrumentations:shallowInstrumentations:c?readonlyInstrumentations:mutableInstrumentations;return(m,g,v)=>g==="__v_isReactive"?!c:g==="__v_isReadonly"?c:g==="__v_raw"?m:Reflect.get(hasOwn$1(f,g)&&g in m?f:m,g,v)}const mutableCollectionHandlers={get:createInstrumentationGetter(!1,!1)},shallowCollectionHandlers={get:createInstrumentationGetter(!1,!0)},readonlyCollectionHandlers={get:createInstrumentationGetter(!0,!1)},shallowReadonlyCollectionHandlers={get:createInstrumentationGetter(!0,!0)};function checkIdentityKeys(c,d,f){const m=toRaw(f);if(m!==f&&d.call(c,m)){const g=toRawType(c);console.warn(`Reactive ${g} contains both the raw and reactive versions of the same object${g==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}const reactiveMap=new WeakMap,shallowReactiveMap=new WeakMap,readonlyMap=new WeakMap,shallowReadonlyMap=new WeakMap;function targetTypeMap(c){switch(c){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function getTargetType(c){return c.__v_skip||!Object.isExtensible(c)?0:targetTypeMap(toRawType(c))}function reactive(c){return isReadonly(c)?c:createReactiveObject(c,!1,mutableHandlers,mutableCollectionHandlers,reactiveMap)}function shallowReactive(c){return createReactiveObject(c,!1,shallowReactiveHandlers,shallowCollectionHandlers,shallowReactiveMap)}function readonly(c){return createReactiveObject(c,!0,readonlyHandlers,readonlyCollectionHandlers,readonlyMap)}function shallowReadonly(c){return createReactiveObject(c,!0,shallowReadonlyHandlers,shallowReadonlyCollectionHandlers,shallowReadonlyMap)}function createReactiveObject(c,d,f,m,g){if(!isObject$7(c))return console.warn(`value cannot be made reactive: ${String(c)}`),c;if(c.__v_raw&&!(d&&c.__v_isReactive))return c;const v=g.get(c);if(v)return v;const y=getTargetType(c);if(y===0)return c;const _=new Proxy(c,y===2?m:f);return g.set(c,_),_}function isReactive(c){return isReadonly(c)?isReactive(c.__v_raw):!!(c&&c.__v_isReactive)}function isReadonly(c){return!!(c&&c.__v_isReadonly)}function isShallow$1(c){return!!(c&&c.__v_isShallow)}function isProxy(c){return isReactive(c)||isReadonly(c)}function toRaw(c){const d=c&&c.__v_raw;return d?toRaw(d):c}function markRaw(c){return def(c,"__v_skip",!0),c}const toReactive=c=>isObject$7(c)?reactive(c):c,toReadonly=c=>isObject$7(c)?readonly(c):c;function trackRefValue(c){shouldTrack&&activeEffect&&(c=toRaw(c),trackEffects(c.dep||(c.dep=createDep()),{target:c,type:"get",key:"value"}))}function triggerRefValue(c,d){c=toRaw(c),c.dep&&triggerEffects(c.dep,{target:c,type:"set",key:"value",newValue:d})}function isRef(c){return!!(c&&c.__v_isRef===!0)}function ref(c){return createRef(c,!1)}function shallowRef(c){return createRef(c,!0)}function createRef(c,d){return isRef(c)?c:new RefImpl(c,d)}class RefImpl{constructor(d,f){this.__v_isShallow=f,this.dep=void 0,this.__v_isRef=!0,this._rawValue=f?d:toRaw(d),this._value=f?d:toReactive(d)}get value(){return trackRefValue(this),this._value}set value(d){d=this.__v_isShallow?d:toRaw(d),hasChanged(d,this._rawValue)&&(this._rawValue=d,this._value=this.__v_isShallow?d:toReactive(d),triggerRefValue(this,d))}}function unref(c){return isRef(c)?c.value:c}const shallowUnwrapHandlers={get:(c,d,f)=>unref(Reflect.get(c,d,f)),set:(c,d,f,m)=>{const g=c[d];return isRef(g)&&!isRef(f)?(g.value=f,!0):Reflect.set(c,d,f,m)}};function proxyRefs(c){return isReactive(c)?c:new Proxy(c,shallowUnwrapHandlers)}function toRefs(c){isProxy(c)||console.warn("toRefs() expects a reactive object but received a plain one.");const d=isArray$e(c)?new Array(c.length):{};for(const f in c)d[f]=toRef(c,f);return d}class ObjectRefImpl{constructor(d,f,m){this._object=d,this._key=f,this._defaultValue=m,this.__v_isRef=!0}get value(){const d=this._object[this._key];return d===void 0?this._defaultValue:d}set value(d){this._object[this._key]=d}}function toRef(c,d,f){const m=c[d];return isRef(m)?m:new ObjectRefImpl(c,d,f)}class ComputedRefImpl{constructor(d,f,m,g){this._setter=f,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new ReactiveEffect(d,()=>{this._dirty||(this._dirty=!0,triggerRefValue(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!g,this.__v_isReadonly=m}get value(){const d=toRaw(this);return trackRefValue(d),(d._dirty||!d._cacheable)&&(d._dirty=!1,d._value=d.effect.run()),d._value}set value(d){this._setter(d)}}function computed$1(c,d,f=!1){let m,g;const v=isFunction$5(c);v?(m=c,g=()=>{console.warn("Write operation failed: computed value is readonly")}):(m=c.get,g=c.set);const y=new ComputedRefImpl(m,g,v||!g,f);return d&&!f&&(y.effect.onTrack=d.onTrack,y.effect.onTrigger=d.onTrigger),y}const stack=[];function pushWarningContext(c){stack.push(c)}function popWarningContext(){stack.pop()}function warn$2(c,...d){pauseTracking();const f=stack.length?stack[stack.length-1].component:null,m=f&&f.appContext.config.warnHandler,g=getComponentTrace();if(m)callWithErrorHandling(m,f,11,[c+d.join(""),f&&f.proxy,g.map(({vnode:v})=>`at <${formatComponentName(f,v.type)}>`).join(` +`),g]);else{const v=[`[Vue warn]: ${c}`,...d];g.length&&v.push(` +`,...formatTrace(g)),console.warn(...v)}resetTracking()}function getComponentTrace(){let c=stack[stack.length-1];if(!c)return[];const d=[];for(;c;){const f=d[0];f&&f.vnode===c?f.recurseCount++:d.push({vnode:c,recurseCount:0});const m=c.component&&c.component.parent;c=m&&m.vnode}return d}function formatTrace(c){const d=[];return c.forEach((f,m)=>{d.push(...m===0?[]:[` +`],...formatTraceEntry(f))}),d}function formatTraceEntry({vnode:c,recurseCount:d}){const f=d>0?`... (${d} recursive calls)`:"",m=c.component?c.component.parent==null:!1,g=` at <${formatComponentName(c.component,c.type,m)}`,v=">"+f;return c.props?[g,...formatProps(c.props),v]:[g+v]}function formatProps(c){const d=[],f=Object.keys(c);return f.slice(0,3).forEach(m=>{d.push(...formatProp(m,c[m]))}),f.length>3&&d.push(" ..."),d}function formatProp(c,d,f){return isString$2(d)?(d=JSON.stringify(d),f?d:[`${c}=${d}`]):typeof d=="number"||typeof d=="boolean"||d==null?f?d:[`${c}=${d}`]:isRef(d)?(d=formatProp(c,toRaw(d.value),!0),f?d:[`${c}=Ref<`,d,">"]):isFunction$5(d)?[`${c}=fn${d.name?`<${d.name}>`:""}`]:(d=toRaw(d),f?d:[`${c}=`,d])}const ErrorTypeStrings={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",[0]:"setup function",[1]:"render function",[2]:"watcher getter",[3]:"watcher callback",[4]:"watcher cleanup function",[5]:"native event handler",[6]:"component event handler",[7]:"vnode hook",[8]:"directive hook",[9]:"transition hook",[10]:"app errorHandler",[11]:"app warnHandler",[12]:"ref function",[13]:"async component loader",[14]:"scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core"};function callWithErrorHandling(c,d,f,m){let g;try{g=m?c(...m):c()}catch(v){handleError(v,d,f)}return g}function callWithAsyncErrorHandling(c,d,f,m){if(isFunction$5(c)){const v=callWithErrorHandling(c,d,f,m);return v&&isPromise(v)&&v.catch(y=>{handleError(y,d,f)}),v}const g=[];for(let v=0;v>>1;getId(queue[m])flushIndex&&queue.splice(d,1)}function queueCb(c,d,f,m){isArray$e(c)?f.push(...c):(!d||!d.includes(c,c.allowRecurse?m+1:m))&&f.push(c),queueFlush()}function queuePreFlushCb(c){queueCb(c,activePreFlushCbs,pendingPreFlushCbs,preFlushIndex)}function queuePostFlushCb(c){queueCb(c,activePostFlushCbs,pendingPostFlushCbs,postFlushIndex)}function flushPreFlushCbs(c,d=null){if(pendingPreFlushCbs.length){for(currentPreFlushParentJob=d,activePreFlushCbs=[...new Set(pendingPreFlushCbs)],pendingPreFlushCbs.length=0,c=c||new Map,preFlushIndex=0;preFlushIndexgetId(f)-getId(m)),postFlushIndex=0;postFlushIndexc.id==null?1/0:c.id;function flushJobs(c){isFlushPending=!1,isFlushing=!0,c=c||new Map,flushPreFlushCbs(c),queue.sort((f,m)=>getId(f)-getId(m));const d=f=>checkRecursiveUpdates(c,f);try{for(flushIndex=0;flushIndexRECURSION_LIMIT){const m=d.ownerInstance,g=m&&getComponentName(m.type);return warn$2(`Maximum recursive updates exceeded${g?` in component <${g}>`:""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`),!0}else c.set(d,f+1)}}let isHmrUpdating=!1;const hmrDirtyComponents=new Set;getGlobalThis$1().__VUE_HMR_RUNTIME__={createRecord:tryWrap(createRecord),rerender:tryWrap(rerender),reload:tryWrap(reload)};const map$1=new Map;function registerHMR(c){const d=c.type.__hmrId;let f=map$1.get(d);f||(createRecord(d,c.type),f=map$1.get(d)),f.instances.add(c)}function unregisterHMR(c){map$1.get(c.type.__hmrId).instances.delete(c)}function createRecord(c,d){return map$1.has(c)?!1:(map$1.set(c,{initialDef:normalizeClassComponent(d),instances:new Set}),!0)}function normalizeClassComponent(c){return isClassComponent(c)?c.__vccOpts:c}function rerender(c,d){const f=map$1.get(c);!f||(f.initialDef.render=d,[...f.instances].forEach(m=>{d&&(m.render=d,normalizeClassComponent(m.type).render=d),m.renderCache=[],isHmrUpdating=!0,m.update(),isHmrUpdating=!1}))}function reload(c,d){const f=map$1.get(c);if(!f)return;d=normalizeClassComponent(d),updateComponentDef(f.initialDef,d);const m=[...f.instances];for(const g of m){const v=normalizeClassComponent(g.type);hmrDirtyComponents.has(v)||(v!==f.initialDef&&updateComponentDef(v,d),hmrDirtyComponents.add(v)),g.appContext.optionsCache.delete(g.type),g.ceReload?(hmrDirtyComponents.add(v),g.ceReload(d.styles),hmrDirtyComponents.delete(v)):g.parent?(queueJob(g.parent.update),g.parent.type.__asyncLoader&&g.parent.ceReload&&g.parent.ceReload(d.styles)):g.appContext.reload?g.appContext.reload():typeof window!="undefined"?window.location.reload():console.warn("[HMR] Root or manually mounted instance modified. Full reload required.")}queuePostFlushCb(()=>{for(const g of m)hmrDirtyComponents.delete(normalizeClassComponent(g.type))})}function updateComponentDef(c,d){extend$1(c,d);for(const f in c)f!=="__file"&&!(f in d)&&delete c[f]}function tryWrap(c){return(d,f)=>{try{return c(d,f)}catch(m){console.error(m),console.warn("[HMR] Something went wrong during Vue component hot-reload. Full reload required.")}}}let devtools$1,buffer=[],devtoolsNotInstalled=!1;function emit(c,...d){devtools$1?devtools$1.emit(c,...d):devtoolsNotInstalled||buffer.push({event:c,args:d})}function setDevtoolsHook(c,d){var f,m;devtools$1=c,devtools$1?(devtools$1.enabled=!0,buffer.forEach(({event:g,args:v})=>devtools$1.emit(g,...v)),buffer=[]):typeof window!="undefined"&&window.HTMLElement&&!(!((m=(f=window.navigator)===null||f===void 0?void 0:f.userAgent)===null||m===void 0)&&m.includes("jsdom"))?((d.__VUE_DEVTOOLS_HOOK_REPLAY__=d.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(v=>{setDevtoolsHook(v,d)}),setTimeout(()=>{devtools$1||(d.__VUE_DEVTOOLS_HOOK_REPLAY__=null,devtoolsNotInstalled=!0,buffer=[])},3e3)):(devtoolsNotInstalled=!0,buffer=[])}function devtoolsInitApp(c,d){emit("app:init",c,d,{Fragment,Text,Comment,Static})}function devtoolsUnmountApp(c){emit("app:unmount",c)}const devtoolsComponentAdded=createDevtoolsComponentHook("component:added"),devtoolsComponentUpdated=createDevtoolsComponentHook("component:updated"),devtoolsComponentRemoved=createDevtoolsComponentHook("component:removed");function createDevtoolsComponentHook(c){return d=>{emit(c,d.appContext.app,d.uid,d.parent?d.parent.uid:void 0,d)}}const devtoolsPerfStart=createDevtoolsPerformanceHook("perf:start"),devtoolsPerfEnd=createDevtoolsPerformanceHook("perf:end");function createDevtoolsPerformanceHook(c){return(d,f,m)=>{emit(c,d.appContext.app,d.uid,d,f,m)}}function devtoolsComponentEmit(c,d,f){emit("component:emit",c.appContext.app,c,d,f)}function emit$1(c,d,...f){if(c.isUnmounted)return;const m=c.vnode.props||EMPTY_OBJ;{const{emitsOptions:k,propsOptions:[$]}=c;if(k)if(!(d in k))(!$||!(toHandlerKey(d)in $))&&warn$2(`Component emitted event "${d}" but it is neither declared in the emits option nor as an "${toHandlerKey(d)}" prop.`);else{const S=k[d];isFunction$5(S)&&(S(...f)||warn$2(`Invalid event arguments: event validation failed for event "${d}".`))}}let g=f;const v=d.startsWith("update:"),y=v&&d.slice(7);if(y&&y in m){const k=`${y==="modelValue"?"model":y}Modifiers`,{number:$,trim:S}=m[k]||EMPTY_OBJ;S&&(g=f.map(w=>w.trim())),$&&(g=f.map(toNumber))}devtoolsComponentEmit(c,d,g);{const k=d.toLowerCase();k!==d&&m[toHandlerKey(k)]&&warn$2(`Event "${k}" is emitted in component ${formatComponentName(c,c.type)} but the handler is registered for "${d}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate(d)}" instead of "${d}".`)}let _,b=m[_=toHandlerKey(d)]||m[_=toHandlerKey(camelize(d))];!b&&v&&(b=m[_=toHandlerKey(hyphenate(d))]),b&&callWithAsyncErrorHandling(b,c,6,g);const C=m[_+"Once"];if(C){if(!c.emitted)c.emitted={};else if(c.emitted[_])return;c.emitted[_]=!0,callWithAsyncErrorHandling(C,c,6,g)}}function normalizeEmitsOptions(c,d,f=!1){const m=d.emitsCache,g=m.get(c);if(g!==void 0)return g;const v=c.emits;let y={},_=!1;if(!isFunction$5(c)){const b=C=>{const k=normalizeEmitsOptions(C,d,!0);k&&(_=!0,extend$1(y,k))};!f&&d.mixins.length&&d.mixins.forEach(b),c.extends&&b(c.extends),c.mixins&&c.mixins.forEach(b)}return!v&&!_?(m.set(c,null),null):(isArray$e(v)?v.forEach(b=>y[b]=null):extend$1(y,v),m.set(c,y),y)}function isEmitListener(c,d){return!c||!isOn(d)?!1:(d=d.slice(2).replace(/Once$/,""),hasOwn$1(c,d[0].toLowerCase()+d.slice(1))||hasOwn$1(c,hyphenate(d))||hasOwn$1(c,d))}let currentRenderingInstance=null,currentScopeId=null;function setCurrentRenderingInstance(c){const d=currentRenderingInstance;return currentRenderingInstance=c,currentScopeId=c&&c.type.__scopeId||null,d}function pushScopeId(c){currentScopeId=c}function popScopeId(){currentScopeId=null}const withScopeId=c=>withCtx;function withCtx(c,d=currentRenderingInstance,f){if(!d||c._n)return c;const m=(...g)=>{m._d&&setBlockTracking(-1);const v=setCurrentRenderingInstance(d),y=c(...g);return setCurrentRenderingInstance(v),m._d&&setBlockTracking(1),devtoolsComponentUpdated(d),y};return m._n=!0,m._c=!0,m._d=!0,m}let accessedAttrs=!1;function markAttrsAccessed(){accessedAttrs=!0}function renderComponentRoot(c){const{type:d,vnode:f,proxy:m,withProxy:g,props:v,propsOptions:[y],slots:_,attrs:b,emit:C,render:k,renderCache:$,data:S,setupState:w,ctx:E,inheritAttrs:A}=c;let P,x;const I=setCurrentRenderingInstance(c);accessedAttrs=!1;try{if(f.shapeFlag&4){const B=g||m;P=normalizeVNode(k.call(B,B,$,v,w,S,E)),x=b}else{const B=d;b===v&&markAttrsAccessed(),P=normalizeVNode(B.length>1?B(v,{get attrs(){return markAttrsAccessed(),b},slots:_,emit:C}):B(v,null)),x=d.props?b:getFunctionalFallthrough(b)}}catch(B){blockStack.length=0,handleError(B,c,1),P=createVNode(Comment)}let V=P,R;if(P.patchFlag>0&&P.patchFlag&2048&&([V,R]=getChildRoot(P)),x&&A!==!1){const B=Object.keys(x),{shapeFlag:U}=V;if(B.length){if(U&7)y&&B.some(isModelListener)&&(x=filterModelListeners(x,y)),V=cloneVNode(V,x);else if(!accessedAttrs&&V.type!==Comment){const G=Object.keys(b),X=[],re=[];for(let me=0,ue=G.length;me renders non-element root node that cannot be animated."),V.transition=f.transition),R?R(V):P=V,setCurrentRenderingInstance(I),P}const getChildRoot=c=>{const d=c.children,f=c.dynamicChildren,m=filterSingleRoot(d);if(!m)return[c,void 0];const g=d.indexOf(m),v=f?f.indexOf(m):-1,y=_=>{d[g]=_,f&&(v>-1?f[v]=_:_.patchFlag>0&&(c.dynamicChildren=[...f,_]))};return[normalizeVNode(m),y]};function filterSingleRoot(c){let d;for(let f=0;f{let d;for(const f in c)(f==="class"||f==="style"||isOn(f))&&((d||(d={}))[f]=c[f]);return d},filterModelListeners=(c,d)=>{const f={};for(const m in c)(!isModelListener(m)||!(m.slice(9)in d))&&(f[m]=c[m]);return f},isElementRoot=c=>c.shapeFlag&7||c.type===Comment;function shouldUpdateComponent(c,d,f){const{props:m,children:g,component:v}=c,{props:y,children:_,patchFlag:b}=d,C=v.emitsOptions;if((g||_)&&isHmrUpdating||d.dirs||d.transition)return!0;if(f&&b>=0){if(b&1024)return!0;if(b&16)return m?hasPropsChanged(m,y,C):!!y;if(b&8){const k=d.dynamicProps;for(let $=0;$c.__isSuspense;function queueEffectWithSuspense(c,d){d&&d.pendingBranch?isArray$e(c)?d.effects.push(...c):d.effects.push(c):queuePostFlushCb(c)}function provide(c,d){if(!currentInstance)warn$2("provide() can only be used inside setup().");else{let f=currentInstance.provides;const m=currentInstance.parent&¤tInstance.parent.provides;m===f&&(f=currentInstance.provides=Object.create(m)),f[c]=d}}function inject(c,d,f=!1){const m=currentInstance||currentRenderingInstance;if(m){const g=m.parent==null?m.vnode.appContext&&m.vnode.appContext.provides:m.parent.provides;if(g&&c in g)return g[c];if(arguments.length>1)return f&&isFunction$5(d)?d.call(m.proxy):d;warn$2(`injection "${String(c)}" not found.`)}else warn$2("inject() can only be used inside setup() or functional components.")}function watchEffect(c,d){return doWatch(c,null,d)}const INITIAL_WATCHER_VALUE={};function watch(c,d,f){return isFunction$5(d)||warn$2("`watch(fn, options?)` signature has been moved to a separate API. Use `watchEffect(fn, options?)` instead. `watch` now only supports `watch(source, cb, options?) signature."),doWatch(c,d,f)}function doWatch(c,d,{immediate:f,deep:m,flush:g,onTrack:v,onTrigger:y}=EMPTY_OBJ){d||(f!==void 0&&warn$2('watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.'),m!==void 0&&warn$2('watch() "deep" option is only respected when using the watch(source, callback, options?) signature.'));const _=I=>{warn$2("Invalid watch source: ",I,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},b=currentInstance;let C,k=!1,$=!1;if(isRef(c)?(C=()=>c.value,k=isShallow$1(c)):isReactive(c)?(C=()=>c,m=!0):isArray$e(c)?($=!0,k=c.some(I=>isReactive(I)||isShallow$1(I)),C=()=>c.map(I=>{if(isRef(I))return I.value;if(isReactive(I))return traverse(I);if(isFunction$5(I))return callWithErrorHandling(I,b,2);_(I)})):isFunction$5(c)?d?C=()=>callWithErrorHandling(c,b,2):C=()=>{if(!(b&&b.isUnmounted))return S&&S(),callWithAsyncErrorHandling(c,b,3,[w])}:(C=NOOP,_(c)),d&&m){const I=C;C=()=>traverse(I())}let S,w=I=>{S=x.onStop=()=>{callWithErrorHandling(I,b,4)}};if(isInSSRComponentSetup)return w=NOOP,d?f&&callWithAsyncErrorHandling(d,b,3,[C(),$?[]:void 0,w]):C(),NOOP;let E=$?[]:INITIAL_WATCHER_VALUE;const A=()=>{if(!!x.active)if(d){const I=x.run();(m||k||($?I.some((V,R)=>hasChanged(V,E[R])):hasChanged(I,E)))&&(S&&S(),callWithAsyncErrorHandling(d,b,3,[I,E===INITIAL_WATCHER_VALUE?void 0:E,w]),E=I)}else x.run()};A.allowRecurse=!!d;let P;g==="sync"?P=A:g==="post"?P=()=>queuePostRenderEffect(A,b&&b.suspense):P=()=>queuePreFlushCb(A);const x=new ReactiveEffect(C,P);return x.onTrack=v,x.onTrigger=y,d?f?A():E=x.run():g==="post"?queuePostRenderEffect(x.run.bind(x),b&&b.suspense):x.run(),()=>{x.stop(),b&&b.scope&&remove(b.scope.effects,x)}}function instanceWatch(c,d,f){const m=this.proxy,g=isString$2(c)?c.includes(".")?createPathGetter(m,c):()=>m[c]:c.bind(m,m);let v;isFunction$5(d)?v=d:(v=d.handler,f=d);const y=currentInstance;setCurrentInstance(this);const _=doWatch(g,v.bind(m),f);return y?setCurrentInstance(y):unsetCurrentInstance(),_}function createPathGetter(c,d){const f=d.split(".");return()=>{let m=c;for(let g=0;g{traverse(f,d)});else if(isPlainObject$2(c))for(const f in c)traverse(c[f],d);return c}function useTransitionState(){const c={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return onMounted(()=>{c.isMounted=!0}),onBeforeUnmount(()=>{c.isUnmounting=!0}),c}const TransitionHookValidator=[Function,Array],BaseTransitionImpl={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:TransitionHookValidator,onEnter:TransitionHookValidator,onAfterEnter:TransitionHookValidator,onEnterCancelled:TransitionHookValidator,onBeforeLeave:TransitionHookValidator,onLeave:TransitionHookValidator,onAfterLeave:TransitionHookValidator,onLeaveCancelled:TransitionHookValidator,onBeforeAppear:TransitionHookValidator,onAppear:TransitionHookValidator,onAfterAppear:TransitionHookValidator,onAppearCancelled:TransitionHookValidator},setup(c,{slots:d}){const f=getCurrentInstance(),m=useTransitionState();let g;return()=>{const v=d.default&&getTransitionRawChildren(d.default(),!0);if(!v||!v.length)return;let y=v[0];if(v.length>1){let A=!1;for(const P of v)if(P.type!==Comment){if(A){warn$2(" can only be used on a single element or component. Use for lists.");break}y=P,A=!0}}const _=toRaw(c),{mode:b}=_;if(b&&b!=="in-out"&&b!=="out-in"&&b!=="default"&&warn$2(`invalid mode: ${b}`),m.isLeaving)return emptyPlaceholder(y);const C=getKeepAliveChild(y);if(!C)return emptyPlaceholder(y);const k=resolveTransitionHooks(C,_,m,f);setTransitionHooks(C,k);const $=f.subTree,S=$&&getKeepAliveChild($);let w=!1;const{getTransitionKey:E}=C.type;if(E){const A=E();g===void 0?g=A:A!==g&&(g=A,w=!0)}if(S&&S.type!==Comment&&(!isSameVNodeType(C,S)||w)){const A=resolveTransitionHooks(S,_,m,f);if(setTransitionHooks(S,A),b==="out-in")return m.isLeaving=!0,A.afterLeave=()=>{m.isLeaving=!1,f.update()},emptyPlaceholder(y);b==="in-out"&&C.type!==Comment&&(A.delayLeave=(P,x,I)=>{const V=getLeavingNodesForType(m,S);V[String(S.key)]=S,P._leaveCb=()=>{x(),P._leaveCb=void 0,delete k.delayedLeave},k.delayedLeave=I})}return y}}},BaseTransition=BaseTransitionImpl;function getLeavingNodesForType(c,d){const{leavingVNodes:f}=c;let m=f.get(d.type);return m||(m=Object.create(null),f.set(d.type,m)),m}function resolveTransitionHooks(c,d,f,m){const{appear:g,mode:v,persisted:y=!1,onBeforeEnter:_,onEnter:b,onAfterEnter:C,onEnterCancelled:k,onBeforeLeave:$,onLeave:S,onAfterLeave:w,onLeaveCancelled:E,onBeforeAppear:A,onAppear:P,onAfterAppear:x,onAppearCancelled:I}=d,V=String(c.key),R=getLeavingNodesForType(f,c),B=(X,re)=>{X&&callWithAsyncErrorHandling(X,m,9,re)},U=(X,re)=>{const me=re[1];B(X,re),isArray$e(X)?X.every(ue=>ue.length<=1)&&me():X.length<=1&&me()},G={mode:v,persisted:y,beforeEnter(X){let re=_;if(!f.isMounted)if(g)re=A||_;else return;X._leaveCb&&X._leaveCb(!0);const me=R[V];me&&isSameVNodeType(c,me)&&me.el._leaveCb&&me.el._leaveCb(),B(re,[X])},enter(X){let re=b,me=C,ue=k;if(!f.isMounted)if(g)re=P||b,me=x||C,ue=I||k;else return;let se=!1;const nc=X._enterCb=rc=>{se||(se=!0,rc?B(ue,[X]):B(me,[X]),G.delayedLeave&&G.delayedLeave(),X._enterCb=void 0)};re?U(re,[X,nc]):nc()},leave(X,re){const me=String(c.key);if(X._enterCb&&X._enterCb(!0),f.isUnmounting)return re();B($,[X]);let ue=!1;const se=X._leaveCb=nc=>{ue||(ue=!0,re(),nc?B(E,[X]):B(w,[X]),X._leaveCb=void 0,R[me]===c&&delete R[me])};R[me]=c,S?U(S,[X,se]):se()},clone(X){return resolveTransitionHooks(X,d,f,m)}};return G}function emptyPlaceholder(c){if(isKeepAlive(c))return c=cloneVNode(c),c.children=null,c}function getKeepAliveChild(c){return isKeepAlive(c)?c.children?c.children[0]:void 0:c}function setTransitionHooks(c,d){c.shapeFlag&6&&c.component?setTransitionHooks(c.component.subTree,d):c.shapeFlag&128?(c.ssContent.transition=d.clone(c.ssContent),c.ssFallback.transition=d.clone(c.ssFallback)):c.transition=d}function getTransitionRawChildren(c,d=!1,f){let m=[],g=0;for(let v=0;v1)for(let v=0;v!!c.type.__asyncLoader,isKeepAlive=c=>c.type.__isKeepAlive;function onActivated(c,d){registerKeepAliveHook(c,"a",d)}function onDeactivated(c,d){registerKeepAliveHook(c,"da",d)}function registerKeepAliveHook(c,d,f=currentInstance){const m=c.__wdc||(c.__wdc=()=>{let g=f;for(;g;){if(g.isDeactivated)return;g=g.parent}return c()});if(injectHook(d,m,f),f){let g=f.parent;for(;g&&g.parent;)isKeepAlive(g.parent.vnode)&&injectToKeepAliveRoot(m,d,f,g),g=g.parent}}function injectToKeepAliveRoot(c,d,f,m){const g=injectHook(d,c,m,!0);onUnmounted(()=>{remove(m[d],g)},f)}function injectHook(c,d,f=currentInstance,m=!1){if(f){const g=f[c]||(f[c]=[]),v=d.__weh||(d.__weh=(...y)=>{if(f.isUnmounted)return;pauseTracking(),setCurrentInstance(f);const _=callWithAsyncErrorHandling(d,f,c,y);return unsetCurrentInstance(),resetTracking(),_});return m?g.unshift(v):g.push(v),v}else{const g=toHandlerKey(ErrorTypeStrings[c].replace(/ hook$/,""));warn$2(`${g} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.`)}}const createHook=c=>(d,f=currentInstance)=>(!isInSSRComponentSetup||c==="sp")&&injectHook(c,d,f),onBeforeMount=createHook("bm"),onMounted=createHook("m"),onBeforeUpdate=createHook("bu"),onUpdated=createHook("u"),onBeforeUnmount=createHook("bum"),onUnmounted=createHook("um"),onServerPrefetch=createHook("sp"),onRenderTriggered=createHook("rtg"),onRenderTracked=createHook("rtc");function onErrorCaptured(c,d=currentInstance){injectHook("ec",c,d)}function validateDirectiveName(c){isBuiltInDirective(c)&&warn$2("Do not use built-in directive ids as custom directive id: "+c)}function withDirectives(c,d){const f=currentRenderingInstance;if(f===null)return warn$2("withDirectives can only be used inside render functions."),c;const m=getExposeProxy(f)||f.proxy,g=c.dirs||(c.dirs=[]);for(let v=0;vd(y,_,void 0,v&&v[_]));else{const y=Object.keys(c);g=new Array(y.length);for(let _=0,b=y.length;_1&&(warn$2("SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template."),v=()=>[]),v&&v._c&&(v._d=!1),openBlock();const y=v&&ensureValidVNode(v(f)),_=createBlock(Fragment,{key:f.key||`_${d}`},y||(m?m():[]),y&&c._===1?64:-2);return!g&&_.scopeId&&(_.slotScopeIds=[_.scopeId+"-s"]),v&&v._c&&(v._d=!0),_}function ensureValidVNode(c){return c.some(d=>isVNode$1(d)?!(d.type===Comment||d.type===Fragment&&!ensureValidVNode(d.children)):!0)?c:null}function toHandlers(c){const d={};if(!isObject$7(c))return warn$2("v-on with no argument expects an object value."),d;for(const f in c)d[toHandlerKey(f)]=c[f];return d}const getPublicInstance=c=>c?isStatefulComponent(c)?getExposeProxy(c)||c.proxy:getPublicInstance(c.parent):null,publicPropertiesMap=extend$1(Object.create(null),{$:c=>c,$el:c=>c.vnode.el,$data:c=>c.data,$props:c=>shallowReadonly(c.props),$attrs:c=>shallowReadonly(c.attrs),$slots:c=>shallowReadonly(c.slots),$refs:c=>shallowReadonly(c.refs),$parent:c=>getPublicInstance(c.parent),$root:c=>getPublicInstance(c.root),$emit:c=>c.emit,$options:c=>resolveMergedOptions(c),$forceUpdate:c=>c.f||(c.f=()=>queueJob(c.update)),$nextTick:c=>c.n||(c.n=nextTick.bind(c.proxy)),$watch:c=>instanceWatch.bind(c)}),isReservedPrefix=c=>c==="_"||c==="$",PublicInstanceProxyHandlers={get({_:c},d){const{ctx:f,setupState:m,data:g,props:v,accessCache:y,type:_,appContext:b}=c;if(d==="__isVue")return!0;if(m!==EMPTY_OBJ&&m.__isScriptSetup&&hasOwn$1(m,d))return m[d];let C;if(d[0]!=="$"){const w=y[d];if(w!==void 0)switch(w){case 1:return m[d];case 2:return g[d];case 4:return f[d];case 3:return v[d]}else{if(m!==EMPTY_OBJ&&hasOwn$1(m,d))return y[d]=1,m[d];if(g!==EMPTY_OBJ&&hasOwn$1(g,d))return y[d]=2,g[d];if((C=c.propsOptions[0])&&hasOwn$1(C,d))return y[d]=3,v[d];if(f!==EMPTY_OBJ&&hasOwn$1(f,d))return y[d]=4,f[d];shouldCacheAccess&&(y[d]=0)}}const k=publicPropertiesMap[d];let $,S;if(k)return d==="$attrs"&&(track(c,"get",d),markAttrsAccessed()),k(c);if(($=_.__cssModules)&&($=$[d]))return $;if(f!==EMPTY_OBJ&&hasOwn$1(f,d))return y[d]=4,f[d];if(S=b.config.globalProperties,hasOwn$1(S,d))return S[d];currentRenderingInstance&&(!isString$2(d)||d.indexOf("__v")!==0)&&(g!==EMPTY_OBJ&&isReservedPrefix(d[0])&&hasOwn$1(g,d)?warn$2(`Property ${JSON.stringify(d)} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`):c===currentRenderingInstance&&warn$2(`Property ${JSON.stringify(d)} was accessed during render but is not defined on instance.`))},set({_:c},d,f){const{data:m,setupState:g,ctx:v}=c;return g!==EMPTY_OBJ&&hasOwn$1(g,d)?(g[d]=f,!0):m!==EMPTY_OBJ&&hasOwn$1(m,d)?(m[d]=f,!0):hasOwn$1(c.props,d)?(warn$2(`Attempting to mutate prop "${d}". Props are readonly.`,c),!1):d[0]==="$"&&d.slice(1)in c?(warn$2(`Attempting to mutate public property "${d}". Properties starting with $ are reserved and readonly.`,c),!1):(d in c.appContext.config.globalProperties?Object.defineProperty(v,d,{enumerable:!0,configurable:!0,value:f}):v[d]=f,!0)},has({_:{data:c,setupState:d,accessCache:f,ctx:m,appContext:g,propsOptions:v}},y){let _;return!!f[y]||c!==EMPTY_OBJ&&hasOwn$1(c,y)||d!==EMPTY_OBJ&&hasOwn$1(d,y)||(_=v[0])&&hasOwn$1(_,y)||hasOwn$1(m,y)||hasOwn$1(publicPropertiesMap,y)||hasOwn$1(g.config.globalProperties,y)},defineProperty(c,d,f){return f.get!=null?c._.accessCache[d]=0:hasOwn$1(f,"value")&&this.set(c,d,f.value,null),Reflect.defineProperty(c,d,f)}};PublicInstanceProxyHandlers.ownKeys=c=>(warn$2("Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead."),Reflect.ownKeys(c));function createDevRenderContext(c){const d={};return Object.defineProperty(d,"_",{configurable:!0,enumerable:!1,get:()=>c}),Object.keys(publicPropertiesMap).forEach(f=>{Object.defineProperty(d,f,{configurable:!0,enumerable:!1,get:()=>publicPropertiesMap[f](c),set:NOOP})}),d}function exposePropsOnRenderContext(c){const{ctx:d,propsOptions:[f]}=c;f&&Object.keys(f).forEach(m=>{Object.defineProperty(d,m,{enumerable:!0,configurable:!0,get:()=>c.props[m],set:NOOP})})}function exposeSetupStateOnRenderContext(c){const{ctx:d,setupState:f}=c;Object.keys(toRaw(f)).forEach(m=>{if(!f.__isScriptSetup){if(isReservedPrefix(m[0])){warn$2(`setup() return property ${JSON.stringify(m)} should not start with "$" or "_" which are reserved prefixes for Vue internals.`);return}Object.defineProperty(d,m,{enumerable:!0,configurable:!0,get:()=>f[m],set:NOOP})}})}function createDuplicateChecker(){const c=Object.create(null);return(d,f)=>{c[f]?warn$2(`${d} property "${f}" is already defined in ${c[f]}.`):c[f]=d}}let shouldCacheAccess=!0;function applyOptions(c){const d=resolveMergedOptions(c),f=c.proxy,m=c.ctx;shouldCacheAccess=!1,d.beforeCreate&&callHook$1(d.beforeCreate,c,"bc");const{data:g,computed:v,methods:y,watch:_,provide:b,inject:C,created:k,beforeMount:$,mounted:S,beforeUpdate:w,updated:E,activated:A,deactivated:P,beforeDestroy:x,beforeUnmount:I,destroyed:V,unmounted:R,render:B,renderTracked:U,renderTriggered:G,errorCaptured:X,serverPrefetch:re,expose:me,inheritAttrs:ue,components:se,directives:nc,filters:rc}=d,sc=createDuplicateChecker();{const[ec]=c.propsOptions;if(ec)for(const pe in ec)sc("Props",pe)}if(C&&resolveInjections(C,m,sc,c.appContext.config.unwrapInjectedRef),y)for(const ec in y){const pe=y[ec];isFunction$5(pe)?(Object.defineProperty(m,ec,{value:pe.bind(f),configurable:!0,enumerable:!0,writable:!0}),sc("Methods",ec)):warn$2(`Method "${ec}" has type "${typeof pe}" in the component definition. Did you reference the function correctly?`)}if(g){isFunction$5(g)||warn$2("The data option must be a function. Plain object usage is no longer supported.");const ec=g.call(f,f);if(isPromise(ec)&&warn$2("data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + ."),!isObject$7(ec))warn$2("data() should return an object.");else{c.data=reactive(ec);for(const pe in ec)sc("Data",pe),isReservedPrefix(pe[0])||Object.defineProperty(m,pe,{configurable:!0,enumerable:!0,get:()=>ec[pe],set:NOOP})}}if(shouldCacheAccess=!0,v)for(const ec in v){const pe=v[ec],ic=isFunction$5(pe)?pe.bind(f,f):isFunction$5(pe.get)?pe.get.bind(f,f):NOOP;ic===NOOP&&warn$2(`Computed property "${ec}" has no getter.`);const lc=!isFunction$5(pe)&&isFunction$5(pe.set)?pe.set.bind(f):()=>{warn$2(`Write operation failed: computed property "${ec}" is readonly.`)},uc=computed({get:ic,set:lc});Object.defineProperty(m,ec,{enumerable:!0,configurable:!0,get:()=>uc.value,set:M=>uc.value=M}),sc("Computed",ec)}if(_)for(const ec in _)createWatcher(_[ec],m,f,ec);if(b){const ec=isFunction$5(b)?b.call(f):b;Reflect.ownKeys(ec).forEach(pe=>{provide(pe,ec[pe])})}k&&callHook$1(k,c,"c");function ac(ec,pe){isArray$e(pe)?pe.forEach(ic=>ec(ic.bind(f))):pe&&ec(pe.bind(f))}if(ac(onBeforeMount,$),ac(onMounted,S),ac(onBeforeUpdate,w),ac(onUpdated,E),ac(onActivated,A),ac(onDeactivated,P),ac(onErrorCaptured,X),ac(onRenderTracked,U),ac(onRenderTriggered,G),ac(onBeforeUnmount,I),ac(onUnmounted,R),ac(onServerPrefetch,re),isArray$e(me))if(me.length){const ec=c.exposed||(c.exposed={});me.forEach(pe=>{Object.defineProperty(ec,pe,{get:()=>f[pe],set:ic=>f[pe]=ic})})}else c.exposed||(c.exposed={});B&&c.render===NOOP&&(c.render=B),ue!=null&&(c.inheritAttrs=ue),se&&(c.components=se),nc&&(c.directives=nc)}function resolveInjections(c,d,f=NOOP,m=!1){isArray$e(c)&&(c=normalizeInject(c));for(const g in c){const v=c[g];let y;isObject$7(v)?"default"in v?y=inject(v.from||g,v.default,!0):y=inject(v.from||g):y=inject(v),isRef(y)?m?Object.defineProperty(d,g,{enumerable:!0,configurable:!0,get:()=>y.value,set:_=>y.value=_}):(warn$2(`injected property "${g}" is a ref and will be auto-unwrapped and no longer needs \`.value\` in the next minor release. To opt-in to the new behavior now, set \`app.config.unwrapInjectedRef = true\` (this config is temporary and will not be needed in the future.)`),d[g]=y):d[g]=y,f("Inject",g)}}function callHook$1(c,d,f){callWithAsyncErrorHandling(isArray$e(c)?c.map(m=>m.bind(d.proxy)):c.bind(d.proxy),d,f)}function createWatcher(c,d,f,m){const g=m.includes(".")?createPathGetter(f,m):()=>f[m];if(isString$2(c)){const v=d[c];isFunction$5(v)?watch(g,v):warn$2(`Invalid watch handler specified by key "${c}"`,v)}else if(isFunction$5(c))watch(g,c.bind(f));else if(isObject$7(c))if(isArray$e(c))c.forEach(v=>createWatcher(v,d,f,m));else{const v=isFunction$5(c.handler)?c.handler.bind(f):d[c.handler];isFunction$5(v)?watch(g,v,c):warn$2(`Invalid watch handler specified by key "${c.handler}"`,v)}else warn$2(`Invalid watch option: "${m}"`,c)}function resolveMergedOptions(c){const d=c.type,{mixins:f,extends:m}=d,{mixins:g,optionsCache:v,config:{optionMergeStrategies:y}}=c.appContext,_=v.get(d);let b;return _?b=_:!g.length&&!f&&!m?b=d:(b={},g.length&&g.forEach(C=>mergeOptions$1(b,C,y,!0)),mergeOptions$1(b,d,y)),v.set(d,b),b}function mergeOptions$1(c,d,f,m=!1){const{mixins:g,extends:v}=d;v&&mergeOptions$1(c,v,f,!0),g&&g.forEach(y=>mergeOptions$1(c,y,f,!0));for(const y in d)if(m&&y==="expose")warn$2('"expose" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.');else{const _=internalOptionMergeStrats[y]||f&&f[y];c[y]=_?_(c[y],d[y]):d[y]}return c}const internalOptionMergeStrats={data:mergeDataFn,props:mergeObjectOptions,emits:mergeObjectOptions,methods:mergeObjectOptions,computed:mergeObjectOptions,beforeCreate:mergeAsArray,created:mergeAsArray,beforeMount:mergeAsArray,mounted:mergeAsArray,beforeUpdate:mergeAsArray,updated:mergeAsArray,beforeDestroy:mergeAsArray,beforeUnmount:mergeAsArray,destroyed:mergeAsArray,unmounted:mergeAsArray,activated:mergeAsArray,deactivated:mergeAsArray,errorCaptured:mergeAsArray,serverPrefetch:mergeAsArray,components:mergeObjectOptions,directives:mergeObjectOptions,watch:mergeWatchOptions,provide:mergeDataFn,inject:mergeInject};function mergeDataFn(c,d){return d?c?function(){return extend$1(isFunction$5(c)?c.call(this,this):c,isFunction$5(d)?d.call(this,this):d)}:d:c}function mergeInject(c,d){return mergeObjectOptions(normalizeInject(c),normalizeInject(d))}function normalizeInject(c){if(isArray$e(c)){const d={};for(let f=0;f0)&&!(y&16)){if(y&8){const k=c.vnode.dynamicProps;for(let $=0;${b=!0;const[S,w]=normalizePropsOptions($,d,!0);extend$1(y,S),w&&_.push(...w)};!f&&d.mixins.length&&d.mixins.forEach(k),c.extends&&k(c.extends),c.mixins&&c.mixins.forEach(k)}if(!v&&!b)return m.set(c,EMPTY_ARR),EMPTY_ARR;if(isArray$e(v))for(let k=0;k-1,w[1]=A<0||E-1||hasOwn$1(w,"default"))&&_.push($)}}}}const C=[y,_];return m.set(c,C),C}function validatePropName(c){return c[0]!=="$"?!0:(warn$2(`Invalid prop name: "${c}" is a reserved property.`),!1)}function getType(c){const d=c&&c.toString().match(/^\s*function (\w+)/);return d?d[1]:c===null?"null":""}function isSameType(c,d){return getType(c)===getType(d)}function getTypeIndex(c,d){return isArray$e(d)?d.findIndex(f=>isSameType(f,c)):isFunction$5(d)&&isSameType(d,c)?0:-1}function validateProps(c,d,f){const m=toRaw(d),g=f.propsOptions[0];for(const v in g){let y=g[v];y!=null&&validateProp(v,m[v],y,!hasOwn$1(c,v)&&!hasOwn$1(c,hyphenate(v)))}}function validateProp(c,d,f,m){const{type:g,required:v,validator:y}=f;if(v&&m){warn$2('Missing required prop: "'+c+'"');return}if(!(d==null&&!f.required)){if(g!=null&&g!==!0){let _=!1;const b=isArray$e(g)?g:[g],C=[];for(let k=0;kc.toLowerCase()===f)}function isBoolean$1(...c){return c.some(d=>d.toLowerCase()==="boolean")}const isInternalKey=c=>c[0]==="_"||c==="$stable",normalizeSlotValue=c=>isArray$e(c)?c.map(normalizeVNode):[normalizeVNode(c)],normalizeSlot$1=(c,d,f)=>{if(d._n)return d;const m=withCtx((...g)=>(currentInstance&&warn$2(`Slot "${c}" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`),normalizeSlotValue(d(...g))),f);return m._c=!1,m},normalizeObjectSlots=(c,d,f)=>{const m=c._ctx;for(const g in c){if(isInternalKey(g))continue;const v=c[g];if(isFunction$5(v))d[g]=normalizeSlot$1(g,v,m);else if(v!=null){warn$2(`Non-function value encountered for slot "${g}". Prefer function slots for better performance.`);const y=normalizeSlotValue(v);d[g]=()=>y}}},normalizeVNodeSlots=(c,d)=>{isKeepAlive(c.vnode)||warn$2("Non-function value encountered for default slot. Prefer function slots for better performance.");const f=normalizeSlotValue(d);c.slots.default=()=>f},initSlots=(c,d)=>{if(c.vnode.shapeFlag&32){const f=d._;f?(c.slots=toRaw(d),def(d,"_",f)):normalizeObjectSlots(d,c.slots={})}else c.slots={},d&&normalizeVNodeSlots(c,d);def(c.slots,InternalObjectKey,1)},updateSlots=(c,d,f)=>{const{vnode:m,slots:g}=c;let v=!0,y=EMPTY_OBJ;if(m.shapeFlag&32){const _=d._;_?isHmrUpdating?extend$1(g,d):f&&_===1?v=!1:(extend$1(g,d),!f&&_===1&&delete g._):(v=!d.$stable,normalizeObjectSlots(d,g)),y=d}else d&&(normalizeVNodeSlots(c,d),y={default:1});if(v)for(const _ in g)!isInternalKey(_)&&!(_ in y)&&delete g[_]};function createAppContext(){return{app:null,config:{isNativeTag:NO,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let uid=0;function createAppAPI(c,d){return function(m,g=null){isFunction$5(m)||(m=Object.assign({},m)),g!=null&&!isObject$7(g)&&(warn$2("root props passed to app.mount() must be an object."),g=null);const v=createAppContext(),y=new Set;let _=!1;const b=v.app={_uid:uid++,_component:m,_props:g,_container:null,_context:v,_instance:null,version:version$1,get config(){return v.config},set config(C){warn$2("app.config cannot be replaced. Modify individual options instead.")},use(C,...k){return y.has(C)?warn$2("Plugin has already been applied to target app."):C&&isFunction$5(C.install)?(y.add(C),C.install(b,...k)):isFunction$5(C)?(y.add(C),C(b,...k)):warn$2('A plugin must either be a function or an object with an "install" function.'),b},mixin(C){return v.mixins.includes(C)?warn$2("Mixin has already been applied to target app"+(C.name?`: ${C.name}`:"")):v.mixins.push(C),b},component(C,k){return validateComponentName(C,v.config),k?(v.components[C]&&warn$2(`Component "${C}" has already been registered in target app.`),v.components[C]=k,b):v.components[C]},directive(C,k){return validateDirectiveName(C),k?(v.directives[C]&&warn$2(`Directive "${C}" has already been registered in target app.`),v.directives[C]=k,b):v.directives[C]},mount(C,k,$){if(_)warn$2("App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. `const createMyApp = () => createApp(App)`");else{C.__vue_app__&&warn$2("There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling `app.unmount()` first.");const S=createVNode(m,g);return S.appContext=v,v.reload=()=>{c(cloneVNode(S),C,$)},k&&d?d(S,C):c(S,C,$),_=!0,b._container=C,C.__vue_app__=b,b._instance=S.component,devtoolsInitApp(b,version$1),getExposeProxy(S.component)||S.component.proxy}},unmount(){_?(c(null,b._container),b._instance=null,devtoolsUnmountApp(b),delete b._container.__vue_app__):warn$2("Cannot unmount an app that is not mounted.")},provide(C,k){return C in v.provides&&warn$2(`App already provides property with key "${String(C)}". It will be overwritten with the new value.`),v.provides[C]=k,b}};return b}}function setRef(c,d,f,m,g=!1){if(isArray$e(c)){c.forEach((S,w)=>setRef(S,d&&(isArray$e(d)?d[w]:d),f,m,g));return}if(isAsyncWrapper(m)&&!g)return;const v=m.shapeFlag&4?getExposeProxy(m.component)||m.component.proxy:m.el,y=g?null:v,{i:_,r:b}=c;if(!_){warn$2("Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.");return}const C=d&&d.r,k=_.refs===EMPTY_OBJ?_.refs={}:_.refs,$=_.setupState;if(C!=null&&C!==b&&(isString$2(C)?(k[C]=null,hasOwn$1($,C)&&($[C]=null)):isRef(C)&&(C.value=null)),isFunction$5(b))callWithErrorHandling(b,_,12,[y,k]);else{const S=isString$2(b),w=isRef(b);if(S||w){const E=()=>{if(c.f){const A=S?k[b]:b.value;g?isArray$e(A)&&remove(A,v):isArray$e(A)?A.includes(v)||A.push(v):S?(k[b]=[v],hasOwn$1($,b)&&($[b]=k[b])):(b.value=[v],c.k&&(k[c.k]=b.value))}else S?(k[b]=y,hasOwn$1($,b)&&($[b]=y)):w?(b.value=y,c.k&&(k[c.k]=y)):warn$2("Invalid template ref type:",b,`(${typeof b})`)};y?(E.id=-1,queuePostRenderEffect(E,f)):E()}else warn$2("Invalid template ref type:",b,`(${typeof b})`)}}let supported$1,perf$1;function startMeasure(c,d){c.appContext.config.performance&&isSupported()&&perf$1.mark(`vue-${d}-${c.uid}`),devtoolsPerfStart(c,d,isSupported()?perf$1.now():Date.now())}function endMeasure(c,d){if(c.appContext.config.performance&&isSupported()){const f=`vue-${d}-${c.uid}`,m=f+":end";perf$1.mark(m),perf$1.measure(`<${formatComponentName(c,c.type)}> ${d}`,f,m),perf$1.clearMarks(f),perf$1.clearMarks(m)}devtoolsPerfEnd(c,d,isSupported()?perf$1.now():Date.now())}function isSupported(){return supported$1!==void 0||(typeof window!="undefined"&&window.performance?(supported$1=!0,perf$1=window.performance):supported$1=!1),supported$1}function initFeatureFlags$1(){const c=[];if(c.length){const d=c.length>1;console.warn(`Feature flag${d?"s":""} ${c.join(", ")} ${d?"are":"is"} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle. + +For more details, see https://link.vuejs.org/feature-flags.`)}}const queuePostRenderEffect=queueEffectWithSuspense;function createRenderer(c){return baseCreateRenderer(c)}function baseCreateRenderer(c,d){initFeatureFlags$1();const f=getGlobalThis$1();f.__VUE__=!0,setDevtoolsHook(f.__VUE_DEVTOOLS_GLOBAL_HOOK__,f);const{insert:m,remove:g,patchProp:v,createElement:y,createText:_,createComment:b,setText:C,setElementText:k,parentNode:$,nextSibling:S,setScopeId:w=NOOP,cloneNode:E,insertStaticContent:A}=c,P=(T,O,q,Q=null,Z=null,le=null,De=!1,Oe=null,ie=isHmrUpdating?!1:!!O.dynamicChildren)=>{if(T===O)return;T&&!isSameVNodeType(T,O)&&(Q=te(T),oe(T,Z,le,!0),T=null),O.patchFlag===-2&&(ie=!1,O.dynamicChildren=null);const{type:j,ref:ee,shapeFlag:tc}=O;switch(j){case Text:x(T,O,q,Q);break;case Comment:I(T,O,q,Q);break;case Static:T==null?V(O,q,Q,De):R(T,O,q,De);break;case Fragment:rc(T,O,q,Q,Z,le,De,Oe,ie);break;default:tc&1?G(T,O,q,Q,Z,le,De,Oe,ie):tc&6?sc(T,O,q,Q,Z,le,De,Oe,ie):tc&64||tc&128?j.process(T,O,q,Q,Z,le,De,Oe,ie,ae):warn$2("Invalid VNode type:",j,`(${typeof j})`)}ee!=null&&Z&&setRef(ee,T&&T.ref,le,O||T,!O)},x=(T,O,q,Q)=>{if(T==null)m(O.el=_(O.children),q,Q);else{const Z=O.el=T.el;O.children!==T.children&&C(Z,O.children)}},I=(T,O,q,Q)=>{T==null?m(O.el=b(O.children||""),q,Q):O.el=T.el},V=(T,O,q,Q)=>{[T.el,T.anchor]=A(T.children,O,q,Q,T.el,T.anchor)},R=(T,O,q,Q)=>{if(O.children!==T.children){const Z=S(T.anchor);U(T),[O.el,O.anchor]=A(O.children,q,Z,Q)}else O.el=T.el,O.anchor=T.anchor},B=({el:T,anchor:O},q,Q)=>{let Z;for(;T&&T!==O;)Z=S(T),m(T,q,Q),T=Z;m(O,q,Q)},U=({el:T,anchor:O})=>{let q;for(;T&&T!==O;)q=S(T),g(T),T=q;g(O)},G=(T,O,q,Q,Z,le,De,Oe,ie)=>{De=De||O.type==="svg",T==null?X(O,q,Q,Z,le,De,Oe,ie):ue(T,O,Z,le,De,Oe,ie)},X=(T,O,q,Q,Z,le,De,Oe)=>{let ie,j;const{type:ee,props:tc,shapeFlag:W,transition:N,patchFlag:z,dirs:ne}=T;{if(ie=T.el=y(T.type,le,tc&&tc.is,tc),W&8?k(ie,T.children):W&16&&me(T.children,ie,null,Q,Z,le&&ee!=="foreignObject",De,Oe),ne&&invokeDirectiveHook(T,null,Q,"created"),tc){for(const oc in tc)oc!=="value"&&!isReservedProp(oc)&&v(ie,oc,null,tc[oc],le,T.children,Q,Z,Y);"value"in tc&&v(ie,"value",null,tc.value),(j=tc.onVnodeBeforeMount)&&invokeVNodeHook(j,Q,T)}re(ie,T,T.scopeId,De,Q)}Object.defineProperty(ie,"__vnode",{value:T,enumerable:!1}),Object.defineProperty(ie,"__vueParentComponent",{value:Q,enumerable:!1}),ne&&invokeDirectiveHook(T,null,Q,"beforeMount");const ce=(!Z||Z&&!Z.pendingBranch)&&N&&!N.persisted;ce&&N.beforeEnter(ie),m(ie,O,q),((j=tc&&tc.onVnodeMounted)||ce||ne)&&queuePostRenderEffect(()=>{j&&invokeVNodeHook(j,Q,T),ce&&N.enter(ie),ne&&invokeDirectiveHook(T,null,Q,"mounted")},Z)},re=(T,O,q,Q,Z)=>{if(q&&w(T,q),Q)for(let le=0;le0&&le.patchFlag&2048&&(le=filterSingleRoot(le.children)||le),O===le){const De=Z.vnode;re(T,De,De.scopeId,De.slotScopeIds,Z.parent)}}},me=(T,O,q,Q,Z,le,De,Oe,ie=0)=>{for(let j=ie;j{const Oe=O.el=T.el;let{patchFlag:ie,dynamicChildren:j,dirs:ee}=O;ie|=T.patchFlag&16;const tc=T.props||EMPTY_OBJ,W=O.props||EMPTY_OBJ;let N;q&&toggleRecurse(q,!1),(N=W.onVnodeBeforeUpdate)&&invokeVNodeHook(N,q,O,T),ee&&invokeDirectiveHook(O,T,q,"beforeUpdate"),q&&toggleRecurse(q,!0),isHmrUpdating&&(ie=0,De=!1,j=null);const z=Z&&O.type!=="foreignObject";if(j?(se(T.dynamicChildren,j,Oe,q,Q,z,le),q&&q.type.__hmrId&&traverseStaticChildren(T,O)):De||lc(T,O,Oe,null,q,Q,z,le,!1),ie>0){if(ie&16)nc(Oe,O,tc,W,q,Q,Z);else if(ie&2&&tc.class!==W.class&&v(Oe,"class",null,W.class,Z),ie&4&&v(Oe,"style",tc.style,W.style,Z),ie&8){const ne=O.dynamicProps;for(let ce=0;ce{N&&invokeVNodeHook(N,q,O,T),ee&&invokeDirectiveHook(O,T,q,"updated")},Q)},se=(T,O,q,Q,Z,le,De)=>{for(let Oe=0;Oe{if(q!==Q){for(const Oe in Q){if(isReservedProp(Oe))continue;const ie=Q[Oe],j=q[Oe];ie!==j&&Oe!=="value"&&v(T,Oe,j,ie,De,O.children,Z,le,Y)}if(q!==EMPTY_OBJ)for(const Oe in q)!isReservedProp(Oe)&&!(Oe in Q)&&v(T,Oe,q[Oe],null,De,O.children,Z,le,Y);"value"in Q&&v(T,"value",q.value,Q.value)}},rc=(T,O,q,Q,Z,le,De,Oe,ie)=>{const j=O.el=T?T.el:_(""),ee=O.anchor=T?T.anchor:_("");let{patchFlag:tc,dynamicChildren:W,slotScopeIds:N}=O;(isHmrUpdating||tc&2048)&&(tc=0,ie=!1,W=null),N&&(Oe=Oe?Oe.concat(N):N),T==null?(m(j,q,Q),m(ee,q,Q),me(O.children,q,ee,Z,le,De,Oe,ie)):tc>0&&tc&64&&W&&T.dynamicChildren?(se(T.dynamicChildren,W,q,Z,le,De,Oe),Z&&Z.type.__hmrId?traverseStaticChildren(T,O):(O.key!=null||Z&&O===Z.subTree)&&traverseStaticChildren(T,O,!0)):lc(T,O,q,ee,Z,le,De,Oe,ie)},sc=(T,O,q,Q,Z,le,De,Oe,ie)=>{O.slotScopeIds=Oe,T==null?O.shapeFlag&512?Z.ctx.activate(O,q,Q,De,ie):ac(O,q,Q,Z,le,De,ie):ec(T,O,ie)},ac=(T,O,q,Q,Z,le,De)=>{const Oe=T.component=createComponentInstance(T,Q,Z);if(Oe.type.__hmrId&®isterHMR(Oe),pushWarningContext(T),startMeasure(Oe,"mount"),isKeepAlive(T)&&(Oe.ctx.renderer=ae),startMeasure(Oe,"init"),setupComponent(Oe),endMeasure(Oe,"init"),Oe.asyncDep){if(Z&&Z.registerDep(Oe,pe),!T.el){const ie=Oe.subTree=createVNode(Comment);I(null,ie,O,q)}return}pe(Oe,T,O,q,Z,le,De),popWarningContext(),endMeasure(Oe,"mount")},ec=(T,O,q)=>{const Q=O.component=T.component;if(shouldUpdateComponent(T,O,q))if(Q.asyncDep&&!Q.asyncResolved){pushWarningContext(O),ic(Q,O,q),popWarningContext();return}else Q.next=O,invalidateJob(Q.update),Q.update();else O.el=T.el,Q.vnode=O},pe=(T,O,q,Q,Z,le,De)=>{const Oe=()=>{if(T.isMounted){let{next:ee,bu:tc,u:W,parent:N,vnode:z}=T,ne=ee,ce;pushWarningContext(ee||T.vnode),toggleRecurse(T,!1),ee?(ee.el=z.el,ic(T,ee,De)):ee=z,tc&&invokeArrayFns(tc),(ce=ee.props&&ee.props.onVnodeBeforeUpdate)&&invokeVNodeHook(ce,N,ee,z),toggleRecurse(T,!0),startMeasure(T,"render");const oc=renderComponentRoot(T);endMeasure(T,"render");const cc=T.subTree;T.subTree=oc,startMeasure(T,"patch"),P(cc,oc,$(cc.el),te(cc),T,Z,le),endMeasure(T,"patch"),ee.el=oc.el,ne===null&&updateHOCHostEl(T,oc.el),W&&queuePostRenderEffect(W,Z),(ce=ee.props&&ee.props.onVnodeUpdated)&&queuePostRenderEffect(()=>invokeVNodeHook(ce,N,ee,z),Z),devtoolsComponentUpdated(T),popWarningContext()}else{let ee;const{el:tc,props:W}=O,{bm:N,m:z,parent:ne}=T,ce=isAsyncWrapper(O);if(toggleRecurse(T,!1),N&&invokeArrayFns(N),!ce&&(ee=W&&W.onVnodeBeforeMount)&&invokeVNodeHook(ee,ne,O),toggleRecurse(T,!0),tc&&L){const oc=()=>{startMeasure(T,"render"),T.subTree=renderComponentRoot(T),endMeasure(T,"render"),startMeasure(T,"hydrate"),L(tc,T.subTree,T,Z,null),endMeasure(T,"hydrate")};ce?O.type.__asyncLoader().then(()=>!T.isUnmounted&&oc()):oc()}else{startMeasure(T,"render");const oc=T.subTree=renderComponentRoot(T);endMeasure(T,"render"),startMeasure(T,"patch"),P(null,oc,q,Q,T,Z,le),endMeasure(T,"patch"),O.el=oc.el}if(z&&queuePostRenderEffect(z,Z),!ce&&(ee=W&&W.onVnodeMounted)){const oc=O;queuePostRenderEffect(()=>invokeVNodeHook(ee,ne,oc),Z)}(O.shapeFlag&256||ne&&isAsyncWrapper(ne.vnode)&&ne.vnode.shapeFlag&256)&&T.a&&queuePostRenderEffect(T.a,Z),T.isMounted=!0,devtoolsComponentAdded(T),O=q=Q=null}},ie=T.effect=new ReactiveEffect(Oe,()=>queueJob(j),T.scope),j=T.update=()=>ie.run();j.id=T.uid,toggleRecurse(T,!0),ie.onTrack=T.rtc?ee=>invokeArrayFns(T.rtc,ee):void 0,ie.onTrigger=T.rtg?ee=>invokeArrayFns(T.rtg,ee):void 0,j.ownerInstance=T,j()},ic=(T,O,q)=>{O.component=T;const Q=T.vnode.props;T.vnode=O,T.next=null,updateProps(T,O.props,Q,q),updateSlots(T,O.children,q),pauseTracking(),flushPreFlushCbs(void 0,T.update),resetTracking()},lc=(T,O,q,Q,Z,le,De,Oe,ie=!1)=>{const j=T&&T.children,ee=T?T.shapeFlag:0,tc=O.children,{patchFlag:W,shapeFlag:N}=O;if(W>0){if(W&128){M(j,tc,q,Q,Z,le,De,Oe,ie);return}else if(W&256){uc(j,tc,q,Q,Z,le,De,Oe,ie);return}}N&8?(ee&16&&Y(j,Z,le),tc!==j&&k(q,tc)):ee&16?N&16?M(j,tc,q,Q,Z,le,De,Oe,ie):Y(j,Z,le,!0):(ee&8&&k(q,""),N&16&&me(tc,q,Q,Z,le,De,Oe,ie))},uc=(T,O,q,Q,Z,le,De,Oe,ie)=>{T=T||EMPTY_ARR,O=O||EMPTY_ARR;const j=T.length,ee=O.length,tc=Math.min(j,ee);let W;for(W=0;Wee?Y(T,Z,le,!0,!1,tc):me(O,q,Q,Z,le,De,Oe,ie,tc)},M=(T,O,q,Q,Z,le,De,Oe,ie)=>{let j=0;const ee=O.length;let tc=T.length-1,W=ee-1;for(;j<=tc&&j<=W;){const N=T[j],z=O[j]=ie?cloneIfMounted(O[j]):normalizeVNode(O[j]);if(isSameVNodeType(N,z))P(N,z,q,null,Z,le,De,Oe,ie);else break;j++}for(;j<=tc&&j<=W;){const N=T[tc],z=O[W]=ie?cloneIfMounted(O[W]):normalizeVNode(O[W]);if(isSameVNodeType(N,z))P(N,z,q,null,Z,le,De,Oe,ie);else break;tc--,W--}if(j>tc){if(j<=W){const N=W+1,z=NW)for(;j<=tc;)oe(T[j],Z,le,!0),j++;else{const N=j,z=j,ne=new Map;for(j=z;j<=W;j++){const fc=O[j]=ie?cloneIfMounted(O[j]):normalizeVNode(O[j]);fc.key!=null&&(ne.has(fc.key)&&warn$2("Duplicate keys found during update:",JSON.stringify(fc.key),"Make sure keys are unique."),ne.set(fc.key,j))}let ce,oc=0;const cc=W-z+1;let mc=!1,gc=0;const dc=new Array(cc);for(j=0;j=cc){oe(fc,Z,le,!0);continue}let hc;if(fc.key!=null)hc=ne.get(fc.key);else for(ce=z;ce<=W;ce++)if(dc[ce-z]===0&&isSameVNodeType(fc,O[ce])){hc=ce;break}hc===void 0?oe(fc,Z,le,!0):(dc[hc-z]=j+1,hc>=gc?gc=hc:mc=!0,P(fc,O[hc],q,null,Z,le,De,Oe,ie),oc++)}const pc=mc?getSequence(dc):EMPTY_ARR;for(ce=pc.length-1,j=cc-1;j>=0;j--){const fc=z+j,hc=O[fc],yc=fc+1{const{el:le,type:De,transition:Oe,children:ie,shapeFlag:j}=T;if(j&6){J(T.component.subTree,O,q,Q);return}if(j&128){T.suspense.move(O,q,Q);return}if(j&64){De.move(T,O,q,ae);return}if(De===Fragment){m(le,O,q);for(let tc=0;tcOe.enter(le),Z);else{const{leave:tc,delayLeave:W,afterLeave:N}=Oe,z=()=>m(le,O,q),ne=()=>{tc(le,()=>{z(),N&&N()})};W?W(le,z,ne):ne()}else m(le,O,q)},oe=(T,O,q,Q=!1,Z=!1)=>{const{type:le,props:De,ref:Oe,children:ie,dynamicChildren:j,shapeFlag:ee,patchFlag:tc,dirs:W}=T;if(Oe!=null&&setRef(Oe,null,q,T,!0),ee&256){O.ctx.deactivate(T);return}const N=ee&1&&W,z=!isAsyncWrapper(T);let ne;if(z&&(ne=De&&De.onVnodeBeforeUnmount)&&invokeVNodeHook(ne,O,T),ee&6)F(T.component,q,Q);else{if(ee&128){T.suspense.unmount(q,Q);return}N&&invokeDirectiveHook(T,null,O,"beforeUnmount"),ee&64?T.type.remove(T,O,q,Z,ae,Q):j&&(le!==Fragment||tc>0&&tc&64)?Y(j,O,q,!1,!0):(le===Fragment&&tc&384||!Z&&ee&16)&&Y(ie,O,q),Q&&H(T)}(z&&(ne=De&&De.onVnodeUnmounted)||N)&&queuePostRenderEffect(()=>{ne&&invokeVNodeHook(ne,O,T),N&&invokeDirectiveHook(T,null,O,"unmounted")},q)},H=T=>{const{type:O,el:q,anchor:Q,transition:Z}=T;if(O===Fragment){T.patchFlag>0&&T.patchFlag&2048&&Z&&!Z.persisted?T.children.forEach(De=>{De.type===Comment?g(De.el):H(De)}):D(q,Q);return}if(O===Static){U(T);return}const le=()=>{g(q),Z&&!Z.persisted&&Z.afterLeave&&Z.afterLeave()};if(T.shapeFlag&1&&Z&&!Z.persisted){const{leave:De,delayLeave:Oe}=Z,ie=()=>De(q,le);Oe?Oe(T.el,le,ie):ie()}else le()},D=(T,O)=>{let q;for(;T!==O;)q=S(T),g(T),T=q;g(O)},F=(T,O,q)=>{T.type.__hmrId&&unregisterHMR(T);const{bum:Q,scope:Z,update:le,subTree:De,um:Oe}=T;Q&&invokeArrayFns(Q),Z.stop(),le&&(le.active=!1,oe(De,T,O,q)),Oe&&queuePostRenderEffect(Oe,O),queuePostRenderEffect(()=>{T.isUnmounted=!0},O),O&&O.pendingBranch&&!O.isUnmounted&&T.asyncDep&&!T.asyncResolved&&T.suspenseId===O.pendingId&&(O.deps--,O.deps===0&&O.resolve()),devtoolsComponentRemoved(T)},Y=(T,O,q,Q=!1,Z=!1,le=0)=>{for(let De=le;DeT.shapeFlag&6?te(T.component.subTree):T.shapeFlag&128?T.suspense.next():S(T.anchor||T.el),de=(T,O,q)=>{T==null?O._vnode&&oe(O._vnode,null,null,!0):P(O._vnode||null,T,O,null,null,null,q),flushPostFlushCbs(),O._vnode=T},ae={p:P,um:oe,m:J,r:H,mt:ac,mc:me,pc:lc,pbc:se,n:te,o:c};let Ie,L;return d&&([Ie,L]=d(ae)),{render:de,hydrate:Ie,createApp:createAppAPI(de,Ie)}}function toggleRecurse({effect:c,update:d},f){c.allowRecurse=d.allowRecurse=f}function traverseStaticChildren(c,d,f=!1){const m=c.children,g=d.children;if(isArray$e(m)&&isArray$e(g))for(let v=0;v>1,c[f[_]]0&&(d[m]=f[v-1]),f[v]=m)}}for(v=f.length,y=f[v-1];v-- >0;)f[v]=y,y=d[y];return f}const isTeleport=c=>c.__isTeleport,isTeleportDisabled=c=>c&&(c.disabled||c.disabled===""),isTargetSVG=c=>typeof SVGElement!="undefined"&&c instanceof SVGElement,resolveTarget=(c,d)=>{const f=c&&c.to;if(isString$2(f))if(d){const m=d(f);return m||warn$2(`Failed to locate Teleport target with selector "${f}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`),m}else return warn$2("Current renderer does not support string target for Teleports. (missing querySelector renderer option)"),null;else return!f&&!isTeleportDisabled(c)&&warn$2(`Invalid Teleport target: ${f}`),f},TeleportImpl={__isTeleport:!0,process(c,d,f,m,g,v,y,_,b,C){const{mc:k,pc:$,pbc:S,o:{insert:w,querySelector:E,createText:A,createComment:P}}=C,x=isTeleportDisabled(d.props);let{shapeFlag:I,children:V,dynamicChildren:R}=d;if(isHmrUpdating&&(b=!1,R=null),c==null){const B=d.el=P("teleport start"),U=d.anchor=P("teleport end");w(B,f,m),w(U,f,m);const G=d.target=resolveTarget(d.props,E),X=d.targetAnchor=A("");G?(w(X,G),y=y||isTargetSVG(G)):x||warn$2("Invalid Teleport target on mount:",G,`(${typeof G})`);const re=(me,ue)=>{I&16&&k(V,me,ue,g,v,y,_,b)};x?re(f,U):G&&re(G,X)}else{d.el=c.el;const B=d.anchor=c.anchor,U=d.target=c.target,G=d.targetAnchor=c.targetAnchor,X=isTeleportDisabled(c.props),re=X?f:U,me=X?B:G;if(y=y||isTargetSVG(U),R?(S(c.dynamicChildren,R,re,g,v,y,_),traverseStaticChildren(c,d,!0)):b||$(c,d,re,me,g,v,y,_,!1),x)X||moveTeleport(d,f,B,C,1);else if((d.props&&d.props.to)!==(c.props&&c.props.to)){const ue=d.target=resolveTarget(d.props,E);ue?moveTeleport(d,ue,null,C,0):warn$2("Invalid Teleport target on update:",U,`(${typeof U})`)}else X&&moveTeleport(d,U,G,C,1)}},remove(c,d,f,m,{um:g,o:{remove:v}},y){const{shapeFlag:_,children:b,anchor:C,targetAnchor:k,target:$,props:S}=c;if($&&v(k),(y||!isTeleportDisabled(S))&&(v(C),_&16))for(let w=0;w0?currentBlock||EMPTY_ARR:null,closeBlock(),isBlockTreeEnabled>0&¤tBlock&¤tBlock.push(c),c}function createElementBlock(c,d,f,m,g,v){return setupBlock(createBaseVNode(c,d,f,m,g,v,!0))}function createBlock(c,d,f,m,g){return setupBlock(createVNode(c,d,f,m,g,!0))}function isVNode$1(c){return c?c.__v_isVNode===!0:!1}function isSameVNodeType(c,d){return d.shapeFlag&6&&hmrDirtyComponents.has(d.type)?!1:c.type===d.type&&c.key===d.key}const createVNodeWithArgsTransform=(...c)=>_createVNode(...c),InternalObjectKey="__vInternal",normalizeKey=({key:c})=>c!=null?c:null,normalizeRef=({ref:c,ref_key:d,ref_for:f})=>c!=null?isString$2(c)||isRef(c)||isFunction$5(c)?{i:currentRenderingInstance,r:c,k:d,f:!!f}:c:null;function createBaseVNode(c,d=null,f=null,m=0,g=null,v=c===Fragment?0:1,y=!1,_=!1){const b={__v_isVNode:!0,__v_skip:!0,type:c,props:d,key:d&&normalizeKey(d),ref:d&&normalizeRef(d),scopeId:currentScopeId,slotScopeIds:null,children:f,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:v,patchFlag:m,dynamicProps:g,dynamicChildren:null,appContext:null};return _?(normalizeChildren(b,f),v&128&&c.normalize(b)):f&&(b.shapeFlag|=isString$2(f)?8:16),b.key!==b.key&&warn$2("VNode created with invalid key (NaN). VNode type:",b.type),isBlockTreeEnabled>0&&!y&¤tBlock&&(b.patchFlag>0||v&6)&&b.patchFlag!==32&¤tBlock.push(b),b}const createVNode=createVNodeWithArgsTransform;function _createVNode(c,d=null,f=null,m=0,g=null,v=!1){if((!c||c===NULL_DYNAMIC_COMPONENT)&&(c||warn$2(`Invalid vnode type when creating vnode: ${c}.`),c=Comment),isVNode$1(c)){const _=cloneVNode(c,d,!0);return f&&normalizeChildren(_,f),isBlockTreeEnabled>0&&!v&¤tBlock&&(_.shapeFlag&6?currentBlock[currentBlock.indexOf(c)]=_:currentBlock.push(_)),_.patchFlag|=-2,_}if(isClassComponent(c)&&(c=c.__vccOpts),d){d=guardReactiveProps(d);let{class:_,style:b}=d;_&&!isString$2(_)&&(d.class=normalizeClass(_)),isObject$7(b)&&(isProxy(b)&&!isArray$e(b)&&(b=extend$1({},b)),d.style=normalizeStyle(b))}const y=isString$2(c)?1:isSuspense(c)?128:isTeleport(c)?64:isObject$7(c)?4:isFunction$5(c)?2:0;return y&4&&isProxy(c)&&(c=toRaw(c),warn$2("Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with `markRaw` or using `shallowRef` instead of `ref`.",` +Component that was made reactive: `,c)),createBaseVNode(c,d,f,m,g,y,v,!0)}function guardReactiveProps(c){return c?isProxy(c)||InternalObjectKey in c?extend$1({},c):c:null}function cloneVNode(c,d,f=!1){const{props:m,ref:g,patchFlag:v,children:y}=c,_=d?mergeProps(m||{},d):m;return{__v_isVNode:!0,__v_skip:!0,type:c.type,props:_,key:_&&normalizeKey(_),ref:d&&d.ref?f&&g?isArray$e(g)?g.concat(normalizeRef(d)):[g,normalizeRef(d)]:normalizeRef(d):g,scopeId:c.scopeId,slotScopeIds:c.slotScopeIds,children:v===-1&&isArray$e(y)?y.map(deepCloneVNode):y,target:c.target,targetAnchor:c.targetAnchor,staticCount:c.staticCount,shapeFlag:c.shapeFlag,patchFlag:d&&c.type!==Fragment?v===-1?16:v|16:v,dynamicProps:c.dynamicProps,dynamicChildren:c.dynamicChildren,appContext:c.appContext,dirs:c.dirs,transition:c.transition,component:c.component,suspense:c.suspense,ssContent:c.ssContent&&cloneVNode(c.ssContent),ssFallback:c.ssFallback&&cloneVNode(c.ssFallback),el:c.el,anchor:c.anchor}}function deepCloneVNode(c){const d=cloneVNode(c);return isArray$e(c.children)&&(d.children=c.children.map(deepCloneVNode)),d}function createTextVNode(c=" ",d=0){return createVNode(Text,null,c,d)}function createStaticVNode(c,d){const f=createVNode(Static,null,c);return f.staticCount=d,f}function createCommentVNode(c="",d=!1){return d?(openBlock(),createBlock(Comment,null,c)):createVNode(Comment,null,c)}function normalizeVNode(c){return c==null||typeof c=="boolean"?createVNode(Comment):isArray$e(c)?createVNode(Fragment,null,c.slice()):typeof c=="object"?cloneIfMounted(c):createVNode(Text,null,String(c))}function cloneIfMounted(c){return c.el===null||c.memo?c:cloneVNode(c)}function normalizeChildren(c,d){let f=0;const{shapeFlag:m}=c;if(d==null)d=null;else if(isArray$e(d))f=16;else if(typeof d=="object")if(m&65){const g=d.default;g&&(g._c&&(g._d=!1),normalizeChildren(c,g()),g._c&&(g._d=!0));return}else{f=32;const g=d._;!g&&!(InternalObjectKey in d)?d._ctx=currentRenderingInstance:g===3&¤tRenderingInstance&&(currentRenderingInstance.slots._===1?d._=1:(d._=2,c.patchFlag|=1024))}else isFunction$5(d)?(d={default:d,_ctx:currentRenderingInstance},f=32):(d=String(d),m&64?(f=16,d=[createTextVNode(d)]):f=8);c.children=d,c.shapeFlag|=f}function mergeProps(...c){const d={};for(let f=0;fcurrentInstance||currentRenderingInstance,setCurrentInstance=c=>{currentInstance=c,c.scope.on()},unsetCurrentInstance=()=>{currentInstance&¤tInstance.scope.off(),currentInstance=null},isBuiltInTag=makeMap("slot,component");function validateComponentName(c,d){const f=d.isNativeTag||NO;(isBuiltInTag(c)||f(c))&&warn$2("Do not use built-in or reserved HTML elements as component id: "+c)}function isStatefulComponent(c){return c.vnode.shapeFlag&4}let isInSSRComponentSetup=!1;function setupComponent(c,d=!1){isInSSRComponentSetup=d;const{props:f,children:m}=c.vnode,g=isStatefulComponent(c);initProps(c,f,g,d),initSlots(c,m);const v=g?setupStatefulComponent(c,d):void 0;return isInSSRComponentSetup=!1,v}function setupStatefulComponent(c,d){var f;const m=c.type;{if(m.name&&validateComponentName(m.name,c.appContext.config),m.components){const v=Object.keys(m.components);for(let y=0;y1?createSetupContext(c):null;setCurrentInstance(c),pauseTracking();const y=callWithErrorHandling(g,c,0,[shallowReadonly(c.props),v]);if(resetTracking(),unsetCurrentInstance(),isPromise(y)){if(y.then(unsetCurrentInstance,unsetCurrentInstance),d)return y.then(_=>{handleSetupResult(c,_,d)}).catch(_=>{handleError(_,c,0)});if(c.asyncDep=y,!c.suspense){const _=(f=m.name)!==null&&f!==void 0?f:"Anonymous";warn$2(`Component <${_}>: setup function returned a promise, but no boundary was found in the parent component tree. A component with async setup() must be nested in a in order to be rendered.`)}}else handleSetupResult(c,y,d)}else finishComponentSetup(c,d)}function handleSetupResult(c,d,f){isFunction$5(d)?c.type.__ssrInlineRender?c.ssrRender=d:c.render=d:isObject$7(d)?(isVNode$1(d)&&warn$2("setup() should not return VNodes directly - return a render function instead."),c.devtoolsRawSetupState=d,c.setupState=proxyRefs(d),exposeSetupStateOnRenderContext(c)):d!==void 0&&warn$2(`setup() should return an object. Received: ${d===null?"null":typeof d}`),finishComponentSetup(c,f)}let compile;const isRuntimeOnly=()=>!compile;function finishComponentSetup(c,d,f){const m=c.type;if(!c.render){if(!d&&compile&&!m.render){const g=m.template;if(g){startMeasure(c,"compile");const{isCustomElement:v,compilerOptions:y}=c.appContext.config,{delimiters:_,compilerOptions:b}=m,C=extend$1(extend$1({isCustomElement:v,delimiters:_},y),b);m.render=compile(g,C),endMeasure(c,"compile")}}c.render=m.render||NOOP}setCurrentInstance(c),pauseTracking(),applyOptions(c),resetTracking(),unsetCurrentInstance(),!m.render&&c.render===NOOP&&!d&&(m.template?warn$2('Component provided template option but runtime compilation is not supported in this build of Vue. Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".'):warn$2("Component is missing template or render function."))}function createAttrsProxy(c){return new Proxy(c.attrs,{get(d,f){return markAttrsAccessed(),track(c,"get","$attrs"),d[f]},set(){return warn$2("setupContext.attrs is readonly."),!1},deleteProperty(){return warn$2("setupContext.attrs is readonly."),!1}})}function createSetupContext(c){const d=m=>{c.exposed&&warn$2("expose() should be called only once per setup()."),c.exposed=m||{}};let f;return Object.freeze({get attrs(){return f||(f=createAttrsProxy(c))},get slots(){return shallowReadonly(c.slots)},get emit(){return(m,...g)=>c.emit(m,...g)},expose:d})}function getExposeProxy(c){if(c.exposed)return c.exposeProxy||(c.exposeProxy=new Proxy(proxyRefs(markRaw(c.exposed)),{get(d,f){if(f in d)return d[f];if(f in publicPropertiesMap)return publicPropertiesMap[f](c)}}))}const classifyRE=/(?:^|[-_])(\w)/g,classify=c=>c.replace(classifyRE,d=>d.toUpperCase()).replace(/[-_]/g,"");function getComponentName(c,d=!0){return isFunction$5(c)?c.displayName||c.name:c.name||d&&c.__name}function formatComponentName(c,d,f=!1){let m=getComponentName(d);if(!m&&d.__file){const g=d.__file.match(/([^/\\]+)\.\w+$/);g&&(m=g[1])}if(!m&&c&&c.parent){const g=v=>{for(const y in v)if(v[y]===d)return y};m=g(c.components||c.parent.type.components)||g(c.appContext.components)}return m?classify(m):f?"App":"Anonymous"}function isClassComponent(c){return isFunction$5(c)&&"__vccOpts"in c}const computed=(c,d)=>computed$1(c,d,isInSSRComponentSetup);function h(c,d,f){const m=arguments.length;return m===2?isObject$7(d)&&!isArray$e(d)?isVNode$1(d)?createVNode(c,null,[d]):createVNode(c,d):createVNode(c,null,d):(m>3?f=Array.prototype.slice.call(arguments,2):m===3&&isVNode$1(f)&&(f=[f]),createVNode(c,d,f))}function isShallow(c){return!!(c&&c.__v_isShallow)}function initCustomFormatter(){if(typeof window=="undefined")return;const c={style:"color:#3ba776"},d={style:"color:#0b1bc9"},f={style:"color:#b62e24"},m={style:"color:#9d288c"},g={header($){return isObject$7($)?$.__isVue?["div",c,"VueInstance"]:isRef($)?["div",{},["span",c,k($)],"<",_($.value),">"]:isReactive($)?["div",{},["span",c,isShallow($)?"ShallowReactive":"Reactive"],"<",_($),`>${isReadonly($)?" (readonly)":""}`]:isReadonly($)?["div",{},["span",c,isShallow($)?"ShallowReadonly":"Readonly"],"<",_($),">"]:null:null},hasBody($){return $&&$.__isVue},body($){if($&&$.__isVue)return["div",{},...v($.$)]}};function v($){const S=[];$.type.props&&$.props&&S.push(y("props",toRaw($.props))),$.setupState!==EMPTY_OBJ&&S.push(y("setup",$.setupState)),$.data!==EMPTY_OBJ&&S.push(y("data",toRaw($.data)));const w=b($,"computed");w&&S.push(y("computed",w));const E=b($,"inject");return E&&S.push(y("injected",E)),S.push(["div",{},["span",{style:m.style+";opacity:0.66"},"$ (internal): "],["object",{object:$}]]),S}function y($,S){return S=extend$1({},S),Object.keys(S).length?["div",{style:"line-height:1.25em;margin-bottom:0.6em"},["div",{style:"color:#476582"},$],["div",{style:"padding-left:1.25em"},...Object.keys(S).map(w=>["div",{},["span",m,w+": "],_(S[w],!1)])]]:["span",{}]}function _($,S=!0){return typeof $=="number"?["span",d,$]:typeof $=="string"?["span",f,JSON.stringify($)]:typeof $=="boolean"?["span",m,$]:isObject$7($)?["object",{object:S?toRaw($):$}]:["span",f,String($)]}function b($,S){const w=$.type;if(isFunction$5(w))return;const E={};for(const A in $.ctx)C(w,A,S)&&(E[A]=$.ctx[A]);return E}function C($,S,w){const E=$[w];if(isArray$e(E)&&E.includes(S)||isObject$7(E)&&S in E||$.extends&&C($.extends,S,w)||$.mixins&&$.mixins.some(A=>C(A,S,w)))return!0}function k($){return isShallow($)?"ShallowRef":$.effect?"ComputedRef":"Ref"}window.devtoolsFormatters?window.devtoolsFormatters.push(g):window.devtoolsFormatters=[g]}const version$1="3.2.37",svgNS="http://www.w3.org/2000/svg",doc=typeof document!="undefined"?document:null,templateContainer=doc&&doc.createElement("template"),nodeOps={insert:(c,d,f)=>{d.insertBefore(c,f||null)},remove:c=>{const d=c.parentNode;d&&d.removeChild(c)},createElement:(c,d,f,m)=>{const g=d?doc.createElementNS(svgNS,c):doc.createElement(c,f?{is:f}:void 0);return c==="select"&&m&&m.multiple!=null&&g.setAttribute("multiple",m.multiple),g},createText:c=>doc.createTextNode(c),createComment:c=>doc.createComment(c),setText:(c,d)=>{c.nodeValue=d},setElementText:(c,d)=>{c.textContent=d},parentNode:c=>c.parentNode,nextSibling:c=>c.nextSibling,querySelector:c=>doc.querySelector(c),setScopeId(c,d){c.setAttribute(d,"")},cloneNode(c){const d=c.cloneNode(!0);return"_value"in c&&(d._value=c._value),d},insertStaticContent(c,d,f,m,g,v){const y=f?f.previousSibling:d.lastChild;if(g&&(g===v||g.nextSibling))for(;d.insertBefore(g.cloneNode(!0),f),!(g===v||!(g=g.nextSibling)););else{templateContainer.innerHTML=m?`${c}`:c;const _=templateContainer.content;if(m){const b=_.firstChild;for(;b.firstChild;)_.appendChild(b.firstChild);_.removeChild(b)}d.insertBefore(_,f)}return[y?y.nextSibling:d.firstChild,f?f.previousSibling:d.lastChild]}};function patchClass(c,d,f){const m=c._vtc;m&&(d=(d?[d,...m]:[...m]).join(" ")),d==null?c.removeAttribute("class"):f?c.setAttribute("class",d):c.className=d}function patchStyle(c,d,f){const m=c.style,g=isString$2(f);if(f&&!g){for(const v in f)setStyle(m,v,f[v]);if(d&&!isString$2(d))for(const v in d)f[v]==null&&setStyle(m,v,"")}else{const v=m.display;g?d!==f&&(m.cssText=f):d&&c.removeAttribute("style"),"_vod"in c&&(m.display=v)}}const importantRE=/\s*!important$/;function setStyle(c,d,f){if(isArray$e(f))f.forEach(m=>setStyle(c,d,m));else if(f==null&&(f=""),d.startsWith("--"))c.setProperty(d,f);else{const m=autoPrefix(c,d);importantRE.test(f)?c.setProperty(hyphenate(m),f.replace(importantRE,""),"important"):c[m]=f}}const prefixes$1=["Webkit","Moz","ms"],prefixCache={};function autoPrefix(c,d){const f=prefixCache[d];if(f)return f;let m=camelize(d);if(m!=="filter"&&m in c)return prefixCache[d]=m;m=capitalize$3(m);for(let g=0;g: value ${f} is invalid.`,b)}_&&c.removeAttribute(d)}const[_getNow,skipTimestampCheck]=(()=>{let c=Date.now,d=!1;if(typeof window!="undefined"){Date.now()>document.createEvent("Event").timeStamp&&(c=performance.now.bind(performance));const f=navigator.userAgent.match(/firefox\/(\d+)/i);d=!!(f&&Number(f[1])<=53)}return[c,d]})();let cachedNow=0;const p=Promise.resolve(),reset=()=>{cachedNow=0},getNow=()=>cachedNow||(p.then(reset),cachedNow=_getNow());function addEventListener(c,d,f,m){c.addEventListener(d,f,m)}function removeEventListener(c,d,f,m){c.removeEventListener(d,f,m)}function patchEvent(c,d,f,m,g=null){const v=c._vei||(c._vei={}),y=v[d];if(m&&y)y.value=m;else{const[_,b]=parseName(d);if(m){const C=v[d]=createInvoker(m,g);addEventListener(c,_,C,b)}else y&&(removeEventListener(c,_,y,b),v[d]=void 0)}}const optionsModifierRE=/(?:Once|Passive|Capture)$/;function parseName(c){let d;if(optionsModifierRE.test(c)){d={};let f;for(;f=c.match(optionsModifierRE);)c=c.slice(0,c.length-f[0].length),d[f[0].toLowerCase()]=!0}return[hyphenate(c.slice(2)),d]}function createInvoker(c,d){const f=m=>{const g=m.timeStamp||_getNow();(skipTimestampCheck||g>=f.attached-1)&&callWithAsyncErrorHandling(patchStopImmediatePropagation(m,f.value),d,5,[m])};return f.value=c,f.attached=getNow(),f}function patchStopImmediatePropagation(c,d){if(isArray$e(d)){const f=c.stopImmediatePropagation;return c.stopImmediatePropagation=()=>{f.call(c),c._stopped=!0},d.map(m=>g=>!g._stopped&&m&&m(g))}else return d}const nativeOnRE=/^on[a-z]/,patchProp=(c,d,f,m,g=!1,v,y,_,b)=>{d==="class"?patchClass(c,m,g):d==="style"?patchStyle(c,f,m):isOn(d)?isModelListener(d)||patchEvent(c,d,f,m,y):(d[0]==="."?(d=d.slice(1),!0):d[0]==="^"?(d=d.slice(1),!1):shouldSetAsProp(c,d,m,g))?patchDOMProp(c,d,m,v,y,_,b):(d==="true-value"?c._trueValue=m:d==="false-value"&&(c._falseValue=m),patchAttr(c,d,m,g))};function shouldSetAsProp(c,d,f,m){return m?!!(d==="innerHTML"||d==="textContent"||d in c&&nativeOnRE.test(d)&&isFunction$5(f)):d==="spellcheck"||d==="draggable"||d==="translate"||d==="form"||d==="list"&&c.tagName==="INPUT"||d==="type"&&c.tagName==="TEXTAREA"||nativeOnRE.test(d)&&isString$2(f)?!1:d in c}const TRANSITION="transition",ANIMATION="animation",Transition=(c,{slots:d})=>h(BaseTransition,resolveTransitionProps(c),d);Transition.displayName="Transition";const DOMTransitionPropsValidators={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Transition.props=extend$1({},BaseTransition.props,DOMTransitionPropsValidators);const callHook=(c,d=[])=>{isArray$e(c)?c.forEach(f=>f(...d)):c&&c(...d)},hasExplicitCallback=c=>c?isArray$e(c)?c.some(d=>d.length>1):c.length>1:!1;function resolveTransitionProps(c){const d={};for(const se in c)se in DOMTransitionPropsValidators||(d[se]=c[se]);if(c.css===!1)return d;const{name:f="v",type:m,duration:g,enterFromClass:v=`${f}-enter-from`,enterActiveClass:y=`${f}-enter-active`,enterToClass:_=`${f}-enter-to`,appearFromClass:b=v,appearActiveClass:C=y,appearToClass:k=_,leaveFromClass:$=`${f}-leave-from`,leaveActiveClass:S=`${f}-leave-active`,leaveToClass:w=`${f}-leave-to`}=c,E=normalizeDuration(g),A=E&&E[0],P=E&&E[1],{onBeforeEnter:x,onEnter:I,onEnterCancelled:V,onLeave:R,onLeaveCancelled:B,onBeforeAppear:U=x,onAppear:G=I,onAppearCancelled:X=V}=d,re=(se,nc,rc)=>{removeTransitionClass(se,nc?k:_),removeTransitionClass(se,nc?C:y),rc&&rc()},me=(se,nc)=>{se._isLeaving=!1,removeTransitionClass(se,$),removeTransitionClass(se,w),removeTransitionClass(se,S),nc&&nc()},ue=se=>(nc,rc)=>{const sc=se?G:I,ac=()=>re(nc,se,rc);callHook(sc,[nc,ac]),nextFrame(()=>{removeTransitionClass(nc,se?b:v),addTransitionClass(nc,se?k:_),hasExplicitCallback(sc)||whenTransitionEnds(nc,m,A,ac)})};return extend$1(d,{onBeforeEnter(se){callHook(x,[se]),addTransitionClass(se,v),addTransitionClass(se,y)},onBeforeAppear(se){callHook(U,[se]),addTransitionClass(se,b),addTransitionClass(se,C)},onEnter:ue(!1),onAppear:ue(!0),onLeave(se,nc){se._isLeaving=!0;const rc=()=>me(se,nc);addTransitionClass(se,$),forceReflow(),addTransitionClass(se,S),nextFrame(()=>{!se._isLeaving||(removeTransitionClass(se,$),addTransitionClass(se,w),hasExplicitCallback(R)||whenTransitionEnds(se,m,P,rc))}),callHook(R,[se,rc])},onEnterCancelled(se){re(se,!1),callHook(V,[se])},onAppearCancelled(se){re(se,!0),callHook(X,[se])},onLeaveCancelled(se){me(se),callHook(B,[se])}})}function normalizeDuration(c){if(c==null)return null;if(isObject$7(c))return[NumberOf(c.enter),NumberOf(c.leave)];{const d=NumberOf(c);return[d,d]}}function NumberOf(c){const d=toNumber(c);return validateDuration(d),d}function validateDuration(c){typeof c!="number"?warn$2(` explicit duration is not a valid number - got ${JSON.stringify(c)}.`):isNaN(c)&&warn$2(" explicit duration is NaN - the duration expression might be incorrect.")}function addTransitionClass(c,d){d.split(/\s+/).forEach(f=>f&&c.classList.add(f)),(c._vtc||(c._vtc=new Set)).add(d)}function removeTransitionClass(c,d){d.split(/\s+/).forEach(m=>m&&c.classList.remove(m));const{_vtc:f}=c;f&&(f.delete(d),f.size||(c._vtc=void 0))}function nextFrame(c){requestAnimationFrame(()=>{requestAnimationFrame(c)})}let endId=0;function whenTransitionEnds(c,d,f,m){const g=c._endId=++endId,v=()=>{g===c._endId&&m()};if(f)return setTimeout(v,f);const{type:y,timeout:_,propCount:b}=getTransitionInfo(c,d);if(!y)return m();const C=y+"end";let k=0;const $=()=>{c.removeEventListener(C,S),v()},S=w=>{w.target===c&&++k>=b&&$()};setTimeout(()=>{k(f[E]||"").split(", "),g=m(TRANSITION+"Delay"),v=m(TRANSITION+"Duration"),y=getTimeout(g,v),_=m(ANIMATION+"Delay"),b=m(ANIMATION+"Duration"),C=getTimeout(_,b);let k=null,$=0,S=0;d===TRANSITION?y>0&&(k=TRANSITION,$=y,S=v.length):d===ANIMATION?C>0&&(k=ANIMATION,$=C,S=b.length):($=Math.max(y,C),k=$>0?y>C?TRANSITION:ANIMATION:null,S=k?k===TRANSITION?v.length:b.length:0);const w=k===TRANSITION&&/\b(transform|all)(,|$)/.test(f[TRANSITION+"Property"]);return{type:k,timeout:$,propCount:S,hasTransform:w}}function getTimeout(c,d){for(;c.lengthtoMs(f)+toMs(c[m])))}function toMs(c){return Number(c.slice(0,-1).replace(",","."))*1e3}function forceReflow(){return document.body.offsetHeight}const getModelAssigner=c=>{const d=c.props["onUpdate:modelValue"]||!1;return isArray$e(d)?f=>invokeArrayFns(d,f):d};function onCompositionStart(c){c.target.composing=!0}function onCompositionEnd(c){const d=c.target;d.composing&&(d.composing=!1,d.dispatchEvent(new Event("input")))}const vModelText={created(c,{modifiers:{lazy:d,trim:f,number:m}},g){c._assign=getModelAssigner(g);const v=m||g.props&&g.props.type==="number";addEventListener(c,d?"change":"input",y=>{if(y.target.composing)return;let _=c.value;f&&(_=_.trim()),v&&(_=toNumber(_)),c._assign(_)}),f&&addEventListener(c,"change",()=>{c.value=c.value.trim()}),d||(addEventListener(c,"compositionstart",onCompositionStart),addEventListener(c,"compositionend",onCompositionEnd),addEventListener(c,"change",onCompositionEnd))},mounted(c,{value:d}){c.value=d==null?"":d},beforeUpdate(c,{value:d,modifiers:{lazy:f,trim:m,number:g}},v){if(c._assign=getModelAssigner(v),c.composing||document.activeElement===c&&c.type!=="range"&&(f||m&&c.value.trim()===d||(g||c.type==="number")&&toNumber(c.value)===d))return;const y=d==null?"":d;c.value!==y&&(c.value=y)}},vModelCheckbox={deep:!0,created(c,d,f){c._assign=getModelAssigner(f),addEventListener(c,"change",()=>{const m=c._modelValue,g=getValue$2(c),v=c.checked,y=c._assign;if(isArray$e(m)){const _=looseIndexOf(m,g),b=_!==-1;if(v&&!b)y(m.concat(g));else if(!v&&b){const C=[...m];C.splice(_,1),y(C)}}else if(isSet(m)){const _=new Set(m);v?_.add(g):_.delete(g),y(_)}else y(getCheckboxValue(c,v))})},mounted:setChecked,beforeUpdate(c,d,f){c._assign=getModelAssigner(f),setChecked(c,d,f)}};function setChecked(c,{value:d,oldValue:f},m){c._modelValue=d,isArray$e(d)?c.checked=looseIndexOf(d,m.props.value)>-1:isSet(d)?c.checked=d.has(m.props.value):d!==f&&(c.checked=looseEqual(d,getCheckboxValue(c,!0)))}const vModelRadio={created(c,{value:d},f){c.checked=looseEqual(d,f.props.value),c._assign=getModelAssigner(f),addEventListener(c,"change",()=>{c._assign(getValue$2(c))})},beforeUpdate(c,{value:d,oldValue:f},m){c._assign=getModelAssigner(m),d!==f&&(c.checked=looseEqual(d,m.props.value))}},vModelSelect={deep:!0,created(c,{value:d,modifiers:{number:f}},m){const g=isSet(d);addEventListener(c,"change",()=>{const v=Array.prototype.filter.call(c.options,y=>y.selected).map(y=>f?toNumber(getValue$2(y)):getValue$2(y));c._assign(c.multiple?g?new Set(v):v:v[0])}),c._assign=getModelAssigner(m)},mounted(c,{value:d}){setSelected(c,d)},beforeUpdate(c,d,f){c._assign=getModelAssigner(f)},updated(c,{value:d}){setSelected(c,d)}};function setSelected(c,d){const f=c.multiple;if(f&&!isArray$e(d)&&!isSet(d)){warn$2(`