├── .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 | 
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 | .
12 |
13 |
14 |
15 |
16 |
17 |
24 |
25 |
26 |
27 | You can edit this page @
28 |
29 | pages/templates/pages/home.html
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | Get insights to dig down into what's powering your growth the most.
38 |
39 |
40 |
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 |
70 |
Ready To Use
71 |
I have included everything you need to get started as fast and easy as possible.
72 |
73 |
74 |
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 |
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 |
14 |
15 |
16 |
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 |
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 |
15 |
--------------------------------------------------------------------------------
/templates/base/_navbar.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Navbar content
6 |
7 |
8 |
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 |
--------------------------------------------------------------------------------