From 780168f5899c4b43d60d4414091a9282324a3b5a Mon Sep 17 00:00:00 2001 From: Dmitry Aladzyeu Date: Sun, 3 Sep 2023 13:47:35 +0300 Subject: [PATCH 1/7] Messenger prototype created --- README.md | 98 +- netlify.toml | 9 + package-lock.json | 3227 ++++++++++++++++++++++ package.json | 26 + server.js | 16 + src/assets/img/avatars/alad.png | Bin 0 -> 14796 bytes src/assets/img/avatars/denisov.png | Bin 0 -> 15126 bytes src/assets/img/avatars/isaeva.png | Bin 0 -> 8076 bytes src/assets/img/avatars/milev.png | Bin 0 -> 7985 bytes src/assets/img/avatars/talag.png | Bin 0 -> 14054 bytes src/assets/img/avatars/trosh.png | Bin 0 -> 12049 bytes src/assets/img/avatars/viguz.png | Bin 0 -> 9876 bytes src/assets/img/components/add.svg | 5 + src/assets/img/components/arrow.svg | 3 + src/assets/img/components/error404.svg | 123 + src/assets/img/components/error500.svg | 61 + src/assets/img/components/search.svg | 10 + src/assets/img/components/settings.svg | 8 + src/assets/img/sample.png | Bin 0 -> 119 bytes src/assets/sass/_mixins.sass | 3 + src/assets/sass/_templates.sass | 25 + src/assets/sass/_variables.sass | 20 + src/components/avatar/avatar.hbs | 4 + src/components/avatar/avatar.js | 2 + src/components/avatar/avatar.sass | 56 + src/components/button/button.hbs | 5 + src/components/button/button.js | 10 + src/components/button/button.sass | 56 + src/components/chat-item/chat-item.hbs | 30 + src/components/chat-item/chat-item.js | 2 + src/components/chat-item/chat-item.sass | 83 + src/components/chat-list/chat-list.hbs | 13 + src/components/chat-list/chat-list.js | 2 + src/components/chat-list/chat-list.sass | 29 + src/components/form-auth/form-auth.hbs | 3 + src/components/form-auth/form-auth.js | 3 + src/components/form-auth/form-auth.sass | 37 + src/components/info/info-bar.hbs | 5 + src/components/info/info-bar.js | 2 + src/components/info/info-bar.sass | 21 + src/components/input/input.hbs | 11 + src/components/input/input.js | 10 + src/components/input/input.sass | 79 + src/components/search/search.hbs | 4 + src/components/search/search.js | 2 + src/components/search/search.sass | 31 + src/data.json | 362 +++ src/index.html | 11 + src/main.js | 60 + src/pages/404/404.hbs | 13 + src/pages/404/404.js | 2 + src/pages/404/404.sass | 49 + src/pages/500/500.hbs | 13 + src/pages/500/500.js | 2 + src/pages/500/500.sass | 49 + src/pages/chat/chat.hbs | 30 + src/pages/chat/chat.js | 2 + src/pages/chat/chat.sass | 69 + src/pages/login/login.hbs | 13 + src/pages/login/login.js | 2 + src/pages/login/login.sass | 42 + src/pages/profile/profile.hbs | 26 + src/pages/profile/profile.js | 2 + src/pages/profile/profile.sass | 59 + src/pages/registration/registration.hbs | 18 + src/pages/registration/registration.js | 2 + src/pages/registration/registration.sass | 42 + src/templates/greeting.hbs | 1 + vite-plugin-handlebars-precompile.ts | 27 + vite.config.js | 29 + 70 files changed, 4986 insertions(+), 73 deletions(-) create mode 100644 netlify.toml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 server.js create mode 100644 src/assets/img/avatars/alad.png create mode 100644 src/assets/img/avatars/denisov.png create mode 100644 src/assets/img/avatars/isaeva.png create mode 100644 src/assets/img/avatars/milev.png create mode 100644 src/assets/img/avatars/talag.png create mode 100644 src/assets/img/avatars/trosh.png create mode 100644 src/assets/img/avatars/viguz.png create mode 100644 src/assets/img/components/add.svg create mode 100644 src/assets/img/components/arrow.svg create mode 100644 src/assets/img/components/error404.svg create mode 100644 src/assets/img/components/error500.svg create mode 100644 src/assets/img/components/search.svg create mode 100644 src/assets/img/components/settings.svg create mode 100644 src/assets/img/sample.png create mode 100644 src/assets/sass/_mixins.sass create mode 100644 src/assets/sass/_templates.sass create mode 100644 src/assets/sass/_variables.sass create mode 100644 src/components/avatar/avatar.hbs create mode 100644 src/components/avatar/avatar.js create mode 100644 src/components/avatar/avatar.sass create mode 100644 src/components/button/button.hbs create mode 100644 src/components/button/button.js create mode 100644 src/components/button/button.sass create mode 100644 src/components/chat-item/chat-item.hbs create mode 100644 src/components/chat-item/chat-item.js create mode 100644 src/components/chat-item/chat-item.sass create mode 100644 src/components/chat-list/chat-list.hbs create mode 100644 src/components/chat-list/chat-list.js create mode 100644 src/components/chat-list/chat-list.sass create mode 100644 src/components/form-auth/form-auth.hbs create mode 100644 src/components/form-auth/form-auth.js create mode 100644 src/components/form-auth/form-auth.sass create mode 100644 src/components/info/info-bar.hbs create mode 100644 src/components/info/info-bar.js create mode 100644 src/components/info/info-bar.sass create mode 100644 src/components/input/input.hbs create mode 100644 src/components/input/input.js create mode 100644 src/components/input/input.sass create mode 100644 src/components/search/search.hbs create mode 100644 src/components/search/search.js create mode 100644 src/components/search/search.sass create mode 100644 src/data.json create mode 100644 src/index.html create mode 100644 src/main.js create mode 100644 src/pages/404/404.hbs create mode 100644 src/pages/404/404.js create mode 100644 src/pages/404/404.sass create mode 100644 src/pages/500/500.hbs create mode 100644 src/pages/500/500.js create mode 100644 src/pages/500/500.sass create mode 100644 src/pages/chat/chat.hbs create mode 100644 src/pages/chat/chat.js create mode 100644 src/pages/chat/chat.sass create mode 100644 src/pages/login/login.hbs create mode 100644 src/pages/login/login.js create mode 100644 src/pages/login/login.sass create mode 100644 src/pages/profile/profile.hbs create mode 100644 src/pages/profile/profile.js create mode 100644 src/pages/profile/profile.sass create mode 100644 src/pages/registration/registration.hbs create mode 100644 src/pages/registration/registration.js create mode 100644 src/pages/registration/registration.sass create mode 100644 src/templates/greeting.hbs create mode 100644 vite-plugin-handlebars-precompile.ts create mode 100644 vite.config.js diff --git a/README.md b/README.md index bcd1a1367..e94029781 100644 --- a/README.md +++ b/README.md @@ -1,83 +1,35 @@ -### Ветка, в которой делаете задания спринта, должна называться sprint_i, где i - номер спринта. Не переименовывайте её. +# Онлайн мессенджер для практикума -### Откройте pull request в ветку main из ветки, где вы разрабатывали проект, и добавьте ссылку на этот pr в README.md в ветке main. -### ВАЖНО: pull request должен называться “Sprint i” (i — номер спринта). +## Онлайн мессенджер - это приложение, которое позволяет пользователям общаться в режиме онлайн, задавать вопросы и получать помощь от других пользователей. Онлайн мессенджер может быть полезен для тех, кто хочет общаться с друзьями и семьей в любое время, а также для тех, кто хочет получать помощь от опытных людей в области IT. -### Например, задания для проектной работы во втором спринте вы делаете в ветке sprint_2. Открываете из неё pull request в ветку main. Ссылку на этот pr добавляете в README.md в ветке main. После этого на платформе Практикума нажимаете «Проверить задание». +## Версия: 0.1 (только макет) -### Также не забудьте проверить, что репозиторий публичный. ---- - - -Даже законченный проект остаётся только заготовкой, пока им не начнут пользоваться. Но сначала пользователь должен понять, зачем ему пользоваться вашим кодом. В этом помогает файл README. - -README — первое, что прочитает пользователь, когда попадёт в репозиторий на «Гитхабе». Хороший REAMDE отвечает на четыре вопроса: - -- Готов ли проект к использованию? -- В чём его польза? -- Как установить? -- Как применять? - -## Бейджи - -Быстро понять статус проекта помогают бейджи на «Гитхабе». Иногда разработчики ограничиваются парой бейджев, которые сообщат о статусе тестов кода: - -![Бэйджи](https://github.com/yandex-praktikum/mf.messenger.praktikum.yandex.images/blob/master/mf/b.png) - -Если пользователь увидит ошибку в работе тестов, то поймёт: использовать текущую версию в важном проекте — не лучшая идея. - -Бейджи помогают похвастаться достижениями: насколько популярен проект, как много разработчиков создавало этот код. Через бейджи можно даже пригласить пользователя в чат: - -![Версии](https://github.com/yandex-praktikum/mf.messenger.praktikum.yandex.images/blob/master/mf/vers.png) - -В README **Webpack** строка бейджев подробно рассказывает о покрытии кода тестами. Когда проект протестирован, это вызывает доверие пользователя. Последний бейдж приглашает присоединиться к разработке. - -Другая строка убедит пользователя в стабильности инфраструктуры и популярности проекта. Последний бейдж зовёт в чат проекта. - -## Описание - -Краткое опишите, какую задачу решает проект. Пользователь не верит обещаниям и не готов читать «полотна» текста. Поэтому в описании достаточно нескольких строк: - -![Описание](https://github.com/yandex-praktikum/mf.messenger.praktikum.yandex.images/blob/master/mf/desc.png) - -Авторы **React** дробят описание на абзацы и списки — так проще пробежаться глазами по тексту и найти ключевую информацию. - -Если у проекта есть сайт, добавьте ссылку в заголовок. +## Дезайн прототипа +Дезайн для версии 0.1 можно найти по ссылке: +[Figma]([https://www.figma.com/file/3fadPRCD38XteX6sDx6hNk/Messenger?type=design&node-id=0%3A1&t=PYURXJQ9XpU48Zk7-1](https://www.figma.com/proto/PCWoIjBK1zEjnN4nkOJDx1/Messenger?page-id=0%3A1&type=design&node-id=1-797&viewport=60%2C176%2C0.19&t=lwHAE0Wwu2VjJ1O9-1&scaling=min-zoom&starting-point-node-id=1%3A797&mode=design)https://www.figma.com/proto/PCWoIjBK1zEjnN4nkOJDx1/Messenger?page-id=0%3A1&type=design&node-id=1-797&viewport=60%2C176%2C0.19&t=lwHAE0Wwu2VjJ1O9-1&scaling=min-zoom&starting-point-node-id=1%3A797&mode=design). +Прототип на [Netlify](https://fancy-kelpie-740e6d.netlify.app) ## Установка +```bash +git clone https://github.com/AlDmitOl/middle.messenger.praktikum.yandex.git +cd middle.messenger.praktikum.yandex +npm install +``` -Лучше всего пользователя убеждает собственный опыт. Чем быстрее он начнёт пользоваться проектом, тем раньше почувствует пользу. Для этого помогите ему установить приложение: напишите краткую пошаговую инструкцию. - -Если проект предназначен для разработчиков, добавьте информацию об установке тестовых версий. Например: - -- `npm install` — установка стабильной версии, -- `npm start` — запуск версии для разработчика, -- `npm run build:prod` — сборка стабильной версии. - -## **Примеры использования** - -Хорошо, если сразу после установки пользователь сможет решить свои задачи без изучения проекта. Это особенно верно, если ваш пользователь — не профессиональный разработчик. Но даже профессионал поймёт вас лучше, если показать примеры использования: - -![Ссылки](https://github.com/yandex-praktikum/mf.messenger.praktikum.yandex.images/blob/master/mf/link.png) - -Для более подробных инструкции добавьте новые разделы или ссылки: - -- на документацию, -- вики проекта, -- описание API. - -В учебном проекте будут полезен раздел с описанием стиля кода и правилами разработки: как работать с ветками, пул-реквестами и релизами. - -### **Команда** +## Запуск -Если вы работаете в команде, укажите основных участников: им будет приятно, а новые разработчики охотнее присоединятся к проекту. «Гитхаб» — не просто инструмент, это социальная сеть разработчиков. +### Сервера для разработчика +```bash +npm run dev +``` +### Сборка мессенджера и запуск сервера +```bash +npm run build +npm run preview +``` +## Входная точка: -![Команда](https://github.com/yandex-praktikum/mf.messenger.praktikum.yandex.images/blob/master/mf/team.png) +[http://localhost:3000/](http://localhost:3000/) или [https://fancy-kelpie-740e6d.netlify.app](https://fancy-kelpie-740e6d.netlify.app) +остальные страницы подгружаются на этой же странице при клике по соответствующим кнопкам. -### **Примеры README** -- «[Реакт](https://github.com/facebook/react)», -- «[Эхо](https://github.com/labstack/echo)», -- «[Вебпак](https://github.com/webpack/webpack)», -- «[ТДенгине](https://github.com/taosdata/TDengine)», -- «[Соул-хантинг](https://github.com/vladpereskokov/soul-hunting/)». diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 000000000..220ff2e3b --- /dev/null +++ b/netlify.toml @@ -0,0 +1,9 @@ +# Global settings applied to the whole site. +# +# “base” is the directory to change to before starting build. If you set base: +# that is where we will look for package.json/.nvmrc/etc, not repo root! +# “command” is your build command. +# “publish” is the directory to publish (relative to the root of your repo). + +[build] + publish = "dist" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..6670e0aea --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3227 @@ +{ + "name": "middle.messenger.praktikum.yandex", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "middle.messenger.praktikum.yandex", + "version": "0.0.0", + "dependencies": { + "express": "^4.18.2", + "handlebars": "^4.7.8", + "vite-plugin-handlebars": "^1.6.0" + }, + "devDependencies": { + "sass": "^1.66.1", + "vite": "^4.4.5", + "vite-plugin-static-copy": "^0.17.0" + }, + "engines": { + "node": "16.15.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "devOptional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "devOptional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "devOptional": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "3.28.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", + "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.66.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", + "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==", + "devOptional": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-handlebars": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-plugin-handlebars/-/vite-plugin-handlebars-1.6.0.tgz", + "integrity": "sha512-/TZ2FadScvJW6fmQ+3m3stm6ns+tDZ3VAgzEkSQYQurAnaQ/3MJfidhmTXzD1Hu1iwgkI3lNuEqybzjjKemCTg==", + "dependencies": { + "handlebars": "^4.7.6", + "vite": "^2.0.0" + } + }, + "node_modules/vite-plugin-handlebars/node_modules/@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-plugin-handlebars/node_modules/esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "node_modules/vite-plugin-handlebars/node_modules/rollup": { + "version": "2.77.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", + "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vite-plugin-handlebars/node_modules/vite": { + "version": "2.9.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.16.tgz", + "integrity": "sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==", + "dependencies": { + "esbuild": "^0.14.27", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": ">=2.59.0 <2.78.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/vite-plugin-static-copy": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-0.17.0.tgz", + "integrity": "sha512-2HpNbHfDt8SDy393AGXh9llHkc8FJMQkI8s3T5WsH3SWLMO+f5cFIyPErl4yGKU9Uh3Vaqsd4lHZYTf042fQ2A==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "fs-extra": "^11.1.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + } + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "dev": true, + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "devOptional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "optional": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "devOptional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "devOptional": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true + }, + "postcss": { + "version": "8.4.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "3.28.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", + "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass": { + "version": "1.66.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", + "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==", + "devOptional": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "vite": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "dev": true, + "requires": { + "esbuild": "^0.18.10", + "fsevents": "~2.3.2", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + } + }, + "vite-plugin-handlebars": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-plugin-handlebars/-/vite-plugin-handlebars-1.6.0.tgz", + "integrity": "sha512-/TZ2FadScvJW6fmQ+3m3stm6ns+tDZ3VAgzEkSQYQurAnaQ/3MJfidhmTXzD1Hu1iwgkI3lNuEqybzjjKemCTg==", + "requires": { + "handlebars": "^4.7.6", + "vite": "^2.0.0" + }, + "dependencies": { + "@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "optional": true + }, + "esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "requires": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "rollup": { + "version": "2.77.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", + "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "requires": { + "fsevents": "~2.3.2" + } + }, + "vite": { + "version": "2.9.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.16.tgz", + "integrity": "sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==", + "requires": { + "esbuild": "^0.14.27", + "fsevents": "~2.3.2", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": ">=2.59.0 <2.78.0" + } + } + } + }, + "vite-plugin-static-copy": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-0.17.0.tgz", + "integrity": "sha512-2HpNbHfDt8SDy393AGXh9llHkc8FJMQkI8s3T5WsH3SWLMO+f5cFIyPErl4yGKU9Uh3Vaqsd4lHZYTf042fQ2A==", + "dev": true, + "requires": { + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "fs-extra": "^11.1.0", + "picocolors": "^1.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..570ea9530 --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "middle.messenger.praktikum.yandex", + "private": true, + "version": "0.0.0", + "type": "module", + "engines": { + "node": "16.15.0" + }, + "scripts": { + "dev": "vite --open", + "build": "vite build --emptyOutDir", + "preview": "vite preview --open", + "server": "node server.js", + "start": "npm run build && npm run server" + }, + "devDependencies": { + "sass": "^1.66.1", + "vite": "^4.4.5", + "vite-plugin-static-copy": "^0.17.0" + }, + "dependencies": { + "express": "^4.18.2", + "handlebars": "^4.7.8", + "vite-plugin-handlebars": "^1.6.0" + } +} diff --git a/server.js b/server.js new file mode 100644 index 000000000..f30dfd813 --- /dev/null +++ b/server.js @@ -0,0 +1,16 @@ +import path from 'path'; +import express from 'express'; +import { fileURLToPath } from 'url'; +const app = express(); + +const PORT = process.env.PORT || 3000; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +app.use(express.static(__dirname + "/dist")); +app.get("*", (req, res) => { + res.sendFile(path.join(__dirname, "/dist/index.html")); +}); + +app.listen(PORT, function () { + console.log(`Example app listening on http://localhost:${PORT}`); +}); \ No newline at end of file diff --git a/src/assets/img/avatars/alad.png b/src/assets/img/avatars/alad.png new file mode 100644 index 0000000000000000000000000000000000000000..54c9d4a18d825f1c9225af0a1674f8338413d983 GIT binary patch literal 14796 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/avatars/talag.png b/src/assets/img/avatars/talag.png new file mode 100644 index 0000000000000000000000000000000000000000..6045e55f2721db21a5af0de48e5c7de65279f3cf GIT binary patch literal 14054 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%0ADQkVqgjy| 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 + + + + diff --git a/src/assets/img/components/arrow.svg b/src/assets/img/components/arrow.svg new file mode 100644 index 000000000..23257f180 --- /dev/null +++ b/src/assets/img/components/arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/img/components/error404.svg b/src/assets/img/components/error404.svg new file mode 100644 index 000000000..e88e05797 --- /dev/null +++ b/src/assets/img/components/error404.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/components/error500.svg b/src/assets/img/components/error500.svg new file mode 100644 index 000000000..271b9f922 --- /dev/null +++ b/src/assets/img/components/error500.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/components/search.svg b/src/assets/img/components/search.svg new file mode 100644 index 000000000..9fbbfbdc2 --- /dev/null +++ b/src/assets/img/components/search.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/img/components/settings.svg b/src/assets/img/components/settings.svg new file mode 100644 index 000000000..7fef20f59 --- /dev/null +++ b/src/assets/img/components/settings.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/img/sample.png b/src/assets/img/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..8877923c80a885455b2e4ff8d5c2afa275da999c GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2s6ii6yp7}lMWc?smOq&xaLGB9lH z=l+w(3gmMZctjQhX>|~0)Z(1z4`lFox;TbNgeTwFUvJOAQpaTHwrFZDP@KWj)z4*} HQ$iB}RdN}- literal 0 HcmV?d00001 diff --git a/src/assets/sass/_mixins.sass b/src/assets/sass/_mixins.sass new file mode 100644 index 000000000..262c7fd12 --- /dev/null +++ b/src/assets/sass/_mixins.sass @@ -0,0 +1,3 @@ +=flex-alignment($horizontal, $vertical) + justify-content: $horizontal + align-items: $vertical \ No newline at end of file diff --git a/src/assets/sass/_templates.sass b/src/assets/sass/_templates.sass new file mode 100644 index 000000000..69f80eb1f --- /dev/null +++ b/src/assets/sass/_templates.sass @@ -0,0 +1,25 @@ +@import ./variables + +%no-indents + padding: 0 + margin: 0 + +%full-screen + height: 100vh!important + width: 100vw!important + +%all-size + box-sizing: border-box + height: 100% + width: 100% + +%main-font + font-family: $font + +%flex-row + display: flex + flex-flow: row nowrap + +%flex-column + display: flex + flex-flow: column nowrap \ No newline at end of file diff --git a/src/assets/sass/_variables.sass b/src/assets/sass/_variables.sass new file mode 100644 index 000000000..fa6449aef --- /dev/null +++ b/src/assets/sass/_variables.sass @@ -0,0 +1,20 @@ +/* Color definition +$background-color: #282934 +$background-color-second: #14141A +$background-color-third: #1E1F27 +$font-color: #FFF +$font-color-second: #14141A +$font-color-third: #999 + +// Sizes +$avatar-size: 80px +$avatar-status-size: 18px +$avatar-size-medium: 60px +$avatar-status-size-medium: 14px +$avatar-size-small: 50px +$avatar-status-size-small: 12px +$chat-item-size: 74px +$chat-item-content-size: 60px + +// Fonts +$font: "Roboto Light", Arial, sans-serif \ No newline at end of file diff --git a/src/components/avatar/avatar.hbs b/src/components/avatar/avatar.hbs new file mode 100644 index 000000000..f0b74494d --- /dev/null +++ b/src/components/avatar/avatar.hbs @@ -0,0 +1,4 @@ +

+ Avatar {{person.name}} +
+
\ No newline at end of file diff --git a/src/components/avatar/avatar.js b/src/components/avatar/avatar.js new file mode 100644 index 000000000..2de4711bf --- /dev/null +++ b/src/components/avatar/avatar.js @@ -0,0 +1,2 @@ +import './avatar.sass' +export { default as Avatar } from './avatar.hbs?raw'; \ No newline at end of file diff --git a/src/components/avatar/avatar.sass b/src/components/avatar/avatar.sass new file mode 100644 index 000000000..6e4d4c341 --- /dev/null +++ b/src/components/avatar/avatar.sass @@ -0,0 +1,56 @@ +@import ../../assets/sass/variables + +.avatar + display: block + position: relative + + .icon + position: absolute + top: 0 + left: 0 + box-sizing: border-box + border-radius: 50% + overflow: hidden + border: 2px #FFF solid + + .status + position: absolute + bottom: 0 + right: 0 + border-radius: 50% + border: 2px #FFF solid + + .online + background: green + .offline + background: red + + &__big + width: $avatar-size + height: $avatar-size + .icon + width: $avatar-size + height: $avatar-size + .status + width: $avatar-status-size + height: $avatar-status-size + + &__medium + width: $avatar-size-medium + height: $avatar-size-medium + .icon + width: $avatar-size-medium + height: $avatar-size-medium + .status + width: $avatar-status-size-medium + height: $avatar-status-size-medium + + &__small + width: $avatar-size-small + height: $avatar-size-small + .icon + width: $avatar-size-small + height: $avatar-size-small + .status + width: $avatar-status-size-small + height: $avatar-status-size-small \ No newline at end of file diff --git a/src/components/button/button.hbs b/src/components/button/button.hbs new file mode 100644 index 000000000..84fb54db5 --- /dev/null +++ b/src/components/button/button.hbs @@ -0,0 +1,5 @@ +{{#with (getButton name) }} + +{{/with}} diff --git a/src/components/button/button.js b/src/components/button/button.js new file mode 100644 index 000000000..ca3d9eeb0 --- /dev/null +++ b/src/components/button/button.js @@ -0,0 +1,10 @@ +import './button.sass' +import Handlebars from "handlebars"; +import data from '../../data.json'; + +// Helper returns button data by name from data.json file +Handlebars.registerHelper('getButton', function (name) { + return data['buttons'] && data['buttons'][name]; +}) + +export { default as Button } from './button.hbs?raw'; \ No newline at end of file diff --git a/src/components/button/button.sass b/src/components/button/button.sass new file mode 100644 index 000000000..d1987afc5 --- /dev/null +++ b/src/components/button/button.sass @@ -0,0 +1,56 @@ +@import ../../assets/sass/variables + +.button + box-sizing: border-box + background-color: initial + border: none + font-weight: 500 + display: block + width: 100% + padding: 12px 0 + border-radius: 8px + cursor: pointer + + +.button__arrow + width: 15px + height: 15px + + background-image: url('../../assets/img/components/arrow.svg') + background-size: 100% 100% + +.button__add + width: 18px + height: 18px + + background-image: url('../../assets/img/components/add.svg') + background-size: 100% 100% + +.button__settings + width: 25px + height: 25px + + background-image: url('../../assets/img/components/settings.svg') + background-size: 100% 100% + +.button__primary + background-color: #14141A + color: #FFF + font-size: 13px + +.button__link + color: #3369F3 + font-size: 11px + text-align: center + +.button__link-profile + color: #F00 + text-align: left + margin: 0 25px + font-size: 13px + font-weight: 500 + width: auto + border-radius: 0 + &:has(+ &) + border-bottom: 1px #FFF solid + color: #3369F3 diff --git a/src/components/chat-item/chat-item.hbs b/src/components/chat-item/chat-item.hbs new file mode 100644 index 000000000..da89962c0 --- /dev/null +++ b/src/components/chat-item/chat-item.hbs @@ -0,0 +1,30 @@ +
+
+ {{#each avatars}} + {{> Avatar }} + {{/each}} +
+
+ {{title}} +
+ {{#if lastMessage.personName}} +
+ {{ lastMessage.personName }}: +
+ {{/if}} +
+ {{ lastMessage.text }} +
+
+
+
+
+ {{ lastMessage.time }} +
+ {{#if numUnreadMessages}} +
+ {{ numUnreadMessages }} +
+ {{/if}} +
+
\ No newline at end of file diff --git a/src/components/chat-item/chat-item.js b/src/components/chat-item/chat-item.js new file mode 100644 index 000000000..3a4b07eaf --- /dev/null +++ b/src/components/chat-item/chat-item.js @@ -0,0 +1,2 @@ +import './chat-item.sass' +export { default as ChatItem } from './chat-item.hbs?raw'; \ No newline at end of file diff --git a/src/components/chat-item/chat-item.sass b/src/components/chat-item/chat-item.sass new file mode 100644 index 000000000..148865145 --- /dev/null +++ b/src/components/chat-item/chat-item.sass @@ -0,0 +1,83 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/mixins +@import ../../assets/sass/templates + +.chat-item + @extend %flex-row + +flex-alignment(flex-end, center) + height: $chat-item-size + margin: 7px -10px 7px 10px + padding-right: 10px + + &__content + @extend %flex-column + +flex-alignment(space-between, flex-start) + height: $chat-item-content-size + + flex: 1 + padding: 5px 0 + padding-left: 15px + border-bottom: 1px #FFF solid + + &__last-message + font-size: 12px + + span, + &__last-message-name + font-weight: bold + + .group-avatar + width: $chat-item-content-size + height: $chat-item-content-size + margin-left: 10px + position: relative + & .avatar:nth-child(1) + position: absolute + left: 0 + bottom: 0 + z-index: 3 + & .avatar:nth-child(2) + position: absolute + left: 5px + bottom: 5px + z-index: 2 + & .avatar:nth-child(3) + position: absolute + right: 0 + top: 0 + z-index: 1 + + + &__status + @extend %flex-column + +flex-alignment(space-between, flex-end) + height: $chat-item-content-size + padding: 5px 0 + padding-right: 10px + border-bottom: 1px #FFF solid + + &__unread-message + display: flex + +flex-alignment(center, center) + width: 22px + height: 22px + border-radius: 50% + background: #EF811F + border: #FFF 1px solid + + $root: & + &:hover + background: linear-gradient(270deg, $background-color-second 0%, $background-color 100%) + border-radius: 25px 0 0 25px + box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25) + cursor: pointer + #{$root}__content, + #{$root}__status + border-bottom-color: transparent + &.select + background: $background-color-second + border-radius: 25px 0 0 25px + box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25) + #{$root}__content, + #{$root}__status + border-bottom-color: transparent diff --git a/src/components/chat-list/chat-list.hbs b/src/components/chat-list/chat-list.hbs new file mode 100644 index 000000000..f3384b98a --- /dev/null +++ b/src/components/chat-list/chat-list.hbs @@ -0,0 +1,13 @@ +
+
+
+
+ {{> Button name="arrow" }} + {{ title }} + {{> Button name="add" }} +
+
+ {{#each items}} + {{> ChatItem }} + {{/each}} +
\ No newline at end of file diff --git a/src/components/chat-list/chat-list.js b/src/components/chat-list/chat-list.js new file mode 100644 index 000000000..9c89c6279 --- /dev/null +++ b/src/components/chat-list/chat-list.js @@ -0,0 +1,2 @@ +import './chat-list.sass' +export { default as ChatList } from './chat-list.hbs?raw'; \ No newline at end of file diff --git a/src/components/chat-list/chat-list.sass b/src/components/chat-list/chat-list.sass new file mode 100644 index 000000000..ebf0c13de --- /dev/null +++ b/src/components/chat-list/chat-list.sass @@ -0,0 +1,29 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/mixins +@import ../../assets/sass/templates + +.chat-list + &__header + @extend %flex-row + +flex-alignment(flex-start, center) + + &__empty + flex: 1 auto + + &__content + @extend %flex-row + +flex-alignment(flex-start, center) + flex: 2 auto + height: 30px + border-radius: 5px 0 0 5px + background: $background-color + + .button__arrow + margin-left: 20px + + span + margin-left: 10px + + .button__add + margin-left: 10px + diff --git a/src/components/form-auth/form-auth.hbs b/src/components/form-auth/form-auth.hbs new file mode 100644 index 000000000..f8a578d31 --- /dev/null +++ b/src/components/form-auth/form-auth.hbs @@ -0,0 +1,3 @@ +
+ {{> @partial-block }} +
diff --git a/src/components/form-auth/form-auth.js b/src/components/form-auth/form-auth.js new file mode 100644 index 000000000..49c31910d --- /dev/null +++ b/src/components/form-auth/form-auth.js @@ -0,0 +1,3 @@ +import './form-auth.sass' + +export { default as FormAuth } from './form-auth.hbs?raw'; \ No newline at end of file diff --git a/src/components/form-auth/form-auth.sass b/src/components/form-auth/form-auth.sass new file mode 100644 index 000000000..6d7098530 --- /dev/null +++ b/src/components/form-auth/form-auth.sass @@ -0,0 +1,37 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/templates +@import ../../assets/sass/mixins + +.login-form + @extend %flex-column + +flex-alignment(space-between, center) + box-sizing: border-box + padding: 50px 30px 30px + width: 340px + height: 450px + box-shadow: 0 0 6px 0 #FFFFFFC6 + border-radius: 12px + background: #FFF + + & .button__primary + display: flex + +flex-alignment(center, center) + width: 280px + height: 27px + +.registration-form + @extend %flex-column + +flex-alignment(space-between, center) + box-sizing: border-box + padding: 50px 30px 30px + width: 340px + height: 615px + box-shadow: 0 0 6px 0 #FFFFFFC6 + border-radius: 12px + background: #FFF + + & .button__primary + display: flex + +flex-alignment(center, center) + width: 280px + height: 27px diff --git a/src/components/info/info-bar.hbs b/src/components/info/info-bar.hbs new file mode 100644 index 000000000..113d2afa7 --- /dev/null +++ b/src/components/info/info-bar.hbs @@ -0,0 +1,5 @@ +
+ {{> Avatar }} + {{userName}} + {{> Button name="setting" }} +
\ No newline at end of file diff --git a/src/components/info/info-bar.js b/src/components/info/info-bar.js new file mode 100644 index 000000000..0a0589b07 --- /dev/null +++ b/src/components/info/info-bar.js @@ -0,0 +1,2 @@ +import './info-bar.sass' +export { default as InfoBar } from './info-bar.hbs?raw'; \ No newline at end of file diff --git a/src/components/info/info-bar.sass b/src/components/info/info-bar.sass new file mode 100644 index 000000000..c4b3d9c0f --- /dev/null +++ b/src/components/info/info-bar.sass @@ -0,0 +1,21 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/mixins +@import ../../assets/sass/templates + +.info-bar + box-sizing: border-box + @extend %flex-row + +flex-alignment(flex-start, center) + height: 120px + background: $background-color-second + padding: 20px + + .user-name + font-weight: bold + font-size: 18px + margin-left: 11px + align-self: flex-end + + .button__settings + align-self: flex-start + margin-left: auto \ No newline at end of file diff --git a/src/components/input/input.hbs b/src/components/input/input.hbs new file mode 100644 index 000000000..bbc79d16a --- /dev/null +++ b/src/components/input/input.hbs @@ -0,0 +1,11 @@ +
+ {{#with (getInput name) }} + + {{/with}} +
+ diff --git a/src/components/input/input.js b/src/components/input/input.js new file mode 100644 index 000000000..030d3380d --- /dev/null +++ b/src/components/input/input.js @@ -0,0 +1,10 @@ +import './input.sass' +import Handlebars from "handlebars"; +import data from '../../data.json'; + +// Helper returns input data by name from data.json file +Handlebars.registerHelper('getInput', function (name) { + return data['input'] && data['input'][name]; +}) + +export { default as Input } from './input.hbs?raw'; \ No newline at end of file diff --git a/src/components/input/input.sass b/src/components/input/input.sass new file mode 100644 index 000000000..63ac27be0 --- /dev/null +++ b/src/components/input/input.sass @@ -0,0 +1,79 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/templates +@import ../../assets/sass/mixins + +.input + padding: 10px + background: transparent + + .input__container + display: flex + height: 38px + flex-direction: column + align-content: flex-end + + + .input__label + color: $font-color-third + font-size: 13px + font-weight: 500 + user-select: none + margin-bottom: 5px + + .input__element + border: none + background: transparent + font-size: 13px + font-weight: 500 + color: $font-color-second + padding: 0 + padding-bottom: 7px + border-bottom: 1px solid $background-color-second + + + .input__element:focus-visible + outline: none + + + .input__text-error + transform: translateY(-7px) + color: $font-color + font-size: 8px + font-weight: 400 + display: none + + .input__error .input__text-error + display: block + + .input__error .input__element + color: $font-color + +.profile__content + .avatar + margin-bottom: 20px + + span + font-size: 16px + font-weight: 700 + margin-bottom: 40px + + .input + border-bottom: 1px #FFF solid + &__container + flex-direction: row + +flex-alignment(space-between, center) + width: 510px + height: 30px + + .input__label + flex: 0 auto + color: #FFF + font-size: 13px + font-weight: 500 + + .input__element + flex: 1 auto + margin-left: 20px + color: #FFF + text-align: right + padding: 0 \ No newline at end of file diff --git a/src/components/search/search.hbs b/src/components/search/search.hbs new file mode 100644 index 000000000..2f76cd194 --- /dev/null +++ b/src/components/search/search.hbs @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/src/components/search/search.js b/src/components/search/search.js new file mode 100644 index 000000000..dc7892752 --- /dev/null +++ b/src/components/search/search.js @@ -0,0 +1,2 @@ +import './search.sass' +export { default as Search } from './search.hbs?raw'; \ No newline at end of file diff --git a/src/components/search/search.sass b/src/components/search/search.sass new file mode 100644 index 000000000..4f3e0c4a9 --- /dev/null +++ b/src/components/search/search.sass @@ -0,0 +1,31 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/templates +@import ../../assets/sass/mixins + +.search + @extend %flex-row + +flex-alignment(flex-start, center) + height: 40px + margin: 15px 20px + background: $background-color-second + border-radius: 20px + + .search-icon + width: 25px + height: 25px + margin: 0 15px + background-image: url('../../assets/img/components/search.svg') + + & .input__search + flex: 1 + margin-right: 20px + .input__container + +flex-alignment(flex-start, center) + height: 100% + .input__element + padding: 0 + margin: 0 + border: none + width: 100% + height: 20px + color: #FFF \ No newline at end of file diff --git a/src/data.json b/src/data.json new file mode 100644 index 000000000..1baabd888 --- /dev/null +++ b/src/data.json @@ -0,0 +1,362 @@ +{ + "person": { + "name": "Дмитрий Аладьев", + "avatar": "./assets/img/avatars/alad.png", + "size": "big", + "status": "online" + }, + "buttons": { + "arrow": { + "type": "arrow" + }, + "add": { + "type": "add" + }, + "setting": { + "type": "settings", + "page": "ProfilePage" + }, + "signIn": { + "label": "Авторизироваться", + "type": "primary", + "page": "ChatPage" + }, + "registration": { + "label": "Зарегистрироваться", + "type": "primary", + "name": "message", + "page": "ChatPage" + }, + "signUp": { + "label": "Нет аккаунта?", + "type": "link", + "page": "RegistrationPage" + }, + "entrance": { + "label": "Войти", + "type": "link", + "page": "LoginPage" + }, + "back_to_chats": { + "label": "Вернуться к чатам", + "type": "link-profile", + "page": "ChatPage" + }, + "change_data": { + "label": "Изменить данные", + "type": "link-profile" + }, + "change_password": { + "label": "Изменить пароль", + "type": "link-profile" + }, + "exit": { + "label": "Выход", + "type": "link-profile", + "page": "LoginPage" + }, + "back_to_chats_2": { + "label": "Вернуться к чатам", + "type": "primary", + "page": "ChatPage" + }, + "Page404": { + "label": "Посмотреть 404 ошибку", + "type": "link", + "page": "Page404" + }, + "Page500": { + "label": "Посмотреть 500 ошибку", + "type": "link", + "page": "Page500" + }, + "LoginPage": { + "label": "Посмотреть страницу логина", + "type": "link", + "page": "LoginPage" + }, + "ProfilePage": { + "label": "Посмотреть страницу профиля", + "type": "link", + "page": "ProfilePage" + }, + "RegistrationPage": { + "label": "Посмотреть страницу регистрации", + "type": "link", + "page": "RegistrationPage" + } + }, + "input": { + "search": { + "type": "search", + "placeholder": "Поиск" + }, + "login": { + "label": "Логин", + "type": "text", + "name": "login", + "value": "ivanivanov" + }, + "password": { + "label": "Пароль", + "name": "password", + "type": "password" + }, + "repeat_password": { + "label": "Пароль (еще раз)", + "type": "password" + }, + "mail": { + "label": "Почта", + "name": "email", + "value": "pochtayandex.ru" + }, + "name": { + "label": "Имя", + "name": "first_name", + "value": "Иван" + }, + "surname": { + "label": "Фамилия", + "name": "second_name", + "value": "Иванов" + }, + "phone": { + "label": "Телефон", + "name": "phone", + "value": "+7 (909) 967 30 30" + }, + "alias": { + "label": "Имя в чате", + "name": "display_name", + "value": "Таинственный незнакомец" + } + }, + "chats": { + "common": { + "title": "Общие чаты", + "items": [ + { + "title": "Cпринт №1", + "avatars": [ + { + "person": { + "avatar": "./assets/img/avatars/milev.png", + "name": "Георгий Милевский", + "size": "small", + "status": "online" + } + }, + { + "person": { + "avatar": "./assets/img/avatars/trosh.png", + "name": "Александра Трошина", + "size": "small", + "status": "online" + } + }, + { + "person": { + "avatar": "./assets/img/avatars/isaeva.png", + "name": "Кани Исаева", + "size": "small", + "status": "offline" + } + } + ], + "select": false, + "lastMessage": { + "personName": "Георгий Милевский", + "text": "Крутой дизайн", + "time": "17:20" + }, + "numUnreadMessages": 5 + }, + { + "title": "Отчисления", + "avatars": [ + { + "person": { + "avatar": "./assets/img/avatars/isaeva.png", + "name": "Кани Исаева", + "size": "small", + "status": "offline" + } + }, + { + "person": { + "avatar": "./assets/img/avatars/milev.png", + "name": "Георгий Милевский", + "size": "small", + "status": "online" + } + }, + { + "person": { + "avatar": "./assets/img/avatars/trosh.png", + "name": "Александра Трошина", + "size": "small", + "status": "online" + } + } + ], + "lastMessage": { + "personName": "Кани Исаева", + "text": "Заверши проект вовремя!!!", + "time": "10:30" + }, + "numUnreadMessages": 3 + }, + { + "title": "Доска позора", + "avatars": [ + { + "person": { + "avatar": "./assets/img/avatars/trosh.png", + "name": "Александра Трошина", + "size": "small", + "status": "online" + } + }, + { + "person": { + "avatar": "./assets/img/avatars/isaeva.png", + "name": "Кани Исаева", + "size": "small", + "status": "offline" + } + }, + { + "person": { + "avatar": "./assets/img/avatars/milev.png", + "name": "Георгий Милевский", + "size": "small", + "status": "online" + } + } + ], + "lastMessage": { + "personName": "Александра Трошина", + "text": "Явно плагиат!!!", + "time": "10:30" + }, + "numUnreadMessages": 1 + } + ] + }, + "private": { + "title": "Личные сообщения", + "items": [ + { + "title": "Георгий Милевский", + "avatars": [ + { + "person": { + "avatar": "./assets/img/avatars/milev.png", + "name": "Георгий Милевский", + "size": "medium", + "status": "online" + } + } + ], + "lastMessage": { + "text": "Крутой дизайн", + "time": "17:20" + }, + "numUnreadMessages": 5 + }, + { + "title": "Александра Трошина", + "avatars": [ + { + "person": { + "avatar": "./assets/img/avatars/trosh.png", + "name": "Александра Трошина", + "size": "medium", + "status": "online" + } + } + ], + "select": true, + "lastMessage": { + "text": "Явно плагиат!!!", + "time": "23:00" + }, + "numUnreadMessages": 2 + }, + { + "title": "Анастасия Выгузова", + "avatars": [ + { + "person": { + "avatar": "./assets/img/avatars/viguz.png", + "name": "Анастасия Выгузова", + "size": "medium", + "status": "offline" + } + } + ], + "lastMessage": { + "text": "Как-то темновато!!!", + "time": "11:23" + }, + "numUnreadMessages": 0 + }, + { + "title": "Кани Исаева", + "avatars": [ + { + "person": { + "avatar": "./assets/img/avatars/isaeva.png", + "name": "Кани Исаева", + "size": "medium", + "status": "offline" + } + } + ], + "lastMessage": { + "text": "Заверши проект вовремя!!!", + "time": "10:30" + }, + "numUnreadMessages": 2 + }, + { + "title": "Данила Денисов", + "avatars": [ + { + "person": { + "avatar": "./assets/img/avatars/denisov.png", + "name": "Данила Денисов", + "size": "medium", + "status": "offline" + } + } + ], + "lastMessage": { + "text": "Вы: Да, что не так???", + "time": "03:26" + }, + "numUnreadMessages": 0 + }, + { + "title": "Евгений Талагаев", + "avatars": [ + { + "person": { + "avatar": "./assets/img/avatars/talag.png", + "name": "Евгений Талагаев", + "size": "medium", + "status": "online" + } + } + ], + "lastMessage": { + "text": "Я бы таким чатом не пользовался", + "time": "11:26" + }, + "numUnreadMessages": 0 + } + ] + } + } +} \ No newline at end of file diff --git a/src/index.html b/src/index.html new file mode 100644 index 000000000..be19c50db --- /dev/null +++ b/src/index.html @@ -0,0 +1,11 @@ + + + + + Middle Messenger Prakticum Yande + + + +
+ + \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 000000000..39b6ae7f5 --- /dev/null +++ b/src/main.js @@ -0,0 +1,60 @@ +import Handlebars from 'handlebars'; + +// Stores all component data +import data from './data.json'; + +//import * as Components from './components'; +//import * as Pages from "./pages"; + +const importComponents = import.meta.glob('./components/**/*.js', { eager: true }); +const importPages = import.meta.glob('./pages/**/*.js', { eager: true }); + +const pages = {}; +for (const path in importPages) { + for (const name in importPages[path]) { + pages[name]=importPages[path][name]; + } +} + +let components = {}; +for (const path in importComponents) { + for (const name in importComponents[path]) { + components[name]=importComponents[path][name]; + } +} + +Object.entries(components).forEach(([name, component])=>Handlebars.registerPartial(name,component)); + +/** + * Page change function + * @param page {String} - The name of the page, for example, LoginPage, is taken from the export in the js files of the pages + */ +const navigate = (page) => { + if (pages[page]) { + const root = document.querySelector('#app'); + root.innerHTML = Handlebars.compile(pages[page])(data); + } +} + +/* +Page names: + - Page404 + - Page500 + - ChatPage + - LoginPage + - ProfilePage + - RegistrationPage +*/ +document.addEventListener('DOMContentLoaded', ()=>navigate('ChatPage')); + +// Automatic transition to the page if the button has the page attribute +document.addEventListener('click', e=>{ + const page = e.target.getAttribute('page'); + if (page) { + navigate(page); + + e.preventDefault(); + e.stopImmediatePropagation(); + } +}) + diff --git a/src/pages/404/404.hbs b/src/pages/404/404.hbs new file mode 100644 index 000000000..e4315db5a --- /dev/null +++ b/src/pages/404/404.hbs @@ -0,0 +1,13 @@ +
+
+
404
+
+
+ Not Found +
+
+ Тут ничего нет +
+
+ {{> Button name = "back_to_chats_2" }} +
\ No newline at end of file diff --git a/src/pages/404/404.js b/src/pages/404/404.js new file mode 100644 index 000000000..95c81d37f --- /dev/null +++ b/src/pages/404/404.js @@ -0,0 +1,2 @@ +import './404.sass'; +export { default as Page404 } from './404.hbs?raw'; \ No newline at end of file diff --git a/src/pages/404/404.sass b/src/pages/404/404.sass new file mode 100644 index 000000000..933e6da8f --- /dev/null +++ b/src/pages/404/404.sass @@ -0,0 +1,49 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/templates +@import ../../assets/sass/mixins + +html, body + @extend %full-screen + @extend %no-indents + @extend %main-font + +#app + @extend %full-screen + @extend %no-indents + overflow: hidden + background: $background-color + color: $font-color + + .error404 + @extend %full-screen + @extend %no-indents + @extend %flex-column + +flex-alignment(space-around, center) + .button__primary + width: 255px + + &__image + width: 340px + height: 240px + background-image: url('../../assets/img/components/error404.svg') + background-size: 100% 100% + margin-top: 150px + + &__title + font-size: 60px + font-weight: 700 + + &__description + @extend %flex-column + +flex-alignment(center, center) + &__first + color: #14141A + font-size: 18px + font-weight: 700 + margin-bottom: 5px + &__second + font-size: 14px + font-weight: 600 + + + diff --git a/src/pages/500/500.hbs b/src/pages/500/500.hbs new file mode 100644 index 000000000..16e89c457 --- /dev/null +++ b/src/pages/500/500.hbs @@ -0,0 +1,13 @@ +
+
+
500
+
+
+ Internal Server Error +
+
+ Мы уже спешим исправить +
+
+ {{> Button name = "back_to_chats_2" }} +
\ No newline at end of file diff --git a/src/pages/500/500.js b/src/pages/500/500.js new file mode 100644 index 000000000..097ae535e --- /dev/null +++ b/src/pages/500/500.js @@ -0,0 +1,2 @@ +import './500.sass'; +export { default as Page500 } from './500.hbs?raw'; \ No newline at end of file diff --git a/src/pages/500/500.sass b/src/pages/500/500.sass new file mode 100644 index 000000000..11ba0f031 --- /dev/null +++ b/src/pages/500/500.sass @@ -0,0 +1,49 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/templates +@import ../../assets/sass/mixins + +html, body + @extend %full-screen + @extend %no-indents + @extend %main-font + +#app + @extend %full-screen + @extend %no-indents + overflow: hidden + background: $background-color + color: $font-color + + .error500 + @extend %full-screen + @extend %no-indents + @extend %flex-column + +flex-alignment(space-around, center) + .button__primary + width: 255px + + &__image + width: 340px + height: 240px + background-image: url('../../assets/img/components/error500.svg') + background-size: 100% 100% + margin-top: 150px + + &__title + font-size: 60px + font-weight: 700 + + &__description + @extend %flex-column + +flex-alignment(center, center) + &__first + color: #14141A + font-size: 18px + font-weight: 700 + margin-bottom: 5px + &__second + font-size: 14px + font-weight: 600 + + + diff --git a/src/pages/chat/chat.hbs b/src/pages/chat/chat.hbs new file mode 100644 index 000000000..a4d99261a --- /dev/null +++ b/src/pages/chat/chat.hbs @@ -0,0 +1,30 @@ +
+ +
+
+ Выберите чат чтобы отправить сообщение +
+ {{> Button name="Page404"}} + {{> Button name="Page500"}} + {{> Button name="LoginPage"}} + {{> Button name="ProfilePage"}} + {{> Button name="RegistrationPage"}} +
+
+
+
\ No newline at end of file diff --git a/src/pages/chat/chat.js b/src/pages/chat/chat.js new file mode 100644 index 000000000..fd01f0f8f --- /dev/null +++ b/src/pages/chat/chat.js @@ -0,0 +1,2 @@ +import './chat.sass'; +export { default as ChatPage } from './chat.hbs?raw'; \ No newline at end of file diff --git a/src/pages/chat/chat.sass b/src/pages/chat/chat.sass new file mode 100644 index 000000000..fa7e8346c --- /dev/null +++ b/src/pages/chat/chat.sass @@ -0,0 +1,69 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/templates +@import ../../assets/sass/mixins + +html, body + @extend %full-screen + @extend %no-indents + @extend %main-font + +#app + @extend %full-screen + @extend %no-indents + overflow: hidden + background: $background-color + color: $font-color + +#wrapper + @extend %all-size + @extend %flex-row + padding: 20px + + aside + @extend %flex-column + flex: 1 auto + overflow: hidden + border-radius: 25px 0 0 0 + background: $background-color + box-sizing: border-box + & .info-bar + margin-right: 10px + & .search-wrapper, + & .chat-list__header, + & .chats__indent + margin-right: 10px + background: $background-color-third + & .chat-list__header__content + margin-right: -10px + + .chats + flex: 1 auto + overflow-x: hidden + overflow-y: scroll + -ms-overflow-style: none + scrollbar-width: none + &::-webkit-scrollbar + width: 0 + height: 0 + + .content + box-sizing: border-box + margin-top: 10px + @extend %flex-column + +flex-alignment(flex-start, stretch) + flex: 1 auto + overflow: hidden + //background: $background-color-third + + section + display: flex + +flex-alignment(center, center) + flex: 4 auto + overflow: hidden + border-radius: 0 25px 0 0 + background: $background-color-second + +.list__pages + background: #FFF + border-radius: 25px + margin-top: 20px diff --git a/src/pages/login/login.hbs b/src/pages/login/login.hbs new file mode 100644 index 000000000..725c6c125 --- /dev/null +++ b/src/pages/login/login.hbs @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/src/pages/login/login.js b/src/pages/login/login.js new file mode 100644 index 000000000..9c8418fcf --- /dev/null +++ b/src/pages/login/login.js @@ -0,0 +1,2 @@ +import './login.sass'; +export { default as LoginPage } from './login.hbs?raw'; \ No newline at end of file diff --git a/src/pages/login/login.sass b/src/pages/login/login.sass new file mode 100644 index 000000000..85cd6572a --- /dev/null +++ b/src/pages/login/login.sass @@ -0,0 +1,42 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/templates +@import ../../assets/sass/mixins + +html, body + @extend %full-screen + @extend %no-indents + @extend %main-font + +#app + @extend %full-screen + @extend %no-indents + overflow: hidden + background: $background-color + color: $font-color + + .login__content + display: flex + @extend %full-screen + +flex-alignment(center, center) + + &__header + @extend %flex-column + +flex-alignment(flex-start, center) + box-sizing: border-box + width: 280px + + & input + width: 280px + + & span + color: $font-color-second + margin-bottom: 40px + font-size: 20px + font-weight: 500 + + &__footer + .button__link + padding: 0 + margin-top: 15px + + diff --git a/src/pages/profile/profile.hbs b/src/pages/profile/profile.hbs new file mode 100644 index 000000000..80c5322c2 --- /dev/null +++ b/src/pages/profile/profile.hbs @@ -0,0 +1,26 @@ +
+ +
+
+ {{#> FormAuth name="profile"}} + {{> Avatar }} + {{ person.name }} + {{> Input name="mail" }} + {{> Input name="login" }} + {{> Input name="name" }} + {{> Input name="surname" }} + {{> Input name="alias" }} + {{> Input name="phone" }} + {{/FormAuth}} +
+
+
\ No newline at end of file diff --git a/src/pages/profile/profile.js b/src/pages/profile/profile.js new file mode 100644 index 000000000..9ed44a961 --- /dev/null +++ b/src/pages/profile/profile.js @@ -0,0 +1,2 @@ +import './profile.sass'; +export { default as ProfilePage } from './profile.hbs?raw'; \ No newline at end of file diff --git a/src/pages/profile/profile.sass b/src/pages/profile/profile.sass new file mode 100644 index 000000000..8cb548a62 --- /dev/null +++ b/src/pages/profile/profile.sass @@ -0,0 +1,59 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/templates +@import ../../assets/sass/mixins + +html, body + @extend %full-screen + @extend %no-indents + @extend %main-font + +#app + @extend %full-screen + @extend %no-indents + overflow: hidden + background: $background-color + color: $font-color + +.profile + @extend %all-size + @extend %flex-row + padding: 20px + $root: & + + aside + @extend %flex-column + flex: 1 auto + overflow: hidden + border-radius: 25px 0 0 0 + box-sizing: border-box + margin-right: 10px + .info-bar + padding-right: 110px + .button__settings + display: none + + + #{$root}__content + box-sizing: border-box + @extend %flex-column + +flex-alignment(flex-end, stretch) + background: $background-color-third + flex: 1 auto + overflow: hidden + margin-top: 10px + padding-bottom: 10px + + + section + display: flex + +flex-alignment(center, center) + flex: 4 auto + overflow: hidden + border-radius: 0 25px 0 0 + background: $background-color-second + + .profile-form + @extend %flex-column + +flex-alignment(center, center) + .status + display: none \ No newline at end of file diff --git a/src/pages/registration/registration.hbs b/src/pages/registration/registration.hbs new file mode 100644 index 000000000..fbe85678c --- /dev/null +++ b/src/pages/registration/registration.hbs @@ -0,0 +1,18 @@ +
+ {{#> FormAuth name="registration"}} +
+ Регистрация + {{> Input name="mail" }} + {{> Input name="login" }} + {{> Input name="name" }} + {{> Input name="surname" }} + {{> Input name="phone" }} + {{> Input name="password" }} + {{> Input name="repeat_password" }} +
+ + {{/FormAuth}} +
\ No newline at end of file diff --git a/src/pages/registration/registration.js b/src/pages/registration/registration.js new file mode 100644 index 000000000..c012fa1d0 --- /dev/null +++ b/src/pages/registration/registration.js @@ -0,0 +1,2 @@ +import './registration.sass'; +export { default as RegistrationPage } from './registration.hbs?raw'; \ No newline at end of file diff --git a/src/pages/registration/registration.sass b/src/pages/registration/registration.sass new file mode 100644 index 000000000..5689bdd79 --- /dev/null +++ b/src/pages/registration/registration.sass @@ -0,0 +1,42 @@ +@import ../../assets/sass/variables +@import ../../assets/sass/templates +@import ../../assets/sass/mixins + +html, body + @extend %full-screen + @extend %no-indents + @extend %main-font + +#app + @extend %full-screen + @extend %no-indents + overflow: hidden + background: $background-color + color: $font-color + + .registration__content + display: flex + @extend %full-screen + +flex-alignment(center, center) + + &__header + @extend %flex-column + +flex-alignment(flex-start, center) + box-sizing: border-box + width: 280px + + & input + width: 280px + + & span + color: $font-color-second + margin-bottom: 20px + font-size: 20px + font-weight: 500 + + &__footer + .button__link + padding: 0 + margin-top: 15px + + diff --git a/src/templates/greeting.hbs b/src/templates/greeting.hbs new file mode 100644 index 000000000..3195be8ba --- /dev/null +++ b/src/templates/greeting.hbs @@ -0,0 +1 @@ +Hello {{username}} \ No newline at end of file diff --git a/vite-plugin-handlebars-precompile.ts b/vite-plugin-handlebars-precompile.ts new file mode 100644 index 000000000..4959e76ef --- /dev/null +++ b/vite-plugin-handlebars-precompile.ts @@ -0,0 +1,27 @@ +import Handlebars from "handlebars"; +import { PluginOption } from 'vite'; + + +export default function handlebars(): PluginOption { + const fileRegexp = /\.hbs$|.handlebars$/; + + return { + name: 'vite-plugin-handlebars-precompile', + transform(src, id) { + if (!fileRegexp.test(id)) { + return; + } + + // language=javascript + const code = ` + import Handlebars from 'handlebars/runtime'; + + export default Handlebars.template(${Handlebars.precompile(src)}) + ` + + return { + code + } + } + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 000000000..0751ccfad --- /dev/null +++ b/vite.config.js @@ -0,0 +1,29 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vite'; +import { viteStaticCopy } from 'vite-plugin-static-copy' +//import handlebars from './vite-plugin-handlebars-precompile.ts'; + +export default defineConfig({ + root: resolve(__dirname, 'src/'), + build: { + rollupOptions: { + input: { + main: resolve(__dirname, 'src/index.html'), + //profile: resolve(__dirname, 'src/profile.html'), + //login: resolve(__dirname, 'src/login.html'), + //signin: resolve(__dirname, 'src/signin.html'), + //'404': resolve(__dirname, 'src/404.html'), + //'500': resolve(__dirname, 'src/500.html'), + }, + }, + outDir: resolve(__dirname, 'dist/'), + }, + plugins: [ + //handlebars(), + viteStaticCopy({ + targets: [ + { src: 'assets/img/avatars/**/*', dest: 'assets/img/avatars/' }, + ], + }), + ], +}) From bc8e4931864bd693895a52111f144b03dd50fef0 Mon Sep 17 00:00:00 2001 From: Dmitry Aladzyeu Date: Sun, 3 Sep 2023 14:04:18 +0300 Subject: [PATCH 2/7] Changed link to Figma prototype --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e94029781..0a5e7911e 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ ## Версия: 0.1 (только макет) ## Дезайн прототипа -Дезайн для версии 0.1 можно найти по ссылке: -[Figma]([https://www.figma.com/file/3fadPRCD38XteX6sDx6hNk/Messenger?type=design&node-id=0%3A1&t=PYURXJQ9XpU48Zk7-1](https://www.figma.com/proto/PCWoIjBK1zEjnN4nkOJDx1/Messenger?page-id=0%3A1&type=design&node-id=1-797&viewport=60%2C176%2C0.19&t=lwHAE0Wwu2VjJ1O9-1&scaling=min-zoom&starting-point-node-id=1%3A797&mode=design)https://www.figma.com/proto/PCWoIjBK1zEjnN4nkOJDx1/Messenger?page-id=0%3A1&type=design&node-id=1-797&viewport=60%2C176%2C0.19&t=lwHAE0Wwu2VjJ1O9-1&scaling=min-zoom&starting-point-node-id=1%3A797&mode=design). +Дезайн для версии 0.1 можно найти по ссылке: +Прототип на [Figma](https://www.figma.com/proto/PCWoIjBK1zEjnN4nkOJDx1/Messenger?page-id=0%3A1&type=design&node-id=1-797&viewport=60%2C176%2C0.19&t=lwHAE0Wwu2VjJ1O9-1&scaling=min-zoom&starting-point-node-id=1%3A797&mode=design). Прототип на [Netlify](https://fancy-kelpie-740e6d.netlify.app) ## Установка From 1e23d8b72223b986f742d7602724dda5b71b3b52 Mon Sep 17 00:00:00 2001 From: Dmitry Aladzyeu Date: Sun, 3 Sep 2023 14:27:31 +0300 Subject: [PATCH 3/7] Add .gitignore --- .gitignore | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? From 46d7a92a0bf09228971d5fc03751f4b9480ebeb5 Mon Sep 17 00:00:00 2001 From: Dmitry Aladzyeu Date: Sun, 3 Sep 2023 14:36:00 +0300 Subject: [PATCH 4/7] Add newline at end of file *.sass --- src/assets/sass/_mixins.sass | 2 +- src/assets/sass/_templates.sass | 2 +- src/assets/sass/_variables.sass | 2 +- src/components/avatar/avatar.sass | 2 +- src/components/button/button.sass | 1 + src/components/chat-list/chat-list.sass | 1 - src/components/info/info-bar.sass | 2 +- src/components/input/input.sass | 2 +- src/components/search/search.sass | 2 +- src/pages/404/404.sass | 3 --- src/pages/500/500.sass | 3 --- src/pages/login/login.sass | 2 -- src/pages/profile/profile.sass | 2 +- src/pages/registration/registration.sass | 2 -- src/templates/greeting.hbs | 1 - 15 files changed, 9 insertions(+), 20 deletions(-) delete mode 100644 src/templates/greeting.hbs diff --git a/src/assets/sass/_mixins.sass b/src/assets/sass/_mixins.sass index 262c7fd12..a16c90ef9 100644 --- a/src/assets/sass/_mixins.sass +++ b/src/assets/sass/_mixins.sass @@ -1,3 +1,3 @@ =flex-alignment($horizontal, $vertical) justify-content: $horizontal - align-items: $vertical \ No newline at end of file + align-items: $vertical diff --git a/src/assets/sass/_templates.sass b/src/assets/sass/_templates.sass index 69f80eb1f..c5a8630fc 100644 --- a/src/assets/sass/_templates.sass +++ b/src/assets/sass/_templates.sass @@ -22,4 +22,4 @@ %flex-column display: flex - flex-flow: column nowrap \ No newline at end of file + flex-flow: column nowrap diff --git a/src/assets/sass/_variables.sass b/src/assets/sass/_variables.sass index fa6449aef..e2fb53e23 100644 --- a/src/assets/sass/_variables.sass +++ b/src/assets/sass/_variables.sass @@ -17,4 +17,4 @@ $chat-item-size: 74px $chat-item-content-size: 60px // Fonts -$font: "Roboto Light", Arial, sans-serif \ No newline at end of file +$font: "Roboto Light", Arial, sans-serif diff --git a/src/components/avatar/avatar.sass b/src/components/avatar/avatar.sass index 6e4d4c341..e2bc47266 100644 --- a/src/components/avatar/avatar.sass +++ b/src/components/avatar/avatar.sass @@ -53,4 +53,4 @@ height: $avatar-size-small .status width: $avatar-status-size-small - height: $avatar-status-size-small \ No newline at end of file + height: $avatar-status-size-small diff --git a/src/components/button/button.sass b/src/components/button/button.sass index d1987afc5..1f88e0acb 100644 --- a/src/components/button/button.sass +++ b/src/components/button/button.sass @@ -54,3 +54,4 @@ &:has(+ &) border-bottom: 1px #FFF solid color: #3369F3 + diff --git a/src/components/chat-list/chat-list.sass b/src/components/chat-list/chat-list.sass index ebf0c13de..7f0e4a901 100644 --- a/src/components/chat-list/chat-list.sass +++ b/src/components/chat-list/chat-list.sass @@ -26,4 +26,3 @@ .button__add margin-left: 10px - diff --git a/src/components/info/info-bar.sass b/src/components/info/info-bar.sass index c4b3d9c0f..355445d12 100644 --- a/src/components/info/info-bar.sass +++ b/src/components/info/info-bar.sass @@ -18,4 +18,4 @@ .button__settings align-self: flex-start - margin-left: auto \ No newline at end of file + margin-left: auto diff --git a/src/components/input/input.sass b/src/components/input/input.sass index 63ac27be0..95112a099 100644 --- a/src/components/input/input.sass +++ b/src/components/input/input.sass @@ -76,4 +76,4 @@ margin-left: 20px color: #FFF text-align: right - padding: 0 \ No newline at end of file + padding: 0 diff --git a/src/components/search/search.sass b/src/components/search/search.sass index 4f3e0c4a9..91f6a7938 100644 --- a/src/components/search/search.sass +++ b/src/components/search/search.sass @@ -28,4 +28,4 @@ border: none width: 100% height: 20px - color: #FFF \ No newline at end of file + color: #FFF diff --git a/src/pages/404/404.sass b/src/pages/404/404.sass index 933e6da8f..46041b4a2 100644 --- a/src/pages/404/404.sass +++ b/src/pages/404/404.sass @@ -44,6 +44,3 @@ html, body &__second font-size: 14px font-weight: 600 - - - diff --git a/src/pages/500/500.sass b/src/pages/500/500.sass index 11ba0f031..8deacbd3a 100644 --- a/src/pages/500/500.sass +++ b/src/pages/500/500.sass @@ -44,6 +44,3 @@ html, body &__second font-size: 14px font-weight: 600 - - - diff --git a/src/pages/login/login.sass b/src/pages/login/login.sass index 85cd6572a..1a3f82a14 100644 --- a/src/pages/login/login.sass +++ b/src/pages/login/login.sass @@ -38,5 +38,3 @@ html, body .button__link padding: 0 margin-top: 15px - - diff --git a/src/pages/profile/profile.sass b/src/pages/profile/profile.sass index 8cb548a62..f6da1a1d0 100644 --- a/src/pages/profile/profile.sass +++ b/src/pages/profile/profile.sass @@ -56,4 +56,4 @@ html, body @extend %flex-column +flex-alignment(center, center) .status - display: none \ No newline at end of file + display: none diff --git a/src/pages/registration/registration.sass b/src/pages/registration/registration.sass index 5689bdd79..95354f36e 100644 --- a/src/pages/registration/registration.sass +++ b/src/pages/registration/registration.sass @@ -38,5 +38,3 @@ html, body .button__link padding: 0 margin-top: 15px - - diff --git a/src/templates/greeting.hbs b/src/templates/greeting.hbs deleted file mode 100644 index 3195be8ba..000000000 --- a/src/templates/greeting.hbs +++ /dev/null @@ -1 +0,0 @@ -Hello {{username}} \ No newline at end of file From aca6d64d408db3dd48bc072cf482ffb0ccb30820 Mon Sep 17 00:00:00 2001 From: Dmitry Aladzyeu Date: Sun, 3 Sep 2023 14:44:47 +0300 Subject: [PATCH 5/7] Add newline at end of all file --- src/components/avatar/avatar.hbs | 2 +- src/components/avatar/avatar.js | 2 +- src/components/button/button.js | 2 +- src/components/chat-item/chat-item.hbs | 2 +- src/components/chat-item/chat-item.js | 2 +- src/components/chat-list/chat-list.hbs | 2 +- src/components/chat-list/chat-list.js | 2 +- src/components/form-auth/form-auth.js | 2 +- src/components/info/info-bar.hbs | 2 +- src/components/info/info-bar.js | 2 +- src/components/input/input.hbs | 1 - src/components/input/input.js | 2 +- src/components/search/search.hbs | 2 +- src/components/search/search.js | 2 +- src/data.json | 2 +- src/index.html | 2 +- src/main.js | 1 - src/pages/404/404.hbs | 2 +- src/pages/404/404.js | 2 +- src/pages/500/500.hbs | 2 +- src/pages/500/500.js | 2 +- src/pages/chat/chat.hbs | 2 +- src/pages/chat/chat.js | 2 +- src/pages/login/login.hbs | 2 +- src/pages/login/login.js | 2 +- src/pages/profile/profile.hbs | 2 +- src/pages/profile/profile.js | 2 +- src/pages/registration/registration.hbs | 2 +- src/pages/registration/registration.js | 2 +- 29 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/components/avatar/avatar.hbs b/src/components/avatar/avatar.hbs index f0b74494d..38eccecf4 100644 --- a/src/components/avatar/avatar.hbs +++ b/src/components/avatar/avatar.hbs @@ -1,4 +1,4 @@
Avatar {{person.name}}
-
\ No newline at end of file +
diff --git a/src/components/avatar/avatar.js b/src/components/avatar/avatar.js index 2de4711bf..7495ea2a1 100644 --- a/src/components/avatar/avatar.js +++ b/src/components/avatar/avatar.js @@ -1,2 +1,2 @@ import './avatar.sass' -export { default as Avatar } from './avatar.hbs?raw'; \ No newline at end of file +export { default as Avatar } from './avatar.hbs?raw'; diff --git a/src/components/button/button.js b/src/components/button/button.js index ca3d9eeb0..560700e1a 100644 --- a/src/components/button/button.js +++ b/src/components/button/button.js @@ -7,4 +7,4 @@ Handlebars.registerHelper('getButton', function (name) { return data['buttons'] && data['buttons'][name]; }) -export { default as Button } from './button.hbs?raw'; \ No newline at end of file +export { default as Button } from './button.hbs?raw'; diff --git a/src/components/chat-item/chat-item.hbs b/src/components/chat-item/chat-item.hbs index da89962c0..68d361fb4 100644 --- a/src/components/chat-item/chat-item.hbs +++ b/src/components/chat-item/chat-item.hbs @@ -27,4 +27,4 @@ {{/if}} - \ No newline at end of file + diff --git a/src/components/chat-item/chat-item.js b/src/components/chat-item/chat-item.js index 3a4b07eaf..8d6a72310 100644 --- a/src/components/chat-item/chat-item.js +++ b/src/components/chat-item/chat-item.js @@ -1,2 +1,2 @@ import './chat-item.sass' -export { default as ChatItem } from './chat-item.hbs?raw'; \ No newline at end of file +export { default as ChatItem } from './chat-item.hbs?raw'; diff --git a/src/components/chat-list/chat-list.hbs b/src/components/chat-list/chat-list.hbs index f3384b98a..862fba945 100644 --- a/src/components/chat-list/chat-list.hbs +++ b/src/components/chat-list/chat-list.hbs @@ -10,4 +10,4 @@ {{#each items}} {{> ChatItem }} {{/each}} - \ No newline at end of file + diff --git a/src/components/chat-list/chat-list.js b/src/components/chat-list/chat-list.js index 9c89c6279..c420c7ed9 100644 --- a/src/components/chat-list/chat-list.js +++ b/src/components/chat-list/chat-list.js @@ -1,2 +1,2 @@ import './chat-list.sass' -export { default as ChatList } from './chat-list.hbs?raw'; \ No newline at end of file +export { default as ChatList } from './chat-list.hbs?raw'; diff --git a/src/components/form-auth/form-auth.js b/src/components/form-auth/form-auth.js index 49c31910d..425e3061a 100644 --- a/src/components/form-auth/form-auth.js +++ b/src/components/form-auth/form-auth.js @@ -1,3 +1,3 @@ import './form-auth.sass' -export { default as FormAuth } from './form-auth.hbs?raw'; \ No newline at end of file +export { default as FormAuth } from './form-auth.hbs?raw'; diff --git a/src/components/info/info-bar.hbs b/src/components/info/info-bar.hbs index 113d2afa7..bb4006bbd 100644 --- a/src/components/info/info-bar.hbs +++ b/src/components/info/info-bar.hbs @@ -2,4 +2,4 @@ {{> Avatar }} {{userName}} {{> Button name="setting" }} - \ No newline at end of file + diff --git a/src/components/info/info-bar.js b/src/components/info/info-bar.js index 0a0589b07..a8802921d 100644 --- a/src/components/info/info-bar.js +++ b/src/components/info/info-bar.js @@ -1,2 +1,2 @@ import './info-bar.sass' -export { default as InfoBar } from './info-bar.hbs?raw'; \ No newline at end of file +export { default as InfoBar } from './info-bar.hbs?raw'; diff --git a/src/components/input/input.hbs b/src/components/input/input.hbs index bbc79d16a..16e8229b4 100644 --- a/src/components/input/input.hbs +++ b/src/components/input/input.hbs @@ -8,4 +8,3 @@ {{/with}} - diff --git a/src/components/input/input.js b/src/components/input/input.js index 030d3380d..e5d10c42a 100644 --- a/src/components/input/input.js +++ b/src/components/input/input.js @@ -7,4 +7,4 @@ Handlebars.registerHelper('getInput', function (name) { return data['input'] && data['input'][name]; }) -export { default as Input } from './input.hbs?raw'; \ No newline at end of file +export { default as Input } from './input.hbs?raw'; diff --git a/src/components/search/search.hbs b/src/components/search/search.hbs index 2f76cd194..39421b657 100644 --- a/src/components/search/search.hbs +++ b/src/components/search/search.hbs @@ -1,4 +1,4 @@ \ No newline at end of file + diff --git a/src/components/search/search.js b/src/components/search/search.js index dc7892752..ac040bebb 100644 --- a/src/components/search/search.js +++ b/src/components/search/search.js @@ -1,2 +1,2 @@ import './search.sass' -export { default as Search } from './search.hbs?raw'; \ No newline at end of file +export { default as Search } from './search.hbs?raw'; diff --git a/src/data.json b/src/data.json index 1baabd888..b6fbde6cc 100644 --- a/src/data.json +++ b/src/data.json @@ -359,4 +359,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/index.html b/src/index.html index be19c50db..719b220f2 100644 --- a/src/index.html +++ b/src/index.html @@ -8,4 +8,4 @@
- \ No newline at end of file + diff --git a/src/main.js b/src/main.js index 39b6ae7f5..9894ec7a0 100644 --- a/src/main.js +++ b/src/main.js @@ -57,4 +57,3 @@ document.addEventListener('click', e=>{ e.stopImmediatePropagation(); } }) - diff --git a/src/pages/404/404.hbs b/src/pages/404/404.hbs index e4315db5a..194e1270c 100644 --- a/src/pages/404/404.hbs +++ b/src/pages/404/404.hbs @@ -10,4 +10,4 @@
{{> Button name = "back_to_chats_2" }} - \ No newline at end of file + diff --git a/src/pages/404/404.js b/src/pages/404/404.js index 95c81d37f..e0ddf857d 100644 --- a/src/pages/404/404.js +++ b/src/pages/404/404.js @@ -1,2 +1,2 @@ import './404.sass'; -export { default as Page404 } from './404.hbs?raw'; \ No newline at end of file +export { default as Page404 } from './404.hbs?raw'; diff --git a/src/pages/500/500.hbs b/src/pages/500/500.hbs index 16e89c457..e847e8c71 100644 --- a/src/pages/500/500.hbs +++ b/src/pages/500/500.hbs @@ -10,4 +10,4 @@ {{> Button name = "back_to_chats_2" }} - \ No newline at end of file + diff --git a/src/pages/500/500.js b/src/pages/500/500.js index 097ae535e..1354bdfcc 100644 --- a/src/pages/500/500.js +++ b/src/pages/500/500.js @@ -1,2 +1,2 @@ import './500.sass'; -export { default as Page500 } from './500.hbs?raw'; \ No newline at end of file +export { default as Page500 } from './500.hbs?raw'; diff --git a/src/pages/chat/chat.hbs b/src/pages/chat/chat.hbs index a4d99261a..c37621f04 100644 --- a/src/pages/chat/chat.hbs +++ b/src/pages/chat/chat.hbs @@ -27,4 +27,4 @@ - \ No newline at end of file + diff --git a/src/pages/chat/chat.js b/src/pages/chat/chat.js index fd01f0f8f..cbf6aa7c4 100644 --- a/src/pages/chat/chat.js +++ b/src/pages/chat/chat.js @@ -1,2 +1,2 @@ import './chat.sass'; -export { default as ChatPage } from './chat.hbs?raw'; \ No newline at end of file +export { default as ChatPage } from './chat.hbs?raw'; diff --git a/src/pages/login/login.hbs b/src/pages/login/login.hbs index 725c6c125..fde0b7635 100644 --- a/src/pages/login/login.hbs +++ b/src/pages/login/login.hbs @@ -10,4 +10,4 @@ {{> Button name="signUp"}} {{/FormAuth}} - \ No newline at end of file + diff --git a/src/pages/login/login.js b/src/pages/login/login.js index 9c8418fcf..6b74743f1 100644 --- a/src/pages/login/login.js +++ b/src/pages/login/login.js @@ -1,2 +1,2 @@ import './login.sass'; -export { default as LoginPage } from './login.hbs?raw'; \ No newline at end of file +export { default as LoginPage } from './login.hbs?raw'; diff --git a/src/pages/profile/profile.hbs b/src/pages/profile/profile.hbs index 80c5322c2..79851c7ad 100644 --- a/src/pages/profile/profile.hbs +++ b/src/pages/profile/profile.hbs @@ -23,4 +23,4 @@ {{/FormAuth}} - \ No newline at end of file + diff --git a/src/pages/profile/profile.js b/src/pages/profile/profile.js index 9ed44a961..cb045fcba 100644 --- a/src/pages/profile/profile.js +++ b/src/pages/profile/profile.js @@ -1,2 +1,2 @@ import './profile.sass'; -export { default as ProfilePage } from './profile.hbs?raw'; \ No newline at end of file +export { default as ProfilePage } from './profile.hbs?raw'; diff --git a/src/pages/registration/registration.hbs b/src/pages/registration/registration.hbs index fbe85678c..ae13bd651 100644 --- a/src/pages/registration/registration.hbs +++ b/src/pages/registration/registration.hbs @@ -15,4 +15,4 @@ {{> Button name="entrance"}} {{/FormAuth}} - \ No newline at end of file + diff --git a/src/pages/registration/registration.js b/src/pages/registration/registration.js index c012fa1d0..2eeb9cdc2 100644 --- a/src/pages/registration/registration.js +++ b/src/pages/registration/registration.js @@ -1,2 +1,2 @@ import './registration.sass'; -export { default as RegistrationPage } from './registration.hbs?raw'; \ No newline at end of file +export { default as RegistrationPage } from './registration.hbs?raw'; From 96e37bb3955b4e80244ce7b278eeb26558d8b46a Mon Sep 17 00:00:00 2001 From: Dmitry Aladzyeu Date: Sun, 3 Sep 2023 14:48:09 +0300 Subject: [PATCH 6/7] Add newline at end of all file, well now everything --- README.md | 2 -- netlify.toml | 2 +- server.js | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0a5e7911e..643abfd26 100644 --- a/README.md +++ b/README.md @@ -31,5 +31,3 @@ npm run preview [http://localhost:3000/](http://localhost:3000/) или [https://fancy-kelpie-740e6d.netlify.app](https://fancy-kelpie-740e6d.netlify.app) остальные страницы подгружаются на этой же странице при клике по соответствующим кнопкам. - - diff --git a/netlify.toml b/netlify.toml index 220ff2e3b..3645a1b78 100644 --- a/netlify.toml +++ b/netlify.toml @@ -6,4 +6,4 @@ # “publish” is the directory to publish (relative to the root of your repo). [build] - publish = "dist" \ No newline at end of file + publish = "dist" diff --git a/server.js b/server.js index f30dfd813..a44635071 100644 --- a/server.js +++ b/server.js @@ -13,4 +13,4 @@ app.get("*", (req, res) => { app.listen(PORT, function () { console.log(`Example app listening on http://localhost:${PORT}`); -}); \ No newline at end of file +}); From dd407d67442753b9e5df046719e5918ed1530c0f Mon Sep 17 00:00:00 2001 From: Dmitry Aladzyeu Date: Tue, 5 Sep 2023 01:03:28 +0300 Subject: [PATCH 7/7] Correction of remarks after the first check --- src/assets/css/normalize.css | 349 +++++++++++++++++++++++ src/components/chat-item/chat-item.hbs | 6 +- src/components/chat-item/chat-item.sass | 5 + src/components/chat-list/chat-list.hbs | 4 +- src/components/chat-list/chat-list.sass | 1 + src/components/info/info-bar.hbs | 6 +- src/components/info/info-bar.sass | 8 +- src/favicon.ico | Bin 0 -> 15406 bytes src/index.html | 3 + src/pages/404/404.hbs | 14 +- src/pages/500/500.hbs | 14 +- src/pages/chat/chat.hbs | 18 +- src/pages/chat/chat.sass | 4 +- src/pages/login/login.hbs | 6 +- src/pages/login/login.sass | 3 + src/pages/profile/profile.hbs | 14 +- src/pages/profile/profile.sass | 4 +- src/pages/registration/registration.hbs | 6 +- src/pages/registration/registration.sass | 3 + 19 files changed, 420 insertions(+), 48 deletions(-) create mode 100644 src/assets/css/normalize.css create mode 100644 src/favicon.ico diff --git a/src/assets/css/normalize.css b/src/assets/css/normalize.css new file mode 100644 index 000000000..192eb9ce4 --- /dev/null +++ b/src/assets/css/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/src/components/chat-item/chat-item.hbs b/src/components/chat-item/chat-item.hbs index 68d361fb4..3e8082af0 100644 --- a/src/components/chat-item/chat-item.hbs +++ b/src/components/chat-item/chat-item.hbs @@ -5,12 +5,12 @@ {{/each}}
- {{title}} +

{{title}}

{{#if lastMessage.personName}} -
+
{{ lastMessage.personName }}: -
+ {{/if}}
{{ lastMessage.text }} diff --git a/src/components/chat-item/chat-item.sass b/src/components/chat-item/chat-item.sass index 148865145..a47b83ad5 100644 --- a/src/components/chat-item/chat-item.sass +++ b/src/components/chat-item/chat-item.sass @@ -19,11 +19,16 @@ padding-left: 15px border-bottom: 1px #FFF solid + &__title + margin: 0 + &__last-message font-size: 12px span, &__last-message-name + margin: 0 + font-size: 13px font-weight: bold .group-avatar diff --git a/src/components/chat-list/chat-list.hbs b/src/components/chat-list/chat-list.hbs index 862fba945..76575b45e 100644 --- a/src/components/chat-list/chat-list.hbs +++ b/src/components/chat-list/chat-list.hbs @@ -1,12 +1,12 @@
-
+

{{> Button name="arrow" }} {{ title }} {{> Button name="add" }}
-

+ {{#each items}} {{> ChatItem }} {{/each}} diff --git a/src/components/chat-list/chat-list.sass b/src/components/chat-list/chat-list.sass index 7f0e4a901..ff257cc50 100644 --- a/src/components/chat-list/chat-list.sass +++ b/src/components/chat-list/chat-list.sass @@ -3,6 +3,7 @@ @import ../../assets/sass/templates .chat-list + overflow-x: hidden &__header @extend %flex-row +flex-alignment(flex-start, center) diff --git a/src/components/info/info-bar.hbs b/src/components/info/info-bar.hbs index bb4006bbd..5146be233 100644 --- a/src/components/info/info-bar.hbs +++ b/src/components/info/info-bar.hbs @@ -1,5 +1,7 @@
- {{> Avatar }} - {{userName}} +

+ {{> Avatar }} +

{{userName}}

+

{{> Button name="setting" }}
diff --git a/src/components/info/info-bar.sass b/src/components/info/info-bar.sass index 355445d12..716fbfa66 100644 --- a/src/components/info/info-bar.sass +++ b/src/components/info/info-bar.sass @@ -10,9 +10,15 @@ background: $background-color-second padding: 20px - .user-name + &__title + margin: 0 + @extend %flex-row + +flex-alignment(flex-start, flex-end) + + &__username font-weight: bold font-size: 18px + margin: 0 margin-left: 11px align-self: flex-end diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..489427daf0661b49a40fe0d084241936a3f272bb GIT binary patch literal 15406 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 + Middle Messenger Prakticum Yande + + diff --git a/src/pages/404/404.hbs b/src/pages/404/404.hbs index 194e1270c..714cb6376 100644 --- a/src/pages/404/404.hbs +++ b/src/pages/404/404.hbs @@ -1,13 +1,13 @@ -
+
-
404
+

404

-
+

Not Found -

-
+

+

Тут ничего нет -

+

{{> Button name = "back_to_chats_2" }} -
+ diff --git a/src/pages/500/500.hbs b/src/pages/500/500.hbs index e847e8c71..168f6b2bf 100644 --- a/src/pages/500/500.hbs +++ b/src/pages/500/500.hbs @@ -1,13 +1,13 @@ -
+
-
500
+

500

-
+

Internal Server Error -

-
+

+

Мы уже спешим исправить -

+

{{> Button name = "back_to_chats_2" }} -
+ diff --git a/src/pages/chat/chat.hbs b/src/pages/chat/chat.hbs index c37621f04..055cbad39 100644 --- a/src/pages/chat/chat.hbs +++ b/src/pages/chat/chat.hbs @@ -1,30 +1,30 @@
- -
+
+
- Выберите чат чтобы отправить сообщение -
+

Выберите чат чтобы отправить сообщение

+
+
- +
diff --git a/src/pages/chat/chat.sass b/src/pages/chat/chat.sass index fa7e8346c..d1a10dfce 100644 --- a/src/pages/chat/chat.sass +++ b/src/pages/chat/chat.sass @@ -19,7 +19,7 @@ html, body @extend %flex-row padding: 20px - aside + .sidebar @extend %flex-column flex: 1 auto overflow: hidden @@ -55,7 +55,7 @@ html, body overflow: hidden //background: $background-color-third - section + .view display: flex +flex-alignment(center, center) flex: 4 auto diff --git a/src/pages/login/login.hbs b/src/pages/login/login.hbs index fde0b7635..4e3f4de2b 100644 --- a/src/pages/login/login.hbs +++ b/src/pages/login/login.hbs @@ -1,7 +1,7 @@ - {{/FormAuth}} -
+ diff --git a/src/pages/login/login.sass b/src/pages/login/login.sass index 1a3f82a14..021fc8d21 100644 --- a/src/pages/login/login.sass +++ b/src/pages/login/login.sass @@ -25,6 +25,9 @@ html, body box-sizing: border-box width: 280px + &__title + color: $font-color-second + & input width: 280px diff --git a/src/pages/profile/profile.hbs b/src/pages/profile/profile.hbs index 79851c7ad..e21af3deb 100644 --- a/src/pages/profile/profile.hbs +++ b/src/pages/profile/profile.hbs @@ -1,19 +1,19 @@
- -
+ +
+
{{#> FormAuth name="profile"}} {{> Avatar }} - {{ person.name }} +

{{ person.name }}

{{> Input name="mail" }} {{> Input name="login" }} {{> Input name="name" }} @@ -22,5 +22,5 @@ {{> Input name="phone" }} {{/FormAuth}}
- +
diff --git a/src/pages/profile/profile.sass b/src/pages/profile/profile.sass index f6da1a1d0..27c1f3b6b 100644 --- a/src/pages/profile/profile.sass +++ b/src/pages/profile/profile.sass @@ -20,7 +20,7 @@ html, body padding: 20px $root: & - aside + .sidebar @extend %flex-column flex: 1 auto overflow: hidden @@ -44,7 +44,7 @@ html, body padding-bottom: 10px - section + .view display: flex +flex-alignment(center, center) flex: 4 auto diff --git a/src/pages/registration/registration.hbs b/src/pages/registration/registration.hbs index ae13bd651..a5871c217 100644 --- a/src/pages/registration/registration.hbs +++ b/src/pages/registration/registration.hbs @@ -1,7 +1,7 @@ -
+
{{#> FormAuth name="registration"}}
- Регистрация +

Регистрация

{{> Input name="mail" }} {{> Input name="login" }} {{> Input name="name" }} @@ -15,4 +15,4 @@ {{> Button name="entrance"}}
{{/FormAuth}} -
+ diff --git a/src/pages/registration/registration.sass b/src/pages/registration/registration.sass index 95354f36e..83abfd51c 100644 --- a/src/pages/registration/registration.sass +++ b/src/pages/registration/registration.sass @@ -25,6 +25,9 @@ html, body box-sizing: border-box width: 280px + &__title + color: $font-color-second + & input width: 280px