└── pharmacyproject ├── app ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-310.pyc │ ├── admin.cpython-310.pyc │ ├── apps.cpython-310.pyc │ ├── models.cpython-310.pyc │ ├── urls.cpython-310.pyc │ └── views.cpython-310.pyc ├── admin.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_myorders.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-310.pyc │ │ ├── 0002_myorders.cpython-310.pyc │ │ └── __init__.cpython-310.pyc ├── models.py ├── tests.py ├── urls.py └── views.py ├── db.sqlite3 ├── manage.py ├── media └── products │ ├── bootstrap.png │ ├── cc.jpg │ ├── fh.jpg │ ├── gar.jpg │ └── tab1.jpg ├── pharmacyproject ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-310.pyc │ ├── settings.cpython-310.pyc │ ├── urls.cpython-310.pyc │ └── wsgi.cpython-310.pyc ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py ├── static ├── css │ └── style.css ├── images │ ├── css │ │ └── style.css │ ├── one.jpg │ ├── three.jpg │ └── two.jpg └── js │ └── bootstrap.js └── templates ├── About.html ├── Home.html ├── base.html ├── contact.html ├── login.html ├── medicines.html ├── messages.html ├── orders.html ├── products.html ├── search.html └── signup.html /pharmacyproject/app/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/__init__.py -------------------------------------------------------------------------------- /pharmacyproject/app/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/app/__pycache__/admin.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/__pycache__/admin.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/app/__pycache__/apps.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/__pycache__/apps.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/app/__pycache__/models.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/__pycache__/models.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/app/__pycache__/urls.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/__pycache__/urls.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/app/__pycache__/views.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/__pycache__/views.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/app/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import Contact,Medicines,ProductItems,MyOrders 3 | # Register your models here. 4 | admin.site.register(Contact) 5 | admin.site.register(Medicines) 6 | admin.site.register(ProductItems) 7 | admin.site.register(MyOrders) -------------------------------------------------------------------------------- /pharmacyproject/app/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AppConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'app' 7 | -------------------------------------------------------------------------------- /pharmacyproject/app/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.3 on 2022-06-12 09:14 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | initial = True 9 | 10 | dependencies = [ 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='Contact', 16 | fields=[ 17 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 | ('name', models.CharField(max_length=50)), 19 | ('email', models.EmailField(max_length=254)), 20 | ('phoneno', models.CharField(max_length=10)), 21 | ('desc', models.TextField()), 22 | ], 23 | ), 24 | migrations.CreateModel( 25 | name='Medicines', 26 | fields=[ 27 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 28 | ('medicine_name', models.CharField(max_length=250)), 29 | ('medicine_image', models.ImageField(blank=True, null=True, upload_to='products')), 30 | ('medicine_price', models.IntegerField()), 31 | ('medicine_descripton', models.TextField()), 32 | ('medicine_exp', models.DateField()), 33 | ], 34 | ), 35 | migrations.CreateModel( 36 | name='ProductItems', 37 | fields=[ 38 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 39 | ('prod_name', models.CharField(max_length=250)), 40 | ('prod_image', models.ImageField(blank=True, null=True, upload_to='products')), 41 | ('prod_price', models.IntegerField()), 42 | ('prod_descripton', models.TextField()), 43 | ('prod_exp', models.DateField()), 44 | ], 45 | ), 46 | ] 47 | -------------------------------------------------------------------------------- /pharmacyproject/app/migrations/0002_myorders.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.3 on 2022-06-12 09:35 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('app', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='MyOrders', 15 | fields=[ 16 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('name', models.CharField(max_length=30)), 18 | ('email', models.EmailField(max_length=254)), 19 | ('items', models.CharField(max_length=1500)), 20 | ('address', models.TextField()), 21 | ('quantity', models.CharField(max_length=100)), 22 | ('price', models.CharField(max_length=100)), 23 | ('phone_num', models.CharField(max_length=10)), 24 | ('delivery', models.BooleanField(default=False)), 25 | ], 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /pharmacyproject/app/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/migrations/__init__.py -------------------------------------------------------------------------------- /pharmacyproject/app/migrations/__pycache__/0001_initial.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/migrations/__pycache__/0001_initial.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/app/migrations/__pycache__/0002_myorders.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/migrations/__pycache__/0002_myorders.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/app/migrations/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/app/migrations/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/app/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | # Create your models here. 5 | class Contact(models.Model): 6 | name=models.CharField(max_length=50) 7 | email=models.EmailField() 8 | phoneno=models.CharField(max_length=10) 9 | desc=models.TextField() 10 | 11 | def __str__(self): 12 | return self.email 13 | 14 | 15 | class Medicines(models.Model): 16 | medicine_name=models.CharField(max_length=250) 17 | medicine_image=models.ImageField(upload_to="products",blank=True,null=True) 18 | medicine_price=models.IntegerField() 19 | medicine_descripton=models.TextField() 20 | medicine_exp=models.DateField() 21 | def __str__(self): 22 | return self.medicine_name 23 | 24 | class ProductItems(models.Model): 25 | prod_name=models.CharField(max_length=250) 26 | prod_image=models.ImageField(upload_to="products",blank=True,null=True) 27 | prod_price=models.IntegerField() 28 | prod_descripton=models.TextField() 29 | prod_exp=models.DateField() 30 | def __str__(self): 31 | return self.prod_name 32 | 33 | class MyOrders(models.Model): 34 | name=models.CharField(max_length=30) 35 | email=models.EmailField() 36 | items=models.CharField(max_length=1500) 37 | address=models.TextField() 38 | quantity=models.CharField(max_length=100) 39 | price=models.CharField(max_length=100) 40 | phone_num=models.CharField(max_length=10) 41 | delivery=models.BooleanField(default=False) 42 | def __int__(self): 43 | return self.id 44 | -------------------------------------------------------------------------------- /pharmacyproject/app/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /pharmacyproject/app/urls.py: -------------------------------------------------------------------------------- 1 | from app import views 2 | from django.urls import path,include 3 | 4 | urlpatterns = [ 5 | path("",views.Home,name="Home"), 6 | path('about',views.About,name="About"), 7 | path('contact',views.contact,name="contact"), 8 | path('signup',views.HandleSignup,name="HandleSignup"), 9 | path('login',views.HandleLogin,name="HandleLogin"), 10 | path('logout',views.HandleLogout,name="HandleLogout"), 11 | path("medicines",views.medicines,name="medicines"), 12 | path("products",views.products,name="products"), 13 | path("orders",views.myorders,name="myorders"), 14 | path("search",views.search,name="search"), 15 | path("orders/",views.deleteOrder,name="deleteOrder"), 16 | 17 | 18 | 19 | ] 20 | -------------------------------------------------------------------------------- /pharmacyproject/app/views.py: -------------------------------------------------------------------------------- 1 | import re 2 | from django.shortcuts import redirect, render, HttpResponse 3 | from django.contrib.auth.models import User 4 | from django.contrib.auth import authenticate, login, logout 5 | from django.contrib import messages 6 | from django.conf import settings 7 | # Create your views here. 8 | from app.models import Contact,Medicines,ProductItems,MyOrders 9 | 10 | 11 | def Home(request): 12 | mymed=Medicines.objects.all() 13 | myprod=ProductItems.objects.all() 14 | context={"mymed":mymed,"myprod":myprod} 15 | return render(request, "Home.html",context) 16 | 17 | 18 | def contact(request): 19 | if request.method=="POST": 20 | name=request.POST.get("name") 21 | email=request.POST.get("email") 22 | phon=request.POST.get("num") 23 | desc=request.POST.get("desc") 24 | query=Contact(name=name,email=email,phoneno=phon,desc=desc) 25 | query.save() 26 | messages.info(request,f"Thank You. Will Get back you soon {name}") 27 | 28 | return render(request, "contact.html") 29 | 30 | 31 | def About(request): 32 | return render(request, "About.html") 33 | 34 | 35 | def HandleSignup(request): 36 | # logic 37 | if request.method == "POST": 38 | 39 | uname = request.POST.get("username") 40 | email = request.POST.get("email") 41 | fname = request.POST.get("fname") 42 | lname = request.POST.get("lname") 43 | pass1 = request.POST.get("pass1") 44 | cpass = request.POST.get("pass2") 45 | # print(uname,email,fname,lname,pass1,cpass) 46 | 47 | # check wheater user exists or not 48 | if(pass1 != cpass): 49 | messages.warning(request,"Password is'nt Matching") 50 | return redirect("/signup") 51 | 52 | try: 53 | if User.objects.get(username=email): 54 | messages.info(request,"Username is taken..") 55 | return redirect("/signup") 56 | except: 57 | pass 58 | 59 | myuser = User.objects.create_user(email, uname, pass1) 60 | myuser.first_name = fname 61 | myuser.last_name = lname 62 | 63 | myuser.save() 64 | messages.success(request,"Signup Success") 65 | return redirect("/login") 66 | 67 | return render(request, "signup.html") 68 | 69 | 70 | def HandleLogin(request): 71 | if request.method == "POST": 72 | email = request.POST.get("email") 73 | pass1 = request.POST.get("pass1") 74 | # print(email,pass1) 75 | myuser = authenticate(username=email, password=pass1) 76 | 77 | if myuser is not None: 78 | login(request, myuser) 79 | messages.info(request,"Login Successful") 80 | return redirect("/") 81 | 82 | else: 83 | messages.error(request,"Invalid Credentials") 84 | return redirect("/login") 85 | 86 | return render(request, "login.html") 87 | 88 | 89 | def HandleLogout(request): 90 | logout(request) 91 | messages.warning(request,"Logout") 92 | return redirect("/login") 93 | 94 | 95 | def medicines(request): 96 | mymed=Medicines.objects.all() 97 | context={"mymed":mymed} 98 | # print(context) 99 | return render(request,"medicines.html",context) 100 | 101 | 102 | def products(request): 103 | myprod=ProductItems.objects.all() 104 | context={"myprod":myprod} 105 | # print(context) 106 | return render(request,"products.html",context) 107 | 108 | 109 | 110 | def myorders(request): 111 | if not request.user.is_authenticated: 112 | messages.warning(request,"Please Login to place the Order....") 113 | return redirect("/login") 114 | mymed=Medicines.objects.all() 115 | myprod=ProductItems.objects.all() 116 | 117 | # i am writing a logic to get the user details orders 118 | current_user=request.user.username 119 | # print(current_user) 120 | # i am fetching the data from table MyOrders based on emailid 121 | items=MyOrders.objects.filter(email=current_user) 122 | print(items) 123 | context={"myprod":myprod,"mymed":mymed,"items":items} 124 | if request.method =="POST": 125 | name=request.POST.get("name") 126 | email=request.POST.get("email") 127 | item=request.POST.get("items") 128 | quan=request.POST.get("quantity") 129 | address=request.POST.get("address") 130 | phone=request.POST.get("num") 131 | print(name,email,item,quan,address,phone) 132 | 133 | price="" 134 | for i in mymed: 135 | if item==i.medicine_name: 136 | price=i.medicine_price 137 | 138 | pass 139 | for i in myprod: 140 | if item==i.prod_name: 141 | price=i.prod_price 142 | 143 | pass 144 | 145 | newPrice=int(price)*int(quan) 146 | myquery=MyOrders(name=name,email=email,items=item,address=address,quantity=quan,price=newPrice,phone_num=phone) 147 | myquery.save() 148 | messages.info(request,f"Order is Successfull") 149 | return redirect("/orders") 150 | 151 | 152 | return render(request,"orders.html",context) 153 | 154 | 155 | def search(request): 156 | query=request.GET["getdata"] 157 | print(query) 158 | allPostsMedicines=Medicines.objects.filter(medicine_name__icontains=query) 159 | allPostsProducts=ProductItems.objects.filter(prod_name__icontains=query) 160 | allPosts=allPostsMedicines.union(allPostsProducts) 161 | 162 | return render(request,"search.html",{"Med":allPostsMedicines,"Prod":allPostsProducts,"allItems":allPosts}) 163 | 164 | 165 | 166 | def deleteOrder(request,id): 167 | print(id) 168 | query=MyOrders.objects.get(id=id) 169 | query.delete() 170 | messages.success(request,"Order Cancelled Successfully..") 171 | return redirect("/orders") -------------------------------------------------------------------------------- /pharmacyproject/db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/db.sqlite3 -------------------------------------------------------------------------------- /pharmacyproject/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pharmacyproject.settings') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /pharmacyproject/media/products/bootstrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/media/products/bootstrap.png -------------------------------------------------------------------------------- /pharmacyproject/media/products/cc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/media/products/cc.jpg -------------------------------------------------------------------------------- /pharmacyproject/media/products/fh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/media/products/fh.jpg -------------------------------------------------------------------------------- /pharmacyproject/media/products/gar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/media/products/gar.jpg -------------------------------------------------------------------------------- /pharmacyproject/media/products/tab1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/media/products/tab1.jpg -------------------------------------------------------------------------------- /pharmacyproject/pharmacyproject/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/pharmacyproject/__init__.py -------------------------------------------------------------------------------- /pharmacyproject/pharmacyproject/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/pharmacyproject/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/pharmacyproject/__pycache__/settings.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/pharmacyproject/__pycache__/settings.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/pharmacyproject/__pycache__/urls.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/pharmacyproject/__pycache__/urls.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/pharmacyproject/__pycache__/wsgi.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/pharmacyproject/__pycache__/wsgi.cpython-310.pyc -------------------------------------------------------------------------------- /pharmacyproject/pharmacyproject/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for pharmacyproject project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pharmacyproject.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /pharmacyproject/pharmacyproject/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for pharmacyproject project. 3 | 4 | Generated by 'django-admin startproject' using Django 4.0.3. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.0/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/4.0/ref/settings/ 11 | """ 12 | 13 | from pathlib import Path 14 | from django.contrib.messages import constants as messages 15 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 16 | BASE_DIR = Path(__file__).resolve().parent.parent 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = 'django-insecure-w18o+g_=!y_pfauhf@*hya5eib%4@g-q4u(jjbg%2)m4!%nygh' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | 'app', 41 | ] 42 | 43 | MIDDLEWARE = [ 44 | 'django.middleware.security.SecurityMiddleware', 45 | 'django.contrib.sessions.middleware.SessionMiddleware', 46 | 'django.middleware.common.CommonMiddleware', 47 | 'django.middleware.csrf.CsrfViewMiddleware', 48 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 49 | 'django.contrib.messages.middleware.MessageMiddleware', 50 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 51 | ] 52 | 53 | ROOT_URLCONF = 'pharmacyproject.urls' 54 | 55 | TEMPLATES = [ 56 | { 57 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 58 | 'DIRS': ["templates"], 59 | 'APP_DIRS': True, 60 | 'OPTIONS': { 61 | 'context_processors': [ 62 | 'django.template.context_processors.debug', 63 | 'django.template.context_processors.request', 64 | 'django.contrib.auth.context_processors.auth', 65 | 'django.contrib.messages.context_processors.messages', 66 | ], 67 | }, 68 | }, 69 | ] 70 | 71 | WSGI_APPLICATION = 'pharmacyproject.wsgi.application' 72 | 73 | 74 | # Database 75 | # https://docs.djangoproject.com/en/4.0/ref/settings/#databases 76 | 77 | DATABASES = { 78 | 'default': { 79 | 'ENGINE': 'django.db.backends.sqlite3', 80 | 'NAME': BASE_DIR / 'db.sqlite3', 81 | } 82 | } 83 | 84 | 85 | # Password validation 86 | # https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators 87 | 88 | AUTH_PASSWORD_VALIDATORS = [ 89 | { 90 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 91 | }, 92 | { 93 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 94 | }, 95 | { 96 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 97 | }, 98 | { 99 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 100 | }, 101 | ] 102 | 103 | 104 | # Internationalization 105 | # https://docs.djangoproject.com/en/4.0/topics/i18n/ 106 | 107 | LANGUAGE_CODE = 'en-us' 108 | 109 | TIME_ZONE = 'UTC' 110 | 111 | USE_I18N = True 112 | 113 | USE_TZ = True 114 | 115 | 116 | # Static files (CSS, JavaScript, Images) 117 | # https://docs.djangoproject.com/en/4.0/howto/static-files/ 118 | 119 | 120 | STATIC_URL = 'static/' 121 | import os 122 | 123 | 124 | MEDIA_URL = '/media/' 125 | MEDIA_ROOT= os.path.join(BASE_DIR,'media') 126 | 127 | STATICFILES_DIRS = [ 128 | os.path.join(BASE_DIR,'static') 129 | ] 130 | 131 | # Default primary key field type 132 | # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field 133 | MESSAGE_TAGS={ 134 | messages.ERROR:'danger' 135 | } 136 | 137 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 138 | -------------------------------------------------------------------------------- /pharmacyproject/pharmacyproject/urls.py: -------------------------------------------------------------------------------- 1 | """pharmacyproject URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/4.0/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path,include 18 | from django.conf import settings 19 | from django.conf.urls.static import static 20 | 21 | 22 | 23 | urlpatterns = [ 24 | path('admin/', admin.site.urls), 25 | path('',include("app.urls")), 26 | ] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT) 27 | -------------------------------------------------------------------------------- /pharmacyproject/pharmacyproject/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for pharmacyproject project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pharmacyproject.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /pharmacyproject/static/images/one.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/static/images/one.jpg -------------------------------------------------------------------------------- /pharmacyproject/static/images/three.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/static/images/three.jpg -------------------------------------------------------------------------------- /pharmacyproject/static/images/two.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arkprocoder/Pharmacy-Django-Mini-Project/d67fc4a8349d35704e57c537f5554a697d6208f1/pharmacyproject/static/images/two.jpg -------------------------------------------------------------------------------- /pharmacyproject/static/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v5.0.2 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5 | */ 6 | !(function (t, e) { 7 | "object" == typeof exports && "undefined" != typeof module 8 | ? (module.exports = e()) 9 | : "function" == typeof define && define.amd 10 | ? define(e) 11 | : ((t = 12 | "undefined" != typeof globalThis ? globalThis : t || self).bootstrap = 13 | e()); 14 | })(this, function () { 15 | "use strict"; 16 | const t = { 17 | find: (t, e = document.documentElement) => 18 | [].concat(...Element.prototype.querySelectorAll.call(e, t)), 19 | findOne: (t, e = document.documentElement) => 20 | Element.prototype.querySelector.call(e, t), 21 | children: (t, e) => [].concat(...t.children).filter((t) => t.matches(e)), 22 | parents(t, e) { 23 | const i = []; 24 | let n = t.parentNode; 25 | for (; n && n.nodeType === Node.ELEMENT_NODE && 3 !== n.nodeType; ) 26 | n.matches(e) && i.push(n), (n = n.parentNode); 27 | return i; 28 | }, 29 | prev(t, e) { 30 | let i = t.previousElementSibling; 31 | for (; i; ) { 32 | if (i.matches(e)) return [i]; 33 | i = i.previousElementSibling; 34 | } 35 | return []; 36 | }, 37 | next(t, e) { 38 | let i = t.nextElementSibling; 39 | for (; i; ) { 40 | if (i.matches(e)) return [i]; 41 | i = i.nextElementSibling; 42 | } 43 | return []; 44 | }, 45 | }, 46 | e = (t) => { 47 | do { 48 | t += Math.floor(1e6 * Math.random()); 49 | } while (document.getElementById(t)); 50 | return t; 51 | }, 52 | i = (t) => { 53 | let e = t.getAttribute("data-bs-target"); 54 | if (!e || "#" === e) { 55 | let i = t.getAttribute("href"); 56 | if (!i || (!i.includes("#") && !i.startsWith("."))) return null; 57 | i.includes("#") && !i.startsWith("#") && (i = "#" + i.split("#")[1]), 58 | (e = i && "#" !== i ? i.trim() : null); 59 | } 60 | return e; 61 | }, 62 | n = (t) => { 63 | const e = i(t); 64 | return e && document.querySelector(e) ? e : null; 65 | }, 66 | s = (t) => { 67 | const e = i(t); 68 | return e ? document.querySelector(e) : null; 69 | }, 70 | o = (t) => { 71 | t.dispatchEvent(new Event("transitionend")); 72 | }, 73 | r = (t) => 74 | !(!t || "object" != typeof t) && 75 | (void 0 !== t.jquery && (t = t[0]), void 0 !== t.nodeType), 76 | a = (e) => 77 | r(e) 78 | ? e.jquery 79 | ? e[0] 80 | : e 81 | : "string" == typeof e && e.length > 0 82 | ? t.findOne(e) 83 | : null, 84 | l = (t, e, i) => { 85 | Object.keys(i).forEach((n) => { 86 | const s = i[n], 87 | o = e[n], 88 | a = 89 | o && r(o) 90 | ? "element" 91 | : null == (l = o) 92 | ? "" + l 93 | : {}.toString 94 | .call(l) 95 | .match(/\s([a-z]+)/i)[1] 96 | .toLowerCase(); 97 | var l; 98 | if (!new RegExp(s).test(a)) 99 | throw new TypeError( 100 | `${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".` 101 | ); 102 | }); 103 | }, 104 | c = (t) => 105 | !(!r(t) || 0 === t.getClientRects().length) && 106 | "visible" === getComputedStyle(t).getPropertyValue("visibility"), 107 | h = (t) => 108 | !t || 109 | t.nodeType !== Node.ELEMENT_NODE || 110 | !!t.classList.contains("disabled") || 111 | (void 0 !== t.disabled 112 | ? t.disabled 113 | : t.hasAttribute("disabled") && "false" !== t.getAttribute("disabled")), 114 | d = (t) => { 115 | if (!document.documentElement.attachShadow) return null; 116 | if ("function" == typeof t.getRootNode) { 117 | const e = t.getRootNode(); 118 | return e instanceof ShadowRoot ? e : null; 119 | } 120 | return t instanceof ShadowRoot 121 | ? t 122 | : t.parentNode 123 | ? d(t.parentNode) 124 | : null; 125 | }, 126 | u = () => {}, 127 | f = (t) => t.offsetHeight, 128 | p = () => { 129 | const { jQuery: t } = window; 130 | return t && !document.body.hasAttribute("data-bs-no-jquery") ? t : null; 131 | }, 132 | m = [], 133 | g = () => "rtl" === document.documentElement.dir, 134 | _ = (t) => { 135 | var e; 136 | (e = () => { 137 | const e = p(); 138 | if (e) { 139 | const i = t.NAME, 140 | n = e.fn[i]; 141 | (e.fn[i] = t.jQueryInterface), 142 | (e.fn[i].Constructor = t), 143 | (e.fn[i].noConflict = () => ((e.fn[i] = n), t.jQueryInterface)); 144 | } 145 | }), 146 | "loading" === document.readyState 147 | ? (m.length || 148 | document.addEventListener("DOMContentLoaded", () => { 149 | m.forEach((t) => t()); 150 | }), 151 | m.push(e)) 152 | : e(); 153 | }, 154 | b = (t) => { 155 | "function" == typeof t && t(); 156 | }, 157 | v = (t, e, i = !0) => { 158 | if (!i) return void b(t); 159 | const n = 160 | ((t) => { 161 | if (!t) return 0; 162 | let { transitionDuration: e, transitionDelay: i } = 163 | window.getComputedStyle(t); 164 | const n = Number.parseFloat(e), 165 | s = Number.parseFloat(i); 166 | return n || s 167 | ? ((e = e.split(",")[0]), 168 | (i = i.split(",")[0]), 169 | 1e3 * (Number.parseFloat(e) + Number.parseFloat(i))) 170 | : 0; 171 | })(e) + 5; 172 | let s = !1; 173 | const r = ({ target: i }) => { 174 | i === e && ((s = !0), e.removeEventListener("transitionend", r), b(t)); 175 | }; 176 | e.addEventListener("transitionend", r), 177 | setTimeout(() => { 178 | s || o(e); 179 | }, n); 180 | }, 181 | y = (t, e, i, n) => { 182 | let s = t.indexOf(e); 183 | if (-1 === s) return t[!i && n ? t.length - 1 : 0]; 184 | const o = t.length; 185 | return ( 186 | (s += i ? 1 : -1), 187 | n && (s = (s + o) % o), 188 | t[Math.max(0, Math.min(s, o - 1))] 189 | ); 190 | }, 191 | w = /[^.]*(?=\..*)\.|.*/, 192 | E = /\..*/, 193 | A = /::\d+$/, 194 | T = {}; 195 | let O = 1; 196 | const C = { mouseenter: "mouseover", mouseleave: "mouseout" }, 197 | k = /^(mouseenter|mouseleave)/i, 198 | L = new Set([ 199 | "click", 200 | "dblclick", 201 | "mouseup", 202 | "mousedown", 203 | "contextmenu", 204 | "mousewheel", 205 | "DOMMouseScroll", 206 | "mouseover", 207 | "mouseout", 208 | "mousemove", 209 | "selectstart", 210 | "selectend", 211 | "keydown", 212 | "keypress", 213 | "keyup", 214 | "orientationchange", 215 | "touchstart", 216 | "touchmove", 217 | "touchend", 218 | "touchcancel", 219 | "pointerdown", 220 | "pointermove", 221 | "pointerup", 222 | "pointerleave", 223 | "pointercancel", 224 | "gesturestart", 225 | "gesturechange", 226 | "gestureend", 227 | "focus", 228 | "blur", 229 | "change", 230 | "reset", 231 | "select", 232 | "submit", 233 | "focusin", 234 | "focusout", 235 | "load", 236 | "unload", 237 | "beforeunload", 238 | "resize", 239 | "move", 240 | "DOMContentLoaded", 241 | "readystatechange", 242 | "error", 243 | "abort", 244 | "scroll", 245 | ]); 246 | function x(t, e) { 247 | return (e && `${e}::${O++}`) || t.uidEvent || O++; 248 | } 249 | function D(t) { 250 | const e = x(t); 251 | return (t.uidEvent = e), (T[e] = T[e] || {}), T[e]; 252 | } 253 | function S(t, e, i = null) { 254 | const n = Object.keys(t); 255 | for (let s = 0, o = n.length; s < o; s++) { 256 | const o = t[n[s]]; 257 | if (o.originalHandler === e && o.delegationSelector === i) return o; 258 | } 259 | return null; 260 | } 261 | function I(t, e, i) { 262 | const n = "string" == typeof e, 263 | s = n ? i : e; 264 | let o = M(t); 265 | return L.has(o) || (o = t), [n, s, o]; 266 | } 267 | function N(t, e, i, n, s) { 268 | if ("string" != typeof e || !t) return; 269 | if ((i || ((i = n), (n = null)), k.test(e))) { 270 | const t = (t) => 271 | function (e) { 272 | if ( 273 | !e.relatedTarget || 274 | (e.relatedTarget !== e.delegateTarget && 275 | !e.delegateTarget.contains(e.relatedTarget)) 276 | ) 277 | return t.call(this, e); 278 | }; 279 | n ? (n = t(n)) : (i = t(i)); 280 | } 281 | const [o, r, a] = I(e, i, n), 282 | l = D(t), 283 | c = l[a] || (l[a] = {}), 284 | h = S(c, r, o ? i : null); 285 | if (h) return void (h.oneOff = h.oneOff && s); 286 | const d = x(r, e.replace(w, "")), 287 | u = o 288 | ? (function (t, e, i) { 289 | return function n(s) { 290 | const o = t.querySelectorAll(e); 291 | for (let { target: r } = s; r && r !== this; r = r.parentNode) 292 | for (let a = o.length; a--; ) 293 | if (o[a] === r) 294 | return ( 295 | (s.delegateTarget = r), 296 | n.oneOff && P.off(t, s.type, e, i), 297 | i.apply(r, [s]) 298 | ); 299 | return null; 300 | }; 301 | })(t, i, n) 302 | : (function (t, e) { 303 | return function i(n) { 304 | return ( 305 | (n.delegateTarget = t), 306 | i.oneOff && P.off(t, n.type, e), 307 | e.apply(t, [n]) 308 | ); 309 | }; 310 | })(t, i); 311 | (u.delegationSelector = o ? i : null), 312 | (u.originalHandler = r), 313 | (u.oneOff = s), 314 | (u.uidEvent = d), 315 | (c[d] = u), 316 | t.addEventListener(a, u, o); 317 | } 318 | function j(t, e, i, n, s) { 319 | const o = S(e[i], n, s); 320 | o && (t.removeEventListener(i, o, Boolean(s)), delete e[i][o.uidEvent]); 321 | } 322 | function M(t) { 323 | return (t = t.replace(E, "")), C[t] || t; 324 | } 325 | const P = { 326 | on(t, e, i, n) { 327 | N(t, e, i, n, !1); 328 | }, 329 | one(t, e, i, n) { 330 | N(t, e, i, n, !0); 331 | }, 332 | off(t, e, i, n) { 333 | if ("string" != typeof e || !t) return; 334 | const [s, o, r] = I(e, i, n), 335 | a = r !== e, 336 | l = D(t), 337 | c = e.startsWith("."); 338 | if (void 0 !== o) { 339 | if (!l || !l[r]) return; 340 | return void j(t, l, r, o, s ? i : null); 341 | } 342 | c && 343 | Object.keys(l).forEach((i) => { 344 | !(function (t, e, i, n) { 345 | const s = e[i] || {}; 346 | Object.keys(s).forEach((o) => { 347 | if (o.includes(n)) { 348 | const n = s[o]; 349 | j(t, e, i, n.originalHandler, n.delegationSelector); 350 | } 351 | }); 352 | })(t, l, i, e.slice(1)); 353 | }); 354 | const h = l[r] || {}; 355 | Object.keys(h).forEach((i) => { 356 | const n = i.replace(A, ""); 357 | if (!a || e.includes(n)) { 358 | const e = h[i]; 359 | j(t, l, r, e.originalHandler, e.delegationSelector); 360 | } 361 | }); 362 | }, 363 | trigger(t, e, i) { 364 | if ("string" != typeof e || !t) return null; 365 | const n = p(), 366 | s = M(e), 367 | o = e !== s, 368 | r = L.has(s); 369 | let a, 370 | l = !0, 371 | c = !0, 372 | h = !1, 373 | d = null; 374 | return ( 375 | o && 376 | n && 377 | ((a = n.Event(e, i)), 378 | n(t).trigger(a), 379 | (l = !a.isPropagationStopped()), 380 | (c = !a.isImmediatePropagationStopped()), 381 | (h = a.isDefaultPrevented())), 382 | r 383 | ? ((d = document.createEvent("HTMLEvents")), d.initEvent(s, l, !0)) 384 | : (d = new CustomEvent(e, { bubbles: l, cancelable: !0 })), 385 | void 0 !== i && 386 | Object.keys(i).forEach((t) => { 387 | Object.defineProperty(d, t, { get: () => i[t] }); 388 | }), 389 | h && d.preventDefault(), 390 | c && t.dispatchEvent(d), 391 | d.defaultPrevented && void 0 !== a && a.preventDefault(), 392 | d 393 | ); 394 | }, 395 | }, 396 | H = new Map(); 397 | var R = { 398 | set(t, e, i) { 399 | H.has(t) || H.set(t, new Map()); 400 | const n = H.get(t); 401 | n.has(e) || 0 === n.size 402 | ? n.set(e, i) 403 | : console.error( 404 | `Bootstrap doesn't allow more than one instance per element. Bound instance: ${ 405 | Array.from(n.keys())[0] 406 | }.` 407 | ); 408 | }, 409 | get: (t, e) => (H.has(t) && H.get(t).get(e)) || null, 410 | remove(t, e) { 411 | if (!H.has(t)) return; 412 | const i = H.get(t); 413 | i.delete(e), 0 === i.size && H.delete(t); 414 | }, 415 | }; 416 | class B { 417 | constructor(t) { 418 | (t = a(t)) && 419 | ((this._element = t), 420 | R.set(this._element, this.constructor.DATA_KEY, this)); 421 | } 422 | dispose() { 423 | R.remove(this._element, this.constructor.DATA_KEY), 424 | P.off(this._element, this.constructor.EVENT_KEY), 425 | Object.getOwnPropertyNames(this).forEach((t) => { 426 | this[t] = null; 427 | }); 428 | } 429 | _queueCallback(t, e, i = !0) { 430 | v(t, e, i); 431 | } 432 | static getInstance(t) { 433 | return R.get(t, this.DATA_KEY); 434 | } 435 | static getOrCreateInstance(t, e = {}) { 436 | return ( 437 | this.getInstance(t) || new this(t, "object" == typeof e ? e : null) 438 | ); 439 | } 440 | static get VERSION() { 441 | return "5.0.2"; 442 | } 443 | static get NAME() { 444 | throw new Error( 445 | 'You have to implement the static method "NAME", for each component!' 446 | ); 447 | } 448 | static get DATA_KEY() { 449 | return "bs." + this.NAME; 450 | } 451 | static get EVENT_KEY() { 452 | return "." + this.DATA_KEY; 453 | } 454 | } 455 | class W extends B { 456 | static get NAME() { 457 | return "alert"; 458 | } 459 | close(t) { 460 | const e = t ? this._getRootElement(t) : this._element, 461 | i = this._triggerCloseEvent(e); 462 | null === i || i.defaultPrevented || this._removeElement(e); 463 | } 464 | _getRootElement(t) { 465 | return s(t) || t.closest(".alert"); 466 | } 467 | _triggerCloseEvent(t) { 468 | return P.trigger(t, "close.bs.alert"); 469 | } 470 | _removeElement(t) { 471 | t.classList.remove("show"); 472 | const e = t.classList.contains("fade"); 473 | this._queueCallback(() => this._destroyElement(t), t, e); 474 | } 475 | _destroyElement(t) { 476 | t.remove(), P.trigger(t, "closed.bs.alert"); 477 | } 478 | static jQueryInterface(t) { 479 | return this.each(function () { 480 | const e = W.getOrCreateInstance(this); 481 | "close" === t && e[t](this); 482 | }); 483 | } 484 | static handleDismiss(t) { 485 | return function (e) { 486 | e && e.preventDefault(), t.close(this); 487 | }; 488 | } 489 | } 490 | P.on( 491 | document, 492 | "click.bs.alert.data-api", 493 | '[data-bs-dismiss="alert"]', 494 | W.handleDismiss(new W()) 495 | ), 496 | _(W); 497 | class q extends B { 498 | static get NAME() { 499 | return "button"; 500 | } 501 | toggle() { 502 | this._element.setAttribute( 503 | "aria-pressed", 504 | this._element.classList.toggle("active") 505 | ); 506 | } 507 | static jQueryInterface(t) { 508 | return this.each(function () { 509 | const e = q.getOrCreateInstance(this); 510 | "toggle" === t && e[t](); 511 | }); 512 | } 513 | } 514 | function z(t) { 515 | return ( 516 | "true" === t || 517 | ("false" !== t && 518 | (t === Number(t).toString() 519 | ? Number(t) 520 | : "" === t || "null" === t 521 | ? null 522 | : t)) 523 | ); 524 | } 525 | function $(t) { 526 | return t.replace(/[A-Z]/g, (t) => "-" + t.toLowerCase()); 527 | } 528 | P.on( 529 | document, 530 | "click.bs.button.data-api", 531 | '[data-bs-toggle="button"]', 532 | (t) => { 533 | t.preventDefault(); 534 | const e = t.target.closest('[data-bs-toggle="button"]'); 535 | q.getOrCreateInstance(e).toggle(); 536 | } 537 | ), 538 | _(q); 539 | const U = { 540 | setDataAttribute(t, e, i) { 541 | t.setAttribute("data-bs-" + $(e), i); 542 | }, 543 | removeDataAttribute(t, e) { 544 | t.removeAttribute("data-bs-" + $(e)); 545 | }, 546 | getDataAttributes(t) { 547 | if (!t) return {}; 548 | const e = {}; 549 | return ( 550 | Object.keys(t.dataset) 551 | .filter((t) => t.startsWith("bs")) 552 | .forEach((i) => { 553 | let n = i.replace(/^bs/, ""); 554 | (n = n.charAt(0).toLowerCase() + n.slice(1, n.length)), 555 | (e[n] = z(t.dataset[i])); 556 | }), 557 | e 558 | ); 559 | }, 560 | getDataAttribute: (t, e) => z(t.getAttribute("data-bs-" + $(e))), 561 | offset(t) { 562 | const e = t.getBoundingClientRect(); 563 | return { 564 | top: e.top + document.body.scrollTop, 565 | left: e.left + document.body.scrollLeft, 566 | }; 567 | }, 568 | position: (t) => ({ top: t.offsetTop, left: t.offsetLeft }), 569 | }, 570 | F = { 571 | interval: 5e3, 572 | keyboard: !0, 573 | slide: !1, 574 | pause: "hover", 575 | wrap: !0, 576 | touch: !0, 577 | }, 578 | V = { 579 | interval: "(number|boolean)", 580 | keyboard: "boolean", 581 | slide: "(boolean|string)", 582 | pause: "(string|boolean)", 583 | wrap: "boolean", 584 | touch: "boolean", 585 | }, 586 | K = "next", 587 | X = "prev", 588 | Y = "left", 589 | Q = "right", 590 | G = { ArrowLeft: Q, ArrowRight: Y }; 591 | class Z extends B { 592 | constructor(e, i) { 593 | super(e), 594 | (this._items = null), 595 | (this._interval = null), 596 | (this._activeElement = null), 597 | (this._isPaused = !1), 598 | (this._isSliding = !1), 599 | (this.touchTimeout = null), 600 | (this.touchStartX = 0), 601 | (this.touchDeltaX = 0), 602 | (this._config = this._getConfig(i)), 603 | (this._indicatorsElement = t.findOne( 604 | ".carousel-indicators", 605 | this._element 606 | )), 607 | (this._touchSupported = 608 | "ontouchstart" in document.documentElement || 609 | navigator.maxTouchPoints > 0), 610 | (this._pointerEvent = Boolean(window.PointerEvent)), 611 | this._addEventListeners(); 612 | } 613 | static get Default() { 614 | return F; 615 | } 616 | static get NAME() { 617 | return "carousel"; 618 | } 619 | next() { 620 | this._slide(K); 621 | } 622 | nextWhenVisible() { 623 | !document.hidden && c(this._element) && this.next(); 624 | } 625 | prev() { 626 | this._slide(X); 627 | } 628 | pause(e) { 629 | e || (this._isPaused = !0), 630 | t.findOne(".carousel-item-next, .carousel-item-prev", this._element) && 631 | (o(this._element), this.cycle(!0)), 632 | clearInterval(this._interval), 633 | (this._interval = null); 634 | } 635 | cycle(t) { 636 | t || (this._isPaused = !1), 637 | this._interval && 638 | (clearInterval(this._interval), (this._interval = null)), 639 | this._config && 640 | this._config.interval && 641 | !this._isPaused && 642 | (this._updateInterval(), 643 | (this._interval = setInterval( 644 | (document.visibilityState ? this.nextWhenVisible : this.next).bind( 645 | this 646 | ), 647 | this._config.interval 648 | ))); 649 | } 650 | to(e) { 651 | this._activeElement = t.findOne(".active.carousel-item", this._element); 652 | const i = this._getItemIndex(this._activeElement); 653 | if (e > this._items.length - 1 || e < 0) return; 654 | if (this._isSliding) 655 | return void P.one(this._element, "slid.bs.carousel", () => this.to(e)); 656 | if (i === e) return this.pause(), void this.cycle(); 657 | const n = e > i ? K : X; 658 | this._slide(n, this._items[e]); 659 | } 660 | _getConfig(t) { 661 | return ( 662 | (t = { 663 | ...F, 664 | ...U.getDataAttributes(this._element), 665 | ...("object" == typeof t ? t : {}), 666 | }), 667 | l("carousel", t, V), 668 | t 669 | ); 670 | } 671 | _handleSwipe() { 672 | const t = Math.abs(this.touchDeltaX); 673 | if (t <= 40) return; 674 | const e = t / this.touchDeltaX; 675 | (this.touchDeltaX = 0), e && this._slide(e > 0 ? Q : Y); 676 | } 677 | _addEventListeners() { 678 | this._config.keyboard && 679 | P.on(this._element, "keydown.bs.carousel", (t) => this._keydown(t)), 680 | "hover" === this._config.pause && 681 | (P.on(this._element, "mouseenter.bs.carousel", (t) => this.pause(t)), 682 | P.on(this._element, "mouseleave.bs.carousel", (t) => this.cycle(t))), 683 | this._config.touch && 684 | this._touchSupported && 685 | this._addTouchEventListeners(); 686 | } 687 | _addTouchEventListeners() { 688 | const e = (t) => { 689 | !this._pointerEvent || 690 | ("pen" !== t.pointerType && "touch" !== t.pointerType) 691 | ? this._pointerEvent || (this.touchStartX = t.touches[0].clientX) 692 | : (this.touchStartX = t.clientX); 693 | }, 694 | i = (t) => { 695 | this.touchDeltaX = 696 | t.touches && t.touches.length > 1 697 | ? 0 698 | : t.touches[0].clientX - this.touchStartX; 699 | }, 700 | n = (t) => { 701 | !this._pointerEvent || 702 | ("pen" !== t.pointerType && "touch" !== t.pointerType) || 703 | (this.touchDeltaX = t.clientX - this.touchStartX), 704 | this._handleSwipe(), 705 | "hover" === this._config.pause && 706 | (this.pause(), 707 | this.touchTimeout && clearTimeout(this.touchTimeout), 708 | (this.touchTimeout = setTimeout( 709 | (t) => this.cycle(t), 710 | 500 + this._config.interval 711 | ))); 712 | }; 713 | t.find(".carousel-item img", this._element).forEach((t) => { 714 | P.on(t, "dragstart.bs.carousel", (t) => t.preventDefault()); 715 | }), 716 | this._pointerEvent 717 | ? (P.on(this._element, "pointerdown.bs.carousel", (t) => e(t)), 718 | P.on(this._element, "pointerup.bs.carousel", (t) => n(t)), 719 | this._element.classList.add("pointer-event")) 720 | : (P.on(this._element, "touchstart.bs.carousel", (t) => e(t)), 721 | P.on(this._element, "touchmove.bs.carousel", (t) => i(t)), 722 | P.on(this._element, "touchend.bs.carousel", (t) => n(t))); 723 | } 724 | _keydown(t) { 725 | if (/input|textarea/i.test(t.target.tagName)) return; 726 | const e = G[t.key]; 727 | e && (t.preventDefault(), this._slide(e)); 728 | } 729 | _getItemIndex(e) { 730 | return ( 731 | (this._items = 732 | e && e.parentNode ? t.find(".carousel-item", e.parentNode) : []), 733 | this._items.indexOf(e) 734 | ); 735 | } 736 | _getItemByOrder(t, e) { 737 | const i = t === K; 738 | return y(this._items, e, i, this._config.wrap); 739 | } 740 | _triggerSlideEvent(e, i) { 741 | const n = this._getItemIndex(e), 742 | s = this._getItemIndex( 743 | t.findOne(".active.carousel-item", this._element) 744 | ); 745 | return P.trigger(this._element, "slide.bs.carousel", { 746 | relatedTarget: e, 747 | direction: i, 748 | from: s, 749 | to: n, 750 | }); 751 | } 752 | _setActiveIndicatorElement(e) { 753 | if (this._indicatorsElement) { 754 | const i = t.findOne(".active", this._indicatorsElement); 755 | i.classList.remove("active"), i.removeAttribute("aria-current"); 756 | const n = t.find("[data-bs-target]", this._indicatorsElement); 757 | for (let t = 0; t < n.length; t++) 758 | if ( 759 | Number.parseInt(n[t].getAttribute("data-bs-slide-to"), 10) === 760 | this._getItemIndex(e) 761 | ) { 762 | n[t].classList.add("active"), 763 | n[t].setAttribute("aria-current", "true"); 764 | break; 765 | } 766 | } 767 | } 768 | _updateInterval() { 769 | const e = 770 | this._activeElement || 771 | t.findOne(".active.carousel-item", this._element); 772 | if (!e) return; 773 | const i = Number.parseInt(e.getAttribute("data-bs-interval"), 10); 774 | i 775 | ? ((this._config.defaultInterval = 776 | this._config.defaultInterval || this._config.interval), 777 | (this._config.interval = i)) 778 | : (this._config.interval = 779 | this._config.defaultInterval || this._config.interval); 780 | } 781 | _slide(e, i) { 782 | const n = this._directionToOrder(e), 783 | s = t.findOne(".active.carousel-item", this._element), 784 | o = this._getItemIndex(s), 785 | r = i || this._getItemByOrder(n, s), 786 | a = this._getItemIndex(r), 787 | l = Boolean(this._interval), 788 | c = n === K, 789 | h = c ? "carousel-item-start" : "carousel-item-end", 790 | d = c ? "carousel-item-next" : "carousel-item-prev", 791 | u = this._orderToDirection(n); 792 | if (r && r.classList.contains("active")) 793 | return void (this._isSliding = !1); 794 | if (this._isSliding) return; 795 | if (this._triggerSlideEvent(r, u).defaultPrevented) return; 796 | if (!s || !r) return; 797 | (this._isSliding = !0), 798 | l && this.pause(), 799 | this._setActiveIndicatorElement(r), 800 | (this._activeElement = r); 801 | const p = () => { 802 | P.trigger(this._element, "slid.bs.carousel", { 803 | relatedTarget: r, 804 | direction: u, 805 | from: o, 806 | to: a, 807 | }); 808 | }; 809 | if (this._element.classList.contains("slide")) { 810 | r.classList.add(d), f(r), s.classList.add(h), r.classList.add(h); 811 | const t = () => { 812 | r.classList.remove(h, d), 813 | r.classList.add("active"), 814 | s.classList.remove("active", d, h), 815 | (this._isSliding = !1), 816 | setTimeout(p, 0); 817 | }; 818 | this._queueCallback(t, s, !0); 819 | } else s.classList.remove("active"), r.classList.add("active"), (this._isSliding = !1), p(); 820 | l && this.cycle(); 821 | } 822 | _directionToOrder(t) { 823 | return [Q, Y].includes(t) 824 | ? g() 825 | ? t === Y 826 | ? X 827 | : K 828 | : t === Y 829 | ? K 830 | : X 831 | : t; 832 | } 833 | _orderToDirection(t) { 834 | return [K, X].includes(t) 835 | ? g() 836 | ? t === X 837 | ? Y 838 | : Q 839 | : t === X 840 | ? Q 841 | : Y 842 | : t; 843 | } 844 | static carouselInterface(t, e) { 845 | const i = Z.getOrCreateInstance(t, e); 846 | let { _config: n } = i; 847 | "object" == typeof e && (n = { ...n, ...e }); 848 | const s = "string" == typeof e ? e : n.slide; 849 | if ("number" == typeof e) i.to(e); 850 | else if ("string" == typeof s) { 851 | if (void 0 === i[s]) throw new TypeError(`No method named "${s}"`); 852 | i[s](); 853 | } else n.interval && n.ride && (i.pause(), i.cycle()); 854 | } 855 | static jQueryInterface(t) { 856 | return this.each(function () { 857 | Z.carouselInterface(this, t); 858 | }); 859 | } 860 | static dataApiClickHandler(t) { 861 | const e = s(this); 862 | if (!e || !e.classList.contains("carousel")) return; 863 | const i = { ...U.getDataAttributes(e), ...U.getDataAttributes(this) }, 864 | n = this.getAttribute("data-bs-slide-to"); 865 | n && (i.interval = !1), 866 | Z.carouselInterface(e, i), 867 | n && Z.getInstance(e).to(n), 868 | t.preventDefault(); 869 | } 870 | } 871 | P.on( 872 | document, 873 | "click.bs.carousel.data-api", 874 | "[data-bs-slide], [data-bs-slide-to]", 875 | Z.dataApiClickHandler 876 | ), 877 | P.on(window, "load.bs.carousel.data-api", () => { 878 | const e = t.find('[data-bs-ride="carousel"]'); 879 | for (let t = 0, i = e.length; t < i; t++) 880 | Z.carouselInterface(e[t], Z.getInstance(e[t])); 881 | }), 882 | _(Z); 883 | const J = { toggle: !0, parent: "" }, 884 | tt = { toggle: "boolean", parent: "(string|element)" }; 885 | class et extends B { 886 | constructor(e, i) { 887 | super(e), 888 | (this._isTransitioning = !1), 889 | (this._config = this._getConfig(i)), 890 | (this._triggerArray = t.find( 891 | `[data-bs-toggle="collapse"][href="#${this._element.id}"],[data-bs-toggle="collapse"][data-bs-target="#${this._element.id}"]` 892 | )); 893 | const s = t.find('[data-bs-toggle="collapse"]'); 894 | for (let e = 0, i = s.length; e < i; e++) { 895 | const i = s[e], 896 | o = n(i), 897 | r = t.find(o).filter((t) => t === this._element); 898 | null !== o && 899 | r.length && 900 | ((this._selector = o), this._triggerArray.push(i)); 901 | } 902 | (this._parent = this._config.parent ? this._getParent() : null), 903 | this._config.parent || 904 | this._addAriaAndCollapsedClass(this._element, this._triggerArray), 905 | this._config.toggle && this.toggle(); 906 | } 907 | static get Default() { 908 | return J; 909 | } 910 | static get NAME() { 911 | return "collapse"; 912 | } 913 | toggle() { 914 | this._element.classList.contains("show") ? this.hide() : this.show(); 915 | } 916 | show() { 917 | if (this._isTransitioning || this._element.classList.contains("show")) 918 | return; 919 | let e, i; 920 | this._parent && 921 | ((e = t 922 | .find(".show, .collapsing", this._parent) 923 | .filter((t) => 924 | "string" == typeof this._config.parent 925 | ? t.getAttribute("data-bs-parent") === this._config.parent 926 | : t.classList.contains("collapse") 927 | )), 928 | 0 === e.length && (e = null)); 929 | const n = t.findOne(this._selector); 930 | if (e) { 931 | const t = e.find((t) => n !== t); 932 | if (((i = t ? et.getInstance(t) : null), i && i._isTransitioning)) 933 | return; 934 | } 935 | if (P.trigger(this._element, "show.bs.collapse").defaultPrevented) return; 936 | e && 937 | e.forEach((t) => { 938 | n !== t && et.collapseInterface(t, "hide"), 939 | i || R.set(t, "bs.collapse", null); 940 | }); 941 | const s = this._getDimension(); 942 | this._element.classList.remove("collapse"), 943 | this._element.classList.add("collapsing"), 944 | (this._element.style[s] = 0), 945 | this._triggerArray.length && 946 | this._triggerArray.forEach((t) => { 947 | t.classList.remove("collapsed"), 948 | t.setAttribute("aria-expanded", !0); 949 | }), 950 | this.setTransitioning(!0); 951 | const o = "scroll" + (s[0].toUpperCase() + s.slice(1)); 952 | this._queueCallback( 953 | () => { 954 | this._element.classList.remove("collapsing"), 955 | this._element.classList.add("collapse", "show"), 956 | (this._element.style[s] = ""), 957 | this.setTransitioning(!1), 958 | P.trigger(this._element, "shown.bs.collapse"); 959 | }, 960 | this._element, 961 | !0 962 | ), 963 | (this._element.style[s] = this._element[o] + "px"); 964 | } 965 | hide() { 966 | if (this._isTransitioning || !this._element.classList.contains("show")) 967 | return; 968 | if (P.trigger(this._element, "hide.bs.collapse").defaultPrevented) return; 969 | const t = this._getDimension(); 970 | (this._element.style[t] = 971 | this._element.getBoundingClientRect()[t] + "px"), 972 | f(this._element), 973 | this._element.classList.add("collapsing"), 974 | this._element.classList.remove("collapse", "show"); 975 | const e = this._triggerArray.length; 976 | if (e > 0) 977 | for (let t = 0; t < e; t++) { 978 | const e = this._triggerArray[t], 979 | i = s(e); 980 | i && 981 | !i.classList.contains("show") && 982 | (e.classList.add("collapsed"), e.setAttribute("aria-expanded", !1)); 983 | } 984 | this.setTransitioning(!0), 985 | (this._element.style[t] = ""), 986 | this._queueCallback( 987 | () => { 988 | this.setTransitioning(!1), 989 | this._element.classList.remove("collapsing"), 990 | this._element.classList.add("collapse"), 991 | P.trigger(this._element, "hidden.bs.collapse"); 992 | }, 993 | this._element, 994 | !0 995 | ); 996 | } 997 | setTransitioning(t) { 998 | this._isTransitioning = t; 999 | } 1000 | _getConfig(t) { 1001 | return ( 1002 | ((t = { ...J, ...t }).toggle = Boolean(t.toggle)), 1003 | l("collapse", t, tt), 1004 | t 1005 | ); 1006 | } 1007 | _getDimension() { 1008 | return this._element.classList.contains("width") ? "width" : "height"; 1009 | } 1010 | _getParent() { 1011 | let { parent: e } = this._config; 1012 | e = a(e); 1013 | const i = `[data-bs-toggle="collapse"][data-bs-parent="${e}"]`; 1014 | return ( 1015 | t.find(i, e).forEach((t) => { 1016 | const e = s(t); 1017 | this._addAriaAndCollapsedClass(e, [t]); 1018 | }), 1019 | e 1020 | ); 1021 | } 1022 | _addAriaAndCollapsedClass(t, e) { 1023 | if (!t || !e.length) return; 1024 | const i = t.classList.contains("show"); 1025 | e.forEach((t) => { 1026 | i ? t.classList.remove("collapsed") : t.classList.add("collapsed"), 1027 | t.setAttribute("aria-expanded", i); 1028 | }); 1029 | } 1030 | static collapseInterface(t, e) { 1031 | let i = et.getInstance(t); 1032 | const n = { 1033 | ...J, 1034 | ...U.getDataAttributes(t), 1035 | ...("object" == typeof e && e ? e : {}), 1036 | }; 1037 | if ( 1038 | (!i && 1039 | n.toggle && 1040 | "string" == typeof e && 1041 | /show|hide/.test(e) && 1042 | (n.toggle = !1), 1043 | i || (i = new et(t, n)), 1044 | "string" == typeof e) 1045 | ) { 1046 | if (void 0 === i[e]) throw new TypeError(`No method named "${e}"`); 1047 | i[e](); 1048 | } 1049 | } 1050 | static jQueryInterface(t) { 1051 | return this.each(function () { 1052 | et.collapseInterface(this, t); 1053 | }); 1054 | } 1055 | } 1056 | P.on( 1057 | document, 1058 | "click.bs.collapse.data-api", 1059 | '[data-bs-toggle="collapse"]', 1060 | function (e) { 1061 | ("A" === e.target.tagName || 1062 | (e.delegateTarget && "A" === e.delegateTarget.tagName)) && 1063 | e.preventDefault(); 1064 | const i = U.getDataAttributes(this), 1065 | s = n(this); 1066 | t.find(s).forEach((t) => { 1067 | const e = et.getInstance(t); 1068 | let n; 1069 | e 1070 | ? (null === e._parent && 1071 | "string" == typeof i.parent && 1072 | ((e._config.parent = i.parent), (e._parent = e._getParent())), 1073 | (n = "toggle")) 1074 | : (n = i), 1075 | et.collapseInterface(t, n); 1076 | }); 1077 | } 1078 | ), 1079 | _(et); 1080 | var it = "top", 1081 | nt = "bottom", 1082 | st = "right", 1083 | ot = "left", 1084 | rt = [it, nt, st, ot], 1085 | at = rt.reduce(function (t, e) { 1086 | return t.concat([e + "-start", e + "-end"]); 1087 | }, []), 1088 | lt = [].concat(rt, ["auto"]).reduce(function (t, e) { 1089 | return t.concat([e, e + "-start", e + "-end"]); 1090 | }, []), 1091 | ct = [ 1092 | "beforeRead", 1093 | "read", 1094 | "afterRead", 1095 | "beforeMain", 1096 | "main", 1097 | "afterMain", 1098 | "beforeWrite", 1099 | "write", 1100 | "afterWrite", 1101 | ]; 1102 | function ht(t) { 1103 | return t ? (t.nodeName || "").toLowerCase() : null; 1104 | } 1105 | function dt(t) { 1106 | if (null == t) return window; 1107 | if ("[object Window]" !== t.toString()) { 1108 | var e = t.ownerDocument; 1109 | return (e && e.defaultView) || window; 1110 | } 1111 | return t; 1112 | } 1113 | function ut(t) { 1114 | return t instanceof dt(t).Element || t instanceof Element; 1115 | } 1116 | function ft(t) { 1117 | return t instanceof dt(t).HTMLElement || t instanceof HTMLElement; 1118 | } 1119 | function pt(t) { 1120 | return ( 1121 | "undefined" != typeof ShadowRoot && 1122 | (t instanceof dt(t).ShadowRoot || t instanceof ShadowRoot) 1123 | ); 1124 | } 1125 | var mt = { 1126 | name: "applyStyles", 1127 | enabled: !0, 1128 | phase: "write", 1129 | fn: function (t) { 1130 | var e = t.state; 1131 | Object.keys(e.elements).forEach(function (t) { 1132 | var i = e.styles[t] || {}, 1133 | n = e.attributes[t] || {}, 1134 | s = e.elements[t]; 1135 | ft(s) && 1136 | ht(s) && 1137 | (Object.assign(s.style, i), 1138 | Object.keys(n).forEach(function (t) { 1139 | var e = n[t]; 1140 | !1 === e 1141 | ? s.removeAttribute(t) 1142 | : s.setAttribute(t, !0 === e ? "" : e); 1143 | })); 1144 | }); 1145 | }, 1146 | effect: function (t) { 1147 | var e = t.state, 1148 | i = { 1149 | popper: { 1150 | position: e.options.strategy, 1151 | left: "0", 1152 | top: "0", 1153 | margin: "0", 1154 | }, 1155 | arrow: { position: "absolute" }, 1156 | reference: {}, 1157 | }; 1158 | return ( 1159 | Object.assign(e.elements.popper.style, i.popper), 1160 | (e.styles = i), 1161 | e.elements.arrow && Object.assign(e.elements.arrow.style, i.arrow), 1162 | function () { 1163 | Object.keys(e.elements).forEach(function (t) { 1164 | var n = e.elements[t], 1165 | s = e.attributes[t] || {}, 1166 | o = Object.keys( 1167 | e.styles.hasOwnProperty(t) ? e.styles[t] : i[t] 1168 | ).reduce(function (t, e) { 1169 | return (t[e] = ""), t; 1170 | }, {}); 1171 | ft(n) && 1172 | ht(n) && 1173 | (Object.assign(n.style, o), 1174 | Object.keys(s).forEach(function (t) { 1175 | n.removeAttribute(t); 1176 | })); 1177 | }); 1178 | } 1179 | ); 1180 | }, 1181 | requires: ["computeStyles"], 1182 | }; 1183 | function gt(t) { 1184 | return t.split("-")[0]; 1185 | } 1186 | function _t(t) { 1187 | var e = t.getBoundingClientRect(); 1188 | return { 1189 | width: e.width, 1190 | height: e.height, 1191 | top: e.top, 1192 | right: e.right, 1193 | bottom: e.bottom, 1194 | left: e.left, 1195 | x: e.left, 1196 | y: e.top, 1197 | }; 1198 | } 1199 | function bt(t) { 1200 | var e = _t(t), 1201 | i = t.offsetWidth, 1202 | n = t.offsetHeight; 1203 | return ( 1204 | Math.abs(e.width - i) <= 1 && (i = e.width), 1205 | Math.abs(e.height - n) <= 1 && (n = e.height), 1206 | { x: t.offsetLeft, y: t.offsetTop, width: i, height: n } 1207 | ); 1208 | } 1209 | function vt(t, e) { 1210 | var i = e.getRootNode && e.getRootNode(); 1211 | if (t.contains(e)) return !0; 1212 | if (i && pt(i)) { 1213 | var n = e; 1214 | do { 1215 | if (n && t.isSameNode(n)) return !0; 1216 | n = n.parentNode || n.host; 1217 | } while (n); 1218 | } 1219 | return !1; 1220 | } 1221 | function yt(t) { 1222 | return dt(t).getComputedStyle(t); 1223 | } 1224 | function wt(t) { 1225 | return ["table", "td", "th"].indexOf(ht(t)) >= 0; 1226 | } 1227 | function Et(t) { 1228 | return ( 1229 | (ut(t) ? t.ownerDocument : t.document) || window.document 1230 | ).documentElement; 1231 | } 1232 | function At(t) { 1233 | return "html" === ht(t) 1234 | ? t 1235 | : t.assignedSlot || t.parentNode || (pt(t) ? t.host : null) || Et(t); 1236 | } 1237 | function Tt(t) { 1238 | return ft(t) && "fixed" !== yt(t).position ? t.offsetParent : null; 1239 | } 1240 | function Ot(t) { 1241 | for (var e = dt(t), i = Tt(t); i && wt(i) && "static" === yt(i).position; ) 1242 | i = Tt(i); 1243 | return i && 1244 | ("html" === ht(i) || ("body" === ht(i) && "static" === yt(i).position)) 1245 | ? e 1246 | : i || 1247 | (function (t) { 1248 | var e = -1 !== navigator.userAgent.toLowerCase().indexOf("firefox"); 1249 | if ( 1250 | -1 !== navigator.userAgent.indexOf("Trident") && 1251 | ft(t) && 1252 | "fixed" === yt(t).position 1253 | ) 1254 | return null; 1255 | for ( 1256 | var i = At(t); 1257 | ft(i) && ["html", "body"].indexOf(ht(i)) < 0; 1258 | 1259 | ) { 1260 | var n = yt(i); 1261 | if ( 1262 | "none" !== n.transform || 1263 | "none" !== n.perspective || 1264 | "paint" === n.contain || 1265 | -1 !== ["transform", "perspective"].indexOf(n.willChange) || 1266 | (e && "filter" === n.willChange) || 1267 | (e && n.filter && "none" !== n.filter) 1268 | ) 1269 | return i; 1270 | i = i.parentNode; 1271 | } 1272 | return null; 1273 | })(t) || 1274 | e; 1275 | } 1276 | function Ct(t) { 1277 | return ["top", "bottom"].indexOf(t) >= 0 ? "x" : "y"; 1278 | } 1279 | var kt = Math.max, 1280 | Lt = Math.min, 1281 | xt = Math.round; 1282 | function Dt(t, e, i) { 1283 | return kt(t, Lt(e, i)); 1284 | } 1285 | function St(t) { 1286 | return Object.assign({}, { top: 0, right: 0, bottom: 0, left: 0 }, t); 1287 | } 1288 | function It(t, e) { 1289 | return e.reduce(function (e, i) { 1290 | return (e[i] = t), e; 1291 | }, {}); 1292 | } 1293 | var Nt = { 1294 | name: "arrow", 1295 | enabled: !0, 1296 | phase: "main", 1297 | fn: function (t) { 1298 | var e, 1299 | i = t.state, 1300 | n = t.name, 1301 | s = t.options, 1302 | o = i.elements.arrow, 1303 | r = i.modifiersData.popperOffsets, 1304 | a = gt(i.placement), 1305 | l = Ct(a), 1306 | c = [ot, st].indexOf(a) >= 0 ? "height" : "width"; 1307 | if (o && r) { 1308 | var h = (function (t, e) { 1309 | return St( 1310 | "number" != 1311 | typeof (t = 1312 | "function" == typeof t 1313 | ? t( 1314 | Object.assign({}, e.rects, { placement: e.placement }) 1315 | ) 1316 | : t) 1317 | ? t 1318 | : It(t, rt) 1319 | ); 1320 | })(s.padding, i), 1321 | d = bt(o), 1322 | u = "y" === l ? it : ot, 1323 | f = "y" === l ? nt : st, 1324 | p = 1325 | i.rects.reference[c] + 1326 | i.rects.reference[l] - 1327 | r[l] - 1328 | i.rects.popper[c], 1329 | m = r[l] - i.rects.reference[l], 1330 | g = Ot(o), 1331 | _ = g ? ("y" === l ? g.clientHeight || 0 : g.clientWidth || 0) : 0, 1332 | b = p / 2 - m / 2, 1333 | v = h[u], 1334 | y = _ - d[c] - h[f], 1335 | w = _ / 2 - d[c] / 2 + b, 1336 | E = Dt(v, w, y), 1337 | A = l; 1338 | i.modifiersData[n] = (((e = {})[A] = E), (e.centerOffset = E - w), e); 1339 | } 1340 | }, 1341 | effect: function (t) { 1342 | var e = t.state, 1343 | i = t.options.element, 1344 | n = void 0 === i ? "[data-popper-arrow]" : i; 1345 | null != n && 1346 | ("string" != typeof n || (n = e.elements.popper.querySelector(n))) && 1347 | vt(e.elements.popper, n) && 1348 | (e.elements.arrow = n); 1349 | }, 1350 | requires: ["popperOffsets"], 1351 | requiresIfExists: ["preventOverflow"], 1352 | }, 1353 | jt = { top: "auto", right: "auto", bottom: "auto", left: "auto" }; 1354 | function Mt(t) { 1355 | var e, 1356 | i = t.popper, 1357 | n = t.popperRect, 1358 | s = t.placement, 1359 | o = t.offsets, 1360 | r = t.position, 1361 | a = t.gpuAcceleration, 1362 | l = t.adaptive, 1363 | c = t.roundOffsets, 1364 | h = 1365 | !0 === c 1366 | ? (function (t) { 1367 | var e = t.x, 1368 | i = t.y, 1369 | n = window.devicePixelRatio || 1; 1370 | return { x: xt(xt(e * n) / n) || 0, y: xt(xt(i * n) / n) || 0 }; 1371 | })(o) 1372 | : "function" == typeof c 1373 | ? c(o) 1374 | : o, 1375 | d = h.x, 1376 | u = void 0 === d ? 0 : d, 1377 | f = h.y, 1378 | p = void 0 === f ? 0 : f, 1379 | m = o.hasOwnProperty("x"), 1380 | g = o.hasOwnProperty("y"), 1381 | _ = ot, 1382 | b = it, 1383 | v = window; 1384 | if (l) { 1385 | var y = Ot(i), 1386 | w = "clientHeight", 1387 | E = "clientWidth"; 1388 | y === dt(i) && 1389 | "static" !== yt((y = Et(i))).position && 1390 | ((w = "scrollHeight"), (E = "scrollWidth")), 1391 | (y = y), 1392 | s === it && ((b = nt), (p -= y[w] - n.height), (p *= a ? 1 : -1)), 1393 | s === ot && ((_ = st), (u -= y[E] - n.width), (u *= a ? 1 : -1)); 1394 | } 1395 | var A, 1396 | T = Object.assign({ position: r }, l && jt); 1397 | return a 1398 | ? Object.assign( 1399 | {}, 1400 | T, 1401 | (((A = {})[b] = g ? "0" : ""), 1402 | (A[_] = m ? "0" : ""), 1403 | (A.transform = 1404 | (v.devicePixelRatio || 1) < 2 1405 | ? "translate(" + u + "px, " + p + "px)" 1406 | : "translate3d(" + u + "px, " + p + "px, 0)"), 1407 | A) 1408 | ) 1409 | : Object.assign( 1410 | {}, 1411 | T, 1412 | (((e = {})[b] = g ? p + "px" : ""), 1413 | (e[_] = m ? u + "px" : ""), 1414 | (e.transform = ""), 1415 | e) 1416 | ); 1417 | } 1418 | var Pt = { 1419 | name: "computeStyles", 1420 | enabled: !0, 1421 | phase: "beforeWrite", 1422 | fn: function (t) { 1423 | var e = t.state, 1424 | i = t.options, 1425 | n = i.gpuAcceleration, 1426 | s = void 0 === n || n, 1427 | o = i.adaptive, 1428 | r = void 0 === o || o, 1429 | a = i.roundOffsets, 1430 | l = void 0 === a || a, 1431 | c = { 1432 | placement: gt(e.placement), 1433 | popper: e.elements.popper, 1434 | popperRect: e.rects.popper, 1435 | gpuAcceleration: s, 1436 | }; 1437 | null != e.modifiersData.popperOffsets && 1438 | (e.styles.popper = Object.assign( 1439 | {}, 1440 | e.styles.popper, 1441 | Mt( 1442 | Object.assign({}, c, { 1443 | offsets: e.modifiersData.popperOffsets, 1444 | position: e.options.strategy, 1445 | adaptive: r, 1446 | roundOffsets: l, 1447 | }) 1448 | ) 1449 | )), 1450 | null != e.modifiersData.arrow && 1451 | (e.styles.arrow = Object.assign( 1452 | {}, 1453 | e.styles.arrow, 1454 | Mt( 1455 | Object.assign({}, c, { 1456 | offsets: e.modifiersData.arrow, 1457 | position: "absolute", 1458 | adaptive: !1, 1459 | roundOffsets: l, 1460 | }) 1461 | ) 1462 | )), 1463 | (e.attributes.popper = Object.assign({}, e.attributes.popper, { 1464 | "data-popper-placement": e.placement, 1465 | })); 1466 | }, 1467 | data: {}, 1468 | }, 1469 | Ht = { passive: !0 }, 1470 | Rt = { 1471 | name: "eventListeners", 1472 | enabled: !0, 1473 | phase: "write", 1474 | fn: function () {}, 1475 | effect: function (t) { 1476 | var e = t.state, 1477 | i = t.instance, 1478 | n = t.options, 1479 | s = n.scroll, 1480 | o = void 0 === s || s, 1481 | r = n.resize, 1482 | a = void 0 === r || r, 1483 | l = dt(e.elements.popper), 1484 | c = [].concat(e.scrollParents.reference, e.scrollParents.popper); 1485 | return ( 1486 | o && 1487 | c.forEach(function (t) { 1488 | t.addEventListener("scroll", i.update, Ht); 1489 | }), 1490 | a && l.addEventListener("resize", i.update, Ht), 1491 | function () { 1492 | o && 1493 | c.forEach(function (t) { 1494 | t.removeEventListener("scroll", i.update, Ht); 1495 | }), 1496 | a && l.removeEventListener("resize", i.update, Ht); 1497 | } 1498 | ); 1499 | }, 1500 | data: {}, 1501 | }, 1502 | Bt = { left: "right", right: "left", bottom: "top", top: "bottom" }; 1503 | function Wt(t) { 1504 | return t.replace(/left|right|bottom|top/g, function (t) { 1505 | return Bt[t]; 1506 | }); 1507 | } 1508 | var qt = { start: "end", end: "start" }; 1509 | function zt(t) { 1510 | return t.replace(/start|end/g, function (t) { 1511 | return qt[t]; 1512 | }); 1513 | } 1514 | function $t(t) { 1515 | var e = dt(t); 1516 | return { scrollLeft: e.pageXOffset, scrollTop: e.pageYOffset }; 1517 | } 1518 | function Ut(t) { 1519 | return _t(Et(t)).left + $t(t).scrollLeft; 1520 | } 1521 | function Ft(t) { 1522 | var e = yt(t), 1523 | i = e.overflow, 1524 | n = e.overflowX, 1525 | s = e.overflowY; 1526 | return /auto|scroll|overlay|hidden/.test(i + s + n); 1527 | } 1528 | function Vt(t, e) { 1529 | var i; 1530 | void 0 === e && (e = []); 1531 | var n = (function t(e) { 1532 | return ["html", "body", "#document"].indexOf(ht(e)) >= 0 1533 | ? e.ownerDocument.body 1534 | : ft(e) && Ft(e) 1535 | ? e 1536 | : t(At(e)); 1537 | })(t), 1538 | s = n === (null == (i = t.ownerDocument) ? void 0 : i.body), 1539 | o = dt(n), 1540 | r = s ? [o].concat(o.visualViewport || [], Ft(n) ? n : []) : n, 1541 | a = e.concat(r); 1542 | return s ? a : a.concat(Vt(At(r))); 1543 | } 1544 | function Kt(t) { 1545 | return Object.assign({}, t, { 1546 | left: t.x, 1547 | top: t.y, 1548 | right: t.x + t.width, 1549 | bottom: t.y + t.height, 1550 | }); 1551 | } 1552 | function Xt(t, e) { 1553 | return "viewport" === e 1554 | ? Kt( 1555 | (function (t) { 1556 | var e = dt(t), 1557 | i = Et(t), 1558 | n = e.visualViewport, 1559 | s = i.clientWidth, 1560 | o = i.clientHeight, 1561 | r = 0, 1562 | a = 0; 1563 | return ( 1564 | n && 1565 | ((s = n.width), 1566 | (o = n.height), 1567 | /^((?!chrome|android).)*safari/i.test(navigator.userAgent) || 1568 | ((r = n.offsetLeft), (a = n.offsetTop))), 1569 | { width: s, height: o, x: r + Ut(t), y: a } 1570 | ); 1571 | })(t) 1572 | ) 1573 | : ft(e) 1574 | ? (function (t) { 1575 | var e = _t(t); 1576 | return ( 1577 | (e.top = e.top + t.clientTop), 1578 | (e.left = e.left + t.clientLeft), 1579 | (e.bottom = e.top + t.clientHeight), 1580 | (e.right = e.left + t.clientWidth), 1581 | (e.width = t.clientWidth), 1582 | (e.height = t.clientHeight), 1583 | (e.x = e.left), 1584 | (e.y = e.top), 1585 | e 1586 | ); 1587 | })(e) 1588 | : Kt( 1589 | (function (t) { 1590 | var e, 1591 | i = Et(t), 1592 | n = $t(t), 1593 | s = null == (e = t.ownerDocument) ? void 0 : e.body, 1594 | o = kt( 1595 | i.scrollWidth, 1596 | i.clientWidth, 1597 | s ? s.scrollWidth : 0, 1598 | s ? s.clientWidth : 0 1599 | ), 1600 | r = kt( 1601 | i.scrollHeight, 1602 | i.clientHeight, 1603 | s ? s.scrollHeight : 0, 1604 | s ? s.clientHeight : 0 1605 | ), 1606 | a = -n.scrollLeft + Ut(t), 1607 | l = -n.scrollTop; 1608 | return ( 1609 | "rtl" === yt(s || i).direction && 1610 | (a += kt(i.clientWidth, s ? s.clientWidth : 0) - o), 1611 | { width: o, height: r, x: a, y: l } 1612 | ); 1613 | })(Et(t)) 1614 | ); 1615 | } 1616 | function Yt(t) { 1617 | return t.split("-")[1]; 1618 | } 1619 | function Qt(t) { 1620 | var e, 1621 | i = t.reference, 1622 | n = t.element, 1623 | s = t.placement, 1624 | o = s ? gt(s) : null, 1625 | r = s ? Yt(s) : null, 1626 | a = i.x + i.width / 2 - n.width / 2, 1627 | l = i.y + i.height / 2 - n.height / 2; 1628 | switch (o) { 1629 | case it: 1630 | e = { x: a, y: i.y - n.height }; 1631 | break; 1632 | case nt: 1633 | e = { x: a, y: i.y + i.height }; 1634 | break; 1635 | case st: 1636 | e = { x: i.x + i.width, y: l }; 1637 | break; 1638 | case ot: 1639 | e = { x: i.x - n.width, y: l }; 1640 | break; 1641 | default: 1642 | e = { x: i.x, y: i.y }; 1643 | } 1644 | var c = o ? Ct(o) : null; 1645 | if (null != c) { 1646 | var h = "y" === c ? "height" : "width"; 1647 | switch (r) { 1648 | case "start": 1649 | e[c] = e[c] - (i[h] / 2 - n[h] / 2); 1650 | break; 1651 | case "end": 1652 | e[c] = e[c] + (i[h] / 2 - n[h] / 2); 1653 | } 1654 | } 1655 | return e; 1656 | } 1657 | function Gt(t, e) { 1658 | void 0 === e && (e = {}); 1659 | var i = e, 1660 | n = i.placement, 1661 | s = void 0 === n ? t.placement : n, 1662 | o = i.boundary, 1663 | r = void 0 === o ? "clippingParents" : o, 1664 | a = i.rootBoundary, 1665 | l = void 0 === a ? "viewport" : a, 1666 | c = i.elementContext, 1667 | h = void 0 === c ? "popper" : c, 1668 | d = i.altBoundary, 1669 | u = void 0 !== d && d, 1670 | f = i.padding, 1671 | p = void 0 === f ? 0 : f, 1672 | m = St("number" != typeof p ? p : It(p, rt)), 1673 | g = "popper" === h ? "reference" : "popper", 1674 | _ = t.elements.reference, 1675 | b = t.rects.popper, 1676 | v = t.elements[u ? g : h], 1677 | y = (function (t, e, i) { 1678 | var n = 1679 | "clippingParents" === e 1680 | ? (function (t) { 1681 | var e = Vt(At(t)), 1682 | i = 1683 | ["absolute", "fixed"].indexOf(yt(t).position) >= 0 && 1684 | ft(t) 1685 | ? Ot(t) 1686 | : t; 1687 | return ut(i) 1688 | ? e.filter(function (t) { 1689 | return ut(t) && vt(t, i) && "body" !== ht(t); 1690 | }) 1691 | : []; 1692 | })(t) 1693 | : [].concat(e), 1694 | s = [].concat(n, [i]), 1695 | o = s[0], 1696 | r = s.reduce(function (e, i) { 1697 | var n = Xt(t, i); 1698 | return ( 1699 | (e.top = kt(n.top, e.top)), 1700 | (e.right = Lt(n.right, e.right)), 1701 | (e.bottom = Lt(n.bottom, e.bottom)), 1702 | (e.left = kt(n.left, e.left)), 1703 | e 1704 | ); 1705 | }, Xt(t, o)); 1706 | return ( 1707 | (r.width = r.right - r.left), 1708 | (r.height = r.bottom - r.top), 1709 | (r.x = r.left), 1710 | (r.y = r.top), 1711 | r 1712 | ); 1713 | })(ut(v) ? v : v.contextElement || Et(t.elements.popper), r, l), 1714 | w = _t(_), 1715 | E = Qt({ reference: w, element: b, strategy: "absolute", placement: s }), 1716 | A = Kt(Object.assign({}, b, E)), 1717 | T = "popper" === h ? A : w, 1718 | O = { 1719 | top: y.top - T.top + m.top, 1720 | bottom: T.bottom - y.bottom + m.bottom, 1721 | left: y.left - T.left + m.left, 1722 | right: T.right - y.right + m.right, 1723 | }, 1724 | C = t.modifiersData.offset; 1725 | if ("popper" === h && C) { 1726 | var k = C[s]; 1727 | Object.keys(O).forEach(function (t) { 1728 | var e = [st, nt].indexOf(t) >= 0 ? 1 : -1, 1729 | i = [it, nt].indexOf(t) >= 0 ? "y" : "x"; 1730 | O[t] += k[i] * e; 1731 | }); 1732 | } 1733 | return O; 1734 | } 1735 | function Zt(t, e) { 1736 | void 0 === e && (e = {}); 1737 | var i = e, 1738 | n = i.placement, 1739 | s = i.boundary, 1740 | o = i.rootBoundary, 1741 | r = i.padding, 1742 | a = i.flipVariations, 1743 | l = i.allowedAutoPlacements, 1744 | c = void 0 === l ? lt : l, 1745 | h = Yt(n), 1746 | d = h 1747 | ? a 1748 | ? at 1749 | : at.filter(function (t) { 1750 | return Yt(t) === h; 1751 | }) 1752 | : rt, 1753 | u = d.filter(function (t) { 1754 | return c.indexOf(t) >= 0; 1755 | }); 1756 | 0 === u.length && (u = d); 1757 | var f = u.reduce(function (e, i) { 1758 | return ( 1759 | (e[i] = Gt(t, { 1760 | placement: i, 1761 | boundary: s, 1762 | rootBoundary: o, 1763 | padding: r, 1764 | })[gt(i)]), 1765 | e 1766 | ); 1767 | }, {}); 1768 | return Object.keys(f).sort(function (t, e) { 1769 | return f[t] - f[e]; 1770 | }); 1771 | } 1772 | var Jt = { 1773 | name: "flip", 1774 | enabled: !0, 1775 | phase: "main", 1776 | fn: function (t) { 1777 | var e = t.state, 1778 | i = t.options, 1779 | n = t.name; 1780 | if (!e.modifiersData[n]._skip) { 1781 | for ( 1782 | var s = i.mainAxis, 1783 | o = void 0 === s || s, 1784 | r = i.altAxis, 1785 | a = void 0 === r || r, 1786 | l = i.fallbackPlacements, 1787 | c = i.padding, 1788 | h = i.boundary, 1789 | d = i.rootBoundary, 1790 | u = i.altBoundary, 1791 | f = i.flipVariations, 1792 | p = void 0 === f || f, 1793 | m = i.allowedAutoPlacements, 1794 | g = e.options.placement, 1795 | _ = gt(g), 1796 | b = 1797 | l || 1798 | (_ !== g && p 1799 | ? (function (t) { 1800 | if ("auto" === gt(t)) return []; 1801 | var e = Wt(t); 1802 | return [zt(t), e, zt(e)]; 1803 | })(g) 1804 | : [Wt(g)]), 1805 | v = [g].concat(b).reduce(function (t, i) { 1806 | return t.concat( 1807 | "auto" === gt(i) 1808 | ? Zt(e, { 1809 | placement: i, 1810 | boundary: h, 1811 | rootBoundary: d, 1812 | padding: c, 1813 | flipVariations: p, 1814 | allowedAutoPlacements: m, 1815 | }) 1816 | : i 1817 | ); 1818 | }, []), 1819 | y = e.rects.reference, 1820 | w = e.rects.popper, 1821 | E = new Map(), 1822 | A = !0, 1823 | T = v[0], 1824 | O = 0; 1825 | O < v.length; 1826 | O++ 1827 | ) { 1828 | var C = v[O], 1829 | k = gt(C), 1830 | L = "start" === Yt(C), 1831 | x = [it, nt].indexOf(k) >= 0, 1832 | D = x ? "width" : "height", 1833 | S = Gt(e, { 1834 | placement: C, 1835 | boundary: h, 1836 | rootBoundary: d, 1837 | altBoundary: u, 1838 | padding: c, 1839 | }), 1840 | I = x ? (L ? st : ot) : L ? nt : it; 1841 | y[D] > w[D] && (I = Wt(I)); 1842 | var N = Wt(I), 1843 | j = []; 1844 | if ( 1845 | (o && j.push(S[k] <= 0), 1846 | a && j.push(S[I] <= 0, S[N] <= 0), 1847 | j.every(function (t) { 1848 | return t; 1849 | })) 1850 | ) { 1851 | (T = C), (A = !1); 1852 | break; 1853 | } 1854 | E.set(C, j); 1855 | } 1856 | if (A) 1857 | for ( 1858 | var M = function (t) { 1859 | var e = v.find(function (e) { 1860 | var i = E.get(e); 1861 | if (i) 1862 | return i.slice(0, t).every(function (t) { 1863 | return t; 1864 | }); 1865 | }); 1866 | if (e) return (T = e), "break"; 1867 | }, 1868 | P = p ? 3 : 1; 1869 | P > 0 && "break" !== M(P); 1870 | P-- 1871 | ); 1872 | e.placement !== T && 1873 | ((e.modifiersData[n]._skip = !0), (e.placement = T), (e.reset = !0)); 1874 | } 1875 | }, 1876 | requiresIfExists: ["offset"], 1877 | data: { _skip: !1 }, 1878 | }; 1879 | function te(t, e, i) { 1880 | return ( 1881 | void 0 === i && (i = { x: 0, y: 0 }), 1882 | { 1883 | top: t.top - e.height - i.y, 1884 | right: t.right - e.width + i.x, 1885 | bottom: t.bottom - e.height + i.y, 1886 | left: t.left - e.width - i.x, 1887 | } 1888 | ); 1889 | } 1890 | function ee(t) { 1891 | return [it, st, nt, ot].some(function (e) { 1892 | return t[e] >= 0; 1893 | }); 1894 | } 1895 | var ie = { 1896 | name: "hide", 1897 | enabled: !0, 1898 | phase: "main", 1899 | requiresIfExists: ["preventOverflow"], 1900 | fn: function (t) { 1901 | var e = t.state, 1902 | i = t.name, 1903 | n = e.rects.reference, 1904 | s = e.rects.popper, 1905 | o = e.modifiersData.preventOverflow, 1906 | r = Gt(e, { elementContext: "reference" }), 1907 | a = Gt(e, { altBoundary: !0 }), 1908 | l = te(r, n), 1909 | c = te(a, s, o), 1910 | h = ee(l), 1911 | d = ee(c); 1912 | (e.modifiersData[i] = { 1913 | referenceClippingOffsets: l, 1914 | popperEscapeOffsets: c, 1915 | isReferenceHidden: h, 1916 | hasPopperEscaped: d, 1917 | }), 1918 | (e.attributes.popper = Object.assign({}, e.attributes.popper, { 1919 | "data-popper-reference-hidden": h, 1920 | "data-popper-escaped": d, 1921 | })); 1922 | }, 1923 | }, 1924 | ne = { 1925 | name: "offset", 1926 | enabled: !0, 1927 | phase: "main", 1928 | requires: ["popperOffsets"], 1929 | fn: function (t) { 1930 | var e = t.state, 1931 | i = t.options, 1932 | n = t.name, 1933 | s = i.offset, 1934 | o = void 0 === s ? [0, 0] : s, 1935 | r = lt.reduce(function (t, i) { 1936 | return ( 1937 | (t[i] = (function (t, e, i) { 1938 | var n = gt(t), 1939 | s = [ot, it].indexOf(n) >= 0 ? -1 : 1, 1940 | o = 1941 | "function" == typeof i 1942 | ? i(Object.assign({}, e, { placement: t })) 1943 | : i, 1944 | r = o[0], 1945 | a = o[1]; 1946 | return ( 1947 | (r = r || 0), 1948 | (a = (a || 0) * s), 1949 | [ot, st].indexOf(n) >= 0 ? { x: a, y: r } : { x: r, y: a } 1950 | ); 1951 | })(i, e.rects, o)), 1952 | t 1953 | ); 1954 | }, {}), 1955 | a = r[e.placement], 1956 | l = a.x, 1957 | c = a.y; 1958 | null != e.modifiersData.popperOffsets && 1959 | ((e.modifiersData.popperOffsets.x += l), 1960 | (e.modifiersData.popperOffsets.y += c)), 1961 | (e.modifiersData[n] = r); 1962 | }, 1963 | }, 1964 | se = { 1965 | name: "popperOffsets", 1966 | enabled: !0, 1967 | phase: "read", 1968 | fn: function (t) { 1969 | var e = t.state, 1970 | i = t.name; 1971 | e.modifiersData[i] = Qt({ 1972 | reference: e.rects.reference, 1973 | element: e.rects.popper, 1974 | strategy: "absolute", 1975 | placement: e.placement, 1976 | }); 1977 | }, 1978 | data: {}, 1979 | }, 1980 | oe = { 1981 | name: "preventOverflow", 1982 | enabled: !0, 1983 | phase: "main", 1984 | fn: function (t) { 1985 | var e = t.state, 1986 | i = t.options, 1987 | n = t.name, 1988 | s = i.mainAxis, 1989 | o = void 0 === s || s, 1990 | r = i.altAxis, 1991 | a = void 0 !== r && r, 1992 | l = i.boundary, 1993 | c = i.rootBoundary, 1994 | h = i.altBoundary, 1995 | d = i.padding, 1996 | u = i.tether, 1997 | f = void 0 === u || u, 1998 | p = i.tetherOffset, 1999 | m = void 0 === p ? 0 : p, 2000 | g = Gt(e, { 2001 | boundary: l, 2002 | rootBoundary: c, 2003 | padding: d, 2004 | altBoundary: h, 2005 | }), 2006 | _ = gt(e.placement), 2007 | b = Yt(e.placement), 2008 | v = !b, 2009 | y = Ct(_), 2010 | w = "x" === y ? "y" : "x", 2011 | E = e.modifiersData.popperOffsets, 2012 | A = e.rects.reference, 2013 | T = e.rects.popper, 2014 | O = 2015 | "function" == typeof m 2016 | ? m(Object.assign({}, e.rects, { placement: e.placement })) 2017 | : m, 2018 | C = { x: 0, y: 0 }; 2019 | if (E) { 2020 | if (o || a) { 2021 | var k = "y" === y ? it : ot, 2022 | L = "y" === y ? nt : st, 2023 | x = "y" === y ? "height" : "width", 2024 | D = E[y], 2025 | S = E[y] + g[k], 2026 | I = E[y] - g[L], 2027 | N = f ? -T[x] / 2 : 0, 2028 | j = "start" === b ? A[x] : T[x], 2029 | M = "start" === b ? -T[x] : -A[x], 2030 | P = e.elements.arrow, 2031 | H = f && P ? bt(P) : { width: 0, height: 0 }, 2032 | R = e.modifiersData["arrow#persistent"] 2033 | ? e.modifiersData["arrow#persistent"].padding 2034 | : { top: 0, right: 0, bottom: 0, left: 0 }, 2035 | B = R[k], 2036 | W = R[L], 2037 | q = Dt(0, A[x], H[x]), 2038 | z = v ? A[x] / 2 - N - q - B - O : j - q - B - O, 2039 | $ = v ? -A[x] / 2 + N + q + W + O : M + q + W + O, 2040 | U = e.elements.arrow && Ot(e.elements.arrow), 2041 | F = U ? ("y" === y ? U.clientTop || 0 : U.clientLeft || 0) : 0, 2042 | V = e.modifiersData.offset 2043 | ? e.modifiersData.offset[e.placement][y] 2044 | : 0, 2045 | K = E[y] + z - V - F, 2046 | X = E[y] + $ - V; 2047 | if (o) { 2048 | var Y = Dt(f ? Lt(S, K) : S, D, f ? kt(I, X) : I); 2049 | (E[y] = Y), (C[y] = Y - D); 2050 | } 2051 | if (a) { 2052 | var Q = "x" === y ? it : ot, 2053 | G = "x" === y ? nt : st, 2054 | Z = E[w], 2055 | J = Z + g[Q], 2056 | tt = Z - g[G], 2057 | et = Dt(f ? Lt(J, K) : J, Z, f ? kt(tt, X) : tt); 2058 | (E[w] = et), (C[w] = et - Z); 2059 | } 2060 | } 2061 | e.modifiersData[n] = C; 2062 | } 2063 | }, 2064 | requiresIfExists: ["offset"], 2065 | }; 2066 | function re(t, e, i) { 2067 | void 0 === i && (i = !1); 2068 | var n, 2069 | s, 2070 | o = Et(e), 2071 | r = _t(t), 2072 | a = ft(e), 2073 | l = { scrollLeft: 0, scrollTop: 0 }, 2074 | c = { x: 0, y: 0 }; 2075 | return ( 2076 | (a || (!a && !i)) && 2077 | (("body" !== ht(e) || Ft(o)) && 2078 | (l = 2079 | (n = e) !== dt(n) && ft(n) 2080 | ? { scrollLeft: (s = n).scrollLeft, scrollTop: s.scrollTop } 2081 | : $t(n)), 2082 | ft(e) 2083 | ? (((c = _t(e)).x += e.clientLeft), (c.y += e.clientTop)) 2084 | : o && (c.x = Ut(o))), 2085 | { 2086 | x: r.left + l.scrollLeft - c.x, 2087 | y: r.top + l.scrollTop - c.y, 2088 | width: r.width, 2089 | height: r.height, 2090 | } 2091 | ); 2092 | } 2093 | var ae = { placement: "bottom", modifiers: [], strategy: "absolute" }; 2094 | function le() { 2095 | for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) 2096 | e[i] = arguments[i]; 2097 | return !e.some(function (t) { 2098 | return !(t && "function" == typeof t.getBoundingClientRect); 2099 | }); 2100 | } 2101 | function ce(t) { 2102 | void 0 === t && (t = {}); 2103 | var e = t, 2104 | i = e.defaultModifiers, 2105 | n = void 0 === i ? [] : i, 2106 | s = e.defaultOptions, 2107 | o = void 0 === s ? ae : s; 2108 | return function (t, e, i) { 2109 | void 0 === i && (i = o); 2110 | var s, 2111 | r, 2112 | a = { 2113 | placement: "bottom", 2114 | orderedModifiers: [], 2115 | options: Object.assign({}, ae, o), 2116 | modifiersData: {}, 2117 | elements: { reference: t, popper: e }, 2118 | attributes: {}, 2119 | styles: {}, 2120 | }, 2121 | l = [], 2122 | c = !1, 2123 | h = { 2124 | state: a, 2125 | setOptions: function (i) { 2126 | d(), 2127 | (a.options = Object.assign({}, o, a.options, i)), 2128 | (a.scrollParents = { 2129 | reference: ut(t) 2130 | ? Vt(t) 2131 | : t.contextElement 2132 | ? Vt(t.contextElement) 2133 | : [], 2134 | popper: Vt(e), 2135 | }); 2136 | var s, 2137 | r, 2138 | c = (function (t) { 2139 | var e = (function (t) { 2140 | var e = new Map(), 2141 | i = new Set(), 2142 | n = []; 2143 | return ( 2144 | t.forEach(function (t) { 2145 | e.set(t.name, t); 2146 | }), 2147 | t.forEach(function (t) { 2148 | i.has(t.name) || 2149 | (function t(s) { 2150 | i.add(s.name), 2151 | [] 2152 | .concat( 2153 | s.requires || [], 2154 | s.requiresIfExists || [] 2155 | ) 2156 | .forEach(function (n) { 2157 | if (!i.has(n)) { 2158 | var s = e.get(n); 2159 | s && t(s); 2160 | } 2161 | }), 2162 | n.push(s); 2163 | })(t); 2164 | }), 2165 | n 2166 | ); 2167 | })(t); 2168 | return ct.reduce(function (t, i) { 2169 | return t.concat( 2170 | e.filter(function (t) { 2171 | return t.phase === i; 2172 | }) 2173 | ); 2174 | }, []); 2175 | })( 2176 | ((s = [].concat(n, a.options.modifiers)), 2177 | (r = s.reduce(function (t, e) { 2178 | var i = t[e.name]; 2179 | return ( 2180 | (t[e.name] = i 2181 | ? Object.assign({}, i, e, { 2182 | options: Object.assign({}, i.options, e.options), 2183 | data: Object.assign({}, i.data, e.data), 2184 | }) 2185 | : e), 2186 | t 2187 | ); 2188 | }, {})), 2189 | Object.keys(r).map(function (t) { 2190 | return r[t]; 2191 | })) 2192 | ); 2193 | return ( 2194 | (a.orderedModifiers = c.filter(function (t) { 2195 | return t.enabled; 2196 | })), 2197 | a.orderedModifiers.forEach(function (t) { 2198 | var e = t.name, 2199 | i = t.options, 2200 | n = void 0 === i ? {} : i, 2201 | s = t.effect; 2202 | if ("function" == typeof s) { 2203 | var o = s({ state: a, name: e, instance: h, options: n }); 2204 | l.push(o || function () {}); 2205 | } 2206 | }), 2207 | h.update() 2208 | ); 2209 | }, 2210 | forceUpdate: function () { 2211 | if (!c) { 2212 | var t = a.elements, 2213 | e = t.reference, 2214 | i = t.popper; 2215 | if (le(e, i)) { 2216 | (a.rects = { 2217 | reference: re(e, Ot(i), "fixed" === a.options.strategy), 2218 | popper: bt(i), 2219 | }), 2220 | (a.reset = !1), 2221 | (a.placement = a.options.placement), 2222 | a.orderedModifiers.forEach(function (t) { 2223 | return (a.modifiersData[t.name] = Object.assign( 2224 | {}, 2225 | t.data 2226 | )); 2227 | }); 2228 | for (var n = 0; n < a.orderedModifiers.length; n++) 2229 | if (!0 !== a.reset) { 2230 | var s = a.orderedModifiers[n], 2231 | o = s.fn, 2232 | r = s.options, 2233 | l = void 0 === r ? {} : r, 2234 | d = s.name; 2235 | "function" == typeof o && 2236 | (a = 2237 | o({ state: a, options: l, name: d, instance: h }) || a); 2238 | } else (a.reset = !1), (n = -1); 2239 | } 2240 | } 2241 | }, 2242 | update: 2243 | ((s = function () { 2244 | return new Promise(function (t) { 2245 | h.forceUpdate(), t(a); 2246 | }); 2247 | }), 2248 | function () { 2249 | return ( 2250 | r || 2251 | (r = new Promise(function (t) { 2252 | Promise.resolve().then(function () { 2253 | (r = void 0), t(s()); 2254 | }); 2255 | })), 2256 | r 2257 | ); 2258 | }), 2259 | destroy: function () { 2260 | d(), (c = !0); 2261 | }, 2262 | }; 2263 | if (!le(t, e)) return h; 2264 | function d() { 2265 | l.forEach(function (t) { 2266 | return t(); 2267 | }), 2268 | (l = []); 2269 | } 2270 | return ( 2271 | h.setOptions(i).then(function (t) { 2272 | !c && i.onFirstUpdate && i.onFirstUpdate(t); 2273 | }), 2274 | h 2275 | ); 2276 | }; 2277 | } 2278 | var he = ce(), 2279 | de = ce({ defaultModifiers: [Rt, se, Pt, mt] }), 2280 | ue = ce({ defaultModifiers: [Rt, se, Pt, mt, ne, Jt, oe, Nt, ie] }), 2281 | fe = Object.freeze({ 2282 | __proto__: null, 2283 | popperGenerator: ce, 2284 | detectOverflow: Gt, 2285 | createPopperBase: he, 2286 | createPopper: ue, 2287 | createPopperLite: de, 2288 | top: it, 2289 | bottom: nt, 2290 | right: st, 2291 | left: ot, 2292 | auto: "auto", 2293 | basePlacements: rt, 2294 | start: "start", 2295 | end: "end", 2296 | clippingParents: "clippingParents", 2297 | viewport: "viewport", 2298 | popper: "popper", 2299 | reference: "reference", 2300 | variationPlacements: at, 2301 | placements: lt, 2302 | beforeRead: "beforeRead", 2303 | read: "read", 2304 | afterRead: "afterRead", 2305 | beforeMain: "beforeMain", 2306 | main: "main", 2307 | afterMain: "afterMain", 2308 | beforeWrite: "beforeWrite", 2309 | write: "write", 2310 | afterWrite: "afterWrite", 2311 | modifierPhases: ct, 2312 | applyStyles: mt, 2313 | arrow: Nt, 2314 | computeStyles: Pt, 2315 | eventListeners: Rt, 2316 | flip: Jt, 2317 | hide: ie, 2318 | offset: ne, 2319 | popperOffsets: se, 2320 | preventOverflow: oe, 2321 | }); 2322 | const pe = new RegExp("ArrowUp|ArrowDown|Escape"), 2323 | me = g() ? "top-end" : "top-start", 2324 | ge = g() ? "top-start" : "top-end", 2325 | _e = g() ? "bottom-end" : "bottom-start", 2326 | be = g() ? "bottom-start" : "bottom-end", 2327 | ve = g() ? "left-start" : "right-start", 2328 | ye = g() ? "right-start" : "left-start", 2329 | we = { 2330 | offset: [0, 2], 2331 | boundary: "clippingParents", 2332 | reference: "toggle", 2333 | display: "dynamic", 2334 | popperConfig: null, 2335 | autoClose: !0, 2336 | }, 2337 | Ee = { 2338 | offset: "(array|string|function)", 2339 | boundary: "(string|element)", 2340 | reference: "(string|element|object)", 2341 | display: "string", 2342 | popperConfig: "(null|object|function)", 2343 | autoClose: "(boolean|string)", 2344 | }; 2345 | class Ae extends B { 2346 | constructor(t, e) { 2347 | super(t), 2348 | (this._popper = null), 2349 | (this._config = this._getConfig(e)), 2350 | (this._menu = this._getMenuElement()), 2351 | (this._inNavbar = this._detectNavbar()), 2352 | this._addEventListeners(); 2353 | } 2354 | static get Default() { 2355 | return we; 2356 | } 2357 | static get DefaultType() { 2358 | return Ee; 2359 | } 2360 | static get NAME() { 2361 | return "dropdown"; 2362 | } 2363 | toggle() { 2364 | h(this._element) || 2365 | (this._element.classList.contains("show") ? this.hide() : this.show()); 2366 | } 2367 | show() { 2368 | if (h(this._element) || this._menu.classList.contains("show")) return; 2369 | const t = Ae.getParentFromElement(this._element), 2370 | e = { relatedTarget: this._element }; 2371 | if (!P.trigger(this._element, "show.bs.dropdown", e).defaultPrevented) { 2372 | if (this._inNavbar) U.setDataAttribute(this._menu, "popper", "none"); 2373 | else { 2374 | if (void 0 === fe) 2375 | throw new TypeError( 2376 | "Bootstrap's dropdowns require Popper (https://popper.js.org)" 2377 | ); 2378 | let e = this._element; 2379 | "parent" === this._config.reference 2380 | ? (e = t) 2381 | : r(this._config.reference) 2382 | ? (e = a(this._config.reference)) 2383 | : "object" == typeof this._config.reference && 2384 | (e = this._config.reference); 2385 | const i = this._getPopperConfig(), 2386 | n = i.modifiers.find( 2387 | (t) => "applyStyles" === t.name && !1 === t.enabled 2388 | ); 2389 | (this._popper = ue(e, this._menu, i)), 2390 | n && U.setDataAttribute(this._menu, "popper", "static"); 2391 | } 2392 | "ontouchstart" in document.documentElement && 2393 | !t.closest(".navbar-nav") && 2394 | [] 2395 | .concat(...document.body.children) 2396 | .forEach((t) => P.on(t, "mouseover", u)), 2397 | this._element.focus(), 2398 | this._element.setAttribute("aria-expanded", !0), 2399 | this._menu.classList.toggle("show"), 2400 | this._element.classList.toggle("show"), 2401 | P.trigger(this._element, "shown.bs.dropdown", e); 2402 | } 2403 | } 2404 | hide() { 2405 | if (h(this._element) || !this._menu.classList.contains("show")) return; 2406 | const t = { relatedTarget: this._element }; 2407 | this._completeHide(t); 2408 | } 2409 | dispose() { 2410 | this._popper && this._popper.destroy(), super.dispose(); 2411 | } 2412 | update() { 2413 | (this._inNavbar = this._detectNavbar()), 2414 | this._popper && this._popper.update(); 2415 | } 2416 | _addEventListeners() { 2417 | P.on(this._element, "click.bs.dropdown", (t) => { 2418 | t.preventDefault(), this.toggle(); 2419 | }); 2420 | } 2421 | _completeHide(t) { 2422 | P.trigger(this._element, "hide.bs.dropdown", t).defaultPrevented || 2423 | ("ontouchstart" in document.documentElement && 2424 | [] 2425 | .concat(...document.body.children) 2426 | .forEach((t) => P.off(t, "mouseover", u)), 2427 | this._popper && this._popper.destroy(), 2428 | this._menu.classList.remove("show"), 2429 | this._element.classList.remove("show"), 2430 | this._element.setAttribute("aria-expanded", "false"), 2431 | U.removeDataAttribute(this._menu, "popper"), 2432 | P.trigger(this._element, "hidden.bs.dropdown", t)); 2433 | } 2434 | _getConfig(t) { 2435 | if ( 2436 | ((t = { 2437 | ...this.constructor.Default, 2438 | ...U.getDataAttributes(this._element), 2439 | ...t, 2440 | }), 2441 | l("dropdown", t, this.constructor.DefaultType), 2442 | "object" == typeof t.reference && 2443 | !r(t.reference) && 2444 | "function" != typeof t.reference.getBoundingClientRect) 2445 | ) 2446 | throw new TypeError( 2447 | "dropdown".toUpperCase() + 2448 | ': Option "reference" provided type "object" without a required "getBoundingClientRect" method.' 2449 | ); 2450 | return t; 2451 | } 2452 | _getMenuElement() { 2453 | return t.next(this._element, ".dropdown-menu")[0]; 2454 | } 2455 | _getPlacement() { 2456 | const t = this._element.parentNode; 2457 | if (t.classList.contains("dropend")) return ve; 2458 | if (t.classList.contains("dropstart")) return ye; 2459 | const e = 2460 | "end" === 2461 | getComputedStyle(this._menu).getPropertyValue("--bs-position").trim(); 2462 | return t.classList.contains("dropup") ? (e ? ge : me) : e ? be : _e; 2463 | } 2464 | _detectNavbar() { 2465 | return null !== this._element.closest(".navbar"); 2466 | } 2467 | _getOffset() { 2468 | const { offset: t } = this._config; 2469 | return "string" == typeof t 2470 | ? t.split(",").map((t) => Number.parseInt(t, 10)) 2471 | : "function" == typeof t 2472 | ? (e) => t(e, this._element) 2473 | : t; 2474 | } 2475 | _getPopperConfig() { 2476 | const t = { 2477 | placement: this._getPlacement(), 2478 | modifiers: [ 2479 | { 2480 | name: "preventOverflow", 2481 | options: { boundary: this._config.boundary }, 2482 | }, 2483 | { name: "offset", options: { offset: this._getOffset() } }, 2484 | ], 2485 | }; 2486 | return ( 2487 | "static" === this._config.display && 2488 | (t.modifiers = [{ name: "applyStyles", enabled: !1 }]), 2489 | { 2490 | ...t, 2491 | ...("function" == typeof this._config.popperConfig 2492 | ? this._config.popperConfig(t) 2493 | : this._config.popperConfig), 2494 | } 2495 | ); 2496 | } 2497 | _selectMenuItem({ key: e, target: i }) { 2498 | const n = t 2499 | .find( 2500 | ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)", 2501 | this._menu 2502 | ) 2503 | .filter(c); 2504 | n.length && y(n, i, "ArrowDown" === e, !n.includes(i)).focus(); 2505 | } 2506 | static dropdownInterface(t, e) { 2507 | const i = Ae.getOrCreateInstance(t, e); 2508 | if ("string" == typeof e) { 2509 | if (void 0 === i[e]) throw new TypeError(`No method named "${e}"`); 2510 | i[e](); 2511 | } 2512 | } 2513 | static jQueryInterface(t) { 2514 | return this.each(function () { 2515 | Ae.dropdownInterface(this, t); 2516 | }); 2517 | } 2518 | static clearMenus(e) { 2519 | if (e && (2 === e.button || ("keyup" === e.type && "Tab" !== e.key))) 2520 | return; 2521 | const i = t.find('[data-bs-toggle="dropdown"]'); 2522 | for (let t = 0, n = i.length; t < n; t++) { 2523 | const n = Ae.getInstance(i[t]); 2524 | if (!n || !1 === n._config.autoClose) continue; 2525 | if (!n._element.classList.contains("show")) continue; 2526 | const s = { relatedTarget: n._element }; 2527 | if (e) { 2528 | const t = e.composedPath(), 2529 | i = t.includes(n._menu); 2530 | if ( 2531 | t.includes(n._element) || 2532 | ("inside" === n._config.autoClose && !i) || 2533 | ("outside" === n._config.autoClose && i) 2534 | ) 2535 | continue; 2536 | if ( 2537 | n._menu.contains(e.target) && 2538 | (("keyup" === e.type && "Tab" === e.key) || 2539 | /input|select|option|textarea|form/i.test(e.target.tagName)) 2540 | ) 2541 | continue; 2542 | "click" === e.type && (s.clickEvent = e); 2543 | } 2544 | n._completeHide(s); 2545 | } 2546 | } 2547 | static getParentFromElement(t) { 2548 | return s(t) || t.parentNode; 2549 | } 2550 | static dataApiKeydownHandler(e) { 2551 | if ( 2552 | /input|textarea/i.test(e.target.tagName) 2553 | ? "Space" === e.key || 2554 | ("Escape" !== e.key && 2555 | (("ArrowDown" !== e.key && "ArrowUp" !== e.key) || 2556 | e.target.closest(".dropdown-menu"))) 2557 | : !pe.test(e.key) 2558 | ) 2559 | return; 2560 | const i = this.classList.contains("show"); 2561 | if (!i && "Escape" === e.key) return; 2562 | if ((e.preventDefault(), e.stopPropagation(), h(this))) return; 2563 | const n = () => 2564 | this.matches('[data-bs-toggle="dropdown"]') 2565 | ? this 2566 | : t.prev(this, '[data-bs-toggle="dropdown"]')[0]; 2567 | return "Escape" === e.key 2568 | ? (n().focus(), void Ae.clearMenus()) 2569 | : "ArrowUp" === e.key || "ArrowDown" === e.key 2570 | ? (i || n().click(), void Ae.getInstance(n())._selectMenuItem(e)) 2571 | : void ((i && "Space" !== e.key) || Ae.clearMenus()); 2572 | } 2573 | } 2574 | P.on( 2575 | document, 2576 | "keydown.bs.dropdown.data-api", 2577 | '[data-bs-toggle="dropdown"]', 2578 | Ae.dataApiKeydownHandler 2579 | ), 2580 | P.on( 2581 | document, 2582 | "keydown.bs.dropdown.data-api", 2583 | ".dropdown-menu", 2584 | Ae.dataApiKeydownHandler 2585 | ), 2586 | P.on(document, "click.bs.dropdown.data-api", Ae.clearMenus), 2587 | P.on(document, "keyup.bs.dropdown.data-api", Ae.clearMenus), 2588 | P.on( 2589 | document, 2590 | "click.bs.dropdown.data-api", 2591 | '[data-bs-toggle="dropdown"]', 2592 | function (t) { 2593 | t.preventDefault(), Ae.dropdownInterface(this); 2594 | } 2595 | ), 2596 | _(Ae); 2597 | class Te { 2598 | constructor() { 2599 | this._element = document.body; 2600 | } 2601 | getWidth() { 2602 | const t = document.documentElement.clientWidth; 2603 | return Math.abs(window.innerWidth - t); 2604 | } 2605 | hide() { 2606 | const t = this.getWidth(); 2607 | this._disableOverFlow(), 2608 | this._setElementAttributes(this._element, "paddingRight", (e) => e + t), 2609 | this._setElementAttributes( 2610 | ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", 2611 | "paddingRight", 2612 | (e) => e + t 2613 | ), 2614 | this._setElementAttributes(".sticky-top", "marginRight", (e) => e - t); 2615 | } 2616 | _disableOverFlow() { 2617 | this._saveInitialAttribute(this._element, "overflow"), 2618 | (this._element.style.overflow = "hidden"); 2619 | } 2620 | _setElementAttributes(t, e, i) { 2621 | const n = this.getWidth(); 2622 | this._applyManipulationCallback(t, (t) => { 2623 | if (t !== this._element && window.innerWidth > t.clientWidth + n) 2624 | return; 2625 | this._saveInitialAttribute(t, e); 2626 | const s = window.getComputedStyle(t)[e]; 2627 | t.style[e] = i(Number.parseFloat(s)) + "px"; 2628 | }); 2629 | } 2630 | reset() { 2631 | this._resetElementAttributes(this._element, "overflow"), 2632 | this._resetElementAttributes(this._element, "paddingRight"), 2633 | this._resetElementAttributes( 2634 | ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", 2635 | "paddingRight" 2636 | ), 2637 | this._resetElementAttributes(".sticky-top", "marginRight"); 2638 | } 2639 | _saveInitialAttribute(t, e) { 2640 | const i = t.style[e]; 2641 | i && U.setDataAttribute(t, e, i); 2642 | } 2643 | _resetElementAttributes(t, e) { 2644 | this._applyManipulationCallback(t, (t) => { 2645 | const i = U.getDataAttribute(t, e); 2646 | void 0 === i 2647 | ? t.style.removeProperty(e) 2648 | : (U.removeDataAttribute(t, e), (t.style[e] = i)); 2649 | }); 2650 | } 2651 | _applyManipulationCallback(e, i) { 2652 | r(e) ? i(e) : t.find(e, this._element).forEach(i); 2653 | } 2654 | isOverflowing() { 2655 | return this.getWidth() > 0; 2656 | } 2657 | } 2658 | const Oe = { 2659 | isVisible: !0, 2660 | isAnimated: !1, 2661 | rootElement: "body", 2662 | clickCallback: null, 2663 | }, 2664 | Ce = { 2665 | isVisible: "boolean", 2666 | isAnimated: "boolean", 2667 | rootElement: "(element|string)", 2668 | clickCallback: "(function|null)", 2669 | }; 2670 | class ke { 2671 | constructor(t) { 2672 | (this._config = this._getConfig(t)), 2673 | (this._isAppended = !1), 2674 | (this._element = null); 2675 | } 2676 | show(t) { 2677 | this._config.isVisible 2678 | ? (this._append(), 2679 | this._config.isAnimated && f(this._getElement()), 2680 | this._getElement().classList.add("show"), 2681 | this._emulateAnimation(() => { 2682 | b(t); 2683 | })) 2684 | : b(t); 2685 | } 2686 | hide(t) { 2687 | this._config.isVisible 2688 | ? (this._getElement().classList.remove("show"), 2689 | this._emulateAnimation(() => { 2690 | this.dispose(), b(t); 2691 | })) 2692 | : b(t); 2693 | } 2694 | _getElement() { 2695 | if (!this._element) { 2696 | const t = document.createElement("div"); 2697 | (t.className = "modal-backdrop"), 2698 | this._config.isAnimated && t.classList.add("fade"), 2699 | (this._element = t); 2700 | } 2701 | return this._element; 2702 | } 2703 | _getConfig(t) { 2704 | return ( 2705 | ((t = { ...Oe, ...("object" == typeof t ? t : {}) }).rootElement = a( 2706 | t.rootElement 2707 | )), 2708 | l("backdrop", t, Ce), 2709 | t 2710 | ); 2711 | } 2712 | _append() { 2713 | this._isAppended || 2714 | (this._config.rootElement.appendChild(this._getElement()), 2715 | P.on(this._getElement(), "mousedown.bs.backdrop", () => { 2716 | b(this._config.clickCallback); 2717 | }), 2718 | (this._isAppended = !0)); 2719 | } 2720 | dispose() { 2721 | this._isAppended && 2722 | (P.off(this._element, "mousedown.bs.backdrop"), 2723 | this._element.remove(), 2724 | (this._isAppended = !1)); 2725 | } 2726 | _emulateAnimation(t) { 2727 | v(t, this._getElement(), this._config.isAnimated); 2728 | } 2729 | } 2730 | const Le = { backdrop: !0, keyboard: !0, focus: !0 }, 2731 | xe = { 2732 | backdrop: "(boolean|string)", 2733 | keyboard: "boolean", 2734 | focus: "boolean", 2735 | }; 2736 | class De extends B { 2737 | constructor(e, i) { 2738 | super(e), 2739 | (this._config = this._getConfig(i)), 2740 | (this._dialog = t.findOne(".modal-dialog", this._element)), 2741 | (this._backdrop = this._initializeBackDrop()), 2742 | (this._isShown = !1), 2743 | (this._ignoreBackdropClick = !1), 2744 | (this._isTransitioning = !1), 2745 | (this._scrollBar = new Te()); 2746 | } 2747 | static get Default() { 2748 | return Le; 2749 | } 2750 | static get NAME() { 2751 | return "modal"; 2752 | } 2753 | toggle(t) { 2754 | return this._isShown ? this.hide() : this.show(t); 2755 | } 2756 | show(t) { 2757 | this._isShown || 2758 | this._isTransitioning || 2759 | P.trigger(this._element, "show.bs.modal", { relatedTarget: t }) 2760 | .defaultPrevented || 2761 | ((this._isShown = !0), 2762 | this._isAnimated() && (this._isTransitioning = !0), 2763 | this._scrollBar.hide(), 2764 | document.body.classList.add("modal-open"), 2765 | this._adjustDialog(), 2766 | this._setEscapeEvent(), 2767 | this._setResizeEvent(), 2768 | P.on( 2769 | this._element, 2770 | "click.dismiss.bs.modal", 2771 | '[data-bs-dismiss="modal"]', 2772 | (t) => this.hide(t) 2773 | ), 2774 | P.on(this._dialog, "mousedown.dismiss.bs.modal", () => { 2775 | P.one(this._element, "mouseup.dismiss.bs.modal", (t) => { 2776 | t.target === this._element && (this._ignoreBackdropClick = !0); 2777 | }); 2778 | }), 2779 | this._showBackdrop(() => this._showElement(t))); 2780 | } 2781 | hide(t) { 2782 | if ( 2783 | (t && ["A", "AREA"].includes(t.target.tagName) && t.preventDefault(), 2784 | !this._isShown || this._isTransitioning) 2785 | ) 2786 | return; 2787 | if (P.trigger(this._element, "hide.bs.modal").defaultPrevented) return; 2788 | this._isShown = !1; 2789 | const e = this._isAnimated(); 2790 | e && (this._isTransitioning = !0), 2791 | this._setEscapeEvent(), 2792 | this._setResizeEvent(), 2793 | P.off(document, "focusin.bs.modal"), 2794 | this._element.classList.remove("show"), 2795 | P.off(this._element, "click.dismiss.bs.modal"), 2796 | P.off(this._dialog, "mousedown.dismiss.bs.modal"), 2797 | this._queueCallback(() => this._hideModal(), this._element, e); 2798 | } 2799 | dispose() { 2800 | [window, this._dialog].forEach((t) => P.off(t, ".bs.modal")), 2801 | this._backdrop.dispose(), 2802 | super.dispose(), 2803 | P.off(document, "focusin.bs.modal"); 2804 | } 2805 | handleUpdate() { 2806 | this._adjustDialog(); 2807 | } 2808 | _initializeBackDrop() { 2809 | return new ke({ 2810 | isVisible: Boolean(this._config.backdrop), 2811 | isAnimated: this._isAnimated(), 2812 | }); 2813 | } 2814 | _getConfig(t) { 2815 | return ( 2816 | (t = { 2817 | ...Le, 2818 | ...U.getDataAttributes(this._element), 2819 | ...("object" == typeof t ? t : {}), 2820 | }), 2821 | l("modal", t, xe), 2822 | t 2823 | ); 2824 | } 2825 | _showElement(e) { 2826 | const i = this._isAnimated(), 2827 | n = t.findOne(".modal-body", this._dialog); 2828 | (this._element.parentNode && 2829 | this._element.parentNode.nodeType === Node.ELEMENT_NODE) || 2830 | document.body.appendChild(this._element), 2831 | (this._element.style.display = "block"), 2832 | this._element.removeAttribute("aria-hidden"), 2833 | this._element.setAttribute("aria-modal", !0), 2834 | this._element.setAttribute("role", "dialog"), 2835 | (this._element.scrollTop = 0), 2836 | n && (n.scrollTop = 0), 2837 | i && f(this._element), 2838 | this._element.classList.add("show"), 2839 | this._config.focus && this._enforceFocus(), 2840 | this._queueCallback( 2841 | () => { 2842 | this._config.focus && this._element.focus(), 2843 | (this._isTransitioning = !1), 2844 | P.trigger(this._element, "shown.bs.modal", { relatedTarget: e }); 2845 | }, 2846 | this._dialog, 2847 | i 2848 | ); 2849 | } 2850 | _enforceFocus() { 2851 | P.off(document, "focusin.bs.modal"), 2852 | P.on(document, "focusin.bs.modal", (t) => { 2853 | document === t.target || 2854 | this._element === t.target || 2855 | this._element.contains(t.target) || 2856 | this._element.focus(); 2857 | }); 2858 | } 2859 | _setEscapeEvent() { 2860 | this._isShown 2861 | ? P.on(this._element, "keydown.dismiss.bs.modal", (t) => { 2862 | this._config.keyboard && "Escape" === t.key 2863 | ? (t.preventDefault(), this.hide()) 2864 | : this._config.keyboard || 2865 | "Escape" !== t.key || 2866 | this._triggerBackdropTransition(); 2867 | }) 2868 | : P.off(this._element, "keydown.dismiss.bs.modal"); 2869 | } 2870 | _setResizeEvent() { 2871 | this._isShown 2872 | ? P.on(window, "resize.bs.modal", () => this._adjustDialog()) 2873 | : P.off(window, "resize.bs.modal"); 2874 | } 2875 | _hideModal() { 2876 | (this._element.style.display = "none"), 2877 | this._element.setAttribute("aria-hidden", !0), 2878 | this._element.removeAttribute("aria-modal"), 2879 | this._element.removeAttribute("role"), 2880 | (this._isTransitioning = !1), 2881 | this._backdrop.hide(() => { 2882 | document.body.classList.remove("modal-open"), 2883 | this._resetAdjustments(), 2884 | this._scrollBar.reset(), 2885 | P.trigger(this._element, "hidden.bs.modal"); 2886 | }); 2887 | } 2888 | _showBackdrop(t) { 2889 | P.on(this._element, "click.dismiss.bs.modal", (t) => { 2890 | this._ignoreBackdropClick 2891 | ? (this._ignoreBackdropClick = !1) 2892 | : t.target === t.currentTarget && 2893 | (!0 === this._config.backdrop 2894 | ? this.hide() 2895 | : "static" === this._config.backdrop && 2896 | this._triggerBackdropTransition()); 2897 | }), 2898 | this._backdrop.show(t); 2899 | } 2900 | _isAnimated() { 2901 | return this._element.classList.contains("fade"); 2902 | } 2903 | _triggerBackdropTransition() { 2904 | if (P.trigger(this._element, "hidePrevented.bs.modal").defaultPrevented) 2905 | return; 2906 | const { classList: t, scrollHeight: e, style: i } = this._element, 2907 | n = e > document.documentElement.clientHeight; 2908 | (!n && "hidden" === i.overflowY) || 2909 | t.contains("modal-static") || 2910 | (n || (i.overflowY = "hidden"), 2911 | t.add("modal-static"), 2912 | this._queueCallback(() => { 2913 | t.remove("modal-static"), 2914 | n || 2915 | this._queueCallback(() => { 2916 | i.overflowY = ""; 2917 | }, this._dialog); 2918 | }, this._dialog), 2919 | this._element.focus()); 2920 | } 2921 | _adjustDialog() { 2922 | const t = 2923 | this._element.scrollHeight > document.documentElement.clientHeight, 2924 | e = this._scrollBar.getWidth(), 2925 | i = e > 0; 2926 | ((!i && t && !g()) || (i && !t && g())) && 2927 | (this._element.style.paddingLeft = e + "px"), 2928 | ((i && !t && !g()) || (!i && t && g())) && 2929 | (this._element.style.paddingRight = e + "px"); 2930 | } 2931 | _resetAdjustments() { 2932 | (this._element.style.paddingLeft = ""), 2933 | (this._element.style.paddingRight = ""); 2934 | } 2935 | static jQueryInterface(t, e) { 2936 | return this.each(function () { 2937 | const i = De.getOrCreateInstance(this, t); 2938 | if ("string" == typeof t) { 2939 | if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`); 2940 | i[t](e); 2941 | } 2942 | }); 2943 | } 2944 | } 2945 | P.on( 2946 | document, 2947 | "click.bs.modal.data-api", 2948 | '[data-bs-toggle="modal"]', 2949 | function (t) { 2950 | const e = s(this); 2951 | ["A", "AREA"].includes(this.tagName) && t.preventDefault(), 2952 | P.one(e, "show.bs.modal", (t) => { 2953 | t.defaultPrevented || 2954 | P.one(e, "hidden.bs.modal", () => { 2955 | c(this) && this.focus(); 2956 | }); 2957 | }), 2958 | De.getOrCreateInstance(e).toggle(this); 2959 | } 2960 | ), 2961 | _(De); 2962 | const Se = { backdrop: !0, keyboard: !0, scroll: !1 }, 2963 | Ie = { backdrop: "boolean", keyboard: "boolean", scroll: "boolean" }; 2964 | class Ne extends B { 2965 | constructor(t, e) { 2966 | super(t), 2967 | (this._config = this._getConfig(e)), 2968 | (this._isShown = !1), 2969 | (this._backdrop = this._initializeBackDrop()), 2970 | this._addEventListeners(); 2971 | } 2972 | static get NAME() { 2973 | return "offcanvas"; 2974 | } 2975 | static get Default() { 2976 | return Se; 2977 | } 2978 | toggle(t) { 2979 | return this._isShown ? this.hide() : this.show(t); 2980 | } 2981 | show(t) { 2982 | this._isShown || 2983 | P.trigger(this._element, "show.bs.offcanvas", { relatedTarget: t }) 2984 | .defaultPrevented || 2985 | ((this._isShown = !0), 2986 | (this._element.style.visibility = "visible"), 2987 | this._backdrop.show(), 2988 | this._config.scroll || 2989 | (new Te().hide(), this._enforceFocusOnElement(this._element)), 2990 | this._element.removeAttribute("aria-hidden"), 2991 | this._element.setAttribute("aria-modal", !0), 2992 | this._element.setAttribute("role", "dialog"), 2993 | this._element.classList.add("show"), 2994 | this._queueCallback( 2995 | () => { 2996 | P.trigger(this._element, "shown.bs.offcanvas", { 2997 | relatedTarget: t, 2998 | }); 2999 | }, 3000 | this._element, 3001 | !0 3002 | )); 3003 | } 3004 | hide() { 3005 | this._isShown && 3006 | (P.trigger(this._element, "hide.bs.offcanvas").defaultPrevented || 3007 | (P.off(document, "focusin.bs.offcanvas"), 3008 | this._element.blur(), 3009 | (this._isShown = !1), 3010 | this._element.classList.remove("show"), 3011 | this._backdrop.hide(), 3012 | this._queueCallback( 3013 | () => { 3014 | this._element.setAttribute("aria-hidden", !0), 3015 | this._element.removeAttribute("aria-modal"), 3016 | this._element.removeAttribute("role"), 3017 | (this._element.style.visibility = "hidden"), 3018 | this._config.scroll || new Te().reset(), 3019 | P.trigger(this._element, "hidden.bs.offcanvas"); 3020 | }, 3021 | this._element, 3022 | !0 3023 | ))); 3024 | } 3025 | dispose() { 3026 | this._backdrop.dispose(), 3027 | super.dispose(), 3028 | P.off(document, "focusin.bs.offcanvas"); 3029 | } 3030 | _getConfig(t) { 3031 | return ( 3032 | (t = { 3033 | ...Se, 3034 | ...U.getDataAttributes(this._element), 3035 | ...("object" == typeof t ? t : {}), 3036 | }), 3037 | l("offcanvas", t, Ie), 3038 | t 3039 | ); 3040 | } 3041 | _initializeBackDrop() { 3042 | return new ke({ 3043 | isVisible: this._config.backdrop, 3044 | isAnimated: !0, 3045 | rootElement: this._element.parentNode, 3046 | clickCallback: () => this.hide(), 3047 | }); 3048 | } 3049 | _enforceFocusOnElement(t) { 3050 | P.off(document, "focusin.bs.offcanvas"), 3051 | P.on(document, "focusin.bs.offcanvas", (e) => { 3052 | document === e.target || 3053 | t === e.target || 3054 | t.contains(e.target) || 3055 | t.focus(); 3056 | }), 3057 | t.focus(); 3058 | } 3059 | _addEventListeners() { 3060 | P.on( 3061 | this._element, 3062 | "click.dismiss.bs.offcanvas", 3063 | '[data-bs-dismiss="offcanvas"]', 3064 | () => this.hide() 3065 | ), 3066 | P.on(this._element, "keydown.dismiss.bs.offcanvas", (t) => { 3067 | this._config.keyboard && "Escape" === t.key && this.hide(); 3068 | }); 3069 | } 3070 | static jQueryInterface(t) { 3071 | return this.each(function () { 3072 | const e = Ne.getOrCreateInstance(this, t); 3073 | if ("string" == typeof t) { 3074 | if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) 3075 | throw new TypeError(`No method named "${t}"`); 3076 | e[t](this); 3077 | } 3078 | }); 3079 | } 3080 | } 3081 | P.on( 3082 | document, 3083 | "click.bs.offcanvas.data-api", 3084 | '[data-bs-toggle="offcanvas"]', 3085 | function (e) { 3086 | const i = s(this); 3087 | if ((["A", "AREA"].includes(this.tagName) && e.preventDefault(), h(this))) 3088 | return; 3089 | P.one(i, "hidden.bs.offcanvas", () => { 3090 | c(this) && this.focus(); 3091 | }); 3092 | const n = t.findOne(".offcanvas.show"); 3093 | n && n !== i && Ne.getInstance(n).hide(), 3094 | Ne.getOrCreateInstance(i).toggle(this); 3095 | } 3096 | ), 3097 | P.on(window, "load.bs.offcanvas.data-api", () => 3098 | t.find(".offcanvas.show").forEach((t) => Ne.getOrCreateInstance(t).show()) 3099 | ), 3100 | _(Ne); 3101 | const je = new Set([ 3102 | "background", 3103 | "cite", 3104 | "href", 3105 | "itemtype", 3106 | "longdesc", 3107 | "poster", 3108 | "src", 3109 | "xlink:href", 3110 | ]), 3111 | Me = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i, 3112 | Pe = 3113 | /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i, 3114 | He = (t, e) => { 3115 | const i = t.nodeName.toLowerCase(); 3116 | if (e.includes(i)) 3117 | return ( 3118 | !je.has(i) || Boolean(Me.test(t.nodeValue) || Pe.test(t.nodeValue)) 3119 | ); 3120 | const n = e.filter((t) => t instanceof RegExp); 3121 | for (let t = 0, e = n.length; t < e; t++) if (n[t].test(i)) return !0; 3122 | return !1; 3123 | }; 3124 | function Re(t, e, i) { 3125 | if (!t.length) return t; 3126 | if (i && "function" == typeof i) return i(t); 3127 | const n = new window.DOMParser().parseFromString(t, "text/html"), 3128 | s = Object.keys(e), 3129 | o = [].concat(...n.body.querySelectorAll("*")); 3130 | for (let t = 0, i = o.length; t < i; t++) { 3131 | const i = o[t], 3132 | n = i.nodeName.toLowerCase(); 3133 | if (!s.includes(n)) { 3134 | i.remove(); 3135 | continue; 3136 | } 3137 | const r = [].concat(...i.attributes), 3138 | a = [].concat(e["*"] || [], e[n] || []); 3139 | r.forEach((t) => { 3140 | He(t, a) || i.removeAttribute(t.nodeName); 3141 | }); 3142 | } 3143 | return n.body.innerHTML; 3144 | } 3145 | const Be = new RegExp("(^|\\s)bs-tooltip\\S+", "g"), 3146 | We = new Set(["sanitize", "allowList", "sanitizeFn"]), 3147 | qe = { 3148 | animation: "boolean", 3149 | template: "string", 3150 | title: "(string|element|function)", 3151 | trigger: "string", 3152 | delay: "(number|object)", 3153 | html: "boolean", 3154 | selector: "(string|boolean)", 3155 | placement: "(string|function)", 3156 | offset: "(array|string|function)", 3157 | container: "(string|element|boolean)", 3158 | fallbackPlacements: "array", 3159 | boundary: "(string|element)", 3160 | customClass: "(string|function)", 3161 | sanitize: "boolean", 3162 | sanitizeFn: "(null|function)", 3163 | allowList: "object", 3164 | popperConfig: "(null|object|function)", 3165 | }, 3166 | ze = { 3167 | AUTO: "auto", 3168 | TOP: "top", 3169 | RIGHT: g() ? "left" : "right", 3170 | BOTTOM: "bottom", 3171 | LEFT: g() ? "right" : "left", 3172 | }, 3173 | $e = { 3174 | animation: !0, 3175 | template: 3176 | '', 3177 | trigger: "hover focus", 3178 | title: "", 3179 | delay: 0, 3180 | html: !1, 3181 | selector: !1, 3182 | placement: "top", 3183 | offset: [0, 0], 3184 | container: !1, 3185 | fallbackPlacements: ["top", "right", "bottom", "left"], 3186 | boundary: "clippingParents", 3187 | customClass: "", 3188 | sanitize: !0, 3189 | sanitizeFn: null, 3190 | allowList: { 3191 | "*": ["class", "dir", "id", "lang", "role", /^aria-[\w-]*$/i], 3192 | a: ["target", "href", "title", "rel"], 3193 | area: [], 3194 | b: [], 3195 | br: [], 3196 | col: [], 3197 | code: [], 3198 | div: [], 3199 | em: [], 3200 | hr: [], 3201 | h1: [], 3202 | h2: [], 3203 | h3: [], 3204 | h4: [], 3205 | h5: [], 3206 | h6: [], 3207 | i: [], 3208 | img: ["src", "srcset", "alt", "title", "width", "height"], 3209 | li: [], 3210 | ol: [], 3211 | p: [], 3212 | pre: [], 3213 | s: [], 3214 | small: [], 3215 | span: [], 3216 | sub: [], 3217 | sup: [], 3218 | strong: [], 3219 | u: [], 3220 | ul: [], 3221 | }, 3222 | popperConfig: null, 3223 | }, 3224 | Ue = { 3225 | HIDE: "hide.bs.tooltip", 3226 | HIDDEN: "hidden.bs.tooltip", 3227 | SHOW: "show.bs.tooltip", 3228 | SHOWN: "shown.bs.tooltip", 3229 | INSERTED: "inserted.bs.tooltip", 3230 | CLICK: "click.bs.tooltip", 3231 | FOCUSIN: "focusin.bs.tooltip", 3232 | FOCUSOUT: "focusout.bs.tooltip", 3233 | MOUSEENTER: "mouseenter.bs.tooltip", 3234 | MOUSELEAVE: "mouseleave.bs.tooltip", 3235 | }; 3236 | class Fe extends B { 3237 | constructor(t, e) { 3238 | if (void 0 === fe) 3239 | throw new TypeError( 3240 | "Bootstrap's tooltips require Popper (https://popper.js.org)" 3241 | ); 3242 | super(t), 3243 | (this._isEnabled = !0), 3244 | (this._timeout = 0), 3245 | (this._hoverState = ""), 3246 | (this._activeTrigger = {}), 3247 | (this._popper = null), 3248 | (this._config = this._getConfig(e)), 3249 | (this.tip = null), 3250 | this._setListeners(); 3251 | } 3252 | static get Default() { 3253 | return $e; 3254 | } 3255 | static get NAME() { 3256 | return "tooltip"; 3257 | } 3258 | static get Event() { 3259 | return Ue; 3260 | } 3261 | static get DefaultType() { 3262 | return qe; 3263 | } 3264 | enable() { 3265 | this._isEnabled = !0; 3266 | } 3267 | disable() { 3268 | this._isEnabled = !1; 3269 | } 3270 | toggleEnabled() { 3271 | this._isEnabled = !this._isEnabled; 3272 | } 3273 | toggle(t) { 3274 | if (this._isEnabled) 3275 | if (t) { 3276 | const e = this._initializeOnDelegatedTarget(t); 3277 | (e._activeTrigger.click = !e._activeTrigger.click), 3278 | e._isWithActiveTrigger() ? e._enter(null, e) : e._leave(null, e); 3279 | } else { 3280 | if (this.getTipElement().classList.contains("show")) 3281 | return void this._leave(null, this); 3282 | this._enter(null, this); 3283 | } 3284 | } 3285 | dispose() { 3286 | clearTimeout(this._timeout), 3287 | P.off( 3288 | this._element.closest(".modal"), 3289 | "hide.bs.modal", 3290 | this._hideModalHandler 3291 | ), 3292 | this.tip && this.tip.remove(), 3293 | this._popper && this._popper.destroy(), 3294 | super.dispose(); 3295 | } 3296 | show() { 3297 | if ("none" === this._element.style.display) 3298 | throw new Error("Please use show on visible elements"); 3299 | if (!this.isWithContent() || !this._isEnabled) return; 3300 | const t = P.trigger(this._element, this.constructor.Event.SHOW), 3301 | i = d(this._element), 3302 | n = 3303 | null === i 3304 | ? this._element.ownerDocument.documentElement.contains( 3305 | this._element 3306 | ) 3307 | : i.contains(this._element); 3308 | if (t.defaultPrevented || !n) return; 3309 | const s = this.getTipElement(), 3310 | o = e(this.constructor.NAME); 3311 | s.setAttribute("id", o), 3312 | this._element.setAttribute("aria-describedby", o), 3313 | this.setContent(), 3314 | this._config.animation && s.classList.add("fade"); 3315 | const r = 3316 | "function" == typeof this._config.placement 3317 | ? this._config.placement.call(this, s, this._element) 3318 | : this._config.placement, 3319 | a = this._getAttachment(r); 3320 | this._addAttachmentClass(a); 3321 | const { container: l } = this._config; 3322 | R.set(s, this.constructor.DATA_KEY, this), 3323 | this._element.ownerDocument.documentElement.contains(this.tip) || 3324 | (l.appendChild(s), 3325 | P.trigger(this._element, this.constructor.Event.INSERTED)), 3326 | this._popper 3327 | ? this._popper.update() 3328 | : (this._popper = ue(this._element, s, this._getPopperConfig(a))), 3329 | s.classList.add("show"); 3330 | const c = 3331 | "function" == typeof this._config.customClass 3332 | ? this._config.customClass() 3333 | : this._config.customClass; 3334 | c && s.classList.add(...c.split(" ")), 3335 | "ontouchstart" in document.documentElement && 3336 | [].concat(...document.body.children).forEach((t) => { 3337 | P.on(t, "mouseover", u); 3338 | }); 3339 | const h = this.tip.classList.contains("fade"); 3340 | this._queueCallback( 3341 | () => { 3342 | const t = this._hoverState; 3343 | (this._hoverState = null), 3344 | P.trigger(this._element, this.constructor.Event.SHOWN), 3345 | "out" === t && this._leave(null, this); 3346 | }, 3347 | this.tip, 3348 | h 3349 | ); 3350 | } 3351 | hide() { 3352 | if (!this._popper) return; 3353 | const t = this.getTipElement(); 3354 | if ( 3355 | P.trigger(this._element, this.constructor.Event.HIDE).defaultPrevented 3356 | ) 3357 | return; 3358 | t.classList.remove("show"), 3359 | "ontouchstart" in document.documentElement && 3360 | [] 3361 | .concat(...document.body.children) 3362 | .forEach((t) => P.off(t, "mouseover", u)), 3363 | (this._activeTrigger.click = !1), 3364 | (this._activeTrigger.focus = !1), 3365 | (this._activeTrigger.hover = !1); 3366 | const e = this.tip.classList.contains("fade"); 3367 | this._queueCallback( 3368 | () => { 3369 | this._isWithActiveTrigger() || 3370 | ("show" !== this._hoverState && t.remove(), 3371 | this._cleanTipClass(), 3372 | this._element.removeAttribute("aria-describedby"), 3373 | P.trigger(this._element, this.constructor.Event.HIDDEN), 3374 | this._popper && (this._popper.destroy(), (this._popper = null))); 3375 | }, 3376 | this.tip, 3377 | e 3378 | ), 3379 | (this._hoverState = ""); 3380 | } 3381 | update() { 3382 | null !== this._popper && this._popper.update(); 3383 | } 3384 | isWithContent() { 3385 | return Boolean(this.getTitle()); 3386 | } 3387 | getTipElement() { 3388 | if (this.tip) return this.tip; 3389 | const t = document.createElement("div"); 3390 | return ( 3391 | (t.innerHTML = this._config.template), 3392 | (this.tip = t.children[0]), 3393 | this.tip 3394 | ); 3395 | } 3396 | setContent() { 3397 | const e = this.getTipElement(); 3398 | this.setElementContent(t.findOne(".tooltip-inner", e), this.getTitle()), 3399 | e.classList.remove("fade", "show"); 3400 | } 3401 | setElementContent(t, e) { 3402 | if (null !== t) 3403 | return r(e) 3404 | ? ((e = a(e)), 3405 | void (this._config.html 3406 | ? e.parentNode !== t && ((t.innerHTML = ""), t.appendChild(e)) 3407 | : (t.textContent = e.textContent))) 3408 | : void (this._config.html 3409 | ? (this._config.sanitize && 3410 | (e = Re(e, this._config.allowList, this._config.sanitizeFn)), 3411 | (t.innerHTML = e)) 3412 | : (t.textContent = e)); 3413 | } 3414 | getTitle() { 3415 | let t = this._element.getAttribute("data-bs-original-title"); 3416 | return ( 3417 | t || 3418 | (t = 3419 | "function" == typeof this._config.title 3420 | ? this._config.title.call(this._element) 3421 | : this._config.title), 3422 | t 3423 | ); 3424 | } 3425 | updateAttachment(t) { 3426 | return "right" === t ? "end" : "left" === t ? "start" : t; 3427 | } 3428 | _initializeOnDelegatedTarget(t, e) { 3429 | const i = this.constructor.DATA_KEY; 3430 | return ( 3431 | (e = e || R.get(t.delegateTarget, i)) || 3432 | ((e = new this.constructor( 3433 | t.delegateTarget, 3434 | this._getDelegateConfig() 3435 | )), 3436 | R.set(t.delegateTarget, i, e)), 3437 | e 3438 | ); 3439 | } 3440 | _getOffset() { 3441 | const { offset: t } = this._config; 3442 | return "string" == typeof t 3443 | ? t.split(",").map((t) => Number.parseInt(t, 10)) 3444 | : "function" == typeof t 3445 | ? (e) => t(e, this._element) 3446 | : t; 3447 | } 3448 | _getPopperConfig(t) { 3449 | const e = { 3450 | placement: t, 3451 | modifiers: [ 3452 | { 3453 | name: "flip", 3454 | options: { fallbackPlacements: this._config.fallbackPlacements }, 3455 | }, 3456 | { name: "offset", options: { offset: this._getOffset() } }, 3457 | { 3458 | name: "preventOverflow", 3459 | options: { boundary: this._config.boundary }, 3460 | }, 3461 | { 3462 | name: "arrow", 3463 | options: { element: `.${this.constructor.NAME}-arrow` }, 3464 | }, 3465 | { 3466 | name: "onChange", 3467 | enabled: !0, 3468 | phase: "afterWrite", 3469 | fn: (t) => this._handlePopperPlacementChange(t), 3470 | }, 3471 | ], 3472 | onFirstUpdate: (t) => { 3473 | t.options.placement !== t.placement && 3474 | this._handlePopperPlacementChange(t); 3475 | }, 3476 | }; 3477 | return { 3478 | ...e, 3479 | ...("function" == typeof this._config.popperConfig 3480 | ? this._config.popperConfig(e) 3481 | : this._config.popperConfig), 3482 | }; 3483 | } 3484 | _addAttachmentClass(t) { 3485 | this.getTipElement().classList.add( 3486 | "bs-tooltip-" + this.updateAttachment(t) 3487 | ); 3488 | } 3489 | _getAttachment(t) { 3490 | return ze[t.toUpperCase()]; 3491 | } 3492 | _setListeners() { 3493 | this._config.trigger.split(" ").forEach((t) => { 3494 | if ("click" === t) 3495 | P.on( 3496 | this._element, 3497 | this.constructor.Event.CLICK, 3498 | this._config.selector, 3499 | (t) => this.toggle(t) 3500 | ); 3501 | else if ("manual" !== t) { 3502 | const e = 3503 | "hover" === t 3504 | ? this.constructor.Event.MOUSEENTER 3505 | : this.constructor.Event.FOCUSIN, 3506 | i = 3507 | "hover" === t 3508 | ? this.constructor.Event.MOUSELEAVE 3509 | : this.constructor.Event.FOCUSOUT; 3510 | P.on(this._element, e, this._config.selector, (t) => this._enter(t)), 3511 | P.on(this._element, i, this._config.selector, (t) => 3512 | this._leave(t) 3513 | ); 3514 | } 3515 | }), 3516 | (this._hideModalHandler = () => { 3517 | this._element && this.hide(); 3518 | }), 3519 | P.on( 3520 | this._element.closest(".modal"), 3521 | "hide.bs.modal", 3522 | this._hideModalHandler 3523 | ), 3524 | this._config.selector 3525 | ? (this._config = { 3526 | ...this._config, 3527 | trigger: "manual", 3528 | selector: "", 3529 | }) 3530 | : this._fixTitle(); 3531 | } 3532 | _fixTitle() { 3533 | const t = this._element.getAttribute("title"), 3534 | e = typeof this._element.getAttribute("data-bs-original-title"); 3535 | (t || "string" !== e) && 3536 | (this._element.setAttribute("data-bs-original-title", t || ""), 3537 | !t || 3538 | this._element.getAttribute("aria-label") || 3539 | this._element.textContent || 3540 | this._element.setAttribute("aria-label", t), 3541 | this._element.setAttribute("title", "")); 3542 | } 3543 | _enter(t, e) { 3544 | (e = this._initializeOnDelegatedTarget(t, e)), 3545 | t && (e._activeTrigger["focusin" === t.type ? "focus" : "hover"] = !0), 3546 | e.getTipElement().classList.contains("show") || "show" === e._hoverState 3547 | ? (e._hoverState = "show") 3548 | : (clearTimeout(e._timeout), 3549 | (e._hoverState = "show"), 3550 | e._config.delay && e._config.delay.show 3551 | ? (e._timeout = setTimeout(() => { 3552 | "show" === e._hoverState && e.show(); 3553 | }, e._config.delay.show)) 3554 | : e.show()); 3555 | } 3556 | _leave(t, e) { 3557 | (e = this._initializeOnDelegatedTarget(t, e)), 3558 | t && 3559 | (e._activeTrigger["focusout" === t.type ? "focus" : "hover"] = 3560 | e._element.contains(t.relatedTarget)), 3561 | e._isWithActiveTrigger() || 3562 | (clearTimeout(e._timeout), 3563 | (e._hoverState = "out"), 3564 | e._config.delay && e._config.delay.hide 3565 | ? (e._timeout = setTimeout(() => { 3566 | "out" === e._hoverState && e.hide(); 3567 | }, e._config.delay.hide)) 3568 | : e.hide()); 3569 | } 3570 | _isWithActiveTrigger() { 3571 | for (const t in this._activeTrigger) 3572 | if (this._activeTrigger[t]) return !0; 3573 | return !1; 3574 | } 3575 | _getConfig(t) { 3576 | const e = U.getDataAttributes(this._element); 3577 | return ( 3578 | Object.keys(e).forEach((t) => { 3579 | We.has(t) && delete e[t]; 3580 | }), 3581 | ((t = { 3582 | ...this.constructor.Default, 3583 | ...e, 3584 | ...("object" == typeof t && t ? t : {}), 3585 | }).container = !1 === t.container ? document.body : a(t.container)), 3586 | "number" == typeof t.delay && 3587 | (t.delay = { show: t.delay, hide: t.delay }), 3588 | "number" == typeof t.title && (t.title = t.title.toString()), 3589 | "number" == typeof t.content && (t.content = t.content.toString()), 3590 | l("tooltip", t, this.constructor.DefaultType), 3591 | t.sanitize && (t.template = Re(t.template, t.allowList, t.sanitizeFn)), 3592 | t 3593 | ); 3594 | } 3595 | _getDelegateConfig() { 3596 | const t = {}; 3597 | if (this._config) 3598 | for (const e in this._config) 3599 | this.constructor.Default[e] !== this._config[e] && 3600 | (t[e] = this._config[e]); 3601 | return t; 3602 | } 3603 | _cleanTipClass() { 3604 | const t = this.getTipElement(), 3605 | e = t.getAttribute("class").match(Be); 3606 | null !== e && 3607 | e.length > 0 && 3608 | e.map((t) => t.trim()).forEach((e) => t.classList.remove(e)); 3609 | } 3610 | _handlePopperPlacementChange(t) { 3611 | const { state: e } = t; 3612 | e && 3613 | ((this.tip = e.elements.popper), 3614 | this._cleanTipClass(), 3615 | this._addAttachmentClass(this._getAttachment(e.placement))); 3616 | } 3617 | static jQueryInterface(t) { 3618 | return this.each(function () { 3619 | const e = Fe.getOrCreateInstance(this, t); 3620 | if ("string" == typeof t) { 3621 | if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); 3622 | e[t](); 3623 | } 3624 | }); 3625 | } 3626 | } 3627 | _(Fe); 3628 | const Ve = new RegExp("(^|\\s)bs-popover\\S+", "g"), 3629 | Ke = { 3630 | ...Fe.Default, 3631 | placement: "right", 3632 | offset: [0, 8], 3633 | trigger: "click", 3634 | content: "", 3635 | template: 3636 | '', 3637 | }, 3638 | Xe = { ...Fe.DefaultType, content: "(string|element|function)" }, 3639 | Ye = { 3640 | HIDE: "hide.bs.popover", 3641 | HIDDEN: "hidden.bs.popover", 3642 | SHOW: "show.bs.popover", 3643 | SHOWN: "shown.bs.popover", 3644 | INSERTED: "inserted.bs.popover", 3645 | CLICK: "click.bs.popover", 3646 | FOCUSIN: "focusin.bs.popover", 3647 | FOCUSOUT: "focusout.bs.popover", 3648 | MOUSEENTER: "mouseenter.bs.popover", 3649 | MOUSELEAVE: "mouseleave.bs.popover", 3650 | }; 3651 | class Qe extends Fe { 3652 | static get Default() { 3653 | return Ke; 3654 | } 3655 | static get NAME() { 3656 | return "popover"; 3657 | } 3658 | static get Event() { 3659 | return Ye; 3660 | } 3661 | static get DefaultType() { 3662 | return Xe; 3663 | } 3664 | isWithContent() { 3665 | return this.getTitle() || this._getContent(); 3666 | } 3667 | getTipElement() { 3668 | return ( 3669 | this.tip || 3670 | ((this.tip = super.getTipElement()), 3671 | this.getTitle() || t.findOne(".popover-header", this.tip).remove(), 3672 | this._getContent() || t.findOne(".popover-body", this.tip).remove()), 3673 | this.tip 3674 | ); 3675 | } 3676 | setContent() { 3677 | const e = this.getTipElement(); 3678 | this.setElementContent(t.findOne(".popover-header", e), this.getTitle()); 3679 | let i = this._getContent(); 3680 | "function" == typeof i && (i = i.call(this._element)), 3681 | this.setElementContent(t.findOne(".popover-body", e), i), 3682 | e.classList.remove("fade", "show"); 3683 | } 3684 | _addAttachmentClass(t) { 3685 | this.getTipElement().classList.add( 3686 | "bs-popover-" + this.updateAttachment(t) 3687 | ); 3688 | } 3689 | _getContent() { 3690 | return ( 3691 | this._element.getAttribute("data-bs-content") || this._config.content 3692 | ); 3693 | } 3694 | _cleanTipClass() { 3695 | const t = this.getTipElement(), 3696 | e = t.getAttribute("class").match(Ve); 3697 | null !== e && 3698 | e.length > 0 && 3699 | e.map((t) => t.trim()).forEach((e) => t.classList.remove(e)); 3700 | } 3701 | static jQueryInterface(t) { 3702 | return this.each(function () { 3703 | const e = Qe.getOrCreateInstance(this, t); 3704 | if ("string" == typeof t) { 3705 | if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); 3706 | e[t](); 3707 | } 3708 | }); 3709 | } 3710 | } 3711 | _(Qe); 3712 | const Ge = { offset: 10, method: "auto", target: "" }, 3713 | Ze = { offset: "number", method: "string", target: "(string|element)" }; 3714 | class Je extends B { 3715 | constructor(t, e) { 3716 | super(t), 3717 | (this._scrollElement = 3718 | "BODY" === this._element.tagName ? window : this._element), 3719 | (this._config = this._getConfig(e)), 3720 | (this._selector = `${this._config.target} .nav-link, ${this._config.target} .list-group-item, ${this._config.target} .dropdown-item`), 3721 | (this._offsets = []), 3722 | (this._targets = []), 3723 | (this._activeTarget = null), 3724 | (this._scrollHeight = 0), 3725 | P.on(this._scrollElement, "scroll.bs.scrollspy", () => this._process()), 3726 | this.refresh(), 3727 | this._process(); 3728 | } 3729 | static get Default() { 3730 | return Ge; 3731 | } 3732 | static get NAME() { 3733 | return "scrollspy"; 3734 | } 3735 | refresh() { 3736 | const e = 3737 | this._scrollElement === this._scrollElement.window 3738 | ? "offset" 3739 | : "position", 3740 | i = "auto" === this._config.method ? e : this._config.method, 3741 | s = "position" === i ? this._getScrollTop() : 0; 3742 | (this._offsets = []), 3743 | (this._targets = []), 3744 | (this._scrollHeight = this._getScrollHeight()), 3745 | t 3746 | .find(this._selector) 3747 | .map((e) => { 3748 | const o = n(e), 3749 | r = o ? t.findOne(o) : null; 3750 | if (r) { 3751 | const t = r.getBoundingClientRect(); 3752 | if (t.width || t.height) return [U[i](r).top + s, o]; 3753 | } 3754 | return null; 3755 | }) 3756 | .filter((t) => t) 3757 | .sort((t, e) => t[0] - e[0]) 3758 | .forEach((t) => { 3759 | this._offsets.push(t[0]), this._targets.push(t[1]); 3760 | }); 3761 | } 3762 | dispose() { 3763 | P.off(this._scrollElement, ".bs.scrollspy"), super.dispose(); 3764 | } 3765 | _getConfig(t) { 3766 | if ( 3767 | "string" != 3768 | typeof (t = { 3769 | ...Ge, 3770 | ...U.getDataAttributes(this._element), 3771 | ...("object" == typeof t && t ? t : {}), 3772 | }).target && 3773 | r(t.target) 3774 | ) { 3775 | let { id: i } = t.target; 3776 | i || ((i = e("scrollspy")), (t.target.id = i)), (t.target = "#" + i); 3777 | } 3778 | return l("scrollspy", t, Ze), t; 3779 | } 3780 | _getScrollTop() { 3781 | return this._scrollElement === window 3782 | ? this._scrollElement.pageYOffset 3783 | : this._scrollElement.scrollTop; 3784 | } 3785 | _getScrollHeight() { 3786 | return ( 3787 | this._scrollElement.scrollHeight || 3788 | Math.max( 3789 | document.body.scrollHeight, 3790 | document.documentElement.scrollHeight 3791 | ) 3792 | ); 3793 | } 3794 | _getOffsetHeight() { 3795 | return this._scrollElement === window 3796 | ? window.innerHeight 3797 | : this._scrollElement.getBoundingClientRect().height; 3798 | } 3799 | _process() { 3800 | const t = this._getScrollTop() + this._config.offset, 3801 | e = this._getScrollHeight(), 3802 | i = this._config.offset + e - this._getOffsetHeight(); 3803 | if ((this._scrollHeight !== e && this.refresh(), t >= i)) { 3804 | const t = this._targets[this._targets.length - 1]; 3805 | this._activeTarget !== t && this._activate(t); 3806 | } else { 3807 | if (this._activeTarget && t < this._offsets[0] && this._offsets[0] > 0) 3808 | return (this._activeTarget = null), void this._clear(); 3809 | for (let e = this._offsets.length; e--; ) 3810 | this._activeTarget !== this._targets[e] && 3811 | t >= this._offsets[e] && 3812 | (void 0 === this._offsets[e + 1] || t < this._offsets[e + 1]) && 3813 | this._activate(this._targets[e]); 3814 | } 3815 | } 3816 | _activate(e) { 3817 | (this._activeTarget = e), this._clear(); 3818 | const i = this._selector 3819 | .split(",") 3820 | .map((t) => `${t}[data-bs-target="${e}"],${t}[href="${e}"]`), 3821 | n = t.findOne(i.join(",")); 3822 | n.classList.contains("dropdown-item") 3823 | ? (t 3824 | .findOne(".dropdown-toggle", n.closest(".dropdown")) 3825 | .classList.add("active"), 3826 | n.classList.add("active")) 3827 | : (n.classList.add("active"), 3828 | t.parents(n, ".nav, .list-group").forEach((e) => { 3829 | t 3830 | .prev(e, ".nav-link, .list-group-item") 3831 | .forEach((t) => t.classList.add("active")), 3832 | t.prev(e, ".nav-item").forEach((e) => { 3833 | t.children(e, ".nav-link").forEach((t) => 3834 | t.classList.add("active") 3835 | ); 3836 | }); 3837 | })), 3838 | P.trigger(this._scrollElement, "activate.bs.scrollspy", { 3839 | relatedTarget: e, 3840 | }); 3841 | } 3842 | _clear() { 3843 | t.find(this._selector) 3844 | .filter((t) => t.classList.contains("active")) 3845 | .forEach((t) => t.classList.remove("active")); 3846 | } 3847 | static jQueryInterface(t) { 3848 | return this.each(function () { 3849 | const e = Je.getOrCreateInstance(this, t); 3850 | if ("string" == typeof t) { 3851 | if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); 3852 | e[t](); 3853 | } 3854 | }); 3855 | } 3856 | } 3857 | P.on(window, "load.bs.scrollspy.data-api", () => { 3858 | t.find('[data-bs-spy="scroll"]').forEach((t) => new Je(t)); 3859 | }), 3860 | _(Je); 3861 | class ti extends B { 3862 | static get NAME() { 3863 | return "tab"; 3864 | } 3865 | show() { 3866 | if ( 3867 | this._element.parentNode && 3868 | this._element.parentNode.nodeType === Node.ELEMENT_NODE && 3869 | this._element.classList.contains("active") 3870 | ) 3871 | return; 3872 | let e; 3873 | const i = s(this._element), 3874 | n = this._element.closest(".nav, .list-group"); 3875 | if (n) { 3876 | const i = 3877 | "UL" === n.nodeName || "OL" === n.nodeName 3878 | ? ":scope > li > .active" 3879 | : ".active"; 3880 | (e = t.find(i, n)), (e = e[e.length - 1]); 3881 | } 3882 | const o = e 3883 | ? P.trigger(e, "hide.bs.tab", { relatedTarget: this._element }) 3884 | : null; 3885 | if ( 3886 | P.trigger(this._element, "show.bs.tab", { relatedTarget: e }) 3887 | .defaultPrevented || 3888 | (null !== o && o.defaultPrevented) 3889 | ) 3890 | return; 3891 | this._activate(this._element, n); 3892 | const r = () => { 3893 | P.trigger(e, "hidden.bs.tab", { relatedTarget: this._element }), 3894 | P.trigger(this._element, "shown.bs.tab", { relatedTarget: e }); 3895 | }; 3896 | i ? this._activate(i, i.parentNode, r) : r(); 3897 | } 3898 | _activate(e, i, n) { 3899 | const s = ( 3900 | !i || ("UL" !== i.nodeName && "OL" !== i.nodeName) 3901 | ? t.children(i, ".active") 3902 | : t.find(":scope > li > .active", i) 3903 | )[0], 3904 | o = n && s && s.classList.contains("fade"), 3905 | r = () => this._transitionComplete(e, s, n); 3906 | s && o 3907 | ? (s.classList.remove("show"), this._queueCallback(r, e, !0)) 3908 | : r(); 3909 | } 3910 | _transitionComplete(e, i, n) { 3911 | if (i) { 3912 | i.classList.remove("active"); 3913 | const e = t.findOne(":scope > .dropdown-menu .active", i.parentNode); 3914 | e && e.classList.remove("active"), 3915 | "tab" === i.getAttribute("role") && 3916 | i.setAttribute("aria-selected", !1); 3917 | } 3918 | e.classList.add("active"), 3919 | "tab" === e.getAttribute("role") && e.setAttribute("aria-selected", !0), 3920 | f(e), 3921 | e.classList.contains("fade") && e.classList.add("show"); 3922 | let s = e.parentNode; 3923 | if ( 3924 | (s && "LI" === s.nodeName && (s = s.parentNode), 3925 | s && s.classList.contains("dropdown-menu")) 3926 | ) { 3927 | const i = e.closest(".dropdown"); 3928 | i && 3929 | t 3930 | .find(".dropdown-toggle", i) 3931 | .forEach((t) => t.classList.add("active")), 3932 | e.setAttribute("aria-expanded", !0); 3933 | } 3934 | n && n(); 3935 | } 3936 | static jQueryInterface(t) { 3937 | return this.each(function () { 3938 | const e = ti.getOrCreateInstance(this); 3939 | if ("string" == typeof t) { 3940 | if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); 3941 | e[t](); 3942 | } 3943 | }); 3944 | } 3945 | } 3946 | P.on( 3947 | document, 3948 | "click.bs.tab.data-api", 3949 | '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]', 3950 | function (t) { 3951 | ["A", "AREA"].includes(this.tagName) && t.preventDefault(), 3952 | h(this) || ti.getOrCreateInstance(this).show(); 3953 | } 3954 | ), 3955 | _(ti); 3956 | const ei = { animation: "boolean", autohide: "boolean", delay: "number" }, 3957 | ii = { animation: !0, autohide: !0, delay: 5e3 }; 3958 | class ni extends B { 3959 | constructor(t, e) { 3960 | super(t), 3961 | (this._config = this._getConfig(e)), 3962 | (this._timeout = null), 3963 | (this._hasMouseInteraction = !1), 3964 | (this._hasKeyboardInteraction = !1), 3965 | this._setListeners(); 3966 | } 3967 | static get DefaultType() { 3968 | return ei; 3969 | } 3970 | static get Default() { 3971 | return ii; 3972 | } 3973 | static get NAME() { 3974 | return "toast"; 3975 | } 3976 | show() { 3977 | P.trigger(this._element, "show.bs.toast").defaultPrevented || 3978 | (this._clearTimeout(), 3979 | this._config.animation && this._element.classList.add("fade"), 3980 | this._element.classList.remove("hide"), 3981 | f(this._element), 3982 | this._element.classList.add("showing"), 3983 | this._queueCallback( 3984 | () => { 3985 | this._element.classList.remove("showing"), 3986 | this._element.classList.add("show"), 3987 | P.trigger(this._element, "shown.bs.toast"), 3988 | this._maybeScheduleHide(); 3989 | }, 3990 | this._element, 3991 | this._config.animation 3992 | )); 3993 | } 3994 | hide() { 3995 | this._element.classList.contains("show") && 3996 | (P.trigger(this._element, "hide.bs.toast").defaultPrevented || 3997 | (this._element.classList.remove("show"), 3998 | this._queueCallback( 3999 | () => { 4000 | this._element.classList.add("hide"), 4001 | P.trigger(this._element, "hidden.bs.toast"); 4002 | }, 4003 | this._element, 4004 | this._config.animation 4005 | ))); 4006 | } 4007 | dispose() { 4008 | this._clearTimeout(), 4009 | this._element.classList.contains("show") && 4010 | this._element.classList.remove("show"), 4011 | super.dispose(); 4012 | } 4013 | _getConfig(t) { 4014 | return ( 4015 | (t = { 4016 | ...ii, 4017 | ...U.getDataAttributes(this._element), 4018 | ...("object" == typeof t && t ? t : {}), 4019 | }), 4020 | l("toast", t, this.constructor.DefaultType), 4021 | t 4022 | ); 4023 | } 4024 | _maybeScheduleHide() { 4025 | this._config.autohide && 4026 | (this._hasMouseInteraction || 4027 | this._hasKeyboardInteraction || 4028 | (this._timeout = setTimeout(() => { 4029 | this.hide(); 4030 | }, this._config.delay))); 4031 | } 4032 | _onInteraction(t, e) { 4033 | switch (t.type) { 4034 | case "mouseover": 4035 | case "mouseout": 4036 | this._hasMouseInteraction = e; 4037 | break; 4038 | case "focusin": 4039 | case "focusout": 4040 | this._hasKeyboardInteraction = e; 4041 | } 4042 | if (e) return void this._clearTimeout(); 4043 | const i = t.relatedTarget; 4044 | this._element === i || 4045 | this._element.contains(i) || 4046 | this._maybeScheduleHide(); 4047 | } 4048 | _setListeners() { 4049 | P.on( 4050 | this._element, 4051 | "click.dismiss.bs.toast", 4052 | '[data-bs-dismiss="toast"]', 4053 | () => this.hide() 4054 | ), 4055 | P.on(this._element, "mouseover.bs.toast", (t) => 4056 | this._onInteraction(t, !0) 4057 | ), 4058 | P.on(this._element, "mouseout.bs.toast", (t) => 4059 | this._onInteraction(t, !1) 4060 | ), 4061 | P.on(this._element, "focusin.bs.toast", (t) => 4062 | this._onInteraction(t, !0) 4063 | ), 4064 | P.on(this._element, "focusout.bs.toast", (t) => 4065 | this._onInteraction(t, !1) 4066 | ); 4067 | } 4068 | _clearTimeout() { 4069 | clearTimeout(this._timeout), (this._timeout = null); 4070 | } 4071 | static jQueryInterface(t) { 4072 | return this.each(function () { 4073 | const e = ni.getOrCreateInstance(this, t); 4074 | if ("string" == typeof t) { 4075 | if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); 4076 | e[t](this); 4077 | } 4078 | }); 4079 | } 4080 | } 4081 | return ( 4082 | _(ni), 4083 | { 4084 | Alert: W, 4085 | Button: q, 4086 | Carousel: Z, 4087 | Collapse: et, 4088 | Dropdown: Ae, 4089 | Modal: De, 4090 | Offcanvas: Ne, 4091 | Popover: Qe, 4092 | ScrollSpy: Je, 4093 | Tab: ti, 4094 | Toast: ni, 4095 | Tooltip: Fe, 4096 | } 4097 | ); 4098 | }); 4099 | //# sourceMappingURL=bootstrap.bundle.min.js.map 4100 | -------------------------------------------------------------------------------- /pharmacyproject/templates/About.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} About {% endblock title %} 3 | {% block body %} 4 | 5 |

About

6 | 7 | 8 | 9 | 10 | {% endblock body %} 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /pharmacyproject/templates/Home.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} Home {% endblock title %} 3 | {% block body %} 4 | {% load static %} 5 | 6 | 7 | 45 | 46 |
47 | 48 |

Our Medicines

49 |
50 | 51 |
52 | 53 | 54 | 55 | 56 |
57 | 58 | {% for i in mymed %} 59 |
60 |
61 | ... 62 |
63 |
{{i.medicine_name}}
64 |

Price : {{i.medicine_price}} Rs

65 |

{{i.medicine_descripton}}

66 | 67 |

Expiry Date : {{i.medicine_exp}}

68 | Order Now 69 |
70 |
71 | 72 |
73 | {% endfor %} 74 |
75 | 76 | 77 | 78 | 79 | 80 | 81 |
82 | 83 | 84 |
85 |
86 | 87 |

Our Products

88 |
89 |
90 | 91 | 92 | 93 | 94 |
95 | 96 | {% for i in myprod %} 97 |
98 |
99 | ... 100 |
101 |
{{i.prod_name}}
102 |

Price : {{i.prod_price}} Rs

103 |

{{i.prod_descripton}}

104 | 105 |

Expiry Date : {{i.prod_exp}}

106 | Order Now 107 |
108 |
109 | 110 |
111 | {% endfor %} 112 |
113 | 114 | 115 | 116 | 117 | 118 | 119 |
120 | 121 | 122 | 123 | 124 |
125 | 126 | 127 | {% endblock body %} 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /pharmacyproject/templates/base.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% comment %} {% endcomment %} 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {% block title %} 19 | 20 | {% endblock title %} 21 | 22 | 23 | 24 | 25 | 96 | 97 | 98 | 99 | {% block body %} 100 | 101 | 102 | 103 | 104 | {% endblock body %} 105 | 106 |

107 | 108 |
109 |
110 |
111 | 112 | 113 | PHMS 114 | 115 | 121 |
122 |
123 |
Links
124 | 132 |
133 |
134 |
Guides
135 | 141 |
142 |
143 |
Projects
144 | 151 |
152 |
153 |
Community
154 | 162 |
163 |
164 |
165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | {% comment %} {% endcomment %} 176 | 177 | 178 | 182 | 183 | 184 | -------------------------------------------------------------------------------- /pharmacyproject/templates/contact.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} Contact {% endblock title %} 3 | {% block body %} 4 |

CONTACT US

5 | 6 |
7 | 8 |
9 |
10 | 11 |
12 | 13 | {% include "messages.html" %} 14 | 15 | 16 | 17 | 18 | 19 |
{% csrf_token %} 20 | 21 | 22 | 23 | 24 |
25 | 26 |
27 | 28 | 29 | 30 |
31 | 32 |
33 | 34 | 35 | 36 | 37 | 38 |
39 | 40 |
41 | 42 | 43 | 44 |
45 | 46 |
47 | 48 | 49 | 50 | 51 | 52 |
53 | 54 | 55 |
56 | 57 | 58 |
59 | 60 |
61 | 62 | 63 |
64 |
65 |
66 |
67 |
68 | 69 | {% endblock body %} -------------------------------------------------------------------------------- /pharmacyproject/templates/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 15 | 16 | Login 17 | 18 | 19 |
20 |
21 |
22 | 23 |
24 |
25 |
Login
26 | {% include "messages.html" %} 27 | 28 | 29 |
30 | 31 | 32 |
{% csrf_token %} 33 | 34 | 35 | 36 | 37 |
38 | 39 |
40 | 41 | 42 | 43 | 44 | 45 |
46 | 47 |
48 | 49 | 50 | 51 | 52 | 53 |
54 | 55 | 56 |
57 |
58 | New User? Signup 59 |
60 | Back to Home 61 | 62 |
63 |
64 |
65 |
66 | 67 | 68 |
69 |
70 |
71 | 72 | 73 | 74 | 75 | 80 | 81 | 82 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /pharmacyproject/templates/medicines.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} Medicines {% endblock title %} 3 | {% block body %} 4 | 5 |
6 | 7 |

Order Medicines

8 |
9 | 10 | 11 |
12 | 13 | {% for i in mymed %} 14 |
15 |
16 | ... 17 |
18 |
{{i.medicine_name}}
19 |

Price : {{i.medicine_price}} Rs

20 |

{{i.medicine_descripton}}

21 | 22 |

Expiry Date : {{i.medicine_exp}}

23 | Order Now 24 |
25 |
26 | 27 |
28 | {% endfor %} 29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 | 38 | 39 | 40 | 41 | {% endblock body %} 42 | 43 | -------------------------------------------------------------------------------- /pharmacyproject/templates/messages.html: -------------------------------------------------------------------------------- 1 | {% for message in messages %} 2 | 3 | 15 | 16 | {% endfor %} 17 | -------------------------------------------------------------------------------- /pharmacyproject/templates/orders.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} 3 | Order-Products/Medicines 4 | {% endblock title %} 5 | {% block body %} 6 | 7 | 8 |
9 | 10 |
11 | 12 |
13 |

10% Discount

14 | {% include "messages.html" %} 15 |
16 |
17 |
18 | {% csrf_token %} 19 | 20 |
21 | 22 | 31 |
32 |
33 | 34 | 42 |
43 | 44 |
45 | 46 | 57 |
58 | 59 |
60 | 61 | 70 |
71 | 72 |
73 | 74 | 83 |
84 | 85 |
86 | 87 | 95 |
96 | 97 |
98 | 99 | 100 |
101 |
102 | 103 |
104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 |
112 |
113 |
114 | 115 |
116 | 117 |
118 |
119 | 120 |
121 |

Orders

122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | {% for item in items %} 138 | 139 | 140 | 141 | 142 | 143 | {% if item.delivery %} 144 | 145 | 146 | {% else %} 147 | 148 | {% endif %} 149 | 150 | 151 | {% if item.delivery %} 152 | 153 | {% else %} 154 | 155 | {% endif %} 156 | 157 | 158 | 159 | 160 | {% endfor %} 161 | 162 | 163 |
Order IDNameProductsPriceCancelStatus
{{item.id}}{{item.name}}{{item.items}}{{item.price}} {{item.delivery}} Delivered Not Delivered
164 | 165 | 166 | 167 | 168 | 169 | 170 |
171 |
172 |
173 | 174 | {% endblock body %} 175 | -------------------------------------------------------------------------------- /pharmacyproject/templates/products.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} Products {% endblock title %} 3 | {% block body %} 4 | 5 |
6 | 7 |

Order Products

8 |
9 | 10 | 11 |
12 | 13 | {% for i in myprod %} 14 |
15 |
16 | ... 17 |
18 |
{{i.prod_name}}
19 |

Price : {{i.prod_price}} Rs

20 |

{{i.prod_descripton}}

21 | 22 |

Expiry Date : {{i.prod_exp}}

23 | Order Now 24 |
25 |
26 | 27 |
28 | {% endfor %} 29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 | 38 | 39 | 40 | 41 | {% endblock body %} 42 | 43 | -------------------------------------------------------------------------------- /pharmacyproject/templates/search.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} About {% endblock title %} 3 | {% block body %} 4 |
5 | 6 |

Your Search results......

7 | 8 |
9 | {% if allItems|length < 1%} 10 | 11 |

Your Search did not match Try Again

12 | 15 | {% endif %} 16 | 17 |
18 | 19 | 20 |
21 | 22 |
23 | 24 | {% for i in Med %} 25 |
26 |
27 | ... 28 |
29 |
{{i.medicine_name}}
30 |

Price : {{i.medicine_price}} Rs

31 |

{{i.medicine_descripton}}

32 | 33 |

Expiry Date : {{i.medicine_exp}}

34 | Order Now 35 |
36 |
37 | 38 |
39 | {% endfor %} 40 |
41 | 42 |
43 | 44 | {% for i in Prod %} 45 |
46 |
47 | ... 48 |
49 |
{{i.prod_name}}
50 |

Price : {{i.prod_price}} Rs

51 |

{{i.prod_descripton}}

52 | 53 |

Expiry Date : {{i.prod_exp}}

54 | Order Now 55 |
56 |
57 | 58 |
59 | {% endfor %} 60 |
61 | 62 | 63 | 64 | 65 | 66 |
67 | 68 | 69 | {% endblock body %} 70 | -------------------------------------------------------------------------------- /pharmacyproject/templates/signup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 15 | 16 | Signup 17 | 18 | 19 |
20 |
21 |
22 | 23 |
24 |
25 |
SignUp
26 | 27 |
28 | {% include "messages.html" %} 29 | 30 |
31 | {% csrf_token %} 32 | 33 | 34 | 35 |
36 | 44 |
45 | 46 | 47 | 48 |
49 | 57 |
58 | 59 | 60 | 61 |
62 | 70 |
71 | 72 | 73 |
74 | 82 |
83 | 84 | 85 | 86 |
87 | 95 |
96 | 97 | 98 | 99 |
100 | 108 |
109 | 110 |
111 | 112 |
113 | 114 |
115 | Already User? Login 116 |
117 |
118 |
119 | Back to Home 120 |
121 |
122 | 123 |
124 |
125 |
126 | 127 | 128 | 129 | 130 | 135 | 136 | 137 | 141 | 142 | 143 | --------------------------------------------------------------------------------