├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature-request.md └── pull_request_template.md ├── .gitignore ├── .images ├── Demo.png └── Icon.png ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── accounts ├── __init__.py ├── admin.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ └── __init__.py ├── models.py └── tests.py ├── config ├── __init__.py ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py ├── manage.py ├── pages ├── __init__.py ├── apps.py ├── templates │ └── pages │ │ └── home.html ├── tests.py ├── urls.py └── views.py ├── requirements.txt ├── requirments.txt ├── tailwindcss ├── __init__.py ├── apps.py └── static_src │ ├── .gitignore │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── src │ └── styles.css │ └── tailwind.config.js └── templates ├── account ├── logout.html └── signup.html └── base ├── _base.html ├── _footer.html └── _navbar.html /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Create a report to help us improve. 4 | title: Bug Report 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 16 | 1. 17 | 2. 18 | 3. 19 | 4. 20 | 21 | **Expected behavior** 22 | A clear and concise description of what you expected to happen. 23 | 24 | **Actual behavior** 25 | A clear and concise description of how the code performed w.r.t expectations. 26 | 27 | **Screenshots** 28 | If applicable, add screenshots to help explain your problem. 29 | 30 | **Additional details** 31 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: Suggest an idea for this project 4 | title: Feature Request 5 | labels: feature request 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Approach to be followed (optional)** 20 | A clear and concise description of approach to be followed. 21 | 22 | **Additional context** 23 | Add any other context or screenshots about the feature request here. 24 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 4 | 5 | **What kind of change does this PR introduce?** 6 | 7 | 8 | 9 | **Issue Number:** 10 | 11 | Fixes # 12 | 13 | **Did you add tests for your changes?** 14 | 15 | 16 | 17 | **Snapshots/Videos:** 18 | 19 | 20 | 21 | **If relevant, did you update the documentation?** 22 | 23 | 24 | 25 | **Summary** 26 | 27 | 28 | 29 | 30 | **Does this PR introduce a breaking change?** 31 | 32 | 33 | 34 | **Other information** 35 | 36 | 37 | 38 | **Have you read the [contributing guide](https://github.com/PalisadoesFoundation/talawa-docs/blob/master/CONTRIBUTING.md)?** 39 | 40 | 41 | -------------------------------------------------------------------------------- /.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 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 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 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # poetry 98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 102 | #poetry.lock 103 | 104 | # pdm 105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 106 | #pdm.lock 107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 108 | # in version control. 109 | # https://pdm.fming.dev/#use-with-ide 110 | .pdm.toml 111 | 112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 113 | __pypackages__/ 114 | 115 | # Celery stuff 116 | celerybeat-schedule 117 | celerybeat.pid 118 | 119 | # SageMath parsed files 120 | *.sage.py 121 | 122 | # Environments 123 | .env 124 | .venv 125 | env/ 126 | venv/ 127 | ENV/ 128 | env.bak/ 129 | venv.bak/ 130 | 131 | # Spyder project settings 132 | .spyderproject 133 | .spyproject 134 | 135 | # Rope project settings 136 | .ropeproject 137 | 138 | # mkdocs documentation 139 | /site 140 | 141 | # mypy 142 | .mypy_cache/ 143 | .dmypy.json 144 | dmypy.json 145 | 146 | # Pyre type checker 147 | .pyre/ 148 | 149 | # pytype static type analyzer 150 | .pytype/ 151 | 152 | # Cython debug symbols 153 | cython_debug/ 154 | 155 | # PyCharm 156 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 157 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 158 | # and can be added to the global gitignore or merged into this file. For a more nuclear 159 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 160 | #.idea/ 161 | 162 | # Logs 163 | logs 164 | *.log 165 | npm-debug.log* 166 | yarn-debug.log* 167 | yarn-error.log* 168 | lerna-debug.log* 169 | .pnpm-debug.log* 170 | 171 | # Diagnostic reports (https://nodejs.org/api/report.html) 172 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 173 | 174 | # Runtime data 175 | pids 176 | *.pid 177 | *.seed 178 | *.pid.lock 179 | 180 | # Directory for instrumented libs generated by jscoverage/JSCover 181 | lib-cov 182 | 183 | # Coverage directory used by tools like istanbul 184 | coverage 185 | *.lcov 186 | 187 | # nyc test coverage 188 | .nyc_output 189 | 190 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 191 | .grunt 192 | 193 | # Bower dependency directory (https://bower.io/) 194 | bower_components 195 | 196 | # node-waf configuration 197 | .lock-wscript 198 | 199 | # Compiled binary addons (https://nodejs.org/api/addons.html) 200 | build/Release 201 | 202 | # Dependency directories 203 | node_modules/ 204 | jspm_packages/ 205 | 206 | # Snowpack dependency directory (https://snowpack.dev/) 207 | web_modules/ 208 | 209 | # TypeScript cache 210 | *.tsbuildinfo 211 | 212 | # Optional npm cache directory 213 | .npm 214 | 215 | # Optional eslint cache 216 | .eslintcache 217 | 218 | # Optional stylelint cache 219 | .stylelintcache 220 | 221 | # Microbundle cache 222 | .rpt2_cache/ 223 | .rts2_cache_cjs/ 224 | .rts2_cache_es/ 225 | .rts2_cache_umd/ 226 | 227 | # Optional REPL history 228 | .node_repl_history 229 | 230 | # Output of 'npm pack' 231 | *.tgz 232 | 233 | # Yarn Integrity file 234 | .yarn-integrity 235 | 236 | # dotenv environment variable files 237 | .env 238 | .env.development.local 239 | .env.test.local 240 | .env.production.local 241 | .env.local 242 | 243 | # parcel-bundler cache (https://parceljs.org/) 244 | .cache 245 | .parcel-cache 246 | 247 | # Next.js build output 248 | .next 249 | out 250 | 251 | # Nuxt.js build / generate output 252 | .nuxt 253 | dist 254 | 255 | # Gatsby files 256 | .cache/ 257 | # Comment in the public line in if your project uses Gatsby and not Next.js 258 | # https://nextjs.org/blog/next-9-1#public-directory-support 259 | # public 260 | 261 | # vuepress build output 262 | .vuepress/dist 263 | 264 | # vuepress v2.x temp and cache directory 265 | .temp 266 | .cache 267 | 268 | # Docusaurus cache and generated files 269 | .docusaurus 270 | 271 | # Serverless directories 272 | .serverless/ 273 | 274 | # FuseBox cache 275 | .fusebox/ 276 | 277 | # DynamoDB Local files 278 | .dynamodb/ 279 | 280 | # TernJS port file 281 | .tern-port 282 | 283 | # Stores VSCode versions used for testing VSCode extensions 284 | .vscode-test 285 | 286 | # yarn v2 287 | .yarn/cache 288 | .yarn/unplugged 289 | .yarn/build-state.yml 290 | .yarn/install-state.gz 291 | .pnp.* 292 | 293 | CACHE/ 294 | 295 | .local_settings 296 | -------------------------------------------------------------------------------- /.images/Demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/collove/DjangoTailwindTemplate/56814b6f36bdf92c5c7c3c9674c7eac4bd50acf0/.images/Demo.png -------------------------------------------------------------------------------- /.images/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/collove/DjangoTailwindTemplate/56814b6f36bdf92c5c7c3c9674c7eac4bd50acf0/.images/Icon.png -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Contributions are what make the open source community such an amazing place to learn, inspire, and create. 4 | Any contributions you make are greatly appreciated. 5 | 6 | If you have a suggestion that would make this better, please fork the repo and create a pull request. 7 | You can also simply open an issue with the tag "enhancement". 8 | 9 | 1. Fork the Project 10 | 2. Create your Feature Branch (git checkout -b feature/AmazingFeature) 11 | 3. Commit your Changes (git commit -m 'Add some AmazingFeature') 12 | 4. Push to the Branch (git push origin feature/AmazingFeature) 13 | 5. Open a Pull Request 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Farhad Uneci 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 |

5 | 6 |

7 |
8 | 9 | > This project is still in its early stages of development. Any 10 | > contributions to the repo is very welcomed. :white_heart: 11 | 12 | Django Starter Project, Including [TailWindCSS](https://tailwindcss.com/) and all other useful modules used in my projects. 13 | 14 | ## :toolbox: Features 15 | 16 | - Django 4.0 & Python 3.10 17 | - Styling with [TailWindCSS](https://tailwindcss.com/) 18 | - Complete user authentication (Log-in/Log-out, ...) via [Django Allauth](https://github.com/pennersr/django-allauth) 19 | - Static file combine with [Django Compressor](https://django-compressor.readthedocs.io/en/) 20 | - Strict separation of settings from code by using [Python Decouple](https://pypi.org/project/python-decouple/) 21 | - TailWind-styled crispy forms via [Django Crispy Forms](https://django-crispy-forms.readthedocs.io/en/latest/) 22 | 23 | ## :film_projector: Demo 24 | 25 | ![Demo](https://raw.githubusercontent.com/Farhaduneci/DjangoTailwindTemplate/main/.images/Demo.png) 26 | 27 | ## :scroll: How to Run 28 | 29 | Clone the repository and follow the steps bellow: 30 | 31 | ### 1. Create a new virtual environment `.venv` for your project 32 | 33 | ```shell 34 | virtualenv .venv && source .venv/bin/activate 35 | ``` 36 | 37 | ### 2. Install the requirements 38 | 39 | ```shell 40 | python3 -m pip install -r requirements.txt 41 | ``` 42 | 43 | ```shell 44 | python3 manage.py tailwind install 45 | ``` 46 | 47 | ### 3. Create both `./config/local_settings.py` and `.env` files and write the following contents in them 48 | 49 | ```shell 50 | touch ./config/local_settings.py && touch .env 51 | ``` 52 | 53 | ```python 54 | # local_settings.py 55 | DEBUG = True 56 | ALLOWED_HOSTS = [] 57 | ``` 58 | 59 | Generate a new Django `SECRET_KEY` using [Djecrety](https://djecrety.ir/) and paste it in the `.env` file in the root path of the project as follows 60 | 61 | ```shell 62 | SECRET_KEY= 63 | ``` 64 | 65 | ### 4. Create an application 66 | 67 | Create a new Django app in your project 68 | 69 | ```shell 70 | python3 manage.py startapp myapp 71 | ``` 72 | 73 | > Append your local application to `INSTALLED_APPS` inside `settings.py` 74 | 75 | #### Create your URL, Template and views 76 | 77 | You can extend your templates from `base/_base.html` 78 | 79 | ### 5. Migrate :butterfly: 80 | 81 | You need to create migration files (if you have any changes in your 82 | models) and run `migrate` command to apply them. 83 | 84 | ```shell 85 | python3 manage.py makemigrations 86 | ``` 87 | 88 | ```shell 89 | python3 manage.py migrate 90 | ``` 91 | 92 | ### 6. Run your local server 93 | 94 | Start TailWindCSS by running the following command in your terminal: 95 | 96 | ```shell 97 | python3 manage.py tailwind start 98 | ``` 99 | 100 | Then you simply need to run Django's local server: 101 | 102 | ```shell 103 | python3 manage.py runserver 104 | ``` 105 | 106 | ### 7. Start Exploring :rocket: 107 | 108 | That's all you need to do for having a ready-to-develop Django project with some :battery: included. 109 | 110 | ## :question: How to use Crispy Forms 111 | 112 | Current version (crispy-tailwind/0.5) allows the `|crispy` filter to be used to style your 113 | form. In your template: 114 | 115 | 1. Load the filter: `{% load tailwind_filters %}` 116 | 2. Apply the crispy filter: `{{ form|crispy }}` 117 | 118 | You can also use the `{% crispy %}` tag to allow usage of crispy-forms' 119 | `FormHelper` and `Layout`. In your template: 120 | 121 | 1. Load the crispy tag: `{% load crispy_forms_tags %}` 122 | 2. Add `FormHelper` to your form and use crispy-forms to set-up your form 123 | 3. Use the crispy tag `{% crispy form %}` in your template 124 | 125 | > Visit [Crispy Forms Documentation](https://django-crispy-forms.readthedocs.io/en/latest/index.html) 126 | > and [crispy-tailwind](https://github.com/django-crispy-forms/crispy-tailwind) 127 | > repository for more information. 128 | 129 | ## :rainbow: Next Steps 130 | 131 | - Add [gunicorn](https://pypi.org/project/gunicorn/) as the production web server. 132 | - Update the [EMAIL_BACKEND](https://docs.djangoproject.com/en/4.0/topics/email/#module-django.core.mail) and connect with a mail provider. 133 | - Make the [admin more secure](https://opensource.com/article/18/1/10-tips-making-django-admin-more-secure). 134 | - `django-allauth` supports [social authentication](https://django-allauth.readthedocs.io/en/latest/providers.html) if you need that. 135 | 136 | ## :tickets: Contributing 137 | 138 | Contributions, issues and feature requests are welcome! See [CONTRIBUTING](https://github.com/farhaduneci/DjangoTailwindTemplate/blob/main/CONTRIBUTING.md). 139 | 140 | ## :star2: Support 141 | 142 | Give the repository a :star: if you found it helpful please. 143 | 144 | ## :shield: License 145 | 146 | This project is being licensed under the [MIT License](https://github.com/farhaduneci/DjangoTailwindTemplate/blob/main/LICENSE). 147 | 148 | ## :paperclip: Links 149 | 150 | - I recommend you to have a :eyes: at [DjangoX](https://github.com/wsvincent/djangox), one of the best starter project repos for Django. This repository uses Bootstrap and inspired me to create what you are looking at now. 151 | -------------------------------------------------------------------------------- /accounts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/collove/DjangoTailwindTemplate/56814b6f36bdf92c5c7c3c9674c7eac4bd50acf0/accounts/__init__.py -------------------------------------------------------------------------------- /accounts/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.admin import UserAdmin as BaseUserAdmin 2 | from django.contrib import admin 3 | 4 | from .models import User 5 | 6 | 7 | class UserAdmin(BaseUserAdmin): 8 | model = User 9 | list_display = ("email", "first_name", "last_name", "is_staff") 10 | fieldsets = ( 11 | (None, {"fields": ("email", "password")}), 12 | ("Personal info", {"fields": ("first_name", "last_name")}), 13 | ( 14 | "Permissions", 15 | { 16 | "fields": ( 17 | "is_active", 18 | "is_staff", 19 | "is_superuser", 20 | "groups", 21 | "user_permissions", 22 | ) 23 | }, 24 | ), 25 | ("Important dates", {"fields": ("last_login", "date_joined")}), 26 | ) 27 | add_fieldsets = ( 28 | ( 29 | None, 30 | { 31 | "classes": ("wide",), 32 | "fields": ("email", "password1", "password2"), 33 | }, 34 | ), 35 | ) 36 | search_fields = ("email", "first_name", "last_name") 37 | ordering = ("email",) 38 | filter_horizontal = ( 39 | "groups", 40 | "user_permissions", 41 | ) 42 | 43 | 44 | admin.site.register(User, UserAdmin) 45 | -------------------------------------------------------------------------------- /accounts/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AccountsConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "accounts" 7 | -------------------------------------------------------------------------------- /accounts/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.6 on 2022-07-30 10:29 2 | 3 | import django.contrib.auth.models 4 | import django.contrib.auth.validators 5 | from django.db import migrations, models 6 | import django.utils.timezone 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | initial = True 12 | 13 | dependencies = [ 14 | ('auth', '0012_alter_user_first_name_max_length'), 15 | ] 16 | 17 | operations = [ 18 | migrations.CreateModel( 19 | name='User', 20 | fields=[ 21 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 22 | ('password', models.CharField(max_length=128, verbose_name='password')), 23 | ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), 24 | ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), 25 | ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), 26 | ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), 27 | ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), 28 | ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), 29 | ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), 30 | ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), 31 | ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), 32 | ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), 33 | ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), 34 | ], 35 | options={ 36 | 'verbose_name': 'user', 37 | 'verbose_name_plural': 'users', 38 | 'abstract': False, 39 | }, 40 | managers=[ 41 | ('objects', django.contrib.auth.models.UserManager()), 42 | ], 43 | ), 44 | ] 45 | -------------------------------------------------------------------------------- /accounts/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/collove/DjangoTailwindTemplate/56814b6f36bdf92c5c7c3c9674c7eac4bd50acf0/accounts/migrations/__init__.py -------------------------------------------------------------------------------- /accounts/models.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.models import AbstractUser as BaseUser 2 | from django.db import models 3 | 4 | 5 | class User(BaseUser): 6 | pass 7 | 8 | def __str__(self): 9 | return self.username 10 | -------------------------------------------------------------------------------- /accounts/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /config/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/collove/DjangoTailwindTemplate/56814b6f36bdf92c5c7c3c9674c7eac4bd50acf0/config/__init__.py -------------------------------------------------------------------------------- /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/3.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /config/settings.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from decouple import config 4 | 5 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 6 | BASE_DIR = Path(__file__).resolve().parent.parent 7 | 8 | # Quick-start development settings - unsuitable for production 9 | SECRET_KEY = config("SECRET_KEY") 10 | 11 | # SECURITY WARNING: don't run with debug turned on in production! 12 | DEBUG = False 13 | 14 | ALLOWED_HOSTS = [] 15 | 16 | # Application definition 17 | INSTALLED_APPS = [ 18 | "django.contrib.admin", 19 | "django.contrib.auth", 20 | "django.contrib.contenttypes", 21 | "django.contrib.sessions", 22 | "django.contrib.messages", 23 | "django.contrib.staticfiles", 24 | "django.contrib.sites", 25 | # local 26 | "pages.apps.PagesConfig", 27 | "accounts.apps.AccountsConfig", 28 | "tailwindcss.apps.TailwindcssConfig", 29 | # 3rd-party 30 | "tailwind", 31 | "compressor", 32 | "crispy_forms", 33 | "crispy_tailwind", 34 | "allauth", 35 | "allauth.account", 36 | "allauth.socialaccount", 37 | ] 38 | 39 | MIDDLEWARE = [ 40 | "django.middleware.security.SecurityMiddleware", 41 | "django.contrib.sessions.middleware.SessionMiddleware", 42 | "django.middleware.common.CommonMiddleware", 43 | "django.middleware.csrf.CsrfViewMiddleware", 44 | "django.contrib.auth.middleware.AuthenticationMiddleware", 45 | "django.contrib.messages.middleware.MessageMiddleware", 46 | "django.middleware.clickjacking.XFrameOptionsMiddleware", 47 | ] 48 | 49 | ROOT_URLCONF = "config.urls" 50 | 51 | TEMPLATES = [ 52 | { 53 | "BACKEND": "django.template.backends.django.DjangoTemplates", 54 | "DIRS": [BASE_DIR / "templates"], 55 | "APP_DIRS": True, 56 | "OPTIONS": { 57 | "context_processors": [ 58 | "django.template.context_processors.debug", 59 | "django.template.context_processors.request", 60 | "django.contrib.auth.context_processors.auth", 61 | "django.contrib.messages.context_processors.messages", 62 | # `allauth` needs this from django 63 | "django.template.context_processors.request", 64 | ], 65 | }, 66 | }, 67 | ] 68 | 69 | WSGI_APPLICATION = "config.wsgi.application" 70 | 71 | # Database 72 | DATABASES = { 73 | "default": { 74 | "ENGINE": "django.db.backends.sqlite3", 75 | "NAME": BASE_DIR / "db.sqlite3", 76 | } 77 | } 78 | 79 | # Password validation 80 | AUTH_PASSWORD_VALIDATORS = [ 81 | { 82 | "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", 83 | }, 84 | { 85 | "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", 86 | }, 87 | { 88 | "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", 89 | }, 90 | { 91 | "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", 92 | }, 93 | ] 94 | 95 | # Authentication User Model 96 | AUTH_USER_MODEL = "accounts.User" 97 | 98 | # Internationalization 99 | LANGUAGE_CODE = "en-us" 100 | 101 | TIME_ZONE = "UTC" 102 | 103 | USE_I18N = True 104 | 105 | USE_L10N = True 106 | 107 | USE_TZ = True 108 | 109 | # Static files (CSS, JavaScript, Images) 110 | STATIC_URL = "/static/" 111 | STATIC_ROOT = "static/" 112 | 113 | STATICFILES_FINDERS = ("compressor.finders.CompressorFinder",) 114 | 115 | MEDIA_URL = "/media/" 116 | MEDIA_ROOT = "media/" 117 | 118 | # Login/Logout Redirect URLs 119 | LOGIN_REDIRECT_URL = "home" 120 | LOGOUT_REDIRECT_URL = "home" 121 | 122 | # TailWindCSS Settings 123 | TAILWIND_APP_NAME = "tailwindcss" 124 | 125 | INTERNAL_IPS = [ 126 | "127.0.0.1", 127 | ] 128 | 129 | # Compressor Settings 130 | COMPRESS_ROOT = BASE_DIR / "tailwindcss/static" 131 | 132 | COMPRESS_ENABLED = True 133 | 134 | # Crispy Forms Settings 135 | CRISPY_ALLOWED_TEMPLATE_PACKS = "tailwind" 136 | 137 | CRISPY_TEMPLATE_PACK = "tailwind" 138 | 139 | SITE_ID = 1 140 | 141 | AUTHENTICATION_BACKENDS = [ 142 | # Needed to login by username in Django admin, regardless of `allauth` 143 | "django.contrib.auth.backends.ModelBackend", 144 | # `allauth` specific authentication methods, such as login by e-mail 145 | "allauth.account.auth_backends.AuthenticationBackend", 146 | ] 147 | 148 | ACCOUNT_SESSION_REMEMBER = True 149 | ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = True 150 | ACCOUNT_USERNAME_REQUIRED = True 151 | ACCOUNT_AUTHENTICATION_METHOD = "username" 152 | ACCOUNT_EMAIL_VERIFICATION = "mandatory" 153 | ACCOUNT_MAX_EMAIL_ADDRESSES = 1 154 | ACCOUNT_PRESERVE_USERNAME_CASING = False 155 | ACCOUNT_PREVENT_ENUMERATION = False 156 | ACCOUNT_EMAIL_REQUIRED = True 157 | ACCOUNT_UNIQUE_EMAIL = True 158 | 159 | 160 | # Import local settings 161 | try: 162 | from .local_settings import * 163 | except ImportError: 164 | print("No local settings found") 165 | -------------------------------------------------------------------------------- /config/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path, include 2 | from django.contrib import admin 3 | 4 | urlpatterns = [ 5 | path("admin/", admin.site.urls), 6 | path("accounts/", include("allauth.urls")), 7 | path("", include("pages.urls")), 8 | ] 9 | -------------------------------------------------------------------------------- /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/3.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 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == "__main__": 22 | main() 23 | -------------------------------------------------------------------------------- /pages/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/collove/DjangoTailwindTemplate/56814b6f36bdf92c5c7c3c9674c7eac4bd50acf0/pages/__init__.py -------------------------------------------------------------------------------- /pages/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class PagesConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "pages" 7 | -------------------------------------------------------------------------------- /pages/templates/pages/home.html: -------------------------------------------------------------------------------- 1 | {% extends 'base/_base.html' %} 2 | {% block content %} 3 |
4 |
5 | 🏠 6 |

7 | You Are in 8 |
9 | 10 | Sweet Home 11 | . 12 |

13 |
14 |
15 |
16 | 17 | 21 | 22 | 23 | 24 | 25 |
26 |

27 | You can edit this page @ 28 | 29 | pages/templates/pages/home.html 30 | 31 |

32 |
33 |
34 |
35 |
36 |

Features

37 |

Get insights to dig down into what's powering your growth the most.

38 |
39 |
40 |
41 | 52 |
53 |

User Authenttication

54 |

55 | Using django-allauth this template offers a fully integrated authentication app that allows for both local and social authentication. 56 |

57 |
58 |
59 |
60 | 69 |
70 |

Ready To Use

71 |

I have included everything you need to get started as fast and easy as possible.

72 |
73 |
74 |
75 | 86 |
87 |

Zero Configuration

88 |

89 | Any required configuration is done in the settings.py file. You can edit this file to change the default settings. 90 |

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

{% trans "Sign Out" %}

8 |

{% trans 'Are you sure you want to sign out?' %}

9 |
10 | {% csrf_token %} 11 | {% if redirect_field_value %} 12 | 15 | {% endif %} 16 | 18 |
19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /templates/account/signup.html: -------------------------------------------------------------------------------- 1 | {% extends 'base/_base.html' %} 2 | {% load crispy_forms_tags %} 3 | {% load i18n %} 4 | {% block title %} 5 | Signup Page 6 | {% endblock title %} 7 | {% block content %} 8 |

{% trans "Sign Up" %}

9 |
10 | {% csrf_token %} 11 | {{ form|crispy }} 12 | 13 |
14 |
15 | 16 | 20 | 21 | 22 | 23 | 24 |
25 |

You can edit this page @ /templates/account/signup.html

26 |
27 |
28 | {% endblock content %} 29 | -------------------------------------------------------------------------------- /templates/base/_base.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | {% load compress %} 3 | {% load static tailwind_tags %} 4 | 5 | 6 | 7 | 8 | {% block title %} 9 | Django Tailwind 10 | {% endblock title %} 11 | 12 | 13 | 14 | 15 | {% compress css file styles %} 16 | {% tailwind_css %} 17 | {% endcompress %} 18 | {% block css %} 19 | {% endblock css %} 20 | 21 | 22 | {% include "base/_navbar.html" %} 23 |
24 |
25 | {% if messages %} 26 |
27 | 28 | 32 | 33 | 34 | 35 | 36 |
37 | {% for message in messages %}
  • {{ message }}
  • {% endfor %} 38 |
    39 |
    40 | {% endif %} 41 |
    42 | {% block content %} 43 | {% endblock content %} 44 |
    45 | {% include "base/_footer.html" %} 46 | {% compress js file %} 47 | {% block js %} 48 | {% endblock js %} 49 | {% endcompress %} 50 | 51 | 52 | -------------------------------------------------------------------------------- /templates/base/_footer.html: -------------------------------------------------------------------------------- 1 |
    2 |

    3 | 4 | Footer content 5 | 6 |

    7 |

    8 | Complete the 9 | _footer.html 10 | file @ 11 | templates/base/_footer.html 12 | to add your own footer content. 13 |

    14 |
    15 | -------------------------------------------------------------------------------- /templates/base/_navbar.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 |

    4 | 5 | Navbar content 6 | 7 |

    8 |
    9 | {% if user.is_authenticated %} 10 | Hello {{ user.username | title }} 11 | {% else %} 12 | 15 | Login 16 | 17 | 20 | Sign up 21 | 22 | {% endif %} 23 |
    24 |
    25 |
    26 |

    27 | Complete the 28 | _navbar.html 29 | file @ 30 | templates/base/_navbar.html 31 | to add your own navbar content. 32 |

    33 | {% if user.is_authenticated %} 34 | 37 | Log out 38 | 39 | {% endif %} 40 |
    41 |
    42 | --------------------------------------------------------------------------------