diff --git a/afb/afb/__init__.py b/afb/afb/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/afb/afb/asgi.py b/afb/afb/asgi.py deleted file mode 100644 index 78517635..00000000 --- a/afb/afb/asgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ASGI config for afb project. - -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ -""" - -import os - -from django.core.asgi import get_asgi_application - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "afb.settings") - -application = get_asgi_application() diff --git a/afb/afb/settings.py b/afb/afb/settings.py deleted file mode 100644 index 64cfda96..00000000 --- a/afb/afb/settings.py +++ /dev/null @@ -1,171 +0,0 @@ -""" -Django settings for afb project. - -Generated by 'django-admin startproject' using Django 4.2.4. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/4.2/ref/settings/ -""" - -from pathlib import Path - -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = Path(__file__).resolve().parent.parent - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = "django-insecure-k3nma!u)7oz(lt346n-=rx=rt%u_^j8-rdz3p(y3o$ot0%soqh" - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - - -# Application definition -# - -INSTALLED_APPS = [ - "unfold", # https://github.com/unfoldadmin/django-unfold - "django.contrib.admin", - "django.contrib.auth", - "django.contrib.contenttypes", - "django.contrib.sessions", - "django.contrib.messages", - "django.contrib.staticfiles", - "phonenumber_field", - "crispy_forms", - "tailwind", - "crispy_tailwind", - "theme", # python manage.py tailwind init - "afbcore", - "django_browser_reload", -] - -# https://github.com/django-crispy-forms/crispy-tailwind -CRISPY_ALLOWED_TEMPLATE_PACKS = "tailwind" - -CRISPY_TEMPLATE_PACK = "tailwind" - - -PHONENUMBER_DB_FORMAT = "INTERNATIONAL" -PHONENUMBER_DEFAULT_FORMAT = "E164" -PHONENUMBER_DEFAULT_REGION = "CA" - - -MIDDLEWARE = [ - "django.middleware.security.SecurityMiddleware", - "django.contrib.sessions.middleware.SessionMiddleware", - "django.middleware.common.CommonMiddleware", - "django.middleware.csrf.CsrfViewMiddleware", - "django.contrib.auth.middleware.AuthenticationMiddleware", - "django.contrib.messages.middleware.MessageMiddleware", - "django.middleware.clickjacking.XFrameOptionsMiddleware", - "django_browser_reload.middleware.BrowserReloadMiddleware", -] - -ROOT_URLCONF = "afb.urls" - -# Django-Tailwind -# https://django-tailwind.readthedocs.io/en/latest/installation.html#configuration - -TAILWIND_APP_NAME = "theme" - -AUTH_USER_MODEL = "afbcore.User" - -INTERNAL_IPS = [ - # Add local IP addresses here for tailwind to work, then run: - # * (Dev) `python manage.py tailwind install` - # * (Production) `python manage.py tailwind build` - "127.0.0.1", -] - -# Templates -# https://docs.djangoproject.com/en/4.2/ref/settings/#templates - -TEMPLATES = [ - { - "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": [], - "APP_DIRS": True, - "OPTIONS": { - "context_processors": [ - "django.template.context_processors.debug", - "django.template.context_processors.request", - "django.contrib.auth.context_processors.auth", - "django.contrib.messages.context_processors.messages", - ], - }, - }, -] - -WSGI_APPLICATION = "afb.wsgi.application" - - -# Database -# https://docs.djangoproject.com/en/4.2/ref/settings/#databases - -DATABASES = { - "default": { - "ENGINE": "django.db.backends.sqlite3", - "NAME": BASE_DIR / "db.sqlite3", - } -} - - -# Password validation -# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", - }, - { - "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", - }, - { - "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", - }, - { - "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/4.2/topics/i18n/ - -LANGUAGE_CODE = "en-us" - -TIME_ZONE = "UTC" - -USE_I18N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/4.2/howto/static-files/ - -# For prod: -# https://docs.djangoproject.com/en/4.2/howto/static-files/deployment/#staticfiles-from-cdn -# https://docs.djangoproject.com/en/4.2/ref/settings/#std-setting-STORAGES -STATIC_URL = "static/" - -STATICFILES_DIRS = [ - # BASE_DIR / "static", - BASE_DIR / "theme" / "static", - BASE_DIR / "afbcore" / "public", -] - - -# Default primary key field type -# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field - -DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" diff --git a/afb/afb/urls.py b/afb/afb/urls.py deleted file mode 100644 index bb973e02..00000000 --- a/afb/afb/urls.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -URL configuration for afb project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/4.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.urls import include, path - -from afbcore.views import AboutView, ClientSignupFormView, DashboardView, MyLoginView -from afbcore.views import ClientRequestView - -urlpatterns = [ - path("admin/", admin.site.urls), - path("dashboard", DashboardView.as_view(), name="dashboard"), - path("", DashboardView.as_view()), - path("join/", ClientSignupFormView.as_view()), - # Part of django-tailwind - # See https://django-tailwind.readthedocs.io/en/latest/installation.html#configuration - path("__reload__/", include("django_browser_reload.urls")), - path("request/", ClientRequestView.as_view(), name="create_request"), - path("login/", MyLoginView.as_view(), name="login"), - path("about/", AboutView.as_view()), -] diff --git a/afb/afb/wsgi.py b/afb/afb/wsgi.py deleted file mode 100644 index cf57b0a4..00000000 --- a/afb/afb/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for afb project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "afb.settings") - -application = get_wsgi_application() diff --git a/afb/afbcore/__init__.py b/afb/afbcore/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/afb/afbcore/admin.py b/afb/afbcore/admin.py deleted file mode 100644 index f0f74f60..00000000 --- a/afb/afbcore/admin.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.contrib import admin -from django.contrib.auth.admin import UserAdmin -from .models import Client, Manager, Volunteer, User - -admin.site.register(User, UserAdmin) -admin.site.register(Client) -admin.site.register(Manager) -admin.site.register(Volunteer) - - -# Register your models here. diff --git a/afb/afbcore/apps.py b/afb/afbcore/apps.py deleted file mode 100644 index 9f45ff80..00000000 --- a/afb/afbcore/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class AfbcoreConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "afbcore" diff --git a/afb/afbcore/forms/__init__.py b/afb/afbcore/forms/__init__.py deleted file mode 100644 index a1387c1f..00000000 --- a/afb/afbcore/forms/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# - -from django import forms - -from .client import ClientSignupForm - - -class LoginForm(forms.Form): - username = forms.CharField(max_length=100) - password = forms.CharField(widget=forms.PasswordInput) diff --git a/afb/afbcore/forms/client.py b/afb/afbcore/forms/client.py deleted file mode 100644 index 7a8ac2fd..00000000 --- a/afb/afbcore/forms/client.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.forms import ModelForm - -from afbcore.models import Client - - -class ClientSignupForm(ModelForm): - class Meta: - model = Client - fields = [ - "first_name", - "last_name", - "email", - "address", - "phone_number", - # "status", - ] diff --git a/afb/afbcore/migrations/0001_initial.py b/afb/afbcore/migrations/0001_initial.py deleted file mode 100644 index 2634d148..00000000 --- a/afb/afbcore/migrations/0001_initial.py +++ /dev/null @@ -1,524 +0,0 @@ -# Generated by Django 4.2.5 on 2023-09-22 02:58 - -from django.conf import settings -import django.contrib.auth.models -import django.contrib.auth.validators -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import phonenumber_field.modelfields -import uuid - - -class Migration(migrations.Migration): - initial = True - - dependencies = [ - ("auth", "0012_alter_user_first_name_max_length"), - ] - - operations = [ - migrations.CreateModel( - name="User", - fields=[ - ("password", models.CharField(max_length=128, verbose_name="password")), - ( - "last_login", - models.DateTimeField( - blank=True, null=True, verbose_name="last login" - ), - ), - ( - "is_superuser", - models.BooleanField( - default=False, - help_text="Designates that this user has all permissions without explicitly assigning them.", - verbose_name="superuser status", - ), - ), - ( - "username", - models.CharField( - error_messages={ - "unique": "A user with that username already exists." - }, - help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", - max_length=150, - unique=True, - validators=[ - django.contrib.auth.validators.UnicodeUsernameValidator() - ], - verbose_name="username", - ), - ), - ( - "first_name", - models.CharField( - blank=True, max_length=150, verbose_name="first name" - ), - ), - ( - "last_name", - models.CharField( - blank=True, max_length=150, verbose_name="last name" - ), - ), - ( - "email", - models.EmailField( - blank=True, max_length=254, verbose_name="email address" - ), - ), - ( - "is_staff", - models.BooleanField( - default=False, - help_text="Designates whether the user can log into this admin site.", - verbose_name="staff status", - ), - ), - ( - "is_active", - models.BooleanField( - default=True, - help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", - verbose_name="active", - ), - ), - ( - "date_joined", - models.DateTimeField( - default=django.utils.timezone.now, verbose_name="date joined" - ), - ), - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ( - "groups", - models.ManyToManyField( - blank=True, - help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", - related_name="user_set", - related_query_name="user", - to="auth.group", - verbose_name="groups", - ), - ), - ( - "user_permissions", - models.ManyToManyField( - blank=True, - help_text="Specific permissions for this user.", - related_name="user_set", - related_query_name="user", - to="auth.permission", - verbose_name="user permissions", - ), - ), - ], - options={ - "verbose_name": "user", - "verbose_name_plural": "users", - "abstract": False, - }, - managers=[ - ("objects", django.contrib.auth.models.UserManager()), - ], - ), - migrations.CreateModel( - name="Branch", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ( - "location_name", - models.CharField( - help_text="ie Winnipeg, MB; Medicine Hat, AB etc.", - max_length=255, - ), - ), - ("frequency_of_requests", models.CharField(max_length=255)), - ("spay_neuter_requirement", models.BooleanField(default=False)), - ("pets_per_household_max", models.IntegerField(default=4)), - ("pickup_locations", models.TextField()), - ("delivery_deadline_days", models.IntegerField(default=3)), - ( - "delivery_type", - models.CharField( - choices=[("drop_off", "Drop off"), ("pick_up", "Pick up")], - default="Drop off", - max_length=24, - ), - ), - ("delivery_pickup_details", models.TextField(blank=True)), - ("blurb", models.TextField(blank=True)), - ( - "blurb_image", - models.ImageField( - blank=True, null=True, upload_to="branch_images/" - ), - ), - ], - ), - migrations.CreateModel( - name="Client", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ("first_name", models.CharField(max_length=64)), - ("last_name", models.CharField(max_length=64)), - ("email", models.EmailField(max_length=254, unique=True)), - ( - "phone_number", - phonenumber_field.modelfields.PhoneNumberField( - blank=True, max_length=20, null=True, region="US" - ), - ), - ("address_verbatim", models.CharField(blank=True, max_length=255)), - ("address", models.CharField(max_length=255, null=True)), - ("validated_postal_code", models.CharField(max_length=20, null=True)), - ("country", models.CharField(blank=True, max_length=255)), - ( - "status", - models.CharField( - choices=[ - ("active", "Active"), - ("on_hold", "On Hold"), - ("banned", "Banned"), - ], - default="active", - max_length=20, - ), - ), - ( - "branches", - models.ManyToManyField( - blank=True, related_name="+", to="afbcore.branch" - ), - ), - ( - "user", - models.OneToOneField( - on_delete=django.db.models.deletion.DO_NOTHING, - to=settings.AUTH_USER_MODEL, - ), - ), - ], - options={ - "abstract": False, - }, - ), - migrations.CreateModel( - name="DeliveryRegion", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ( - "name", - models.CharField( - help_text="Name of the region (e.g. postal code, city, or area)", - max_length=255, - ), - ), - ("description", models.TextField(blank=True)), - ], - ), - migrations.CreateModel( - name="FoodAvailable", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ("name", models.CharField(max_length=255)), - ( - "pet_type", - models.CharField( - choices=[("Cat", "Cat"), ("Dog", "Dog"), ("Other", "Other")], - max_length=255, - ), - ), - ("food_type", models.CharField(max_length=255)), - ("food_amount", models.CharField(max_length=255)), - ], - ), - migrations.CreateModel( - name="Pet", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ("name", models.CharField(max_length=255)), - ("dob", models.DateField()), - ( - "size", - models.CharField( - choices=[ - ("TOY", "Toy - up to 10lbs"), - ("SMALL_BREED", "Small Breed - 10-20 lbs"), - ("MEDIUM_BREED", "Medium Breed - 20-50 lbs"), - ("LARGE_BREED", "Large Breed - 50-100 lbs"), - ("GIANT_BREED", "Giant Breed - 100+ lbs"), - ], - max_length=32, - ), - ), - ( - "weight", - models.CharField( - choices=[ - ("UP_TO_10_LBS", "Up to 10 lbs"), - ("FROM_10_TO_20_LBS", "10-20 lbs"), - ("FROM_20_TO_50_LBS", "20-50 lbs"), - ("FROM_50_TO_100_LBS", "50-100 lbs"), - ("OVER_100_LBS", "Over 100 lbs"), - ], - max_length=32, - ), - ), - ("usual_food_brands", models.TextField(blank=True)), - ("allergies", models.BooleanField(default=False)), - ("allergy_types", models.TextField(blank=True)), - ( - "pictures", - models.ImageField(blank=True, null=True, upload_to="pet_pictures/"), - ), - ( - "client", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, to="afbcore.client" - ), - ), - ], - ), - migrations.CreateModel( - name="Volunteer", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ("first_name", models.CharField(max_length=64)), - ("last_name", models.CharField(max_length=64)), - ("email", models.EmailField(max_length=254, unique=True)), - ("address_verbatim", models.CharField(blank=True, max_length=255)), - ("address", models.CharField(max_length=255, null=True)), - ("phone_number", models.CharField(max_length=20)), - ("points_earned", models.IntegerField(default=0)), - ( - "branches", - models.ManyToManyField( - blank=True, related_name="+", to="afbcore.branch" - ), - ), - ( - "delivery_regions", - models.ManyToManyField(to="afbcore.deliveryregion"), - ), - ( - "user", - models.OneToOneField( - on_delete=django.db.models.deletion.DO_NOTHING, - to=settings.AUTH_USER_MODEL, - ), - ), - ], - options={ - "abstract": False, - }, - ), - migrations.CreateModel( - name="PetRequest", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ("confirm_address", models.BooleanField()), - ("confirm_phone_number", models.BooleanField()), - ("agreed_to_terms", models.BooleanField()), - ("method_of_contact", models.CharField(max_length=100)), - ("date_requested", models.DateField(auto_now_add=True)), - ("safe_drop", models.BooleanField()), - ("request_notes", models.TextField(max_length=255)), - ( - "status", - models.CharField( - choices=[ - ("received", "Request Received"), - ("approved", "Request Approved & in Queue"), - ("denied", "Request Denied"), - ("assigned", "Volunteer Assigned"), - ("ready_for_pickup", "Request Ready For Volunteer Pickup"), - ("scheduled", "Delivery Scheduled"), - ("out_for_delivery", "Out For Delivery"), - ("delivered", "Delivered"), - ("undeliverable", "Undeliverable"), - ], - default="received", - max_length=20, - ), - ), - ( - "driver_comments", - models.TextField(blank=True, max_length=255, null=True), - ), - ( - "picture_of_delivery", - models.ImageField( - blank=True, null=True, upload_to="delivery_pictures/" - ), - ), - ("needs_review", models.BooleanField()), - ( - "branch", - models.ForeignKey( - on_delete=django.db.models.deletion.DO_NOTHING, - to="afbcore.branch", - ), - ), - ( - "client", - models.ForeignKey( - on_delete=django.db.models.deletion.DO_NOTHING, - to="afbcore.client", - ), - ), - ( - "food_types_available", - models.ManyToManyField(to="afbcore.foodavailable"), - ), - ("pets", models.ManyToManyField(to="afbcore.pet")), - ], - options={ - "ordering": ["-date_requested"], - }, - ), - migrations.CreateModel( - name="Manager", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ("first_name", models.CharField(max_length=64)), - ("last_name", models.CharField(max_length=64)), - ("email", models.EmailField(max_length=254, unique=True)), - ( - "phone_number", - phonenumber_field.modelfields.PhoneNumberField( - blank=True, max_length=20, null=True, region="US" - ), - ), - ("address_verbatim", models.CharField(blank=True, max_length=255)), - ("address", models.CharField(max_length=255, null=True)), - ("role_level", models.IntegerField()), - ( - "branches", - models.ManyToManyField( - blank=True, related_name="+", to="afbcore.branch" - ), - ), - ( - "user", - models.OneToOneField( - on_delete=django.db.models.deletion.DO_NOTHING, - to=settings.AUTH_USER_MODEL, - ), - ), - ], - options={ - "abstract": False, - }, - ), - migrations.CreateModel( - name="Delivery", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("delivery_date", models.DateField()), - ("delivery_time", models.TimeField()), - ("delivery_address", models.CharField(max_length=255)), - ( - "food_available", - models.ForeignKey( - on_delete=django.db.models.deletion.DO_NOTHING, - to="afbcore.foodavailable", - ), - ), - ( - "pet_request", - models.ForeignKey( - on_delete=django.db.models.deletion.DO_NOTHING, - to="afbcore.petrequest", - ), - ), - ], - ), - migrations.AddField( - model_name="branch", - name="delivery_regions", - field=models.ManyToManyField(to="afbcore.deliveryregion"), - ), - ] diff --git a/afb/afbcore/migrations/__init__.py b/afb/afbcore/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/afb/afbcore/models/__init__.py b/afb/afbcore/models/__init__.py deleted file mode 100644 index 9e9b412e..00000000 --- a/afb/afbcore/models/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -from django.db import models - -from .branch import Branch # noqa -from .users import Client, Manager, Volunteer, User -from .pet_request import PetRequest -from .pet import Pet -from .food_available import FoodAvailable -from .delivery import Delivery, DeliveryRegion - -""" -# https://docs.trunk.io/check/ignoring-issues -Branch -Profile -Manager -Client -Volunteer -Pet -HelpRequest -""" diff --git a/afb/afbcore/models/branch.py b/afb/afbcore/models/branch.py deleted file mode 100644 index 483a35aa..00000000 --- a/afb/afbcore/models/branch.py +++ /dev/null @@ -1,56 +0,0 @@ -import uuid - -from django.db import models - - -class Branch(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - - # Location Name ie Winnipeg, MB; Medicine Hat, AB etc. - location_name = models.CharField( - max_length=255, help_text="ie Winnipeg, MB; Medicine Hat, AB etc." - ) - - # Postal/Zip Code Range start with Canada but the intent is to - # use this in the USA which may be more apt to paying - # postal_zip_code_range = models.CharField(max_length=255) - delivery_regions = models.ManyToManyField("DeliveryRegion") - - # Frequency of Requests Weeks, Month, Months. This would need to be able - # to be edited, as we do change it sometimes. - frequency_of_requests = models.CharField(max_length=255) - - # Spay/Neuter Requirement likely a yes or no? As in does that branch expect - # clients to spay/neuter their pets to gain access to the food bank? - spay_neuter_requirement = models.BooleanField(default=False) - - # Number of Pets serviced/Household. We set this as four but it may be nice, in future, to be able to edit it based on a regions bylaws. - pets_per_household_max = models.IntegerField(default=4) - - # Delivery Deadline. For example, Winnipeg is 14 days - delivery_deadline_days = models.IntegerField() - - # Pickup Locations not sure about this one, but in Winnipeg for instance we have various spots to pick up inventory and those locations can change (they are volunteers houses). When drivers sign up for a delivery they choose the location they want to pick up from. - pickup_locations = models.TextField() - - # Delivery Type Drop off and/or pick up options - delivery_type = models.CharField(max_length=255) - - # Delivery deadline in days - delivery_deadline_days = models.IntegerField(default=3) - - # Type of delivery service, 'Drop off' or 'Pick up' - delivery_type = models.CharField( - max_length=24, - choices=[("drop_off", "Drop off"), ("pick_up", "Pick up")], - default="Drop off", - ) - - # Delivery/pickup More details - delivery_pickup_details = models.TextField(blank=True) - - # Blurb An optional text field for a short intro or description etc. - blurb = models.TextField(blank=True) - - # Blurb image A picture to go along with the blurb - blurb_image = models.ImageField(upload_to="branch_images/", blank=True, null=True) diff --git a/afb/afbcore/models/client.py b/afb/afbcore/models/client.py deleted file mode 100644 index 7a8ac2fd..00000000 --- a/afb/afbcore/models/client.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.forms import ModelForm - -from afbcore.models import Client - - -class ClientSignupForm(ModelForm): - class Meta: - model = Client - fields = [ - "first_name", - "last_name", - "email", - "address", - "phone_number", - # "status", - ] diff --git a/afb/afbcore/models/delivery.py b/afb/afbcore/models/delivery.py deleted file mode 100644 index 4082928d..00000000 --- a/afb/afbcore/models/delivery.py +++ /dev/null @@ -1,28 +0,0 @@ -import uuid -from django.db import models - - -class DeliveryRegion(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - - name = models.CharField( - max_length=255, help_text="Name of the region (e.g. postal code, city, or area)" - ) - description = models.TextField(blank=True) - - def __str__(self): - return self.name - - -class Delivery(models.Model): - pet_request = models.ForeignKey("PetRequest", on_delete=models.DO_NOTHING) - - food_available = models.ForeignKey("FoodAvailable", on_delete=models.DO_NOTHING) - - delivery_date = models.DateField() - delivery_time = models.TimeField() - - delivery_address = models.CharField(max_length=255) - - def __str__(self): - return f"{self.client} - {self.delivery_date}" diff --git a/afb/afbcore/models/food_available.py b/afb/afbcore/models/food_available.py deleted file mode 100644 index 520b412b..00000000 --- a/afb/afbcore/models/food_available.py +++ /dev/null @@ -1,47 +0,0 @@ -"""This module defines the FoodAvailable model.""" - -import uuid - -from django.db import models -from enum import Enum - - -class PetType(Enum): - CAT = "Cat" - DOG = "Dog" - OTHER = "Other" - - -class FoodAvailable(models.Model): - """ - Needs to support fields for different types of pets (e.g. cats, dogs, and other pets), as well as different types of food (e.g. dry and wet) and different amounts of food based on the size of the pet. - - Example of records that will need to be created. - - Cats - Dry 1.25 lbs/cat/week - Wet 6-12 cans if we have it - Dogs - Dry - Toy 1.25 lbs/week - Small Breed 3.5 lbs/week - Medium Breed 6 lbs /week - Large Breed 10 lbs/week - Giant Breed 12.5 lbs/week - Wet 6-12 cans if we have it - - Any other pet type No estimate - Total Cat Dry - Total Cat Wet - Total Dog Dry - Total Dog Wet - """ - - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - name = models.CharField(max_length=255) - pet_type = models.CharField( - max_length=255, - choices=[(pet_type.value, pet_type.value) for pet_type in PetType], - ) - food_type = models.CharField(max_length=255) - food_amount = models.CharField(max_length=255) diff --git a/afb/afbcore/models/pet.py b/afb/afbcore/models/pet.py deleted file mode 100644 index ed6faa2a..00000000 --- a/afb/afbcore/models/pet.py +++ /dev/null @@ -1,68 +0,0 @@ -import uuid - -from enum import Enum -from django.db import models - - -class PetSize(Enum): - TOY = "Toy - up to 10lbs" - SMALL_BREED = "Small Breed - 10-20 lbs" - MEDIUM_BREED = "Medium Breed - 20-50 lbs" - LARGE_BREED = "Large Breed - 50-100 lbs" - GIANT_BREED = "Giant Breed - 100+ lbs" - - -class WeightRange(Enum): - UP_TO_10_LBS = "Up to 10 lbs" - FROM_10_TO_20_LBS = "10-20 lbs" - FROM_20_TO_50_LBS = "20-50 lbs" - FROM_50_TO_100_LBS = "50-100 lbs" - OVER_100_LBS = "Over 100 lbs" - - -class Pet(models.Model): - - """ - Pet model to store information about pets belonging to clients. - - The maximum number of pet profiles that would be allowed - to be created would be deteremined from the Branch - setting of "Number of Pet's Serviced/Houeshold" above - - """ - - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - - # Client - Foreign Key - client = models.ForeignKey("Client", on_delete=models.CASCADE) - - # Name - name = models.CharField(max_length=255) - - # DOB - I'd like to system to record the date of birth and then use it to calculate real time age - dob = models.DateField() - - # Size - Drop down list with size options - size = models.CharField( - max_length=32, choices=[(size.name, size.value) for size in PetSize] - ) - - # Weight - Drop down list with weight ranges (this is typically only needed for dogs). Select one. - weight = models.CharField( - max_length=32, choices=[(size.name, size.value) for size in WeightRange] - ) - - # Usual Food Brands - Free form - usual_food_brands = models.TextField(blank=True) - - # Allergies - Yes/No - allergies = models.BooleanField(default=False) - - # Allergies Type - Drop down list with an "other" option that is free form text. Select all that apply - allergy_types = models.TextField(blank=True) - - # Pictures - For no reason other than I think it would be fun to have their client dashboard have pics of their pets for the profiles - pictures = models.ImageField(upload_to="pet_pictures/", null=True, blank=True) - - def __str__(self): - return self.name diff --git a/afb/afbcore/models/pet_request.py b/afb/afbcore/models/pet_request.py deleted file mode 100644 index 6f5818dd..00000000 --- a/afb/afbcore/models/pet_request.py +++ /dev/null @@ -1,73 +0,0 @@ -# PetRequest - -import uuid - -from django.db import models - - -STATUS_CHOICES = [ - ("received", "Request Received"), - ("approved", "Request Approved & in Queue"), - ("denied", "Request Denied"), - ("assigned", "Volunteer Assigned"), - ("ready_for_pickup", "Request Ready For Volunteer Pickup"), - ("scheduled", "Delivery Scheduled"), - ("out_for_delivery", "Out For Delivery"), - ("delivered", "Delivered"), - ("undeliverable", "Undeliverable"), -] - - -class PetRequest(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - - client = models.ForeignKey("Client", on_delete=models.DO_NOTHING) - - branch = models.ForeignKey("Branch", on_delete=models.DO_NOTHING) - - # One or more. ** We will want them to see and confirm/edit their address and phone number on the request, and be able to see pets, and edit some fields of their pets info - pets = models.ManyToManyField("Pet") - - # Yes/No - No requires them to edit address and ensure that it's not attached to another client or then both clients need to be on hold to review - confirm_address = models.BooleanField() - - # Yes/No - No requires them to update phone number (validate format) - confirm_phone_number = models.BooleanField() - - # Agree to Terms and Conditions - agreed_to_terms = models.BooleanField() - - # Text or Phone - method_of_contact = models.CharField(max_length=100) - - # Drop down list with an "other" option that is free form text. Select all that apply. - food_types_available = models.ManyToManyField("FoodAvailable") - - # Use system date - do not let clients input/edit. We like to have deliveries made within the branches delivery window so would be great if we could send notifications when requests are "aging" - date_requested = models.DateField(auto_now_add=True) - - # Yes/No - safe_drop = models.BooleanField() - - # Free form comments from client - set max character limit - request_notes = models.TextField(max_length=255) - - # Request Received, Request Approved & in Queue, Request Denied, Volunteer Assigned, Request Ready For Volunteer Pickup, Delivery Scheduled, Out For Delivery, Delivered, Undeliverable - status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="received") - - # Driver comments - driver_comments = models.TextField(max_length=255, null=True, blank=True) - - # Picture of delivery - picture_of_delivery = models.ImageField( - upload_to="delivery_pictures/", null=True, blank=True - ) - - # Not sure what to call this one, but if the volunteer has an issue with the client - they are rude or aggressive for example, can we allow the driver to mark the client as suspended and admin to review? - needs_review = models.BooleanField() - - def __str__(self): - return f"Pet Request {self.id}" - - class Meta: - ordering = ["-date_requested"] diff --git a/afb/afbcore/models/users/__init__.py b/afb/afbcore/models/users/__init__.py deleted file mode 100644 index 4bd242ef..00000000 --- a/afb/afbcore/models/users/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from .client import Client -from .manager import Manager -from .volunteer import Volunteer -from .base_profile import BaseProfile -from .user import User diff --git a/afb/afbcore/models/users/base_profile.py b/afb/afbcore/models/users/base_profile.py deleted file mode 100644 index 00420417..00000000 --- a/afb/afbcore/models/users/base_profile.py +++ /dev/null @@ -1,57 +0,0 @@ -import uuid - -from django.db import models - -# https://django-phonenumber-field.readthedocs.io/en/latest/reference.html#model-field -# https://github.com/google/libphonenumber/blob/master/FALSEHOODS.md -from phonenumber_field.modelfields import PhoneNumberField - -from .user import User - -# Define default arguments for ManyToManyField -many_to_many_defaults = { - "related_name": "+", - "blank": True, - "symmetrical": False, -} - - -class BaseProfile(models.Model): - class Meta: - abstract = True - - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - - user = models.OneToOneField(User, on_delete=models.DO_NOTHING) - - # Usually just one, but can be multiple - branches = models.ManyToManyField("Branch", **many_to_many_defaults) - - # First Name - first_name = models.CharField(max_length=64) - - # Last Name - last_name = models.CharField(max_length=64) - - # Email - Unique - don't allow duplicates. - email = models.EmailField(unique=True) - - # Phone - Validate format - numbers only - phone_number = PhoneNumberField( - blank=True, - null=True, - region="US", - max_length=20, - ) - - # We allow free form text entry but store the validated - # address in the `address` field. These fields should - # generally be updated together. - # - # e.g. A client may enter "123 Main St" and another - # client may enter "123 Main Street" - address_verbatim = models.CharField(max_length=255, blank=True) - - # Validated Address - # i.e. An address from Canada Post or Google Maps - address = models.CharField(max_length=255, null=True) diff --git a/afb/afbcore/models/users/client.py b/afb/afbcore/models/users/client.py deleted file mode 100644 index 790c4102..00000000 --- a/afb/afbcore/models/users/client.py +++ /dev/null @@ -1,41 +0,0 @@ -import uuid - -from django.db import models -from django.contrib.auth.models import AbstractUser -from django.urls import reverse - -from .base_profile import BaseProfile - -# Status - Active, On Hold, Banned -STATUS_CHOICES = [ - ("active", "Active"), - ("on_hold", "On Hold"), - ("banned", "Banned"), -] - - -class Client(BaseProfile): - - """ - Clients could try to scam and create duplicate accounts to circumvent frequency, change pet info, etc. - We need to do our best to ensure each account is unique. - """ - - # Address - If address is duplicate to another clients, both accounts need to be placed on hold and manually reviewed/approved bc people are scammers. - # Has to be a validated address (google?) and not permitted to be overwritten. The last amount of free form text entry as possible. - # You'd be amazed how many clients don't know their postal code and we route by postal code sooooo - - # Postal/Zip Code - Has to be a validated address (google?) and not permitted to be overwritten. The last amount of free form text entry as possible. - # You'd be amazed how many clients don't know their postal code and we route by postal code sooooo - validated_postal_code = models.CharField(max_length=20, null=True) - - # Country - I don't know if we need this but google addresses populate country too. It may be useful for analytics - country = models.CharField(max_length=255, blank=True) - - status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="active") - - def __str__(self): - return f"{self.first_name} {self.last_name}" - - def get_absolute_url(self): - return reverse("client-create", kwargs={"pk": self.pk}) diff --git a/afb/afbcore/models/users/manager.py b/afb/afbcore/models/users/manager.py deleted file mode 100644 index a7e8ac83..00000000 --- a/afb/afbcore/models/users/manager.py +++ /dev/null @@ -1,38 +0,0 @@ -import uuid - -from django.db import models - -from .base_profile import BaseProfile - - -class Manager(BaseProfile): - """ """ - - role_level = models.IntegerField() - - def __str__(self): - return f"{self.first_name} {self.last_name}" - - -""" -GitHub Copilot: Here are all the arguments that can be used with Django's `ManyToManyField`: - -- `to`: The model to which the relationship is defined. This can be a string containing the name of the model, or the model class itself. -- `related_name`: The name to use for the reverse relation from the related object back to this one. This is used to access the related objects from the other side of the relationship. -- `related_query_name`: The name to use for the reverse relation from the related object back to this one when performing queries. This is used to filter the related objects from the other side of the relationship. -- `limit_choices_to`: A dictionary of lookup arguments to use when limiting the available choices for the relationship. -- `symmetrical`: A boolean indicating whether the relationship is symmetrical. This is used when the relationship is defined on both sides of the model. -- `through`: The intermediate model to use for the relationship. This is used when you need to add extra fields to the relationship. -- `through_fields`: A tuple of field names that specify the fields on the intermediate model that should be used for the relationship. -- `db_table`: The name of the database table to use for the relationship. -- `db_constraint`: A boolean indicating whether to create a database constraint for the relationship. -- `swappable`: A boolean indicating whether the relationship can be swapped out with another model. -- `blank`: A boolean indicating whether the field is allowed to be blank. -- `null`: A boolean indicating whether the field is allowed to be null. -- `default`: The default value for the field. -- `editable`: A boolean indicating whether the field is editable. -- `help_text`: The help text to display for the field. -- `verbose_name`: The human-readable name to use for the field. -- `validators`: A list of validators to use for the field. -- `error_messages`: A dictionary of error messages to use for the field. -""" diff --git a/afb/afbcore/models/users/user.py b/afb/afbcore/models/users/user.py deleted file mode 100644 index dd406742..00000000 --- a/afb/afbcore/models/users/user.py +++ /dev/null @@ -1,8 +0,0 @@ -import uuid - -from django.db import models -from django.contrib.auth.models import AbstractUser - - -class User(AbstractUser): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) diff --git a/afb/afbcore/models/users/volunteer.py b/afb/afbcore/models/users/volunteer.py deleted file mode 100644 index 9ad4d68d..00000000 --- a/afb/afbcore/models/users/volunteer.py +++ /dev/null @@ -1,25 +0,0 @@ -import uuid -from django.db import models - -from .base_profile import BaseProfile - - -class Volunteer(BaseProfile): - - # Would love for the client and volunteer to be able to communicate through the software - and not have the volunteer have to use their personal phone to arrange delivery. However, we, as admin, need their phone number - phone_number = models.CharField(max_length=20) - - # Postal/Zip Codes/Cities will deliver to - # We will use this to notify them of available deliveries in their "regions" - # TODO: Figure out how to do this. It could be a list of strings as a - # rudimentary approach, where the string could be a postal code, city, - # or region. Or it could be a list of foreign keys to a "DeliveryRegion" - # which would still be a simple string but reduce dupes. - delivery_regions = models.ManyToManyField("DeliveryRegion") - - # Points/Rewards Earned - # For each delivery made/attempted - redeem these for swag/gift cards - points_earned = models.IntegerField(default=0) - - def __str__(self): - return f"{self.first_name} {self.last_name}" diff --git a/afb/afbcore/public/img/afb_icon_black.png b/afb/afbcore/public/img/afb_icon_black.png deleted file mode 100755 index 58570441..00000000 Binary files a/afb/afbcore/public/img/afb_icon_black.png and /dev/null differ diff --git a/afb/afbcore/public/img/afb_icon_colour.png b/afb/afbcore/public/img/afb_icon_colour.png deleted file mode 100755 index e765e2ae..00000000 Binary files a/afb/afbcore/public/img/afb_icon_colour.png and /dev/null differ diff --git a/afb/afbcore/public/img/afb_icon_white.png b/afb/afbcore/public/img/afb_icon_white.png deleted file mode 100755 index b73ea8aa..00000000 Binary files a/afb/afbcore/public/img/afb_icon_white.png and /dev/null differ diff --git a/afb/afbcore/public/img/afb_logo_horizontal_black.png b/afb/afbcore/public/img/afb_logo_horizontal_black.png deleted file mode 100755 index 4438123e..00000000 Binary files a/afb/afbcore/public/img/afb_logo_horizontal_black.png and /dev/null differ diff --git a/afb/afbcore/public/img/afb_logo_horizontal_colour.png b/afb/afbcore/public/img/afb_logo_horizontal_colour.png deleted file mode 100755 index 75762bd2..00000000 Binary files a/afb/afbcore/public/img/afb_logo_horizontal_colour.png and /dev/null differ diff --git a/afb/afbcore/public/img/afb_logo_horizontal_white.png b/afb/afbcore/public/img/afb_logo_horizontal_white.png deleted file mode 100755 index 4369718e..00000000 Binary files a/afb/afbcore/public/img/afb_logo_horizontal_white.png and /dev/null differ diff --git a/afb/afbcore/public/img/afb_logo_vertical_black.png b/afb/afbcore/public/img/afb_logo_vertical_black.png deleted file mode 100755 index 798eeb41..00000000 Binary files a/afb/afbcore/public/img/afb_logo_vertical_black.png and /dev/null differ diff --git a/afb/afbcore/public/img/afb_logo_vertical_colour.png b/afb/afbcore/public/img/afb_logo_vertical_colour.png deleted file mode 100755 index 28c2aae8..00000000 Binary files a/afb/afbcore/public/img/afb_logo_vertical_colour.png and /dev/null differ diff --git a/afb/afbcore/public/img/afb_logo_vertical_white.png b/afb/afbcore/public/img/afb_logo_vertical_white.png deleted file mode 100755 index 70244ea0..00000000 Binary files a/afb/afbcore/public/img/afb_logo_vertical_white.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/android-icon-144x144.png b/afb/afbcore/public/img/favicons/android-icon-144x144.png deleted file mode 100644 index 7a2f70a4..00000000 Binary files a/afb/afbcore/public/img/favicons/android-icon-144x144.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/android-icon-192x192.png b/afb/afbcore/public/img/favicons/android-icon-192x192.png deleted file mode 100644 index d0ef1744..00000000 Binary files a/afb/afbcore/public/img/favicons/android-icon-192x192.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/android-icon-36x36.png b/afb/afbcore/public/img/favicons/android-icon-36x36.png deleted file mode 100644 index c4dcc530..00000000 Binary files a/afb/afbcore/public/img/favicons/android-icon-36x36.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/android-icon-48x48.png b/afb/afbcore/public/img/favicons/android-icon-48x48.png deleted file mode 100644 index b4d140c6..00000000 Binary files a/afb/afbcore/public/img/favicons/android-icon-48x48.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/android-icon-72x72.png b/afb/afbcore/public/img/favicons/android-icon-72x72.png deleted file mode 100644 index 557f19d4..00000000 Binary files a/afb/afbcore/public/img/favicons/android-icon-72x72.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/android-icon-96x96.png b/afb/afbcore/public/img/favicons/android-icon-96x96.png deleted file mode 100644 index 4fb75405..00000000 Binary files a/afb/afbcore/public/img/favicons/android-icon-96x96.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-114x114.png b/afb/afbcore/public/img/favicons/apple-icon-114x114.png deleted file mode 100644 index 5fd30056..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-114x114.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-120x120.png b/afb/afbcore/public/img/favicons/apple-icon-120x120.png deleted file mode 100644 index 73341f3b..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-120x120.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-144x144.png b/afb/afbcore/public/img/favicons/apple-icon-144x144.png deleted file mode 100644 index 7a2f70a4..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-144x144.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-152x152.png b/afb/afbcore/public/img/favicons/apple-icon-152x152.png deleted file mode 100644 index a47d08a3..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-152x152.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-180x180.png b/afb/afbcore/public/img/favicons/apple-icon-180x180.png deleted file mode 100644 index c30a725b..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-180x180.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-57x57.png b/afb/afbcore/public/img/favicons/apple-icon-57x57.png deleted file mode 100644 index 9949de1c..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-57x57.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-60x60.png b/afb/afbcore/public/img/favicons/apple-icon-60x60.png deleted file mode 100644 index 883282d4..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-60x60.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-72x72.png b/afb/afbcore/public/img/favicons/apple-icon-72x72.png deleted file mode 100644 index 557f19d4..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-72x72.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-76x76.png b/afb/afbcore/public/img/favicons/apple-icon-76x76.png deleted file mode 100644 index bcad7b73..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-76x76.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon-precomposed.png b/afb/afbcore/public/img/favicons/apple-icon-precomposed.png deleted file mode 100644 index f9193c96..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon-precomposed.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/apple-icon.png b/afb/afbcore/public/img/favicons/apple-icon.png deleted file mode 100644 index f9193c96..00000000 Binary files a/afb/afbcore/public/img/favicons/apple-icon.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/browserconfig.xml b/afb/afbcore/public/img/favicons/browserconfig.xml deleted file mode 100644 index 7d453d3b..00000000 --- a/afb/afbcore/public/img/favicons/browserconfig.xml +++ /dev/null @@ -1,2 +0,0 @@ - -#ffffff diff --git a/afb/afbcore/public/img/favicons/favicon-16x16.png b/afb/afbcore/public/img/favicons/favicon-16x16.png deleted file mode 100644 index 4360d5f9..00000000 Binary files a/afb/afbcore/public/img/favicons/favicon-16x16.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/favicon-32x32.png b/afb/afbcore/public/img/favicons/favicon-32x32.png deleted file mode 100644 index acb280a7..00000000 Binary files a/afb/afbcore/public/img/favicons/favicon-32x32.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/favicon-96x96.png b/afb/afbcore/public/img/favicons/favicon-96x96.png deleted file mode 100644 index 4fb75405..00000000 Binary files a/afb/afbcore/public/img/favicons/favicon-96x96.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/favicon.ico b/afb/afbcore/public/img/favicons/favicon.ico deleted file mode 100644 index 2dace648..00000000 Binary files a/afb/afbcore/public/img/favicons/favicon.ico and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/manifest.json b/afb/afbcore/public/img/favicons/manifest.json deleted file mode 100644 index 758f8d2a..00000000 --- a/afb/afbcore/public/img/favicons/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "App", - "icons": [ - { - "src": "\/android-icon-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" - }, - { - "src": "\/android-icon-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" - }, - { - "src": "\/android-icon-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" - }, - { - "src": "\/android-icon-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" - }, - { - "src": "\/android-icon-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" - }, - { - "src": "\/android-icon-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" - } - ] -} diff --git a/afb/afbcore/public/img/favicons/ms-icon-144x144.png b/afb/afbcore/public/img/favicons/ms-icon-144x144.png deleted file mode 100644 index 7a2f70a4..00000000 Binary files a/afb/afbcore/public/img/favicons/ms-icon-144x144.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/ms-icon-150x150.png b/afb/afbcore/public/img/favicons/ms-icon-150x150.png deleted file mode 100644 index 7c3ed729..00000000 Binary files a/afb/afbcore/public/img/favicons/ms-icon-150x150.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/ms-icon-310x310.png b/afb/afbcore/public/img/favicons/ms-icon-310x310.png deleted file mode 100644 index 55e1907a..00000000 Binary files a/afb/afbcore/public/img/favicons/ms-icon-310x310.png and /dev/null differ diff --git a/afb/afbcore/public/img/favicons/ms-icon-70x70.png b/afb/afbcore/public/img/favicons/ms-icon-70x70.png deleted file mode 100644 index d9c85a51..00000000 Binary files a/afb/afbcore/public/img/favicons/ms-icon-70x70.png and /dev/null differ diff --git a/afb/afbcore/templates/about.html b/afb/afbcore/templates/about.html deleted file mode 100644 index bf2e2e66..00000000 --- a/afb/afbcore/templates/about.html +++ /dev/null @@ -1,11 +0,0 @@ - -{% extends 'appshell.html' %} - -{% block content %} - - -About AFB - - - -{% endblock %} diff --git a/afb/afbcore/templates/afbcore/client_request.html b/afb/afbcore/templates/afbcore/client_request.html deleted file mode 100644 index 6931a3e7..00000000 --- a/afb/afbcore/templates/afbcore/client_request.html +++ /dev/null @@ -1,13 +0,0 @@ - -{% extends 'appshell.html' %} - -{% load tailwind_filters %} - - -{% block content %} - -Make a request - -{{form | crispy}} - -{% endblock %} diff --git a/afb/afbcore/templates/afbcore/client_request_hardcoded_example.html b/afb/afbcore/templates/afbcore/client_request_hardcoded_example.html deleted file mode 100644 index 912038c2..00000000 --- a/afb/afbcore/templates/afbcore/client_request_hardcoded_example.html +++ /dev/null @@ -1,203 +0,0 @@ - - - -
-
-
-

Profile

-

This information will be displayed publicly so be careful what you share.

- -
-
- -
-
- workcation.com/ - -
-
-
- -
- -
- -
-

Write a few sentences about yourself.

-
- -
- -
- - -
-
- -
- -
-
- -
- -

or drag and drop

-
-

PNG, JPG, GIF up to 10MB

-
-
-
-
-
- -
-

Personal Information

-

Use a permanent address where you can receive mail.

- -
-
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
-
-
- -
-

Notifications

-

We'll always let you know about important changes, but you pick what else you want to hear about.

- -
-
- By Email -
-
-
- -
-
- -

Get notified when someones posts a comment on a posting.

-
-
-
-
- -
-
- -

Get notified when a candidate applies for a job.

-
-
-
-
- -
-
- -

Get notified when a candidate accepts or rejects an offer.

-
-
-
-
-
- Push Notifications -

These are delivered via SMS to your mobile phone.

-
-
- - -
-
- - -
-
- - -
-
-
-
-
-
- -
- - -
-
diff --git a/afb/afbcore/templates/afbcore/client_signup_form.html b/afb/afbcore/templates/afbcore/client_signup_form.html deleted file mode 100644 index 8880ded3..00000000 --- a/afb/afbcore/templates/afbcore/client_signup_form.html +++ /dev/null @@ -1,30 +0,0 @@ - -{% extends 'appshell.html' %} - -{% load static %} -{% load tailwind_filters %} - - -{% block contentHeader %} - -

Join

- -{% endblock %} - - -{% block content %} - -

Create a client profile

- -
- {% csrf_token %} - - {{form | crispy}} - -
- -
-
- - -{% endblock %} diff --git a/afb/afbcore/templates/afbcore/login.html b/afb/afbcore/templates/afbcore/login.html deleted file mode 100644 index 93febf51..00000000 --- a/afb/afbcore/templates/afbcore/login.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends 'appshell.html' %} - -{% block content %} -

Login

-
- {% csrf_token %} - {{ form.as_p }} - -
-{% endblock %} diff --git a/afb/afbcore/templates/appshell.html b/afb/afbcore/templates/appshell.html deleted file mode 100644 index 0e118a39..00000000 --- a/afb/afbcore/templates/appshell.html +++ /dev/null @@ -1,202 +0,0 @@ - -{% extends 'base.html' %} -{% comment %} {% include "appshell.html" with person="Jane" greeting="Hello" %} {% endcomment %} - -{% comment "" %} -https://tailwindui.com/components#product-application-ui-application-shells -{% endcomment %} - - -{% load static %} -{% load tailwind_filters %} - - -{% block title %}AFB{% endblock %} - -{% block metaContent %} - - - - - - - - - - - - - - - - - -{% endblock %} - - -{% block bodyContent %} - -{% comment "" %} - Expects the following to be set in the base template: - - ``` - - - ``` -{% endcomment %} - -
- - -
-
- {% block contentHeader %}{% endblock %} -
-
- -
-
- - {% block content %}{% endblock %} - - {% comment %} - - {% endcomment %} - -
-
-
- -{% endblock %} diff --git a/afb/afbcore/templates/dashboard/client.html b/afb/afbcore/templates/dashboard/client.html deleted file mode 100644 index d7b2ca9a..00000000 --- a/afb/afbcore/templates/dashboard/client.html +++ /dev/null @@ -1,35 +0,0 @@ - -{% extends 'appshell.html' %} - - -{% block contentHeader %} - -

Dashboard

- -{% endblock %} - - -{% block content %} - - - -{% comment "" %} -Icon -{% endcomment %} - -{% comment "" %} -{% include 'forms/new_request.html' %} -{% endcomment %} - -{% comment %} - - # Only renders form, no submit button. And only when a - # FormView and form is valid. - {{ form }} - - # See django docs for form_snippet.html. - -{% endcomment %} - - -{% endblock %} diff --git a/afb/afbcore/tests.py b/afb/afbcore/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/afb/afbcore/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/afb/afbcore/views/__init__.py b/afb/afbcore/views/__init__.py deleted file mode 100644 index 868df5ee..00000000 --- a/afb/afbcore/views/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -from .client import * -from .dashboard import ( - ClientDashboardView, - DashboardRouterView, - ManagerDashboardView, - VolunteerDashboardView, -) - -from django.contrib.auth.views import LoginView -from django.urls import reverse_lazy - - -class MyLoginView(LoginView): - template_name = "afbcore/login.html" - success_url = reverse_lazy("afbcore:dashboard") diff --git a/afb/afbcore/views/client.py b/afb/afbcore/views/client.py deleted file mode 100644 index fa8d61d4..00000000 --- a/afb/afbcore/views/client.py +++ /dev/null @@ -1,28 +0,0 @@ -from django.shortcuts import render - -# Create your views here. -# some_app/views.py -from django.views.generic import TemplateView -from django.views.generic.edit import CreateView -from django.views.generic.edit import FormView - -from afbcore.forms import ClientSignupForm -from afbcore.models import Client - - -class AboutView(TemplateView): - template_name = "about.html" - - -class DashboardView(TemplateView): - template_name = "dashboard/client.html" - - -class ClientSignupFormView(FormView): - template_name = "afbcore/client_signup_form.html" - form_class = ClientSignupForm - success_url = "/dashboard" - - -class ClientRequestView(TemplateView): - template_name = "afbcore/client_request.html" diff --git a/afb/afbcore/views/dashboard.py b/afb/afbcore/views/dashboard.py deleted file mode 100644 index 0ca18b71..00000000 --- a/afb/afbcore/views/dashboard.py +++ /dev/null @@ -1,42 +0,0 @@ -from django.contrib.auth.mixins import LoginRequiredMixin -from django.http import Http404 -from django.shortcuts import render -from django.views.generic import TemplateView -from django.views import View - -from afbcore.models import Client, Manager, Volunteer - - -class DashboardRouterView(LoginRequiredMixin, View): - def get(self, request): - # Route to the specific dashboard based on user type - if isinstance(request.user, Client): - # Internal redirect to ClientDashboardView - return ClientDashboardView.as_view()(request) - elif isinstance(request.user, Manager): - # Internal redirect to ManagerDashboardView - return ManagerDashboardView.as_view()(request) - elif isinstance(request.user, Volunteer): - # Internal redirect to VolunteerDashboardView - return VolunteerDashboardView.as_view()(request) - else: - # 404 - raise Http404("Page not found") - - -class ClientDashboardView(LoginRequiredMixin, TemplateView): - def get(self, request): - # Add client-specific dashboard logic here - return render(request, "dashboard/client.html") - - -class ManagerDashboardView(LoginRequiredMixin, TemplateView): - def get(self, request): - # Add manager-specific dashboard logic here - return render(request, "dashboard/manager.html") - - -class VolunteerDashboardView(LoginRequiredMixin, TemplateView): - def get(self, request): - # Add volunteer-specific dashboard logic here - return render(request, "dashboard/volunteer.html") diff --git a/afb/afbcore/views/manager.py b/afb/afbcore/views/manager.py deleted file mode 100644 index 52fc867d..00000000 --- a/afb/afbcore/views/manager.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.shortcuts import render - -# Create your views here. -# some_app/views.py -from django.views.generic import TemplateView -from django.views.generic.edit import CreateView -from django.views.generic.edit import FormView - -from afbcore.forms import ManagerForm -from afbcore.models import Manager diff --git a/afb/afbcore/views/volunteer.py b/afb/afbcore/views/volunteer.py deleted file mode 100644 index abf23fd5..00000000 --- a/afb/afbcore/views/volunteer.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.shortcuts import render - -# Create your views here. -# some_app/views.py -from django.views.generic import TemplateView -from django.views.generic.edit import CreateView -from django.views.generic.edit import FormView - -from afbcore.forms import VolunteerForm -from afbcore.models import Volunteer diff --git a/afb/manage.py b/afb/manage.py deleted file mode 100755 index 157be528..00000000 --- a/afb/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -"""Django's command-line utility for administrative tasks.""" -import os -import sys - - -def main(): - """Run administrative tasks.""" - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "afb.settings") - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) - - -if __name__ == "__main__": - main() diff --git a/afb/requirements.in b/afb/requirements.in deleted file mode 100644 index dea8c3c4..00000000 --- a/afb/requirements.in +++ /dev/null @@ -1,37 +0,0 @@ -# -# Requirements file for afb-requests. Modify this file to -# include the packages you want to install. Then, run: -# -# pip-compile --output-file requirements.txt requirements.in -# -# This will generate a new requirements.txt file with the -# latest versions of the packages listed here. -# -# You can also run: -# -# pip-compile --upgrade --output-file requirements.txt requirements.in -# -# to upgrade all packages to their latest versions. -# -# See: https://github.com/jazzband/pip-tools -# - -Django==4.2.5 -django-tailwind[reload] -django-unfold -django-crispy-forms -crispy-tailwind -pillow - -phonenumbers -django-phonenumber-field - -pip-tools -pre-commit - -# Copilot suggestions -# django-extensions -# django-allauth -# django-address -# django-money -# django-countries diff --git a/afb/requirements.txt b/afb/requirements.txt deleted file mode 100644 index 8c366a6d..00000000 --- a/afb/requirements.txt +++ /dev/null @@ -1,74 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --output-file=requirements.txt requirements.in -# -asgiref==3.7.2 - # via django -build==1.0.3 - # via pip-tools -cfgv==3.4.0 - # via pre-commit -click==8.1.7 - # via pip-tools -crispy-tailwind==0.5.0 - # via -r requirements.in -distlib==0.3.7 - # via virtualenv -django==4.2.5 - # via - # -r requirements.in - # django-browser-reload - # django-crispy-forms - # django-phonenumber-field - # django-tailwind - # django-unfold -django-browser-reload==1.11.0 - # via django-tailwind -django-crispy-forms==2.0 - # via - # -r requirements.in - # crispy-tailwind -django-phonenumber-field==7.1.0 - # via -r requirements.in -django-tailwind[reload]==3.6.0 - # via -r requirements.in -django-unfold==0.10.0 - # via -r requirements.in -filelock==3.12.4 - # via virtualenv -identify==2.5.29 - # via pre-commit -importlib-metadata==6.7.0 - # via django-unfold -nodeenv==1.8.0 - # via pre-commit -packaging==23.1 - # via build -phonenumbers==8.13.22 - # via -r requirements.in -pillow==10.0.1 - # via -r requirements.in -pip-tools==7.3.0 - # via -r requirements.in -platformdirs==3.10.0 - # via virtualenv -pre-commit==3.4.0 - # via -r requirements.in -pyproject-hooks==1.0.0 - # via build -pyyaml==6.0.1 - # via pre-commit -sqlparse==0.4.4 - # via django -virtualenv==20.24.5 - # via pre-commit -wheel==0.41.2 - # via pip-tools -zipp==3.17.0 - # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -# pip -# setuptools diff --git a/afb/theme/__init__.py b/afb/theme/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/afb/theme/apps.py b/afb/theme/apps.py deleted file mode 100644 index dd24136d..00000000 --- a/afb/theme/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class ThemeConfig(AppConfig): - name = "theme" diff --git a/afb/theme/static_src/.gitignore b/afb/theme/static_src/.gitignore deleted file mode 100644 index 3c3629e6..00000000 --- a/afb/theme/static_src/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/afb/theme/static_src/package-lock.json b/afb/theme/static_src/package-lock.json deleted file mode 100644 index da286b17..00000000 --- a/afb/theme/static_src/package-lock.json +++ /dev/null @@ -1,1613 +0,0 @@ -{ - "name": "theme", - "version": "3.6.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "theme", - "version": "3.6.0", - "license": "MIT", - "devDependencies": { - "@tailwindcss/aspect-ratio": "^0.4.2", - "@tailwindcss/forms": "^0.5.3", - "@tailwindcss/line-clamp": "^0.4.4", - "@tailwindcss/typography": "^0.5.9", - "cross-env": "^7.0.3", - "postcss": "^8.4.24", - "postcss-import": "^15.1.0", - "postcss-nested": "^6.0.1", - "postcss-simple-vars": "^7.0.1", - "rimraf": "^5.0.1", - "tailwindcss": "^3.3.2" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@tailwindcss/aspect-ratio": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", - "integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==", - "dev": true, - "peerDependencies": { - "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" - } - }, - "node_modules/@tailwindcss/forms": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.6.tgz", - "integrity": "sha512-Fw+2BJ0tmAwK/w01tEFL5TiaJBX1NLT1/YbWgvm7ws3Qcn11kiXxzNTEQDMs5V3mQemhB56l3u0i9dwdzSQldA==", - "dev": true, - "dependencies": { - "mini-svg-data-uri": "^1.2.3" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" - } - }, - "node_modules/@tailwindcss/line-clamp": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz", - "integrity": "sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==", - "dev": true, - "peerDependencies": { - "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" - } - }, - "node_modules/@tailwindcss/typography": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", - "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", - "dev": true, - "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jiti": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", - "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "dev": true, - "bin": { - "mini-svg-data-uri": "cli.js" - } - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nested/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-simple-vars": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz", - "integrity": "sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==", - "dev": true, - "engines": { - "node": ">=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.1" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.5.tgz", - "integrity": "sha512-qWhv7PF1V95QPvRoUGHxOtnAlEvlXBylMZcjUR9pAumMmveFtcHJRXGIr+TkjfNJVQypqv2qcDiiars2y1PsSg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", - "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", - "dev": true, - "dependencies": { - "glob": "^10.2.5" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", - "dev": true, - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", - "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", - "dev": true, - "engines": { - "node": ">= 14" - } - } - } -} diff --git a/afb/theme/static_src/package.json b/afb/theme/static_src/package.json deleted file mode 100644 index 55ac6e0a..00000000 --- a/afb/theme/static_src/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "theme", - "version": "3.6.0", - "description": "", - "scripts": { - "start": "npm run dev", - "build": "npm run build:clean && npm run build:tailwind", - "build:clean": "rimraf ../static/css/dist", - "build:tailwind": "cross-env NODE_ENV=production tailwindcss --postcss -i ./src/styles.css -o ../static/css/dist/styles.css --minify", - "dev": "cross-env NODE_ENV=development tailwindcss --postcss -i ./src/styles.css -o ../static/css/dist/styles.css -w", - "tailwindcss": "node ./node_modules/tailwindcss/lib/cli.js" - }, - "keywords": [], - "author": "", - "license": "MIT", - "devDependencies": { - "@tailwindcss/aspect-ratio": "^0.4.2", - "@tailwindcss/forms": "^0.5.3", - "@tailwindcss/line-clamp": "^0.4.4", - "@tailwindcss/typography": "^0.5.9", - "cross-env": "^7.0.3", - "postcss": "^8.4.24", - "postcss-import": "^15.1.0", - "postcss-nested": "^6.0.1", - "postcss-simple-vars": "^7.0.1", - "rimraf": "^5.0.1", - "tailwindcss": "^3.3.2" - } -} diff --git a/afb/theme/static_src/postcss.config.js b/afb/theme/static_src/postcss.config.js deleted file mode 100644 index 0b09b348..00000000 --- a/afb/theme/static_src/postcss.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - plugins: { - "postcss-import": {}, - "postcss-simple-vars": {}, - "postcss-nested": {} - }, -} diff --git a/afb/theme/static_src/src/styles.css b/afb/theme/static_src/src/styles.css deleted file mode 100644 index b5c61c95..00000000 --- a/afb/theme/static_src/src/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/afb/theme/static_src/tailwind.config.js b/afb/theme/static_src/tailwind.config.js deleted file mode 100644 index 28f3b7ba..00000000 --- a/afb/theme/static_src/tailwind.config.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * This is a minimal config. - * - * If you need the full config, get it from here: - * https://unpkg.com/browse/tailwindcss@latest/stubs/defaultConfig.stub.js - */ - -module.exports = { - content: [ - /** - * HTML. Paths to Django template files that will contain Tailwind CSS classes. - */ - - /* Templates within theme app (/templates), e.g. base.html. */ - '../templates/**/*.html', - - /* - * Main templates directory of the project (BASE_DIR/templates). - * Adjust the following line to match your project structure. - */ - '../../templates/**/*.html', - - /* - * Templates in other django apps (BASE_DIR//templates). - * Adjust the following line to match your project structure. - */ - '../../**/templates/**/*.html', - - /** - * JS: If you use Tailwind CSS in JavaScript, uncomment the following lines and make sure - * patterns match your project structure. - */ - /* JS 1: Ignore any JavaScript in node_modules folder. */ - // '!../../**/node_modules', - /* JS 2: Process all JavaScript files in the project. */ - // '../../**/*.js', - - /** - * Python: If you use Tailwind CSS classes in Python, uncomment the following line - * and make sure the pattern below matches your project structure. - */ - // '../../**/*.py' - ], - theme: { - extend: {}, - }, - plugins: [ - /** - * '@tailwindcss/forms' is the forms plugin that provides a minimal styling - * for forms. If you don't like it or have own styling for forms, - * comment the line below to disable '@tailwindcss/forms'. - */ - require('@tailwindcss/forms'), - require('@tailwindcss/typography'), - require('@tailwindcss/line-clamp'), - require('@tailwindcss/aspect-ratio'), - ], -} diff --git a/afb/theme/templates/base.html b/afb/theme/templates/base.html deleted file mode 100644 index 7500706b..00000000 --- a/afb/theme/templates/base.html +++ /dev/null @@ -1,27 +0,0 @@ - -{% load static tailwind_tags %} - - - - - - - - - {% tailwind_css %} - - {% block metaContent %}{% endblock %} - - {% block title %}AFB{% endblock %} - - - - - - - - - {% block bodyContent %}{% endblock %} - - - diff --git a/afb-vite/afb/__init__.py b/apps/afb-vite/afb/__init__.py similarity index 100% rename from afb-vite/afb/__init__.py rename to apps/afb-vite/afb/__init__.py diff --git a/afb-vite/afb/asgi.py b/apps/afb-vite/afb/asgi.py similarity index 100% rename from afb-vite/afb/asgi.py rename to apps/afb-vite/afb/asgi.py diff --git a/afb-vite/afb/settings.py b/apps/afb-vite/afb/settings.py similarity index 100% rename from afb-vite/afb/settings.py rename to apps/afb-vite/afb/settings.py diff --git a/afb-vite/afb/urls.py b/apps/afb-vite/afb/urls.py similarity index 100% rename from afb-vite/afb/urls.py rename to apps/afb-vite/afb/urls.py diff --git a/afb-vite/afb/wsgi.py b/apps/afb-vite/afb/wsgi.py similarity index 100% rename from afb-vite/afb/wsgi.py rename to apps/afb-vite/afb/wsgi.py diff --git a/afb-vite/afbcore/__init__.py b/apps/afb-vite/afbcore/__init__.py similarity index 100% rename from afb-vite/afbcore/__init__.py rename to apps/afb-vite/afbcore/__init__.py diff --git a/afb-vite/afbcore/admin.py b/apps/afb-vite/afbcore/admin.py similarity index 100% rename from afb-vite/afbcore/admin.py rename to apps/afb-vite/afbcore/admin.py diff --git a/afb-vite/afbcore/apps.py b/apps/afb-vite/afbcore/apps.py similarity index 100% rename from afb-vite/afbcore/apps.py rename to apps/afb-vite/afbcore/apps.py diff --git a/afb-vite/afbcore/forms/__init__.py b/apps/afb-vite/afbcore/forms/__init__.py similarity index 100% rename from afb-vite/afbcore/forms/__init__.py rename to apps/afb-vite/afbcore/forms/__init__.py diff --git a/afb-vite/afbcore/forms/client.py b/apps/afb-vite/afbcore/forms/client.py similarity index 100% rename from afb-vite/afbcore/forms/client.py rename to apps/afb-vite/afbcore/forms/client.py diff --git a/afb-vite/afbcore/migrations/0001_initial.py b/apps/afb-vite/afbcore/migrations/0001_initial.py similarity index 100% rename from afb-vite/afbcore/migrations/0001_initial.py rename to apps/afb-vite/afbcore/migrations/0001_initial.py diff --git a/afb-vite/afbcore/migrations/__init__.py b/apps/afb-vite/afbcore/migrations/__init__.py similarity index 100% rename from afb-vite/afbcore/migrations/__init__.py rename to apps/afb-vite/afbcore/migrations/__init__.py diff --git a/afb-vite/afbcore/models/__init__.py b/apps/afb-vite/afbcore/models/__init__.py similarity index 100% rename from afb-vite/afbcore/models/__init__.py rename to apps/afb-vite/afbcore/models/__init__.py diff --git a/afb-vite/afbcore/models/branch.py b/apps/afb-vite/afbcore/models/branch.py similarity index 100% rename from afb-vite/afbcore/models/branch.py rename to apps/afb-vite/afbcore/models/branch.py diff --git a/afb-vite/afbcore/models/client.py b/apps/afb-vite/afbcore/models/client.py similarity index 100% rename from afb-vite/afbcore/models/client.py rename to apps/afb-vite/afbcore/models/client.py diff --git a/afb-vite/afbcore/models/delivery.py b/apps/afb-vite/afbcore/models/delivery.py similarity index 100% rename from afb-vite/afbcore/models/delivery.py rename to apps/afb-vite/afbcore/models/delivery.py diff --git a/afb-vite/afbcore/models/food_available.py b/apps/afb-vite/afbcore/models/food_available.py similarity index 100% rename from afb-vite/afbcore/models/food_available.py rename to apps/afb-vite/afbcore/models/food_available.py diff --git a/afb-vite/afbcore/models/pet.py b/apps/afb-vite/afbcore/models/pet.py similarity index 100% rename from afb-vite/afbcore/models/pet.py rename to apps/afb-vite/afbcore/models/pet.py diff --git a/afb-vite/afbcore/models/pet_request.py b/apps/afb-vite/afbcore/models/pet_request.py similarity index 100% rename from afb-vite/afbcore/models/pet_request.py rename to apps/afb-vite/afbcore/models/pet_request.py diff --git a/afb-vite/afbcore/models/users/__init__.py b/apps/afb-vite/afbcore/models/users/__init__.py similarity index 100% rename from afb-vite/afbcore/models/users/__init__.py rename to apps/afb-vite/afbcore/models/users/__init__.py diff --git a/afb-vite/afbcore/models/users/base_profile.py b/apps/afb-vite/afbcore/models/users/base_profile.py similarity index 100% rename from afb-vite/afbcore/models/users/base_profile.py rename to apps/afb-vite/afbcore/models/users/base_profile.py diff --git a/afb-vite/afbcore/models/users/client.py b/apps/afb-vite/afbcore/models/users/client.py similarity index 100% rename from afb-vite/afbcore/models/users/client.py rename to apps/afb-vite/afbcore/models/users/client.py diff --git a/afb-vite/afbcore/models/users/manager.py b/apps/afb-vite/afbcore/models/users/manager.py similarity index 100% rename from afb-vite/afbcore/models/users/manager.py rename to apps/afb-vite/afbcore/models/users/manager.py diff --git a/afb-vite/afbcore/models/users/user.py b/apps/afb-vite/afbcore/models/users/user.py similarity index 100% rename from afb-vite/afbcore/models/users/user.py rename to apps/afb-vite/afbcore/models/users/user.py diff --git a/afb-vite/afbcore/models/users/volunteer.py b/apps/afb-vite/afbcore/models/users/volunteer.py similarity index 100% rename from afb-vite/afbcore/models/users/volunteer.py rename to apps/afb-vite/afbcore/models/users/volunteer.py diff --git a/afb-vite/afbcore/templates/about.html b/apps/afb-vite/afbcore/templates/about.html similarity index 100% rename from afb-vite/afbcore/templates/about.html rename to apps/afb-vite/afbcore/templates/about.html diff --git a/afb-vite/afbcore/templates/afbcore/client_request.html b/apps/afb-vite/afbcore/templates/afbcore/client_request.html similarity index 100% rename from afb-vite/afbcore/templates/afbcore/client_request.html rename to apps/afb-vite/afbcore/templates/afbcore/client_request.html diff --git a/afb-vite/afbcore/templates/afbcore/client_request_hardcoded_example.html b/apps/afb-vite/afbcore/templates/afbcore/client_request_hardcoded_example.html similarity index 100% rename from afb-vite/afbcore/templates/afbcore/client_request_hardcoded_example.html rename to apps/afb-vite/afbcore/templates/afbcore/client_request_hardcoded_example.html diff --git a/afb-vite/afbcore/templates/afbcore/client_signup_form.html b/apps/afb-vite/afbcore/templates/afbcore/client_signup_form.html similarity index 100% rename from afb-vite/afbcore/templates/afbcore/client_signup_form.html rename to apps/afb-vite/afbcore/templates/afbcore/client_signup_form.html diff --git a/afb-vite/afbcore/templates/afbcore/login.html b/apps/afb-vite/afbcore/templates/afbcore/login.html similarity index 100% rename from afb-vite/afbcore/templates/afbcore/login.html rename to apps/afb-vite/afbcore/templates/afbcore/login.html diff --git a/afb-vite/afbcore/templates/appshell.html b/apps/afb-vite/afbcore/templates/appshell.html similarity index 100% rename from afb-vite/afbcore/templates/appshell.html rename to apps/afb-vite/afbcore/templates/appshell.html diff --git a/afb-vite/afbcore/templates/base.html b/apps/afb-vite/afbcore/templates/base.html similarity index 100% rename from afb-vite/afbcore/templates/base.html rename to apps/afb-vite/afbcore/templates/base.html diff --git a/afb-vite/afbcore/templates/dashboard/client.html b/apps/afb-vite/afbcore/templates/dashboard/client.html similarity index 100% rename from afb-vite/afbcore/templates/dashboard/client.html rename to apps/afb-vite/afbcore/templates/dashboard/client.html diff --git a/afb-vite/afbcore/tests.py b/apps/afb-vite/afbcore/tests.py similarity index 100% rename from afb-vite/afbcore/tests.py rename to apps/afb-vite/afbcore/tests.py diff --git a/afb-vite/afbcore/views/__init__.py b/apps/afb-vite/afbcore/views/__init__.py similarity index 100% rename from afb-vite/afbcore/views/__init__.py rename to apps/afb-vite/afbcore/views/__init__.py diff --git a/afb-vite/afbcore/views/client.py b/apps/afb-vite/afbcore/views/client.py similarity index 100% rename from afb-vite/afbcore/views/client.py rename to apps/afb-vite/afbcore/views/client.py diff --git a/afb-vite/afbcore/views/dashboard.py b/apps/afb-vite/afbcore/views/dashboard.py similarity index 100% rename from afb-vite/afbcore/views/dashboard.py rename to apps/afb-vite/afbcore/views/dashboard.py diff --git a/afb-vite/afbcore/views/manager.py b/apps/afb-vite/afbcore/views/manager.py similarity index 100% rename from afb-vite/afbcore/views/manager.py rename to apps/afb-vite/afbcore/views/manager.py diff --git a/afb-vite/afbcore/views/volunteer.py b/apps/afb-vite/afbcore/views/volunteer.py similarity index 100% rename from afb-vite/afbcore/views/volunteer.py rename to apps/afb-vite/afbcore/views/volunteer.py diff --git a/afb-vite/manage.py b/apps/afb-vite/manage.py similarity index 100% rename from afb-vite/manage.py rename to apps/afb-vite/manage.py diff --git a/afb-vite/requirements.in b/apps/afb-vite/requirements.in similarity index 100% rename from afb-vite/requirements.in rename to apps/afb-vite/requirements.in diff --git a/afb-vite/requirements.txt b/apps/afb-vite/requirements.txt similarity index 100% rename from afb-vite/requirements.txt rename to apps/afb-vite/requirements.txt diff --git a/afb-vite/static/img/afb_icon_black.png b/apps/afb-vite/static/img/afb_icon_black.png similarity index 100% rename from afb-vite/static/img/afb_icon_black.png rename to apps/afb-vite/static/img/afb_icon_black.png diff --git a/afb-vite/static/img/afb_icon_colour.png b/apps/afb-vite/static/img/afb_icon_colour.png similarity index 100% rename from afb-vite/static/img/afb_icon_colour.png rename to apps/afb-vite/static/img/afb_icon_colour.png diff --git a/afb-vite/static/img/afb_icon_white.png b/apps/afb-vite/static/img/afb_icon_white.png similarity index 100% rename from afb-vite/static/img/afb_icon_white.png rename to apps/afb-vite/static/img/afb_icon_white.png diff --git a/afb-vite/static/img/afb_logo_horizontal_black.png b/apps/afb-vite/static/img/afb_logo_horizontal_black.png similarity index 100% rename from afb-vite/static/img/afb_logo_horizontal_black.png rename to apps/afb-vite/static/img/afb_logo_horizontal_black.png diff --git a/afb-vite/static/img/afb_logo_horizontal_colour.png b/apps/afb-vite/static/img/afb_logo_horizontal_colour.png similarity index 100% rename from afb-vite/static/img/afb_logo_horizontal_colour.png rename to apps/afb-vite/static/img/afb_logo_horizontal_colour.png diff --git a/afb-vite/static/img/afb_logo_horizontal_white.png b/apps/afb-vite/static/img/afb_logo_horizontal_white.png similarity index 100% rename from afb-vite/static/img/afb_logo_horizontal_white.png rename to apps/afb-vite/static/img/afb_logo_horizontal_white.png diff --git a/afb-vite/static/img/afb_logo_vertical_black.png b/apps/afb-vite/static/img/afb_logo_vertical_black.png similarity index 100% rename from afb-vite/static/img/afb_logo_vertical_black.png rename to apps/afb-vite/static/img/afb_logo_vertical_black.png diff --git a/afb-vite/static/img/afb_logo_vertical_colour.png b/apps/afb-vite/static/img/afb_logo_vertical_colour.png similarity index 100% rename from afb-vite/static/img/afb_logo_vertical_colour.png rename to apps/afb-vite/static/img/afb_logo_vertical_colour.png diff --git a/afb-vite/static/img/afb_logo_vertical_white.png b/apps/afb-vite/static/img/afb_logo_vertical_white.png similarity index 100% rename from afb-vite/static/img/afb_logo_vertical_white.png rename to apps/afb-vite/static/img/afb_logo_vertical_white.png diff --git a/afb-vite/static/img/favicons/android-icon-144x144.png b/apps/afb-vite/static/img/favicons/android-icon-144x144.png similarity index 100% rename from afb-vite/static/img/favicons/android-icon-144x144.png rename to apps/afb-vite/static/img/favicons/android-icon-144x144.png diff --git a/afb-vite/static/img/favicons/android-icon-192x192.png b/apps/afb-vite/static/img/favicons/android-icon-192x192.png similarity index 100% rename from afb-vite/static/img/favicons/android-icon-192x192.png rename to apps/afb-vite/static/img/favicons/android-icon-192x192.png diff --git a/afb-vite/static/img/favicons/android-icon-36x36.png b/apps/afb-vite/static/img/favicons/android-icon-36x36.png similarity index 100% rename from afb-vite/static/img/favicons/android-icon-36x36.png rename to apps/afb-vite/static/img/favicons/android-icon-36x36.png diff --git a/afb-vite/static/img/favicons/android-icon-48x48.png b/apps/afb-vite/static/img/favicons/android-icon-48x48.png similarity index 100% rename from afb-vite/static/img/favicons/android-icon-48x48.png rename to apps/afb-vite/static/img/favicons/android-icon-48x48.png diff --git a/afb-vite/static/img/favicons/android-icon-72x72.png b/apps/afb-vite/static/img/favicons/android-icon-72x72.png similarity index 100% rename from afb-vite/static/img/favicons/android-icon-72x72.png rename to apps/afb-vite/static/img/favicons/android-icon-72x72.png diff --git a/afb-vite/static/img/favicons/android-icon-96x96.png b/apps/afb-vite/static/img/favicons/android-icon-96x96.png similarity index 100% rename from afb-vite/static/img/favicons/android-icon-96x96.png rename to apps/afb-vite/static/img/favicons/android-icon-96x96.png diff --git a/afb-vite/static/img/favicons/apple-icon-114x114.png b/apps/afb-vite/static/img/favicons/apple-icon-114x114.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-114x114.png rename to apps/afb-vite/static/img/favicons/apple-icon-114x114.png diff --git a/afb-vite/static/img/favicons/apple-icon-120x120.png b/apps/afb-vite/static/img/favicons/apple-icon-120x120.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-120x120.png rename to apps/afb-vite/static/img/favicons/apple-icon-120x120.png diff --git a/afb-vite/static/img/favicons/apple-icon-144x144.png b/apps/afb-vite/static/img/favicons/apple-icon-144x144.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-144x144.png rename to apps/afb-vite/static/img/favicons/apple-icon-144x144.png diff --git a/afb-vite/static/img/favicons/apple-icon-152x152.png b/apps/afb-vite/static/img/favicons/apple-icon-152x152.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-152x152.png rename to apps/afb-vite/static/img/favicons/apple-icon-152x152.png diff --git a/afb-vite/static/img/favicons/apple-icon-180x180.png b/apps/afb-vite/static/img/favicons/apple-icon-180x180.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-180x180.png rename to apps/afb-vite/static/img/favicons/apple-icon-180x180.png diff --git a/afb-vite/static/img/favicons/apple-icon-57x57.png b/apps/afb-vite/static/img/favicons/apple-icon-57x57.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-57x57.png rename to apps/afb-vite/static/img/favicons/apple-icon-57x57.png diff --git a/afb-vite/static/img/favicons/apple-icon-60x60.png b/apps/afb-vite/static/img/favicons/apple-icon-60x60.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-60x60.png rename to apps/afb-vite/static/img/favicons/apple-icon-60x60.png diff --git a/afb-vite/static/img/favicons/apple-icon-72x72.png b/apps/afb-vite/static/img/favicons/apple-icon-72x72.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-72x72.png rename to apps/afb-vite/static/img/favicons/apple-icon-72x72.png diff --git a/afb-vite/static/img/favicons/apple-icon-76x76.png b/apps/afb-vite/static/img/favicons/apple-icon-76x76.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-76x76.png rename to apps/afb-vite/static/img/favicons/apple-icon-76x76.png diff --git a/afb-vite/static/img/favicons/apple-icon-precomposed.png b/apps/afb-vite/static/img/favicons/apple-icon-precomposed.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon-precomposed.png rename to apps/afb-vite/static/img/favicons/apple-icon-precomposed.png diff --git a/afb-vite/static/img/favicons/apple-icon.png b/apps/afb-vite/static/img/favicons/apple-icon.png similarity index 100% rename from afb-vite/static/img/favicons/apple-icon.png rename to apps/afb-vite/static/img/favicons/apple-icon.png diff --git a/afb-vite/static/img/favicons/browserconfig.xml b/apps/afb-vite/static/img/favicons/browserconfig.xml similarity index 100% rename from afb-vite/static/img/favicons/browserconfig.xml rename to apps/afb-vite/static/img/favicons/browserconfig.xml diff --git a/afb-vite/static/img/favicons/favicon-16x16.png b/apps/afb-vite/static/img/favicons/favicon-16x16.png similarity index 100% rename from afb-vite/static/img/favicons/favicon-16x16.png rename to apps/afb-vite/static/img/favicons/favicon-16x16.png diff --git a/afb-vite/static/img/favicons/favicon-32x32.png b/apps/afb-vite/static/img/favicons/favicon-32x32.png similarity index 100% rename from afb-vite/static/img/favicons/favicon-32x32.png rename to apps/afb-vite/static/img/favicons/favicon-32x32.png diff --git a/afb-vite/static/img/favicons/favicon-96x96.png b/apps/afb-vite/static/img/favicons/favicon-96x96.png similarity index 100% rename from afb-vite/static/img/favicons/favicon-96x96.png rename to apps/afb-vite/static/img/favicons/favicon-96x96.png diff --git a/afb-vite/static/img/favicons/favicon.ico b/apps/afb-vite/static/img/favicons/favicon.ico similarity index 100% rename from afb-vite/static/img/favicons/favicon.ico rename to apps/afb-vite/static/img/favicons/favicon.ico diff --git a/afb-vite/static/img/favicons/manifest.json b/apps/afb-vite/static/img/favicons/manifest.json similarity index 100% rename from afb-vite/static/img/favicons/manifest.json rename to apps/afb-vite/static/img/favicons/manifest.json diff --git a/afb-vite/static/img/favicons/ms-icon-144x144.png b/apps/afb-vite/static/img/favicons/ms-icon-144x144.png similarity index 100% rename from afb-vite/static/img/favicons/ms-icon-144x144.png rename to apps/afb-vite/static/img/favicons/ms-icon-144x144.png diff --git a/afb-vite/static/img/favicons/ms-icon-150x150.png b/apps/afb-vite/static/img/favicons/ms-icon-150x150.png similarity index 100% rename from afb-vite/static/img/favicons/ms-icon-150x150.png rename to apps/afb-vite/static/img/favicons/ms-icon-150x150.png diff --git a/afb-vite/static/img/favicons/ms-icon-310x310.png b/apps/afb-vite/static/img/favicons/ms-icon-310x310.png similarity index 100% rename from afb-vite/static/img/favicons/ms-icon-310x310.png rename to apps/afb-vite/static/img/favicons/ms-icon-310x310.png diff --git a/afb-vite/static/img/favicons/ms-icon-70x70.png b/apps/afb-vite/static/img/favicons/ms-icon-70x70.png similarity index 100% rename from afb-vite/static/img/favicons/ms-icon-70x70.png rename to apps/afb-vite/static/img/favicons/ms-icon-70x70.png diff --git a/afb-vite/ui/.gitignore b/apps/afb-vite/ui/.gitignore similarity index 100% rename from afb-vite/ui/.gitignore rename to apps/afb-vite/ui/.gitignore diff --git a/afb-vite/ui/.prettierrc.json b/apps/afb-vite/ui/.prettierrc.json similarity index 100% rename from afb-vite/ui/.prettierrc.json rename to apps/afb-vite/ui/.prettierrc.json diff --git a/afb-vite/ui/README.md b/apps/afb-vite/ui/README.md similarity index 100% rename from afb-vite/ui/README.md rename to apps/afb-vite/ui/README.md diff --git a/afb-vite/ui/index.html b/apps/afb-vite/ui/index.html similarity index 100% rename from afb-vite/ui/index.html rename to apps/afb-vite/ui/index.html diff --git a/afb-vite/ui/package.json b/apps/afb-vite/ui/package.json similarity index 100% rename from afb-vite/ui/package.json rename to apps/afb-vite/ui/package.json diff --git a/afb-vite/ui/postcss.config.js b/apps/afb-vite/ui/postcss.config.js similarity index 100% rename from afb-vite/ui/postcss.config.js rename to apps/afb-vite/ui/postcss.config.js diff --git a/afb-vite/ui/powered-by-vitawind-bright.png b/apps/afb-vite/ui/powered-by-vitawind-bright.png similarity index 100% rename from afb-vite/ui/powered-by-vitawind-bright.png rename to apps/afb-vite/ui/powered-by-vitawind-bright.png diff --git a/afb-vite/ui/public/favicon.ico b/apps/afb-vite/ui/public/favicon.ico similarity index 100% rename from afb-vite/ui/public/favicon.ico rename to apps/afb-vite/ui/public/favicon.ico diff --git a/afb-vite/ui/src/App.vue b/apps/afb-vite/ui/src/App.vue similarity index 100% rename from afb-vite/ui/src/App.vue rename to apps/afb-vite/ui/src/App.vue diff --git a/afb-vite/ui/src/assets/logo.png b/apps/afb-vite/ui/src/assets/logo.png similarity index 100% rename from afb-vite/ui/src/assets/logo.png rename to apps/afb-vite/ui/src/assets/logo.png diff --git a/afb-vite/ui/src/assets/powered-by-vitawind-bright.png b/apps/afb-vite/ui/src/assets/powered-by-vitawind-bright.png similarity index 100% rename from afb-vite/ui/src/assets/powered-by-vitawind-bright.png rename to apps/afb-vite/ui/src/assets/powered-by-vitawind-bright.png diff --git a/afb-vite/ui/src/components/DropdownNav.vue b/apps/afb-vite/ui/src/components/DropdownNav.vue similarity index 100% rename from afb-vite/ui/src/components/DropdownNav.vue rename to apps/afb-vite/ui/src/components/DropdownNav.vue diff --git a/afb-vite/ui/src/components/HelloWorld.vue b/apps/afb-vite/ui/src/components/HelloWorld.vue similarity index 100% rename from afb-vite/ui/src/components/HelloWorld.vue rename to apps/afb-vite/ui/src/components/HelloWorld.vue diff --git a/afb-vite/ui/src/env.d.ts b/apps/afb-vite/ui/src/env.d.ts similarity index 100% rename from afb-vite/ui/src/env.d.ts rename to apps/afb-vite/ui/src/env.d.ts diff --git a/afb-vite/ui/src/index.css b/apps/afb-vite/ui/src/index.css similarity index 100% rename from afb-vite/ui/src/index.css rename to apps/afb-vite/ui/src/index.css diff --git a/afb-vite/ui/src/main.ts b/apps/afb-vite/ui/src/main.ts similarity index 100% rename from afb-vite/ui/src/main.ts rename to apps/afb-vite/ui/src/main.ts diff --git a/afb-vite/ui/tailwind.config.js b/apps/afb-vite/ui/tailwind.config.js similarity index 100% rename from afb-vite/ui/tailwind.config.js rename to apps/afb-vite/ui/tailwind.config.js diff --git a/afb-vite/ui/tsconfig.json b/apps/afb-vite/ui/tsconfig.json similarity index 100% rename from afb-vite/ui/tsconfig.json rename to apps/afb-vite/ui/tsconfig.json diff --git a/afb-vite/ui/vite.config.ts b/apps/afb-vite/ui/vite.config.ts similarity index 100% rename from afb-vite/ui/vite.config.ts rename to apps/afb-vite/ui/vite.config.ts diff --git a/afb-vite/ui/yarn.lock b/apps/afb-vite/ui/yarn.lock similarity index 100% rename from afb-vite/ui/yarn.lock rename to apps/afb-vite/ui/yarn.lock