├── .gitignore ├── README.md ├── chat ├── __init__.py ├── apps.py ├── consumers.py ├── management │ ├── __init__.py │ └── commands │ │ ├── __init__.py │ │ └── train.py ├── migrations │ └── __init__.py ├── routing.py ├── tasks.py ├── templates │ └── chat │ │ └── chat.html ├── urls.py └── views.py ├── config ├── __init__.py ├── asgi.py ├── celery.py ├── settings │ ├── __init__.py │ ├── base.py │ ├── development.py │ └── production.py ├── urls.py └── wsgi.py ├── entrypoint.sh ├── manage.py ├── requirements.txt └── theme ├── __init__.py ├── apps.py ├── static_src ├── .gitignore ├── package-lock.json ├── package.json ├── postcss.config.js ├── src │ └── styles.css └── tailwind.config.js └── templates └── base.html /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | 131 | /data 132 | 133 | media/ 134 | mediafiles/ 135 | staticfiles/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ChatBot Using Django 2 | 3 | Build a Chatbot Using Python, Django 4 | 5 | ![Demo](https://user-images.githubusercontent.com/66206865/202419615-cf68408c-4a21-4930-bb73-bd00c455d497.png) 6 | 7 | ## Technologies Used 8 | - ChatterBot Library - To generate automated responses to a user’s input. 9 | - Celery - Getting the automated response from a machine-learning dialog engine is going to take a while. So Celery will be used to perform this task in the background. 10 | - WebSockets using Django Channels - To send to the client the automated response generated by the machine learning model immediately when it’s available. 11 | - Redis - Will be used as a message broker and result backend for Celery. In addition, it will be used as a channel layer for WebSocket communication. 12 | - TailwindCSS - To create the user interface. 13 | 14 | Related blog post: https://dev.to/documatic/build-a-chatbot-using-python-django-46hb 15 | -------------------------------------------------------------------------------- /chat/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawn0123/chatbot_using_django/e7547c17b41ca92524529fc5243882041299453b/chat/__init__.py -------------------------------------------------------------------------------- /chat/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ChatConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'chat' 7 | -------------------------------------------------------------------------------- /chat/consumers.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | from asgiref.sync import async_to_sync 4 | from channels.generic.websocket import WebsocketConsumer 5 | 6 | from .tasks import get_response 7 | 8 | 9 | class ChatConsumer(WebsocketConsumer): 10 | def receive(self, text_data): 11 | text_data_json = json.loads(text_data) 12 | get_response.delay(self.channel_name, text_data_json) 13 | 14 | async_to_sync(self.channel_layer.send)( 15 | self.channel_name, 16 | { 17 | "type": "chat_message", 18 | "text": {"msg": text_data_json["text"], "source": "user"}, 19 | }, 20 | ) 21 | 22 | def chat_message(self, event): 23 | text = event["text"] 24 | self.send(text_data=json.dumps({"text": text})) 25 | -------------------------------------------------------------------------------- /chat/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawn0123/chatbot_using_django/e7547c17b41ca92524529fc5243882041299453b/chat/management/__init__.py -------------------------------------------------------------------------------- /chat/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawn0123/chatbot_using_django/e7547c17b41ca92524529fc5243882041299453b/chat/management/commands/__init__.py -------------------------------------------------------------------------------- /chat/management/commands/train.py: -------------------------------------------------------------------------------- 1 | from django.core.management.base import BaseCommand 2 | from chatterbot import ChatBot 3 | from chatterbot.ext.django_chatterbot import settings 4 | from chatterbot.trainers import ListTrainer 5 | 6 | 7 | class Command(BaseCommand): 8 | help = "Training the chatbot" 9 | 10 | def handle(self, *args, **options): 11 | chatterbot = ChatBot(**settings.CHATTERBOT) 12 | trainer = ListTrainer(chatterbot) 13 | trainer.train( 14 | [ 15 | "Hello", 16 | "Hi there!", 17 | "How are you doing?", 18 | "I'm doing great.", 19 | "That is good to hear", 20 | "Thank you.", 21 | "You're welcome.", 22 | ] 23 | ) 24 | self.stdout.write(self.style.SUCCESS("Successfull!")) 25 | -------------------------------------------------------------------------------- /chat/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawn0123/chatbot_using_django/e7547c17b41ca92524529fc5243882041299453b/chat/migrations/__init__.py -------------------------------------------------------------------------------- /chat/routing.py: -------------------------------------------------------------------------------- 1 | from django.urls import re_path 2 | 3 | from . import consumers 4 | 5 | websocket_urlpatterns = [ 6 | re_path(r"ws/chat/$", consumers.ChatConsumer.as_asgi()), 7 | ] 8 | -------------------------------------------------------------------------------- /chat/tasks.py: -------------------------------------------------------------------------------- 1 | from asgiref.sync import async_to_sync 2 | from celery import shared_task 3 | from channels.layers import get_channel_layer 4 | from chatterbot import ChatBot 5 | from chatterbot.ext.django_chatterbot import settings 6 | 7 | channel_layer = get_channel_layer() 8 | 9 | 10 | @shared_task 11 | def get_response(channel_name, input_data): 12 | chatterbot = ChatBot(**settings.CHATTERBOT) 13 | response = chatterbot.get_response(input_data) 14 | response_data = response.serialize() 15 | 16 | async_to_sync(channel_layer.send)( 17 | channel_name, 18 | { 19 | "type": "chat.message", 20 | "text": {"msg": response_data["text"], "source": "bot"}, 21 | }, 22 | ) 23 | -------------------------------------------------------------------------------- /chat/templates/chat/chat.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} {% block body %} 2 |
3 |

4 |
8 |
9 | 15 | 22 |
23 |
24 | 25 | {% endblock %} {% block scripts%} 26 | 84 | {% endblock %} 85 | -------------------------------------------------------------------------------- /chat/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from .views import ChatView 3 | 4 | 5 | app_name = "chat" 6 | 7 | urlpatterns = [path("", ChatView.as_view(), name="chat_view")] 8 | -------------------------------------------------------------------------------- /chat/views.py: -------------------------------------------------------------------------------- 1 | from django.views.generic import TemplateView 2 | 3 | 4 | class ChatView(TemplateView): 5 | template_name: str = "chat/chat.html" 6 | -------------------------------------------------------------------------------- /config/__init__.py: -------------------------------------------------------------------------------- 1 | from .celery import app as celery_app 2 | 3 | __all__ = ('celery_app',) 4 | -------------------------------------------------------------------------------- /config/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for config project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from channels.auth import AuthMiddlewareStack 13 | from channels.routing import ProtocolTypeRouter, URLRouter 14 | from channels.security.websocket import AllowedHostsOriginValidator 15 | from django.core.asgi import get_asgi_application 16 | from decouple import config 17 | 18 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", config("DJANGO_SETTINGS_MODULE")) 19 | 20 | # Initialize Django ASGI application early to ensure the AppRegistry 21 | # is populated before importing code that may import ORM models. 22 | django_asgi_app = get_asgi_application() 23 | 24 | import chat.routing 25 | 26 | application = ProtocolTypeRouter( 27 | { 28 | "http": django_asgi_app, 29 | "websocket": AllowedHostsOriginValidator( 30 | AuthMiddlewareStack(URLRouter(chat.routing.websocket_urlpatterns)) 31 | ), 32 | } 33 | ) 34 | -------------------------------------------------------------------------------- /config/celery.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from decouple import config 4 | from celery import Celery 5 | 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", config("DJANGO_SETTINGS_MODULE")) 7 | app = Celery("config") 8 | app.config_from_object("django.conf:settings", namespace="CELERY") 9 | app.autodiscover_tasks() 10 | -------------------------------------------------------------------------------- /config/settings/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawn0123/chatbot_using_django/e7547c17b41ca92524529fc5243882041299453b/config/settings/__init__.py -------------------------------------------------------------------------------- /config/settings/base.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | import os 3 | from decouple import config, Csv 4 | 5 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 6 | BASE_DIR = Path(__file__).resolve().parent.parent 7 | 8 | 9 | # Quick-start development settings - unsuitable for production 10 | # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ 11 | 12 | # SECURITY WARNING: keep the secret key used in production secret! 13 | SECRET_KEY = config("SECRET_KEY") 14 | 15 | # SECURITY WARNING: don't run with debug turned on in production! 16 | DEBUG = config("DEBUG", default=False, cast=bool) 17 | 18 | ALLOWED_HOSTS = config("ALLOWED_HOSTS", cast=Csv()) 19 | 20 | 21 | # Application definition 22 | 23 | INSTALLED_APPS = [ 24 | "daphne", 25 | "django.contrib.admin", 26 | "django.contrib.auth", 27 | "django.contrib.contenttypes", 28 | "django.contrib.sessions", 29 | "django.contrib.messages", 30 | "django.contrib.staticfiles", 31 | # Third party apps 32 | "chatterbot.ext.django_chatterbot", 33 | "tailwind", 34 | "django_browser_reload", 35 | # Local apps 36 | "chat", 37 | "theme", 38 | ] 39 | 40 | MIDDLEWARE = [ 41 | "django.middleware.security.SecurityMiddleware", 42 | "django.contrib.sessions.middleware.SessionMiddleware", 43 | "django.middleware.common.CommonMiddleware", 44 | "django.middleware.csrf.CsrfViewMiddleware", 45 | "django.contrib.auth.middleware.AuthenticationMiddleware", 46 | "django.contrib.messages.middleware.MessageMiddleware", 47 | "django.middleware.clickjacking.XFrameOptionsMiddleware", 48 | ] 49 | 50 | ROOT_URLCONF = "config.urls" 51 | 52 | TEMPLATES = [ 53 | { 54 | "BACKEND": "django.template.backends.django.DjangoTemplates", 55 | "DIRS": [], 56 | "APP_DIRS": True, 57 | "OPTIONS": { 58 | "context_processors": [ 59 | "django.template.context_processors.debug", 60 | "django.template.context_processors.request", 61 | "django.contrib.auth.context_processors.auth", 62 | "django.contrib.messages.context_processors.messages", 63 | ], 64 | }, 65 | }, 66 | ] 67 | 68 | WSGI_APPLICATION = "config.wsgi.application" 69 | ASGI_APPLICATION = "config.asgi.application" 70 | 71 | # Database 72 | # https://docs.djangoproject.com/en/4.1/ref/settings/#databases 73 | 74 | DATABASES = { 75 | "default": { 76 | "ENGINE": "django.db.backends.postgresql", 77 | "NAME": config("DB_NAME"), 78 | "USER": config("DB_USERNAME"), 79 | "PASSWORD": config("DB_PASSWORD"), 80 | "HOST": config("DB_HOSTNAME"), 81 | "PORT": config("DB_PORT", cast=int), 82 | } 83 | } 84 | 85 | 86 | # Password validation 87 | # https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators 88 | 89 | AUTH_PASSWORD_VALIDATORS = [ 90 | { 91 | "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", 92 | }, 93 | { 94 | "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", 95 | }, 96 | { 97 | "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", 98 | }, 99 | { 100 | "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", 101 | }, 102 | ] 103 | 104 | 105 | # Internationalization 106 | # https://docs.djangoproject.com/en/4.1/topics/i18n/ 107 | 108 | LANGUAGE_CODE = "en-us" 109 | 110 | TIME_ZONE = "UTC" 111 | 112 | USE_I18N = True 113 | 114 | USE_TZ = True 115 | 116 | 117 | # Static files (CSS, JavaScript, Images) 118 | # https://docs.djangoproject.com/en/4.1/howto/static-files/ 119 | 120 | STATIC_URL = "static/" 121 | 122 | # Default primary key field type 123 | # https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field 124 | 125 | DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" 126 | 127 | # Celery 128 | CELERY_BROKER_URL = config("CELERY_BROKER_URL") 129 | CELERY_RESULT_BACKEND = config("REDIS_BACKEND") 130 | 131 | # Redis Cache 132 | CACHES = { 133 | "default": { 134 | "BACKEND": "django.core.cache.backends.redis.RedisCache", 135 | "LOCATION": config("REDIS_BACKEND"), 136 | }, 137 | } 138 | 139 | # Django Channels 140 | CHANNEL_LAYERS = { 141 | "default": { 142 | "BACKEND": "channels_redis.core.RedisChannelLayer", 143 | "CONFIG": { 144 | "hosts": [config("REDIS_BACKEND")], 145 | }, 146 | }, 147 | } 148 | 149 | # Chatterbot 150 | CHATTERBOT = { 151 | "name": "User Support Bot", 152 | "logic_adapters": [ 153 | "chatterbot.logic.BestMatch", 154 | ], 155 | } 156 | 157 | # Tailwind 158 | TAILWIND_APP_NAME = "theme" 159 | -------------------------------------------------------------------------------- /config/settings/development.py: -------------------------------------------------------------------------------- 1 | from .base import * 2 | 3 | STATIC_URL = "static/" 4 | STATIC_ROOT = os.path.join(BASE_DIR, "../", "staticfiles") 5 | -------------------------------------------------------------------------------- /config/settings/production.py: -------------------------------------------------------------------------------- 1 | from .base import * 2 | -------------------------------------------------------------------------------- /config/urls.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from django.urls import path, include 3 | 4 | urlpatterns = [ 5 | path("admin/", admin.site.urls), 6 | path("", include("chat.urls", namespace="chat")), 7 | ] 8 | -------------------------------------------------------------------------------- /config/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for config project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Waiting for postgres...' 4 | 5 | while ! nc -z $DB_HOSTNAME $DB_PORT; do 6 | sleep 0.1 7 | done 8 | 9 | echo 'PostgreSQL started' 10 | 11 | echo 'Running migrations...' 12 | python manage.py migrate 13 | 14 | echo 'Collecting static files...' 15 | python manage.py collectstatic --no-input 16 | 17 | exec "$@" -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | from decouple import config 7 | 8 | 9 | def main(): 10 | """Run administrative tasks.""" 11 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', config('DJANGO_SETTINGS_MODULE')) 12 | try: 13 | from django.core.management import execute_from_command_line 14 | except ImportError as exc: 15 | raise ImportError( 16 | "Couldn't import Django. Are you sure it's installed and " 17 | "available on your PYTHONPATH environment variable? Did you " 18 | "forget to activate a virtual environment?" 19 | ) from exc 20 | execute_from_command_line(sys.argv) 21 | 22 | 23 | if __name__ == '__main__': 24 | main() 25 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | celery==5.2.7 2 | channels==4.0.0 3 | channels-redis==4.0.0 4 | daphne==4.0.0 5 | Django==4.1.2 6 | psycopg2-binary==2.9.5 7 | python-decouple==3.6 8 | redis==4.3.4 9 | chatterbot==1.0.4 10 | django-tailwind==3.4.0 -------------------------------------------------------------------------------- /theme/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawn0123/chatbot_using_django/e7547c17b41ca92524529fc5243882041299453b/theme/__init__.py -------------------------------------------------------------------------------- /theme/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ThemeConfig(AppConfig): 5 | name = 'theme' 6 | -------------------------------------------------------------------------------- /theme/static_src/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /theme/static_src/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "theme", 3 | "version": "3.4.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "theme", 9 | "version": "3.4.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@tailwindcss/aspect-ratio": "^0.4.0", 13 | "@tailwindcss/forms": "^0.5.2", 14 | "@tailwindcss/line-clamp": "^0.4.0", 15 | "@tailwindcss/typography": "^0.5.2", 16 | "cross-env": "^7.0.3", 17 | "postcss": "^8.4.14", 18 | "postcss-import": "^14.1.0", 19 | "postcss-nested": "^5.0.6", 20 | "postcss-simple-vars": "^6.0.3", 21 | "rimraf": "^3.0.2", 22 | "tailwindcss": "^3.1.6" 23 | } 24 | }, 25 | "node_modules/@nodelib/fs.scandir": { 26 | "version": "2.1.5", 27 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 28 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 29 | "dev": true, 30 | "dependencies": { 31 | "@nodelib/fs.stat": "2.0.5", 32 | "run-parallel": "^1.1.9" 33 | }, 34 | "engines": { 35 | "node": ">= 8" 36 | } 37 | }, 38 | "node_modules/@nodelib/fs.stat": { 39 | "version": "2.0.5", 40 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 41 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 42 | "dev": true, 43 | "engines": { 44 | "node": ">= 8" 45 | } 46 | }, 47 | "node_modules/@nodelib/fs.walk": { 48 | "version": "1.2.8", 49 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 50 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 51 | "dev": true, 52 | "dependencies": { 53 | "@nodelib/fs.scandir": "2.1.5", 54 | "fastq": "^1.6.0" 55 | }, 56 | "engines": { 57 | "node": ">= 8" 58 | } 59 | }, 60 | "node_modules/@tailwindcss/aspect-ratio": { 61 | "version": "0.4.2", 62 | "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", 63 | "integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==", 64 | "dev": true, 65 | "peerDependencies": { 66 | "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" 67 | } 68 | }, 69 | "node_modules/@tailwindcss/forms": { 70 | "version": "0.5.3", 71 | "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz", 72 | "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==", 73 | "dev": true, 74 | "dependencies": { 75 | "mini-svg-data-uri": "^1.2.3" 76 | }, 77 | "peerDependencies": { 78 | "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" 79 | } 80 | }, 81 | "node_modules/@tailwindcss/line-clamp": { 82 | "version": "0.4.2", 83 | "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz", 84 | "integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==", 85 | "dev": true, 86 | "peerDependencies": { 87 | "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" 88 | } 89 | }, 90 | "node_modules/@tailwindcss/typography": { 91 | "version": "0.5.7", 92 | "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.7.tgz", 93 | "integrity": "sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg==", 94 | "dev": true, 95 | "dependencies": { 96 | "lodash.castarray": "^4.4.0", 97 | "lodash.isplainobject": "^4.0.6", 98 | "lodash.merge": "^4.6.2", 99 | "postcss-selector-parser": "6.0.10" 100 | }, 101 | "peerDependencies": { 102 | "tailwindcss": ">=3.0.0 || insiders" 103 | } 104 | }, 105 | "node_modules/acorn": { 106 | "version": "7.4.1", 107 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 108 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 109 | "dev": true, 110 | "bin": { 111 | "acorn": "bin/acorn" 112 | }, 113 | "engines": { 114 | "node": ">=0.4.0" 115 | } 116 | }, 117 | "node_modules/acorn-node": { 118 | "version": "1.8.2", 119 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 120 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 121 | "dev": true, 122 | "dependencies": { 123 | "acorn": "^7.0.0", 124 | "acorn-walk": "^7.0.0", 125 | "xtend": "^4.0.2" 126 | } 127 | }, 128 | "node_modules/acorn-walk": { 129 | "version": "7.2.0", 130 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 131 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 132 | "dev": true, 133 | "engines": { 134 | "node": ">=0.4.0" 135 | } 136 | }, 137 | "node_modules/anymatch": { 138 | "version": "3.1.2", 139 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 140 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 141 | "dev": true, 142 | "dependencies": { 143 | "normalize-path": "^3.0.0", 144 | "picomatch": "^2.0.4" 145 | }, 146 | "engines": { 147 | "node": ">= 8" 148 | } 149 | }, 150 | "node_modules/arg": { 151 | "version": "5.0.2", 152 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 153 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 154 | "dev": true 155 | }, 156 | "node_modules/balanced-match": { 157 | "version": "1.0.2", 158 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 159 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 160 | "dev": true 161 | }, 162 | "node_modules/binary-extensions": { 163 | "version": "2.2.0", 164 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 165 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 166 | "dev": true, 167 | "engines": { 168 | "node": ">=8" 169 | } 170 | }, 171 | "node_modules/brace-expansion": { 172 | "version": "1.1.11", 173 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 174 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 175 | "dev": true, 176 | "dependencies": { 177 | "balanced-match": "^1.0.0", 178 | "concat-map": "0.0.1" 179 | } 180 | }, 181 | "node_modules/braces": { 182 | "version": "3.0.2", 183 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 184 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 185 | "dev": true, 186 | "dependencies": { 187 | "fill-range": "^7.0.1" 188 | }, 189 | "engines": { 190 | "node": ">=8" 191 | } 192 | }, 193 | "node_modules/camelcase-css": { 194 | "version": "2.0.1", 195 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 196 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 197 | "dev": true, 198 | "engines": { 199 | "node": ">= 6" 200 | } 201 | }, 202 | "node_modules/chokidar": { 203 | "version": "3.5.3", 204 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 205 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 206 | "dev": true, 207 | "funding": [ 208 | { 209 | "type": "individual", 210 | "url": "https://paulmillr.com/funding/" 211 | } 212 | ], 213 | "dependencies": { 214 | "anymatch": "~3.1.2", 215 | "braces": "~3.0.2", 216 | "glob-parent": "~5.1.2", 217 | "is-binary-path": "~2.1.0", 218 | "is-glob": "~4.0.1", 219 | "normalize-path": "~3.0.0", 220 | "readdirp": "~3.6.0" 221 | }, 222 | "engines": { 223 | "node": ">= 8.10.0" 224 | }, 225 | "optionalDependencies": { 226 | "fsevents": "~2.3.2" 227 | } 228 | }, 229 | "node_modules/chokidar/node_modules/glob-parent": { 230 | "version": "5.1.2", 231 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 232 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 233 | "dev": true, 234 | "dependencies": { 235 | "is-glob": "^4.0.1" 236 | }, 237 | "engines": { 238 | "node": ">= 6" 239 | } 240 | }, 241 | "node_modules/color-name": { 242 | "version": "1.1.4", 243 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 244 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 245 | "dev": true 246 | }, 247 | "node_modules/concat-map": { 248 | "version": "0.0.1", 249 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 250 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 251 | "dev": true 252 | }, 253 | "node_modules/cross-env": { 254 | "version": "7.0.3", 255 | "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", 256 | "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", 257 | "dev": true, 258 | "dependencies": { 259 | "cross-spawn": "^7.0.1" 260 | }, 261 | "bin": { 262 | "cross-env": "src/bin/cross-env.js", 263 | "cross-env-shell": "src/bin/cross-env-shell.js" 264 | }, 265 | "engines": { 266 | "node": ">=10.14", 267 | "npm": ">=6", 268 | "yarn": ">=1" 269 | } 270 | }, 271 | "node_modules/cross-spawn": { 272 | "version": "7.0.3", 273 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 274 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 275 | "dev": true, 276 | "dependencies": { 277 | "path-key": "^3.1.0", 278 | "shebang-command": "^2.0.0", 279 | "which": "^2.0.1" 280 | }, 281 | "engines": { 282 | "node": ">= 8" 283 | } 284 | }, 285 | "node_modules/cssesc": { 286 | "version": "3.0.0", 287 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 288 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 289 | "dev": true, 290 | "bin": { 291 | "cssesc": "bin/cssesc" 292 | }, 293 | "engines": { 294 | "node": ">=4" 295 | } 296 | }, 297 | "node_modules/defined": { 298 | "version": "1.0.1", 299 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", 300 | "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", 301 | "dev": true, 302 | "funding": { 303 | "url": "https://github.com/sponsors/ljharb" 304 | } 305 | }, 306 | "node_modules/detective": { 307 | "version": "5.2.1", 308 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", 309 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", 310 | "dev": true, 311 | "dependencies": { 312 | "acorn-node": "^1.8.2", 313 | "defined": "^1.0.0", 314 | "minimist": "^1.2.6" 315 | }, 316 | "bin": { 317 | "detective": "bin/detective.js" 318 | }, 319 | "engines": { 320 | "node": ">=0.8.0" 321 | } 322 | }, 323 | "node_modules/didyoumean": { 324 | "version": "1.2.2", 325 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 326 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 327 | "dev": true 328 | }, 329 | "node_modules/dlv": { 330 | "version": "1.1.3", 331 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 332 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 333 | "dev": true 334 | }, 335 | "node_modules/fast-glob": { 336 | "version": "3.2.12", 337 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 338 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 339 | "dev": true, 340 | "dependencies": { 341 | "@nodelib/fs.stat": "^2.0.2", 342 | "@nodelib/fs.walk": "^1.2.3", 343 | "glob-parent": "^5.1.2", 344 | "merge2": "^1.3.0", 345 | "micromatch": "^4.0.4" 346 | }, 347 | "engines": { 348 | "node": ">=8.6.0" 349 | } 350 | }, 351 | "node_modules/fast-glob/node_modules/glob-parent": { 352 | "version": "5.1.2", 353 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 354 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 355 | "dev": true, 356 | "dependencies": { 357 | "is-glob": "^4.0.1" 358 | }, 359 | "engines": { 360 | "node": ">= 6" 361 | } 362 | }, 363 | "node_modules/fastq": { 364 | "version": "1.13.0", 365 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 366 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 367 | "dev": true, 368 | "dependencies": { 369 | "reusify": "^1.0.4" 370 | } 371 | }, 372 | "node_modules/fill-range": { 373 | "version": "7.0.1", 374 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 375 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 376 | "dev": true, 377 | "dependencies": { 378 | "to-regex-range": "^5.0.1" 379 | }, 380 | "engines": { 381 | "node": ">=8" 382 | } 383 | }, 384 | "node_modules/fs.realpath": { 385 | "version": "1.0.0", 386 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 387 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 388 | "dev": true 389 | }, 390 | "node_modules/fsevents": { 391 | "version": "2.3.2", 392 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 393 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 394 | "dev": true, 395 | "hasInstallScript": true, 396 | "optional": true, 397 | "os": [ 398 | "darwin" 399 | ], 400 | "engines": { 401 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 402 | } 403 | }, 404 | "node_modules/function-bind": { 405 | "version": "1.1.1", 406 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 407 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 408 | "dev": true 409 | }, 410 | "node_modules/glob": { 411 | "version": "7.2.3", 412 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 413 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 414 | "dev": true, 415 | "dependencies": { 416 | "fs.realpath": "^1.0.0", 417 | "inflight": "^1.0.4", 418 | "inherits": "2", 419 | "minimatch": "^3.1.1", 420 | "once": "^1.3.0", 421 | "path-is-absolute": "^1.0.0" 422 | }, 423 | "engines": { 424 | "node": "*" 425 | }, 426 | "funding": { 427 | "url": "https://github.com/sponsors/isaacs" 428 | } 429 | }, 430 | "node_modules/glob-parent": { 431 | "version": "6.0.2", 432 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 433 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 434 | "dev": true, 435 | "dependencies": { 436 | "is-glob": "^4.0.3" 437 | }, 438 | "engines": { 439 | "node": ">=10.13.0" 440 | } 441 | }, 442 | "node_modules/has": { 443 | "version": "1.0.3", 444 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 445 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 446 | "dev": true, 447 | "dependencies": { 448 | "function-bind": "^1.1.1" 449 | }, 450 | "engines": { 451 | "node": ">= 0.4.0" 452 | } 453 | }, 454 | "node_modules/inflight": { 455 | "version": "1.0.6", 456 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 457 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 458 | "dev": true, 459 | "dependencies": { 460 | "once": "^1.3.0", 461 | "wrappy": "1" 462 | } 463 | }, 464 | "node_modules/inherits": { 465 | "version": "2.0.4", 466 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 467 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 468 | "dev": true 469 | }, 470 | "node_modules/is-binary-path": { 471 | "version": "2.1.0", 472 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 473 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 474 | "dev": true, 475 | "dependencies": { 476 | "binary-extensions": "^2.0.0" 477 | }, 478 | "engines": { 479 | "node": ">=8" 480 | } 481 | }, 482 | "node_modules/is-core-module": { 483 | "version": "2.11.0", 484 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 485 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 486 | "dev": true, 487 | "dependencies": { 488 | "has": "^1.0.3" 489 | }, 490 | "funding": { 491 | "url": "https://github.com/sponsors/ljharb" 492 | } 493 | }, 494 | "node_modules/is-extglob": { 495 | "version": "2.1.1", 496 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 497 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 498 | "dev": true, 499 | "engines": { 500 | "node": ">=0.10.0" 501 | } 502 | }, 503 | "node_modules/is-glob": { 504 | "version": "4.0.3", 505 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 506 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 507 | "dev": true, 508 | "dependencies": { 509 | "is-extglob": "^2.1.1" 510 | }, 511 | "engines": { 512 | "node": ">=0.10.0" 513 | } 514 | }, 515 | "node_modules/is-number": { 516 | "version": "7.0.0", 517 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 518 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 519 | "dev": true, 520 | "engines": { 521 | "node": ">=0.12.0" 522 | } 523 | }, 524 | "node_modules/isexe": { 525 | "version": "2.0.0", 526 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 527 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 528 | "dev": true 529 | }, 530 | "node_modules/lilconfig": { 531 | "version": "2.0.6", 532 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", 533 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", 534 | "dev": true, 535 | "engines": { 536 | "node": ">=10" 537 | } 538 | }, 539 | "node_modules/lodash.castarray": { 540 | "version": "4.4.0", 541 | "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", 542 | "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", 543 | "dev": true 544 | }, 545 | "node_modules/lodash.isplainobject": { 546 | "version": "4.0.6", 547 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 548 | "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", 549 | "dev": true 550 | }, 551 | "node_modules/lodash.merge": { 552 | "version": "4.6.2", 553 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 554 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 555 | "dev": true 556 | }, 557 | "node_modules/merge2": { 558 | "version": "1.4.1", 559 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 560 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 561 | "dev": true, 562 | "engines": { 563 | "node": ">= 8" 564 | } 565 | }, 566 | "node_modules/micromatch": { 567 | "version": "4.0.5", 568 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 569 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 570 | "dev": true, 571 | "dependencies": { 572 | "braces": "^3.0.2", 573 | "picomatch": "^2.3.1" 574 | }, 575 | "engines": { 576 | "node": ">=8.6" 577 | } 578 | }, 579 | "node_modules/mini-svg-data-uri": { 580 | "version": "1.4.4", 581 | "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", 582 | "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", 583 | "dev": true, 584 | "bin": { 585 | "mini-svg-data-uri": "cli.js" 586 | } 587 | }, 588 | "node_modules/minimatch": { 589 | "version": "3.1.2", 590 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 591 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 592 | "dev": true, 593 | "dependencies": { 594 | "brace-expansion": "^1.1.7" 595 | }, 596 | "engines": { 597 | "node": "*" 598 | } 599 | }, 600 | "node_modules/minimist": { 601 | "version": "1.2.7", 602 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 603 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 604 | "dev": true, 605 | "funding": { 606 | "url": "https://github.com/sponsors/ljharb" 607 | } 608 | }, 609 | "node_modules/nanoid": { 610 | "version": "3.3.4", 611 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 612 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 613 | "dev": true, 614 | "bin": { 615 | "nanoid": "bin/nanoid.cjs" 616 | }, 617 | "engines": { 618 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 619 | } 620 | }, 621 | "node_modules/normalize-path": { 622 | "version": "3.0.0", 623 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 624 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 625 | "dev": true, 626 | "engines": { 627 | "node": ">=0.10.0" 628 | } 629 | }, 630 | "node_modules/object-hash": { 631 | "version": "3.0.0", 632 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 633 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 634 | "dev": true, 635 | "engines": { 636 | "node": ">= 6" 637 | } 638 | }, 639 | "node_modules/once": { 640 | "version": "1.4.0", 641 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 642 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 643 | "dev": true, 644 | "dependencies": { 645 | "wrappy": "1" 646 | } 647 | }, 648 | "node_modules/path-is-absolute": { 649 | "version": "1.0.1", 650 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 651 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 652 | "dev": true, 653 | "engines": { 654 | "node": ">=0.10.0" 655 | } 656 | }, 657 | "node_modules/path-key": { 658 | "version": "3.1.1", 659 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 660 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 661 | "dev": true, 662 | "engines": { 663 | "node": ">=8" 664 | } 665 | }, 666 | "node_modules/path-parse": { 667 | "version": "1.0.7", 668 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 669 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 670 | "dev": true 671 | }, 672 | "node_modules/picocolors": { 673 | "version": "1.0.0", 674 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 675 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 676 | "dev": true 677 | }, 678 | "node_modules/picomatch": { 679 | "version": "2.3.1", 680 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 681 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 682 | "dev": true, 683 | "engines": { 684 | "node": ">=8.6" 685 | }, 686 | "funding": { 687 | "url": "https://github.com/sponsors/jonschlinkert" 688 | } 689 | }, 690 | "node_modules/pify": { 691 | "version": "2.3.0", 692 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 693 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 694 | "dev": true, 695 | "engines": { 696 | "node": ">=0.10.0" 697 | } 698 | }, 699 | "node_modules/postcss": { 700 | "version": "8.4.18", 701 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", 702 | "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", 703 | "dev": true, 704 | "funding": [ 705 | { 706 | "type": "opencollective", 707 | "url": "https://opencollective.com/postcss/" 708 | }, 709 | { 710 | "type": "tidelift", 711 | "url": "https://tidelift.com/funding/github/npm/postcss" 712 | } 713 | ], 714 | "dependencies": { 715 | "nanoid": "^3.3.4", 716 | "picocolors": "^1.0.0", 717 | "source-map-js": "^1.0.2" 718 | }, 719 | "engines": { 720 | "node": "^10 || ^12 || >=14" 721 | } 722 | }, 723 | "node_modules/postcss-import": { 724 | "version": "14.1.0", 725 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", 726 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", 727 | "dev": true, 728 | "dependencies": { 729 | "postcss-value-parser": "^4.0.0", 730 | "read-cache": "^1.0.0", 731 | "resolve": "^1.1.7" 732 | }, 733 | "engines": { 734 | "node": ">=10.0.0" 735 | }, 736 | "peerDependencies": { 737 | "postcss": "^8.0.0" 738 | } 739 | }, 740 | "node_modules/postcss-js": { 741 | "version": "4.0.0", 742 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 743 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 744 | "dev": true, 745 | "dependencies": { 746 | "camelcase-css": "^2.0.1" 747 | }, 748 | "engines": { 749 | "node": "^12 || ^14 || >= 16" 750 | }, 751 | "funding": { 752 | "type": "opencollective", 753 | "url": "https://opencollective.com/postcss/" 754 | }, 755 | "peerDependencies": { 756 | "postcss": "^8.3.3" 757 | } 758 | }, 759 | "node_modules/postcss-load-config": { 760 | "version": "3.1.4", 761 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 762 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 763 | "dev": true, 764 | "dependencies": { 765 | "lilconfig": "^2.0.5", 766 | "yaml": "^1.10.2" 767 | }, 768 | "engines": { 769 | "node": ">= 10" 770 | }, 771 | "funding": { 772 | "type": "opencollective", 773 | "url": "https://opencollective.com/postcss/" 774 | }, 775 | "peerDependencies": { 776 | "postcss": ">=8.0.9", 777 | "ts-node": ">=9.0.0" 778 | }, 779 | "peerDependenciesMeta": { 780 | "postcss": { 781 | "optional": true 782 | }, 783 | "ts-node": { 784 | "optional": true 785 | } 786 | } 787 | }, 788 | "node_modules/postcss-nested": { 789 | "version": "5.0.6", 790 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", 791 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", 792 | "dev": true, 793 | "dependencies": { 794 | "postcss-selector-parser": "^6.0.6" 795 | }, 796 | "engines": { 797 | "node": ">=12.0" 798 | }, 799 | "funding": { 800 | "type": "opencollective", 801 | "url": "https://opencollective.com/postcss/" 802 | }, 803 | "peerDependencies": { 804 | "postcss": "^8.2.14" 805 | } 806 | }, 807 | "node_modules/postcss-selector-parser": { 808 | "version": "6.0.10", 809 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 810 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 811 | "dev": true, 812 | "dependencies": { 813 | "cssesc": "^3.0.0", 814 | "util-deprecate": "^1.0.2" 815 | }, 816 | "engines": { 817 | "node": ">=4" 818 | } 819 | }, 820 | "node_modules/postcss-simple-vars": { 821 | "version": "6.0.3", 822 | "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-6.0.3.tgz", 823 | "integrity": "sha512-fkNn4Zio8vN4vIig9IFdb8lVlxWnYR769RgvxCM6YWlFKie/nQaOcaMMMFz/s4gsfHW4/5bJW+i57zD67mQU7g==", 824 | "dev": true, 825 | "engines": { 826 | "node": ">=10.0" 827 | }, 828 | "funding": { 829 | "type": "opencollective", 830 | "url": "https://opencollective.com/postcss/" 831 | }, 832 | "peerDependencies": { 833 | "postcss": "^8.2.1" 834 | } 835 | }, 836 | "node_modules/postcss-value-parser": { 837 | "version": "4.2.0", 838 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 839 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 840 | "dev": true 841 | }, 842 | "node_modules/queue-microtask": { 843 | "version": "1.2.3", 844 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 845 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 846 | "dev": true, 847 | "funding": [ 848 | { 849 | "type": "github", 850 | "url": "https://github.com/sponsors/feross" 851 | }, 852 | { 853 | "type": "patreon", 854 | "url": "https://www.patreon.com/feross" 855 | }, 856 | { 857 | "type": "consulting", 858 | "url": "https://feross.org/support" 859 | } 860 | ] 861 | }, 862 | "node_modules/quick-lru": { 863 | "version": "5.1.1", 864 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 865 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 866 | "dev": true, 867 | "engines": { 868 | "node": ">=10" 869 | }, 870 | "funding": { 871 | "url": "https://github.com/sponsors/sindresorhus" 872 | } 873 | }, 874 | "node_modules/read-cache": { 875 | "version": "1.0.0", 876 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 877 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 878 | "dev": true, 879 | "dependencies": { 880 | "pify": "^2.3.0" 881 | } 882 | }, 883 | "node_modules/readdirp": { 884 | "version": "3.6.0", 885 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 886 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 887 | "dev": true, 888 | "dependencies": { 889 | "picomatch": "^2.2.1" 890 | }, 891 | "engines": { 892 | "node": ">=8.10.0" 893 | } 894 | }, 895 | "node_modules/resolve": { 896 | "version": "1.22.1", 897 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 898 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 899 | "dev": true, 900 | "dependencies": { 901 | "is-core-module": "^2.9.0", 902 | "path-parse": "^1.0.7", 903 | "supports-preserve-symlinks-flag": "^1.0.0" 904 | }, 905 | "bin": { 906 | "resolve": "bin/resolve" 907 | }, 908 | "funding": { 909 | "url": "https://github.com/sponsors/ljharb" 910 | } 911 | }, 912 | "node_modules/reusify": { 913 | "version": "1.0.4", 914 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 915 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 916 | "dev": true, 917 | "engines": { 918 | "iojs": ">=1.0.0", 919 | "node": ">=0.10.0" 920 | } 921 | }, 922 | "node_modules/rimraf": { 923 | "version": "3.0.2", 924 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 925 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 926 | "dev": true, 927 | "dependencies": { 928 | "glob": "^7.1.3" 929 | }, 930 | "bin": { 931 | "rimraf": "bin.js" 932 | }, 933 | "funding": { 934 | "url": "https://github.com/sponsors/isaacs" 935 | } 936 | }, 937 | "node_modules/run-parallel": { 938 | "version": "1.2.0", 939 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 940 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 941 | "dev": true, 942 | "funding": [ 943 | { 944 | "type": "github", 945 | "url": "https://github.com/sponsors/feross" 946 | }, 947 | { 948 | "type": "patreon", 949 | "url": "https://www.patreon.com/feross" 950 | }, 951 | { 952 | "type": "consulting", 953 | "url": "https://feross.org/support" 954 | } 955 | ], 956 | "dependencies": { 957 | "queue-microtask": "^1.2.2" 958 | } 959 | }, 960 | "node_modules/shebang-command": { 961 | "version": "2.0.0", 962 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 963 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 964 | "dev": true, 965 | "dependencies": { 966 | "shebang-regex": "^3.0.0" 967 | }, 968 | "engines": { 969 | "node": ">=8" 970 | } 971 | }, 972 | "node_modules/shebang-regex": { 973 | "version": "3.0.0", 974 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 975 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 976 | "dev": true, 977 | "engines": { 978 | "node": ">=8" 979 | } 980 | }, 981 | "node_modules/source-map-js": { 982 | "version": "1.0.2", 983 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 984 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 985 | "dev": true, 986 | "engines": { 987 | "node": ">=0.10.0" 988 | } 989 | }, 990 | "node_modules/supports-preserve-symlinks-flag": { 991 | "version": "1.0.0", 992 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 993 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 994 | "dev": true, 995 | "engines": { 996 | "node": ">= 0.4" 997 | }, 998 | "funding": { 999 | "url": "https://github.com/sponsors/ljharb" 1000 | } 1001 | }, 1002 | "node_modules/tailwindcss": { 1003 | "version": "3.2.1", 1004 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", 1005 | "integrity": "sha512-Uw+GVSxp5CM48krnjHObqoOwlCt5Qo6nw1jlCRwfGy68dSYb/LwS9ZFidYGRiM+w6rMawkZiu1mEMAsHYAfoLg==", 1006 | "dev": true, 1007 | "dependencies": { 1008 | "arg": "^5.0.2", 1009 | "chokidar": "^3.5.3", 1010 | "color-name": "^1.1.4", 1011 | "detective": "^5.2.1", 1012 | "didyoumean": "^1.2.2", 1013 | "dlv": "^1.1.3", 1014 | "fast-glob": "^3.2.12", 1015 | "glob-parent": "^6.0.2", 1016 | "is-glob": "^4.0.3", 1017 | "lilconfig": "^2.0.6", 1018 | "micromatch": "^4.0.5", 1019 | "normalize-path": "^3.0.0", 1020 | "object-hash": "^3.0.0", 1021 | "picocolors": "^1.0.0", 1022 | "postcss": "^8.4.17", 1023 | "postcss-import": "^14.1.0", 1024 | "postcss-js": "^4.0.0", 1025 | "postcss-load-config": "^3.1.4", 1026 | "postcss-nested": "6.0.0", 1027 | "postcss-selector-parser": "^6.0.10", 1028 | "postcss-value-parser": "^4.2.0", 1029 | "quick-lru": "^5.1.1", 1030 | "resolve": "^1.22.1" 1031 | }, 1032 | "bin": { 1033 | "tailwind": "lib/cli.js", 1034 | "tailwindcss": "lib/cli.js" 1035 | }, 1036 | "engines": { 1037 | "node": ">=12.13.0" 1038 | }, 1039 | "peerDependencies": { 1040 | "postcss": "^8.0.9" 1041 | } 1042 | }, 1043 | "node_modules/tailwindcss/node_modules/postcss-nested": { 1044 | "version": "6.0.0", 1045 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", 1046 | "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", 1047 | "dev": true, 1048 | "dependencies": { 1049 | "postcss-selector-parser": "^6.0.10" 1050 | }, 1051 | "engines": { 1052 | "node": ">=12.0" 1053 | }, 1054 | "funding": { 1055 | "type": "opencollective", 1056 | "url": "https://opencollective.com/postcss/" 1057 | }, 1058 | "peerDependencies": { 1059 | "postcss": "^8.2.14" 1060 | } 1061 | }, 1062 | "node_modules/to-regex-range": { 1063 | "version": "5.0.1", 1064 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1065 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1066 | "dev": true, 1067 | "dependencies": { 1068 | "is-number": "^7.0.0" 1069 | }, 1070 | "engines": { 1071 | "node": ">=8.0" 1072 | } 1073 | }, 1074 | "node_modules/util-deprecate": { 1075 | "version": "1.0.2", 1076 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1077 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1078 | "dev": true 1079 | }, 1080 | "node_modules/which": { 1081 | "version": "2.0.2", 1082 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1083 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1084 | "dev": true, 1085 | "dependencies": { 1086 | "isexe": "^2.0.0" 1087 | }, 1088 | "bin": { 1089 | "node-which": "bin/node-which" 1090 | }, 1091 | "engines": { 1092 | "node": ">= 8" 1093 | } 1094 | }, 1095 | "node_modules/wrappy": { 1096 | "version": "1.0.2", 1097 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1098 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1099 | "dev": true 1100 | }, 1101 | "node_modules/xtend": { 1102 | "version": "4.0.2", 1103 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1104 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1105 | "dev": true, 1106 | "engines": { 1107 | "node": ">=0.4" 1108 | } 1109 | }, 1110 | "node_modules/yaml": { 1111 | "version": "1.10.2", 1112 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 1113 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 1114 | "dev": true, 1115 | "engines": { 1116 | "node": ">= 6" 1117 | } 1118 | } 1119 | }, 1120 | "dependencies": { 1121 | "@nodelib/fs.scandir": { 1122 | "version": "2.1.5", 1123 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1124 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1125 | "dev": true, 1126 | "requires": { 1127 | "@nodelib/fs.stat": "2.0.5", 1128 | "run-parallel": "^1.1.9" 1129 | } 1130 | }, 1131 | "@nodelib/fs.stat": { 1132 | "version": "2.0.5", 1133 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1134 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 1135 | "dev": true 1136 | }, 1137 | "@nodelib/fs.walk": { 1138 | "version": "1.2.8", 1139 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1140 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1141 | "dev": true, 1142 | "requires": { 1143 | "@nodelib/fs.scandir": "2.1.5", 1144 | "fastq": "^1.6.0" 1145 | } 1146 | }, 1147 | "@tailwindcss/aspect-ratio": { 1148 | "version": "0.4.2", 1149 | "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", 1150 | "integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==", 1151 | "dev": true, 1152 | "requires": {} 1153 | }, 1154 | "@tailwindcss/forms": { 1155 | "version": "0.5.3", 1156 | "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz", 1157 | "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==", 1158 | "dev": true, 1159 | "requires": { 1160 | "mini-svg-data-uri": "^1.2.3" 1161 | } 1162 | }, 1163 | "@tailwindcss/line-clamp": { 1164 | "version": "0.4.2", 1165 | "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz", 1166 | "integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==", 1167 | "dev": true, 1168 | "requires": {} 1169 | }, 1170 | "@tailwindcss/typography": { 1171 | "version": "0.5.7", 1172 | "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.7.tgz", 1173 | "integrity": "sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg==", 1174 | "dev": true, 1175 | "requires": { 1176 | "lodash.castarray": "^4.4.0", 1177 | "lodash.isplainobject": "^4.0.6", 1178 | "lodash.merge": "^4.6.2", 1179 | "postcss-selector-parser": "6.0.10" 1180 | } 1181 | }, 1182 | "acorn": { 1183 | "version": "7.4.1", 1184 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 1185 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 1186 | "dev": true 1187 | }, 1188 | "acorn-node": { 1189 | "version": "1.8.2", 1190 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 1191 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 1192 | "dev": true, 1193 | "requires": { 1194 | "acorn": "^7.0.0", 1195 | "acorn-walk": "^7.0.0", 1196 | "xtend": "^4.0.2" 1197 | } 1198 | }, 1199 | "acorn-walk": { 1200 | "version": "7.2.0", 1201 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 1202 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 1203 | "dev": true 1204 | }, 1205 | "anymatch": { 1206 | "version": "3.1.2", 1207 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 1208 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 1209 | "dev": true, 1210 | "requires": { 1211 | "normalize-path": "^3.0.0", 1212 | "picomatch": "^2.0.4" 1213 | } 1214 | }, 1215 | "arg": { 1216 | "version": "5.0.2", 1217 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1218 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 1219 | "dev": true 1220 | }, 1221 | "balanced-match": { 1222 | "version": "1.0.2", 1223 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1224 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1225 | "dev": true 1226 | }, 1227 | "binary-extensions": { 1228 | "version": "2.2.0", 1229 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1230 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1231 | "dev": true 1232 | }, 1233 | "brace-expansion": { 1234 | "version": "1.1.11", 1235 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1236 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1237 | "dev": true, 1238 | "requires": { 1239 | "balanced-match": "^1.0.0", 1240 | "concat-map": "0.0.1" 1241 | } 1242 | }, 1243 | "braces": { 1244 | "version": "3.0.2", 1245 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1246 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1247 | "dev": true, 1248 | "requires": { 1249 | "fill-range": "^7.0.1" 1250 | } 1251 | }, 1252 | "camelcase-css": { 1253 | "version": "2.0.1", 1254 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 1255 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 1256 | "dev": true 1257 | }, 1258 | "chokidar": { 1259 | "version": "3.5.3", 1260 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1261 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1262 | "dev": true, 1263 | "requires": { 1264 | "anymatch": "~3.1.2", 1265 | "braces": "~3.0.2", 1266 | "fsevents": "~2.3.2", 1267 | "glob-parent": "~5.1.2", 1268 | "is-binary-path": "~2.1.0", 1269 | "is-glob": "~4.0.1", 1270 | "normalize-path": "~3.0.0", 1271 | "readdirp": "~3.6.0" 1272 | }, 1273 | "dependencies": { 1274 | "glob-parent": { 1275 | "version": "5.1.2", 1276 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1277 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1278 | "dev": true, 1279 | "requires": { 1280 | "is-glob": "^4.0.1" 1281 | } 1282 | } 1283 | } 1284 | }, 1285 | "color-name": { 1286 | "version": "1.1.4", 1287 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1288 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1289 | "dev": true 1290 | }, 1291 | "concat-map": { 1292 | "version": "0.0.1", 1293 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1294 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1295 | "dev": true 1296 | }, 1297 | "cross-env": { 1298 | "version": "7.0.3", 1299 | "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", 1300 | "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", 1301 | "dev": true, 1302 | "requires": { 1303 | "cross-spawn": "^7.0.1" 1304 | } 1305 | }, 1306 | "cross-spawn": { 1307 | "version": "7.0.3", 1308 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1309 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1310 | "dev": true, 1311 | "requires": { 1312 | "path-key": "^3.1.0", 1313 | "shebang-command": "^2.0.0", 1314 | "which": "^2.0.1" 1315 | } 1316 | }, 1317 | "cssesc": { 1318 | "version": "3.0.0", 1319 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1320 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1321 | "dev": true 1322 | }, 1323 | "defined": { 1324 | "version": "1.0.1", 1325 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", 1326 | "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", 1327 | "dev": true 1328 | }, 1329 | "detective": { 1330 | "version": "5.2.1", 1331 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", 1332 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", 1333 | "dev": true, 1334 | "requires": { 1335 | "acorn-node": "^1.8.2", 1336 | "defined": "^1.0.0", 1337 | "minimist": "^1.2.6" 1338 | } 1339 | }, 1340 | "didyoumean": { 1341 | "version": "1.2.2", 1342 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1343 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 1344 | "dev": true 1345 | }, 1346 | "dlv": { 1347 | "version": "1.1.3", 1348 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1349 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 1350 | "dev": true 1351 | }, 1352 | "fast-glob": { 1353 | "version": "3.2.12", 1354 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 1355 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 1356 | "dev": true, 1357 | "requires": { 1358 | "@nodelib/fs.stat": "^2.0.2", 1359 | "@nodelib/fs.walk": "^1.2.3", 1360 | "glob-parent": "^5.1.2", 1361 | "merge2": "^1.3.0", 1362 | "micromatch": "^4.0.4" 1363 | }, 1364 | "dependencies": { 1365 | "glob-parent": { 1366 | "version": "5.1.2", 1367 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1368 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1369 | "dev": true, 1370 | "requires": { 1371 | "is-glob": "^4.0.1" 1372 | } 1373 | } 1374 | } 1375 | }, 1376 | "fastq": { 1377 | "version": "1.13.0", 1378 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1379 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1380 | "dev": true, 1381 | "requires": { 1382 | "reusify": "^1.0.4" 1383 | } 1384 | }, 1385 | "fill-range": { 1386 | "version": "7.0.1", 1387 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1388 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1389 | "dev": true, 1390 | "requires": { 1391 | "to-regex-range": "^5.0.1" 1392 | } 1393 | }, 1394 | "fs.realpath": { 1395 | "version": "1.0.0", 1396 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1397 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1398 | "dev": true 1399 | }, 1400 | "fsevents": { 1401 | "version": "2.3.2", 1402 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1403 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1404 | "dev": true, 1405 | "optional": true 1406 | }, 1407 | "function-bind": { 1408 | "version": "1.1.1", 1409 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1410 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1411 | "dev": true 1412 | }, 1413 | "glob": { 1414 | "version": "7.2.3", 1415 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1416 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1417 | "dev": true, 1418 | "requires": { 1419 | "fs.realpath": "^1.0.0", 1420 | "inflight": "^1.0.4", 1421 | "inherits": "2", 1422 | "minimatch": "^3.1.1", 1423 | "once": "^1.3.0", 1424 | "path-is-absolute": "^1.0.0" 1425 | } 1426 | }, 1427 | "glob-parent": { 1428 | "version": "6.0.2", 1429 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1430 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1431 | "dev": true, 1432 | "requires": { 1433 | "is-glob": "^4.0.3" 1434 | } 1435 | }, 1436 | "has": { 1437 | "version": "1.0.3", 1438 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1439 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1440 | "dev": true, 1441 | "requires": { 1442 | "function-bind": "^1.1.1" 1443 | } 1444 | }, 1445 | "inflight": { 1446 | "version": "1.0.6", 1447 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1448 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1449 | "dev": true, 1450 | "requires": { 1451 | "once": "^1.3.0", 1452 | "wrappy": "1" 1453 | } 1454 | }, 1455 | "inherits": { 1456 | "version": "2.0.4", 1457 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1458 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1459 | "dev": true 1460 | }, 1461 | "is-binary-path": { 1462 | "version": "2.1.0", 1463 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1464 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1465 | "dev": true, 1466 | "requires": { 1467 | "binary-extensions": "^2.0.0" 1468 | } 1469 | }, 1470 | "is-core-module": { 1471 | "version": "2.11.0", 1472 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 1473 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 1474 | "dev": true, 1475 | "requires": { 1476 | "has": "^1.0.3" 1477 | } 1478 | }, 1479 | "is-extglob": { 1480 | "version": "2.1.1", 1481 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1482 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1483 | "dev": true 1484 | }, 1485 | "is-glob": { 1486 | "version": "4.0.3", 1487 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1488 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1489 | "dev": true, 1490 | "requires": { 1491 | "is-extglob": "^2.1.1" 1492 | } 1493 | }, 1494 | "is-number": { 1495 | "version": "7.0.0", 1496 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1497 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1498 | "dev": true 1499 | }, 1500 | "isexe": { 1501 | "version": "2.0.0", 1502 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1503 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1504 | "dev": true 1505 | }, 1506 | "lilconfig": { 1507 | "version": "2.0.6", 1508 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", 1509 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", 1510 | "dev": true 1511 | }, 1512 | "lodash.castarray": { 1513 | "version": "4.4.0", 1514 | "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", 1515 | "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", 1516 | "dev": true 1517 | }, 1518 | "lodash.isplainobject": { 1519 | "version": "4.0.6", 1520 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1521 | "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", 1522 | "dev": true 1523 | }, 1524 | "lodash.merge": { 1525 | "version": "4.6.2", 1526 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1527 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1528 | "dev": true 1529 | }, 1530 | "merge2": { 1531 | "version": "1.4.1", 1532 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1533 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1534 | "dev": true 1535 | }, 1536 | "micromatch": { 1537 | "version": "4.0.5", 1538 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1539 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1540 | "dev": true, 1541 | "requires": { 1542 | "braces": "^3.0.2", 1543 | "picomatch": "^2.3.1" 1544 | } 1545 | }, 1546 | "mini-svg-data-uri": { 1547 | "version": "1.4.4", 1548 | "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", 1549 | "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", 1550 | "dev": true 1551 | }, 1552 | "minimatch": { 1553 | "version": "3.1.2", 1554 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1555 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1556 | "dev": true, 1557 | "requires": { 1558 | "brace-expansion": "^1.1.7" 1559 | } 1560 | }, 1561 | "minimist": { 1562 | "version": "1.2.7", 1563 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 1564 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 1565 | "dev": true 1566 | }, 1567 | "nanoid": { 1568 | "version": "3.3.4", 1569 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1570 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 1571 | "dev": true 1572 | }, 1573 | "normalize-path": { 1574 | "version": "3.0.0", 1575 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1576 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1577 | "dev": true 1578 | }, 1579 | "object-hash": { 1580 | "version": "3.0.0", 1581 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1582 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 1583 | "dev": true 1584 | }, 1585 | "once": { 1586 | "version": "1.4.0", 1587 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1588 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1589 | "dev": true, 1590 | "requires": { 1591 | "wrappy": "1" 1592 | } 1593 | }, 1594 | "path-is-absolute": { 1595 | "version": "1.0.1", 1596 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1597 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1598 | "dev": true 1599 | }, 1600 | "path-key": { 1601 | "version": "3.1.1", 1602 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1603 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1604 | "dev": true 1605 | }, 1606 | "path-parse": { 1607 | "version": "1.0.7", 1608 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1609 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1610 | "dev": true 1611 | }, 1612 | "picocolors": { 1613 | "version": "1.0.0", 1614 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1615 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1616 | "dev": true 1617 | }, 1618 | "picomatch": { 1619 | "version": "2.3.1", 1620 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1621 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1622 | "dev": true 1623 | }, 1624 | "pify": { 1625 | "version": "2.3.0", 1626 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1627 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1628 | "dev": true 1629 | }, 1630 | "postcss": { 1631 | "version": "8.4.18", 1632 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", 1633 | "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", 1634 | "dev": true, 1635 | "requires": { 1636 | "nanoid": "^3.3.4", 1637 | "picocolors": "^1.0.0", 1638 | "source-map-js": "^1.0.2" 1639 | } 1640 | }, 1641 | "postcss-import": { 1642 | "version": "14.1.0", 1643 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", 1644 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", 1645 | "dev": true, 1646 | "requires": { 1647 | "postcss-value-parser": "^4.0.0", 1648 | "read-cache": "^1.0.0", 1649 | "resolve": "^1.1.7" 1650 | } 1651 | }, 1652 | "postcss-js": { 1653 | "version": "4.0.0", 1654 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 1655 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 1656 | "dev": true, 1657 | "requires": { 1658 | "camelcase-css": "^2.0.1" 1659 | } 1660 | }, 1661 | "postcss-load-config": { 1662 | "version": "3.1.4", 1663 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 1664 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 1665 | "dev": true, 1666 | "requires": { 1667 | "lilconfig": "^2.0.5", 1668 | "yaml": "^1.10.2" 1669 | } 1670 | }, 1671 | "postcss-nested": { 1672 | "version": "5.0.6", 1673 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", 1674 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", 1675 | "dev": true, 1676 | "requires": { 1677 | "postcss-selector-parser": "^6.0.6" 1678 | } 1679 | }, 1680 | "postcss-selector-parser": { 1681 | "version": "6.0.10", 1682 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 1683 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 1684 | "dev": true, 1685 | "requires": { 1686 | "cssesc": "^3.0.0", 1687 | "util-deprecate": "^1.0.2" 1688 | } 1689 | }, 1690 | "postcss-simple-vars": { 1691 | "version": "6.0.3", 1692 | "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-6.0.3.tgz", 1693 | "integrity": "sha512-fkNn4Zio8vN4vIig9IFdb8lVlxWnYR769RgvxCM6YWlFKie/nQaOcaMMMFz/s4gsfHW4/5bJW+i57zD67mQU7g==", 1694 | "dev": true, 1695 | "requires": {} 1696 | }, 1697 | "postcss-value-parser": { 1698 | "version": "4.2.0", 1699 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1700 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1701 | "dev": true 1702 | }, 1703 | "queue-microtask": { 1704 | "version": "1.2.3", 1705 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1706 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1707 | "dev": true 1708 | }, 1709 | "quick-lru": { 1710 | "version": "5.1.1", 1711 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1712 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1713 | "dev": true 1714 | }, 1715 | "read-cache": { 1716 | "version": "1.0.0", 1717 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 1718 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 1719 | "dev": true, 1720 | "requires": { 1721 | "pify": "^2.3.0" 1722 | } 1723 | }, 1724 | "readdirp": { 1725 | "version": "3.6.0", 1726 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1727 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1728 | "dev": true, 1729 | "requires": { 1730 | "picomatch": "^2.2.1" 1731 | } 1732 | }, 1733 | "resolve": { 1734 | "version": "1.22.1", 1735 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1736 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1737 | "dev": true, 1738 | "requires": { 1739 | "is-core-module": "^2.9.0", 1740 | "path-parse": "^1.0.7", 1741 | "supports-preserve-symlinks-flag": "^1.0.0" 1742 | } 1743 | }, 1744 | "reusify": { 1745 | "version": "1.0.4", 1746 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1747 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1748 | "dev": true 1749 | }, 1750 | "rimraf": { 1751 | "version": "3.0.2", 1752 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1753 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1754 | "dev": true, 1755 | "requires": { 1756 | "glob": "^7.1.3" 1757 | } 1758 | }, 1759 | "run-parallel": { 1760 | "version": "1.2.0", 1761 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1762 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1763 | "dev": true, 1764 | "requires": { 1765 | "queue-microtask": "^1.2.2" 1766 | } 1767 | }, 1768 | "shebang-command": { 1769 | "version": "2.0.0", 1770 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1771 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1772 | "dev": true, 1773 | "requires": { 1774 | "shebang-regex": "^3.0.0" 1775 | } 1776 | }, 1777 | "shebang-regex": { 1778 | "version": "3.0.0", 1779 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1780 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1781 | "dev": true 1782 | }, 1783 | "source-map-js": { 1784 | "version": "1.0.2", 1785 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1786 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1787 | "dev": true 1788 | }, 1789 | "supports-preserve-symlinks-flag": { 1790 | "version": "1.0.0", 1791 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1792 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1793 | "dev": true 1794 | }, 1795 | "tailwindcss": { 1796 | "version": "3.2.1", 1797 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", 1798 | "integrity": "sha512-Uw+GVSxp5CM48krnjHObqoOwlCt5Qo6nw1jlCRwfGy68dSYb/LwS9ZFidYGRiM+w6rMawkZiu1mEMAsHYAfoLg==", 1799 | "dev": true, 1800 | "requires": { 1801 | "arg": "^5.0.2", 1802 | "chokidar": "^3.5.3", 1803 | "color-name": "^1.1.4", 1804 | "detective": "^5.2.1", 1805 | "didyoumean": "^1.2.2", 1806 | "dlv": "^1.1.3", 1807 | "fast-glob": "^3.2.12", 1808 | "glob-parent": "^6.0.2", 1809 | "is-glob": "^4.0.3", 1810 | "lilconfig": "^2.0.6", 1811 | "micromatch": "^4.0.5", 1812 | "normalize-path": "^3.0.0", 1813 | "object-hash": "^3.0.0", 1814 | "picocolors": "^1.0.0", 1815 | "postcss": "^8.4.17", 1816 | "postcss-import": "^14.1.0", 1817 | "postcss-js": "^4.0.0", 1818 | "postcss-load-config": "^3.1.4", 1819 | "postcss-nested": "6.0.0", 1820 | "postcss-selector-parser": "^6.0.10", 1821 | "postcss-value-parser": "^4.2.0", 1822 | "quick-lru": "^5.1.1", 1823 | "resolve": "^1.22.1" 1824 | }, 1825 | "dependencies": { 1826 | "postcss-nested": { 1827 | "version": "6.0.0", 1828 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", 1829 | "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", 1830 | "dev": true, 1831 | "requires": { 1832 | "postcss-selector-parser": "^6.0.10" 1833 | } 1834 | } 1835 | } 1836 | }, 1837 | "to-regex-range": { 1838 | "version": "5.0.1", 1839 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1840 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1841 | "dev": true, 1842 | "requires": { 1843 | "is-number": "^7.0.0" 1844 | } 1845 | }, 1846 | "util-deprecate": { 1847 | "version": "1.0.2", 1848 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1849 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1850 | "dev": true 1851 | }, 1852 | "which": { 1853 | "version": "2.0.2", 1854 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1855 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1856 | "dev": true, 1857 | "requires": { 1858 | "isexe": "^2.0.0" 1859 | } 1860 | }, 1861 | "wrappy": { 1862 | "version": "1.0.2", 1863 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1864 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1865 | "dev": true 1866 | }, 1867 | "xtend": { 1868 | "version": "4.0.2", 1869 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1870 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1871 | "dev": true 1872 | }, 1873 | "yaml": { 1874 | "version": "1.10.2", 1875 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 1876 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 1877 | "dev": true 1878 | } 1879 | } 1880 | } 1881 | -------------------------------------------------------------------------------- /theme/static_src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "theme", 3 | "version": "3.4.0", 4 | "description": "", 5 | "scripts": { 6 | "start": "npm run dev", 7 | "build": "npm run build:clean && npm run build:tailwind", 8 | "build:clean": "rimraf ../static/css/dist", 9 | "build:tailwind": "cross-env NODE_ENV=production tailwindcss --postcss -i ./src/styles.css -o ../static/css/dist/styles.css --minify", 10 | "dev": "cross-env NODE_ENV=development tailwindcss --postcss -i ./src/styles.css -o ../static/css/dist/styles.css -w", 11 | "tailwindcss": "node ./node_modules/tailwindcss/lib/cli.js" 12 | }, 13 | "keywords": [], 14 | "author": "", 15 | "license": "MIT", 16 | "devDependencies": { 17 | "@tailwindcss/aspect-ratio": "^0.4.0", 18 | "@tailwindcss/forms": "^0.5.2", 19 | "@tailwindcss/line-clamp": "^0.4.0", 20 | "@tailwindcss/typography": "^0.5.2", 21 | "cross-env": "^7.0.3", 22 | "postcss": "^8.4.14", 23 | "postcss-import": "^14.1.0", 24 | "postcss-nested": "^5.0.6", 25 | "postcss-simple-vars": "^6.0.3", 26 | "rimraf": "^3.0.2", 27 | "tailwindcss": "^3.1.6" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /theme/static_src/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | "postcss-import": {}, 4 | "postcss-simple-vars": {}, 5 | "postcss-nested": {} 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /theme/static_src/src/styles.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /theme/static_src/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a minimal config. 3 | * 4 | * If you need the full config, get it from here: 5 | * https://unpkg.com/browse/tailwindcss@latest/stubs/defaultConfig.stub.js 6 | */ 7 | 8 | module.exports = { 9 | content: [ 10 | /** 11 | * HTML. Paths to Django template files that will contain Tailwind CSS classes. 12 | */ 13 | 14 | /* Templates within theme app (/templates), e.g. base.html. */ 15 | '../templates/**/*.html', 16 | 17 | /* 18 | * Main templates directory of the project (BASE_DIR/templates). 19 | * Adjust the following line to match your project structure. 20 | */ 21 | '../../templates/**/*.html', 22 | 23 | /* 24 | * Templates in other django apps (BASE_DIR//templates). 25 | * Adjust the following line to match your project structure. 26 | */ 27 | '../../**/templates/**/*.html', 28 | 29 | /** 30 | * JS: If you use Tailwind CSS in JavaScript, uncomment the following lines and make sure 31 | * patterns match your project structure. 32 | */ 33 | /* JS 1: Ignore any JavaScript in node_modules folder. */ 34 | // '!../../**/node_modules', 35 | /* JS 2: Process all JavaScript files in the project. */ 36 | // '../../**/*.js', 37 | 38 | /** 39 | * Python: If you use Tailwind CSS classes in Python, uncomment the following line 40 | * and make sure the pattern below matches your project structure. 41 | */ 42 | // '../../**/*.py' 43 | ], 44 | theme: { 45 | extend: {}, 46 | }, 47 | plugins: [ 48 | /** 49 | * '@tailwindcss/forms' is the forms plugin that provides a minimal styling 50 | * for forms. If you don't like it or have own styling for forms, 51 | * comment the line below to disable '@tailwindcss/forms'. 52 | */ 53 | require('@tailwindcss/forms'), 54 | require('@tailwindcss/typography'), 55 | require('@tailwindcss/line-clamp'), 56 | require('@tailwindcss/aspect-ratio'), 57 | ], 58 | } 59 | -------------------------------------------------------------------------------- /theme/templates/base.html: -------------------------------------------------------------------------------- 1 | {% load static tailwind_tags %} 2 | 3 | 4 | 5 | {% block title %}Django Chatbot{% endblock %} 6 | 7 | 8 | 9 | {% tailwind_css %} 10 | 11 | 12 | 13 | {% block body %} {% endblock %} 14 | 15 | {% block scripts%}{% endblock %} 16 | 17 | --------------------------------------------------------------------------------