diff --git a/Dockerfile b/Dockerfile index 9f926be9b446d0bcb7f6f1a1f6c0cc0823d6966a..b2f5d6cd97d6450ad13514b8a691816d13ec3ca4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,6 +17,8 @@ RUN DATABASE_URL=postgres://x/x \ SECRET_KEY=x \ ALLOWED_HOSTS=x \ CHOBOTNICE_RV_GID=x \ + INSTAGRAM_CLIENT_ID=x \ + INSTAGRAM_CLIENT_SECRET=x \ python manage.py collectstatic --noinput --settings=rybicka.settings.production RUN bash -c "adduser --disabled-login --quiet --gecos app app && \ diff --git a/Makefile b/Makefile index 8a03c83d0073fdb0ce5c1cb8b3b7cac8e3bad2da..5de90eb598d0cdcfd4b2369ea5c694c5ef1145e0 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,6 @@ venv: .venv/bin/python install: venv ${VENV}/bin/pip install -r requirements/base.txt -r requirements/production.txt - ${VENV}/bin/nodeenv --python-virtualenv --node=19.3.0 ${VENV}/bin/npm install diff --git a/mail_signature/migrations/__init__.py b/asset_server_resize/__init__.py similarity index 100% rename from mail_signature/migrations/__init__.py rename to asset_server_resize/__init__.py diff --git a/asset_server_resize/admin.py b/asset_server_resize/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..8c38f3f3dad51e4585f3984282c2a4bec5349c1e --- /dev/null +++ b/asset_server_resize/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/asset_server_resize/apps.py b/asset_server_resize/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..61081abade1ab5e8abb35c5671c764113e681af8 --- /dev/null +++ b/asset_server_resize/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AutoServerResizeConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'asset_server_resize' diff --git a/asset_server_resize/models.py b/asset_server_resize/models.py new file mode 100644 index 0000000000000000000000000000000000000000..71a836239075aa6e6e4ecb700e9c42c95c022d91 --- /dev/null +++ b/asset_server_resize/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/asset_server_resize/templates/asset_server_resize/index.html b/asset_server_resize/templates/asset_server_resize/index.html new file mode 100644 index 0000000000000000000000000000000000000000..5eaee920f605802d5cd2df3b483b6e4860c3bdcc --- /dev/null +++ b/asset_server_resize/templates/asset_server_resize/index.html @@ -0,0 +1,97 @@ +{% extends "shared/base.html" %} + +{% load render_bundle from webpack_loader %} + +{% block title %}Generátor škálovanĂ˝ch odkazĹŻ na obrázky v Asset Serveru{% endblock %} +{% block header_name %}Ĺ kálovanĂ© obrázky{% endblock %} +{% block description %}VyplnÄ›nĂm zĂskáš odkaz na zmenšenĂ˝ obrázek z asset serveru, kterĂ˝ se dá pouĹľĂt pro embedovánĂ.{% endblock %} + +{% block head %} + <link + rel="stylesheet" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" + > + + {% render_bundle "asset_server_resize" %} +{% endblock %} + +{% block content %} + <main> + <h1 class="text-6xl font-bebas mb-5">Generátor škálovanĂ˝ch odkazĹŻ na obrázky v Asset Serveru</h1> + + <div class="grid grid-cols-2 gap-4"> + <div class="flex flex-col gap-2"> + <form class="flex flex-col gap-2 mb-4" id="asset-info-form"> + <input + id="path" + name="path" + type="text" + pattern="[^ :]+\.(jpg|jpeg|png|webp|gif)" + class="text-input form-field__control" + placeholder="Cesta k souboru" + required + > + <small class="prose text-sm"> + <p> + NapĹ™Ăklad <code>/jihomoravsky/img/flags/gb.png</code>, pro soubor + <a href="https://mrak.pirati.cz/f/475789" target="_blank">zde na + Mraku</a>. Cestu najdeš nahoĹ™e, vynechej z nĂ <code>Assets</code>. + Na konec dodej název souboru, na kterĂ˝ chceš odkázat. + </p> + </small> + + <input + id="height" + name="height" + type="number" + min="0" + class="text-input form-field__control" + placeholder="Výška" + > + <input + id="width" + name="width" + type="number" + min="0" + class="text-input form-field__control" + placeholder="Ĺ Ărka" + > + + <small class="prose text-sm my-2"> + <p> + StaÄŤĂ vyplnit pouze jeden rozmÄ›r. Obrázek se mu pĹ™izpĹŻsobĂ. + </p> + </small> + + <div> + <button + type="submit" + class="btn btn--icon" + id="generate-url" + > + <div class="btn__body-wrap"> + <div class="btn__body">Vygenerovat</div> + <div class="btn__icon"> + <i class="ico--chevron-right"></i> + </div> + </div> + </button> + </div> + </form> + + <small class="prose text-sm"> + <p> + Dalšà informace o Asset serveru najdeš na <a + href="https://wiki.pirati.cz/to/navody/asset-server" target="_blank"> + Wiki v návodu</a>. + </p> + </small> + </div> + <div id="result-wrapper" class="flex flex-col gap-2 hidden"> + <h3 class="head-alt-sm">VygenerovanĂ˝ odkaz</h3> + + <a href="" id="result"></a> + </div> + </div> + </main> +{% endblock %} diff --git a/asset_server_resize/tests.py b/asset_server_resize/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6 --- /dev/null +++ b/asset_server_resize/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/asset_server_resize/urls.py b/asset_server_resize/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..574ce2d03ea21494b3abbc05eb6b9b9fbd82c9a4 --- /dev/null +++ b/asset_server_resize/urls.py @@ -0,0 +1,8 @@ +from django.urls import path + +from . import views + +app_name = "asset_server_resize" +urlpatterns = [ + path("", views.index, name="index"), +] diff --git a/asset_server_resize/views.py b/asset_server_resize/views.py new file mode 100644 index 0000000000000000000000000000000000000000..c2f44dc9ef45a62f888bd3a3698fe9ce79cc54e7 --- /dev/null +++ b/asset_server_resize/views.py @@ -0,0 +1,13 @@ +from django.conf import settings +from django.shortcuts import render +from django_http_exceptions import HTTPExceptions + +# Create your views here. + + +def index(request): + return render( + request, + "asset_server_resize/index.html", + {} + ) diff --git a/env.example b/env.example index 3b703bebba92d99e88b0ba05a04d7903be5c1037..6c528c0e1f97c09b04947d1426c1f383d49206f2 100644 --- a/env.example +++ b/env.example @@ -5,5 +5,8 @@ SECRET_KEY="%@=^sip3=tqn6d_-xvvidc1@-t0t3&*kab@vr4c4" CHOBOTNICE_API_URL="https://chobotnice.pirati.cz/graphql/" CHOBOTNICE_RV_GID="R3JvdXBUeXBlOjYyNQ==" +INSTAGRAM_CLIENT_ID=3828083077418467 +INSTAGRAM_CLIENT_SECRET=da7ea1af344e60ccd2bfcfa0f296b808 + # Production settings ALLOWED_HOSTS="tools.pirati.cz" diff --git a/member_group_size_calc/migrations/__init__.py b/instagram_token/__init__.py similarity index 100% rename from member_group_size_calc/migrations/__init__.py rename to instagram_token/__init__.py diff --git a/instagram_token/admin.py b/instagram_token/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..8c38f3f3dad51e4585f3984282c2a4bec5349c1e --- /dev/null +++ b/instagram_token/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/instagram_token/apps.py b/instagram_token/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..135a246c66478b2cdb299307c8b08b1c71354cc1 --- /dev/null +++ b/instagram_token/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class InstagramTokenConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'instagram_token' diff --git a/instagram_token/models.py b/instagram_token/models.py new file mode 100644 index 0000000000000000000000000000000000000000..71a836239075aa6e6e4ecb700e9c42c95c022d91 --- /dev/null +++ b/instagram_token/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/instagram_token/templates/instagram_token/exchange.html b/instagram_token/templates/instagram_token/exchange.html new file mode 100644 index 0000000000000000000000000000000000000000..ae03e0deb6498805456173950ccf39908603c557 --- /dev/null +++ b/instagram_token/templates/instagram_token/exchange.html @@ -0,0 +1,38 @@ +{% extends "shared/base.html" %} + +{% load render_bundle from webpack_loader %} + +{% block title %}KalkulaÄŤka pĹ™ĂstupovĂ˝ch tokenĹŻ do Instagramu{% endblock %} +{% block header_name %}Instagram{% endblock %} +{% block description %}PĹ™ihlášenĂm svĂ˝m účtem zĂskáš pĹ™ĂstupovĂ© Ăşdaje, kterĂ© mĹŻĹľeš vyuĹľĂt pro synchronizaci obsahu na domovskĂ© stránce pirati.cz.{% endblock %} + +{% block head %} + <link + rel="stylesheet" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" + > +{% endblock %} + +{% block content %} + <main> + <h1 class="text-6xl font-bebas mb-5">KalkulaÄŤka pĹ™ĂstupovĂ˝ch tokenĹŻ do Instagramu</h1> + + <div class="prose max-w-none mb-8"> + <p> + VĂ˝sledky nĂĹľe mĹŻĹľeš zkopĂrovat do Majáku. <strong>Pozor, tato stránka se zobrazĂ pouze jednou!</strong> + </p> + </div> + + <div class="prose max-w-none"> + <p> + <strong>UĹľivatelskĂ© ID:</strong> + <pre>{{ user_id }}</pre> + </p> + + <p> + <strong>PĹ™ĂstupovĂ˝ token:</strong> + <pre>{{ access_token }}</pre> + </p> + </div> + </main> +{% endblock %} diff --git a/instagram_token/templates/instagram_token/index.html b/instagram_token/templates/instagram_token/index.html new file mode 100644 index 0000000000000000000000000000000000000000..1a84fb3c2f75089cfc6883c0dda5c3ad3a747059 --- /dev/null +++ b/instagram_token/templates/instagram_token/index.html @@ -0,0 +1,37 @@ +{% extends "shared/base.html" %} + +{% load render_bundle from webpack_loader %} + +{% block title %}KalkulaÄŤka pĹ™ĂstupovĂ˝ch tokenĹŻ do Instagramu{% endblock %} +{% block header_name %}Instagram{% endblock %} +{% block description %}PĹ™ihlášenĂm svĂ˝m účtem zĂskáš pĹ™ĂstupovĂ© Ăşdaje, kterĂ© mĹŻĹľeš vyuĹľĂt pro synchronizaci obsahu na domovskĂ© stránce pirati.cz.{% endblock %} + +{% block head %} + <link + rel="stylesheet" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" + > +{% endblock %} + +{% block content %} + <main> + <h1 class="text-6xl font-bebas mb-5">KalkulaÄŤka pĹ™ĂstupovĂ˝ch tokenĹŻ do Instagramu</h1> + + <div class="prose max-w-none mb-8"> + <p> + PĹ™ihlášenĂm svĂ˝m účtem zĂskáš pĹ™ĂstupovĂ© Ăşdaje, kterĂ© mĹŻĹľeš vyuĹľĂt pro + <a href="https://majak.pirati.cz/admin" target="_blank">synchronizaci obsahu</a> + na domovskĂ© stránce pirati.cz. + </p> + </div> + + <a class="btn btn--icon" href="{{ authorization_url }}"> + <div class="btn__body-wrap"> + <div class="btn__body">PĹ™ihlásit se</div> + <div class="btn__icon"> + <i class="ico--chevron-right"></i> + </div> + </div> + </a> + </main> +{% endblock %} diff --git a/instagram_token/tests.py b/instagram_token/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6 --- /dev/null +++ b/instagram_token/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/instagram_token/urls.py b/instagram_token/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..85837f074a97cba8b2b5209e6cdfa0ee4d923596 --- /dev/null +++ b/instagram_token/urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from . import views + +app_name = "instagram_token" +urlpatterns = [ + path("", views.index, name="index"), + path("exchange", views.exchange, name="exchange"), +] diff --git a/instagram_token/views.py b/instagram_token/views.py new file mode 100644 index 0000000000000000000000000000000000000000..9f31e77dd1e0d1d82e3dc15538956ae68eaefb1e --- /dev/null +++ b/instagram_token/views.py @@ -0,0 +1,60 @@ +import requests + +from django.conf import settings +from django.shortcuts import render +from django.urls import reverse +from django_http_exceptions import HTTPExceptions + +# Create your views here. + + +def index(request): + redirect_uri = request.build_absolute_uri(reverse("instagram_token:exchange")) + + authorization_url = ( + "https://api.instagram.com/oauth/authorize" + f"?client_id={settings.INSTAGRAM_CLIENT_ID}" + f"&redirect_uri={redirect_uri}" + "&scope=user_profile,user_media" + "&response_type=code" + ) + + return render( + request, + "instagram_token/index.html", + { + "authorization_url": authorization_url + } + ) + + +def exchange(request): + code = request.GET.get("code") + + if code is None: + return reverse("instagram_token:index") + + exchange_request = requests.post( + "https://api.instagram.com/oauth/access_token", + data={ + "client_id": settings.INSTAGRAM_CLIENT_ID, + "client_secret": settings.INSTAGRAM_CLIENT_SECRET, + "code": code, + "grant_type": "authorization_code", + "redirect_uri": request.build_absolute_uri(reverse("instagram_token:exchange")), + } + ) + + if not exchange_request.ok: + raise HTTPExceptions.BAD_REQUEST + + exchange_request = exchange_request.json() + + return render( + request, + "instagram_token/exchange.html", + { + "access_token": exchange_request["access_token"], + "user_id": exchange_request["user_id"], + } + ) diff --git a/mail_signature/templates/mail_signature/index.html b/mail_signature/templates/mail_signature/index.html index 700f1ffaaf6f547037cbd8955d7aa77cb9cb0390..d2f58072cfabd0fee25ade950bb5f52b1713d468 100644 --- a/mail_signature/templates/mail_signature/index.html +++ b/mail_signature/templates/mail_signature/index.html @@ -9,7 +9,7 @@ {% block head %} <link rel="stylesheet" - href="https://styleguide.pirati.cz/2.11.x/css/styles.css" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" > {% render_bundle "mail_signature" %} diff --git a/member_group_size_calc/templates/member_group_size_calc/index.html b/member_group_size_calc/templates/member_group_size_calc/index.html index 965dae67beaa5d4a80baa849ca5dc8288d56f6ea..dd050a71dbe6a608ac4d8b845900cca259145828 100644 --- a/member_group_size_calc/templates/member_group_size_calc/index.html +++ b/member_group_size_calc/templates/member_group_size_calc/index.html @@ -9,7 +9,7 @@ {% block head %} <link rel="stylesheet" - href="https://styleguide.pirati.cz/2.11.x/css/styles.css" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" > {% render_bundle "member_group_size_calc" %} diff --git a/package-lock.json b/package-lock.json index 4c5d785320bba8700e49408cfa5b1167748221cd..1ffe84608e5db3d89a6ec42a46c5e2634989b1b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,19 +9,107 @@ "version": "0.0.1", "license": "AGPL-3.0-or-later", "dependencies": { - "@tailwindcss/typography": "^0.5.9", + "@tailwindcss/typography": "^0.4.1", "alertifyjs": "^1.13.1", "css-loader": "^6.7.3", "jquery": "^3.6.4", "js-cookie": "^3.0.1", "select2": "^4.1.0-rc.0", "style-loader": "^3.3.2", - "tailwindcss": "^3.3.1", + "tailwindcss": "^2.2.2", "webpack": "^5.77.0", "webpack-bundle-tracker": "^1.8.1", "webpack-cli": "^5.0.1" } }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -30,6 +118,17 @@ "node": ">=10.0.0" } }, + "node_modules/@fullhuman/postcss-purgecss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-4.1.3.tgz", + "integrity": "sha512-jqcsyfvq09VOsMXxJMPLRF6Fhg/NNltzWKnC9qtzva+QKTxerCO4esG6je7hbnmkpZtaDyPTwMBj9bzfWorsrw==", + "dependencies": { + "purgecss": "^4.1.3" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", @@ -115,29 +214,17 @@ } }, "node_modules/@tailwindcss/typography": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz", - "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.1.tgz", + "integrity": "sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA==", "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" + "lodash.uniq": "^4.5.0" }, "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, - "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "tailwindcss": ">=2.0.0" } }, "node_modules/@types/eslint": { @@ -173,6 +260,11 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -355,6 +447,35 @@ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -391,10 +512,19 @@ "node": ">=8" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, "node_modules/anymatch": { "version": "3.1.3", @@ -413,6 +543,39 @@ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "peer": true, + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -447,9 +610,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -461,10 +624,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -478,6 +641,22 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -487,9 +666,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001445", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001445.tgz", - "integrity": "sha512-8sdQIdMztYmzfTMO6KfLny878Ln9c2M0fc7EH60IjlP4Dc4PiCy7K2Vl3ITmWgOyPgVQKa5x+UP/KqFsxj4mBg==", + "version": "1.0.30001481", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", + "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", "funding": [ { "type": "opencollective", @@ -498,9 +677,39 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -559,11 +768,53 @@ "node": ">=6" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", @@ -579,6 +830,21 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -617,6 +883,11 @@ "webpack": "^5.0.0" } }, + "node_modules/css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -628,6 +899,30 @@ "node": ">=4" } }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -666,6 +961,14 @@ "node": ">=4" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -679,6 +982,14 @@ "node": ">=6" } }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -801,6 +1112,32 @@ "node": ">=8" } }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "peer": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -825,14 +1162,14 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -883,6 +1220,17 @@ "node": ">=8" } }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -894,6 +1242,29 @@ "postcss": "^8.1.0" } }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -934,6 +1305,11 @@ "node": ">=10.13.0" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1020,14 +1396,6 @@ "node": ">= 10.13.0" } }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "bin": { - "jiti": "bin/jiti.js" - } - }, "node_modules/jquery": { "version": "3.6.4", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", @@ -1041,6 +1409,11 @@ "node": ">=12" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -1051,6 +1424,17 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -1091,6 +1475,11 @@ "node": ">=8" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", @@ -1136,6 +1525,16 @@ "resolved": "https://registry.npmjs.org/lodash.topairs/-/lodash.topairs-4.3.0.tgz", "integrity": "sha512-qrRMbykBSEGdOgQLJJqVSdPWMD7Q+GJJ5jMRfQYb+LTLsw3tYVIabnCzRqTJb2WTo17PG5gNzXuFaZgYH/9SAQ==" }, + "node_modules/lodash.topath": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", + "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1202,14 +1601,23 @@ "node": "*" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/modern-normalize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nanoid": { @@ -1228,6 +1636,14 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/node-releases": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", @@ -1241,18 +1657,19 @@ "node": ">=0.10.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", "engines": { "node": ">= 6" } @@ -1298,6 +1715,34 @@ "node": ">=6" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -1327,6 +1772,14 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -1343,22 +1796,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "engines": { - "node": ">= 6" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -1393,38 +1830,20 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", + "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", "dependencies": { - "camelcase-css": "^2.0.1" + "camelcase-css": "^2.0.1", + "postcss": "^8.1.6" }, "engines": { - "node": "^12 || ^14 || >= 16" + "node": ">=10.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" } }, "node_modules/postcss-load-config": { @@ -1511,21 +1930,21 @@ } }, "node_modules/postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz", + "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==", "dependencies": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=12.0" + "node": ">=10.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "postcss": "^8.2.14" + "postcss": "^8.1.13" } }, "node_modules/postcss-selector-parser": { @@ -1545,6 +1964,14 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/punycode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", @@ -1553,6 +1980,28 @@ "node": ">=6" } }, + "node_modules/purgecss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", + "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", + "dependencies": { + "commander": "^8.0.0", + "glob": "^7.1.7", + "postcss": "^8.3.5", + "postcss-selector-parser": "^6.0.6" + }, + "bin": { + "purgecss": "bin/purgecss.js" + } + }, + "node_modules/purgecss/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -1591,14 +2040,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dependencies": { - "pify": "^2.3.0" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1621,6 +2062,20 @@ "node": ">= 10.13.0" } }, + "node_modules/reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "dependencies": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -1665,6 +2120,20 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -1780,6 +2249,19 @@ "node": ">=8" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1831,34 +2313,6 @@ "webpack": "^5.0.0" } }, - "node_modules/sucrase": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.31.0.tgz", - "integrity": "sha512-6QsHnkqyVEzYcaiHsOKkzOtOgdJcb8i54x6AV2hDwyZcY9ZyykGZVw6L/YN98xC0evwTP6utsWWrKRaa8QlfEQ==", - "dependencies": { - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -1885,34 +2339,41 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", - "integrity": "sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==", - "dependencies": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "didyoumean": "^1.2.2", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.2.tgz", + "integrity": "sha512-OzFWhlnfrO3JXZKHQiqZcb0Wwl3oJSmQ7PvT2jdIgCjV5iUoAyql9bb9ZLCSBI5TYXmawujXAoNxXVfP5Auy/Q==", + "dependencies": { + "@fullhuman/postcss-purgecss": "^4.0.3", + "arg": "^5.0.0", + "bytes": "^3.0.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "color": "^3.1.3", + "cosmiconfig": "^7.0.0", + "detective": "^5.2.0", + "didyoumean": "^1.2.1", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.17.2", - "lilconfig": "^2.0.6", - "micromatch": "^4.0.5", + "fast-glob": "^3.2.5", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.0", + "html-tags": "^3.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.8.1", "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.0.9", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", + "object-hash": "^2.2.0", + "postcss-js": "^3.0.3", + "postcss-load-config": "^3.0.1", + "postcss-nested": "5.0.5", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", "quick-lru": "^5.1.1", - "resolve": "^1.22.1", - "sucrase": "^3.29.0" + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" }, "bin": { "tailwind": "lib/cli.js", @@ -1922,6 +2383,7 @@ "node": ">=12.13.0" }, "peerDependencies": { + "autoprefixer": "^10.0.2", "postcss": "^8.0.9" } }, @@ -1994,23 +2456,15 @@ "node": ">=0.4.0" } }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=8.17.0" } }, "node_modules/to-regex-range": { @@ -2024,10 +2478,13 @@ "node": ">=8.0" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } }, "node_modules/update-browserslist-db": { "version": "1.0.10", @@ -2254,6 +2711,14 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index 9ccce2967e840570904773f02679a81487ab58cb..a372dd615e06a6bd4475e6b508f24d3e195023bb 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,14 @@ "description": "", "private": true, "dependencies": { - "@tailwindcss/typography": "^0.5.9", + "@tailwindcss/typography": "^0.4.1", "alertifyjs": "^1.13.1", "css-loader": "^6.7.3", "jquery": "^3.6.4", "js-cookie": "^3.0.1", "select2": "^4.1.0-rc.0", "style-loader": "^3.3.2", - "tailwindcss": "^3.3.1", + "tailwindcss": "^2.2.2", "webpack": "^5.77.0", "webpack-bundle-tracker": "^1.8.1", "webpack-cli": "^5.0.1" diff --git a/requirements/base.txt b/requirements/base.txt index fe6b002554d53683818bd6e20d728659bead4bb7..287bf10146a2e892c511e89d51f443ee0c7ffce0 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -4,6 +4,5 @@ django-environ==0.9.0 django-webpack-loader==1.8.0 django-http-exceptions==1.4.0 gql[requests]==3.4.0 -nodeenv==1.7.0 psycopg2-binary==2.9.5 requests==2.28.2 diff --git a/rybicka/settings/base.py b/rybicka/settings/base.py index 882e6cdb172c968dc011c88623654de11d64bb94..ba1cefd3c84b3030936c968766a7a54129b4de38 100644 --- a/rybicka/settings/base.py +++ b/rybicka/settings/base.py @@ -35,6 +35,10 @@ ALLOWED_HOSTS = [] STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles") +# Server + +SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') + # Application definition INSTALLED_APPS = [ @@ -49,6 +53,8 @@ INSTALLED_APPS = [ "member_group_size_calc", "rv_voting_calc", "mail_signature", + "instagram_token", + "asset_server_resize", ] MIDDLEWARE = [ @@ -125,3 +131,8 @@ CHOBOTNICE_API_URL=env.str( "https://chobotnice.pirati.cz/graphql/" ) CHOBOTNICE_RV_GID=env.str("CHOBOTNICE_RV_GID") + +# Instagram + +INSTAGRAM_CLIENT_ID = env.str("INSTAGRAM_CLIENT_ID") +INSTAGRAM_CLIENT_SECRET = env.str("INSTAGRAM_CLIENT_SECRET") diff --git a/rybicka/urls.py b/rybicka/urls.py index 4ebfaabffa1eedac7536f972d8a4317aa939411f..55d8d71adbb991d3b0bf44604b7f41ecc70991b8 100644 --- a/rybicka/urls.py +++ b/rybicka/urls.py @@ -19,5 +19,7 @@ urlpatterns = [ path("vypocet-skupiny-clenu/", include("member_group_size_calc.urls")), path("hlasovani-rv/", include("rv_voting_calc.urls")), path("emailove-podpisy/", include("mail_signature.urls")), + path("instagram/", include("instagram_token.urls")), + path("asset-server/", include("asset_server_resize.urls")), path("", include("shared.urls")), ] diff --git a/shared/static/shared/image.webp b/shared/static/shared/image.webp new file mode 100644 index 0000000000000000000000000000000000000000..62a9c7433a220288ee6fd07caaada27693e49e87 Binary files /dev/null and b/shared/static/shared/image.webp differ diff --git a/shared/static/shared/instagram.webp b/shared/static/shared/instagram.webp new file mode 100644 index 0000000000000000000000000000000000000000..014dc7e491ad8fc32c381fc2d5d907d15d52f1a3 Binary files /dev/null and b/shared/static/shared/instagram.webp differ diff --git a/shared/templates/shared/base.html b/shared/templates/shared/base.html index 5026bbae29fc5f302da929d0c01ed06fe8bbd539..47bb0c82724e93f5478c6ee079a58d462015e4a0 100644 --- a/shared/templates/shared/base.html +++ b/shared/templates/shared/base.html @@ -64,7 +64,7 @@ </ui-navbar> </ui-app> </nav> - <div class="container container--default py-8 lg:py-24 {% if page.root_page.narrow_layout %}max-w-screen-lg{% endif%}"> + <div class="container container--default py-8 lg:py-24"> {% block content %}{% endblock %} </div> <footer class="footer bg-grey-700 text-white __js-root hidden lg:block"> diff --git a/shared/templates/shared/index.html b/shared/templates/shared/index.html index a42a2850239e307d86cddbda031c3c7b4435065e..c4650c5ea643b15d27e670b5b8b901affdb553d1 100644 --- a/shared/templates/shared/index.html +++ b/shared/templates/shared/index.html @@ -15,7 +15,7 @@ <main class="flex flex-col gap-8"> <section> <h2 class="head-alt-md mb-5">ZabudovanĂ© nástroje</h2> - + <ul class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> <li class="card"> <a href="{% url "member_group_size_calc:index" %}"> @@ -36,7 +36,7 @@ </div> </div> </li> - + <li class="card"> <a href="{% url "rv_voting_calc:index" %}"> <img @@ -56,7 +56,7 @@ </div> </div> </li> - + <li class="card"> <a href="{% url "mail_signature:index" %}" target="_blank"> <img @@ -76,12 +76,53 @@ </div> </div> </li> + + <li class="card"> + <a href="{% url "instagram_token:index" %}" target="_blank"> + <img + src="{% static "shared/instagram.webp" %}" + alt="KalkulaÄŤka pĹ™ĂstupovĂ˝ch tokenĹŻ do Instagramu" + class="w-full h-48 object-cover" + > + </a> + <div class="p-4"> + <h2 class="mb-2 text-xl font-bold"> + <a href="{% url "instagram_token:index" %}" target="_blank"> + KalkulaÄŤka pĹ™ĂstupovĂ˝ch tokenĹŻ do Instagramu + </a> + </h2> + <div class="font-light text-sm break-words"> + PĹ™ihlášenĂm svĂ˝m účtem zĂskáš pĹ™ĂstupovĂ© Ăşdaje, kterĂ© mĹŻĹľeš vyuĹľĂt pro + synchronizaci obsahu na domovskĂ© stránce pirati.cz. + </div> + </div> + </li> + + <li class="card"> + <a href="{% url "asset_server_resize:index" %}"> + <img + src="{% static "shared/image.webp" %}" + alt="Generátor škálovanĂ˝ch odkazĹŻ na obrázky v Asset Serveru" + class="w-full h-48 object-cover" + > + </a> + <div class="p-4"> + <h2 class="mb-2 text-xl font-bold"> + <a href="{% url "asset_server_resize:index" %}"> + Generátor škálovanĂ˝ch odkazĹŻ na obrázky v Asset Serveru + </a> + </h2> + <div class="font-light text-sm break-words"> + VyplnÄ›nĂm zĂskáš odkaz na zmenšenĂ˝ obrázek z asset serveru, kterĂ˝ se dá pouĹľĂt pro embedovánĂ. + </div> + </div> + </li> </ul> </section> - + <section> <h2 class="head-alt-md mb-5">ExternĂ nástroje</h2> - + <ul class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> <li class="card"> <a href="https://z.pirati.cz" target="_blank"> @@ -102,7 +143,7 @@ </div> </div> </li> - + <li class="card"> <a href="https://generator.pirati.cz" target="_blank"> <img diff --git a/static_src/asset_server_resize.js b/static_src/asset_server_resize.js new file mode 100644 index 0000000000000000000000000000000000000000..275bb403c62b8fca0fd68ef2108d35cb9c6c76f8 --- /dev/null +++ b/static_src/asset_server_resize.js @@ -0,0 +1,43 @@ +import $ from "jquery"; + +$(window).ready( + () => { + $("#generate-url").on( + "click", + event => { + event.preventDefault(); + + const form = $("#asset-info-form")[0]; + + if (!form.checkValidity()) { + form.reportValidity(); + return; + } + + let width = $("#width").val(); + let height = $("#height").val(); + + if (width === "" && height === "") { + alert("ProsĂm, vyplĹ aspoĹ jeden rozmÄ›r."); + return; + } + + let path = $("#path").val(); + + if (!path.startsWith("/")) { + path = `/${path}`; + } + + if (width === "") { width = "-" } + if (height === "") { height = "-" } + + const url = `https://a.pirati.cz/resize/${width}x${height}${path}`; + + $("#result").attr("href", url); + $("#result").html(url); + + $("#result-wrapper").removeClass("hidden"); + } + ); + } +) diff --git a/webpack.config.js b/webpack.config.js index c67bb032134af850baf990aed347e54bde2492de..64386ccabf56b6fcb90831314851d5ee99c0b244 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,6 +21,10 @@ module.exports = { import: path.resolve("static_src", "mail_signature.js"), dependOn: "shared", }, + asset_server_resize: { + import: path.resolve("static_src", "asset_server_resize.js"), + dependOn: "shared", + }, shared: ["jquery"], }, output: {