diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index f42fae3..0000000 --- a/.browserslistrc +++ /dev/null @@ -1,5 +0,0 @@ -# Browsers that we support - -last 3 version -> 0.3% -not dead # no browsers without security updates diff --git a/.dockerignore b/.dockerignore index 7476aa0..c0e2501 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,10 @@ -.git -*.md \ No newline at end of file +.git/ +.gitlab/ +.gitlab-ci.yml +*.md +.vscode/ +auth.json +Dockerfile +manifest.yaml +node_modules/ +production-resources.yaml diff --git a/.editorconfig b/.editorconfig index 2e1b261..1de8afb 100644 --- a/.editorconfig +++ b/.editorconfig @@ -17,5 +17,8 @@ indent_size = 2 [docker-compose.yml] indent_size = 4 -[*.vue] +[*.scss] +indent_size = 2 + +[*.{tsx,ts,cjs}] indent_size = 2 diff --git a/.env.example b/.env.example index 4d94ae9..c0660ea 100644 --- a/.env.example +++ b/.env.example @@ -4,44 +4,62 @@ APP_KEY= APP_DEBUG=true APP_URL=http://localhost +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +# PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + LOG_CHANNEL=stack +LOG_STACK=single LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=laravel -DB_USERNAME=root -DB_PASSWORD= +DB_CONNECTION=sqlite +# DB_HOST=127.0.0.1 +# DB_PORT=3306 +# DB_DATABASE=laravel +# DB_USERNAME=root +# DB_PASSWORD= -BROADCAST_DRIVER=log -CACHE_DRIVER=file -FILESYSTEM_DISK=local -QUEUE_CONNECTION=sync -SESSION_DRIVER=file +SESSION_DRIVER=database SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null -MAIL_MAILER=smtp -MAIL_HOST=smtp.mailtrap.io +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +# CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null -MAIL_ENCRYPTION=null -MAIL_FROM_ADDRESS=noreply-sw@ldc.fr +MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" -MAIL_LIST_SERVICEWEB=digital@ldc.fr -MAIL_ADMIN=digital@ldc.fr -# Sentry -SENTRY_LARAVEL_DSN= +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false -# UWIL ADMIN SECURE -# - LIST SEPARATED WITH ',' (Required) -UWIL_ADMIN_SECURE_CIDR_LIST="" -# - LIST SEPARATED WITH ',' (Optional) -UWIL_ADMIN_SECURE_CIDR_PROJECT_ALLOWED_LIST= - -# GITLAB API -GITLAB_URL= -GITLAB_TOKEN= +VITE_APP_NAME="${APP_NAME}" diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..98483d6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +node_modules +public +vendor +resources/ts/components/ui/ diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..91e2e45 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,74 @@ +module.exports = { + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaVersion: 2020, + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, + project: "./tsconfig.json", + }, + settings: { + react: { + version: "detect", + }, + "import/resolver": { + typescript: { + project: "./tsconfig.json", + }, + alias: { + map: [ + ["@", "./resources/ts"], + ["&", "./resources/assets"], + ], + extensions: [".ts", ".tsx", ".js", ".jsx"], + }, + }, + }, + env: { + browser: true, + es2021: true, + node: true, + }, + extends: [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:jsx-a11y/recommended", + "plugin:react-hooks/recommended", + "plugin:@typescript-eslint/recommended", + "airbnb", + "airbnb/hooks", + "plugin:prettier/recommended", + ], + plugins: [ + "react", + "react-hooks", + "jsx-a11y", + "@typescript-eslint", + "prettier", + ], + rules: { + "react/jsx-filename-extension": ["error", { extensions: [".tsx", ".jsx"] }], + "react/react-in-jsx-scope": "off", + "react/prop-types": "off", + "react/require-default-props": "off", + "import/extensions": [ + "error", + "ignorePackages", + { + ts: "never", + tsx: "never", + js: "never", + jsx: "never", + }, + ], + "import/order": "off", + "prettier/prettier": "error", + "no-console": [ + "warn", + { + allow: ["warn", "error"], + }, + ], + }, +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 53398ab..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "extends": [ - "eslint:recommended", - "plugin:vue/vue3-strongly-recommended", - "@vue/eslint-config-typescript" - ], - "overrides": [ - { - "files": ["*.ts", "*.vue"], - "rules": { - "no-undef": "off" - } - }, - { - "files": ["*.vue"], - "rules": { - "indent": "off" - } - } - ], - "parser": "vue-eslint-parser", - "parserOptions": { - "parser": "@typescript-eslint/parser", - "ecmaVersion": "latest", - "sourceType": "module" - }, - "plugins": ["vue", "@typescript-eslint"], - "ignorePatterns": ["webpack.mix.js", "**/vendor/*.js", "**/vendor/**/*.js"], - "rules": { - "indent": ["error", 4, { "SwitchCase": 1 }], - "linebreak-style": ["error", "unix"], - "quotes": ["error", "double"], - "semi": ["error", "always"], - "vue/script-indent": ["error", 2, { "baseIndent": 0, "switchCase": 1 }], - "vue/one-component-per-file": "off" - }, - "settings": { - "import/resolver": { - "node": { - "extensions": [".js", ".vue", ".ts", ".d.ts"] - }, - "alias": { - "extensions": [".vue", ".js", ".ts", ".scss", ".d.ts"], - "map": [ - ["~", "./resources/assets"], - ["@", "./node_modules"] - ] - } - } - } -} diff --git a/.gitignore b/.gitignore index 59bbdd9..d75f734 100644 --- a/.gitignore +++ b/.gitignore @@ -1,28 +1,12 @@ +*.log .env .env.backup .env.production -.phpunit.result.cache -.stylelintcache -/.fleet -/.idea -/.phpunit.cache -/.vscode +/auth.json +/.npmrc /node_modules /public/build -/public/cache -/public/hot -/public/sitemap.xml /public/storage /storage/*.key +/storage/pail /vendor -auth.json -docker-compose.override.yml -Homestead.json -Homestead.yaml -npm-debug.log -yarn-error.log -storage/samlidp/* -.npmrc -.zshrc -.npm/ -.composer/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 219a6c1..1b009f4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,24 +1,23 @@ include: - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'lint/lint.yml' - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'security/security.yml' - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'build/build.yml' - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'test/test.yml' - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'deploy/deploy.yml' - + - project: "ldc-web/shared-ci" + ref: "main" + file: "lint/lint.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "security/security.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "build/docker-multistage.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "test/test.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "deploy/deploy.yml" stages: - - lint - - security - - build - - test - - deploy + - lint + - security + - build + - test + - deploy diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..8c332e2 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,3 @@ +#!/bin/sh + +npx --no -- commitlint --config node_modules/@uwil/husky-config/commitlint.config.cjs --edit $1 diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..2df9ba5 --- /dev/null +++ b/.npmrc @@ -0,0 +1,5 @@ +@ldc-web:registry=https://lab.s-web.fr/api/v4/packages/npm/ +//lab.s-web.fr/api/v4/packages/npm/:_authToken=glpat-Td7iwL19ZszGUMosPyNQ + +@uwil:registry=https://lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/ +//lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/:_authToken=glpat-Td7iwL19ZszGUMosPyNQ \ No newline at end of file diff --git a/.stylelintrc.json b/.stylelintrc.json index dc30b0b..f23ce68 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -4,13 +4,8 @@ "stylelint-config-sass-guidelines", "stylelint-config-idiomatic-order" ], - "plugins": [ - "stylelint-scss" - ], - "files": [ - "**/*.css", - "**/*.scss" - ], + "plugins": ["stylelint-scss"], + "files": ["**/*.css", "**/*.scss"], "ignoreFiles": [ "**/vendor/*.css", "**/vendor/**/*.css", @@ -18,8 +13,12 @@ "**/vendor/**/*.scss", "**/vendor/*.sass", "**/vendor/**/*.sass", - "**/vendor/*.less", - "**/vendor/**/*.less" + "**/packages/*.css", + "**/packages/**/*.css", + "**/packages/*.scss", + "**/packages/**/*.scss", + "**/packages/*.sass", + "**/packages/**/*.sass" ], "customSyntax": "postcss-scss", "rules": { @@ -29,8 +28,6 @@ "order/properties-alphabetical-order": null, "max-nesting-depth": 5, "selector-max-compound-selectors": 5, - "declaration-colon-newline-after": null, - "value-list-comma-newline-after": null, "scss/double-slash-comment-empty-line-before": [ "always", { @@ -40,6 +37,20 @@ "inside-block" ] } + ], + "at-rule-no-unknown": null, + "scss/at-rule-no-unknown": [ + true, + { + "ignoreAtRules": [ + "tailwind", + "apply", + "variants", + "responsive", + "screen", + "layer" + ] + } ] } } diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..f8e8acd --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,19 @@ +{ + "recommendations": [ + "esbenp.prettier-vscode", + "rvest.vs-code-prettier-eslint", + "onecentlin.laravel-extension-pack", + "johnpapa.vscode-peacock", + "xdebug.php-debug", + "neilbrayfield.php-docblocker", + "bmewburn.vscode-intelephense-client", + "valeryanm.vscode-phpsab", + "syler.sass-indented", + "sibiraj-s.vscode-scss-formatter", + "mrmlnc.vscode-scss", + "stylelint.vscode-stylelint", + "vue.vscode-typescript-vue-plugin", + "wscats.vue", + "misterj.vue-volar-extention-pack" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..51de9ef --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,48 @@ +{ + // Utilisez IntelliSense pour en savoir plus sur les attributs possibles. + // Pointez pour afficher la description des attributs existants. + // Pour plus d'informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Listen for Xdebug", + "type": "php", + "request": "launch", + "port": 9003 + }, + { + "name": "Launch currently open script", + "type": "php", + "request": "launch", + "program": "${file}", + "cwd": "${fileDirname}", + "port": 0, + "runtimeArgs": [ + "-dxdebug.start_with_request=yes" + ], + "env": { + "XDEBUG_MODE": "debug,develop", + "XDEBUG_CONFIG": "client_port=${port}" + } + }, + { + "name": "Launch Built-in web server", + "type": "php", + "request": "launch", + "runtimeArgs": [ + "-dxdebug.mode=debug", + "-dxdebug.start_with_request=yes", + "-S", + "localhost:0" + ], + "program": "", + "cwd": "${workspaceRoot}", + "port": 9003, + "serverReadyAction": { + "pattern": "Development Server \\(http://localhost:([0-9]+)\\) started", + "uriFormat": "http://localhost:%s", + "action": "openExternally" + } + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 32e834d..03ebc78 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,23 +1,26 @@ { "workbench.colorCustomizations": { - "activityBar.activeBorder": "#621e41", - "activityBar.activeBackground": "#3371a9", - "activityBar.background": "#3371a9", - "activityBar.foreground": "#e7e7e7", - "activityBar.inactiveForeground": "#e7e7e799", - "activityBarBadge.background": "#621e41", - "activityBarBadge.foreground": "#e7e7e7", - "commandCenter.border": "#e7e7e799", - "sash.hoverBorder": "#3371a9", - "statusBar.background": "#275782", - "statusBar.foreground": "#e7e7e7", - "statusBarItem.hoverBackground": "#3371a9", - "statusBarItem.remoteBackground": "#275782", - "statusBarItem.remoteForeground": "#e7e7e7", - "titleBar.activeBackground": "#275782", - "titleBar.activeForeground": "#e7e7e7", - "titleBar.inactiveBackground": "#27578299", - "titleBar.inactiveForeground": "#e7e7e799" + "activityBar.activeBackground": "#e6f0f8", + "activityBar.activeBorder": "#1a1d02", + "activityBar.background": "#e6f0f8", + "activityBar.foreground": "#15202b", + "activityBar.inactiveForeground": "#15202b99", + "activityBarBadge.background": "#dc82b4", + "activityBarBadge.foreground": "#15202b", + "sash.hoverBorder": "#e6f0f8", + "statusBar.background": "#bdd7ee", + "statusBar.foreground": "#15202b", + "statusBarItem.hoverBackground": "#94bee4", + "statusBarItem.remoteBackground": "#bdd7ee", + "statusBarItem.remoteForeground": "#15202b", + "titleBar.activeBackground": "#bdd7ee", + "titleBar.activeForeground": "#15202b", + "titleBar.inactiveBackground": "#bdd7ee99", + "titleBar.inactiveForeground": "#15202b99", + "commandCenter.border": "#15202b99" }, - "peacock.remoteColor": "#275782", -} + "peacock.remoteColor": "#BDD7EE", + "intelephense.environment.phpVersion": "8.3.0", + "intelephense.completion.fullyQualifyGlobalConstantsAndFunctions": true, + "intelephense.phpdoc.useFullyQualifiedNames": true +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 6aedbcc..cac280b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,99 +1,12 @@ -### 25.04.2023 -> 1.4.0 -- Add ticket types management -- Fix AutoClose Jobs -- Fix Email notifications on private messages -### 04.2023 -> 1.3.0 -- Update Status Enum -- Update TicketStatusChanged event -- Update TicketStatus Changed messages -- Add DutyHours -- Add Informations -### 15.12.2022 -- Add Sentry -### 12.10.2022 -> 1.2.3 -- Hotfixed regular users could not create tickets anymore +# Changelog -### 01.07.2022 -> 1.2.2 -- Fixed CSP directives -- Fixed multiples bugs -- Fixed View sur crédits -- Fixed file create -- Changed estimation can be 0.125 days -- Fixed files view -- Added ticket link on credit log +All notable changes to `laravel-project` will be documented in this file. -### 09.06.2022 -> 1.2.1 -- CSP rules enforce -- Bug fixes CSP issues -### 31.05.2022 -> 1.2.0 -- Ajout de la fonctionnalitée d'estimations +- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +- This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), +- Commits respect [Conventionnal commits](https://www.conventionalcommits.org/en/v1.0.0/) & use [Gitmoji](https://gitmoji.dev/). -### 26.05.2022 -> 1.1.0 -- Correction de regression sur macro planning -- Correction de regression sur droits planning -- Ajout de fonctionnalité Label -- Ajout de fonctionalité assigner un ticket -- Rafactorisation du code ticket -- Refonte de tickets.index -- Ajout CSP report URI -- Remove external JS and CSS dependencies -- Use Vuejs runtime -- Add xss sanitizer -- Normalize Laravel mix + add cleaner -- Update npm deps -- Upgrade bootswatch theme -- ADD Secure HEADERS +## **[v1.0.0] - 01/01/2026** -### 23.05.2022 -> 1.0.9 -- Correction d'erreurs multiples -- Fonctionnalité macro planning -- Mises à jour des dépendances - -### 15.03.2022 -- le presse-papier du planning n'est plus vidé après un collage - -### 08.03.2022 -> 1.0.8 -- passage à 8 slots dans le planning - -### 03.01.2022 -> 1.0.7 -- nouveau stockage pour le planning - -### 01.12 -> 1.0.6 -- Ajout d'un nouveau type de Ticket : Demande relative aux Newsletters - -### 25.10 -> 1.0.5 -- Ajout d'un nouveau type de Ticket : Demande relative aux BR, ceci afin de faire une demande - qui concernerait les bons de réduction -- Correction Plannings -- Correction Crud -- Correction de mails relatifs au ticket pour y inclure le bon type de ticket - - -### 30.09 -> 1.0.4 -- Correction lors de l'apperçu des messages -- Correction lors de message sur affichage (auteur message) -- Modification de la couleur BG sur label statut du ticket -- Modification de l'url précédent sur ticket.show (garde en mémoire le filtre multi projet) -- Modification Tri par défaut sur ticket id DESC - -### 29.09 -> 1.0.3 -- Correction des avertissements avant cloture des tickets -- Ajout d'un bouton pour les utilisateurs afin de réouvrir un ticket clos -- Ajout de messages de confirmation sur les actions de tickets - -### 29.09 -> 1.0.2 -- Modification Un ticket qui est marqué comme traité ou en production depuis plus de 15 jours et sans activité sera automatiquement clos et archivé -- Modification Il n'est désomrais plus possible de répondre à un ticket archivé dans touts les cas -- Nettoyage -- Correction des noms qui ne s'affichaient pas correctement sur les tickets - -### 01.08 -> 0.0.1 -- Ajout d'un algo de charge -- Ajout changement de mot de passe -- Ajout messages http explicites -- Correction couleurs - -#### 30.07 -- Ajout changelog -- Ajout footer infos -- Correction couleurs +### Added +- feat: 🎉 working project diff --git a/Dockerfile b/Dockerfile index a056fdb..8c03f76 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,49 @@ -FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-8.3:170625-101047 -COPY --chown=www-data:www-data . /app/srcs +FROM composer:2.8 AS vendor + +ARG GITLAB_USER +ARG GITLAB_PASSWORD + +COPY database/ database/ + +COPY composer.json composer.json +COPY composer.lock composer.lock + +RUN composer config gitlab-token.lab.s-web.fr ${GITLAB_USER} ${GITLAB_PASSWORD} +RUN composer install \ + --ignore-platform-reqs \ + --no-interaction \ + --no-plugins \ + --no-scripts \ + --no-dev \ + --prefer-dist + +FROM node:20.18 AS frontend + +ARG GITLAB_PASSWORD + +RUN mkdir -p /app/public/build + +COPY package*.json postcss.config.js tailwind.config.js tsconfig.json vite.config.ts .eslintrc.json .stylelintrc.json /app/ +COPY resources/ /app/resources/ +COPY --from=vendor /app/vendor/ /app/vendor/ +WORKDIR /app +RUN npm config set @ldc-web:registry https://lab.s-web.fr/api/v4/packages/npm/ +RUN npm config set -- '//lab.s-web.fr/api/v4/packages/npm/:_authToken' "${GITLAB_PASSWORD}" +RUN npm config set @uwil:registry https://lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/ +RUN npm config set -- '//lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/:_authToken' "${GITLAB_PASSWORD}" +RUN npm ci --no-audit --no-fund --loglevel=error && npm run prod + + +FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/uwil-production-8.5:${PHP_8_5_TAG} + +ARG USER=www-data + +COPY --chown=${USER}:${USER} . /app/srcs +COPY --chown=${USER}:${USER} ./resources/favicons/front/ /app/srcs/public/ +COPY --chown=${USER}:${USER} ./resources/favicons/back/ /app/srcs/public/favicon-back/ +COPY --from=vendor --chown=${USER}:${USER} /app/vendor/ /app/srcs/vendor/ +COPY --from=frontend --chown=${USER}:${USER} /app/public/build/ /app/srcs/public/build/ + USER root RUN chmod -R 755 /app/srcs/storage -USER www-data +USER ${USER} diff --git a/IDEAS.md b/IDEAS.md deleted file mode 100644 index f2b8d87..0000000 --- a/IDEAS.md +++ /dev/null @@ -1,34 +0,0 @@ -Algorithme charge de travail ticket - - -delais 7 jours 168h -travaillé 5 jours 37h -temps tickets 1 jours 7.4h - -personnes 4 (TpP) 3.7h / semaine * prs - -délais moyen ticket (Dmt) 0.75h - -délais max attente pour 1 ticket (Dam) 7jours - -niveaux de charge 4: - faible - - stable - - élevée - - saturation - -états tickets(Et) : - nouveaux (non traités) - - en attente (charge pendante) - - traités - -Algo : linéaire - -TpP : 3.7h -P : 4 - -Et(nvx) * Dam - -Nv Charge = (P * TpP) / (Et(nvx) * Dam) - (P * TpP) / (Et(nvx) * DmT) - (Et(att) * DmT) - - -Si nv Charge < 0 => saturation - diff --git a/README.md b/README.md index a64521d..1a49dcd 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,33 @@ -# UWIL Support +# Table of contents -PROD : support.uwil.fr +- [Table of contents](#table-of-contents) +- [Frameworks, Platforms and Libraries](#frameworks-platforms-and-libraries) +- [Documentation](#documentation) +- [Changelog](#changelog) +- [Copyright and License](#copyright-and-license) -RE7 : support-web.re7-s-web.fr +# Frameworks, Platforms and Libraries -## Gitlab Intégration -Le token de groupe pour l'intégration est valable 11 mois + -Il faut le renouveler ici : https://lab.s-web.fr/groups/ldc-web/projets/-/settings/access_tokens et le nommer SW Intégration +[![SASS](https://img.shields.io/badge/SASS-hotpink.svg?style=for-the-badge&logo=SASS&logoColor=white)](https://sass-lang.com/) +[![TailwindCSS](https://img.shields.io/badge/tailwindcss-%2338B2AC.svg?style=for-the-badge&logo=tailwind-css&logoColor=white)](https://tailwindcss.com/) +[![Vite](https://img.shields.io/badge/vite-%23646CFF.svg?style=for-the-badge&logo=vite&logoColor=white)](https://vite.dev/) +[![PHP](https://img.shields.io/badge/php-%23777BB4.svg?style=for-the-badge&logo=php&logoColor=white)](https://www.php.net/) +[![Laravel](https://img.shields.io/badge/laravel-%23FF2D20.svg?style=for-the-badge&logo=laravel&logoColor=white)](https://laravel.com/docs/master) -Role : Guest -Scope : api +# Documentation -## TODO +```php +composer i/npm i +``` -- App\Models\Message:booted(): investigate why this make errors on prod, +# Changelog + +Latest version v1.0.0. + +See the [CHANGELOG.md](CHANGELOG.md) file for details. + +# Copyright and License + +Copyright (c) 2025 and beyond UWIL. diff --git a/app/Casts/HtmlColor.php b/app/Casts/HtmlColor.php deleted file mode 100644 index de6e071..0000000 --- a/app/Casts/HtmlColor.php +++ /dev/null @@ -1,56 +0,0 @@ -zeropad(dechex($value), 6)}"; - } - - /** - * Prepare the given value for storage. - * - * @param \Illuminate\Database\Eloquent\Model $model - * @param string $key - * @param mixed $value - * @param array $attributes - * @return integer - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed - */ - public function set($model, $key, $value, $attributes) - { - return \intval(hexdec(ltrim($value, '#'))); - } - - /** - * Pad with zeros a numeric string - * - * @param string $num - * @param integer $lim - * @return string - */ - private function zeropad(string $num, int $lim): string - { - return (strlen($num) >= $lim) ? $num : $this->zeropad("0" . $num, $lim); - } -} diff --git a/app/Console/Commands/AutoCloseOldTickets.php b/app/Console/Commands/AutoCloseOldTickets.php deleted file mode 100644 index ab5686f..0000000 --- a/app/Console/Commands/AutoCloseOldTickets.php +++ /dev/null @@ -1,38 +0,0 @@ -info('Running the Job, this could take some time.'); - $job = new JobsAutoCloseOldTickets(); - $job->handle(); - $this->info('Job completed'); - - return 0; - } -} diff --git a/app/Console/Commands/CreateUser.php b/app/Console/Commands/CreateUser.php deleted file mode 100644 index e2fa154..0000000 --- a/app/Console/Commands/CreateUser.php +++ /dev/null @@ -1,168 +0,0 @@ -name = null; - $this->addName(); - - $this->email = null; - $this->addEmail(); - - $this->password = null; - $this->addPassword(); - - $this->role = null; - $this->addRole(); - - $user = new User([ - 'name' => $this->name, - 'email' => $this->email, - 'password' => $this->password, - 'role' => $this->role - ]); - $user->saveOrFail(); - - $this->info('User created.'); - return 0; - } - - /** - * Add a firstname to the user. - * - * @return void - */ - private function addName(): void - { - while (is_null($this->name)) { - try { - $tmp = $this->ask('Type the wanted user name', 'Admin'); - $validator = Validator::make(['name' => $tmp], [ - 'name' => 'required|min:3|max:255' - ]); - $validator->validate(); - $this->name = $tmp; - } catch (ValidationException $e) { - $this->error(sprintf( - 'Please provide a valid name %s', - \implode(',', collect($e->errors())->flatten()->all()) - )); - continue; - } //end try - }; //end while - } - - /** - * Add an email to the user. - * - * @return void - */ - private function addEmail(): void - { - while (is_null($this->email)) { - try { - $tmp = $this->ask('Type the wanted user email', 'digital@ldc.fr'); - $validator = Validator::make(['email' => $tmp], [ - 'email' => 'required|unique:users,email|email:rfc,dns' - ]); - $validator->validate(); - $this->email = $tmp; - } catch (ValidationException $e) { - $this->error(sprintf( - 'Please provide a valid email %s', - \implode(',', collect($e->errors())->flatten()->all()) - )); - continue; - } //end try - }; //end while - } - - /** - * Add a password to the user. - * - * @return void - */ - private function addPassword(): void - { - while ( - ($this->password = $this->secret( - (!\is_null($this->password) ? 'Failed to confirm, ' : '') . 'Type the wanted user password' - )) !== $this->secret('Confirm the password') - ) { - continue; - }; //end while - } - - /** - * Add a password to the user. - * - * @return void - */ - private function addRole(): void - { - while (is_null($this->role)) { - $tmp = $this->confirm('Is the user an admin?'); - $validator = Validator::make(['role' => $tmp], [ - 'role' => 'required|boolean' - ]); - $validator->validate(); - $this->role = $tmp ? RoleEnum::admin : RoleEnum::client; - }; - } -} diff --git a/app/Console/Commands/ExportTicketsState.php b/app/Console/Commands/ExportTicketsState.php deleted file mode 100644 index f2cecdd..0000000 --- a/app/Console/Commands/ExportTicketsState.php +++ /dev/null @@ -1,38 +0,0 @@ -info('Running the Job, this could take some time.'); - $job = new JobsExportTicketsState(); - $job->handle(); - $this->info('Job completed'); - - return 0; - } -} diff --git a/app/Console/Commands/TestMail.php b/app/Console/Commands/TestMail.php deleted file mode 100644 index 0bcbec8..0000000 --- a/app/Console/Commands/TestMail.php +++ /dev/null @@ -1,36 +0,0 @@ -to('digital@ldc.fr')->subject('Test Email'); - }); - return 0; - } -} diff --git a/app/Console/Commands/UpdateGitlabDatas.php b/app/Console/Commands/UpdateGitlabDatas.php deleted file mode 100644 index 27da89a..0000000 --- a/app/Console/Commands/UpdateGitlabDatas.php +++ /dev/null @@ -1,307 +0,0 @@ -option('is-cron'); - - $groupId = 23; - - $this->updateProjectsByGroup($groupId); - - $this->updateLabelsByGroup($groupId); - - $projects = GitlabProjects::all(); - - foreach ($projects as $project) { - $this->updateMilestonesByProject($project); - $this->updateIssuesByProject($project, $isCron); - } - - $this->syncTicketStatus(); - } - - /** - * updateProjectsByGroup function - * - * @param integer $groupId - * @return void - */ - private function updateProjectsByGroup(int $groupId): void - { - $allProjects = []; - $page = 1; - do { - $projects = GitLab::groups()->projects($groupId, [ - 'order_by' => 'created_at', - 'sort' => 'asc', - 'per_page' => 100, - 'page' => $page, - 'include_subgroups' => true - ]); - $allProjects = array_merge($allProjects, $projects); - $page++; - } while (!empty($projects)); - - $this->info(sprintf( - "Fetched %d projects in group %d.", - count($allProjects), - $groupId - )); - - foreach ($allProjects as $project) { - GitlabProjects::upsert( - [ - 'name' => $project['name'], - 'url' => $project['web_url'], - 'is_archived' => $project['archived'], - 'gitlab_id' => $project['id'] - ], - ['gitlab_id'] - ); - } - - $this->info("Gitlab Projects upsert complete."); - } - - /** - * updateLabelsByGroup function - * - * @param integer $groupId - * @return void - */ - private function updateLabelsByGroup(int $groupId): void - { - $allLabels = []; - $page = 1; - do { - $labels = GitLab::groups()->labels($groupId, [ - 'per_page' => 100, - 'page' => $page, - ]); - $allLabels = array_merge($allLabels, $labels); - $page++; - } while (!empty($labels)); - - $this->info(sprintf( - "Fetched %d labels in group %d.", - count($allLabels), - $groupId - )); - - foreach ($allLabels as $project) { - GitlabLabels::upsert( - [ - 'name' => $project['name'], - 'gitlab_id' => $project['id'] - ], - ['gitlab_id'] - ); - } - - $this->info("Gitlab labels upsert complete."); - } - - /** - * updateIssuesByProject function - * - * @param GitlabProjects $project - * @param boolean $isCron - * @return void - */ - private function updateIssuesByProject(GitlabProjects $project, bool $isCron = false): void - { - $projectId = $project->gitlab_id; - $allIssues = []; - $page = 1; - - do { - $params = [ - 'order_by' => 'created_at', - 'sort' => 'asc', - 'per_page' => 100, - 'page' => $page, - 'state' => 'all', - ]; - if ($isCron) { - $params = array_merge($params, ['updated_after' => now()->subDay()]); - } - $issues = GitLab::projects()->issues($projectId, $params); - $allIssues = array_merge($allIssues, $issues); - $page++; - } while (!empty($issues)); - - $this->info(sprintf( - "Fetched %d issues in project %d.", - count($allIssues), - $projectId - )); - - foreach ($allIssues as $issue) { - GitlabIssues::upsert( - [ - 'title' => $issue['title'], - 'url' => $issue['web_url'], - 'estimate_time' => $issue['time_stats']['time_estimate'] ?? 0, - 'spent_time' => $issue['time_stats']['total_time_spent'] ?? 0, - 'is_closed' => $issue['state'] === 'closed', - 'gitlab_id' => $issue['id'], - 'gitlab_iid' => $issue['iid'], - 'milestone_iid' => $issue['milestone']['iid'] ?? null, - 'gitlab_project_id' => $projectId, - 'g_created_at' => Carbon::parse($issue['created_at'])->format('Y-m-d'), - 'g_updated_at' => Carbon::parse($issue['updated_at'])->format('Y-m-d'), - 'g_closed_at' => !is_null($issue['closed_at']) - ? Carbon::parse($issue['closed_at'])->format('Y-m-d') - : null, - 'g_due_date' => !is_null($issue['due_date']) - ? Carbon::parse($issue['due_date'])->format('Y-m-d') - : null - ], - ['gitlab_id'] - ); - - $issueModel = GitlabIssues::where('gitlab_id', $issue['id'])->firstOrFail(); - $labelIds = []; - - foreach ($issue['labels'] as $labelName) { - $label = Cache::remember("gitlab_label_{$labelName}", 300, function () use ($labelName) { - return GitlabLabels::where('name', $labelName)->first(); - }); - - if ($label) { - $labelIds[] = $label; - } - } - - $issueModel->gitlabLabels()->sync($labelIds); - }//end foreach - - $this->info("Gitlab issues upsert complete."); - } - - /** - * updateMilestonesByProject function - * - * @param GitlabProjects $project - * @return void - */ - private function updateMilestonesByProject(GitlabProjects $project): void - { - $projectId = $project->gitlab_id; - $allMilestones = []; - $page = 1; - - do { - $milestones = GitLab::milestones()->all($projectId, [ - 'per_page' => 100, - 'page' => $page - ]); - $allMilestones = array_merge($allMilestones, $milestones); - $page++; - } while (!empty($milestones)); - - $this->info(sprintf( - "Fetched %d milestones in project %d.", - count($allMilestones), - $projectId - )); - - foreach ($allMilestones as $milestone) { - GitlabMilestones::upsert( - [ - 'title' => $milestone['title'], - 'url' => $milestone['web_url'], - 'is_closed' => $milestone['state'] === 'closed', - 'gitlab_id' => $milestone['id'], - 'gitlab_iid' => $milestone['iid'], - 'gitlab_project_id' => $projectId, - 'g_created_at' => Carbon::parse($milestone['created_at'])->format('Y-m-d'), - 'g_updated_at' => Carbon::parse($milestone['updated_at'])->format('Y-m-d'), - 'g_start_date' => !is_null($milestone['start_date']) - ? Carbon::parse($milestone['start_date'])->format('Y-m-d') - : null, - 'g_due_date' => !is_null($milestone['due_date']) - ? Carbon::parse($milestone['due_date'])->format('Y-m-d') - : null - ], - ['gitlab_id'] - ); - }//end foreach - - $this->info("Gitlab milestones upsert complete."); - } - - /** - * Synchronizes ticket statuses based on GitLab issue labels. - * - * @return void - */ - private function syncTicketStatus(): void - { - $tickets = Ticket::whereNotNull('gitlab_issue')->whereNot('status', TicketStatusEnum::archived)->get(); - - foreach ($tickets as $ticket) { - $gitlabIssue = GitlabIssues::where('url', $ticket->gitlab_issue)->with('gitlabLabels')->first(); - - $gitlabIssueLabels = $gitlabIssue ? $gitlabIssue->gitlabLabels->pluck('name') : []; - - if ($gitlabIssueLabels) { - match (true) { - $gitlabIssueLabels->contains('g-wip') => $this->updateTicketStatus($ticket, TicketStatusEnum::inDev), - $gitlabIssueLabels->contains('g-production') => $this->updateTicketStatus($ticket, TicketStatusEnum::production), - default => null, - }; - } - } - } - - /** - * Updates the ticket status only if it has changed. - * - * @param Ticket $ticket The ticket to update. - * @param TicketStatusEnum $status The new status to apply. - * - * @return void - */ - private function updateTicketStatus(Ticket $ticket, TicketStatusEnum $status): void - { - if ($ticket->status !== $status && $ticket->status !== TicketStatusEnum::waiting) { - $ticket->status = $status; - $ticket->saveOrFail(); - } - } -} diff --git a/app/Console/Commands/WarnBeforeAutoCloseTicket.php b/app/Console/Commands/WarnBeforeAutoCloseTicket.php deleted file mode 100644 index 289eeee..0000000 --- a/app/Console/Commands/WarnBeforeAutoCloseTicket.php +++ /dev/null @@ -1,38 +0,0 @@ -info('Running the Job, this could take some time.'); - $job = new JobsWarnBeforeAutoCloseTicket(); - $job->handle(); - $this->info('Job completed'); - - return 0; - } -} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php deleted file mode 100644 index 6fca931..0000000 --- a/app/Console/Kernel.php +++ /dev/null @@ -1,44 +0,0 @@ -job(ExportTicketsState::class)->weekly()->mondays()->at('07:00'); - $schedule->job(AutoCloseOldTickets::class)->dailyAt('08:00'); - $schedule->job(WarnBeforeAutoCloseTicket::class)->dailyAt('08:05'); - $schedule->command('app:update-gitlab-datas --is-cron')->hourly()->between('7:00', '19:00'); - } - - /** - * Register the commands for the application. - * - * @return void - */ - protected function commands() - { - $this->load(__DIR__ . '/Commands'); - require base_path('routes/console.php'); - } -} diff --git a/app/Enums/Credit/AccountTypeEnum.php b/app/Enums/Credit/AccountTypeEnum.php deleted file mode 100644 index 2e2c126..0000000 --- a/app/Enums/Credit/AccountTypeEnum.php +++ /dev/null @@ -1,21 +0,0 @@ -name => "Jours de développement", - self::seo->name => "Jours de seo", - ]; -} diff --git a/app/Enums/Credit/BalanceOperationEnum.php b/app/Enums/Credit/BalanceOperationEnum.php deleted file mode 100644 index 0b3caa2..0000000 --- a/app/Enums/Credit/BalanceOperationEnum.php +++ /dev/null @@ -1,21 +0,0 @@ -name => "Créditer un compte", - self::debit->name => "Débiter un compte", - ]; -} diff --git a/app/Enums/Credit/EstimationStatusEnum.php b/app/Enums/Credit/EstimationStatusEnum.php deleted file mode 100644 index 15d46ac..0000000 --- a/app/Enums/Credit/EstimationStatusEnum.php +++ /dev/null @@ -1,23 +0,0 @@ -name => "En attente", - self::accepted->name => "Acceptée", - self::refused->name => "Refusée", - ]; -} diff --git a/app/Enums/Credit/EstimationTimeEnum.php b/app/Enums/Credit/EstimationTimeEnum.php deleted file mode 100644 index 86fb130..0000000 --- a/app/Enums/Credit/EstimationTimeEnum.php +++ /dev/null @@ -1,49 +0,0 @@ -name => "Une demi-heure", - self::hour->name => "Une heure", - self::hourAndHalf->name => "Une heure et demie", - self::twoHours->name => "Deux heures", - self::twoHoursAndHalf->name => "Deux heures et demie", - self::threeHours->name => "Trois heures", - self::twoHoursAndHalf->name => "Trois heures et demie", - self::fourHours->name => "Quatre heures", - self::fourHoursAndHalf->name => "Quatre heures et demie", - self::fiveHours->name => "Cinq heures", - self::fiveHoursAndHalf->name => "Cinq heures et demie", - self::sixHours->name => "Six heures", - self::sixHoursAndHalf->name => "Six heures et demie", - self::sevenHours->name => "Sept heures", - self::sevenHoursAndHalf->name => "Sept heures et demi", - self::eightHours->name => "Huit heures", - ]; -} diff --git a/app/Enums/Informations/InfoColorsEnum.php b/app/Enums/Informations/InfoColorsEnum.php deleted file mode 100644 index fb210f6..0000000 --- a/app/Enums/Informations/InfoColorsEnum.php +++ /dev/null @@ -1,53 +0,0 @@ -name => "primary", - self::secondary->name => "secondary", - self::success->name => "success", - self::danger->name => "danger", - self::warning->name => "warning", - self::info->name => "info", - self::light->name => "light", - self::dark->name => "dark", - ]; - - /** - * Get Class - * - * @return string - */ - public function class(): string - { - return self::CLASSES[$this->name]; - } - - /** - * Get enum classes - * - * @return array - */ - public static function toClasses(): array - { - return self::CLASSES; - } -} diff --git a/app/Enums/Invoices/InvoiceStatusEnum.php b/app/Enums/Invoices/InvoiceStatusEnum.php deleted file mode 100644 index 117fb38..0000000 --- a/app/Enums/Invoices/InvoiceStatusEnum.php +++ /dev/null @@ -1,29 +0,0 @@ -name => "Ouvert (nouveaux ou en cours)", - self::refused->name => "Refusé (par le client ou aucune réponse de sa part)", - self::canceled->name => "Annulé (supprimé)", - self::archived->name => "Archivé (validé et envoyé à la comptabilité)", - self::awaiting_signature->name => "En attente de signature", - self::awaiting_invoicing->name => "En attente de facturation", - ]; -} diff --git a/app/Enums/Invoices/TaskTypeEnum.php b/app/Enums/Invoices/TaskTypeEnum.php deleted file mode 100644 index b63cc21..0000000 --- a/app/Enums/Invoices/TaskTypeEnum.php +++ /dev/null @@ -1,57 +0,0 @@ -name => "Web", - self::seo->name => "SEO", - self::package->name => "Forfait", - self::arbitrary->name => "Libre", - ]; - - /** - * Custom added prices definition - */ - private const PRICES = [ - self::web->name => 600, - self::seo->name => 690, - // * Linked to packages table - self::package->name => 0, - // * Arbitrary number - self::arbitrary->name => 0, - ]; - - /** - * Get Price - * - * @return string - */ - public function price(): string - { - return self::PRICES[$this->name]; - } - - /** - * Get enum prices - * - * @return array - */ - public static function toPrices(): array - { - return self::PRICES; - } -} diff --git a/app/Enums/ItemsPerPaginationEnum.php b/app/Enums/ItemsPerPaginationEnum.php deleted file mode 100644 index 348f0a3..0000000 --- a/app/Enums/ItemsPerPaginationEnum.php +++ /dev/null @@ -1,16 +0,0 @@ -name => "Privé", - self::public->name => "Public", - ]; -} diff --git a/app/Enums/Tickets/TicketFileTypeEnum.php b/app/Enums/Tickets/TicketFileTypeEnum.php deleted file mode 100644 index 82dc1a6..0000000 --- a/app/Enums/Tickets/TicketFileTypeEnum.php +++ /dev/null @@ -1,70 +0,0 @@ -name => "Fichier png", - self::jpeg->name => "Fichier jpeg", - self::jpg->name => "Fichier jpg", - self::pdf->name => "Fichier pdf", - self::pptx->name => "Fichier pptx", - self::docx->name => "Fichier docx", - self::xlsx->name => "Fichier xlsx", - self::csv->name => "Fichier csv", - self::svg->name => "Fichier svg", - ]; - - /** - * Custom added mimes type definition - */ - private const MIMETYPE = [ - self::png->name => 'image/png', - self::jpeg->name => 'image/jpeg', - self::jpg->name => 'image/jpeg', - self::pdf->name => 'application/pdf', - self::pptx->name => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - self::docx->name => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - self::xlsx->name => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - self::csv->name => 'text/csv', - self::svg->name => 'image/svg+xml', - ]; - - /** - * Get Class - * - * @return string - */ - public function mimetypes(): string - { - return self::MIMETYPE[$this->name]; - } - - /** - * Get enum classes - * - * @return array - */ - public static function toMimetypes(): array - { - return self::MIMETYPE; - } -} diff --git a/app/Enums/Tickets/TicketStatusEnum.php b/app/Enums/Tickets/TicketStatusEnum.php deleted file mode 100644 index b14de01..0000000 --- a/app/Enums/Tickets/TicketStatusEnum.php +++ /dev/null @@ -1,73 +0,0 @@ -name => "Nouveau", - self::estimateTodo->name => "Étude chef(s) de projet", - self::takenInAccount->name => "À planifier", - self::waiting->name => "En attente de réponse", - self::waitingValidation->name => "En attente de validation", - self::recette->name => "En recettage", - self::recetteValidated->name => "Recettage validé", - self::production->name => "En production", - self::archived->name => "Archivé", - self::inDev->name => "En cours de développement", - ]; - - /** - * Custom added classes definition - */ - private const CLASSES = [ - self::new->name => 'text-danger', - self::estimateTodo->name => 'text-info', - self::takenInAccount->name => 'text-info', - self::waiting->name => 'text-white bg-danger', - self::waitingValidation->name => 'text-warning bg-danger', - self::recette->name => 'text-primary', - self::recetteValidated->name => 'text-success', - self::production->name => 'text-success', - self::archived->name => 'text-secondary', - self::inDev->name => 'text-discovery', - ]; - - /** - * Get Class - * - * @return string - */ - public function class(): string - { - return self::CLASSES[$this->name]; - } - - /** - * Get enum classes - * - * @return array - */ - public static function toClasses(): array - { - return self::CLASSES; - } -} diff --git a/app/Enums/Tickets/TicketTypeEnum.php b/app/Enums/Tickets/TicketTypeEnum.php deleted file mode 100644 index 7d203a1..0000000 --- a/app/Enums/Tickets/TicketTypeEnum.php +++ /dev/null @@ -1,67 +0,0 @@ -name => "Bug", - self::evolution->name => "Évolution", - self::br->name => "Demande BR", - self::newsletter->name => "Demande newsletter", - self::qrcode->name => "Demande de QR Code", - self::advice->name => "Conseil - Accompagnement", - self::complaints->name => "Réclamations consommateurs", - self::mailing->name => "Demande mail en masse", - ]; - - /** - * Custom added classes definition - */ - private const CLASSES = [ - self::bug->name => "bg-danger", - self::evolution->name => "bg-success", - self::br->name => "bg-primary", - self::newsletter->name => "bg-warning", - self::qrcode->name => "bg-secondary", - self::advice->name => "bg-info", - self::complaints->name => "bg-dark", - self::mailing->name => "bg-discovery", - ]; - - /** - * Get Class - * - * @return string - */ - public function class(): string - { - return self::CLASSES[$this->name]; - } - - /** - * Get enum classes - * - * @return array - */ - public static function toClasses(): array - { - return self::CLASSES; - } -} diff --git a/app/Enums/Users/RoleEnum.php b/app/Enums/Users/RoleEnum.php deleted file mode 100644 index 64b0f6b..0000000 --- a/app/Enums/Users/RoleEnum.php +++ /dev/null @@ -1,23 +0,0 @@ -name => "Developpeur", - self::admin->name => "Administrateur", - self::client->name => "Client", - ]; -} diff --git a/app/Events/NotifyAdmin.php b/app/Events/NotifyAdmin.php deleted file mode 100644 index 0431af2..0000000 --- a/app/Events/NotifyAdmin.php +++ /dev/null @@ -1,34 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - } -} diff --git a/app/Events/NotifySubscriptions.php b/app/Events/NotifySubscriptions.php deleted file mode 100644 index ffaf05a..0000000 --- a/app/Events/NotifySubscriptions.php +++ /dev/null @@ -1,40 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - $this->ignoreUsers = $ignoreUsers; - } -} diff --git a/app/Events/NotifyTicketCreator.php b/app/Events/NotifyTicketCreator.php deleted file mode 100644 index d5682a4..0000000 --- a/app/Events/NotifyTicketCreator.php +++ /dev/null @@ -1,34 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - } -} diff --git a/app/Events/TicketStatusChanged.php b/app/Events/TicketStatusChanged.php deleted file mode 100644 index 3f4c76a..0000000 --- a/app/Events/TicketStatusChanged.php +++ /dev/null @@ -1,62 +0,0 @@ -ticket = $ticket; - $this->status = $status; - $this->user = $user; - $this->message = $message; - $this->is_private = $is_private; - $this->status_changed = $status_changed; - } -} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php deleted file mode 100644 index 2b45543..0000000 --- a/app/Exceptions/Handler.php +++ /dev/null @@ -1,47 +0,0 @@ -, \Psr\Log\LogLevel::*> - */ - protected $levels = []; - - /** - * A list of the exception types that are not reported. - * - * @var array> - */ - protected $dontReport = []; - - /** - * A list of the inputs that are never flashed for validation exceptions. - * - * @var array - */ - protected $dontFlash = [ - 'current_password', - 'password', - 'password_confirmation', - ]; - - /** - * Register the exception handling callbacks for the application. - * - * @return void - */ - public function register() - { - $this->reportable(function (\Throwable $e) { - if (app()->bound('sentry')) { - app('sentry')->captureException($e); - } - }); - } -} diff --git a/app/Http/Controllers/Bo/Auth/ConfirmPasswordController.php b/app/Http/Controllers/Bo/Auth/ConfirmPasswordController.php deleted file mode 100644 index 13f9c51..0000000 --- a/app/Http/Controllers/Bo/Auth/ConfirmPasswordController.php +++ /dev/null @@ -1,29 +0,0 @@ -middleware('auth'); - } -} diff --git a/app/Http/Controllers/Bo/Auth/ForgotPasswordController.php b/app/Http/Controllers/Bo/Auth/ForgotPasswordController.php deleted file mode 100644 index 3f28ecf..0000000 --- a/app/Http/Controllers/Bo/Auth/ForgotPasswordController.php +++ /dev/null @@ -1,21 +0,0 @@ -middleware('guest:backend'); - } -} diff --git a/app/Http/Controllers/Bo/Auth/LoginController.php b/app/Http/Controllers/Bo/Auth/LoginController.php deleted file mode 100644 index e80dfd4..0000000 --- a/app/Http/Controllers/Bo/Auth/LoginController.php +++ /dev/null @@ -1,29 +0,0 @@ -middleware('guest:backend')->except('logout'); - } -} diff --git a/app/Http/Controllers/Bo/Auth/ResetPasswordController.php b/app/Http/Controllers/Bo/Auth/ResetPasswordController.php deleted file mode 100644 index f8c31b5..0000000 --- a/app/Http/Controllers/Bo/Auth/ResetPasswordController.php +++ /dev/null @@ -1,41 +0,0 @@ - 'required', - 'email' => 'required|email', - 'password' => [ - 'required', 'confirmed', Password::min(8) - ->mixedCase() - ->letters() - ->numbers() - ->symbols() - ->uncompromised() - ], - ]; - } -} diff --git a/app/Http/Controllers/Bo/BrandController.php b/app/Http/Controllers/Bo/BrandController.php deleted file mode 100644 index bf2d134..0000000 --- a/app/Http/Controllers/Bo/BrandController.php +++ /dev/null @@ -1,186 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $brandModels, - $search, - null, - 'name', - ); - } - $searchFields = trans('Nom'); - - /** Sort columns with a query */ - $this->sortQuery($brandModels); - - /** Custom pagination */ - $brandModels = $this->customPaginate($brandModels, $request->pagination); - - return view('bo.pages.brands.index', compact('brandModels', 'search', 'searchFields')); - } - - /** - * Show model action. - * - * @param \App\Models\Brand $brand - * @return \Illuminate\Contracts\View\View - */ - public function show(Brand $brand): \Illuminate\Contracts\View\View - { - return view('bo.pages.brands.show', ['brandModel' => $brand]); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Brand $brand - * @return \Illuminate\Contracts\View\View - */ - public function create(Brand $brand): \Illuminate\Contracts\View\View - { - $siteModels = Site::orderBy('name', 'ASC')->get(); - - return view('bo.pages.brands.create', [ - 'brandModel' => $brand, - 'siteModels' => $siteModels - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Brands\StoreBrandRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreBrandRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $brand = new Brand(); - $brand->fill($request->safe()->except('sites')); - - if ($brand->saveOrFail()) { - $brand->updateSites($brand); - return redirect() - ->route('bo.brands.edit', $brand) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Brand $brand - * @return \Illuminate\Contracts\View\View - */ - public function edit(Brand $brand): \Illuminate\Contracts\View\View - { - $siteModels = Site::orderBy('name', 'ASC')->get(); - - return view('bo.pages.brands.edit', [ - 'brandModel' => $brand, - 'siteModels' => $siteModels - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Brands\UpdateBrandRequest $request - * @param \App\Models\Brand $brand - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateBrandRequest $request, Brand $brand): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $brand) { - $brand->fill($request->safe()->except(['sites'])); - $brand->updateSites($brand); - - if ($brand->saveOrFail()) { - return redirect() - ->route('bo.brands.edit', $brand) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Brand $brand - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Brand $brand): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($brand) { - if (count($brand->accounts)) { - return redirect() - ->route('bo.brands.index') - ->with('error', __( - ':model n\'as pas pu être supprimé car elle est encore associée avec des Sites.', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } else { - $brand->deleteSites($brand); - if ($brand->deleteOrFail()) { - return redirect() - ->route('bo.brands.index') - ->with('success', __( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } - return redirect() - ->back() - ->with('error', __( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } //end if - }); - } -} diff --git a/app/Http/Controllers/Bo/BrevoController.php b/app/Http/Controllers/Bo/BrevoController.php deleted file mode 100644 index f02553c..0000000 --- a/app/Http/Controllers/Bo/BrevoController.php +++ /dev/null @@ -1,77 +0,0 @@ -firstOrFail(); - - $formContent = $request->items[0]["ExtractedMarkdownMessage"]; - - $tblRegexPatterns = [ - 'user' => '/Matricule et Nom du demandeur\s*\|\s*([^|]+?)\s*\|/i', - 'email' => '/Email du demandeur\s*\|\s*([^|]+?)\s*\|/i', - 'brand' => '/Marque\s*\/\s*Filiale\s*\|\s*([^|]+?)\s*\|/i', - 'subject' => '/Pour quels besoins avez-vous besoin d\'envoyer des emails en masse\s*\?\s*\|\s*([^|]+?)\s*\|/is', - 'date_mep' => '/Date de première envoi souhaité\s*\|\s*([^|]+?)\s*\|/i', - 'comment' => '/Commentaire\s*\|\s*([^|]+?)(?=\s*\|)/i', - ]; - - foreach ($tblRegexPatterns as $field => $regex) { - if (preg_match($regex, $formContent, $matches)) { - $data[$field] = trim($matches[1]); - } else { - return response()->json(['reason' => "Champ manquant $field"], 422); - } - } - - if ($data['date_mep']) { - $dateMep = Carbon::createFromFormat('d/m/Y', $data['date_mep'])->format('Y-m-d'); - } - - $ticket = new Ticket([ - 'site_id' => $site->id, - 'type' => TicketTypeEnum::mailing->value, - 'status' => TicketStatusEnum::new->value, - 'date_mep' => $dateMep ?? null, - 'text' => " - Bonjour,\n - Nom du demandeur : {$data['user']}, - Adresse mail : {$data['email']}, - Marque / Filiale concernée : {$data['brand']}, - Sujet : {$data['subject']}, - Date d'envoi souhaitée : {$data['date_mep']}, - Commentaire : {$data['comment']},\n - Cordialement. - ", - 'title' => "Demande de mail en masse pour {$data['brand']}", - 'is_internal' => false - ]); - - $ticket->user()->associate($site->projectManager); - $ticket->site()->associate($site); - $ticket->assignedUser()->associate($site->projectManager); - $ticket->saveOrFail(); - - if (config('mail.MAIL_ADMIN')) { - Mail::to(config('mail.MAIL_ADMIN'))->send(new NewTicket($ticket)); - } else { - throw new \ErrorException('Missing MAIL_ADMIN in .env'); - } - - return response()->json(['ok' => true]); - } -} diff --git a/app/Http/Controllers/Bo/CompanyController.php b/app/Http/Controllers/Bo/CompanyController.php deleted file mode 100644 index 54578fc..0000000 --- a/app/Http/Controllers/Bo/CompanyController.php +++ /dev/null @@ -1,166 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $companyModels, - $search, - null, - 'name' - ); - } - $searchFields = trans('Nom'); - - /** Sort columns with a query */ - $this->sortQuery($companyModels); - - /** Custom pagination */ - $companyModels = $this->customPaginate($companyModels, $request->pagination); - - return view('bo.pages.companies.index', compact('companyModels', 'search', 'searchFields')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Company $company - * @return \Illuminate\Contracts\View\View - */ - public function create(Company $company): \Illuminate\Contracts\View\View - { - return view('bo.pages.companies.create', [ - 'companyModel' => $company, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Companies\StoreCompanyRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreCompanyRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $company = new Company(); - $company->fill($request->validated()); - - if ($company->saveOrFail()) { - return redirect() - ->route('bo.companies.edit', $company) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Company $company - * @return \Illuminate\Contracts\View\View - */ - public function edit(Company $company): \Illuminate\Contracts\View\View - { - return view('bo.pages.companies.edit', [ - 'companyModel' => $company - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Companies\UpdateCompanyRequest $request - * @param \App\Models\Company $company - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateCompanyRequest $request, Company $company): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $company) { - $company->fill($request->validated()); - if ($company->saveOrFail()) { - return redirect() - ->route('bo.companies.edit', $company) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Company $company - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Company $company): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($company) { - if (count($company->invoices()->get()->toArray())) { - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_deleted_relationship', - [ - 'model' => Str::singular(trans('models.classes.companies')), - 'relationship' => trans('models.classes.invoices') - ] - )); - } - if ($company->deleteOrFail()) { - return redirect() - ->route('bo.companies.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/Credit/AccountController.php b/app/Http/Controllers/Bo/Credit/AccountController.php deleted file mode 100644 index 9cc4a21..0000000 --- a/app/Http/Controllers/Bo/Credit/AccountController.php +++ /dev/null @@ -1,107 +0,0 @@ -user(); - - if (!$user->isAdmin()) { - $brandModels = $user->brands()->pluck('id'); - } else { - $brandModels = $request->brand ?? Brand::all()->pluck('id'); - } - - /** @var \Illuminate\Database\Eloquent\Builder $credit_accountModels */ - $credit_accountModels = Account::query()->whereIn('brand_id', $brandModels); - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $credit_accountModels, - $search, - null, - 'label', - 'balance', - ); - } - $searchFields = trans('Label, solde'); - - /** Sort columns with a query */ - $this->sortQuery($credit_accountModels); - - /** Custom pagination */ - $credit_accountModels = $this->customPaginate($credit_accountModels, $request->pagination); - - return view('bo.pages.credit_accounts.index', compact( - 'credit_accountModels', - 'brandModels', - 'search', - 'searchFields' - )); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Brand $brand - * @param \App\Models\Account $account - * @return \Illuminate\Contracts\View\View - */ - public function create(Brand $brand, Account $account): \Illuminate\Contracts\View\View - { - return view('bo.pages.credit_accounts.create', [ - 'brandModel' => $brand, - 'credit_accountModel' => $account - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Models\Brand $brand - * @param \App\Http\Requests\Bo\CreditAccounts\StoreCreditAccountRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(Brand $brand, StoreCreditAccountRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($brand, $request) { - $credit_accountModel = new Account(); - $credit_accountModel->brand_id = $brand->id; - $credit_accountModel->fill($request->validated()); - - if ($credit_accountModel->saveOrFail()) { - return redirect() - ->route('bo.brands.credit_accounts.index', $brand) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.accounts'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.accounts'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/Credit/CreditLogController.php b/app/Http/Controllers/Bo/Credit/CreditLogController.php deleted file mode 100644 index ba3c9b2..0000000 --- a/app/Http/Controllers/Bo/Credit/CreditLogController.php +++ /dev/null @@ -1,108 +0,0 @@ -brand; - $credit_accountModel = $request->account; - - /** @var \Illuminate\Database\Eloquent\Builder $credit_logModels */ - $credit_logModels = CreditLog::query()->where('credit_account_id', $credit_accountModel->id); - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $credit_logModels, - $search, - null, - 'amount', - ); - } - $searchFields = trans('Montant'); - - /** Sort columns with a query */ - $this->sortQuery($credit_logModels); - - /** Custom pagination */ - $credit_logModels = $this->customPaginate($credit_logModels, $request->pagination); - - return view('bo.pages.credit_logs.index', compact( - 'credit_logModels', - 'credit_accountModel', - 'brandModel', - 'search', - 'searchFields' - )); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Brand $brand - * @param \App\Models\Account $account - * @return \Illuminate\Contracts\View\View - */ - public function create(Brand $brand, Account $account): \Illuminate\Contracts\View\View - { - return view('bo.pages.credit_logs.create', [ - 'brandModel' => $brand, - 'credit_accountModel' => $account - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Models\Brand $brand - * @param \App\Models\Account $account - * @param \App\Http\Requests\Bo\CreditLogs\StoreCreditLogRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store( - Brand $brand, - Account $account, - StoreCreditLogRequest $request - ): \Illuminate\Http\RedirectResponse { - return DB::transaction(function () use ($brand, $account, $request) { - $credit_logModel = new CreditLog(); - $credit_logModel->credit_account_id = $request->account->id; - $credit_logModel->type = BalanceOperationEnum::credit; - $credit_logModel->fill($request->validated()); - - if ($credit_logModel->saveOrFail()) { - return redirect() - ->route('bo.brands.credit_accounts.index', ['brand' => $brand, 'account' => $account]) - ->with('success', trans( - ':model a été crédité', - ['model' => Str::singular(trans('models.classes.accounts'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':model ne peut être crédité', - ['model' => Str::singular(trans('models.classes.accounts'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/Credit/EstimationController.php b/app/Http/Controllers/Bo/Credit/EstimationController.php deleted file mode 100644 index 0a77513..0000000 --- a/app/Http/Controllers/Bo/Credit/EstimationController.php +++ /dev/null @@ -1,122 +0,0 @@ -authorize('estimate', $ticket); - return view('estimations.create', \compact('ticket')); - } - - /** - * Create Ticket estimation - * - * @param \App\Http\Requests\Bo\Credit\CreateEstimateRequest $request - * @param \App\Models\Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function estimateSubmit(CreateEstimateRequest $request, Ticket $ticket) - { - return DB::transaction(function () use ($request, $ticket) { - /** @var \App\Models\User */ - $user = auth()->user(); - $estimate = new Estimation($request->validated()); - $estimate->ticket()->associate($ticket); - $estimate->estimator()->associate($user); - $ticket->status = TicketStatusEnum::waitingValidation; - $ticket->saveQuietly(); - if ($estimate->saveOrFail()) { - $message = sprintf( - '%s a modifié le statut en %s, Une estimation de %s jours à été ajoutée', - $user->name, - $ticket->status->label(), - \number_format(\floatval($request->amount), 1, ',', '') - ); - event(new TicketStatusChanged($ticket, $ticket->status, $user)); - event(new NotifySubscriptions($ticket, $message)); - event(new NotifyAdmin($ticket, $message)); - return response()->redirectToRoute('bo.ticket.show', $ticket) - ->with('info', trans('L\'estimation à bien été ajouté')); - } - return \back(); - }); - } - - /** - * Answer ticket estimation - * - * @param \App\Http\Requests\Bo\Credit\AnswerEstimateRequest $request - * @param \App\Models\Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function estimatePendingSubmit(AnswerEstimateRequest $request, Ticket $ticket) - { - /** @var \App\Models\User */ - $user = auth()->user(); - /** @var \App\Models\Credit\Estimation */ - $estimation = $ticket->estimation; - if ($request->answer) { - $ticket->status = TicketStatusEnum::takenInAccount; - $estimation->status = EstimationStatusEnum::accepted; - } else { - $ticket->status = TicketStatusEnum::archived; - $estimation->status = EstimationStatusEnum::refused; - } - $estimation->validator()->associate($user); - if ($estimation->saveOrFail() and $ticket->saveOrFail()) { - $message = sprintf( - 'Une réponse à été fourni par %s pour l\'estimation du ticket n°%d : %s', - $user->name, - $ticket->id, - $estimation->status->label() - ); - event(new NotifySubscriptions($ticket, $message)); - event(new NotifyAdmin($ticket, $message)); - return response()->redirectToRoute('bo.ticket.show', $ticket) - ->with('info', trans('Votre réponse à été enregistrée')); - } - return \back(); - } - - /** - * Handle submit and cancel an estimate on ticket - * - * @param \App\Models\Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function estimateCancelSubmit(Ticket $ticket) - { - $this->authorize('cancelEstimate', $ticket); - - /** @var \App\Models\Credit\Estimation */ - $estimation = $ticket->estimation; - $ticket->status = TicketStatusEnum::estimateTodo; - - if ($estimation->deleteOrFail() and $ticket->saveOrFail()) { - return response()->redirectToRoute('bo.ticket.show', $ticket) - ->with('info', trans('L\'estimation a été supprimée.')); - } - return \back(); - } -} diff --git a/app/Http/Controllers/Bo/InformationController.php b/app/Http/Controllers/Bo/InformationController.php deleted file mode 100644 index 70c213b..0000000 --- a/app/Http/Controllers/Bo/InformationController.php +++ /dev/null @@ -1,158 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $informationModels, - $search, - null, - 'title', - 'message' - ); - } - $searchFields = trans('Titre, message'); - - /** Sort columns with a query */ - $this->sortQuery($informationModels); - - /** Custom pagination */ - $informationModels = $this->customPaginate($informationModels, $request->pagination); - - return view('bo.pages.informations.index', compact('informationModels', 'search', 'searchFields')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Information $information - * @return \Illuminate\Contracts\View\View - */ - public function create(Information $information): \Illuminate\Contracts\View\View - { - return view('bo.pages.informations.create', [ - 'informationModel' => $information - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Informations\StoreInformationRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreInformationRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $information = new Information(); - $information->fill($request->validated()); - - if ($information->saveOrFail()) { - return redirect() - ->route('bo.informations.edit', $information) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Information $information - * @return \Illuminate\Contracts\View\View - */ - public function edit(Information $information): \Illuminate\Contracts\View\View - { - return view('bo.pages.informations.edit', [ - 'informationModel' => $information, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Informations\UpdateInformationRequest $request - * @param \App\Models\Information $information - * @return \Illuminate\Http\RedirectResponse - * @ignore phpcs:disable Generic.Files.LineLength.TooLong - */ - public function update(UpdateInformationRequest $request, Information $information): \Illuminate\Http\RedirectResponse - { - // phpcs:enable - return DB::transaction(function () use ($request, $information) { - $information->fill($request->validated()); - if ($information->saveOrFail()) { - return redirect() - ->route('bo.informations.edit', $information) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Information $information - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Information $information): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($information) { - if ($information->deleteOrFail()) { - return redirect() - ->route('bo.informations.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/InvoiceController.php b/app/Http/Controllers/Bo/InvoiceController.php deleted file mode 100644 index ded9c35..0000000 --- a/app/Http/Controllers/Bo/InvoiceController.php +++ /dev/null @@ -1,227 +0,0 @@ -query('sort_col') && !request()->query('sort_way')) - ? Invoice::query()->orderByDesc('created_at') - : Invoice::query(); - - $status = intval($request->status); - - switch ($status) { - case InvoiceStatusEnum::awaiting_signature->value: - $invoiceModels->whereNotNull('sent_client_date')->whereNull('signed_date'); - break; - case InvoiceStatusEnum::awaiting_invoicing->value: - $invoiceModels->whereNotNull('sent_client_date')->whereNotNull('signed_date')->whereNull('sent_accounting_date'); - break; - default: - if ($status !== 0) { - $invoiceModels->where('status', $status); - } - break; - } - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $invoiceModels, - $search, - null, - 'firstname', - 'lastname', - 'ref', - 'site_id', - ); - } - $searchFields = trans('Nom, Prénom, Référence, Site'); - - /** Sort columns with a query */ - $this->sortQuery($invoiceModels); - - /** Custom pagination */ - $invoiceModels = $this->customPaginate($invoiceModels, $request->pagination); - - return view('bo.pages.invoices.index', compact('invoiceModels', 'search', 'searchFields', 'status')); - } - - /** - * Show model action. - * - * @param \App\Models\Invoice $invoice - * @return \Illuminate\Contracts\View\View - */ - public function show(Invoice $invoice): \Illuminate\Contracts\View\View - { - return view('bo.pages.invoices.show', ['invoiceModel' => $invoice]); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Invoice $invoice - * @return \Illuminate\Contracts\View\View - */ - public function create(Invoice $invoice): \Illuminate\Contracts\View\View - { - $packageModels = Package::where('published', true)->get(); - $taskRowModel = Invoice::getTaskStructure(); - $siteModels = Site::orderBy('name', 'ASC')->get(); - $companyModels = Company::get(); - - return view('bo.pages.invoices.create', [ - 'invoiceModel' => $invoice, - 'taskRowModel' => $taskRowModel, - 'packageModels' => $packageModels, - 'siteModels' => $siteModels, - 'companyModels' => $companyModels, - 'invoiceStatusArray' => $invoice->getInvoiceStatusArray($invoice), - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Invoices\StoreInvoiceRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreInvoiceRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $invoice = new Invoice(); - $invoice->fill($request->validated()); - - if ($invoice->saveOrFail()) { - return redirect() - ->route('bo.invoices.edit', $invoice) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.invoices'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.invoices'))] - )); - }); - } - - /** - * Edit model action. - * - * @param Invoice $invoice - * @return \Illuminate\Contracts\View\View - */ - public function edit(Invoice $invoice): \Illuminate\Contracts\View\View - { - $packageModels = Package::get(); - $taskRowModel = Invoice::getTaskStructure(); - $siteModels = Site::orderBy('name', 'ASC')->get(); - $companyModels = Company::get(); - - return view('bo.pages.invoices.edit', [ - 'invoiceModel' => $invoice, - 'taskRowModel' => $taskRowModel, - 'packageModels' => $packageModels, - 'siteModels' => $siteModels, - 'companyModels' => $companyModels, - 'invoiceStatusArray' => $invoice->getInvoiceStatusArray($invoice), - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Invoices\UpdateInvoiceRequest $request - * @param \App\Models\Invoice $invoice - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateInvoiceRequest $request, Invoice $invoice): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $invoice) { - $invoice->fill(($invoice->status->value === InvoiceStatusEnum::opened->value) ? $request->validated() : []); - if ($invoice->saveOrFail()) { - return redirect() - ->route('bo.invoices.edit', $invoice) - ->with('success', __( - 'crud.messages.has_been_updated', - ['model' => __('models.classes.invoices')] - )); - } //end if - return redirect() - ->back() - ->with('error', __( - 'crud.messages.cannot_be_updated', - ['model' => __('models.classes.invoices')] - )); - }); - } - - /** - * Download Invoice. - * - * @param \App\Models\Invoice $invoice - * @return \Illuminate\Http\RedirectResponse|\Symfony\Component\HttpFoundation\Response - */ - public function download(Invoice $invoice) - { - if (Gate::allows('isAdmin')) { - return $invoice->generateInvoice() - ->stream(Str::slug(trans('Devis :appname :date - ref :ref', [ - 'appname' => config('app.name'), - 'date' => - $invoice->created_at !== $invoice->updated_at ? - $invoice->updated_at->isoFormat('YYYY-MM-DD') : - $invoice->created_at->isoFormat('YYYY-MM-DD'), - 'ref' => $invoice->ref, - ])) . '.pdf'); - } - return redirect()->route('bo.invoices.index') - ->with('error', __('crud.messages.cannot_be_updated', [ - 'model' => __('models.classes.invoices') - ])); - } - - /** - * Get a paginate resource. - * - * @param \Illuminate\Http\Request $request - * @return Illuminate\Http\JsonResponse - */ - public function jsonPaginate(Request $request): \Illuminate\Http\JsonResponse - { - $model = $request->targetModel; - return DB::transaction(function () use ($model) { - $models = $model::query()->orderBy('name', 'ASC')->paginate(12); - return \response()->json($models ?? 500); - }); - } -} diff --git a/app/Http/Controllers/Bo/LabelController.php b/app/Http/Controllers/Bo/LabelController.php deleted file mode 100644 index 6bd7c43..0000000 --- a/app/Http/Controllers/Bo/LabelController.php +++ /dev/null @@ -1,157 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $labelModels, - $search, - null, - 'name' - ); - } - $searchFields = trans('Nom'); - - /** Sort columns with a query */ - $this->sortQuery($labelModels); - - /** Custom pagination */ - $labelModels = $this->customPaginate($labelModels, $request->pagination); - - return view('bo.pages.labels.index', compact('labelModels', 'search', 'searchFields')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Label $label - * @return \Illuminate\Contracts\View\View - */ - public function create(Label $label): \Illuminate\Contracts\View\View - { - return view('bo.pages.labels.create', [ - 'labelModel' => $label - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Labels\StoreLabelRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreLabelRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $label = new Label(); - $label->fill($request->validated()); - - if ($label->saveOrFail()) { - return redirect() - ->route('bo.labels.edit', $label) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Label $label - * @return \Illuminate\Contracts\View\View - */ - public function edit(Label $label): \Illuminate\Contracts\View\View - { - return view('bo.pages.labels.edit', [ - 'labelModel' => $label, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Labels\UpdateLabelRequest $request - * @param \App\Models\Label $label - * @return \Illuminate\Http\RedirectResponse - * @ignore phpcs:disable Generic.Files.LineLength.TooLong - */ - public function update(UpdateLabelRequest $request, Label $label): \Illuminate\Http\RedirectResponse - { - // phpcs:enable - return DB::transaction(function () use ($request, $label) { - $label->fill($request->validated()); - if ($label->saveOrFail()) { - return redirect() - ->route('bo.labels.edit', $label) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Label $label - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Label $label): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($label) { - if ($label->deleteOrFail()) { - return redirect() - ->route('bo.labels.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/PackageController.php b/app/Http/Controllers/Bo/PackageController.php deleted file mode 100644 index df6956e..0000000 --- a/app/Http/Controllers/Bo/PackageController.php +++ /dev/null @@ -1,177 +0,0 @@ -status; - if ($status === null) { - $packageModels->where('published', true); - } elseif ($status === '0') { - $packageModels->where('published', false); - } elseif ($status === '1') { - $packageModels->where('published', true); - } - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $packageModels, - $search, - null, - 'name', - 'amount' - ); - } - $searchFields = trans('Nom, Montant'); - - /** Sort columns with a query */ - $this->sortQuery($packageModels); - - /** Custom pagination */ - $packageModels = $this->customPaginate($packageModels, $request->pagination); - - return view('bo.pages.packages.index', compact('packageModels', 'search', 'searchFields', 'status')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Package $package - * @return \Illuminate\Contracts\View\View - */ - public function create(Package $package): \Illuminate\Contracts\View\View - { - return view('bo.pages.packages.create', [ - 'packageModel' => $package, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Packages\StorePackageRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StorePackageRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $package = new Package(); - $package->fill($request->validated()); - - if ($package->saveOrFail()) { - return redirect() - ->route('bo.packages.edit', $package) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Package $package - * @return \Illuminate\Contracts\View\View - */ - public function edit(Package $package): \Illuminate\Contracts\View\View - { - return view('bo.pages.packages.edit', [ - 'packageModel' => $package, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Packages\UpdatePackageRequest $request - * @param \App\Models\Package $package - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdatePackageRequest $request, Package $package): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $package) { - $package->fill($request->validated()); - if ($package->saveOrFail()) { - return redirect() - ->route('bo.packages.edit', $package) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Package $package - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Package $package): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($package) { - if ($package->deleteOrFail()) { - return redirect() - ->route('bo.packages.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - }); - } - - /** - * Change model published. - * - * @param \App\Models\Package $package - * @return \Illuminate\Http\RedirectResponse - */ - public function changePublished(Package $package) - { - $package->update(['published' => !$package->getOriginal('published')]); - return redirect()->back()->with('success', trans(__('crud.messages.publish_status_saved'))); - } -} diff --git a/app/Http/Controllers/Bo/SiteController.php b/app/Http/Controllers/Bo/SiteController.php deleted file mode 100644 index ee3aef5..0000000 --- a/app/Http/Controllers/Bo/SiteController.php +++ /dev/null @@ -1,204 +0,0 @@ -isAdmin()) { - /** @var \Illuminate\Database\Eloquent\Builder $siteModels */ - $siteModels = Site::query()->with(['invoices', 'tickets']); - } else { - /** @var \Illuminate\Database\Eloquent\Builder $siteModels */ - $siteModels = Site::whereHas('users', function (\Illuminate\Database\Eloquent\Builder $query) use ($user) { - $query->where('id', $user->id)->with(['invoices', 'tickets']); - }); - } - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $siteModels, - $search, - null, - 'name', - ); - } - $searchFields = trans('Nom'); - - /** Sort columns with a query */ - $this->sortQuery($siteModels); - - /** Custom pagination */ - $siteModels = $this->customPaginate($siteModels, $request->pagination); - - return view('bo.pages.sites.index', compact('siteModels', 'search', 'searchFields')); - } - - /** - * Show model action. - * - * @param \App\Models\Site $site - * @return \Illuminate\Contracts\View\View - */ - public function show(Site $site): \Illuminate\Contracts\View\View - { - return view('bo.pages.sites.show', ['siteModel' => $site]); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Site $site - * @return \Illuminate\Contracts\View\View - */ - public function create(Site $site): \Illuminate\Contracts\View\View - { - $userModels = User::orderBy('name', 'ASC')->get(); - - return view('bo.pages.sites.create', [ - 'siteModel' => $site, - 'userModels' => $userModels - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Sites\StoreSiteRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreSiteRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $site = new Site(); - $site->fill($request->validated()); - if ($site->saveOrFail()) { - $site->users()->attach(collect($request->validated('users'))->pluck('id')); - return redirect() - ->route('bo.sites.edit', $site) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Site $site - * @return \Illuminate\Contracts\View\View - */ - public function edit(Site $site): \Illuminate\Contracts\View\View - { - $userModels = User::orderBy('name', 'ASC')->get(); - - return view('bo.pages.sites.edit', [ - 'siteModel' => $site, - 'userModels' => $userModels - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Sites\UpdateSiteRequest $request - * @param \App\Models\Site $site - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateSiteRequest $request, Site $site): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $site) { - $site->fill($request->validated()); - $site->users()->sync(collect($request->validated('users'))->pluck('id')); - if ($site->saveOrFail()) { - return redirect() - ->route('bo.sites.edit', $site) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Site $site - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Site $site): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($site) { - if ($site->deleteOrFail()) { - $site->users()->detach(); - return redirect() - ->route('bo.sites.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - }); - } - - /** - * Get a paginate resource. - * - * @param \Illuminate\Http\Request $request - * @return Illuminate\Http\JsonResponse - */ - public function jsonPaginate(Request $request): \Illuminate\Http\JsonResponse - { - return DB::transaction(function () use ($request) { - $model = $request->targetModel; - $search = $request->search; - $models = $model::where("name", "LIKE", "%{$search}%")->orderBy("name", "ASC"); - - return ToolboxHelper::jsonPaginate($this->customPaginate($models, $request->pagination)); - }); - } -} diff --git a/app/Http/Controllers/Bo/TicketController.php b/app/Http/Controllers/Bo/TicketController.php deleted file mode 100644 index 001889b..0000000 --- a/app/Http/Controllers/Bo/TicketController.php +++ /dev/null @@ -1,923 +0,0 @@ -authorizeResource(Ticket::class, 'ticket'); - } - - /** - * Tickets List - * - * @param SortTickets $request - * @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory - */ - public function index(SortTickets $request) - { - // * Handle Ajax - if ($request->ajax()) { - $tickets = Ticket::with(['user', 'assignedUser']); - if ($request->s) { - $tickets = $tickets->where('text', 'LIKE', "%$request->s%") - ->orWhere('id', $request->s) - ->orWhereHas('user', function ($q) use ($request) { - $q->where('name', 'LIKE', "%$request->s%"); - }); - } - /** @var \Illuminate/Pagination/LengthAwarePaginator $tickets */ - $tickets = $tickets->paginate(); - return \response()->json($tickets->getCollection()->map(function (Ticket $ticket) { - return [ - 'label' => sprintf( - 'Ticket %d (%s): %s', - $ticket->id, - $ticket->user ? $ticket->user->name : trans('Utilisateur supprimé'), - Str::limit(\preg_replace('/[[:cntrl:]]+/', '', $ticket->text), 35) - ), - 'value' => $ticket->id - ]; - })); - } //end if - - /** @var \App\Models\User */ - $user = auth()->user(); - $tickets = Ticket::with(['site', 'labels']); - if (!$user->isAdmin()) { - $tickets->whereHas('site', function ($q) use ($user) { - $q->whereHas('users', function ($q) use ($user) { - $q->whereId($user->id); - }); - }); - $tickets->where('is_internal', false); - } else { - $tickets->has('site'); - } - - $tickets->where( - 'status', - ($request->st == TicketStatusEnum::archived->value) ? '=' : '<>', - TicketStatusEnum::archived - ); - - if (!$user->isAdmin() && $user->sites->count() === 1) { - $request->merge([ - 'pr' => $user->sites->first()->id, - ]); - } - - $tickets = $this->filterTickets($tickets, $request); - $tickets = $this->searchTicket($tickets, $request); - - /** Sort columns with a query */ - $this->sortQuery($tickets); - - /** Custom pagination */ - $tickets = $this->customPaginate($tickets, $request->pagination); - - $sites = Site::select('id', 'name')->orderBy('name')->get(); - $status = Arr::sort(TicketStatusEnum::cases(), function (TicketStatusEnum $value) { - return $value->label(); - }); - $types = Arr::sort(TicketTypeEnum::cases(), function (TicketTypeEnum $value) { - return $value->label(); - }); - - return view('bo.pages.tickets.index', compact('tickets', 'sites', 'status', 'types')); - } - - /** - * Show Ticket - * - * @param Request $request - * @param Ticket $ticket - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory - */ - public function show(Request $request, Ticket $ticket) - { - if ($request->ajax()) { - return \response()->json([ - 'label' => $ticket->formatName($ticket), - 'value' => $ticket->id - ]); - } - - /** @var \App\Models\User */ - $user = auth()->user(); - - if (!$user->can('update', $ticket)) { - abort(403); - } - - if ($ticket->is_internal && !$user->can('changeInternalStatus', $ticket)) { - abort(403); - } - - $messages = $ticket->messages()->orderBy('created_at', 'DESC')->get(); - $isSubscribed = (bool)$ticket->subscriptions()->where('user_id', $user->id)->count(); - return view('bo.pages.tickets.show', [ - 'ticket' => $ticket, - 'messages' => $messages, - 'isSubscribed' => $isSubscribed - ]); - } - - /** - * Show create Form - * - * @return \Illuminate\Http\RedirectResponse - */ - public function create() - { - /** @var \App\Models\User */ - $user = auth()->user(); - if ($user->isAdmin()) { - $sites = Site::orderBy('name')->get(); - } else { - $sites = $user->sites; - } - - if (!count($sites)) { - return redirect()->route('bo.sites.create') - ->with('warning', trans('Vous devez tout d\'abord créer un site pour y ajouter un ticket')); - } - return view('bo.pages.tickets.create', compact('sites')); - } - - /** - * Create ticket - * - * @param StoreTicket $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreTicket $request) - { - try { - return DB::transaction(function () use ($request) { - /** @var \App\Models\Site */ - $site = Site::findOrFail($request->site_id); - - /** @var \App\Models\User */ - $user = auth()->user(); - - $ticket = new Ticket($request->validated()); - - /** @var array<\Illuminate\Http\UploadedFile> */ - $fileTickets = $request->file_tickets ?? []; - if (count($fileTickets) > 0) { - foreach ($fileTickets as $key => $file) { - if ($key === 0) { - $ticket->file = FileStorageHelper::storeFile($ticket, $file); - } else { - $fileNumber = 'file' . $key + 1; - $ticket->$fileNumber = FileStorageHelper::storeFile($ticket, $file); - } - } - } - - $ticket->user()->associate(auth()->user()); - $ticket->site()->associate($site); - $ticket->saveOrFail(); - - if ($request->labels) { - $ticket->labels()->sync($request->labels); - } - - $user->subscriptions()->toggle($ticket->id); - - if (config('mail.MAIL_ADMIN')) { - Mail::to(config('mail.MAIL_ADMIN'))->send(new NewTicket($ticket)); - } else { - throw new \ErrorException('Missing MAIL_ADMIN in .env'); - } - - return redirect()->route('bo.ticket.show', $ticket) - ->with('success', trans('Ticket enregistré !')); - }); - } catch (\ErrorException $e) { - report($e); - Session::flash('error', trans('Une erreur est survenue')); - } //end try - - return \back(); - } - - /** - * Show update form - * - * @param Ticket $ticket - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - */ - public function edit(Ticket $ticket) - { - /** @var \App\Models\User */ - $user = auth()->user(); - if ($user->isAdmin()) { - $sites = Site::orderBy('name')->get(); - } else { - $sites = $user->sites; - } - return view('bo.pages.tickets.edit', compact('ticket', 'sites')); - } - - /** - * Update Model - * - * @param UpdateTicket $request - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateTicket $request, Ticket $ticket) - { - $ticket->fill($request->validated()); - - try { - return DB::transaction(function () use ($request, $ticket) { - /** @var \App\Models\Site */ - $site = Site::findOrFail($request->site_id); - - /** @var null|array<\Illuminate\Http\UploadedFile> */ - $fileTickets = $request->file_tickets; - if (isset($fileTickets) && count($fileTickets) > 0) { - foreach ($fileTickets as $key => $file) { - if ($key === 0) { - $ticket->file = FileStorageHelper::storeFile($ticket, $file); - } else { - $fileNumber = 'file' . $key + 1; - $ticket->$fileNumber = FileStorageHelper::storeFile($ticket, $file); - } - } - } - - $ticket->labels()->sync($request->labels); - - $ticket->site()->associate($site); - $ticket->saveOrFail(); - - return redirect()->route('bo.ticket.edit', $ticket->id) - ->with('success', 'Modifications enregistrées !'); - }); - } catch (\ErrorException $e) { - report($e); - Session::flash('error', trans('Une erreur est survenue')); - } //end try - - return \back(); - } - - /** - * Change ticket Status - * - * @param ChangeTicketStatus $request - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function changeStatus(ChangeTicketStatus $request, Ticket $ticket) - { - if ($ticket->gitlab_issue) { - \dispatch(new UpdateIssueLabels($ticket, $request->status)); - } - - $ticket->fill($request->validated()); - $ticket->saveOrFail(); - - return back() - ->with('warning', trans('Le status à été modifié')); - } - - /** - * Add a new Message to the Ticket - * - * @param CreateMessage $request - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function createMessage(CreateMessage $request, Ticket $ticket) - { - try { - return DB::transaction(function () use ($request, $ticket) { - /** @var \Illuminate\Http\UploadedFile|null */ - $filesMessage = $request->file_messages; - $message = new Message($request->validated()); - $message->user()->associate(auth()->user()); - $message->ticket()->associate($ticket); - - /** @var \App\Models\User */ - $user = auth()->user(); - // Subscribe to ticket. - if ($request->subscribe) { - $user->subscriptions()->syncWithoutDetaching([$ticket->id]); - } else { - $user->subscriptions()->detach($ticket->id); - } - - // Store files if any. - if (isset($filesMessage) and $filesMessage) { - foreach ($filesMessage as $key => $singleFile) { - if ($key === 0) { - $message->file = FileStorageHelper::storeFile($message, $singleFile); - $message->saveOrFail(); - } else { - $fileNumber = 'file' . $key + 1; - $message->$fileNumber = FileStorageHelper::storeFile($message, $singleFile); - $message->saveOrFail(); - } - } - } - - $message->saveOrFail(); - - return back() - ->with('success', trans('Votre message à été ajouté')); - }, 5); - } catch (\ErrorException $e) { - report($e); - Session::flash('error', trans('Une erreur est survenue')); - } //end try - - return back(); - } - - /** - * Update Message - * - * @param UpdateMessage $request - * @param Ticket $ticket - * @param Message $message - * @return \Illuminate\Http\RedirectResponse - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed - */ - public function updateMessage(UpdateMessage $request, Ticket $ticket, Message $message) - { - $message->message = $request->message; - $message->saveOrFail(); - - return back() - ->with('success', trans('Votre message à bien été modifié')); - } - - /** - * Change ticket status to archived - * - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function setToArchive(Ticket $ticket) - { - $ticket->status = TicketStatusEnum::archived; - $ticket->saveOrFail(); - return redirect()->route('bo.ticket.index') - ->with('warning', trans('Le ticket est archivé')); - } - - /** - * Subscribe to ticket - * - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function subscribe(Ticket $ticket) - { - /** @var \App\Models\User */ - $user = auth()->user(); - $user->subscriptions()->toggle($ticket->id); - if ($user->subscriptions()->where('ticket_id', $ticket->id)->exists()) { - return back() - ->with('success', trans('Vous avez été inscrit')); - } - return back()->with('warning', trans('Vous avez été désinscrit')); - } - - /** - * Reopen ticket - * - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function reopen(Ticket $ticket) - { - $message = trans(':ticketName à réouvert le ticket n°:ticketNumber', [ - 'ticketName' => $ticket->user->name, - 'ticketNumber' => $ticket->id, - ]); - /** @var \App\Enums\Tickets\TicketStatusEnum */ - $oldStatus = $ticket->status; - $ticket->status = TicketStatusEnum::new; - $ticket->saveQuietly(); - event(new TicketStatusChanged($ticket, $oldStatus, null, $message, false, false)); - event(new NotifySubscriptions($ticket, $message, collect([$ticket->user]))); - - /** @var \App\Models\User */ - $user = auth()->user(); - $user->subscriptions()->toggle($ticket->id); - - return back()->with('warning', trans('Votre ticket à été réouvert.')); - } - - /** - * Assign ticket to user ticket - * - * @param AssignTicketToUserRequest $request - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function assignTo(AssignTicketToUserRequest $request, Ticket $ticket) - { - /** @var \App\Models\User */ - $user = auth()->user(); - - /** @var \App\Models\User|null */ - if ($assignedUser = User::whereId($request->assign)->first()) { - $message = trans(':admin a assigné le ticket n°:ticketNumber à :assignedAdmin', [ - 'admin' => $user->name, - 'ticketNumber' => $ticket->id, - 'assignedAdmin' => $assignedUser->name, - ]); - $ticket->assignedUser()->associate($assignedUser); - } else { - $message = trans( - ':admin a modifié l\'assignation du ticket n°:ticketNumber, il n\'est plus assigné à quelqu\'un.', - [ - 'admin' => $user->name, - 'ticketNumber' => $ticket->id, - ] - ); - $ticket->assignedUser()->dissociate(); - } - $ticket->saveQuietly(); - - - /** @var \App\Enums\Tickets\TicketStatusEnum */ - $oldStatus = $ticket->status; - // * Notification systeme doit etre privée. - event(new TicketStatusChanged($ticket, $oldStatus, null, $message, true, false)); - event(new NotifySubscriptions($ticket, $message, collect([$ticket->user]))); - - /** @var \App\Models\User */ - $user = auth()->user(); - $user->subscriptions()->toggle($ticket->id); - - if ($assignedUser) { - return back()->with('info', trans('Le ticket à été assigné à :assignedUser', [ - 'assignedUser' => $assignedUser->name - ])); - } - return back()->with('info', trans('Le ticket n\'est plus assigné à personne')); - } - - - /** - * Link two tickets. - * - * @param LinkTicket $request - * @param Ticket $ticket - * - * @return \Illuminate\Http\RedirectResponse - */ - public function linkTicket(LinkTicket $request, Ticket $ticket) - { - $linkedTicket = Ticket::findOrFail($request->validated())->first(); - - if ($ticket->site_id !== $linkedTicket->site_id) { - return back()->with('error', trans('Le ticket que vous avez renseigné ne fait pas partie du même site.')); - } - - if (!$ticket->linkedTickets()->where('linked_ticket_id', $linkedTicket->id)->exists()) { - $ticket->linkedTickets()->attach($linkedTicket->id); - $linkedTicket->linkedTickets()->attach($ticket->id); - return back()->with('success', trans('Les tickets ont été liés avec succès.')); - } - - return back()->with('error', trans('Les tickets sont déjà liés ensemble.')); - } - - /** - * Unlink two tickets. - * - * @param Ticket $ticket - * @param Ticket $linkedTicket - * - * @return \Illuminate\Http\RedirectResponse - */ - public function unlinkTicket(Ticket $ticket, Ticket $linkedTicket) - { - $ticket->linkedTickets()->detach($linkedTicket->id); - $linkedTicket->linkedTickets()->detach($ticket->id); - - return back()->with('warning', trans('Le lien entre les tickets à été supprimé.')); - } - - // * PRIVATES - - /** - * Filter Tickets request constructor - * - * @param Builder $tickets - * @param Request $request - * @return Builder - * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh - */ - private function filterTickets(Builder $tickets, Request $request): Builder - { - //phpcs:enable - if ($request->rst) { - Session::remove('tickets.ass'); - Session::remove('tickets.st'); - Session::remove('tickets.pr'); - Session::remove('tickets.ty'); - Session::remove('tickets.sort_col'); - Session::remove('tickets.sort_way'); - Session::remove('tickets.or'); - Session::remove('tickets.search'); - } - if ($request->assr) { - Session::remove('tickets.ass'); - } - if ($request->prs) { - Session::remove('tickets.pr'); - } - if ($request->sts) { - Session::remove('tickets.st'); - } - if ($request->tys) { - Session::remove('tickets.ty'); - } - if ($request->sort_col) { - Session::put('tickets.sort_col', $request->sort_col); - } - if ($request->sort_way) { - Session::put('tickets.sort_way', $request->sort_way); - } - if ($request->ord) { - Session::remove('tickets.or'); - } - if ($request->pr) { - Session::put('tickets.pr', $request->pr); - } - if ($request->st) { - Session::put('tickets.st', $request->st); - } - if ($request->ty) { - Session::put('tickets.ty', $request->ty); - } - if ($request->ass) { - Session::put('tickets.ass', $request->ass); - } - if (Session::has('tickets.or')) { - Session::remove('tickets.ass'); - Session::remove('tickets.st'); - Session::remove('tickets.ty'); - Session::remove('tickets.sort_col'); - Session::remove('tickets.sort_way'); - Session::remove('tickets.search'); - } - - if ($request->or && Session::has('tickets.pr')) { - Session::put('tickets.or', $request->or); - } - - Session::save(); - - if (Session::has('tickets.pr')) { - $tickets->where('site_id', Session::get('tickets.pr')); - } - - if (Session::has('tickets.ass')) { - $tickets->whereHas('assignedUser', function ($q) { - $q->whereId(Session::get('tickets.ass')); - }); - } - - if (Session::has('tickets.st')) { - $tickets->where('status', Session::get('tickets.st')); - } - - if (Session::has('tickets.ty')) { - $tickets->where('type', Session::get('tickets.ty')); - } - - if (Session::has('tickets.or')) { - $tickets->orderBy('order', 'ASC'); - } - - if ( - Session::has('tickets.sort_col') and - Session::has('tickets.sort_way') and - in_array(Session::get('tickets.sort_col'), [ - 'type', - 'title', - 'assigned_to', - 'date_mep', - 'created_at', - 'created_by' - ]) - ) { - $tickets->orderBy( - Session::get('tickets.sort_col'), - Session::get('tickets.sort_way') - ); - } else { - $tickets->orderBy('last_activity', 'DESC'); - } - - return $tickets; - } - - /** - * Search ticket sql request constructor - * - * @param Builder $tickets - * @param Request $request - * @return Builder - */ - private function searchTicket(Builder $tickets, Request $request): Builder - { - if ($request->exists('search')) { - if (empty($request->search)) { - Session::remove('tickets.search'); - } else { - Session::put('tickets.search', $request->search); - } - } - - if (!Session::has('tickets.search')) { - return $tickets; - } - - return $this->searchQuery($tickets, Session::get('tickets.search'), function ($q) { - $words = explode(' ', Session::get('tickets.search')); - if (\is_array($words)) { - foreach ($words as $word) { - if (!strlen($word)) { - continue; - } - $s = collect(TicketStatusEnum::cases())->filter(function (TicketStatusEnum $t) use ($word) { - return Str::slug($t->label()) === Str::slug($word); - })->map(function (TicketStatusEnum $ticket) { - return $ticket->value; - }); - $t = collect(TicketTypeEnum::cases())->filter(function (TicketTypeEnum $s) use ($word) { - return Str::slug($s->label()) === Str::slug($word); - })->map(function (TicketTypeEnum $ticket) { - return $ticket->value; - }); - $q->orWhere('id', $word) - ->orWhereIn('status', $s) - ->orWhereIn('type', $t) - ->orWhereHas('user', function ($q) use ($word) { - $q->where('name', 'LIKE', "%$word%"); - }); - } //end foreach - } //end if - }, 'text', 'title', 'file', 'file2', 'file3', 'file4', 'file5'); - } - - /** - * Get a paginate resource. - * - * @param \Illuminate\Http\Request $request - * @return Illuminate\Http\JsonResponse - */ - public function jsonPaginate(Request $request): \Illuminate\Http\JsonResponse - { - return DB::transaction(function () use ($request) { - $model = $request->targetModel; - $search = $request->search; - - // * Handle Ajax - $tickets = $model::with(['user', 'assignedUser']); - if ($search) { - $tickets = $tickets->where('text', 'LIKE', "%$search%") - ->orWhere('id', $search) - ->orWhereHas('user', function ($q) use ($search) { - $q->where('name', 'LIKE', "%$search%"); - }) - ->orderBy("id", "ASC"); - } - - return ToolboxHelper::jsonPaginate( - $this->customPaginate($tickets, $request->pagination), - 'formatName' - ); - }); - } - - /** - * Create a gitlab issue from a ticket. - * - * @param \App\Models\Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function createGitlabIssue(Ticket $ticket) - { - $userGitlabId = auth()->user()->gitlab_id; - $gitlabRepoId = $ticket->site->gitlab_project_id; - $description = \sprintf("%s
", $ticket->text); - $cLabel = match ($ticket->type) { - TicketTypeEnum::bug => 'c-bug,to-dispatch', - TicketTypeEnum::evolution => 'c-feature', - TicketTypeEnum::newsletter => 'c-feature,g-to-estimate', - }; - - $assigneeId = match ($ticket->type) { - TicketTypeEnum::bug => $userGitlabId, - TicketTypeEnum::evolution, - TicketTypeEnum::newsletter => $ticket->site->projectManager?->gitlab_id - }; - - try { - foreach ($ticket->getFiles() as $key => $file) { - if (!\is_null($file)) { - $uploadedFile = GitLab::projects()->uploadFile($gitlabRepoId, $file); - $description .= $this->formatGitlabFiles($ticket, $uploadedFile, $key + 1); - } - } - - $data = [ - 'title' => sprintf( - 'ts-%s : %s', - $ticket->id, - $ticket->title - ), - 'description' => $description, - 'labels' => \implode(",", [ - 'c-support', - $cLabel - ]), - ]; - - if ($assigneeId) { - $data['assignee_id'] = $assigneeId; - } - - $issue = GitLab::issues()->create($gitlabRepoId, $data); - } catch (\Exception $e) { - \report($e); - return back()->with('error', \trans("Une erreur est survenue")); - } catch (\Throwable $e) { - \report($e); - return back()->with('error', \trans("Une erreur est survenue")); - } //end try - - $ticket->gitlab_issue = $issue['web_url']; - $ticket->save(); - - return back()->with( - 'success', - trans("L'issue a été créée sur Gitlab.") - ); - } - - /** - * Format files for Gitlab issues - * - * @param \App\Models\Ticket $ticket - * @param array $uploadedFile - * @param integer $fileNb - * @return string - */ - private function formatGitlabFiles(Ticket $ticket, array $uploadedFile, int $fileNb) - { - if (Str::endsWith($ticket->file, ['jpg', 'png', 'jpeg', 'pptx', 'docx', 'xslx', 'csv', 'svg'])) { - $file = \sprintf( - "![Fichier joint %d](%s)", - $fileNb, - $uploadedFile['url'] - ); - } else { - $file = \sprintf( - '%s', - $uploadedFile['url'], - __('Lien vers le fichier'), - ); - } - return \sprintf("

Fichier %d :
%s
", $fileNb, $file); - } - - /** - * Change order. - * - * @param \App\Http\Requests\Bo\UpdateChangeOrderRequest $request - * @param mixed ...$params - * @return \Illuminate\Http\RedirectResponse - * @throws \RuntimeException Si le nom du parametre de la route ne correspond pas au params utilisé. - */ - public function changeOrder(UpdateChangeOrderRequest $request, mixed ...$params): \Illuminate\Http\RedirectResponse - { - $paramNames = collect(request()->route()->parameterNames); - $className = Str::of($paramNames->get($paramNames->count() - 2))->lower()->studly(); - $className = "\\App\\Models\\{$className}"; - $model = Arr::get($params, $paramNames->count() - 2); - - if (!class_exists($className)) { - throw new \RuntimeException("The {$className} class doesn't exist."); - } - - if (!\is_object($model)) { - throw new \RuntimeException("The second last param isn't an object."); - } - - if (get_class($model) !== (string)Str::of($className)->replaceStart('\\', '')) { - throw new \RuntimeException("The {$className} doesn't match second last binded param."); - } - - /** @var \Illuminate\Database\Eloquent\Model|null */ - $model = $className::query()->where($model->getRouteKeyName(), $model->getRouteKey())->first(); - - if (!$model) { - return back()->with('error', trans('crud.messages.order_not_changed')); - } - - return DB::transaction(function () use ($request, $className, $model) { - /** @var \Illuminate\Support\Collection $models */ - $models = $className::query() - ->orderBy('order', 'ASC') - ->where('site_id', $model->site_id) - ->where('status', '!=', TicketStatusEnum::archived) - ->where('id', '!=', $model->getKey()) - ->where('order', $request->direction ? '<' : '>', $model->order) - ->get(); - /** @var \Illuminate\Database\Eloquent\Model|null $tmp */ - $tmp = $request->direction ? $models->last() : $models->first(); - - if (!$tmp) { - return back()->with('error', trans('crud.messages.order_not_changed')); - } - - $newOrder = $tmp->getOriginal('order'); - $tmp->update(['order' => $model->getOriginal('order')]); - $model->update(['order' => $newOrder]); - - return redirect()->back()->with('success', trans('crud.messages.order_changed')); - }); - } - - /** - * Update ticket priority. - * - * @param UpdateTicketPriorityRequest $request - * @param Ticket $ticket - * @return void - */ - public function changePriority(UpdateTicketPriorityRequest $request, Ticket $ticket) - { - $newPriority = $request->validated('priority'); - - return DB::transaction(function () use ($ticket, $newPriority) { - // Update all tickets who will be moved with this priority update. - $request = Ticket::query() - ->where('site_id', $ticket->site_id) - ->whereNot('status', TicketStatusEnum::archived) - ->whereNot('id', $ticket->id) - ->whereBetween('order', [min($ticket->order, $newPriority), max($ticket->order, $newPriority)]); - $ticket->order < $newPriority ? $request->decrement('order', 1) : $request->increment('order', 1); - - // Update the ticket. - $ticket->order = $newPriority; - if (!$ticket->saveOrFail()) { - return back()->with('error', trans('crud.messages.order_not_changed')); - }; - - return redirect()->back()->with('success', trans('crud.messages.order_changed')); - }); - } -} diff --git a/app/Http/Controllers/Bo/TicketTypeController.php b/app/Http/Controllers/Bo/TicketTypeController.php deleted file mode 100644 index 9722789..0000000 --- a/app/Http/Controllers/Bo/TicketTypeController.php +++ /dev/null @@ -1,81 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $ticketTypeModels, - $search, - null, - 'type', - ); - } - $searchFields = trans('Type'); - - /** Sort columns with a query */ - $this->sortQuery($ticketTypeModels); - - /** Custom pagination */ - $ticketTypeModels = $this->customPaginate($ticketTypeModels, $request->pagination); - - return view('bo.pages.ticket_types.index', compact('ticketTypeModels', 'search', 'searchFields')); - } - - /** - * Show the form for editing the specified resource. - * - * @param App\Models\Ticket\TicketType $ticketType - * @return \Illuminate\Contracts\View\View - * @ignore phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - */ - public function edit(TicketType $ticketType): \Illuminate\Contracts\View\View - { - return view('bo.pages.ticket_types.edit', ['ticketTypeModel' => $ticketType]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\TicketTypes\UpdateTicketTypeRequest $request - * @param \App\Models\Ticket\TicketType $ticketType - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateTicketTypeRequest $request, TicketType $ticketType): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $ticketType) { - $ticketType->fill($request->validated()); - - if ($ticketType->saveOrFail()) { - return redirect()->route('bo.ticket_types.edit', $ticketType->id) - ->with('success', __('crud.messages.has_been_updated', [ - 'model' => trans_choice('models.classes.ticket_types', 1) - ])); - } - return redirect()->route('bo.ticket_types.edit', $ticketType->id) - ->with('error', __('crud.messages.cannot_be_updated', [ - 'model' => trans_choice('models.classes.ticket_types', 1) - ])); - }); - } -} diff --git a/app/Http/Controllers/Bo/UserController.php b/app/Http/Controllers/Bo/UserController.php deleted file mode 100644 index b678ee2..0000000 --- a/app/Http/Controllers/Bo/UserController.php +++ /dev/null @@ -1,231 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $userModels, - $search, - null, - 'name', - 'email' - ); - } - $searchFields = trans('Label, email'); - - /** Sort columns with a query */ - $this->sortQuery($userModels); - - /** Custom pagination */ - $userModels = $this->customPaginate($userModels, $request->pagination); - - return view('bo.pages.users.index', compact('userModels', 'search', 'searchFields')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\User $user - * @return \Illuminate\Contracts\View\View - */ - public function create(User $user): \Illuminate\Contracts\View\View - { - $siteModels = Site::orderBy('name', 'ASC')->get(); - - return view('bo.pages.users.create', [ - 'userModel' => $user, - 'siteModels' => $siteModels - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Users\StoreUserRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreUserRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $user = new User(); - $user->fill($request->safe()->except('sites')); - - if ($user->saveOrFail()) { - $user->sites()->attach(collect($request->validated('sites'))->pluck('id')); - return redirect() - ->route('bo.users.edit', $user) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.users'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.users'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\User $user - * @return \Illuminate\Contracts\View\View - */ - public function edit(User $user): \Illuminate\Contracts\View\View - { - $siteModels = Site::orderBy('name', 'ASC')->get(); - - return view('bo.pages.users.edit', [ - 'userModel' => $user, - 'siteModels' => $siteModels - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Users\UpdateUserRequest $request - * @param \App\Models\User $user - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateUserRequest $request, User $user): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $user) { - $user->fill($request->safe()->except(['sites'])); - $user->sites()->sync(collect($request->validated('sites'))->pluck('id')); - if ($user->saveOrFail()) { - return redirect() - ->route('bo.users.edit', $user) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.users'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.users'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\User $user - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(User $user): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($user) { - if ($user->deleteOrFail()) { - $user->sites()->detach(); - return redirect() - ->route('bo.users.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.users'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.users'))] - )); - }); - } - - /** - * Password reset form - * - * @return \Illuminate\Contracts\View\View - */ - public function settings(): \Illuminate\Contracts\View\View - { - return view('bo.pages.users.settings'); - } - - /** - * Favourite site submit - * - * @param \App\Http\Requests\Bo\Users\FavouriteSiteRequest $request - * - * @return \Illuminate\Http\RedirectResponse - */ - public function favouriteSiteSubmit(FavouriteSiteRequest $request): \Illuminate\Http\RedirectResponse - { - /** @var \App\Models\User */ - $user = auth()->user(); - - try { - $user->favourite_site_id = $request->favourite_site_id; - $user->saveOrFail(); - - return redirect()->back()->with("success", trans('crud.messages.favourite_site_changed')); - } catch (\Exception $e) { - \report($e); - return redirect()->back()->with('error', trans('crud.messages.favourite_site_not_changed')); - } catch (\Throwable $e) { - \report($e); - return redirect()->back()->with('error', trans('crud.messages.favourite_site_not_changed')); - } - } - - /** - * Password reset submit - * - * @return \Illuminate\Http\RedirectResponse - */ - public function passwordResetSubmit(): \Illuminate\Http\RedirectResponse - { - /** @var \App\Models\User */ - $user = auth()->user(); - $request = new Request(['email' => $user->email]); - return app(ForgotPasswordController::class)->sendResetLinkEmail($request); - } - - /** - * Get february last day date of the year - * - * @param integer $year - * @return integer 28 or 29 - */ - private function getLastDayFebruary(int $year): int - { - if ((is_int($year / 4) && !is_int($year / 100)) || is_int($year / 400)) { - return 29; - } - return 28; - } -} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php deleted file mode 100644 index 75b55bd..0000000 --- a/app/Http/Controllers/Controller.php +++ /dev/null @@ -1,247 +0,0 @@ -middleware(function ($request, $next) { - $ignore = [ - // * Support Web - 9, - // * Gen-Game- Web - 15, - // * Store LDC - 19, - // * CRM - 27, - // * LDC - WEB - 55, - ]; - - $ticketsNew = Ticket::where('status', TicketStatusEnum::new); - $ticketsWaiting = Ticket::where('status', TicketStatusEnum::waiting); - $ticketsInProgress = Ticket::whereNotIn( - 'status', - [ - TicketStatusEnum::new, - TicketStatusEnum::estimateTodo, - TicketStatusEnum::waiting, - TicketStatusEnum::production, - TicketStatusEnum::archived, - TicketStatusEnum::takenInAccount - ] - ); - - /** @var \App\Models\User|null */ - $user = Auth::user(); - if (!is_null($user) and !$user->isAdmin()) { - $ticketsNew = $ticketsNew->where('is_internal', false)->whereNotIn('site_id', $ignore); - $ticketsWaiting = $ticketsWaiting->where('is_internal', false)->whereNotIn('site_id', $ignore); - $ticketsInProgress = $ticketsInProgress->where('is_internal', false)->whereNotIn('site_id', $ignore); - } - - View::share('ticketsNew', $ticketsNew->count()); - View::share('ticketsWaiting', $ticketsWaiting->count()); - View::share('ticketsInProgress', $ticketsInProgress->count()); - - return $next($request); - }); - } - - /** - * Build Search query on specified fields - * splitting search into words or using whole sentence - * - * @param \Illuminate\Database\Eloquent\Builder $query The eloquent query builder. - * @param string $search The query string. - * @param callable $searchQuery The query string. - * @param string ...$fields Either a simple array or a string - * in case of a string the two fields - * would be concatenate to make the search. - * @return \Illuminate\Database\Eloquent\Builder - */ - protected function searchQuery( - Builder $query, - string $search, - callable $searchQuery = null, - string ...$fields - ): Builder { - if (count($fields)) { - // Search using words. - $words = explode(' ', $search); - $query->where(function ($query) use ($searchQuery, $words, $search, $fields) { - foreach ($words as $word) { - if (!strlen($word)) { - continue; - } - $this->searchOnFields($query, $word, $fields); - } //end foreach - // Search whole using whole sentence. - $this->searchOnFields($query, $search, $fields); - if ($searchQuery) { - $searchQuery($query); - } - }); - } //end if - return $query; - } - - /** - * Build query search on all fields - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @param string $search - * @param array $fields - * @return \Illuminate\Database\Eloquent\Builder - */ - private function searchOnFields( - Builder $query, - string $search, - array $fields - ): \Illuminate\Database\Eloquent\Builder { - $table = $query->getModel()->getTable(); - foreach ($fields as $field) { - $field = str_replace('?', '\?', $field); - if (is_array($field)) { - $query->orWhereRaw( - sprintf("UPPER(CONCAT(%s)) LIKE UPPER(?)", collect($field)->map(function ($q) use ($table) { - return "`$table`.`$q`"; - })->implode(', \' \', ')), - ['%' . htmlspecialchars($search) . '%'] - ); - return $query; - } - // Get models woth enum's label. - if (is_array($this->getSearchValue($query, $search, $field))) { - foreach ($this->getSearchValue($query, $search, $field) as $array) { - $query->orWhereRaw( - "UPPER(`$table`.`$field`) LIKE UPPER(?)", - ['%' . htmlspecialchars($array->value) . '%'] - ); - } - return $query; - } - // Get models with relation's name/label. - if (Str::endsWith($field, '_id')) { - $query->orWhereHas(Str::remove('_id', $field), function ($queryRelation) use ($field, $search) { - if (Schema::hasColumn(Str::remove('_id', $field) . 's', 'name')) { - $queryRelation->where('name', 'like', '%' . $search . '%'); - } elseif (Schema::hasColumn(Str::remove('_id', $field) . 's', 'label')) { - $queryRelation->where('label', 'like', '%' . $search . '%'); - } - }); - return $query; - } - $query->orWhereRaw( - "UPPER(`$table`.`$field`) LIKE UPPER(?)", - ['%' . htmlspecialchars($this->getSearchValue($query, $search, $field)) . '%'] - ); - } //end foreach - return $query; - } - - /** - * Get the search value (on string or Enum). - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @param string $search - * @param string $field - * @return string|array - */ - protected function getSearchValue(Builder $query, string $search, string $field): string|array - { - $cast = $query->getModel()->getCasts()[$field] ?? null; - if ( - count($query->getModel()->getCasts()) and // Check if the model has casts. - $cast and // Check if there is cast about specific field. - enum_exists($cast) // Check if the cast is an enum. - ) { - /** @var \App\Traits\Enums $cast */ - // @phpstan-ignore-next-line - $cases = collect($cast::toArray()); - $enum = $cases->filter(function ($item) use ($search) { - return preg_match('/' . Str::lower($search) . '/', Str::lower($item->label)); - }); - return $enum->toArray(); - } else { - return $search; - } - } - - /** - * Sort columns with a query - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @param array $ignore - * @return \Illuminate\Database\Eloquent\Builder - */ - protected function sortQuery(Builder $query, array $ignore = []): Builder - { - $rName = request()->route()->getName(); - $table = $query->getModel()->getTable(); - if (request()->sort_col) { - Session::put("$rName.sort_col", request()->sort_col); - Session::put("$rName.sorted", true); - } - if (request()->sort_way) { - Session::put("$rName.sort_way", request()->sort_way); - Session::put("$rName.sorted", true); - } - if (request()->rst) { - Session::remove("$rName.sorted"); - Session::remove("$rName.sort_col"); - Session::remove("$rName.sort_way"); - } - if ( - request()->sort_col && - request()->sort_way && - Schema::hasColumn($table, request()->sort_col) && - (!isset($ignore) || (isset($ignore) && !in_array(request()->sort_col, $ignore))) - ) { - $query = $query->orderBy("$table." . request()->sort_col, request()->sort_way); - } - return $query; - } - - /** - * Customize pagination with cache or config (default). - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @param integer|null $pagination - * @return \Illuminate\Pagination\LengthAwarePaginator - */ - protected function customPaginate(Builder $query, $pagination): LengthAwarePaginator - { - if ($pagination) { - Cache::put('pagination', $pagination); - }; - $query = $query->paginate( - (Cache::get('pagination')) ? intval(Cache::get('pagination')) : config('pagination.default') - ); - return $query; - } -} diff --git a/app/Http/Controllers/Front/HomeController.php b/app/Http/Controllers/Front/HomeController.php new file mode 100644 index 0000000..f439723 --- /dev/null +++ b/app/Http/Controllers/Front/HomeController.php @@ -0,0 +1,19 @@ + - */ - protected $middleware = [ - \App\Http\Middleware\TrustHosts::class, - \App\Http\Middleware\TrustProxies::class, - \Illuminate\Http\Middleware\HandleCors::class, - \App\Http\Middleware\PreventRequestsDuringMaintenance::class, - \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, - \App\Http\Middleware\TrimStrings::class, - \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, - ]; - - /** - * The application's route middleware groups. - * - * @var array> - */ - protected $middlewareGroups = [ - 'web' => [ - 'htmlsanitize', - \App\Http\Middleware\EncryptCookies::class, - \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, - \Illuminate\Session\Middleware\StartSession::class, - \Illuminate\View\Middleware\ShareErrorsFromSession::class, - \App\Http\Middleware\VerifyCsrfToken::class, - \Illuminate\Routing\Middleware\SubstituteBindings::class, - \App\Http\Middleware\SecureHeaders::class, - ], - - 'api' => [ - \Illuminate\Routing\Middleware\ThrottleRequests::class . ':api', - \Illuminate\Routing\Middleware\SubstituteBindings::class, - ], - ]; - - /** - * The application's route middleware. - * - * These middleware may be assigned to groups or used individually. - * - * @var array - */ - protected $routeMiddleware = [ - 'auth' => \App\Http\Middleware\Authenticate::class, - 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, - 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, - 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, - 'can' => \Illuminate\Auth\Middleware\Authorize::class, - 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, - 'is-admin' => \App\Http\Middleware\IsAdmin::class, - 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, - 'signed' => \App\Http\Middleware\ValidateSignature::class, - 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, - 'htmlsanitize' => \App\Http\Middleware\HtmlSanitizer::class, - ]; -} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php deleted file mode 100644 index feb58cb..0000000 --- a/app/Http/Middleware/Authenticate.php +++ /dev/null @@ -1,40 +0,0 @@ - route('login') - ]; - if (!$request->expectsJson()) { - // * Notify must login - Session::flash('warning', trans('Veuillez vous connecter pour continuer')); - - foreach ($request->route()->gatherMiddleware() as $middleware) { - if (\is_string($middleware) and strpos($middleware, 'auth:') !== false) { - $route = $logins[str_replace('auth:', '', $middleware)] ?? null; - if ($route) { - return $route; - } - } - } - return route('login'); - } - abort(401); - - return null; - } -} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php deleted file mode 100644 index b6e9bbc..0000000 --- a/app/Http/Middleware/EncryptCookies.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - protected $except = []; -} diff --git a/app/Http/Middleware/HtmlSanitizer.php b/app/Http/Middleware/HtmlSanitizer.php deleted file mode 100644 index 857ca84..0000000 --- a/app/Http/Middleware/HtmlSanitizer.php +++ /dev/null @@ -1,61 +0,0 @@ -all(); - /** @var callable|null */ - $cleanInput = null; - $cleanInput = function ( - null|string|array &$input, - string $name, - ?string $rootName = null - ) use ( - $params, - &$cleanInput - ): void { - // * Nested element array - if (is_array($input)) { - array_walk_recursive($input, $cleanInput, $name); - } - if (!is_string($input)) { - return; - } - if (in_array($name, $params) or in_array($rootName ?? $name, $params)) { - // ? Is a json input ? - if ($isJson = \json_decode($input, true) and is_array($isJson)) { - // ! Decode each json field recursive. - \array_walk_recursive($isJson, function (string|array &$item) { - if (\is_string($item)) { - $item = clean($item); - $item = ToolboxHelper::stripCkEditorSchemesOnMediaInputs($item); - } - }); - } else { - $input = clean($input); - $input = ToolboxHelper::stripCkEditorSchemesOnMediaInputs($input); - } - } else { - $input = strip_tags($input); - } - }; - \array_walk($inputs, $cleanInput); - $request->merge($inputs); - return $next($request); - } -} diff --git a/app/Http/Middleware/IsAdmin.php b/app/Http/Middleware/IsAdmin.php deleted file mode 100644 index b1f95b7..0000000 --- a/app/Http/Middleware/IsAdmin.php +++ /dev/null @@ -1,26 +0,0 @@ -user(); - if ($user->isAdmin()) { - return $next($request); - } - return redirect()->route('bo.home'); - } -} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php deleted file mode 100644 index 842e4b9..0000000 --- a/app/Http/Middleware/PreventRequestsDuringMaintenance.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - protected $except = []; -} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php deleted file mode 100644 index 7b691f9..0000000 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ /dev/null @@ -1,42 +0,0 @@ -check()) { - switch ($guard) { - case 'backend': - if (!$request->routeIs('bo.*') && !$request->routeIs('login')) { - continue; - } - return \redirect()->route('bo.dashboard'); - default: - throw new \RuntimeException("Unhandled guard `{$guard}` ."); - } - } - } - - return $next($request); - } -} diff --git a/app/Http/Middleware/SecureHeaders.php b/app/Http/Middleware/SecureHeaders.php deleted file mode 100644 index cae7777..0000000 --- a/app/Http/Middleware/SecureHeaders.php +++ /dev/null @@ -1,103 +0,0 @@ -removeUnwantedHeaders($this->unwantedHeaderList); - $response = $next($request); - $response->headers->set('Referrer-Policy', 'no-referrer-when-downgrade'); - $response->headers->set('X-Content-Type-Options', 'nosniff'); - $response->headers->set('X-XSS-Protection', '1; mode=block'); - $response->headers->set('X-Frame-Options', 'SAMEORIGIN'); - $response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains;'); - $cspPolicies = [ - "default-src 'none';", - "manifest-src 'self';", - // * CKEDITOR Specific https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/csp.html - "connect-src 'self' blob:;", - "img-src * data: blob:;", - "frame-src 'self' " . implode(' ', [ - 'https://www.google.com/recaptcha/', - 'https://recaptcha.google.com/recaptcha/', - 'https://www.google.com/maps/' - ]) . ';', - "font-src 'self' data: https://fonts.gstatic.com;", - // ! Using CKEditor will must have unsafe-inline style - // phpcs:ignore Generic.Files.LineLength.TooLong - "style-src 'self' 'unsafe-inline' " . \implode(' ', [ - 'https://cdnjs.cloudflare.com', - // * File Manager - 'https://fonts.googleapis.com', - 'https://cdn.jsdelivr.net', - 'https://use.fontawesome.com', - 'https://fonts.googleapis.com' - ]) . ';', - // ! If you dont use ckeditor use this - // "style-src 'self' 'nonce-$nonce';", - // phpcs:ignore Generic.Files.LineLength.TooLong - "script-src 'self' {$jsDev} " . \implode(' ', [ - 'https: blob:', - 'https://www.googletagmanager.com', - 'https://cdnjs.cloudflare.com', - "$scheme://www.google-analytics.com", - ]) . ';' - ]; - - $response->headers->set( - 'Content-Security-Policy', - implode(' ', $cspPolicies) . $reportUri - ); - $response->headers->set('Feature-Policy', 'fullscreen \'self\';'); - return $response; - } - - /** - * Remove unwanted headers - * - * @param array $headerList - * @return void - */ - private function removeUnwantedHeaders(array $headerList) - { - foreach ($headerList as $header) { - header_remove($header); - } - } -} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php deleted file mode 100644 index 88cadca..0000000 --- a/app/Http/Middleware/TrimStrings.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - protected $except = [ - 'current_password', - 'password', - 'password_confirmation', - ]; -} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php deleted file mode 100644 index 7186414..0000000 --- a/app/Http/Middleware/TrustHosts.php +++ /dev/null @@ -1,20 +0,0 @@ - - */ - public function hosts() - { - return [ - $this->allSubdomainsOfApplicationUrl(), - ]; - } -} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php deleted file mode 100644 index d727add..0000000 --- a/app/Http/Middleware/TrustProxies.php +++ /dev/null @@ -1,28 +0,0 @@ -|string|null - */ - protected $proxies; - - /** - * The headers that should be used to detect proxies. - * - * @var integer - */ - protected $headers = - Request::HEADER_X_FORWARDED_FOR | - Request::HEADER_X_FORWARDED_HOST | - Request::HEADER_X_FORWARDED_PORT | - Request::HEADER_X_FORWARDED_PROTO | - Request::HEADER_X_FORWARDED_AWS_ELB; -} diff --git a/app/Http/Middleware/ValidateSignature.php b/app/Http/Middleware/ValidateSignature.php deleted file mode 100644 index 83aa732..0000000 --- a/app/Http/Middleware/ValidateSignature.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - protected $except = []; -} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php deleted file mode 100644 index 0054b1d..0000000 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ /dev/null @@ -1,18 +0,0 @@ - - */ - protected $except = [ - '/csp-report', - '/brevo-in' - ]; -} diff --git a/app/Http/Middlewares/HandleInertiaRequests.php b/app/Http/Middlewares/HandleInertiaRequests.php new file mode 100644 index 0000000..ba2ed54 --- /dev/null +++ b/app/Http/Middlewares/HandleInertiaRequests.php @@ -0,0 +1,30 @@ + + */ + public function share(Request $request): array + { + $props = [ + ...InertiaHelper::errorProps(parent::share($request)), + // More props here. + ]; + + return array_replace_recursive( + $props, + InertiaSharedRegistry::resolve($request) + ); + } +} diff --git a/app/Http/Requests/Bo/AssignTicketToUserRequest.php b/app/Http/Requests/Bo/AssignTicketToUserRequest.php deleted file mode 100644 index e474f26..0000000 --- a/app/Http/Requests/Bo/AssignTicketToUserRequest.php +++ /dev/null @@ -1,42 +0,0 @@ -user(); - return auth()->check() and $user->isAdmin(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'assign' => [ - 'nullable', 'exists:users,id', - // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - /** @var \App\Models\User $user */ - if ($user = User::whereId($value)->first() and !$user->isAdmin()) { - $fail(trans('Cet utilisateur ne peut se voir assigner un ticket')); - } - } - ] - ]; - } -} diff --git a/app/Http/Requests/Bo/Brands/StoreBrandRequest.php b/app/Http/Requests/Bo/Brands/StoreBrandRequest.php deleted file mode 100644 index 7b5261c..0000000 --- a/app/Http/Requests/Bo/Brands/StoreBrandRequest.php +++ /dev/null @@ -1,47 +0,0 @@ - 'required|string|min:3|max:255', - 'sites' => 'nullable|array', - 'sites.*.id' => 'required|exists:sites,id' - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('Nom de la marque'), - 'sites' => trans('Sites associés à la marque'), - 'sites.*.id' => trans('Élément parmis les sites associés à la marque'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Brands/UpdateBrandRequest.php b/app/Http/Requests/Bo/Brands/UpdateBrandRequest.php deleted file mode 100644 index 976fef4..0000000 --- a/app/Http/Requests/Bo/Brands/UpdateBrandRequest.php +++ /dev/null @@ -1,7 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'items' => 'required|array|min:1', - 'items.0.From.Address' => 'required|email', - 'items.0.To.*.Address' => 'required|email|in:mailing@reply.uwil.fr', - 'items.0.ExtractedMarkdownMessage' => 'required|string|min:10', - ]; - } -} diff --git a/app/Http/Requests/Bo/ChangeTicketStatus.php b/app/Http/Requests/Bo/ChangeTicketStatus.php deleted file mode 100644 index 9832a6f..0000000 --- a/app/Http/Requests/Bo/ChangeTicketStatus.php +++ /dev/null @@ -1,43 +0,0 @@ -user(); - return auth()->check() and $user->isAdmin(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'status' => [ - 'required', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - if (!in_array($value, TicketStatusEnum::toValues())) { - $fail(__('Veuillez choisir entre :values', [ - 'value' => implode(',', TicketStatusEnum::toLabels()) - ])); - } - } - ], - ]; - } -} diff --git a/app/Http/Requests/Bo/Companies/StoreCompanyRequest.php b/app/Http/Requests/Bo/Companies/StoreCompanyRequest.php deleted file mode 100644 index 4101aa4..0000000 --- a/app/Http/Requests/Bo/Companies/StoreCompanyRequest.php +++ /dev/null @@ -1,31 +0,0 @@ - 'required|string|min:3|max:255', - ]; - } -} diff --git a/app/Http/Requests/Bo/Companies/UpdateCompanyRequest.php b/app/Http/Requests/Bo/Companies/UpdateCompanyRequest.php deleted file mode 100644 index 12c2050..0000000 --- a/app/Http/Requests/Bo/Companies/UpdateCompanyRequest.php +++ /dev/null @@ -1,7 +0,0 @@ -user())) { - return false; - } - if ( - !$user->can('createPrivateMessage', $this->route()->ticket) - && $this->is_private == MessageTypeEnum::private - ) { - return false; - } - return auth()->check() and $user->sites and ($user->isAdmin() or $user->sites->contains( - $this->route()->ticket->site_id - )); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation() - { - /** @var \App\Models\User */ - $user = auth()->user(); - $this->merge([ - 'subscribe' => $this->subscribe ? true : false, - 'type' => $this->is_private ? MessageTypeEnum::private->value : MessageTypeEnum::public->value - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - /** @var \App\Models\User */ - $user = auth()->user(); - return [ - 'subscribe' => 'required|boolean', - 'message' => [ - 'required', - 'min:' . ($user->isAdmin() ? '5' : '20'), - function ($attribute, $value, $fail) { - $forbidden = ['merci de', 'merci de']; - foreach ($forbidden as $word) { - if (stripos(strtolower($value), $word) !== false) { - $fail( - "Le champs 'Message' contient la chaine de caractère non autorisée suivante : $word" - ); - } - } - }, - ], - 'file_messages' => 'sometimes|array', - 'file_messages.*' => 'mimes:pptx,docx,xlsx,csv,txt,jpeg,jpg,png,pdf,svg|max:2048', - 'type' => ['required', new Enum(MessageTypeEnum::class)] - ]; - } -} diff --git a/app/Http/Requests/Bo/Credit/AnswerEstimateRequest.php b/app/Http/Requests/Bo/Credit/AnswerEstimateRequest.php deleted file mode 100644 index 0713f96..0000000 --- a/app/Http/Requests/Bo/Credit/AnswerEstimateRequest.php +++ /dev/null @@ -1,48 +0,0 @@ -check()) { - return false; - } - /** @var \App\Models\User */ - $user = auth()->user(); - return $user->can('validateEstimate', $this->ticket); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation() - { - $this->merge([ - 'answer' => $this->status === 'accept' - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'status' => 'required|in:accept,refuse', - 'answer' => 'required|boolean' - ]; - } -} diff --git a/app/Http/Requests/Bo/Credit/CreateEstimateRequest.php b/app/Http/Requests/Bo/Credit/CreateEstimateRequest.php deleted file mode 100644 index da90770..0000000 --- a/app/Http/Requests/Bo/Credit/CreateEstimateRequest.php +++ /dev/null @@ -1,71 +0,0 @@ -check()) { - return false; - } - /** @var \App\Models\User */ - $user = auth()->user(); - return $user->isAdmin() and $user->can('estimate', $this->ticket); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - /** @var \App\Models\Ticket */ - $ticket = $this->ticket; - return [ - 'amount' => [ - 'required', - 'numeric', - 'gt:0', - function ($attribute, $value, $fail) { - if (fmod((\floatval($value) * 1000), 62.5) !== 0.0) { - $fail("$attribute doit être un multiple de 62.5 (soit 0.0625)"); - } - } - ], - 'credit_account_id' => [ - 'required', - 'exists:credit_accounts,id', - function ($attribute, $value, $fail) use ($ticket) { - /** @var \App\Models\Credit\Account|null */ - $account = Account::whereId($value)->first(); - if ($account and !$ticket->accountIsValidForThisTicket($account)) { - $fail("$attribute does not belong to the ticket brand"); - } - } - ] - ]; - } - - /** - * Get custom messages for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'amount' => 'Montant', - 'credit_account_id' => 'Compte à débiter' - ]; - } -} diff --git a/app/Http/Requests/Bo/CreditAccounts/StoreCreditAccountRequest.php b/app/Http/Requests/Bo/CreditAccounts/StoreCreditAccountRequest.php deleted file mode 100644 index e5adb88..0000000 --- a/app/Http/Requests/Bo/CreditAccounts/StoreCreditAccountRequest.php +++ /dev/null @@ -1,52 +0,0 @@ - 'required|string|min:3|max:255', - 'type' => [ - 'required', - Rule::in(collect(AccountTypeEnum::cases())->pluck('value')->all()), - ], - 'balance' => 'required|numeric|min:0|max:255', - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'label' => trans('Label du compte'), - 'type' => trans('Type du compte'), - 'balance' => trans('Solde du compte'), - ]; - } -} diff --git a/app/Http/Requests/Bo/CreditLogs/StoreCreditLogRequest.php b/app/Http/Requests/Bo/CreditLogs/StoreCreditLogRequest.php deleted file mode 100644 index 9d04ef7..0000000 --- a/app/Http/Requests/Bo/CreditLogs/StoreCreditLogRequest.php +++ /dev/null @@ -1,50 +0,0 @@ - [ - // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - 'required', 'numeric', 'min:0', 'max:255', function ($attribute, $value, $fail) { - if (($value * 10) % 5 !== 0) { - $fail("Le Montant de l'opération doit être divisible par 0.5 jour/homme"); - } - }, - ], - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'amount' => trans('Montant de l\'opération'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Informations/StoreInformationRequest.php b/app/Http/Requests/Bo/Informations/StoreInformationRequest.php deleted file mode 100644 index c1c18e0..0000000 --- a/app/Http/Requests/Bo/Informations/StoreInformationRequest.php +++ /dev/null @@ -1,52 +0,0 @@ - 'required|string|min:3|max:255', - 'message' => 'required|string|min:3|max:255', - 'type' => [ - 'required', - Rule::in(collect(InfoColorsEnum::cases())->pluck('value')->all()), - ], - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'title' => trans('Titre de l\'information'), - 'message' => trans('Message de l\'information'), - 'type' => trans('Type d\'information'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Informations/UpdateInformationRequest.php b/app/Http/Requests/Bo/Informations/UpdateInformationRequest.php deleted file mode 100644 index d8780c8..0000000 --- a/app/Http/Requests/Bo/Informations/UpdateInformationRequest.php +++ /dev/null @@ -1,7 +0,0 @@ -merge([ - 'tasks' => request()->tasks ? \collect(json_decode(request()->tasks)) - ->map(function ($task) { - return \array_intersect_key((array)$task, Invoice::getTaskStructure()); - })->toArray() : [], - 'show_days' => $this->show_days ? true : false, - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'firstname' => 'required|string|min:3|max:255', - 'lastname' => 'required|string|min:3|max:255', - 'object' => 'required|string|min:3|max:255', - 'tasks' => 'required|array|min:1', - 'tasks.*' => 'required|array', - 'tasks.*.days' => 'required|numeric', - 'tasks.*.amount' => 'required|numeric', - 'tasks.*.desc' => 'required|string|min:10', - 'tasks.*.type' => [ - 'required', new Enum(TaskTypeEnum::class) - ], - 'tasks.*.package' => 'required_if:tasks.*.type,' . TaskTypeEnum::package->value . - '|nullable|exists:packages,id', - 'comment' => 'sometimes|nullable|string|min:15', - 'show_days' => 'required|boolean', - 'site_id' => 'required|integer|exists:sites,id', - 'company_id' => 'required|integer|exists:companies,id', - 'invoiced_to_id' => 'required|integer|exists:companies,id', - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'firstname' => trans('Prénom de la personne associée'), - 'lastname' => trans('Nom de la personne associée'), - 'object' => trans('Objet du devis'), - 'tasks' => trans('Tâches du devis'), - 'tasks.*' => trans('Tâches du devis'), - 'tasks.*.days' => trans('Nombre de jours dédiés à la tâche'), - 'tasks.*.amount' => trans('Montant dédié à la tâche'), - 'tasks.*.desc' => trans('Description dédié à la tâche'), - 'tasks.*.type' => trans('Type de tâche'), - 'tasks.*.package' => trans('Forfait dédié à la tâche'), - 'comment' => trans('Commentaire du devis'), - 'show_days' => trans('Visibilité des jours'), - 'site_id' => trans('Site associé'), - 'company_id' => trans('Companie associé'), - 'invoiced_to_id' => trans('Entité à facturer'), - 'signed_date' => trans('Date de signature du Devis'), - 'sent_client_date' => trans('Date d\'envoi du Devis au client'), - 'sent_accounting_date' => trans('Date d\'envoi du Devis à la comptabilité'), - 'status' => trans('État du devis'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Invoices/UpdateInvoiceRequest.php b/app/Http/Requests/Bo/Invoices/UpdateInvoiceRequest.php deleted file mode 100644 index fe65552..0000000 --- a/app/Http/Requests/Bo/Invoices/UpdateInvoiceRequest.php +++ /dev/null @@ -1,49 +0,0 @@ -route('invoice'); - if ($model->status->value === InvoiceStatusEnum::opened->value) { - if (!$model->sent_client_date) { - $rules = array_merge($rules, parent::rules()); - } - $rules = array_merge($rules, [ - 'comment' => 'sometimes|nullable|string|min:15', - 'sent_client_date' => 'required_with:signed_date,sent_accounting_date|sometimes|nullable|date', - 'signed_date' => 'required_with:sent_accounting_date|sometimes|nullable|date', - 'sent_accounting_date' => 'sometimes|nullable|date', - 'status' => [ - 'required', - new Enum(InvoiceStatusEnum::class), - //phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) use ($model) { - if ( - (intval($value) === InvoiceStatusEnum::archived->value) && - (is_null($model->sent_client_date) || - is_null($model->signed_date) || - is_null($model->sent_accounting_date)) - ) { - $fail(__('Le status :status doit être assigné lorsque les 3 dates sont saisies', [ - 'status' => InvoiceStatusEnum::archived->label() - ])); - } - }, - ], - ]); - } //end if - return $rules; - } -} diff --git a/app/Http/Requests/Bo/Labels/StoreLabelRequest.php b/app/Http/Requests/Bo/Labels/StoreLabelRequest.php deleted file mode 100644 index f1235d7..0000000 --- a/app/Http/Requests/Bo/Labels/StoreLabelRequest.php +++ /dev/null @@ -1,49 +0,0 @@ - 'required|string|min:2|max:255|unique:labels,name', - 'color' => [ - 'required', - new Hex(), - ], - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('validation.attributes.name'), - 'color' => trans('validation.attributes.color'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Labels/UpdateLabelRequest.php b/app/Http/Requests/Bo/Labels/UpdateLabelRequest.php deleted file mode 100644 index bb08e9b..0000000 --- a/app/Http/Requests/Bo/Labels/UpdateLabelRequest.php +++ /dev/null @@ -1,18 +0,0 @@ - 'required|string|min:2|max:255|unique:labels,name,' . $this->route('label')->id . ',id', - ]); - } -} diff --git a/app/Http/Requests/Bo/LinkTicket.php b/app/Http/Requests/Bo/LinkTicket.php deleted file mode 100644 index cc8624b..0000000 --- a/app/Http/Requests/Bo/LinkTicket.php +++ /dev/null @@ -1,39 +0,0 @@ -isAdmin(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules(): array - { - $ticket = $this->route('ticket'); - return [ - 'linked_ticket_id' => [ - 'required', - 'numeric', - 'exists:tickets,id', - 'not_in:' . $ticket->id, - ] - ]; - } -} diff --git a/app/Http/Requests/Bo/Packages/StorePackageRequest.php b/app/Http/Requests/Bo/Packages/StorePackageRequest.php deleted file mode 100644 index 7445846..0000000 --- a/app/Http/Requests/Bo/Packages/StorePackageRequest.php +++ /dev/null @@ -1,59 +0,0 @@ -merge([ - 'published' => $this->boolean('published'), - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'name' => 'required|string|min:3|max:255', - 'amount' => 'required|numeric|min:0|regex:/^\d+(\.\d{1,2})?$/', - 'published' => 'required|boolean', - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('Nom'), - 'amount' => trans('Montant (par jour)'), - 'published' => trans('Publication') - ]; - } -} diff --git a/app/Http/Requests/Bo/Packages/UpdatePackageRequest.php b/app/Http/Requests/Bo/Packages/UpdatePackageRequest.php deleted file mode 100644 index dc8ae54..0000000 --- a/app/Http/Requests/Bo/Packages/UpdatePackageRequest.php +++ /dev/null @@ -1,7 +0,0 @@ - 'required|string|min:3|max:255', - 'users' => 'nullable|array', - 'users.*.id' => 'required|exists:users,id', - 'gitlab_project_id' => 'nullable', - 'project_manager_id' => 'nullable|exists:users,id', - 'url_re7' => 'nullable|url', - 'url_prod' => 'nullable|url' - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('Nom du site'), - 'users' => trans('Utilisateurs associés au site'), - 'users.*.id' => trans('Élément parmis les Utilisateurs associés au site'), - 'gitlab_project_id' => trans('ID du dépôt Gitlab'), - 'project_manager_id' => trans('Chef de projet'), - 'url_re7' => trans('Url de RECETTE'), - 'url_prod' => trans('Url de prod') - ]; - } -} diff --git a/app/Http/Requests/Bo/Sites/UpdateSiteRequest.php b/app/Http/Requests/Bo/Sites/UpdateSiteRequest.php deleted file mode 100644 index 2f665be..0000000 --- a/app/Http/Requests/Bo/Sites/UpdateSiteRequest.php +++ /dev/null @@ -1,7 +0,0 @@ -check(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'search' => 'nullable|string', - 'sort_way' => 'sometimes|in:asc,desc', - 'status' => [ - 'sometimes', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - if (!in_array($value, TicketStatusEnum::toValues())) { - $fail(__('Veuillez choisir entre :values', [ - 'value' => implode(',', TicketStatusEnum::toLabels()) - ])); - } - } - ], - 'pr' => 'sometimes|int|exists:sites,id' - ]; - } -} diff --git a/app/Http/Requests/Bo/StoreTicket.php b/app/Http/Requests/Bo/StoreTicket.php deleted file mode 100644 index 12fb6fa..0000000 --- a/app/Http/Requests/Bo/StoreTicket.php +++ /dev/null @@ -1,130 +0,0 @@ -check(); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation() - { - /** @var \App\Models\User|null */ - $user = auth()->user(); - if ($user) { - if (!$user->isAdmin()) { - $this->merge([ - 'status' => TicketStatusEnum::new->value, - 'is_internal' => false, - ]); - } else { - $this->merge([ - 'is_internal' => $this->is_internal ? true : false, - ]); - } - } - $this->merge([ - 'labels' => $this->labels ?? [] - ]); - } - - - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - /** @var \App\Models\User */ - $user = auth()->user(); - return [ - 'site_id' => [ - 'required', - 'exists:sites,id', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - /** @var \App\Models\User */ - $user = auth()->user(); - if ($user->isAdmin()) { - return; - } - if (!in_array($value, $user->sites()->pluck('id')->all())) { - $fail(__('Veuillez choisir entre :values', [ - 'values' => $user->sites()->pluck('name')->implode(',') - ])); - } - } - ], - 'type' => [ - 'required', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - if (!in_array($value, TicketTypeEnum::toValues())) { - $fail(__('Veuillez choisir entre :values', [ - 'value' => implode(',', TicketTypeEnum::toLabels()) - ])); - } - } - ], - 'status' => [ - 'required', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - if (!in_array($value, TicketStatusEnum::toValues())) { - $fail(__('Veuillez choisir entre :values', [ - 'value' => implode(',', TicketStatusEnum::toLabels()) - ])); - } - } - ], - 'date_mep' => 'nullable|date', - 'text' => [ - 'required', - 'string', - 'min:40', - function ($attribute, $value, $fail) { - $forbidden = ['merci de', 'merci de']; - foreach ($forbidden as $word) { - if (stripos(strtolower($value), $word) !== false) { - $fail( - "Le champs 'Description du ticket' contient la chaine de caractère non autorisée suivante : $word" - ); - } - } - }, - ], - 'title' => 'required|string|between:3,255', - 'file_tickets' => 'sometimes|array', - 'file_tickets.*' => 'mimes:pptx,docx,xlsx,csv,txt,jpeg,jpg,png,pdf,svg|max:2048', - 'is_internal' => 'required|boolean', - 'labels' => 'sometimes|array', - 'labels.*' => [ - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - 'required', 'exists:labels,id', function ($attribute, $value, $fail) use ($user) { - if (!$user->can('assignLabels', Ticket::class)) { - $fail(trans('Vous n\'êtes pas autorisé à modifier cette valeur')); - } - } - ] - ]; - } -} diff --git a/app/Http/Requests/Bo/TicketTypes/UpdateTicketTypeRequest.php b/app/Http/Requests/Bo/TicketTypes/UpdateTicketTypeRequest.php deleted file mode 100644 index 759f50f..0000000 --- a/app/Http/Requests/Bo/TicketTypes/UpdateTicketTypeRequest.php +++ /dev/null @@ -1,44 +0,0 @@ - 'required|string|min:3|max:255', - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'type' => trans('Type'), - 'template' => trans('Template'), - ]; - } -} diff --git a/app/Http/Requests/Bo/UpdateChangeOrderRequest.php b/app/Http/Requests/Bo/UpdateChangeOrderRequest.php deleted file mode 100644 index d6be727..0000000 --- a/app/Http/Requests/Bo/UpdateChangeOrderRequest.php +++ /dev/null @@ -1,42 +0,0 @@ -check(); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation(): void - { - $this->merge([ - 'direction' => $this->route('direction') === 'up' ? true : false - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules(): array - { - return [ - 'direction' => 'required|boolean', - ]; - } -} diff --git a/app/Http/Requests/Bo/UpdateMessage.php b/app/Http/Requests/Bo/UpdateMessage.php deleted file mode 100644 index 32f1bb1..0000000 --- a/app/Http/Requests/Bo/UpdateMessage.php +++ /dev/null @@ -1,35 +0,0 @@ -user(); - - return auth()->check() && $user->isAdmin(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules(): array - { - /** @var \App\Models\User */ - $user = auth()->user(); - return [ - 'message' => 'required|min:' . ($user->isAdmin() ? '5' : '20'), - ]; - } -} diff --git a/app/Http/Requests/Bo/UpdateTicket.php b/app/Http/Requests/Bo/UpdateTicket.php deleted file mode 100644 index 2bde3b8..0000000 --- a/app/Http/Requests/Bo/UpdateTicket.php +++ /dev/null @@ -1,22 +0,0 @@ -user())) { - return false; - } - return auth()->check() and ($user->isAdmin() or - optional(request()->route()->ticket)->created_by === $user->id - ); - } -} diff --git a/app/Http/Requests/Bo/UpdateTicketPriorityRequest.php b/app/Http/Requests/Bo/UpdateTicketPriorityRequest.php deleted file mode 100644 index 79c4a06..0000000 --- a/app/Http/Requests/Bo/UpdateTicketPriorityRequest.php +++ /dev/null @@ -1,57 +0,0 @@ -check(); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation(): void - { - $this->ticket = $this->route('ticket'); - $max = Ticket::query()->where('site_id', $this->ticket->site_id)->max('order'); - - $this->merge([ - 'priority' => min($this->integer('priority'), $max) - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules(): array - { - return [ - 'priority' => [ - 'required', - 'integer', - 'min:1', - function ($attribute, $value, $fail) { - if ($this->ticket && intval($value) === $this->ticket->order) { - $fail("La valeur de {$attribute} doit être différente de la valeur actuelle."); - } - }, - ], - ]; - } -} diff --git a/app/Http/Requests/Bo/Users/FavouriteSiteRequest.php b/app/Http/Requests/Bo/Users/FavouriteSiteRequest.php deleted file mode 100644 index 9a7935d..0000000 --- a/app/Http/Requests/Bo/Users/FavouriteSiteRequest.php +++ /dev/null @@ -1,39 +0,0 @@ - [ - 'nullable', - 'exists:sites,id', - Rule::in($user->sites->pluck('id')), - ], - ]; - } -} diff --git a/app/Http/Requests/Bo/Users/StoreUserRequest.php b/app/Http/Requests/Bo/Users/StoreUserRequest.php deleted file mode 100644 index 0482610..0000000 --- a/app/Http/Requests/Bo/Users/StoreUserRequest.php +++ /dev/null @@ -1,70 +0,0 @@ -merge([ - 'gitlab_id' => \boolval($this->input('gitlab_id')) ? $this->input('gitlab_id') : null - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'name' => 'required|string|min:3|max:255', - 'email' => 'email|required|unique:users,email', - 'role' => [ - 'required', - Rule::in(collect(RoleEnum::cases())->pluck('value')->all()), - ], - 'sites' => 'nullable|array', - 'sites.*.id' => 'required|exists:sites,id', - 'gitlab_id' => 'nullable|integer|unique:users,gitlab_id' - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('Nom de l\'utilisateur'), - 'email' => trans('Email de l\'utilisateur'), - 'role' => trans('Rôle de l\'utilisateur'), - 'sites' => trans('Sites associés à l\'utilisateur'), - 'sites.*.id' => trans('Élément parmis les sites associés à l\'utilisateur'), - 'gitlab_id' => trans("ID de l'utilisateur Gitlab") - ]; - } -} diff --git a/app/Http/Requests/Bo/Users/UpdateUserRequest.php b/app/Http/Requests/Bo/Users/UpdateUserRequest.php deleted file mode 100644 index 9c1986a..0000000 --- a/app/Http/Requests/Bo/Users/UpdateUserRequest.php +++ /dev/null @@ -1,19 +0,0 @@ - 'email|required|unique:users,email,' . $this->route('user')->id . ',id', - 'gitlab_id' => 'nullable|integer|unique:users,gitlab_id,' . $this->route('user')->id . ',id' - ]); - } -} diff --git a/app/Http/Resources/UserLabeledResource.php b/app/Http/Resources/UserLabeledResource.php deleted file mode 100644 index 712f04c..0000000 --- a/app/Http/Resources/UserLabeledResource.php +++ /dev/null @@ -1,30 +0,0 @@ -collection->mapWithKeys(function (User $user, $key) { - return [ - $key => [ - 'label' => sprintf('%d %s', $user->id, $user->name), - 'key' => $user->id - ] - ]; - }); - } -} diff --git a/app/Interfaces/SpsConfigInterface.php b/app/Interfaces/SpsConfigInterface.php deleted file mode 100644 index 1e87835..0000000 --- a/app/Interfaces/SpsConfigInterface.php +++ /dev/null @@ -1,42 +0,0 @@ -where('status', TicketStatusEnum::production) - ->orWhere('status', TicketStatusEnum::waitingValidation); - })->whereDate('updated_at', '<=', Carbon::now()->subDays($limitDays)) - ->whereDoesntHave('messages', function ($q) use ($limitDays) { - $q->whereDate('updated_at', '>', Carbon::now()->subDays($limitDays)); - })->get(); - /** @var \App\Models\Ticket $ticket */ - foreach ($tickets as $ticket) { - /** @var \App\Enums\Tickets\TicketStatusEnum */ - $oldStatus = $ticket->status; - $ticket->status = TicketStatusEnum::archived; - $ticket->saveQuietly(); - event(new TicketStatusChanged($ticket, $oldStatus, null, $message)); - event(new NotifySubscriptions($ticket, $message, collect([$ticket->user]))); - } - } -} diff --git a/app/Jobs/ExportTicketsState.php b/app/Jobs/ExportTicketsState.php deleted file mode 100644 index 7d9ec7b..0000000 --- a/app/Jobs/ExportTicketsState.php +++ /dev/null @@ -1,117 +0,0 @@ -header; - - // Récupération des tickets. - Ticket::query() - ->whereNotIn( - 'status', - [TicketStatusEnum::archived, TicketStatusEnum::production] - ) - ->orderBy(Site::select('name') - ->whereColumn('sites.id', 'tickets.site_id')) - ->orderBy('order')->get()->each(function (Ticket $ticket) use (&$csvlines, &$lastSiteId, &$order) { - $csvlines[] = [ - "", - $ticket->site->name, - $ticket->id, - $lastSiteId === $ticket->site_id ? $order + 1 : 1, - $ticket->date_mep?->format('d-m-Y') ?? 'No MEP Date', - $ticket->type->label(), - $ticket->title, - $ticket->status->label(), - $ticket->projectManager->name ?? 'No PM', - $ticket->assignedUser()->name ?? 'No Assigned User', - Carbon::create($ticket->getRawOriginal('last_activity'))->format('d-m-Y H:i:s'), - $ticket->created_at->format('d-m-Y H:i:s'), - route('bo.ticket.show', $ticket->id), - $ticket->gitlab_issue ?? 'No GitLab Issue' - ]; - - $order = $lastSiteId === $ticket->site_id ? $order + 1 : 1; - $lastSiteId = $ticket->site_id; - }); - - Notification::route('mail', config('mail.MAIL_ADMIN')) - ->notify(new ExportTicketsStateNotification($this->array2csv($csvlines, ";"))); - } - - /** - * converts an array to a csv stream - * - * @param array $data - * @param string $delimiter - * @param string $enclosure - * @param string $escape_char - * - * @return string - */ - protected function array2csv( - array $data, - string $delimiter = ',', - string $enclosure = '"', - string $escape_char = "\\" - ) { - $f = fopen('php://memory', 'r+'); - - // UTF-8 BOM. - $BOM = "\xEF\xBB\xBF"; - fwrite($f, $BOM); - - foreach ($data as $item) { - fputcsv($f, $item, $delimiter, $enclosure, $escape_char); - } - rewind($f); - return stream_get_contents($f); - } -} diff --git a/app/Jobs/SendTicketMentionMail.php b/app/Jobs/SendTicketMentionMail.php deleted file mode 100644 index eb429fe..0000000 --- a/app/Jobs/SendTicketMentionMail.php +++ /dev/null @@ -1,47 +0,0 @@ -user = $user; - $this->mail = $mail; - } - - /** - * Execute the job. - * - * @return void - */ - public function handle() - { - Mail::to($this->user->email)->send($this->mail); - Log::debug(sprintf('Mention mail sent to %s', $this->user->email)); - } -} diff --git a/app/Jobs/SendUserCreatedEmail.php b/app/Jobs/SendUserCreatedEmail.php deleted file mode 100644 index 56fe1bc..0000000 --- a/app/Jobs/SendUserCreatedEmail.php +++ /dev/null @@ -1,45 +0,0 @@ -user = $user->withoutRelations(); - } - - /** - * Execute the job. - * - * @return void - */ - public function handle() - { - Mail::to(['email' => $this->user->email]) - ->send(new UserCreatedMail($this->user)); - Log::debug(sprintf('Sent %s to %s', UserCreatedMail::class, $this->user->email)); - } -} diff --git a/app/Jobs/UpdateIssueLabels.php b/app/Jobs/UpdateIssueLabels.php deleted file mode 100644 index 127c1cb..0000000 --- a/app/Jobs/UpdateIssueLabels.php +++ /dev/null @@ -1,85 +0,0 @@ -ticket = $ticket; - $this->requestStatus = $requestStatus; - } - - /** - * Execute the job. - */ - public function handle(): void - { - $oldStatus = $this->ticket->status; - $requestStatus = (int) $this->requestStatus; - $gitlabIssue = $this->getGitlabIssue($this->ticket->site->gitlab_project_id, $this->ticket->gitlab_issue); - - $issueLabels = $gitlabIssue['labels']; - - if ($oldStatus === TicketStatusEnum::waiting && $requestStatus !== TicketStatusEnum::waiting->value) { - $issueLabels = array_values(array_diff($issueLabels, ['g-wait'])); - } - - switch ($requestStatus) { - case TicketStatusEnum::takenInAccount->value: - $newLabels = ['g-to-dispatch']; - $updatedLabels = array_unique(array_merge($issueLabels, $newLabels)); - - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $updatedLabels); - break; - case TicketStatusEnum::waiting->value: - $newLabels = ['g-wait']; - $updatedLabels = array_unique(array_merge($issueLabels, $newLabels)); - - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $updatedLabels); - break; - case TicketStatusEnum::waitingValidation->value: - $removeLabels = ['g-to-estimate']; - $updatedLabels = array_diff($issueLabels, $removeLabels); - - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $updatedLabels); - break; - case TicketStatusEnum::recetteValidated->value: - $newLabels = ['g-re7-ok', 'to-prod']; - $updatedLabels = array_unique(array_merge($issueLabels, $newLabels)); - - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $updatedLabels); - break; - case TicketStatusEnum::archived->value: - $updatedIssue = $this->closeGitlabIssue($gitlabIssue['project_id'], $gitlabIssue['iid'], $issueLabels); - break; - default: - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $issueLabels); - break; - } - } -} diff --git a/app/Jobs/WarnBeforeAutoCloseTicket.php b/app/Jobs/WarnBeforeAutoCloseTicket.php deleted file mode 100644 index b77bf33..0000000 --- a/app/Jobs/WarnBeforeAutoCloseTicket.php +++ /dev/null @@ -1,44 +0,0 @@ -where('status', TicketStatusEnum::production) - ->orWhere('status', TicketStatusEnum::waitingValidation); - })->whereDate('updated_at', '<=', Carbon::now()->subDays($warningDays)) - ->whereDoesntHave('messages', function ($q) use ($warningDays) { - $q->whereDate('updated_at', '>', Carbon::now()->subDays($warningDays)); - })->get(); - foreach ($tickets as $ticket) { - $date = $ticket->messages->sortByDesc('updated_at')->first()->updated_at ?? $ticket->updated_at; - $limitDate = $date->addDays($warningDays); - if (intval(Carbon::now()->diff($limitDate)->format('%a')) >= $warningDays) { - event(new NotifySubscriptions($ticket, $messageToAll, collect([$ticket->user]))); - } - event(new NotifyTicketCreator($ticket, sprintf( - $messageToUser, - intval($date->diff(Carbon::now()->subDays($warningDays))->format('%a') + 1) - ))); - } - } -} diff --git a/app/Lib/Helpers/CollectionHelper.php b/app/Lib/Helpers/CollectionHelper.php deleted file mode 100644 index b9e9ecd..0000000 --- a/app/Lib/Helpers/CollectionHelper.php +++ /dev/null @@ -1,64 +0,0 @@ -count(); - - return self::paginator($results->forPage($page, $pageSize), $total, $pageSize, $page, [ - 'path' => Paginator::resolveCurrentPath(), - 'pageName' => 'page', - ]); - } - - /** - * Create a new length-aware paginator instance. - * - * @param \Illuminate\Support\Collection $items - * @param integer $total - * @param integer $perPage - * @param integer $currentPage - * @param array $options - * @return \Illuminate\Pagination\LengthAwarePaginator - */ - protected static function paginator(Collection $items, int $total, int $perPage, int $currentPage, array $options) - { - return Container::getInstance()->makeWith(LengthAwarePaginator::class, [ - 'items' => $items, - 'total' => $total, - 'perPage' => $perPage, - 'currentPage' => $currentPage, - 'options' => $options - ]); - } -} diff --git a/app/Lib/Helpers/ExceptionsHelper.php b/app/Lib/Helpers/ExceptionsHelper.php deleted file mode 100644 index 4813275..0000000 --- a/app/Lib/Helpers/ExceptionsHelper.php +++ /dev/null @@ -1,190 +0,0 @@ -setModules([]); - $event->setOsContext(null); - - /** @var \Sentry\ExceptionDataBag[] */ - $exceptionBag = []; - foreach ($event->getExceptions() as $exceptionDataBag) { - $exceptionBag[] = self::getAnonymizedSentryException($exceptionDataBag); - } - $event->setExceptions($exceptionBag); - return $event; - } - - /** - * Anonimize Sentry Exception bag - * - * @param \Sentry\ExceptionDataBag $exceptionDataBag - * @return \Sentry\ExceptionDataBag - */ - private static function getAnonymizedSentryException( - \Sentry\ExceptionDataBag $exceptionDataBag - ): \Sentry\ExceptionDataBag { - $exceptionDataBag->setValue(self::getAnonymizedMessage($exceptionDataBag->getValue())); - if ($stackTrace = $exceptionDataBag->getStacktrace()) { - $exceptionDataBag->setStacktrace(self::getAnonymizedSentryStackTrace($stackTrace)); - } - return $exceptionDataBag; - } - - /** - * Anonymise sentry stacktrace - * - * @param \Sentry\Stacktrace $stackTrace - * @return \Sentry\Stacktrace - */ - private static function getAnonymizedSentryStackTrace(\Sentry\Stacktrace $stackTrace): \Sentry\Stacktrace - { - /** @var \Sentry\Frame[] */ - $frames = \array_reverse($stackTrace->getFrames(), true); - $i = \count($frames) - 1; - // * Remove all but keep first (index.php). - while ($i-- > 0) { - $stackTrace->removeFrame(count($stackTrace->getFrames()) - 1); - } - foreach ($frames as $index => $frame) { - $frame->setPostContext([]); - $frame->setPreContext([]); - $frame->setContextLine(''); - $frame->setVars(self::getAnonymizedSentryParams($frame->getVars())); - $stackTrace->addFrame($frame); - if ($index === 0) { - $stackTrace->removeFrame(count($stackTrace->getFrames()) - 1); - } - } - return $stackTrace; - } - - /** - * Get anonymized sentry params - * - * @param mixed[] $params - * @return string[] - */ - private static function getAnonymizedSentryParams(array $params): array - { - foreach ($params as &$param) { - $type = \strtolower(\gettype($param)); - if (\is_string($param)) { - $type = \explode(' ', \trim(strtolower($param)))[0] ?? null; - } - switch (true) { - case $type === 'lambda': - case $type === 'object': - continue 2; - case $type === 'array' and \is_array($param): - $param = sprintf('Array(%d)', \count($param)); - continue 2; - default: - if (\is_numeric($param)) { - $param = \ucfirst($type); - continue 2; - } - if (\is_string($param)) { - $param = sprintf('String(%d)', \strlen($param)); - continue 2; - } - } //end switch - } //end foreach - return $params; - } - - - /** - * Anonymize at least Sql queries - * - * @param string $message - * @return string - */ - public static function getAnonymizedMessage(string $message): string - { - $message = \preg_replace('/^(.*)( \(SQL:.*\))$/', '$1', $message) ?? $message; - if ($sqlPos = \strpos($message, 'to use near')) { - $message = \mb_strcut($message, 0, $sqlPos); - } - return $message; - } - - /** - * Anonymize stack trace - * - * @param \Throwable $e - * @return string - */ - public static function getAnonymizedStackTrace(\Throwable $e): string - { - $projectPath = \realpath(\sprintf('%s/../', \app_path())); - $traceStack = $e->getTrace(); - $traceStr = ''; - $maxStackStage = 0; - foreach ($traceStack as $stackStage => $stack) { - $maxStackStage = $stackStage; - $traceStr .= \sprintf( - '#%s %s(%d): ', - $stackStage, - str_replace($projectPath, '', $stack['file'] ?? ''), - $stack['line'] ?? '' - ); - if (isset($stack['class'])) { - $traceStr .= "{$stack['class']}->{$stack['function']}("; - if (isset($stack['args'])) { - $traceStr .= self::handleArgs($stack); - } - $traceStr .= ")\n"; - } elseif (isset($stack['function'])) { - $traceStr .= "{$stack['function']}("; - if (isset($stack['args'])) { - $traceStr .= self::handleArgs($stack); - } - $traceStr .= ")\n"; - } - } //end foreach - $maxStackStage++; - $traceStr .= "#$maxStackStage {main}"; - return $traceStr; - } - - /** - * Handle Args - * - * @param array $stack - * @return string - */ - public static function handleArgs(array $stack): string - { - $traceArgs = ''; - $argsCount = count($stack['args']); - for ($i = 0; $i < $argsCount; $i++) { - $type = \gettype($stack['args'][$i]); - switch ($type) { - case 'object': - $traceArgs .= sprintf('Object(%s)', \get_class($stack['args'][$i])); - break; - case 'array': - $traceArgs .= sprintf('Array(%d)', \count($stack['args'][$i])); - break; - case 'string': - $traceArgs .= sprintf('String(%d)', \strlen($stack['args'][$i])); - break; - default: - $traceArgs .= \gettype($stack['args'][$i]); - } - $traceArgs .= ($i !== ($argsCount - 1) ? ',' : ''); - } - return $traceArgs; - } -} diff --git a/app/Lib/Helpers/FileStorageHelper.php b/app/Lib/Helpers/FileStorageHelper.php deleted file mode 100644 index a6a783d..0000000 --- a/app/Lib/Helpers/FileStorageHelper.php +++ /dev/null @@ -1,452 +0,0 @@ -{$attribute}), '/'); - if (\strpos($path, 'storage') !== 0) { - return; - } - $path = ToolboxHelper::mbReplace('storage/', '', $path); - if (Storage::disk('public')->exists($path)) { - Storage::disk('public')->delete($path); - } - } - - /** - * Destroy the file associate with the attribute old value (before updated to DB). - * - * @param \Illuminate\Database\Eloquent\Model $model - * @param string $attribute - * @param boolean $onlyIfUpdated - * @return void - */ - public static function removeOldFile(Model $model, string $attribute, bool $onlyIfUpdated = true): void - { - // * Ignore If removal has to be done only if the field has changed and it actually hasnt. - if ($onlyIfUpdated and $model->{$attribute} === ToolboxHelper::getOriginal($model, $attribute)) { - return; - } - $originalPath = \ltrim(\urldecode(ToolboxHelper::getOriginal($model, $attribute)), '/'); - if (\strpos($originalPath, 'storage') !== 0) { - return; - } - $originalPath = ToolboxHelper::mbReplace('storage/', '', $originalPath); - if (Storage::disk('public')->exists($originalPath)) { - Storage::disk('public')->delete($originalPath); - } - } - - /** - * Store a file using optimized storage strategy - * - * You can use filename param to overload file name. - * - * @param \Illuminate\Database\Eloquent\Model $model The model that will hold the picture. - * @param \Illuminate\Http\UploadedFile|\SplFileInfo|string $file The file, will just return itself is string. - * @param boolean $slugify Force filename slugification. - * @param string|null $filename This string may be used to store the file. - * @param boolean $private To store the file in a private space. - * @return string - * @throws \RuntimeException If file copy fails. - * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh - */ - public static function storeFile( - Model $model, - $file, - bool $slugify = false, - string $filename = null, - bool $private = false - ): string { - // phpcs:enable - $tableName = $model->getTable(); - if (\is_object($file) and $file instanceof \Illuminate\Http\UploadedFile) { - /** @var \Illuminate\Http\UploadedFile $file */ - $filename = $filename ?: $file->getClientOriginalName(); - $filename = $slugify ? self::slugifyFileName($filename) : $filename; - $newPath = self::prepareMoveFile($tableName, $filename, $private); - $newPath = str_replace(storage_path('app'), '', $newPath); - - if (!$private) { - // * Store public file. - $file->storePubliclyAs( - pathinfo($newPath, \PATHINFO_DIRNAME), - pathinfo($newPath, \PATHINFO_BASENAME) - ); - return 'storage' . str_replace('/public', '', $newPath); - } - - $file->storeAs( - pathinfo($newPath, \PATHINFO_DIRNAME), - pathinfo($newPath, \PATHINFO_BASENAME) - ); - - return str_replace('/private/', '', $newPath); - } //end if - if (\is_object($file) and $file instanceof \SplFileInfo) { - /** @var \SplFileInfo $file */ - $filename = $filename ?: $file->getBaseName(); - $filename = $slugify ? self::slugifyFileName($filename) : $filename; - $newPath = self::prepareMoveFile($tableName, $filename, $private); - if (!File::copy($file->getRealPath(), $newPath)) { - throw new \RuntimeException(sprintf( - 'Failed to copy file %s to %s', - $file->getRealPath(), - $newPath - )); - } - return $private ? - \ltrim(str_replace(\storage_path('app/private'), '/storage/app/private', $newPath), '/') : - \ltrim(str_replace(\storage_path('app/public'), '/storage', $newPath), '/'); - } - return strval($file); - } - - /** - * Store all files from string attribute html - * If oldHtmlString is passed, a diff is done with new and old files - * to keep only files that are present in the new html string. - * - * @param \Illuminate\Database\Eloquent\Model $model The model that will hold the picture. - * @param string $htmlString The html string to parse and modify files. - * @param string|null $oldHtmlString The old html string with alreadyParsed - * files using storeModelFilesFromHtml. - * @return string Html with files pathes replaced using storage strategy. - */ - public static function storeModelFilesFromHtml( - Model $model, - string $htmlString, - string $oldHtmlString = null - ): string { - \collect(self::onlyUploadedFilesWithFileManager(self::findFilesInHtml($htmlString))) - ->each(function (string $path) use ($model, &$htmlString) { - /** @var \Illuminate\Filesystem\FilesystemAdapter */ - $disk = Storage::disk('uploads'); - $fileInfo = new \SplFileInfo($disk->path( - ToolboxHelper::mbReplace('/uploads/', '', \urldecode($path)) - )); - $htmlString = ToolboxHelper::mbReplace( - $path, - '/' . self::storeFile($model, $fileInfo, true), - $htmlString - ); - }); - - if ($oldHtmlString) { - self::removeOldModelFilesFromHtml($htmlString, $oldHtmlString); - } - - return $htmlString; - } - - /** - * Remove all old files from string attribute html that are stored in public that - * are nove present anymore on new html string - * - * @param string $newHtmlString The html string with alreadyParsed files using storeModelFilesFromHtml. - * @param string $oldHtmlString The old html string with alreadyParsed files using storeModelFilesFromHtml. - * @return void - */ - public static function removeOldModelFilesFromHtml(string $newHtmlString, string $oldHtmlString): void - { - self::removeOldFiles(self::findFilesInHtml($oldHtmlString), self::findFilesInHtml($newHtmlString)); - } - - /** - * Remove all old files that are stored in public that - * are not present anymore on new array files - * - * @param string[] $oldFiles The old array files. - * @param string[] $newFiles The new array files. - * @return void - */ - public static function removeOldFiles(array $oldFiles, array $newFiles): void - { - $oldFiles = \collect(self::onlyUploadedFilesWithFileStorageHelper($oldFiles)); - $filesToKeep = \collect(self::onlyUploadedFilesWithFileStorageHelper($newFiles)); - $filesToRemove = $oldFiles->diff($filesToKeep); - $filesToRemove->each(function (string $publicStorageFilePath) { - $path = ToolboxHelper::mbReplace('storage/', '', \ltrim(\urldecode($publicStorageFilePath), '/')); - if (Storage::disk('public')->exists($path)) { - Storage::disk('public')->delete($path); - } - }); - } - - /** - * Remove all files from string attribute html that are stored in public - * - * @param string $htmlString The html string with alreadyParsed files using storeModelFilesFromHtml. - * @return void - */ - public static function removeModelFilesOfHtml(string $htmlString): void - { - $filesToRemove = \collect(self::onlyUploadedFilesWithFileStorageHelper(self::findFilesInHtml($htmlString))); - $filesToRemove->each(function (string $publicStorageFilePath) { - $path = ToolboxHelper::mbReplace('storage/', '', \ltrim(\urldecode($publicStorageFilePath), '/')); - if (Storage::disk('public')->exists($path)) { - Storage::disk('public')->delete($path); - } - }); - } - - /** - * Find all occurence of files in html - * - * @param string $html - * @return array - */ - public static function findFilesInHtml(string $html): array - { - preg_match_all('/href="(?P.*)"|src="(?P.*)"|url="(?P.*)"/Um', $html, $m, PREG_SET_ORDER, 0); - return collect($m)->pluck('href')->filter() - ->concat(collect($m)->pluck('url')->filter()) - ->concat(collect($m)->pluck('src')->filter()) - ->all(); - } - - /** - * Filter array to get only uploaded files that exists - * on disk 'public' (using helper storage strategy) - * - * @param array $urls - * @return array - */ - public static function onlyUploadedFilesWithFileStorageHelper(array $urls): array - { - return \collect($urls)->unique() - // * Filter to get only /uploads and using app url or empty - ->filter(function (string $url) { - $path = \parse_url($url, \PHP_URL_PATH); - return \strpos(\ltrim($path, '/'), 'storage/modelfiles') === 0; - })->filter(function (string $url) { - $path = \parse_url($url, \PHP_URL_PATH); - return Storage::disk('public') - ->exists(ToolboxHelper::mbReplace('storage/', '', \ltrim(\urldecode($path), '/'))); - })->all(); - } - - /** - * Filter array to get only uploaded files that exists - * on disk 'uploads' - * - * @param array $urls - * @return array - */ - private static function onlyUploadedFilesWithFileManager(array $urls): array - { - return \collect($urls)->unique() - // * Filter to get only /uploads and using app url or empty - ->filter(function (string $url) { - $host = \parse_url($url, \PHP_URL_HOST); - $path = \parse_url($url, \PHP_URL_PATH); - return ($host === \parse_url(config('app.url'), PHP_URL_HOST) or \is_null($host)) and - \strpos(\ltrim($path, '/'), 'uploads') === 0; - })->filter(function (string $url) { - $path = \parse_url($url, \PHP_URL_PATH); - return Storage::disk('uploads') - ->exists(ToolboxHelper::mbReplace('uploads/', '', \ltrim(\urldecode($path), '/'))); - })->all(); - } - - /** - * Prepare storage path and return - * the file full path - * - * @param string $tableName Model table name. - * @param string $filename The basename for the file. - * @param boolean $private May the file be stored in a private dir. - * @return string - */ - private static function prepareMoveFile(string $tableName, string $filename, bool $private = false): string - { - // * Security filter - $filename = \htmlspecialchars($filename); - // * Security filter + beautifier - $filename = self::sanitizeFileName($filename); - // * Slugify filename - $ext = \pathinfo($filename, \PATHINFO_EXTENSION); - $filename = Str::slug(\pathinfo($filename, \PATHINFO_FILENAME)) . - (\strlen($ext) ? ".{$ext}" : ''); - - $folderPath = self::getStoragePath( - $private ? 'app/private/modelfiles' : 'app/public/modelfiles', - $tableName, - $filename, - $private - ); - $filename = self::getFileUniqueName($folderPath, $filename); - return "{$folderPath}/{$filename}"; - } - - /** - * Create sub folders to store files using pattern - * storage/modelfiles/posts/10/04/19/5f - * year/month/day/md5 first 2 letters - * - * @param string $storage_dir - * @param string $table - * @param string $filename - * @return string - */ - private static function getStoragePath(string $storage_dir, string $table, string $filename): string - { - $filenameHash = \md5($filename); - $pathFolder = \storage_path(sprintf( - '%s/%s/%s/%s/%s/%s', - $storage_dir, - $table, - gmdate('y'), - gmdate('m'), - gmdate('d'), - substr($filenameHash, 0, 2) - )); - if (!File::exists($pathFolder)) { - File::makeDirectory($pathFolder, 0755, true); - } - return $pathFolder; - } - - /** - * Get unique filename if the path is already occupied - * - * @param string $folderPath - * @param string $filename - * @return string - * @throws \RuntimeException If a unique filename cannot be obtained. - */ - private static function getFileUniqueName(string $folderPath, string $filename): string - { - $attempts = 0; - $maxAttempts = 20; - while (File::exists("{$folderPath}/{$filename}")) { - if ($attempts++ >= $maxAttempts) { - throw new \RuntimeException("Failed to have a unique filename for {$folderPath}/{$filename}"); - } - $filename = pathinfo($filename, \PATHINFO_FILENAME) . - \uniqid('-') . '.' . - pathinfo($filename, \PATHINFO_EXTENSION); - } - return $filename; - } - - /** - * Slugify the filename - * - * @param string $filename - * @return string - */ - public static function slugifyFileName(string $filename): string - { - return Str::slug(pathinfo($filename, \PATHINFO_FILENAME)) . '.' . pathinfo($filename, \PATHINFO_EXTENSION); - } - - /** - * Sanitize File name for uploaded files - * - * @param string $filename The original uploaded client file name. - * @param boolean $beautify Beautify the filename. - * @return string The sanitized file name. - */ - public static function sanitizeFileName(string $filename, bool $beautify = true): string - { - // * Sanitize filename - // phpcs:disable Generic.Files.LineLength.TooLong - $filename = preg_replace( - '~ - [<>:"/\\\|?*]| # file system reserved https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words - [\x00-\x1F]| # control characters http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx - [\x7F\xA0\xAD]| # non-printing characters DEL, NO-BREAK SPACE, SOFT HYPHEN - [#\[\]@!$&\'()+,;=]| # URI reserved https://tools.ietf.org/html/rfc3986#section-2.2 - [{}^\~`] # URL unsafe characters https://www.ietf.org/rfc/rfc1738.txt - ~x', - '-', - $filename - ); - // phpcs:enable - // * Avoids '.' '..' or '.hiddenFiles' . - $filename = Str::of($filename)->ltrim('.-'); - // * Optional beautification - if ($beautify) { - $filename = static::beautifyFilename($filename); - } - // * Maximize filename length to 255 bytes http://serverfault.com/a/9548/44086 - /** @var string */ - $extension = pathinfo($filename, \PATHINFO_EXTENSION); - /** @var string */ - $filename = pathinfo($filename, \PATHINFO_FILENAME); - - $encoding = mb_detect_encoding($filename); - $encoding = $encoding ? $encoding : null; - return \mb_strcut( - $filename, - 0, - 255 - (!empty($extension) ? strlen($extension) + 1 : 0), - $encoding - ) . (!empty($extension) ? ".$extension" : ''); - } - - /** - * Beautify a filename - * - * @param string $filename - * @return string - */ - private static function beautifyFilename(string $filename): string - { - // Reduce consecutive characters. - $filename = preg_replace([ - // * "file name.zip" becomes 'file-name.zip' - '/ +/', - // * "file___name.zip" becomes 'file-name.zip' - '/_+/', - // * "file---name.zip" becomes 'file-name.zip' - '/-+/' - ], '-', $filename); - $filename = preg_replace([ - // * "file--.--.-.--name.zip" becomes "file.name.zip" - '/-*\.-*/', - // * "file...name..zip" becomes "file.name.zip" - '/\.{2,}/' - ], '.', $filename); - // Lowercase for windows/unix interoperability http://support.microsoft.com/kb/100625 . - $filename = mb_strtolower($filename, mb_detect_encoding($filename)); - // * ".file-name.-" becomes "file-name" - $filename = trim($filename, '.-'); - return $filename; - } -} diff --git a/app/Lib/Helpers/ToolboxHelper.php b/app/Lib/Helpers/ToolboxHelper.php deleted file mode 100644 index 507eadc..0000000 --- a/app/Lib/Helpers/ToolboxHelper.php +++ /dev/null @@ -1,564 +0,0 @@ -[^\s@]+@([^\s@.,]+\.)+[^\s@.,]{2,})|(?P@\w*)|(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', - function ($matches) { - $match = collect($matches)->first() ?? ''; - if (filter_var($match, FILTER_VALIDATE_EMAIL)) { - return strlen($match) ? "$match" : $match; - } elseif (isset($matches['user']) and strlen($matches['user'])) { - return sprintf( - '%s', - $matches['user'] - ); - } else { - $url = $match; - if (\strpos($url, 'http') === false and \strpos($url, 'https') === false) { - $url = sprintf( - '%s://%s', - config('app.env') !== 'local' ? 'https' : 'http', - $url - ); - } - $fsligthbox = self::isImageFile($url) ? 'data-fslightbox="gallery"' : ''; - return strlen($match) ? "$match" : $match; - } - }, - $text - ); - return nl2br($text); - } - - /** - * Check uri points to image file - * - * @param string $url - * @return boolean - */ - public static function isImageFile(string $url): bool - { - $m = []; - return \preg_match('/(\.png|\.jpg|\.jpeg|\.gif)$/', $url, $m) === 1; - } - - /** - * Check uri points to pdf file - * - * @param string $url - * @return boolean - */ - public static function isPdfFile(string $url): bool - { - $m = []; - return \preg_match('/(\.pdf)$/', $url, $m) === 1; - } - - /** - * Strip scheme (https) on oembed urls - * Only embed allowed are for MP4 self hosted videos right now - * - * https is force by ckeditor MediaElements which natively supports - * only cloud hosted medias (youtube, spotify etc..) - * - * @param string $input - * @return string - */ - public static function stripCkEditorSchemesOnMediaInputs(string $input): string - { - $input = \preg_replace('/(?<=)/m', '', $input); - return $input; - } - - /** - * Assert That no Back Office url is present on txt - * - * @param string $field - * @param string $text - * @return string - * @throws \Illuminate\Validation\ValidationException If url is a bo url. - */ - public static function assertNoInternalBoUrls(string $field, string $text): string - { - $routes = Route::getRoutes(); - // * Url replace and email replace. - $text = preg_replace_callback( - // phpcs:ignore Generic.Files.LineLength.TooLong - '/(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', - function ($matches) use ($routes, $field) { - $match = collect($matches)->first() ?? ''; - $url = $match; - try { - $request = Request::create($url); - // If a route is match then it do not throws exception. - if ( - \parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST) && - trim($routes->match($request)->getPrefix() ?? '', '/') === 'bo' - ) { - // Removes the matched url. - throw ValidationException::withMessages([ - $field => trans( - 'crud.libs.toolbox.assertNoInternalBoUrls', - ['attribute' => $field] - ) - ]); - } - return $match; - } catch (NotFoundHttpException $e) { - return $match; - } - }, - $text - ); - return $text; - } - - /** - * Assert That only external url is present on txt - * - * @param string $field - * @param string $text - * @return string - * @throws \Illuminate\Validation\ValidationException If url is a bo url. - */ - public static function assertNoInternalUrls(string $field, string $text): string - { - self::assertNoInternalBoUrls($field, $text); - $routes = Route::getRoutes(); - // * Url replace and email replace. - $text = preg_replace_callback( - // phpcs:ignore Generic.Files.LineLength.TooLong - '/(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', - function ($matches) use ($routes, $field) { - $match = collect($matches)->first() ?? ''; - $url = $match; - try { - $request = Request::create($url); - // If a route is match then it do not throws exception. - if ( - \parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST) && - $routes->match($request) - ) { - // Removes the matched url. - throw ValidationException::withMessages([ - $field => trans( - 'crud.libs.toolbox.assertNoInternalUrls', - ['attribute' => $field, 'appname' => config('app.name')] - ) - ]); - } - return $match; - } catch (NotFoundHttpException $e) { - return $match; - } - }, - $text - ); - return $text; - } - - /** - * Assert Is Unique - * - * @param \Illuminate\Database\Eloquent\Model $model - * @param array $columns - * @return void - * @throws \Illuminate\Validation\ValidationException If a model like this already exists. - */ - public static function assertIsUnique(Model $model, array $columns): void - { - $columns = collect($columns); - /** @var string|null */ - $firstColumn = $columns->pull($columns->keys()->first()); - if (!$firstColumn) { - return; - } - $modelClass = \get_class($model); - $uniqueRule = Rule::unique((new $modelClass())->getTable()); - if ($model->id) { - $uniqueRule->ignore($model->id); - } - $uniqueRule->where(function ($q) use ($model, $columns) { - $columns->map(function (string $column) use ($model, $q) { - $q->where($column, $model->{$column}); - }); - }); - Validator::make([$firstColumn => $model->{$firstColumn}], [ - $firstColumn => ['required', $uniqueRule] - ])->validate(); - } - - /** - * @param array $array1 - * @param array $array2 - * - * @return array - */ - public static function arrayMergeRecursiveDistinct(array &$array1, array &$array2): array - { - $merged = $array1; - foreach ($array2 as $key => &$value) { - if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { - $merged[$key] = self::arrayMergeRecursiveDistinct($merged[$key], $value); - } else { - $merged[$key] = $value; - } - } - - return $merged; - } - - /** - * Mutltibyte string replace - * - * @param array|string $search - * @param array|string $replace - * @param array|string $subject - * @param integer $count - * @return array|string - */ - public static function mbReplace( - array|string $search, - array|string $replace, - array|string $subject, - int &$count = 0 - ): array|string { - if (!is_array($search) && is_array($replace)) { - return false; - } - if (is_array($subject)) { - // Call mb_replace for each single string in $subject . - foreach ($subject as &$string) { - $string = &self::mbReplace($search, $replace, $string, $count); - } - } elseif (is_array($search)) { - if (!is_array($replace)) { - foreach ($search as &$string) { - $subject = self::mbReplace($string, $replace, $subject, $count); - } - } else { - $n = max(count($search), count($replace)); - while ($n--) { - $subject = self::mbReplace(current($search), current($replace), $subject, $count); - next($search); - next($replace); - } - } - } else { - $parts = mb_split(preg_quote($search), $subject); - $count = count($parts) - 1; - $subject = implode($replace, $parts); - } //end if - return $subject; - } - - /** - * Asserts that the field is unique - * - * @param string $table - * @param string $field - * @param string|integer|float|boolean|null|array $value - * @param integer|null $id - * @param callable|null $query - * @return void - * @throws \Illuminate\Validation\ValidationException If the field is not unique. - */ - public static function assertFieldIsUnique( - string $table, - string $field, - string|int|float|bool|null|array $value, - ?int $id = null, - ?callable $query = null - ) { - if (!$query) { - Validator::make([$field => $value], [ - self::mbReplace('.', '\.', $field) => Rule::unique($table, $field)->ignore($id), - ], [ - self::mbReplace('.', '\.', "{$field}.unique") - => trans('crud.libs.toolbox.assertFieldIsUnique', ['attribute' => $field, 'value' => $value]) - ])->validate(); - return; - } - Validator::make([$field => $value], [ - $field => Rule::unique($table)->where($query)->ignore($id), - ], [ - $field . '.unique' => trans( - 'crud.libs.toolbox.assertFieldIsUnique', - ['attribute' => $field, 'value' => $value] - ) - ])->validate(); - } - - /** - * Get original polyfill with autotranslate behavior - * - * @param \Illuminate\Database\Eloquent\Model $model - * @param string $attribute - * @return mixed - */ - public static function getOriginal(Model $model, string $attribute): mixed - { - if (\in_array('Spatie\Translatable\HasTranslations', \class_uses_recursive($model))) { - return $model->getTranslation( - $attribute, - $model->getLocale(), - $model->useFallbackLocale() - ); - } - return $model->getOriginal($attribute); - } - - /** - * Dynamic model query - * - * @param string $defaultLocale - * @param \Illuminate\Contracts\Database\Eloquent\Builder $q - * @param string $column - * @param string $value - * @return \Illuminate\Contracts\Database\Eloquent\Builder - */ - public static function queryColumnWithLocales( - string $defaultLocale, - Builder $q, - string $column, - string $value - ): Builder { - $currentLocale = app()->currentLocale(); - $locales = collect(config('app.locales')) - ->mapWithKeys(fn(string $locale) => [$locale => $locale]); - if (!$locales->has($defaultLocale)) { - // * Remove default locale. - $locales->pull($defaultLocale); - } - if (!$locales->has($currentLocale)) { - // * Remove current locale. - $locales->pull($currentLocale); - } - - return $q->where(function (Builder $q) use ($defaultLocale, $currentLocale, $locales, $column, $value) { - // * Query default locale - $q->whereRaw("JSON_EXTRACT({$column}, '$.{$defaultLocale}') = '{$value}'"); - if ($defaultLocale !== $currentLocale) { - // * Query current locale - $q->whereRaw("JSON_EXTRACT({$column}, '$.{$currentLocale}') = '{$value}'"); - } - // * Query any other locale - $locales->each(fn($locale) => $q->orWhereRaw( - "JSON_EXTRACT({$column}, '$.{$locale}') = '{$value}'" - )); - }); - } - - /** - * Generates an array from a dot separated string - * - * @param string $path - * @param mixed $value - * @param string $separator - * @return array - */ - public static function dotStringToNestedArray(string $path, mixed $value, string $separator = '.'): array - { - $arr = $value; - $keys = array_reverse(explode($separator, $path)); - - foreach ($keys as $key) { - $arr = [$key => $arr]; - } - return $arr; - } - - /** - * Convert deeply an object to array - * - * @param array|object $input - * @return array - * @throws \RuntimeException If $input var is a scalar value. - */ - public static function objectToArray($input): array - { - // Only process if it's an object or array being passed to the function. - if (is_object($input) or is_array($input)) { - $ret = (array)$input; - foreach ($ret as &$item) { - // Recursively process EACH element only if not scalar. - $item = (is_object($item) or is_array($item)) ? - self::objectToArray($item) : $item; - } - return $ret; - } else { - throw new \RuntimeException('Cannot handle $input of type ' . \gettype($input)); - } - } - - /** - * Convert deeply an array to object - * - * @param array|object $input - * @return object - * @throws \RuntimeException If $input var is a scalar value. - */ - public static function arrayToObject($input): object - { - // Only process if it's an object or array being passed to the function. - if (is_object($input) or is_array($input)) { - $ret = (object)$input; - foreach ($ret as &$item) { - // Recursively process EACH element only if not scalar. - $item = (is_object($item) or is_array($item)) ? - self::arrayToObject($item) : $item; - } - return $ret; - } else { - throw new \RuntimeException('Cannot handle $input of type ' . \gettype($input)); - } - } - - /** - * Validate picture - * - * @param string $attribute - * @param string|null $value - * @param callback $fail - * @param object $sizes - * @return void - */ - public static function validatePicture(string $attribute, string|null $value, callable $fail, object $sizes) - { - if (!($useStorage = Storage::exists($value)) and !File::exists($value)) { - $fail(trans(':attribute n\'existe pas dans le système de fichier', [ - 'attribute' => $attribute - ])); - return; - } - /** @var string */ - $fileFullPath = self::getUploadedFileFullPath($value, $useStorage); - if ( - !\in_array(self::getUploadedFileMimeType($value, $useStorage), [ - 'image/jpeg', - 'image/jpg', - 'image/png', - 'image/gif' - ]) - ) { - $fail(trans(':attribute doit être une image de type \'image/jpeg,image/jpg,image/png,image/gif\'', [ - 'attribute' => $attribute - ])); - } - if (!($dimensions = \getimagesize($fileFullPath)) or !isset($dimensions[0]) or !isset($dimensions[1])) { - $fail(trans(':attribute impossible de valider les dimensions', [ - 'attribute' => $attribute - ])); - } else { - $width = intval($dimensions[0]); - $height = intval($dimensions[1]); - - $xMessage = trans( - ":attribute la largeur doit être comprise entre {$sizes->minWith}px et {$sizes->maxWith}px" - ); - if ($sizes->minWith === $sizes->maxWith) { - $xMessage = trans(":attribute la largeur doit être de {$sizes->minWith}px"); - } - $yMessage = trans( - ":attribute la hauteur doit être comprise entre {$sizes->minWith}px et {$sizes->maxWith}px" - ); - if ($sizes->minHeight === $sizes->maxHeight) { - $yMessage = trans(":attribute la hauteur doit être de {$sizes->minWith}px"); - } - - if (($width < $sizes->minWith) or ($width > $sizes->maxWith)) { - $fail($xMessage); - } - if (($height < $sizes->minHeight) or ($height > $sizes->maxHeight)) { - $fail($yMessage); - } - } //end if - } - - /** - * Get the file full path - * - * @param string $value - * @param boolean $useStorage - * @return string - */ - private static function getUploadedFileFullPath(string $value, bool $useStorage): string - { - /** @var \Illuminate\Filesystem\FilesystemAdapter */ - $disk = Storage::disk(); - return !$useStorage ? (realpath($value) ?: $value) : $disk->path($value); - } - - /** - * Get the file mimetype - * - * @param string $value - * @param boolean $useStorage - * @return string|false - */ - private static function getUploadedFileMimeType(string $value, bool $useStorage) - { - return !$useStorage ? File::mimeType($value) : Storage::mimeType($value); - } - - /** - * Return a json in a good format for schedule. - * - * @param \Illuminate\Pagination\LengthAwarePaginator $collectionPaginated - * @param mixed $formatFunction - * @return \Illuminate\Http\JsonResponse - */ - public static function jsonPaginate( - LengthAwarePaginator $collectionPaginated, - mixed $formatFunction = null - ): \Illuminate\Http\JsonResponse { - $collectionFormatted = $collectionPaginated->getCollection() - ->map(function (Model $model) use ($formatFunction) { - $model->name = $formatFunction ? $model->$formatFunction($model) : $model->name; - $model->label = $formatFunction ? $model->$formatFunction($model) : $model->name; - $model->value = $model->id; - return $model; - }); - - $models = new \Illuminate\Pagination\LengthAwarePaginator( - $collectionFormatted, - $collectionPaginated->total(), - $collectionPaginated->perPage(), - $collectionPaginated->currentPage(), - [ - 'path' => config('app.url') . '/' . request()->path(), - 'query' => [ - 'page' => $collectionPaginated->currentPage() - ] - ] - ); - - return \response()->json($models ?? 500); - } -} diff --git a/app/Listeners/AddStatusMessages.php b/app/Listeners/AddStatusMessages.php deleted file mode 100644 index 1edf542..0000000 --- a/app/Listeners/AddStatusMessages.php +++ /dev/null @@ -1,103 +0,0 @@ -ticket_id = $event->ticket->id; - // * Le message system est privé si demandé (eg: Assignation à une personne). - $message->type = $event->is_private ? MessageTypeEnum::private : MessageTypeEnum::public; - if ($event->message) { - $message->message = $event->message; - } elseif ($event->user) { - $message->message = sprintf( - "%s %s %s", - $event->user->name, - trans('a modifié le statut en'), - $event->ticket->status->label() - ); - } else { - $message->message = sprintf( - "%s : %s", - trans('Le statut est passé à'), - $event->ticket->status->label() - ); - } - if ($event->status_changed) { - switch ($event->ticket->status) { - case TicketStatusEnum::new: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Votre ticket a été créé, nous allons en prendre connaissance.') - ); - break; - case TicketStatusEnum::estimateTodo: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Votre ticket nécessite une estimation, nous allons vous proposer un devis.') - ); - break; - case TicketStatusEnum::takenInAccount: - $message->message .= sprintf("
" . - trans('Votre ticket est dans le processus de traitement.') . "
"); - break; - case TicketStatusEnum::waiting: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Nous attendons une réponse de votre part pour procéder à la suite du traitement.') - ); - break; - case TicketStatusEnum::waitingValidation: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Nous attendons une validation de votre part pour procéder au traitement.') - ); - break; - case TicketStatusEnum::recette: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Le traitement à été réalisé et mis à disposition sur la plateforme de recette. - Vous pouvez vérifier que la solution mise en œuvre correspond à la demande.') - ); - break; - case TicketStatusEnum::production: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('La solution à été mise en ligne. - Vous pouvez vérifier sur le site de production que tout fonctionne comme attendu.') - ); - break; - case TicketStatusEnum::archived: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Ce ticket est clos.') - ); - break; - } //end switch - } //end if - $message->save(); - } -} diff --git a/app/Listeners/SendNotificationMailToAdmin.php b/app/Listeners/SendNotificationMailToAdmin.php deleted file mode 100644 index 8498763..0000000 --- a/app/Listeners/SendNotificationMailToAdmin.php +++ /dev/null @@ -1,23 +0,0 @@ -ticket; - Mail::to(config('mail.MAIL_ADMIN')) - ->send(new TicketUpdate($ticket, $event->corpsMaj)); - } -} diff --git a/app/Listeners/SendNotificationMailToTicketCreator.php b/app/Listeners/SendNotificationMailToTicketCreator.php deleted file mode 100644 index edd52b6..0000000 --- a/app/Listeners/SendNotificationMailToTicketCreator.php +++ /dev/null @@ -1,23 +0,0 @@ -ticket; - Mail::to($ticket->user()->withTrashed()->first()->email) - ->send(new TicketUpdate($ticket, $event->corpsMaj)); - } -} diff --git a/app/Listeners/SendSubscriptionsNotificationsMail.php b/app/Listeners/SendSubscriptionsNotificationsMail.php deleted file mode 100644 index 1f46865..0000000 --- a/app/Listeners/SendSubscriptionsNotificationsMail.php +++ /dev/null @@ -1,37 +0,0 @@ -email ?? ''; - $ignoreUsers = $event->ignoreUsers ?? collect(); - foreach ($event->ticket->subscriptions as $sub) { - if ( - // * Ignore the message author (job in sync). - $sub->email !== $ignoreConnectedUserEmail and - // * Are there are users to notify - !$ignoreUsers->filter(function (User $user) use ($sub) { - return $user->email === $sub->email; - })->count() - ) { - Mail::to($sub->email) - ->send(new TicketUpdate($event->ticket, $event->corpsMaj)); - } - } - } -} diff --git a/app/Mail/NewTicket.php b/app/Mail/NewTicket.php deleted file mode 100644 index 70078e3..0000000 --- a/app/Mail/NewTicket.php +++ /dev/null @@ -1,40 +0,0 @@ -ticket = $ticket; - } - - /** - * Build the message. - * - * @return $this - */ - public function build() - { - $ticket = $this->ticket; - return $this->subject("[Support] Nouveau ticket n° $ticket->id - $ticket->title") - ->view('emails.new-ticket', compact('ticket')); - } -} diff --git a/app/Mail/TicketMention.php b/app/Mail/TicketMention.php deleted file mode 100644 index 0834c00..0000000 --- a/app/Mail/TicketMention.php +++ /dev/null @@ -1,47 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - } - - /** - * Build the message. - * - * @return $this - */ - public function build() - { - $ticket = $this->ticket; - $corpsMaj = ToolboxHelper::plainToHtml($this->corpsMaj); - return $this->subject("[Support] Vous avez été mentionné sur le ticket n°$ticket->id - $ticket->title") - ->view('emails.ticket-mention', compact('ticket', 'corpsMaj')); - } -} diff --git a/app/Mail/TicketUpdate.php b/app/Mail/TicketUpdate.php deleted file mode 100644 index 3aafc3d..0000000 --- a/app/Mail/TicketUpdate.php +++ /dev/null @@ -1,47 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - } - - /** - * Build the message. - * - * @return $this - */ - public function build() - { - $ticket = $this->ticket; - $corpsMaj = \html_entity_decode(ToolboxHelper::plainToHtml($this->corpsMaj)); - return $this->subject("[Support][{$ticket->site->name}] Ticket n°$ticket->id - $ticket->title") - ->view('emails.ticket-update', compact('ticket', 'corpsMaj')); - } -} diff --git a/app/Mail/UserCreatedMail.php b/app/Mail/UserCreatedMail.php deleted file mode 100644 index 0019e4e..0000000 --- a/app/Mail/UserCreatedMail.php +++ /dev/null @@ -1,38 +0,0 @@ -user = $user; - } - - /** - * Build the message. - * - * @return $this - */ - public function build() - { - return $this - ->subject(sprintf('%s : Votre compte a été crée', config('app.name'))) - ->view('emails.mail-created') - ->text('emails.mail-created-plain') - ->with('user', $this->user) - ->with('pwd', $this->user->tmpPass); - } -} diff --git a/app/Models/Brand.php b/app/Models/Brand.php deleted file mode 100644 index b5513db..0000000 --- a/app/Models/Brand.php +++ /dev/null @@ -1,80 +0,0 @@ -sites) { - foreach (request()->sites as $siteId) { - $site = Site::where('id', $siteId)->firstOrFail(); - $site->brand_id = $brand->id; - $site->saveOrFail(); - } - } - } - - /** - * Delete all sites with the relationship. - * - * @param \App\Models\Brand $brand - * @return void - */ - public static function deleteSites(Brand $brand): void - { - foreach ($brand->sites as $site) { - $site->brand_id = null; - $site->saveOrFail(); - } - } - - // * RELATIONSHIPS - - /** - * HasMany Site relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function sites() - { - return $this->hasMany(Site::class); - } - - /** - * HasMany Account relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function accounts() - { - return $this->hasMany(Account::class); - } -} diff --git a/app/Models/Company.php b/app/Models/Company.php deleted file mode 100644 index 63cd49d..0000000 --- a/app/Models/Company.php +++ /dev/null @@ -1,55 +0,0 @@ -hasMany(Invoice::class); - } - - /** - * Return value attribute for belongsto search component - * - * @return \Illuminate\Database\Eloquent\Casts\Attribute - */ - protected function value(): Attribute - { - return new Attribute( - get: fn () => $this->id, - ); - } -} diff --git a/app/Models/Credit/Account.php b/app/Models/Credit/Account.php deleted file mode 100644 index 865b6da..0000000 --- a/app/Models/Credit/Account.php +++ /dev/null @@ -1,78 +0,0 @@ - AccountTypeEnum::class - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::deleting(function () { - throw new \Error('Action impossible'); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsTo Brand relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function brand() - { - return $this->belongsTo(Brand::class); - } - - /** - * HasOne Account relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasOne - */ - public function creditlogs() - { - return $this->HasOne(CreditLog::class, 'credit_account_id'); - } -} diff --git a/app/Models/Credit/CreditLog.php b/app/Models/Credit/CreditLog.php deleted file mode 100644 index dc8c250..0000000 --- a/app/Models/Credit/CreditLog.php +++ /dev/null @@ -1,88 +0,0 @@ - BalanceOperationEnum::class - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (self $model) { - $model->created_at = now(); - if ($model->type->equals(BalanceOperationEnum::debit)) { - $model->account->balance = $model->account->balance - $model->amount; - } - if ($model->type->equals(BalanceOperationEnum::credit)) { - $model->account->balance = $model->account->balance + $model->amount; - } - $model->account->saveOrFail(); - }); - static::deleting(function () { - throw new \Error('Action impossible'); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsToMany estimation relation (1 nullable) - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function estimation() - { - return $this->belongsToMany(Estimation::class, EstimationLog::class, 'credit_log_id', 'credit_estimation_id') - ->withTimestamps(); - } - - /** - * BelongsTo account relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function account() - { - return $this->belongsTo(Account::class, 'credit_account_id'); - } -} diff --git a/app/Models/Credit/Estimation.php b/app/Models/Credit/Estimation.php deleted file mode 100644 index 2069164..0000000 --- a/app/Models/Credit/Estimation.php +++ /dev/null @@ -1,105 +0,0 @@ - EstimationStatusEnum::class - ]; - - /** - * The table associated with the model. - * - * @var string - */ - protected $table = 'credit_estimations'; - - /** - * The attributes that are mass assignable. - * - * @var array - */ - protected $fillable = [ - 'amount', 'status', 'credit_account_id' - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::updating(function (self $model) { - if (!$model->original['validator_id'] !== $model->validator_id) { - $log = new CreditLog(); - $log->account()->associate($model->account); - $log->type = BalanceOperationEnum::debit; - $log->amount = $model->amount; - $log->saveOrFail(); - $log->estimation()->sync([$model->id]); - } - if ($model->status->equals(EstimationStatusEnum::pending)) { - throw ValidationException::withMessages([trans('Impossible de modifier une estimation')]); - } - }); - } - - - // * RELATIONSHIPS - - /** - * BelongsTo Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function ticket() - { - return $this->belongsTo(Ticket::class); - } - - /** - * BelongsTo Credit\Account relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function account() - { - return $this->belongsTo(Account::class, 'credit_account_id'); - } - - /** - * BelongsTo User relation - * The use who created the estimate - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function estimator() - { - return $this->belongsTo(User::class, 'estimator_id'); - } - - /** - * BelongsTo User relation (nullable) - * The use who validated the estimate - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function validator() - { - return $this->belongsTo(User::class, 'validator_id'); - } -} diff --git a/app/Models/Credit/EstimationLog.php b/app/Models/Credit/EstimationLog.php deleted file mode 100644 index d2d6c57..0000000 --- a/app/Models/Credit/EstimationLog.php +++ /dev/null @@ -1,15 +0,0 @@ -belongsToMany(GitlabLabels::class, 'gitlab_issues_labels', 'issue_id', 'label_id') - ->withTimestamps(); - } -} diff --git a/app/Models/GitlabLabels.php b/app/Models/GitlabLabels.php deleted file mode 100644 index 4701b71..0000000 --- a/app/Models/GitlabLabels.php +++ /dev/null @@ -1,29 +0,0 @@ -belongsToMany(GitlabIssues::class, 'gitlab_issues_labels', 'label_id', 'issue_id') - ->withTimestamps(); - } -} diff --git a/app/Models/GitlabMilestones.php b/app/Models/GitlabMilestones.php deleted file mode 100644 index 36af898..0000000 --- a/app/Models/GitlabMilestones.php +++ /dev/null @@ -1,26 +0,0 @@ - InfoColorsEnum::class, - ]; - - // * EVENTS - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::created(function () { - cache()->put('infos', Information::all(), 3600); - }); - static::updated(function () { - cache()->put('infos', Information::all(), 3600); - }); - static::deleted(function () { - cache()->put('infos', Information::all(), 3600); - }); - } -} diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php deleted file mode 100644 index 6cf2c8f..0000000 --- a/app/Models/Invoice.php +++ /dev/null @@ -1,261 +0,0 @@ - 'array', - 'signed_date' => 'date', - 'sent_client_date' => 'date', - 'sent_accounting_date' => 'date', - 'status' => InvoiceStatusEnum::class, - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (self $model) { - $model->ref = \sprintf( - '%s_%s_%s', - Carbon::now()->isoFormat('YYYY-MM'), - Str::padLeft((Invoice::whereYear('created_at', Carbon::now()->isoFormat('YYYY')) - ->whereMonth('created_at', Carbon::now()->isoFormat('MM')) - ->count() + 1) ?: 1, 4, '0'), - Str::substr(Str::upper(Str::slug(Auth::user()->name)), 0, 1) - ); - $model->total_days = collect($model->tasks) - /** @var null|float $previous */ - ->reduce(function ($previous, array $task) { - return \floatval($task['days']) + \floatval($previous); - }); - $model->total = collect($model->tasks) - /** @var null|float $previous */ - ->reduce(function ($previous, array $task) { - return \floatval($task['amount']) + \floatval($previous); - }); - $model->status = InvoiceStatusEnum::opened; - }); - static::updating(function (self $model) { - $model->total_days = collect($model->tasks) - /** @var null|float $previous */ - ->reduce(function ($previous, array $task) { - return \floatval($task['days']) + \floatval($previous); - }); - $model->total = collect($model->tasks) - /** @var null|float $previous */ - ->reduce(function ($previous, array $task) { - return \floatval($task['amount']) + \floatval($previous); - }); - - if($model->sent_accounting_date && $model->status !== InvoiceStatusEnum::archived->value) { - $model->status = InvoiceStatusEnum::archived; - } - }); - static::deleting(function () { - throw new \Error('Action impossible'); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsTo Site - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function site() - { - return $this->BelongsTo(Site::class); - } - - /** - * BelongsTo Company - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function company() - { - return $this->BelongsTo(Company::class); - } - /** - * BelongsTo Company - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function companyInvoiced() - { - return $this->BelongsTo(Company::class, 'invoiced_to_id'); - } - - // * METHODS - - /** - * Get the tasks line structure skel - * - * @return array - */ - public static function getTaskStructure(): array - { - return [ - // * string - 'desc' => '', - // * usigned float - 'days' => 0, - // * Invoice\TaskTypeEnum value - 'type' => TaskTypeEnum::web, - // * usigned float - 'amount' => 0, - // * package ID if task type package or null - 'package' => null - ]; - } - - /** - * Generate Invoice - * - * @return LaravelMpdf - */ - public function generateInvoice(): LaravelMpdf - { - /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Package> */ - $packages = Package::get()->keyBy('id')->all(); - - /** @var \Mccarlosen\LaravelMpdf\LaravelMpdfWrapper */ - $mpdf = app('laravel-mpdf'); - /** @var \Mccarlosen\LaravelMpdf\LaravelMpdf */ - $pdf = $mpdf->loadView( - 'bo.pages.documents.invoice', - $this->toArray(), - [ - 'site' => $this->site, - 'company' => $this->company, - 'companyInvoiced' => $this->companyInvoiced, - 'packages' => $packages, - ], - [ - 'mode' => '', - 'format' => 'A4', - 'default_font_size' => '12', - 'default_font' => 'sans-serif', - 'margin_left' => 0, - 'margin_right' => 0, - 'margin_top' => 0, - 'margin_bottom' => 0, - 'margin_header' => 0, - 'margin_footer' => 0, - 'orientation' => 'P', - 'title' => __('Devis Équipe Web :ref', ['ref' => $this->ref]), - 'author' => 'Equipe Web', - 'watermark' => '', - 'show_watermark' => false, - 'watermark_font' => 'sans-serif', - 'display_mode' => 'fullpage', - 'watermark_text_alpha' => 0.1, - 'custom_font_dir' => '', - 'custom_font_data' => [], - 'auto_language_detection' => false, - 'temp_dir' => ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir(), - 'pdfa' => false, - 'pdfaauto' => false, - ] - ); - return $pdf; - } - - /** - * Get the invoice status array depending to the dates entered. - * - * @param \App\Models\Invoice $invoice - * @return array - */ - public static function getInvoiceStatusArray(Invoice $invoice): array - { - $invoiceStatusArray = []; - if ($invoice->signed_date && $invoice->sent_client_date && $invoice->sent_accounting_date) { - return array_merge($invoiceStatusArray, [ - InvoiceStatusEnum::toArray()['opened'], - InvoiceStatusEnum::toArray()['archived'], - ]); - } - if ($invoice->signed_date) { - return array_merge($invoiceStatusArray, [ - InvoiceStatusEnum::toArray()['opened'] - ]); - } - if ($invoice->sent_client_date) { - return array_merge($invoiceStatusArray, [ - InvoiceStatusEnum::toArray()['opened'], - InvoiceStatusEnum::toArray()['refused'], - ]); - } - return array_merge($invoiceStatusArray, [ - InvoiceStatusEnum::toArray()['opened'], - InvoiceStatusEnum::toArray()['canceled'], - ]); - } -} diff --git a/app/Models/Label.php b/app/Models/Label.php deleted file mode 100644 index 903d86c..0000000 --- a/app/Models/Label.php +++ /dev/null @@ -1,76 +0,0 @@ - HtmlColor::class, - ]; - - /** - * The attributes that are mass assignable. - * - * @var array - */ - protected $fillable = [ - 'name', - 'color' - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (self $model) { - ToolboxHelper::assertIsUnique($model, ['name']); - }); - static::updating(function (self $model) { - ToolboxHelper::assertIsUnique($model, ['name']); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsToMany Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function tickets() - { - return $this->belongsToMany(Ticket::class); - } - - /** - * BelongsTo Site relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function site() - { - return $this->belongsTo(Site::class); - } -} diff --git a/app/Models/Message.php b/app/Models/Message.php deleted file mode 100644 index c12985a..0000000 --- a/app/Models/Message.php +++ /dev/null @@ -1,137 +0,0 @@ - MessageTypeEnum::class - ]; - - /** - * The attributes that are mass assignable. - * - * @return void - */ - protected static function booted() - { - static::created(function (Message $message) { - $message->load(['user' => function ($q) { - $q->withTrashed(); - }]); - /** @var \App\Models\Ticket $ticket */ - $ticket = $message->ticket; - $ticket->last_activity = $message->updated_at; - $ticket->saveQuietly(); - if ($message->user) { - $ticket->load(['user' => function ($q) { - $q->withTrashed(); - }]); - /** @var \App\Models\User $messageUser */ - $messageUser = $message->user()->withTrashed()->firstOrFail(); - // * Send mail to mentionned users\ - /** @var \Illuminate\Support\Collection<\App\Models\User> */ - $dontNotifyUsers = $ticket->sendBeenMentionnedToUser($message); - - // * Ignorer le cas où le message est privé et l'auteur du ticket n'est pas admin. - if (!$ticket->user->isAdmin() && $message->type->equals(MessageTypeEnum::private)) { - $dontNotifyUsers->push($ticket->user); - } - - // * Filter Users if the message is private. - if ($message->type->equals(MessageTypeEnum::private)) { - $dontNotifyUsers = $dontNotifyUsers->concat( - // * Add to ignore list all non Admin users. - $ticket->subscriptions->filter(function (User $suscribedUser) { - return !$suscribedUser->isAdmin(); - }) - ); - } - // * If email has not been sen to ticket author yet. - if ( - !$dontNotifyUsers->contains(function (User $dontNotifyUser) use ($ticket) { - return $dontNotifyUser->id === $ticket->user->id; - }) and $ticket->user->id !== $messageUser->id - ) { - // * Send mail to ticket author - event(new NotifyTicketCreator( - $ticket, - trans('Nouvelle réponse de :name :
:message sur votre ticket', [ - 'name' => $messageUser->name, - 'message' => $message->message - ]) - )); - $dontNotifyUsers->push($ticket->user); - } - // ? Is message author is admin ? - if ($messageUser->isAdmin()) { - // Add subscription. - $messageUser->subscriptions()->syncWithoutDetaching([$ticket->id]); - \session()->flash('info', trans('Vous avez été inscrit.')); - } - // * Send mail to other subscribed users - event(new NotifySubscriptions( - $message->ticket, - trans('Nouvelle réponse de :name :
:message', [ - 'name' => $message->user->name, - 'message' => $message->message - ]), - $dontNotifyUsers - )); - }//end if - }); - } - - // * RELATIONSHIPS - - /** - * BelongsTo Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function ticket() - { - return $this->belongsTo(Ticket::class, 'ticket_id'); - } - - /** - * BelongsTo User relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function user() - { - return $this->belongsTo(User::class, 'user_id'); - } -} diff --git a/app/Models/Package.php b/app/Models/Package.php deleted file mode 100644 index 33c3de3..0000000 --- a/app/Models/Package.php +++ /dev/null @@ -1,43 +0,0 @@ - - */ - protected $casts = [ - 'published' => 'boolean', - ]; - -} diff --git a/app/Models/Site.php b/app/Models/Site.php deleted file mode 100644 index 3ac1f28..0000000 --- a/app/Models/Site.php +++ /dev/null @@ -1,150 +0,0 @@ -invoices()->delete(); - $site->tickets()->delete(); - }); - } - - // * METHODS - - /** - * Common methods function. - * - * @param Model $model - * @return void - */ - private static function manageFields(Model $model) - { - if ($model->url_re7) { - ToolboxHelper::assertNoInternalUrls('url_re7', $model->url_re7); - } - if ($model->url_prod) { - ToolboxHelper::assertNoInternalUrls('url_prod', $model->url_prod); - } - } - - - // * RELATIONSHIPS - - /** - * HasMany Message relation - * The users of type client that would have access to this site tickets - * - * @return \Illuminate\Database\Eloquent\Relations\belongsToMany - */ - public function users() - { - return $this->belongsToMany(User::class); - } - - /** - * HasMany Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function tickets() - { - return $this->hasMany(Ticket::class, 'site_id'); - } - - /** - * HasMany Invoices relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function invoices() - { - return $this->hasMany(Invoice::class, 'site_id'); - } - - /** - * BelongsTo Brand relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function brand() - { - return $this->belongsTo(Brand::class); - } - - /** - * BelongsTo User relation - * The project manager of the site - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function projectManager(): BelongsTo - { - return $this->belongsTo(User::class, 'project_manager_id'); - } - - /** - * Return value attribute for belongsto search component - * - * @return \Illuminate\Database\Eloquent\Casts\Attribute - */ - protected function value(): Attribute - { - return new Attribute( - get: fn () => $this->id, - ); - } -} diff --git a/app/Models/SiteUser.php b/app/Models/SiteUser.php deleted file mode 100644 index aad20c1..0000000 --- a/app/Models/SiteUser.php +++ /dev/null @@ -1,15 +0,0 @@ - 'bool', - 'type' => TicketTypeEnum::class, - 'status' => TicketStatusEnum::class, - 'date_mep' => 'date', - 'last_activity' => 'timestamp', - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (Ticket $ticket) { - self::setOrder($ticket); - // If bug force the ticket status on new. All the others are estimateTodo. - if ($ticket->type->equals(TicketTypeEnum::bug)) { - $ticket->status = TicketStatusEnum::new; - } else { - $ticket->status = TicketStatusEnum::estimateTodo; - } - }); - static::updating(function (Ticket $ticket) { - if ( - !$ticket->original['status'] !== $ticket->status->value && $ticket->original['order'] === $ticket->order - ) { - $user = auth()->user(); - - event(new TicketStatusChanged( - $ticket, - TicketStatusEnum::make($ticket->original['status']), - $user, - null, - false - )); - - $message = $user ? sprintf('%s a modifié le statut en %s', $user->name, $ticket->status->label()) : sprintf('Le statut a été modifié en %s', $ticket->status->label()); - - event(new NotifySubscriptions($ticket, $message)); - event(new NotifyAdmin($ticket, $message)); - } - if ($ticket->status->equals(TicketStatusEnum::archived)) { - self::setOrder($ticket, true); - } - }); - } - - /** - * Set order after the last element of the list. - * - * @param self $model - * @param boolean $isArchived - * @return void - */ - private static function setOrder(self $model, bool $isArchived = false): void - { - $maxOrder = \intval(self::query()->where('status', '!=', TicketStatusEnum::archived)->max('order')); - if ($isArchived) { - $request = Ticket::query() - ->where('site_id', $model->site_id) - ->whereNot('status', TicketStatusEnum::archived) - ->whereNot('id', $model->id) - ->whereBetween('order', [$model->order, $maxOrder]); - $request->decrement('order', 1); - $model->order = 0; - return; - } - $model->order = $maxOrder + 1; - } - - - // * RELATIONSHIPS - - /** - * HasOne Credit\Estimation relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasOne - */ - public function estimation() - { - return $this->hasOne(Estimation::class); - } - - /** - * BelongsTo Site relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function site() - { - return $this->belongsTo(Site::class); - } - - /** - * BelongsTo User relation - * The user that created the ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function user() - { - return $this->belongsTo(User::class, 'created_by'); - } - - /** - * BelongsTo User relation - * The user that is in charge of the ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function assignedUser() - { - return $this->belongsTo(User::class, 'assigned_to'); - } - - /** - * BelongsTo User relation - * The user that is in charge of the site linked to this ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function projectManager() - { - return $this->belongsTo(User::class, 'project_manager_id'); - } - - /** - * HasMany Message relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function messages() - { - return $this->hasMany(Message::class, 'ticket_id'); - } - - /** - * BelongsToMany User relation - * The Users that are following this ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function subscriptions() - { - return $this->belongsToMany(User::class, 'subscriptions'); - } - - /** - * BelongsToMany Label relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function labels() - { - return $this->belongsToMany(Label::class, 'label_ticket'); - } - - /** - * BelongsTo ticket_type - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function ticketType() - { - return $this->belongsTo(TicketType::class, 'type', 'type'); - } - - /** - * BelongsToMany Linked Ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function linkedTickets() - { - return $this->belongsToMany(Ticket::class, 'linked_tickets', 'ticket_id', 'linked_ticket_id'); - } - - // * METHODS - - /** - * Parse message @user tags and send emails to concerned users - * returns and array with to users notified - * - * @param Message $message - * @return Collection - */ - public function sendBeenMentionnedToUser(Message $message): Collection - { - $ticket = $this; - // Find @user + send mail si un seul user est trouvé. - /** @var \Illuminate\Support\Collection<\App\Models\User> */ - $usersNotified = collect([]); - $matches = []; - $ticket->load('site'); - \preg_match_all('/@\w*/', $message->message, $matches); - $matches = collect($matches[0] ?? [])->unique(); - foreach ($matches as $pseudo_usertag) { - try { - /** @var \App\Models\User $user */ - $user = User::where('name', 'LIKE', '%' . ltrim($pseudo_usertag, '@') . '%') - ->where('email', '!=', $ticket->user->email) - ->where(function ($q) use ($ticket) { - $q->whereHas('sites', function ($q) use ($ticket) { - $q->where('id', $ticket->site->id); - }) - ->orWhere('role', RoleEnum::admin) - ->orWhere('role', RoleEnum::developper); - })->firstOrFail(); - - if ($ticket->is_internal) { - if ($user->isAdmin()) { - $usersNotified->add($user); - SendTicketMentionMail::dispatchAfterResponse( - $user, - new TicketMention($ticket, $message->message) - ); - } - } else { - $usersNotified->add($user); - SendTicketMentionMail::dispatchAfterResponse( - $user, - new TicketMention($ticket, $message->message) - ); - } - } catch (ModelNotFoundException $e) { - continue; - } //end try - } //end foreach - - return $usersNotified; - } - - /** - * full_name getter - * - * @return string - */ - public function getFullNameAttribute(): string - { - return trans('Ticket n° :ticketId : :ticketSiteName', [ - 'ticketId' => $this->id, - 'ticketSiteName' => $this->site->name - ]); - } - - /** - * Check if an account has the same brand as this ticket. - * - * @param Account $account - * @return boolean - */ - public function accountIsValidForThisTicket(Account $account): bool - { - /** @var \App\Models\Brand|null */ - if (!($siteBrand = optional($this->site)->brand)) { - return false; - } - - /** @var \App\Models\Brand */ - $accountBrand = $account->brand; - - return !\is_null($accountBrand->id) and $accountBrand->id === $siteBrand->id; - } - - /** - * Format the ticket name to contain more information. - * - * @param self $ticket - * @return string - */ - public static function formatName(self $ticket): string - { - return sprintf( - 'Ticket %d (%s): %s', - $ticket->id, - $ticket->user ? $ticket->user->name : trans('Utilisateur supprimé'), - Str::limit(\preg_replace('/[[:cntrl:]]+/', '', $ticket->text), 35), - ); - } - - /** - * Get an array of all files columns of the ticket. - * - * @return array - */ - public function getFiles(): array - { - return [ - $this->file, - $this->file2, - $this->file3, - $this->file4, - $this->file5, - ]; - } -} diff --git a/app/Models/Ticket/TicketType.php b/app/Models/Ticket/TicketType.php deleted file mode 100644 index 264ec40..0000000 --- a/app/Models/Ticket/TicketType.php +++ /dev/null @@ -1,67 +0,0 @@ - TicketTypeEnum::class, - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function () { - throw new \Error('Action impossible'); - }); - static::updating(function (self $model) { - ToolboxHelper::assertNoInternalBoUrls('template', $model->template); - }); - static::deleting(function () { - throw new \Error('Action impossible'); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsToMany tickets - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function tickets() - { - return $this->hasMany(Ticket::class, 'type', 'type'); - } -} diff --git a/app/Models/User.php b/app/Models/User.php deleted file mode 100644 index 84ea559..0000000 --- a/app/Models/User.php +++ /dev/null @@ -1,199 +0,0 @@ - 'datetime', - 'role' => RoleEnum::class - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (User $user) { - if (\is_null($user->password)) { - $user->password = Str::random(10); - $user->tmpPass = $user->password; - } - if (Hash::needsRehash($user->password)) { - $user->password = Hash::make($user->password); - } - Cache::flush('AdminUsers'); - }); - static::created(function (User $user) { - $user->sendMailConfirm(); - }); - static::updating(function (User $user) { - if (Hash::needsRehash($user->password)) { - $user->password = Hash::make($user->password); - } - Cache::flush('AdminUsers'); - }); - } - - // * METHODS - - /** - * get User brands - * - * @return \Illuminate\Database\Eloquent\Collection<\App\Models\Brand> - */ - public function brands() - { - return $this->sites->pluck('brand')->filter(); - } - - /** - * Send User creation confirm mail - * - * @return void - */ - public function sendMailConfirm() - { - dispatch(new SendUserCreatedEmail($this)); - } - - /** - * Send User reset password mail - * - * @param mixed $token - * @return void - */ - public function sendPasswordResetNotification(mixed $token) - { - /** @var string $token */ - $this->notify(new ResetPassword($token)); - } - - /** - * Is the user an admin or a developper ? - * - * @return boolean - */ - public function isAdmin(): bool - { - return ($this->role->equals(RoleEnum::developper) or - $this->role->equals(RoleEnum::admin)); - } - - /** - * Get All Admin users - * - * @return Collection - */ - public static function adminUsers(): Collection - { - return Cache::remember('AdminUsers', 86400, function () { - return self::whereIn('role', [RoleEnum::admin, RoleEnum::developper])->orderBy('name')->get(); - }); - } - - // * RELATIONSHIPS - - /** - * HasMany Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function tickets() - { - return $this->hasMany(Ticket::class, 'created_by'); - } - - /** - * HasMany Message relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function messages() - { - return $this->hasMany(Message::class, 'user_id'); - } - - /** - * BelongsToMany Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function subscriptions() - { - return $this->belongsToMany(Ticket::class, 'subscriptions'); - } - - /** - * BelongsToMany Site relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function sites() - { - return $this->belongsToMany(Site::class); - } -} diff --git a/app/Notifications/ExportTicketsStateNotification.php b/app/Notifications/ExportTicketsStateNotification.php deleted file mode 100644 index ed889c7..0000000 --- a/app/Notifications/ExportTicketsStateNotification.php +++ /dev/null @@ -1,60 +0,0 @@ -csvContent = $csvContent; - } - - /** - * Get the notification's delivery channels. - * - * @return array - */ - public function via(): array - { - return ['mail']; - } - - /** - * Get the mail representation of the notification. - * - * @return \Illuminate\Notifications\Messages\MailMessage - */ - public function toMail(): \Illuminate\Notifications\Messages\MailMessage - { - return (new MailMessage()) - ->subject(trans("Export de l'état des lieux des tickets")) - ->line(trans("Vous trouverez ci-joint le fichier CSV contenant l'état des tickets.")) - ->attachData( - $this->csvContent, - sprintf('tickets_state_%s.csv', Carbon::now()->format('Y-m-d_H-i-s')), - [ - 'mime' => 'text/csv', - ] - ); - } -} diff --git a/app/Notifications/ResetPassword.php b/app/Notifications/ResetPassword.php deleted file mode 100644 index e9ee470..0000000 --- a/app/Notifications/ResetPassword.php +++ /dev/null @@ -1,34 +0,0 @@ -subject(trans('Reinitialisation de mot de passe')) - //phpcs:ignore Generic.Files.LineLength.TooLong - ->line(trans('Vous recevez cet e-mail car nous avons reçu une demande de réinitialisation de mot de passe pour votre compte.')) - /** @var string $url */ - ->action(trans('Réinitialiser le mot de passe'), $url) - //phpcs:ignore Generic.Files.LineLength.TooLong - ->line(trans('Ce lien de réinitialisation de mot de passe expirera dans :count minutes. ', ['count' => config('auth.passwords.' . config('auth.defaults.passwords') . '.expire')])) - //phpcs:ignore Generic.Files.LineLength.TooLong - ->line(trans('Si vous n\'avez pas demandé de réinitialisation de mot de passe, aucune autre action n\'est requise.')); - $message->viewData['greeting'] = 'Bonjour,'; - return $message; - } -} diff --git a/app/Policies/AccountPolicy.php b/app/Policies/AccountPolicy.php deleted file mode 100644 index 23468ee..0000000 --- a/app/Policies/AccountPolicy.php +++ /dev/null @@ -1,73 +0,0 @@ -check(); - } - - /** - * Determine if the user can view a given account. - * - * @return boolean - */ - public function view() - { - return false; - } - - /** - * Determine if the user can create a new account. - * - * @param \App\Models\User $user - * @return boolean - */ - public function create(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can update a given account. - * - * @return boolean - */ - public function update() - { - return false; - } - - /** - * Determine if the user can delete a given account. - * - * @param \App\Models\User $user - * @return boolean - */ - public function delete(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can credit a given account. - * - * @return boolean - */ - public function credit() - { - return true; - } -} diff --git a/app/Policies/CreditLogPolicy.php b/app/Policies/CreditLogPolicy.php deleted file mode 100644 index 56f6309..0000000 --- a/app/Policies/CreditLogPolicy.php +++ /dev/null @@ -1,22 +0,0 @@ -isAdmin() or $user->brands()->count() > 0; - } -} diff --git a/app/Policies/EstimationPolicy.php b/app/Policies/EstimationPolicy.php deleted file mode 100644 index 3e89d6c..0000000 --- a/app/Policies/EstimationPolicy.php +++ /dev/null @@ -1,27 +0,0 @@ -status->equals(EstimationStatusEnum::pending); - } -} diff --git a/app/Policies/SitePolicy.php b/app/Policies/SitePolicy.php deleted file mode 100644 index 1cf86d2..0000000 --- a/app/Policies/SitePolicy.php +++ /dev/null @@ -1,20 +0,0 @@ -check(); - } -} diff --git a/app/Policies/TicketPolicy.php b/app/Policies/TicketPolicy.php deleted file mode 100644 index eae3a92..0000000 --- a/app/Policies/TicketPolicy.php +++ /dev/null @@ -1,306 +0,0 @@ -check(); - } - - /** - * Determine if the user can view a given ticket. - * - * @return boolean - */ - public function view() - { - return auth()->check(); - } - - /** - * Determine if the user can create a ticket. - * - * @return boolean - */ - public function create() - { - return auth()->check(); - } - - /** - * Determine if the user can update a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function update(User $user, Ticket $ticket) - { - return $user->sites->contains($ticket->site_id) - || $user->isAdmin(); - } - - /** - * Determine if the user can change the status of a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function changeStatus(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can link ticket . - * - * @param \App\Models\User $user - * @return boolean - */ - public function linkTicket(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can change the internal status of a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function changeInternalStatus(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can delete a given ticket. - * - * @return boolean - */ - public function delete() - { - return false; - } - - /** - * Determine if the user can force delete a given ticket. - * - * @return boolean - */ - public function forceDelete() - { - return false; - } - - /** - * Determine if the user can restore a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function restore(User $user, Ticket $ticket) - { - return $user->sites->contains($ticket->site_id) - || $user->isAdmin(); - } - - /** - * Determine if the user can suscribe to a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - * phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - */ - public function suscribeToTicket(User $user, Ticket $ticket) - { - // phpcs:enable - return !$ticket->status->equals(TicketStatusEnum::archived); - } - - /** - * Determine if the user can create a message for a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - * phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - */ - public function createMessage(User $user, Ticket $ticket) - { - // phpcs:enable - return !$ticket->status->equals(TicketStatusEnum::archived); - } - - /** - * Determine if the user can create a private message for a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function createPrivateMessage(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can update a message for a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function updateMessage(User $user, Ticket $ticket) - { - return !$ticket->status->equals(TicketStatusEnum::archived) - && $user->isAdmin(); - } - - /** - * Determine if the user can reopen a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function reopen(User $user) - { - return $user->role->equals(RoleEnum::client); - } - - /** - * Determine if the user can assign a given ticket to a user. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function assignTo(User $user, Ticket $ticket) - { - return $user->isAdmin() - && !$ticket->status->equals(TicketStatusEnum::archived) - && !$ticket->status->equals(TicketStatusEnum::production); - } - - /** - * Determine if the user can assign tickets. - * - * @param \App\Models\User $user - * @return boolean - */ - public function assignTickets(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can assign labels to a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function assignLabels(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can estimate a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function estimate(User $user, Ticket $ticket) - { - if (!($brand = $ticket->site->brand)) { - return false; - } - return $user->isAdmin() - && (bool)$brand->accounts()->count() - && !$ticket->estimation()->exists() - && !(bool)$ticket->is_internal - && !$ticket->status->equals(TicketStatusEnum::archived); - } - - /** - * Determine if the user can validate the estimation of a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function validateEstimate(User $user, Ticket $ticket) - { - if (!($brand = $ticket->site->brand)) { - return false; - } - return ($user->role->equals(RoleEnum::client) - || $user->role->equals(RoleEnum::developper)) - && (bool)$brand->accounts()->count() - && $ticket->estimation()->exists() - && !(bool)$ticket->is_internal - && !$ticket->status->equals(TicketStatusEnum::archived); - } - - /** - * Determine if the user can cancel the estimation of a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function cancelEstimate(User $user, Ticket $ticket) - { - return $user->role->equals(RoleEnum::developper) - && $ticket->estimation()->exists(); - } - - /** - * Determine if the user can create a gitlab issue from a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function createGitlabIssue(User $user, Ticket $ticket) - { - return $user->role->equals(RoleEnum::developper) - && ( - $ticket->type->equals(TicketTypeEnum::bug) - || $ticket->type->equals(TicketTypeEnum::evolution) - || $ticket->type->equals(TicketTypeEnum::newsletter) - ) - && !\is_null($ticket->site->gitlab_project_id) - && \is_null($ticket->gitlab_issue); - } - - /** - * Determine if the user can changeOrder - * - * @param User $user - * @return boolean - * @throws Error The error. - */ - public function changeOrder(User $user) - { - return $user->role->equals(RoleEnum::developper); - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php deleted file mode 100644 index 9d1fd44..0000000 --- a/app/Providers/AppServiceProvider.php +++ /dev/null @@ -1,38 +0,0 @@ -getClientIp(); - } else { - return request()->server('HTTP_X_FORWARDED_FOR') ?? - request()->getClientIp(); - } - }); - - // * LOCAL FORCE eg: for Carbon - setlocale(LC_ALL, \sprintf( - '%s_%s.UTF-8', - config('app.locale'), - \strtoupper(config('app.locale')) - )); - } -} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php deleted file mode 100644 index fe22c2f..0000000 --- a/app/Providers/AuthServiceProvider.php +++ /dev/null @@ -1,41 +0,0 @@ - - */ - protected $policies = []; - - /** - * Register any authentication / authorization services. - * - * @return void - */ - public function boot(): void - { - $this->registerPolicies(); - - Gate::define('isAdmin', function (User $user) { - return \auth()->check() && ($user->role->equals(RoleEnum::developper) or - $user->role->equals(RoleEnum::admin)); - }); - - Gate::define('isDev', function (User $user) { - return \auth()->check() && $user->role->equals(RoleEnum::developper); - }); - - Gate::define('isClient', function (User $user) { - return \auth()->check() && $user->role->equals(RoleEnum::client); - }); - } -} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php deleted file mode 100644 index 395c518..0000000 --- a/app/Providers/BroadcastServiceProvider.php +++ /dev/null @@ -1,21 +0,0 @@ -> - */ - protected $listen = [ - Registered::class => [SendEmailVerificationNotification::class], - TicketStatusChanged::class => [AddStatusMessages::class], - NotifySubscriptions::class => [SendSubscriptionsNotificationsMail::class], - NotifyTicketCreator::class => [SendNotificationMailToTicketCreator::class], - NotifyAdmin::class => [SendNotificationMailToAdmin::class], - ]; - - /** - * Determine if events and listeners should be automatically discovered. - * - * @return boolean - */ - public function shouldDiscoverEvents(): bool - { - return false; - } -} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php deleted file mode 100644 index 3ce5af2..0000000 --- a/app/Providers/RouteServiceProvider.php +++ /dev/null @@ -1,179 +0,0 @@ -configureRateLimiting(); - - $this->cspReportRoute(); - - $this->routes(function () { - Route::middleware('web') - ->namespace($this->namespace) - ->group(base_path('routes/web-bo.php')); - }); - Route::bind('account', function ($value, RoutingRoute $route) { - /** @var \App\Models\User|null */ - if (!($user = \auth()->user())) { - abort(401); - } - - $this->assertClientHasBrands($user); - - // * If route has brand parameter - /** @var \App\Models\Brand|null */ - if ($brand = $route->parameter('brand')) { - return Account::where('id', \intval($value))->whereHas('brand', function ($q) use ($brand) { - $q->where('id', $brand->id); - })->firstOrFail(); - } - return Account::where('id', \intval($value))->firstOrFail(); - }); - Route::bind('brand', function ($value) { - /** @var \App\Models\User|null */ - if (!($user = \auth()->user())) { - abort(401); - } - - $this->assertClientHasBrands($user); - - return Account::where('id', \intval($value))->firstOrFail(); - }); - Route::model('credit_log', function ($value) { - /** @var \App\Models\User|null */ - if (!($user = \auth()->user())) { - abort(401); - } - - $this->assertClientHasBrands($user); - - return CreditLog::where('id', \intval($value))->firstOrFail(); - }); - Route::model('brand', Brand::class); - Route::model('label', Label::class); - Route::model('package', Package::class); - Route::model('information', Information::class); - Route::model('company', Company::class); - Route::model('invoice', Invoice::class); - Route::model('user', User::class); - Route::model('site', Site::class); - Route::model('ticket_type', TicketType::class); - Route::bind('ticket', function ($value) { - return Ticket::where('id', $value)->has('site')->firstOrFail(); - }); - } - - /** - * Configure the rate limiters for the application. - * - * @return void - */ - protected function configureRateLimiting(): void - { - RateLimiter::for('api', function (Request $request) { - return Limit::perMinute(150)->by($request->user()?->id ?: app('clientIp')); - }); - RateLimiter::for('web', function (Request $request) { - return Limit::perMinute(150)->by($request->user()?->id ?: app('clientIp')); - }); - RateLimiter::for('credentials', function (Request $request) { - return Limit::perMinute(30)->by($request->user()?->id ?: app('clientIp')); - }); - } - - /** - * Assert client user has brands - * or return to tickets.index with warning - * - * @param \App\Models\User $user - * @return void - */ - private function assertClientHasBrands(User $user): void - { - if (!$user->isAdmin()) { - $userBrandsAccounts = $user->brands()->each(function (Brand $brand) { - $brand->load('accounts'); - })->pluck('accounts')->flatten(); - - if (!$userBrandsAccounts->count()) { - \redirect()->route('bo.ticket.index')->withErrors(['warning' => trans( - // phpcs:ignore Generic.Files.LineLength.TooLong - 'Pour utiliser cette fonctionnalité vous devez appartenir à une marque, merci d\'en faire la demande à :mail', - ['mail' => collect(config('mail.contactsList.serviceweb'))->implode(' ')] - )])->throwResponse(); - } - } - } - - /** - * * Register CSP report URI - * - * Put this function inside RouteServiceProvider, - * and call it in RouteServiceProvider::boot - * - * @return void - */ - private function cspReportRoute() - { - // * CSP REPORT URI, Please add /csp-report to VerifyCsrfToken $except middleware - \Illuminate\Support\Facades\Route::post('/csp-report', function () { - $isCspRequest = request()->header('Content-Type') === 'application/csp-report'; - if (!$isCspRequest or !request()->json('csp-report') or !is_array(request()->json('csp-report'))) { - abort(401); - } - // * Flatten if needed - $cspReport = collect(request()->json('csp-report')) - ->flatMap(function ($v, $k) { - return [$k => is_array($v) ? collect($v)->flatten()->implode(', ') : $v]; - })->all(); - // * Filter array keys - $cspReport = collect(array_intersect_key($cspReport, [ - 'blocked-uri' => '', 'document-uri' => '', 'original-policy' => '', - 'referrer' => '', 'violated-directive' => '' - ])); - \Illuminate\Support\Facades\Log::warning(sprintf( - "CSP REPORT for %s : \n %s", - $cspReport->get('document-uri'), - $cspReport->implode("\n") - )); - })->middleware('throttle:5,2') - ->withoutMiddleware(\App\Http\Middleware\VerifyCsrfToken::class) - ->name('cspReportUri'); - } -} diff --git a/app/Providers/TranslationServiceProvider.php b/app/Providers/TranslationServiceProvider.php deleted file mode 100644 index 7aa3b60..0000000 --- a/app/Providers/TranslationServiceProvider.php +++ /dev/null @@ -1,78 +0,0 @@ -collectLocalesStrings() as $locale) { - // * Supported locales - Cache::remember(sprintf('translations.%s', $locale), 84600, function () use ($locale) { - $translations = [ - 'php' => $this->phpTranslations($locale), - 'json' => $this->jsonTranslations($locale), - ]; - return $translations; - }); - } - } - - /** - * Gather provided langs checking from files - * - * @return \Illuminate\Support\Collection - */ - private function collectLocalesStrings(): Collection - { - return collect(File::allFiles(resource_path('lang/')))->flatMap(function (SplFileInfo $file) { - if ($file->getRelativePath() and \strpos($file->getRelativePath(), 'vendor') !== 0) { - return [$file->getRelativePath() => '']; - } - })->keys(); - } - - /** - * Gather all php translations - * - * @param string $locale - * @return array - */ - private function phpTranslations(string $locale): array - { - $path = resource_path("lang/$locale"); - - return collect(File::allFiles($path))->flatMap(function ($file) use ($locale) { - $translation = $file->getBasename('.php'); - return [$translation => trans($translation, [], $locale)]; - })->all(); - } - - /** - * Gather json translations - * - * @param string $locale - * @return array - */ - private function jsonTranslations(string $locale): array - { - $path = resource_path("lang/$locale.json"); - - if (is_string($path) && is_readable($path)) { - return json_decode(file_get_contents($path), true) ?? []; - } - - return []; - } -} diff --git a/app/Providers/ViewServiceProvider.php b/app/Providers/ViewServiceProvider.php deleted file mode 100644 index 5f61265..0000000 --- a/app/Providers/ViewServiceProvider.php +++ /dev/null @@ -1,37 +0,0 @@ -runningInConsole()) { - $appInfos = Cache::remember('composer', 3600, function () { - return json_decode(File::get(\app_path('../composer.json'))); - }); - View::share('name', $appInfos->name); - View::share('version', $appInfos->version); - View::share('license', $appInfos->license); - // * Informations - $infos = Cache::remember('infos', 3600, function () { - return Information::all(); - }); - View::share('informations', $infos); - // * FORCE BOOTSTRAP PAGINATOR - Paginator::defaultView('bo.modules.pagination'); - } //end if - } -} diff --git a/app/Rules/Hex.php b/app/Rules/Hex.php deleted file mode 100644 index 199be1a..0000000 --- a/app/Rules/Hex.php +++ /dev/null @@ -1,76 +0,0 @@ -forceFull = $forceFull; - - $this->allowAlpha = $allowAlpha; - } - - /** - * Run the validation rule. - * - * @param string $attribute - * @param mixed $value - * @param \Closure(string):\Illuminate\Translation\PotentiallyTranslatedString $fail - * @return void - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed - * @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint - */ - public function validate(string $attribute, mixed $value, \Closure $fail): void - { - $pattern = '/^#([a-fA-F0-9]{6}'; - - if (!$this->forceFull) { - $pattern .= '|[a-fA-F0-9]{3}'; - } - - if ($this->allowAlpha) { - $pattern .= '|[a-fA-F0-9]{8}'; - - if (!$this->forceFull) { - $pattern .= '|[a-fA-F0-9]{4}'; - } - } - - $pattern .= ')$/'; - - if (!(bool)preg_match($pattern, $value)) { - $fail(trans($this->message())); - } - } - - /** - * Get the validation error message. - * - * @return string - */ - public function message(): string - { - return 'The hex code is not valid'; - } -} diff --git a/app/Traits/Controllers/ChangesModelOrder.php b/app/Traits/Controllers/ChangesModelOrder.php deleted file mode 100644 index f504823..0000000 --- a/app/Traits/Controllers/ChangesModelOrder.php +++ /dev/null @@ -1,64 +0,0 @@ -route()->parameterNames); - $className = Str::of($paramNames->get($paramNames->count() - 2))->lower()->studly(); - $className = "\\App\\Models\\{$className}"; - $model = Arr::get($params, $paramNames->count() - 2); - - if (!class_exists($className)) { - throw new \RuntimeException("The {$className} class doesn't exist."); - } - - if (!\is_object($model)) { - throw new \RuntimeException("The second last param isn't an object."); - } - - if (get_class($model) !== (string)Str::of($className)->replaceStart('\\', '')) { - throw new \RuntimeException("The {$className} doesn't match second last binded param."); - } - - /** @var \Illuminate\Database\Eloquent\Model|null */ - $model = $className::query()->where($model->getRouteKeyName(), $model->getRouteKey())->first(); - - if (!$model) { - return back()->with('error', trans('crud.messages.order_not_changed')); - } - - return DB::transaction(function () use ($request, $className, $model) { - /** @var \Illuminate\Database\Eloquent\Model|null */ - $tmp = $className::query() - ->where('order', $request->direction ? '<' : '>', $model->getOriginal('order')) - ->orderBy('order', $request->direction ? 'DESC' : 'ASC') - ->first(); - - if (!$tmp) { - return back()->with('error', trans('crud.messages.order_not_changed')); - } - - $newOrder = $tmp->getOriginal('order'); - $tmp->update(['order' => $model->getOriginal('order')]); - $model->update(['order' => $newOrder]); - - return redirect()->back()->with('success', trans('crud.messages.order_changed')); - }); - } -} diff --git a/app/Traits/Controllers/HasGitlabIssue.php b/app/Traits/Controllers/HasGitlabIssue.php deleted file mode 100644 index a664f83..0000000 --- a/app/Traits/Controllers/HasGitlabIssue.php +++ /dev/null @@ -1,59 +0,0 @@ -show($projectId, (int) $matches[1]); - - return $gitlabIssue; - } - - /** - * Update labels for a GitLab issue. - * - * @param int|string $projectId - * @param int $issueId - * @param array $labels - * - * @return array - */ - public function updateGitlabIssueLabels($projectId, int $issueId, array $labels): array - { - return GitLab::issues()->update($projectId, $issueId, [ - 'labels' => implode(',', $labels), - ]); - } - - /** - * Close a GitLab issue. - * - * @param int|string $projectId - * @param int $issueId - * @param array $labels - * - * @return array - */ - public function closeGitlabIssue($projectId, int $issueId, array $labels): array - { - return GitLab::issues()->update($projectId, $issueId, [ - 'state_event' => 'close', - 'labels' => implode(',', $labels), - ]); - } -} diff --git a/app/Traits/Enums/BaseEnum.php b/app/Traits/Enums/BaseEnum.php deleted file mode 100644 index 42058da..0000000 --- a/app/Traits/Enums/BaseEnum.php +++ /dev/null @@ -1,256 +0,0 @@ -name]; - } - - /** - * Get enum label - * - * @return string - */ - public function label(): string - { - return self::toLabels()[$this->name]; - } - - /** - * Get enum name - * - * @return string - */ - public function name(): string - { - return $this->name; - } - - // * STATIC FETCH METHODS - - /** - * Get enum labels - * - * @return array - */ - public static function toLabels(): array - { - if (empty(self::getCache('labels'))) { - $labels = self::getLabelsConstant(); - self::setCache('labels', \collect(self::cases()) - ->mapWithKeys(function ($enum) use ($labels) { - if (!\is_null($labels) and !isset($labels[$enum->name])) { - throw new \Error('Missing definition label ' . self::class . " for {$enum->name}"); - } - return [$enum->name => \trans( - !\is_null($labels) ? $labels[$enum->name] : Str::ucfirst($enum->name) - )]; - })->all()); - } - return self::getCache('labels'); - } - - /** - * Get enum values - * - * @return array - */ - public static function toValues(): array - { - if (empty(self::getCache('values'))) { - self::setCache('values', \collect(self::cases()) - ->mapWithKeys(fn ($enum) => [$enum->name => $enum->value])->all()); - } - return self::getCache('values'); - } - - /** - * Get enums - * - * @return array - */ - public static function all(): array - { - return self::cases(); - } - - /** - * Get enums - * - * @return array - */ - public static function toArray(): array - { - if (empty(self::getCache('enums'))) { - $definitions = self::getCustomDefinitions(); - self::setCache('enums', \collect(self::cases()) - ->mapWithKeys(function ($enum) use ($definitions) { - $baseArray = [ - 'name' => $enum->name, - 'label' => $enum->label(), - 'value' => $enum->value ?? null, - ]; - foreach ($definitions as $index => $elements) { - $index = Str::lower(Str::singular($index)); - if (!isset($elements[$enum->name])) { - throw new \Error("Missing definition {$index} " . self::class . " for {$enum->name}"); - } - $baseArray[$index] = $elements[$enum->name]; - } - return [$enum->name => (object)$baseArray]; - })->all()); - } - return self::getCache('enums'); - } - - /** - * Fetch enum using value - * - * @param \App\Traits\Enums\BaseEnum|integer|string $value - * @return \App\Traits\Enums\BaseEnum|null - */ - public static function make(self|int|string $value): self|null - { - return !\is_object($value) ? - \collect(self::cases())->keyBy('value')->get($value) : $value; - } - - /** - * Test if 2 enum are equals - * - * @param object ...$others - * @return boolean - * @throws \Error If provided element are not enums taht extends BaseEnum. - */ - public function equals(object ...$others): bool - { - foreach ($others as $other) { - if (!\in_array(BaseEnum::class, \class_uses_recursive($other))) { - throw new \Error(__METHOD__ . - ' requires $enum to use ' . BaseEnum::class); - } - if ( - get_class($this) === get_class($other) - && $this->value === $other->value - ) { - return true; - } - } - return false; - } - - /** - * Serialize to json - * - * @return mixed - */ - public function jsonSerialize(): mixed - { - return $this->value; - } - - - // * CACHE - - /** - * Get cache array - * - * @param string $index - * @return array - */ - private static function getCache(string $index): array - { - self::initCache(); - if (!isset($GLOBALS[self::class]['props'][$index])) { - $GLOBALS[self::class]['props'][$index] = []; - } - return $GLOBALS[self::class]['props'][$index]; - } - - /** - * Set cache array - * - * @param string $index - * @param array $items - * @return void - */ - private static function setCache(string $index, array $items): void - { - self::initCache(); - if (!isset($GLOBALS[self::class]['props'][$index])) { - $GLOBALS[self::class]['props'][$index] = []; - } - $GLOBALS[self::class]['props'][$index] = $items; - } - - /** - * Init cache if needed - * - * @return void - */ - private static function initCache(): void - { - if (!isset($GLOBALS[self::class])) { - $GLOBALS[self::class] = [ - 'props' => [ - 'enums' => [], - 'values' => [], - 'labels' => [] - ], - 'customProps' => null - ]; - } - } - - // * PRIVATE - - /** - * Fetch the LABELS constant if exists - * - * @return array|null - */ - private static function getLabelsConstant(): array|null - { - $class_name = self::class; - try { - $constant_reflex = new \ReflectionClassConstant($class_name, 'LABELS'); - return $constant_reflex->getValue(); - } catch (\ReflectionException $e) { - return null; - } - } - - /** - * Get custom constants - * - * @return array - */ - private static function getCustomDefinitions(): array - { - // ? Has custom props in cache ? - if (!isset($GLOBALS[self::class]) or \is_null($GLOBALS[self::class]['customProps'])) { - $names = \collect(self::cases())->keyBy('name'); - - $GLOBALS[self::class]['customProps'] = \collect((new \ReflectionClass(self::class))->getConstants()) - ->filter(function (mixed $constant, string $key) use ($names) { - if ($key === 'LABELS' or !\is_array($constant)) { - return false; - } - return \collect($constant)->keys() - ->filter(fn (string $name) => $names->has($name))->count(); - })->all(); - } - return $GLOBALS[self::class]['customProps']; - } -} diff --git a/app/Traits/Enums/SpsConfigTrait.php b/app/Traits/Enums/SpsConfigTrait.php deleted file mode 100644 index 1d376cd..0000000 --- a/app/Traits/Enums/SpsConfigTrait.php +++ /dev/null @@ -1,52 +0,0 @@ -destination()); - } - /** - * destination method - * Return acs url concatenated with url - * - * @return string - */ - public function destination(): string - { - return $this->url() . "/saml2/support/acs"; - } - /** - * logout method - * Return sls url concatenated with url - * - * @return string - */ - public function logout(): string - { - return $this->url() . "/saml2/support/sls"; - } - /** - * certificate method - * Return certificate (.pem) file from kebab case of Enum name - * - * @return string - */ - public function certificate(): string - { - return 'file://' . storage_path( - sprintf( - 'samlidp/%s.pem', - str()->kebab($this->name) - ) - ); - } -} diff --git a/app/Traits/Models/IsCachedAsCollection.php b/app/Traits/Models/IsCachedAsCollection.php deleted file mode 100644 index f8ede85..0000000 --- a/app/Traits/Models/IsCachedAsCollection.php +++ /dev/null @@ -1,103 +0,0 @@ -all(); - } - Cache::put(static::getCacheKeyName(), static::queryCached(static::query()) - ->where($conditions)->get() - ->pipe(fn (Collection $collection) => \call_user_func([self::class, 'filterQuery'], $collection))); - } - - /** - * Change query for cached elements - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @return \Illuminate\Database\Eloquent\Builder - */ - protected static function queryCached(Builder $query): Builder - { - return $query; - } - - /** - * Change query for cached elements - * - * @param \Illuminate\Support\Collection $results - * @return \Illuminate\Support\Collection - */ - protected static function filterQuery(Collection $results): Collection - { - return $results; - } - - /** - * Get the class basename - * - * @return string - */ - protected static function getCacheKeyName(): string - { - return static::getCallClassBaseName(); - } - - /** - * Get the class basename - * - * @return string - */ - protected static function getCallClassBaseName(): string - { - return str_replace(__NAMESPACE__ . '\\', '', get_called_class()); - } -} diff --git a/app/Traits/Models/MiniCrudModel.php b/app/Traits/Models/MiniCrudModel.php deleted file mode 100644 index 09109f1..0000000 --- a/app/Traits/Models/MiniCrudModel.php +++ /dev/null @@ -1,180 +0,0 @@ -setData($attributes['data']); - } - } - - /** - * Apply function on data typed text while on save event - * - * @return void - */ - public function minicrudCreating() - { - /** @var array */ - $data = $this->data; - foreach ($data as &$input) { - switch ($input['inputType']) { - case InputType::text->value: - $input['text'] = clean($input['text']); - $input['text'] = FileStorageHelper::storeModelFilesFromHtml($this, $input['text']); - break; - } //end switch - } //end foreach - $this->data = $data; - } - - /** - * Apply function on data typed text while on update event - * - * @return void - */ - public function minicrudUpdating() - { - $this->minicrudCreating(); - } - - /** - * Apply function on data typed text while on updated event - * - * @return void - */ - public function minicrudUpdated() - { - /** @var array */ - foreach ($this->data as $index => $input) { - switch ($input['inputType']) { - case InputType::text->value: - $original = ToolboxHelper::getOriginal($this, 'data'); - FileStorageHelper::removeOldModelFilesFromHtml( - $input['text'], - $original[$index]['text'] ?? '' - ); - break; - } //end switch - } //end foreach - } - - /** - * Apply function on data typed text while on deleted event - * - * @return void - */ - public function minicrudDeleted() - { - /** @var array */ - foreach ($this->data as $input) { - switch ($input['inputType']) { - case InputType::text->value: - FileStorageHelper::removeModelFilesOfHtml($input['text']); - break; - } //end switch - } //end foreach - } - - /** - * Set a specific prop - * - * @param array $data - * @return void - */ - private function setData(array $data): void - { - $attrs = $this->attributes; - if (isset($attrs['data'])) { - unset($attrs['data']); - } - $this->setAttribute('data', $data); - } - - /** - * Set a specific prop - * - * @param array $value - * @return void - */ - protected function setDataAttribute(array $value): void - { - $this->attributes['data'] = $this->castAttributeAsJson( - 'data', - $this->serializeData($value) - ); - } - - /** - * Set a specific prop - * - * @param string|null $data - * @return array - */ - protected function getDataAttribute(string|null $data): array - { - return $this->fromJson($data ?? $this->attributes['data'] ?? '[]'); - } - - /** - * Serialize properties - * - * @param array $data - * @return array - * @throws \ErrorException If input type is no handled. - * @throws \Illuminate\Validation\ValidationException If url is a bo url. - * @phpcs:disable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber - * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh - */ - private function serializeData(array $data): array - { - foreach ($data as $o => $input) { - switch ($input['inputType']) { - case InputType::image->value: - $data[$o]['value'] = \preg_replace( - '/^\/|^/', - '', - FileStorageHelper::storeFile($this, $input['value'], true) - ); - break; - case InputType::selectEnum->value: - case InputType::boolean->value: - case InputType::password->value: - case InputType::email->value: - case InputType::number->value: - case InputType::videoVimeo->value: - case InputType::videoYoutube->value: - case InputType::video->value: - break; - case InputType::string->value: - case InputType::text->value: - case InputType::url->value: - ToolboxHelper::assertNoInternalBoUrls('content', $input['value']); - break; - default: - throw new \ErrorException(sprintf( - 'Unknown input Type %s', - $input['inputType'] - )); - } //end switch - } //end foreach - return $data; - } -} diff --git a/artisan b/artisan index 67a3329..c35e31d 100644 --- a/artisan +++ b/artisan @@ -1,53 +1,18 @@ #!/usr/bin/env php make(Illuminate\Contracts\Console\Kernel::class); - -$status = $kernel->handle( - $input = new Symfony\Component\Console\Input\ArgvInput, - new Symfony\Component\Console\Output\ConsoleOutput -); - -/* -|-------------------------------------------------------------------------- -| Shutdown The Application -|-------------------------------------------------------------------------- -| -| Once Artisan has finished running, we will fire off the shutdown events -| so that any final work may be done by the application before we shut -| down the process. This is the last thing to happen to the request. -| -*/ - -$kernel->terminate($input, $status); +$status = $app->handleCommand(new ArgvInput); exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php index 037e17d..1f9a926 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,55 +1,92 @@ singleton( - Illuminate\Contracts\Http\Kernel::class, - App\Http\Kernel::class -); - -$app->singleton( - Illuminate\Contracts\Console\Kernel::class, - App\Console\Kernel::class -); - -$app->singleton( - Illuminate\Contracts\Debug\ExceptionHandler::class, - App\Exceptions\Handler::class -); - -/* -|-------------------------------------------------------------------------- -| Return The Application -|-------------------------------------------------------------------------- -| -| This script returns the application instance. The instance is given to -| the calling script so we can separate the building of the instances -| from the actual running of the application and sending responses. -| -*/ - -return $app; +return Application::configure(basePath: dirname(__DIR__)) + ->withRouting( + health: '/up', + then: function () { + Route::middleware(['web', 'throttle:5,2']) + ->post('/csp-report', function () { + $isCspRequest = request()->header('Content-Type') === 'application/csp-report'; + if (!$isCspRequest or !request()->json('csp-report') or !is_array(request()->json('csp-report'))) { + abort(401); + } + // * Flatten if needed. + $cspReport = collect(request()->json('csp-report')) + ->flatMap(function ($v, $k) { + return [$k => is_array($v) ? collect($v)->flatten()->implode(', ') : $v]; + })->all(); + // * Filter array keys. + $cspReport = collect(array_intersect_key($cspReport, [ + 'blocked-uri' => '', + 'document-uri' => '', + 'original-policy' => '', + 'referrer' => '', + 'violated-directive' => '', + ])); + Log::warning(sprintf( + "CSP REPORT for %s : \n %s", + $cspReport->get('document-uri'), + $cspReport->implode("\n") + )); + })->name('cspReportUri'); + } + ) + ->withMiddleware(function (Middleware $middleware) { + $middleware->web(append: [ + \Uwil\LaravelI18n\Middlewares\ForceLocale::class, + \App\Http\Middlewares\HandleInertiaRequests::class, + \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class, + \Uwil\LaravelCommon\Middlewares\SecureHeaders::class, + \Uwil\LaravelCommon\Middlewares\TrimStrings::class, + \Uwil\LaravelCommon\Middlewares\TrustHosts::class, + \Uwil\LaravelCommon\Middlewares\TrustProxies::class, + \Uwil\LaravelBackend\Middlewares\LogoutUnpublishedUsers::class, + ]); + $middleware->preventRequestForgery(except: [ + '/csp-report', + ]); + $middleware->group('saml', [ + \Uwil\LaravelBackend\Middlewares\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + ]); + $middleware->alias([ + 'auth' => \Uwil\LaravelBackend\Middlewares\Authenticate::class, + 'guest' => \Uwil\LaravelBackend\Middlewares\RedirectIfAuthenticated::class, + ]); + }) + ->withExceptions(function (Exceptions $exceptions) { + $exceptions->render(function (HttpException $e, Request $request) { + $status = $e->getStatusCode(); + return InertiaHelper::errorRender($request, $status); + }); + /** + * Automatic exception capture with Sentry. + */ + $exceptions->report(function (Throwable $e) { + if (app()->bound('sentry')) { + app('sentry')->captureException($e); + } + }); + /** + * Handling validation errors by excluding sensitive fields from the flash. + */ + $exceptions->render(function (ValidationException $e, Request $request) { + $safeInput = collect($request->all()) + ->except(['password', 'password_confirmation', 'current_password']) + ->toArray(); + return back() + ->withInput($safeInput) + ->withErrors($e->errors()); + }); + })->create(); diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000..b472c6e --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,7 @@ +=4.0.0" + "doctrine/dbal": "<4.0.0 || >=5.0.0" }, "require-dev": { - "doctrine/dbal": "^3.7.0", + "doctrine/dbal": "^4.0.0", "nesbot/carbon": "^2.71.0 || ^3.0.0", "phpunit/phpunit": "^10.3" }, @@ -117,7 +117,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" }, "funding": [ { @@ -133,187 +133,7 @@ "type": "tidelift" } ], - "time": "2023-12-11T17:09:12+00:00" - }, - { - "name": "carlos-meneses/laravel-mpdf", - "version": "2.1.13", - "source": { - "type": "git", - "url": "https://github.com/mccarlosen/laravel-mpdf.git", - "reference": "f2461faf0c5d328d28de13c3dcc14e70d77aef83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mccarlosen/laravel-mpdf/zipball/f2461faf0c5d328d28de13c3dcc14e70d77aef83", - "reference": "f2461faf0c5d328d28de13c3dcc14e70d77aef83", - "shasum": "" - }, - "require": { - "mpdf/mpdf": "^8.0|^8.1", - "php": "^5.6|^7.0|^8.0" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "PDF": "Mccarlosen\\LaravelMpdf\\Facades\\LaravelMpdf" - }, - "providers": [ - "Mccarlosen\\LaravelMpdf\\LaravelMpdfServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Mccarlosen\\LaravelMpdf\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Laravel Mpdf: Using Mpdf in Laravel to generate Pdfs.", - "keywords": [ - "laravel", - "mpdf", - "pdf" - ], - "support": { - "issues": "https://github.com/mccarlosen/laravel-mpdf/issues", - "source": "https://github.com/mccarlosen/laravel-mpdf/tree/2.1.13" - }, - "funding": [ - { - "url": "https://www.paypal.me/mccarlosen", - "type": "custom" - } - ], - "time": "2023-09-01T15:09:05+00:00" - }, - { - "name": "clue/stream-filter", - "version": "v1.7.0", - "source": { - "type": "git", - "url": "https://github.com/clue/stream-filter.git", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "Clue\\StreamFilter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - } - ], - "description": "A simple and modern approach to stream filtering in PHP", - "homepage": "https://github.com/clue/stream-filter", - "keywords": [ - "bucket brigade", - "callback", - "filter", - "php_user_filter", - "stream", - "stream_filter_append", - "stream_filter_register" - ], - "support": { - "issues": "https://github.com/clue/stream-filter/issues", - "source": "https://github.com/clue/stream-filter/tree/v1.7.0" - }, - "funding": [ - { - "url": "https://clue.engineering/support", - "type": "custom" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2023-12-20T15:40:13+00:00" - }, - { - "name": "codegreencreative/laravel-samlidp", - "version": "v5.3.1", - "source": { - "type": "git", - "url": "https://github.com/codegreencreative/laravel-samlidp.git", - "reference": "527423b32c06086379c2ac964804e6d78c90b0aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/codegreencreative/laravel-samlidp/zipball/527423b32c06086379c2ac964804e6d78c90b0aa", - "reference": "527423b32c06086379c2ac964804e6d78c90b0aa", - "shasum": "" - }, - "require": { - "ext-zlib": "*", - "illuminate/routing": "^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "laravel/framework": "^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "litesaml/lightsaml": "^4.0", - "php": "^7.2.5|^8.0" - }, - "require-dev": { - "laravel/pint": "^1.17" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "CodeGreenCreative\\SamlIdp\\LaravelSamlIdpServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "CodeGreenCreative\\SamlIdp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Make your PHP Laravel application an Identification Provider using SAML 2.0. This package allows you to implement your own Identification Provider (idP) using the SAML 2.0 standard to be used with supporting SAML 2.0 Service Providers (SP).", - "keywords": [ - "SAML 2.0", - "SSO", - "acl", - "auth", - "idp", - "laravel", - "saml" - ], - "support": { - "issues": "https://github.com/codegreencreative/laravel-samlidp/issues", - "source": "https://github.com/codegreencreative/laravel-samlidp/tree/v5.3.1" - }, - "time": "2025-02-27T16:33:19+00:00" + "time": "2024-02-09T16:56:22+00:00" }, { "name": "dflydev/dot-access-data", @@ -392,31 +212,30 @@ }, { "name": "diglactic/laravel-breadcrumbs", - "version": "v9.0.0", + "version": "v10.1.0", "source": { "type": "git", "url": "https://github.com/diglactic/laravel-breadcrumbs.git", - "reference": "88e8f01e013e811215770e27b40a74014c28f2c4" + "reference": "64245821155ccfe721832898840408ee6136db31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/88e8f01e013e811215770e27b40a74014c28f2c4", - "reference": "88e8f01e013e811215770e27b40a74014c28f2c4", + "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/64245821155ccfe721832898840408ee6136db31", + "reference": "64245821155ccfe721832898840408ee6136db31", "shasum": "" }, "require": { "facade/ignition-contracts": "^1.0", - "laravel/framework": "^8.0 || ^9.0 || ^10.0 || ^11.0", - "php": "^7.3 || ^8.0" + "laravel/framework": "^10.0 || ^11.0 || ^12.0 || ^13.0", + "php": "^8.1" }, "conflict": { "davejamesmiller/laravel-breadcrumbs": "*" }, "require-dev": { - "orchestra/testbench": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "php-coveralls/php-coveralls": "^2.7", - "phpunit/phpunit": "^9.5 || ^10.5", - "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1" + "orchestra/testbench": "^8.0 || ^9.0 || ^10.0 || ^11.0", + "phpunit/phpunit": "^10.5 || ^11.5 || ^12.5", + "spatie/phpunit-snapshot-assertions": "^5.1" }, "type": "library", "extra": { @@ -457,379 +276,38 @@ ], "support": { "issues": "https://github.com/diglactic/laravel-breadcrumbs/issues", - "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v9.0.0" + "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v10.1.0" }, - "time": "2024-03-12T00:42:39+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, - { - "name": "doctrine/dbal", - "version": "3.9.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "12.0.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "2.1.1", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.22", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.2", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.4" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2025-01-16T08:28:55+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "1.4.10 || 2.0.3", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/log": "^1 || ^2 || ^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.4" - }, - "time": "2024-12-07T21:18:45+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2024-05-22T20:47:39+00:00" + "time": "2026-03-30T05:25:07+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.10", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^11.0", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25 || ^5.4" + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + "Doctrine\\Inflector\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -874,7 +352,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.10" + "source": "https://github.com/doctrine/inflector/tree/2.1.0" }, "funding": [ { @@ -890,7 +368,7 @@ "type": "tidelift" } ], - "time": "2024-02-18T20:23:39+00:00" + "time": "2025-08-10T19:31:58+00:00" }, { "name": "doctrine/lexer", @@ -971,29 +449,28 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v3.4.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "8c784d071debd117328803d86b2097615b457500" + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", - "reference": "8c784d071debd117328803d86b2097615b457500", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" + "php": "^8.2|^8.3|^8.4|^8.5" }, "replace": { "mtdowling/cron-expression": "^1.0" }, "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" }, "type": "library", "extra": { @@ -1024,7 +501,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" }, "funding": [ { @@ -1032,7 +509,7 @@ "type": "github" } ], - "time": "2024-10-09T13:47:03+00:00" + "time": "2025-10-31T18:51:33+00:00" }, { "name": "dxw/cidr", @@ -1132,16 +609,16 @@ }, { "name": "egulias/email-validator", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "b115554301161fa21467629f1e1391c1936de517" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", - "reference": "b115554301161fa21467629f1e1391c1936de517", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { @@ -1187,7 +664,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -1195,24 +672,24 @@ "type": "github" } ], - "time": "2024-12-27T00:36:43+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.18.0", + "version": "v4.19.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/b287d2a16aceffbf6e0295559b39662612b77fcf", + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1254,9 +731,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.19.0" }, - "time": "2024-11-01T03:51:45+00:00" + "time": "2025-10-17T16:34:55+00:00" }, { "name": "facade/ignition-contracts", @@ -1313,31 +790,31 @@ }, { "name": "fruitcake/php-cors", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/fruitcake/php-cors.git", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", "shasum": "" }, "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6|^7" + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" }, "require-dev": { - "phpstan/phpstan": "^1.4", + "phpstan/phpstan": "^2", "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" + "squizlabs/php_codesniffer": "^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -1368,7 +845,7 @@ ], "support": { "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" }, "funding": [ { @@ -1380,250 +857,28 @@ "type": "github" } ], - "time": "2023-10-12T05:21:21+00:00" - }, - { - "name": "graham-campbell/bounded-cache", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Bounded-Cache.git", - "reference": "c6db68b27174c3da061cc61747fa934c87ae8cd0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Bounded-Cache/zipball/c6db68b27174c3da061cc61747fa934c87ae8cd0", - "reference": "c6db68b27174c3da061cc61747fa934c87ae8cd0", - "shasum": "" - }, - "require": { - "php": "^8.1", - "psr/simple-cache": "^2.0 || ^3.0" - }, - "require-dev": { - "graham-campbell/analyzer": "^5.0", - "graham-campbell/testbench-core": "^4.2", - "mockery/mockery": "^1.6.12", - "phpunit/phpunit": "^10.5.45 || ^11.5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\BoundedCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "A Bounded TTL PSR-16 Cache Implementation", - "keywords": [ - "Bounded Cache", - "Bounded-Cache", - "Graham Campbell", - "GrahamCampbell", - "bounded", - "cache", - "psr16" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Bounded-Cache/issues", - "source": "https://github.com/GrahamCampbell/Bounded-Cache/tree/v3.0.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/bounded-cache", - "type": "tidelift" - } - ], - "time": "2025-02-09T23:15:50+00:00" - }, - { - "name": "graham-campbell/gitlab", - "version": "v7.6.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Laravel-GitLab.git", - "reference": "783fcc7e059ed61d9176bf7243ac0bbc05cc157f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-GitLab/zipball/783fcc7e059ed61d9176bf7243ac0bbc05cc157f", - "reference": "783fcc7e059ed61d9176bf7243ac0bbc05cc157f", - "shasum": "" - }, - "require": { - "graham-campbell/bounded-cache": "^1.2 || ^2.2 || ^3.0", - "graham-campbell/manager": "^5.1", - "guzzlehttp/guzzle": "^7.8.1", - "guzzlehttp/psr7": "^2.6.2", - "illuminate/contracts": "^8.75 || ^9.0 || ^10.0 || ^11.0", - "illuminate/support": "^8.75 || ^9.0 || ^10.0 || ^11.0", - "m4tthumphrey/php-gitlab-api": "11.14.*", - "php": "^7.4.15 || ^8.0.2", - "symfony/cache": "^5.4 || ^6.0 || ^7.0" - }, - "require-dev": { - "graham-campbell/analyzer": "^4.1", - "graham-campbell/testbench": "^6.1", - "mockery/mockery": "^1.6.6", - "phpunit/phpunit": "^9.6.17 || ^10.5.13" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "GrahamCampbell\\GitLab\\GitLabServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "GrahamCampbell\\GitLab\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "GitLab Is A GitLab Bridge For Laravel", - "keywords": [ - "Bridge", - "Graham Campbell", - "GrahamCampbell", - "Laravel GitLab", - "Laravel-GitLab", - "PHP GitLab API", - "framework", - "gitlab", - "gitlab bridge", - "laravel", - "php-gitlab-api" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Laravel-GitLab/issues", - "source": "https://github.com/GrahamCampbell/Laravel-GitLab/tree/v7.6.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/gitlab", - "type": "tidelift" - } - ], - "time": "2025-03-03T17:44:37+00:00" - }, - { - "name": "graham-campbell/manager", - "version": "v5.2.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Laravel-Manager.git", - "reference": "b6a4172a32b931fe20c5c242251c8c98b2c79e41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Manager/zipball/b6a4172a32b931fe20c5c242251c8c98b2c79e41", - "reference": "b6a4172a32b931fe20c5c242251c8c98b2c79e41", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.75 || ^9.0 || ^10.0 || ^11.0 || ^12.0", - "illuminate/support": "^8.75 || ^9.0 || ^10.0 || ^11.0 || ^12.0", - "php": "^7.4.15 || ^8.0.2" - }, - "require-dev": { - "graham-campbell/analyzer": "^4.2.1 || ^5.0.0", - "graham-campbell/testbench-core": "^4.2.1", - "mockery/mockery": "^1.6.12", - "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.10" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\Manager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Manager Provides Some Manager Functionality For Laravel", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Laravel Manager", - "Laravel-Manager", - "connector", - "framework", - "interface", - "laravel", - "manager" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Laravel-Manager/issues", - "source": "https://github.com/GrahamCampbell/Laravel-Manager/tree/v5.2.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/manager", - "type": "tidelift" - } - ], - "time": "2025-03-02T20:18:37+00:00" + "time": "2025-12-03T09:33:47+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.1.3", + "version": "v1.1.4", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" + "phpoption/phpoption": "^1.9.5" }, "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" }, "type": "library", "autoload": { @@ -1652,7 +907,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" }, "funding": [ { @@ -1664,26 +919,26 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:45:45+00:00" + "time": "2025-12-27T19:43:20+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.9.2", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1774,7 +1029,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" }, "funding": [ { @@ -1790,20 +1045,20 @@ "type": "tidelift" } ], - "time": "2024-07-24T11:22:20+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.4", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { @@ -1811,7 +1066,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { @@ -1857,7 +1112,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.4" + "source": "https://github.com/guzzle/promises/tree/2.3.0" }, "funding": [ { @@ -1873,20 +1128,20 @@ "type": "tidelift" } ], - "time": "2024-10-17T10:06:22+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", "shasum": "" }, "require": { @@ -1902,7 +1157,8 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1973,7 +1229,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.0" + "source": "https://github.com/guzzle/psr7/tree/2.9.0" }, "funding": [ { @@ -1989,20 +1245,20 @@ "type": "tidelift" } ], - "time": "2024-07-18T11:15:46+00:00" + "time": "2026-03-10T16:41:02+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.4", + "version": "v1.0.5", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", - "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1", "shasum": "" }, "require": { @@ -2011,7 +1267,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.44 || ^9.6.25", "uri-template/tests": "1.0.0" }, "type": "library", @@ -2059,7 +1315,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.5" }, "funding": [ { @@ -2075,20 +1331,93 @@ "type": "tidelift" } ], - "time": "2025-02-03T10:55:03+00:00" + "time": "2025-08-22T14:27:06+00:00" }, { - "name": "jean85/pretty-package-versions", - "version": "2.1.0", + "name": "inertiajs/inertia-laravel", + "version": "v2.0.24", "source": { "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10" + "url": "https://github.com/inertiajs/inertia-laravel.git", + "reference": "ea345adad12f110edbbc4bef03b69c2374a535d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", - "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/ea345adad12f110edbbc4bef03b69c2374a535d4", + "reference": "ea345adad12f110edbbc4bef03b69c2374a535d4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel/framework": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1.0", + "symfony/console": "^6.2|^7.0|^8.0" + }, + "conflict": { + "laravel/boost": "<2.2.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.2", + "larastan/larastan": "^3.0", + "laravel/pint": "^1.16", + "mockery/mockery": "^1.3.3", + "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0", + "phpunit/phpunit": "^10.4|^11.5|^12.0", + "roave/security-advisories": "dev-master" + }, + "suggest": { + "ext-pcntl": "Recommended when running the Inertia SSR server via the `inertia:start-ssr` artisan command." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Inertia\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "./helpers.php" + ], + "psr-4": { + "Inertia\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Reinink", + "email": "jonathan@reinink.ca", + "homepage": "https://reinink.ca" + } + ], + "description": "The Laravel adapter for Inertia.js.", + "keywords": [ + "inertia", + "laravel" + ], + "support": { + "issues": "https://github.com/inertiajs/inertia-laravel/issues", + "source": "https://github.com/inertiajs/inertia-laravel/tree/v2.0.24" + }, + "time": "2026-04-10T14:36:44+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", "shasum": "" }, "require": { @@ -2098,8 +1427,9 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^1.4", + "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^7.5|^8.5|^9.6", + "rector/rector": "^2.0", "vimeo/psalm": "^4.3 || ^5.0" }, "type": "library", @@ -2132,30 +1462,30 @@ ], "support": { "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0" + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" }, - "time": "2024-11-18T16:19:46+00:00" + "time": "2025-03-19T14:43:43+00:00" }, { "name": "laravel/framework", - "version": "v11.44.1", + "version": "v13.6.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "0883d4175f4e2b5c299e7087ad3c74f2ce195c6d" + "reference": "416a93ea9c53161e0d4b8a44045f447b65a7d2f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/0883d4175f4e2b5c299e7087ad3c74f2ce195c6d", - "reference": "0883d4175f4e2b5c299e7087ad3c74f2ce195c6d", + "url": "https://api.github.com/repos/laravel/framework/zipball/416a93ea9c53161e0d4b8a44045f447b65a7d2f1", + "reference": "416a93ea9c53161e0d4b8a44045f447b65a7d2f1", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.4", - "egulias/email-validator": "^3.2.1|^4.0", + "egulias/email-validator": "^4.0", "ext-ctype": "*", "ext-filter": "*", "ext-hash": "*", @@ -2165,33 +1495,35 @@ "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/promises": "^2.0.3", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", - "laravel/serializable-closure": "^1.3|^2.0", - "league/commonmark": "^2.6", + "laravel/prompts": "^0.3.0", + "laravel/serializable-closure": "^2.0.10", + "league/commonmark": "^2.8.1", "league/flysystem": "^3.25.1", "league/flysystem-local": "^3.25.1", "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.6|^3.8.4", + "nesbot/carbon": "^3.8.4", "nunomaduro/termwind": "^2.0", - "php": "^8.2", - "psr/container": "^1.1.1|^2.0.1", - "psr/log": "^1.0|^2.0|^3.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", + "php": "^8.3", + "psr/container": "^1.1.1 || ^2.0.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^7.0.3", - "symfony/error-handler": "^7.0.3", - "symfony/finder": "^7.0.3", - "symfony/http-foundation": "^7.2.0", - "symfony/http-kernel": "^7.0.3", - "symfony/mailer": "^7.0.3", - "symfony/mime": "^7.0.3", - "symfony/polyfill-php83": "^1.31", - "symfony/process": "^7.0.3", - "symfony/routing": "^7.0.3", - "symfony/uid": "^7.0.3", - "symfony/var-dumper": "^7.0.3", + "symfony/console": "^7.4.0 || ^8.0.0", + "symfony/error-handler": "^7.4.0 || ^8.0.0", + "symfony/finder": "^7.4.0 || ^8.0.0", + "symfony/http-foundation": "^7.4.0 || ^8.0.0", + "symfony/http-kernel": "^7.4.0 || ^8.0.0", + "symfony/mailer": "^7.4.0 || ^8.0.0", + "symfony/mime": "^7.4.0 || ^8.0.0", + "symfony/polyfill-php84": "^1.33", + "symfony/polyfill-php85": "^1.33", + "symfony/process": "^7.4.5 || ^8.0.5", + "symfony/routing": "^7.4.0 || ^8.0.0", + "symfony/uid": "^7.4.0 || ^8.0.0", + "symfony/var-dumper": "^7.4.0 || ^8.0.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.6.1", "voku/portable-ascii": "^2.0.2" @@ -2200,9 +1532,9 @@ "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.1|2.0", - "psr/log-implementation": "1.0|2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0" + "psr/container-implementation": "1.1 || 2.0", + "psr/log-implementation": "1.0 || 2.0 || 3.0", + "psr/simple-cache-implementation": "1.0 || 2.0 || 3.0" }, "replace": { "illuminate/auth": "self.version", @@ -2223,6 +1555,7 @@ "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", + "illuminate/json-schema": "self.version", "illuminate/log": "self.version", "illuminate/macroable": "self.version", "illuminate/mail": "self.version", @@ -2232,6 +1565,7 @@ "illuminate/process": "self.version", "illuminate/queue": "self.version", "illuminate/redis": "self.version", + "illuminate/reflection": "self.version", "illuminate/routing": "self.version", "illuminate/session": "self.version", "illuminate/support": "self.version", @@ -2246,7 +1580,6 @@ "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", "fakerphp/faker": "^1.24", - "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^2.4", "laravel/pint": "^1.18", "league/flysystem-aws-s3-v3": "^3.25.1", @@ -2255,22 +1588,24 @@ "league/flysystem-read-only": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^9.11.2", - "pda/pheanstalk": "^5.0.6", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^11.0.0", + "pda/pheanstalk": "^7.0.0 || ^8.0.0", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^10.5.35|^11.3.6|^12.0.1", - "predis/predis": "^2.3", - "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0.3", - "symfony/http-client": "^7.0.3", - "symfony/psr-http-message-bridge": "^7.0.3", - "symfony/translation": "^7.0.3" + "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", + "predis/predis": "^2.3 || ^3.0", + "rector/rector": "^2.3", + "resend/resend-php": "^1.0", + "symfony/cache": "^7.4.0 || ^8.0.0", + "symfony/http-client": "^7.4.0 || ^8.0.0", + "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", + "symfony/translation": "^7.4.0 || ^8.0.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", - "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "brianium/paratest": "Required to run tests in parallel (^7.0 || ^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -2279,8 +1614,8 @@ "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).", + "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", @@ -2289,24 +1624,25 @@ "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", "mockery/mockery": "Required to use mocking (^1.6).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^7.0 || ^8.0).", "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.3.6|^12.0.1).", - "predis/predis": "Required to use the predis connector (^2.3).", + "phpunit/phpunit": "Required to use assertions and run tests (^11.5.50 || ^12.5.8 || ^13.0.3).", + "predis/predis": "Required to use the predis connector (^2.3 || ^3.0).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0 || ^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0 || ^1.0).", + "spatie/fork": "Required to use the 'fork' concurrency driver (^1.2).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.4 || ^8.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.4 || ^8.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.4 || ^8.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.4 || ^8.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.4 || ^8.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "11.x-dev" + "dev-master": "13.0.x-dev" } }, "autoload": { @@ -2317,6 +1653,7 @@ "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Log/functions.php", + "src/Illuminate/Reflection/helpers.php", "src/Illuminate/Support/functions.php", "src/Illuminate/Support/helpers.php" ], @@ -2325,7 +1662,8 @@ "Illuminate\\Support\\": [ "src/Illuminate/Macroable/", "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/" + "src/Illuminate/Conditionable/", + "src/Illuminate/Reflection/" ] } }, @@ -2349,38 +1687,38 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-03-05T15:34:10+00:00" + "time": "2026-04-21T13:32:11+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.5", + "version": "v0.3.17", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1" + "reference": "6a82ac19a28b916ae0885828795dbd4c59d9a818" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1", - "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1", + "url": "https://api.github.com/repos/laravel/prompts/zipball/6a82ac19a28b916ae0885828795dbd4c59d9a818", + "reference": "6a82ac19a28b916ae0885828795dbd4c59d9a818", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "ext-mbstring": "*", "php": "^8.1", - "symfony/console": "^6.2|^7.0" + "symfony/console": "^6.2|^7.0|^8.0" }, "conflict": { "illuminate/console": ">=10.17.0 <10.25.0", "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { - "illuminate/collections": "^10.0|^11.0|^12.0", + "illuminate/collections": "^10.0|^11.0|^12.0|^13.0", "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3|^3.4", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" + "pestphp/pest": "^2.3|^3.4|^4.0", + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" }, "suggest": { "ext-pcntl": "Required for the spinner to be animated." @@ -2406,33 +1744,89 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.5" + "source": "https://github.com/laravel/prompts/tree/v0.3.17" }, - "time": "2025-02-11T13:34:40+00:00" + "time": "2026-04-20T16:07:33+00:00" }, { - "name": "laravel/serializable-closure", - "version": "v2.0.3", + "name": "laravel/sentinel", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "f379c13663245f7aa4512a7869f62eb14095f23f" + "url": "https://github.com/laravel/sentinel.git", + "reference": "972d9885d9d14312a118e9565c4e6ecc5e751ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f379c13663245f7aa4512a7869f62eb14095f23f", - "reference": "f379c13663245f7aa4512a7869f62eb14095f23f", + "url": "https://api.github.com/repos/laravel/sentinel/zipball/972d9885d9d14312a118e9565c4e6ecc5e751ea1", + "reference": "972d9885d9d14312a118e9565c4e6ecc5e751ea1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/container": "^8.37|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.0" + }, + "require-dev": { + "laravel/pint": "^1.27", + "orchestra/testbench": "^6.47.1|^7.56|^8.37|^9.16|^10.9|^11.0", + "phpstan/phpstan": "^2.1.33" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sentinel\\SentinelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sentinel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mior Muhammad Zaki", + "email": "mior@laravel.com" + } + ], + "support": { + "source": "https://github.com/laravel/sentinel/tree/v1.1.0" + }, + "time": "2026-03-24T14:03:38+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.12", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "a6abb4e54f6fcd3138120b9ad497f0bd146f9919" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/a6abb4e54f6fcd3138120b9ad497f0bd146f9919", + "reference": "a6abb4e54f6fcd3138120b9ad497f0bd146f9919", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "illuminate/support": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36|^3.0", + "pestphp/pest": "^2.36|^3.0|^4.0", "phpstan/phpstan": "^2.0", - "symfony/var-dumper": "^6.2.0|^7.0.0" + "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0" }, "type": "library", "extra": { @@ -2469,37 +1863,106 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2025-02-11T15:03:05+00:00" + "time": "2026-04-14T13:33:34+00:00" }, { - "name": "laravel/tinker", - "version": "v2.10.1", + "name": "laravel/telescope", + "version": "v5.20.0", "source": { "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" + "url": "https://github.com/laravel/telescope.git", + "reference": "38ec6e6006a67e05e0c476c5f8ef3550b72e43d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", + "url": "https://api.github.com/repos/laravel/telescope/zipball/38ec6e6006a67e05e0c476c5f8ef3550b72e43d8", + "reference": "38ec6e6006a67e05e0c476c5f8ef3550b72e43d8", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "php": "^7.2.5|^8.0", - "psy/psysh": "^0.11.1|^0.12.0", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + "ext-json": "*", + "laravel/framework": "^8.37|^9.0|^10.0|^11.0|^12.0|^13.0", + "laravel/sentinel": "^1.0", + "php": "^8.0", + "symfony/console": "^5.3|^6.0|^7.0|^8.0", + "symfony/var-dumper": "^5.0|^6.0|^7.0|^8.0" + }, + "require-dev": { + "ext-gd": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "laravel/octane": "^1.4|^2.0", + "orchestra/testbench": "^6.47.1|^7.55|^8.36|^9.15|^10.8|^11.0", + "phpstan/phpstan": "^1.10" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Telescope\\TelescopeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Telescope\\": "src/", + "Laravel\\Telescope\\Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mohamed Said", + "email": "mohamed@laravel.com" + } + ], + "description": "An elegant debug assistant for the Laravel framework.", + "keywords": [ + "debugging", + "laravel", + "monitoring" + ], + "support": { + "issues": "https://github.com/laravel/telescope/issues", + "source": "https://github.com/laravel/telescope/tree/v5.20.0" + }, + "time": "2026-04-06T12:52:26+00:00" + }, + { + "name": "laravel/tinker", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "4faba77764bd33411735936acdf30446d058c78b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/4faba77764bd33411735936acdf30446d058c78b", + "reference": "4faba77764bd33411735936acdf30446d058c78b", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.1", + "psy/psysh": "^0.12.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0|^8.0" }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" + "phpunit/phpunit": "^10.5|^11.5" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." + "illuminate/database": "The Illuminate Database package (^8.0|^9.0|^10.0|^11.0|^12.0|^13.0)." }, "type": "library", "extra": { @@ -2507,6 +1970,9 @@ "providers": [ "Laravel\\Tinker\\TinkerServiceProvider" ] + }, + "branch-alias": { + "dev-master": "3.x-dev" } }, "autoload": { @@ -2533,85 +1999,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.1" + "source": "https://github.com/laravel/tinker/tree/v3.0.2" }, - "time": "2025-01-27T14:24:01+00:00" - }, - { - "name": "laravel/ui", - "version": "v4.6.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/ui.git", - "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", - "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", - "shasum": "" - }, - "require": { - "illuminate/console": "^9.21|^10.0|^11.0|^12.0", - "illuminate/filesystem": "^9.21|^10.0|^11.0|^12.0", - "illuminate/support": "^9.21|^10.0|^11.0|^12.0", - "illuminate/validation": "^9.21|^10.0|^11.0|^12.0", - "php": "^8.0", - "symfony/console": "^6.0|^7.0" - }, - "require-dev": { - "orchestra/testbench": "^7.35|^8.15|^9.0|^10.0", - "phpunit/phpunit": "^9.3|^10.4|^11.5" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Ui\\UiServiceProvider" - ] - }, - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Ui\\": "src/", - "Illuminate\\Foundation\\Auth\\": "auth-backend/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Laravel UI utilities and presets.", - "keywords": [ - "laravel", - "ui" - ], - "support": { - "source": "https://github.com/laravel/ui/tree/v4.6.1" - }, - "time": "2025-01-28T15:15:29+00:00" + "time": "2026-03-17T14:54:13+00:00" }, { "name": "league/commonmark", - "version": "2.6.1", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d990688c91cedfb69753ffc2512727ec646df2ad" + "reference": "59fb075d2101740c337c7216e3f32b36c204218b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad", - "reference": "d990688c91cedfb69753ffc2512727ec646df2ad", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b", "shasum": "" }, "require": { @@ -2636,11 +2039,11 @@ "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 | ^7.0", - "symfony/process": "^5.4 | ^6.0 | ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0" + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" }, "suggest": { "symfony/yaml": "v2.3+ required if using the Front Matter extension" @@ -2648,7 +2051,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.7-dev" + "dev-main": "2.9-dev" } }, "autoload": { @@ -2705,7 +2108,7 @@ "type": "tidelift" } ], - "time": "2024-12-29T14:10:59+00:00" + "time": "2026-03-19T13:16:38+00:00" }, { "name": "league/config", @@ -2791,16 +2194,16 @@ }, { "name": "league/flysystem", - "version": "3.29.1", + "version": "3.33.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" + "reference": "570b8871e0ce693764434b29154c54b434905350" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/570b8871e0ce693764434b29154c54b434905350", + "reference": "570b8871e0ce693764434b29154c54b434905350", "shasum": "" }, "require": { @@ -2824,13 +2227,13 @@ "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", - "ext-mongodb": "^1.3", + "ext-mongodb": "^1.3|^2", "ext-zip": "*", "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", "guzzlehttp/psr7": "^2.6", "microsoft/azure-storage-blob": "^1.1", - "mongodb/mongodb": "^1.2", + "mongodb/mongodb": "^1.2|^2", "phpseclib/phpseclib": "^3.0.36", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", @@ -2868,22 +2271,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" + "source": "https://github.com/thephpleague/flysystem/tree/3.33.0" }, - "time": "2024-10-08T08:58:34+00:00" + "time": "2026-03-25T07:59:30+00:00" }, { "name": "league/flysystem-local", - "version": "3.29.0", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", "shasum": "" }, "require": { @@ -2917,9 +2320,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" }, - "time": "2024-08-09T21:24:39+00:00" + "time": "2026-01-23T15:30:45+00:00" }, { "name": "league/mime-type-detection", @@ -2979,33 +2382,38 @@ }, { "name": "league/uri", - "version": "7.5.1", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "81fb5145d2644324614cc532b28efd0215bda430" + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", - "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.5", - "php": "^8.1" + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" }, "conflict": { "league/uri-schemes": "^1.0" }, "suggest": { "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", "ext-fileinfo": "to create Data URI from file contennts", "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -3033,6 +2441,7 @@ "description": "URI manipulation library", "homepage": "https://uri.thephpleague.com", "keywords": [ + "URN", "data-uri", "file-uri", "ftp", @@ -3045,9 +2454,11 @@ "psr-7", "query-string", "querystring", + "rfc2141", "rfc3986", "rfc3987", "rfc6570", + "rfc8141", "uri", "uri-template", "url", @@ -3057,7 +2468,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.5.1" + "source": "https://github.com/thephpleague/uri/tree/7.8.1" }, "funding": [ { @@ -3065,26 +2476,25 @@ "type": "github" } ], - "time": "2024-12-08T08:40:02+00:00" + "time": "2026-03-15T20:22:25+00:00" }, { "name": "league/uri-interfaces", - "version": "7.5.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", "shasum": "" }, "require": { "ext-filter": "*", "php": "^8.1", - "psr/http-factory": "^1", "psr/http-message": "^1.1 || ^2.0" }, "suggest": { @@ -3092,6 +2502,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -3116,7 +2527,7 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", @@ -3141,7 +2552,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" }, "funding": [ { @@ -3149,162 +2560,49 @@ "type": "github" } ], - "time": "2024-12-08T08:18:47+00:00" + "time": "2026-03-08T20:05:35+00:00" }, { - "name": "litesaml/lightsaml", - "version": "4.5.0", + "name": "mcamara/laravel-localization", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/litesaml/lightsaml.git", - "reference": "144f1c7d99d22bb2f69ae55e57f238a7b87884cf" + "url": "https://github.com/mcamara/laravel-localization.git", + "reference": "b4b530b8d892cc8787b94059085a53b37224009b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/litesaml/lightsaml/zipball/144f1c7d99d22bb2f69ae55e57f238a7b87884cf", - "reference": "144f1c7d99d22bb2f69ae55e57f238a7b87884cf", + "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/b4b530b8d892cc8787b94059085a53b37224009b", + "reference": "b4b530b8d892cc8787b94059085a53b37224009b", "shasum": "" }, "require": { - "litesaml/schemas": "^3.0", - "php": "^8.1", - "psr/event-dispatcher": "^1.0", - "psr/log": "^3.0", - "robrichards/xmlseclibs": "^3.0", - "symfony/http-foundation": "^6.0|^7.0" + "laravel/framework": "^11.0|^12.0|^13.0", + "php": "^8.2" }, "require-dev": { - "mockery/mockery": "^1.4.4", - "php-cs-fixer/shim": "^3.70", - "phpstan/phpstan": "^1.8", - "phpunit/phpunit": "^10.1", - "pimple/pimple": "~3.0", - "rector/rector": "^1.2.2" + "orchestra/testbench": "^9.0|^10.0|^11.0", + "phpunit/phpunit": "^10.1|^11.0|^12.5.12" }, - "type": "library", - "autoload": { - "psr-4": { - "LightSaml\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "William", - "email": "work@suppo.fr", - "homepage": "https://github.com/william-suppo" - } - ], - "description": "SAML 2.0 PHP library", - "keywords": [ - "SAML 2.0", - "Single Logout", - "Single SignOn", - "library", - "lightSAML", - "php" - ], - "support": { - "docs": "https://litesaml.github.io/cookbook/", - "issues": "https://github.com/litesaml/lightsaml/issues", - "source": "https://github.com/litesaml/lightsaml" - }, - "time": "2025-02-28T07:24:20+00:00" - }, - { - "name": "litesaml/schemas", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/litesaml/schemas.git", - "reference": "11f0dec57cd55f7fd2378bf9f55ae6c7c38d15b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/litesaml/schemas/zipball/11f0dec57cd55f7fd2378bf9f55ae6c7c38d15b7", - "reference": "11f0dec57cd55f7fd2378bf9f55ae6c7c38d15b7", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "phpstan/phpstan": "^2.1.5", - "phpunit/phpunit": "^10.1", - "squizlabs/php_codesniffer": "^3.10.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "LiteSaml\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "William", - "email": "work@suppo.fr" - } - ], - "description": "Deliver schemas for Lite Saml library", - "support": { - "issues": "https://github.com/litesaml/schemas/issues", - "source": "https://github.com/litesaml/schemas/tree/3.1.1" - }, - "time": "2025-02-23T10:38:31+00:00" - }, - { - "name": "m4tthumphrey/php-gitlab-api", - "version": "11.14.0", - "source": { - "type": "git", - "url": "https://github.com/GitLabPHP/Client.git", - "reference": "6b805882e1478873cc89ee62d2decf74eee2d5f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GitLabPHP/Client/zipball/6b805882e1478873cc89ee62d2decf74eee2d5f2", - "reference": "6b805882e1478873cc89ee62d2decf74eee2d5f2", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-xml": "*", - "php": "^7.4.15 || ^8.0.2", - "php-http/cache-plugin": "^1.8.1 || ^2.0", - "php-http/client-common": "^2.7.1", - "php-http/discovery": "^1.19.2", - "php-http/httplug": "^2.4", - "php-http/multipart-stream-builder": "^1.3", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "psr/http-client-implementation": "^1.0", - "psr/http-factory-implementation": "^1.0", - "psr/http-message": "^1.1 || ^2.0", - "symfony/options-resolver": "^4.4 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.26" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "guzzlehttp/guzzle": "^7.8", - "http-interop/http-factory-guzzle": "^1.2" + "suggest": { + "ext-intl": "*" }, "type": "library", "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false + "laravel": { + "aliases": { + "LaravelLocalization": "Mcamara\\LaravelLocalization\\Facades\\LaravelLocalization" + }, + "providers": [ + "Mcamara\\LaravelLocalization\\LaravelLocalizationServiceProvider" + ] } }, "autoload": { - "psr-4": { - "Gitlab\\": "src/" - } + "psr-0": { + "Mcamara\\LaravelLocalization": "src/" + }, + "classmap": [] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3312,62 +2610,53 @@ ], "authors": [ { - "name": "Fabien Bourigault", - "email": "bourigaultfabien@gmail.com", - "homepage": "https://github.com/fbourigault" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Matt Humphrey", - "email": "matth@windsor-telecom.co.uk", - "homepage": "https://github.com/m4tthumphrey" - }, - { - "name": "Miguel Piedrafita", - "email": "github@miguelpiedrafita.com", - "homepage": "https://github.com/m1guelpf" + "name": "Marc Cámara", + "email": "mcamara88@gmail.com", + "role": "Developer" } ], - "description": "GitLab API v4 client for PHP", + "description": "Easy localization for Laravel", + "homepage": "https://github.com/mcamara/laravel-localization", "keywords": [ - "api", - "gitlab" + "laravel", + "localization", + "php" ], "support": { - "issues": "https://github.com/GitLabPHP/Client/issues", - "source": "https://github.com/GitLabPHP/Client/tree/11.14.0" + "issues": "https://github.com/mcamara/laravel-localization/issues", + "source": "https://github.com/mcamara/laravel-localization/tree/v2.4.0" }, "funding": [ { - "url": "https://github.com/GrahamCampbell", + "url": "https://github.com/iwasherefirst2", + "type": "github" + }, + { + "url": "https://github.com/mcamara", "type": "github" } ], - "time": "2024-03-17T21:35:56+00:00" + "time": "2026-03-17T19:24:07+00:00" }, { "name": "mews/purifier", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/mewebstudio/Purifier.git", - "reference": "acc71bc512dcf9b87144546d0e3055fc76d244ff" + "reference": "b2705cc6c832ce7229373418e191d71b6c037841" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/acc71bc512dcf9b87144546d0e3055fc76d244ff", - "reference": "acc71bc512dcf9b87144546d0e3055fc76d244ff", + "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/b2705cc6c832ce7229373418e191d71b6c037841", + "reference": "b2705cc6c832ce7229373418e191d71b6c037841", "shasum": "" }, "require": { "ezyang/htmlpurifier": "^4.16.0", - "illuminate/config": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/filesystem": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/config": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/filesystem": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "php": "^7.2|^8.0" }, "require-dev": { @@ -3423,22 +2712,22 @@ ], "support": { "issues": "https://github.com/mewebstudio/Purifier/issues", - "source": "https://github.com/mewebstudio/Purifier/tree/3.4.3" + "source": "https://github.com/mewebstudio/Purifier/tree/3.4.4" }, - "time": "2025-02-24T16:00:29+00:00" + "time": "2026-04-15T16:41:08+00:00" }, { "name": "monolog/monolog", - "version": "3.8.1", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", "shasum": "" }, "require": { @@ -3456,7 +2745,7 @@ "graylog2/gelf-php": "^1.4.2 || ^2.0", "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", + "mongodb/mongodb": "^1.8 || ^2.0", "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.8", "phpstan/phpstan": "^2", @@ -3516,7 +2805,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.1" + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" }, "funding": [ { @@ -3528,253 +2817,20 @@ "type": "tidelift" } ], - "time": "2024-12-05T17:15:07+00:00" - }, - { - "name": "mpdf/mpdf", - "version": "v8.2.5", - "source": { - "type": "git", - "url": "https://github.com/mpdf/mpdf.git", - "reference": "e175b05e3e00977b85feb96a8cccb174ac63621f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/e175b05e3e00977b85feb96a8cccb174ac63621f", - "reference": "e175b05e3e00977b85feb96a8cccb174ac63621f", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "ext-mbstring": "*", - "mpdf/psr-http-message-shim": "^1.0 || ^2.0", - "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", - "myclabs/deep-copy": "^1.7", - "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/http-message": "^1.0 || ^2.0", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "setasign/fpdi": "^2.1" - }, - "require-dev": { - "mockery/mockery": "^1.3.0", - "mpdf/qrcode": "^1.1.0", - "squizlabs/php_codesniffer": "^3.5.0", - "tracy/tracy": "~2.5", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "ext-bcmath": "Needed for generation of some types of barcodes", - "ext-xml": "Needed mainly for SVG manipulation", - "ext-zlib": "Needed for compression of embedded resources, such as fonts" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Mpdf\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-only" - ], - "authors": [ - { - "name": "Matěj Humpál", - "role": "Developer, maintainer" - }, - { - "name": "Ian Back", - "role": "Developer (retired)" - } - ], - "description": "PHP library generating PDF files from UTF-8 encoded HTML", - "homepage": "https://mpdf.github.io", - "keywords": [ - "pdf", - "php", - "utf-8" - ], - "support": { - "docs": "https://mpdf.github.io", - "issues": "https://github.com/mpdf/mpdf/issues", - "source": "https://github.com/mpdf/mpdf" - }, - "funding": [ - { - "url": "https://www.paypal.me/mpdf", - "type": "custom" - } - ], - "time": "2024-11-18T15:30:42+00:00" - }, - { - "name": "mpdf/psr-http-message-shim", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/mpdf/psr-http-message-shim.git", - "reference": "f25a0153d645e234f9db42e5433b16d9b113920f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mpdf/psr-http-message-shim/zipball/f25a0153d645e234f9db42e5433b16d9b113920f", - "reference": "f25a0153d645e234f9db42e5433b16d9b113920f", - "shasum": "" - }, - "require": { - "psr/http-message": "^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Mpdf\\PsrHttpMessageShim\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Dorison", - "email": "mark@chromatichq.com" - }, - { - "name": "Kristofer Widholm", - "email": "kristofer@chromatichq.com" - }, - { - "name": "Nigel Cunningham", - "email": "nigel.cunningham@technocrat.com.au" - } - ], - "description": "Shim to allow support of different psr/message versions.", - "support": { - "issues": "https://github.com/mpdf/psr-http-message-shim/issues", - "source": "https://github.com/mpdf/psr-http-message-shim/tree/v2.0.1" - }, - "time": "2023-10-02T14:34:03+00:00" - }, - { - "name": "mpdf/psr-log-aware-trait", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/mpdf/psr-log-aware-trait.git", - "reference": "a633da6065e946cc491e1c962850344bb0bf3e78" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mpdf/psr-log-aware-trait/zipball/a633da6065e946cc491e1c962850344bb0bf3e78", - "reference": "a633da6065e946cc491e1c962850344bb0bf3e78", - "shasum": "" - }, - "require": { - "psr/log": "^3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Mpdf\\PsrLogAwareTrait\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Dorison", - "email": "mark@chromatichq.com" - }, - { - "name": "Kristofer Widholm", - "email": "kristofer@chromatichq.com" - } - ], - "description": "Trait to allow support of different psr/log versions.", - "support": { - "issues": "https://github.com/mpdf/psr-log-aware-trait/issues", - "source": "https://github.com/mpdf/psr-log-aware-trait/tree/v3.0.0" - }, - "time": "2023-05-03T06:19:36+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.13.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-02-12T12:17:51+00:00" + "time": "2026-01-02T08:56:05+00:00" }, { "name": "nesbot/carbon", - "version": "3.8.6", + "version": "3.11.4", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd" + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ff2f20cf83bd4d503720632ce8a426dc747bf7fd", - "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/e890471a3494740f7d9326d72ce6a8c559ffee60", + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60", "shasum": "" }, "require": { @@ -3782,9 +2838,9 @@ "ext-json": "*", "php": "^8.1", "psr/clock": "^1.0", - "symfony/clock": "^6.3 || ^7.0", + "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" }, "provide": { "psr/clock-implementation": "1.0" @@ -3792,14 +2848,13 @@ "require-dev": { "doctrine/dbal": "^3.6.3 || ^4.0", "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.57.2", + "friendsofphp/php-cs-fixer": "^v3.87.1", "kylekatarnls/multi-tester": "^2.5.3", - "ondrejmirtes/better-reflection": "^6.25.0.4", "phpmd/phpmd": "^2.15.0", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "^1.11.2", - "phpunit/phpunit": "^10.5.20", - "squizlabs/php_codesniffer": "^3.9.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" }, "bin": [ "bin/carbon" @@ -3842,14 +2897,14 @@ } ], "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", + "homepage": "https://carbonphp.github.io/carbon/", "keywords": [ "date", "datetime", "time" ], "support": { - "docs": "https://carbon.nesbot.com/docs", + "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", "issues": "https://github.com/CarbonPHP/carbon/issues", "source": "https://github.com/CarbonPHP/carbon" }, @@ -3867,29 +2922,31 @@ "type": "tidelift" } ], - "time": "2025-02-20T17:33:38+00:00" + "time": "2026-04-07T09:57:54+00:00" }, { "name": "nette/schema", - "version": "v1.3.2", + "version": "v1.3.5", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.4" + "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^1.0", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -3899,6 +2956,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -3927,35 +2987,37 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.2" + "source": "https://github.com/nette/schema/tree/v1.3.5" }, - "time": "2024-10-06T23:10:23+00:00" + "time": "2026-02-23T03:47:12+00:00" }, { "name": "nette/utils", - "version": "v4.0.5", + "version": "v4.1.3", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe", + "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe", "shasum": "" }, "require": { - "php": "8.0 - 8.4" + "php": "8.2 - 8.5" }, "conflict": { "nette/finder": "<3", "nette/schema": "<1.2.2" }, "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", + "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -3969,10 +3031,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -4013,22 +3078,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" + "source": "https://github.com/nette/utils/tree/v4.1.3" }, - "time": "2024-08-07T15:39:19+00:00" + "time": "2026-02-13T03:05:33+00:00" }, { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -4047,7 +3112,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -4071,37 +3136,37 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "nunomaduro/termwind", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" + "reference": "712a31b768f5daea284c2169a7d227031001b9a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", - "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.1.8" + "symfony/console": "^7.4.4 || ^8.0.4" }, "require-dev": { - "illuminate/console": "^11.33.2", - "laravel/pint": "^1.18.2", + "illuminate/console": "^11.47.0", + "laravel/pint": "^1.27.1", "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0", - "phpstan/phpstan": "^1.12.11", - "phpstan/phpstan-strict-rules": "^1.6.1", - "symfony/var-dumper": "^7.1.8", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5 || ^8.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -4133,7 +3198,7 @@ "email": "enunomaduro@gmail.com" } ], - "description": "Its like Tailwind CSS, but for the console.", + "description": "It's like Tailwind CSS, but for the console.", "keywords": [ "cli", "console", @@ -4144,7 +3209,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" }, "funding": [ { @@ -4160,7 +3225,7 @@ "type": "github" } ], - "time": "2024-11-21T10:39:51+00:00" + "time": "2026-02-16T23:10:27+00:00" }, { "name": "nyholm/psr7", @@ -4241,504 +3306,81 @@ "time": "2024-09-09T07:06:30+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.100", + "name": "onelogin/php-saml", + "version": "4.3.1", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + "url": "https://github.com/SAML-Toolkits/php-saml.git", + "reference": "b009f160e4ac11f49366a45e0d45706b48429353" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "url": "https://api.github.com/repos/SAML-Toolkits/php-saml/zipball/b009f160e4ac11f49366a45e0d45706b48429353", + "reference": "b009f160e4ac11f49366a45e0d45706b48429353", "shasum": "" }, "require": { - "php": ">= 7" + "php": ">=7.3", + "robrichards/xmlseclibs": ">=3.1.4" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" + "pdepend/pdepend": "^2.8.0", + "php-coveralls/php-coveralls": "^2.0", + "phploc/phploc": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "phpunit/phpunit": "^9.5", + "sebastian/phpcpd": "^4.0 || ^5.0 || ^6.0 ", + "squizlabs/php_codesniffer": "^3.5.8" }, "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T08:29:30+00:00" - }, - { - "name": "php-http/cache-plugin", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/cache-plugin.git", - "reference": "5c591e9e04602cec12307e3e1be3abefeb005e29" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/5c591e9e04602cec12307e3e1be3abefeb005e29", - "reference": "5c591e9e04602cec12307e3e1be3abefeb005e29", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/client-common": "^1.9 || ^2.0", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "psr/http-factory-implementation": "^1.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "require-dev": { - "nyholm/psr7": "^1.6.1", - "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + "ext-curl": "Install curl lib to be able to use the IdPMetadataParser for parsing remote XMLs", + "ext-dom": "Install xml lib", + "ext-openssl": "Install openssl lib in order to handle with x509 certs (require to support sign and encryption)", + "ext-zlib": "Install zlib" }, "type": "library", "autoload": { "psr-4": { - "Http\\Client\\Common\\Plugin\\": "src/" + "OneLogin\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "PSR-6 Cache plugin for HTTPlug", - "homepage": "http://httplug.io", + "description": "PHP SAML Toolkit", + "homepage": "https://github.com/SAML-Toolkits/php-saml", "keywords": [ - "cache", - "http", - "httplug", - "plugin" + "Federation", + "SAML2", + "SSO", + "identity", + "saml" ], "support": { - "issues": "https://github.com/php-http/cache-plugin/issues", - "source": "https://github.com/php-http/cache-plugin/tree/2.0.1" + "email": "sixto.martin.garcia@gmail.com", + "issues": "https://github.com/onelogin/SAML-Toolkits/issues", + "source": "https://github.com/onelogin/SAML-Toolkits/" }, - "time": "2024-10-02T11:25:38+00:00" - }, - { - "name": "php-http/client-common", - "version": "2.7.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/client-common.git", - "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46", - "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/httplug": "^2.0", - "php-http/message": "^1.6", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0 || ^2.0", - "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "doctrine/instantiator": "^1.1", - "guzzlehttp/psr7": "^1.4", - "nyholm/psr7": "^1.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" - }, - "suggest": { - "ext-json": "To detect JSON responses with the ContentTypePlugin", - "ext-libxml": "To detect XML responses with the ContentTypePlugin", - "php-http/cache-plugin": "PSR-6 Cache plugin", - "php-http/logger-plugin": "PSR-3 Logger plugin", - "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\Common\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "url": "https://github.com/SAML-Toolkits", + "type": "github" } ], - "description": "Common HTTP Client implementations and tools for HTTPlug", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "common", - "http", - "httplug" - ], - "support": { - "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.7.2" - }, - "time": "2024-09-24T06:21:48+00:00" - }, - { - "name": "php-http/discovery", - "version": "1.20.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0|^2.0", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "nyholm/psr7": "<1.0", - "zendframework/zend-diactoros": "*" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "*", - "psr/http-factory-implementation": "*", - "psr/http-message-implementation": "*" - }, - "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "graham-campbell/phpspec-skip-example-extension": "^5.0", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", - "sebastian/comparator": "^3.0.5 || ^4.0.8", - "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" - }, - "type": "composer-plugin", - "extra": { - "class": "Http\\Discovery\\Composer\\Plugin", - "plugin-optional": true - }, - "autoload": { - "psr-4": { - "Http\\Discovery\\": "src/" - }, - "exclude-from-classmap": [ - "src/Composer/Plugin.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", - "homepage": "http://php-http.org", - "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr17", - "psr7" - ], - "support": { - "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.20.0" - }, - "time": "2024-10-02T11:20:13+00:00" - }, - { - "name": "php-http/httplug", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/promise": "^1.1", - "psr/http-client": "^1.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", - "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http" - ], - "support": { - "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.4.1" - }, - "time": "2024-09-23T11:39:58+00:00" - }, - { - "name": "php-http/message", - "version": "1.16.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/message.git", - "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a", - "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a", - "shasum": "" - }, - "require": { - "clue/stream-filter": "^1.5", - "php": "^7.2 || ^8.0", - "psr/http-message": "^1.1 || ^2.0" - }, - "provide": { - "php-http/message-factory-implementation": "1.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.6", - "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0 || ^2.0", - "laminas/laminas-diactoros": "^2.0 || ^3.0", - "php-http/message-factory": "^1.0.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "slim/slim": "^3.0" - }, - "suggest": { - "ext-zlib": "Used with compressor/decompressor streams", - "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "laminas/laminas-diactoros": "Used with Diactoros Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation" - }, - "type": "library", - "autoload": { - "files": [ - "src/filters.php" - ], - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "HTTP Message related tools", - "homepage": "http://php-http.org", - "keywords": [ - "http", - "message", - "psr-7" - ], - "support": { - "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.16.2" - }, - "time": "2024-10-02T11:34:13+00:00" - }, - { - "name": "php-http/multipart-stream-builder", - "version": "1.4.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/multipart-stream-builder.git", - "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/10086e6de6f53489cca5ecc45b6f468604d3460e", - "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/discovery": "^1.15", - "psr/http-factory-implementation": "^1.0" - }, - "require-dev": { - "nyholm/psr7": "^1.0", - "php-http/message": "^1.5", - "php-http/message-factory": "^1.0.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Message\\MultipartStream\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com" - } - ], - "description": "A builder class that help you create a multipart stream", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "multipart stream", - "stream" - ], - "support": { - "issues": "https://github.com/php-http/multipart-stream-builder/issues", - "source": "https://github.com/php-http/multipart-stream-builder/tree/1.4.2" - }, - "time": "2024-09-04T13:22:54+00:00" - }, - { - "name": "php-http/promise", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", - "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.3.1" - }, - "time": "2024-03-15T13:55:21+00:00" + "time": "2025-12-09T10:50:49+00:00" }, { "name": "phpoption/phpoption", - "version": "1.9.3", + "version": "1.9.5", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", "shasum": "" }, "require": { @@ -4746,7 +3388,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" }, "type": "library", "extra": { @@ -4788,7 +3430,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" }, "funding": [ { @@ -4800,20 +3442,20 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:41:07+00:00" + "time": "2025-12-27T19:41:33+00:00" }, { "name": "phpseclib/phpseclib", - "version": "2.0.48", + "version": "2.0.53", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61" + "reference": "2d1a664b940b9b8f367185307dc010d11a2790f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/eaa7be704b8b93a6913b69eb7f645a59d7731b61", - "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/2d1a664b940b9b8f367185307dc010d11a2790f3", + "reference": "2d1a664b940b9b8f367185307dc010d11a2790f3", "shasum": "" }, "require": { @@ -4821,7 +3463,7 @@ }, "require-dev": { "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^8.5|^9.4", "squizlabs/php_codesniffer": "~2.0" }, "suggest": { @@ -4894,7 +3536,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.48" + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.53" }, "funding": [ { @@ -4910,56 +3552,7 @@ "type": "tidelift" } ], - "time": "2024-12-14T21:03:54+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" + "time": "2026-04-10T01:30:02+00:00" }, { "name": "psr/clock", @@ -5375,16 +3968,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.7", + "version": "v0.12.22", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", - "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3be75d5b9244936dd4ac62ade2bfb004d13acf0f", + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f", "shasum": "" }, "require": { @@ -5392,18 +3985,19 @@ "ext-tokenizer": "*", "nikic/php-parser": "^5.0 || ^4.0", "php": "^8.0 || ^7.4", - "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" }, "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ @@ -5434,12 +4028,11 @@ "authors": [ { "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "email": "justin@justinhileman.info" } ], "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "homepage": "https://psysh.org", "keywords": [ "REPL", "console", @@ -5448,9 +4041,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.7" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.22" }, - "time": "2024-12-10T01:58:33+00:00" + "time": "2026-03-22T23:03:24+00:00" }, { "name": "ralouphie/getallheaders", @@ -5498,16 +4091,16 @@ }, { "name": "ramsey/collection", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109" + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", - "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { @@ -5568,27 +4161,26 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.1.0" + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "time": "2025-03-02T04:48:29+00:00" + "time": "2025-03-22T05:38:12+00:00" }, { "name": "ramsey/uuid", - "version": "4.7.6", + "version": "4.9.2", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + "reference": "8429c78ca35a09f27565311b98101e2826affde0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", + "reference": "8429c78ca35a09f27565311b98101e2826affde0", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", - "ext-json": "*", + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -5596,26 +4188,23 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "captainhook/captainhook": "^5.10", + "captainhook/captainhook": "^5.25", "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9", - "ramsey/composer-repl": "^1.4", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", @@ -5650,32 +4239,22 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.6" + "source": "https://github.com/ramsey/uuid/tree/4.9.2" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2024-04-27T21:32:50+00:00" + "time": "2025-12-14T04:43:48+00:00" }, { "name": "robrichards/xmlseclibs", - "version": "3.1.3", + "version": "3.1.5", "source": { "type": "git", "url": "https://github.com/robrichards/xmlseclibs.git", - "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07" + "reference": "03062be78178cbb5e8f605cd255dc32a14981f92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/2bdfd742624d739dfadbd415f00181b4a77aaf07", - "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07", + "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/03062be78178cbb5e8f605cd255dc32a14981f92", + "reference": "03062be78178cbb5e8f605cd255dc32a14981f92", "shasum": "" }, "require": { @@ -5702,22 +4281,106 @@ ], "support": { "issues": "https://github.com/robrichards/xmlseclibs/issues", - "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.3" + "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.5" }, - "time": "2024-11-20T21:13:56+00:00" + "time": "2026-03-13T10:31:56+00:00" }, { - "name": "sentry/sentry", - "version": "4.10.0", + "name": "scaler-tech/laravel-saml2", + "version": "2.7.2", "source": { "type": "git", - "url": "https://github.com/getsentry/sentry-php.git", - "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856" + "url": "https://github.com/scaler-tech/laravel-saml2.git", + "reference": "765b4bb0c56c1fb13b14779e843cd935c5b2eb6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/2af937d47d8aadb8dab0b1d7b9557e495dd12856", - "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856", + "url": "https://api.github.com/repos/scaler-tech/laravel-saml2/zipball/765b4bb0c56c1fb13b14779e843cd935c5b2eb6a", + "reference": "765b4bb0c56c1fb13b14779e843cd935c5b2eb6a", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "illuminate/console": "^9.0 || ^10.0 || ^11.0 || ^12.0 || ^13.0", + "illuminate/database": "^9.0 || ^10.0 || ^11.0 || ^12.0 || ^13.0", + "illuminate/support": "^9.0 || ^10.0 || ^11.0 || ^12.0 || ^13.0", + "onelogin/php-saml": "^4.0", + "php": ">=8.2" + }, + "replace": { + "24slides/laravel-saml2": "self.version" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.94", + "kubawerlos/php-cs-fixer-custom-fixers": "^3.36", + "mockery/mockery": "^1.6", + "orchestra/testbench": "^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6 || ^10.5 || ^11.5 || ^12.5" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Saml2": "Slides\\Saml2\\Facades\\Auth" + }, + "providers": [ + "Slides\\Saml2\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Slides\\Saml2\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Scaler Tech", + "homepage": "https://github.com/scaler-tech/laravel-saml2", + "role": "Maintainer" + }, + { + "name": "Artem Brezhnev", + "email": "brezzhnev@gmail.com" + } + ], + "description": "SAML2 Service Provider integration for Laravel applications, based on OneLogin toolkit", + "homepage": "https://github.com/scaler-tech/laravel-saml2", + "keywords": [ + "SAML2", + "SSO", + "laravel", + "onelogin", + "saml" + ], + "support": { + "issues": "https://github.com/scaler-tech/laravel-saml2/issues", + "source": "https://github.com/scaler-tech/laravel-saml2" + }, + "time": "2026-03-20T13:15:15+00:00" + }, + { + "name": "sentry/sentry", + "version": "4.25.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "bfee3381e1f6dea8a5f3a18adba6419fe81c5f54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/bfee3381e1f6dea8a5f3a18adba6419fe81c5f54", + "reference": "bfee3381e1f6dea8a5f3a18adba6419fe81c5f54", "shasum": "" }, "require": { @@ -5728,7 +4391,7 @@ "jean85/pretty-package-versions": "^1.5|^2.0.4", "php": "^7.2|^8.0", "psr/log": "^1.0|^2.0|^3.0", - "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0" + "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0|^8.0" }, "conflict": { "raven/raven": "*" @@ -5738,13 +4401,18 @@ "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^1.8.4|^2.1.1", "monolog/monolog": "^1.6|^2.0|^3.0", + "nyholm/psr7": "^1.8", + "open-telemetry/api": "^1.0", + "open-telemetry/exporter-otlp": "^1.0", + "open-telemetry/sdk": "^1.0", "phpbench/phpbench": "^1.0", "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^8.5|^9.6", - "symfony/phpunit-bridge": "^5.2|^6.0|^7.0", - "vimeo/psalm": "^4.17" + "phpunit/phpunit": "^8.5.52|^9.6.34", + "spiral/roadrunner-http": "^3.6", + "spiral/roadrunner-worker": "^3.6" }, "suggest": { + "ext-excimer": "Enable Sentry profiling with the Excimer PHP extension.", "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." }, "type": "library", @@ -5781,7 +4449,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.10.0" + "source": "https://github.com/getsentry/sentry-php/tree/4.25.0" }, "funding": [ { @@ -5793,39 +4461,41 @@ "type": "custom" } ], - "time": "2024-11-06T07:44:19+00:00" + "time": "2026-04-23T12:50:03+00:00" }, { "name": "sentry/sentry-laravel", - "version": "4.13.0", + "version": "4.25.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "d232ac494258e0d50a77c575a5af5f1a426d3f87" + "reference": "6699c9465df6bee07d82279f7a209db941913456" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/d232ac494258e0d50a77c575a5af5f1a426d3f87", - "reference": "d232ac494258e0d50a77c575a5af5f1a426d3f87", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/6699c9465df6bee07d82279f7a209db941913456", + "reference": "6699c9465df6bee07d82279f7a209db941913456", "shasum": "" }, "require": { - "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0", + "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 | ^13.0", "nyholm/psr7": "^1.0", "php": "^7.2 | ^8.0", - "sentry/sentry": "^4.10", - "symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0" + "sentry/sentry": "^4.23.0", + "symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0 | ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.11", "guzzlehttp/guzzle": "^7.2", "laravel/folio": "^1.1", - "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0", - "livewire/livewire": "^2.0 | ^3.0", + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 | ^13.0", + "laravel/octane": "^2.15", + "laravel/pennant": "^1.0", + "livewire/livewire": "^2.0 | ^3.0 | ^4.0", "mockery/mockery": "^1.3", - "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", + "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.4 | ^9.3 | ^10.4 | ^11.5" + "phpunit/phpunit": "^8.5 | ^9.6 | ^10.4 | ^11.5" }, "type": "library", "extra": { @@ -5870,7 +4540,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/4.13.0" + "source": "https://github.com/getsentry/sentry-laravel/tree/4.25.0" }, "funding": [ { @@ -5882,43 +4552,38 @@ "type": "custom" } ], - "time": "2025-02-18T10:09:29+00:00" + "time": "2026-04-07T12:55:27+00:00" }, { - "name": "setasign/fpdi", - "version": "v2.6.3", + "name": "spatie/laravel-package-tools", + "version": "1.93.0", "source": { "type": "git", - "url": "https://github.com/Setasign/FPDI.git", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/0d097bce95b2bf6802fb1d83e1e753b0f5a948e7", + "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7", "shasum": "" }, "require": { - "ext-zlib": "*", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "setasign/tfpdf": "<1.31" + "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1" }, "require-dev": { - "phpunit/phpunit": "^7", - "setasign/fpdf": "~1.8.6", - "setasign/tfpdf": "~1.33", - "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "^6.2" - }, - "suggest": { - "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." + "mockery/mockery": "^1.5", + "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0", + "pestphp/pest": "^2.1|^3.1|^4.0", + "phpunit/php-code-coverage": "^10.0|^11.0|^12.0", + "phpunit/phpunit": "^10.5|^11.5|^12.5", + "spatie/pest-plugin-test-time": "^2.2|^3.0" }, "type": "library", "autoload": { "psr-4": { - "setasign\\Fpdi\\": "src/" + "Spatie\\LaravelPackageTools\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -5927,164 +4592,69 @@ ], "authors": [ { - "name": "Jan Slabon", - "email": "jan.slabon@setasign.com", - "homepage": "https://www.setasign.com" - }, - { - "name": "Maximilian Kresse", - "email": "maximilian.kresse@setasign.com", - "homepage": "https://www.setasign.com" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" } ], - "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.", - "homepage": "https://www.setasign.com/fpdi", + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", "keywords": [ - "fpdf", - "fpdi", - "pdf" + "laravel-package-tools", + "spatie" ], "support": { - "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.3" + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.0" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi", - "type": "tidelift" - } - ], - "time": "2025-02-05T13:22:35+00:00" - }, - { - "name": "symfony/cache", - "version": "v7.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "d33cd9e14326e14a4145c21e600602eaf17cc9e7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/d33cd9e14326e14a4145c21e600602eaf17cc9e7", - "reference": "d33cd9e14326e14a4145c21e600602eaf17cc9e7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/cache": "^2.0|^3.0", - "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^2.5|^3", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.4|^7.0" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "symfony/dependency-injection": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/var-dumper": "<6.4" - }, - "provide": { - "psr/cache-implementation": "2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0", - "symfony/cache-implementation": "1.1|2.0|3.0" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/dbal": "^3.6|^4", - "predis/predis": "^1.1|^2.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/filesystem": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Cache\\": "" - }, - "classmap": [ - "Traits/ValueWrapper.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", - "homepage": "https://symfony.com", - "keywords": [ - "caching", - "psr6" - ], - "support": { - "source": "https://github.com/symfony/cache/tree/v7.2.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/spatie", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2025-02-26T09:57:54+00:00" + "time": "2026-02-21T12:49:54+00:00" }, { - "name": "symfony/cache-contracts", - "version": "v3.5.1", + "name": "spatie/laravel-translatable", + "version": "6.14.1", "source": { "type": "git", - "url": "https://github.com/symfony/cache-contracts.git", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" + "url": "https://github.com/spatie/laravel-translatable.git", + "reference": "d120a925cf413b2427f886264bb6eb102ac23d42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "url": "https://api.github.com/repos/spatie/laravel-translatable/zipball/d120a925cf413b2427f886264bb6eb102ac23d42", + "reference": "d120a925cf413b2427f886264bb6eb102ac23d42", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/cache": "^3.0" + "illuminate/database": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "php": "^8.3", + "spatie/laravel-package-tools": "^1.93.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.90", + "mockery/mockery": "^1.6.12", + "orchestra/testbench": "^9.0|^10.0|^11.0", + "pestphp/pest": "^4.0.0" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" + "aliases": { + "Translatable": "Spatie\\Translatable\\Facades\\Translatable" }, - "branch-alias": { - "dev-main": "3.5-dev" + "laravel": { + "providers": [ + "Spatie\\Translatable\\TranslatableServiceProvider" + ] } }, "autoload": { "psr-4": { - "Symfony\\Contracts\\Cache\\": "" + "Spatie\\Translatable\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -6093,61 +4663,58 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Generic abstractions related to caching", - "homepage": "https://symfony.com", + "description": "A trait to make an Eloquent model hold translations", + "homepage": "https://github.com/spatie/laravel-translatable", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "eloquent", + "i8n", + "laravel-translatable", + "model", + "multilingual", + "spatie", + "translate" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" + "issues": "https://github.com/spatie/laravel-translatable/issues", + "source": "https://github.com/spatie/laravel-translatable/tree/6.14.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/spatie", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2026-04-23T08:26:29+00:00" }, { "name": "symfony/clock", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + "reference": "b55a638b189a6faa875e0ccdb00908fb87af95b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "url": "https://api.github.com/repos/symfony/clock/zipball/b55a638b189a6faa875e0ccdb00908fb87af95b3", + "reference": "b55a638b189a6faa875e0ccdb00908fb87af95b3", "shasum": "" }, "require": { - "php": ">=8.2", - "psr/clock": "^1.0", - "symfony/polyfill-php83": "^1.28" + "php": ">=8.4", + "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" @@ -6186,7 +4753,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.2.0" + "source": "https://github.com/symfony/clock/tree/v8.0.8" }, "funding": [ { @@ -6197,55 +4764,52 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/console", - "version": "v7.2.1", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" + "reference": "5b66d385dc58f69652e56f78a4184615e3f2b7f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "url": "https://api.github.com/repos/symfony/console/zipball/5b66d385dc58f69652e56f78a4184615e3f2b7f7", + "reference": "5b66d385dc58f69652e56f78a4184615e3f2b7f7", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/string": "^7.4|^8.0" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6279,7 +4843,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.1" + "source": "https://github.com/symfony/console/tree/v8.0.8" }, "funding": [ { @@ -6290,29 +4854,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-11T03:49:26+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/css-selector", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + "reference": "8db1c00226a94d8ab6aa89d9224eeee91e2ea2ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8db1c00226a94d8ab6aa89d9224eeee91e2ea2ed", + "reference": "8db1c00226a94d8ab6aa89d9224eeee91e2ea2ed", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "type": "library", "autoload": { @@ -6344,7 +4912,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.2.0" + "source": "https://github.com/symfony/css-selector/tree/v8.0.8" }, "funding": [ { @@ -6355,25 +4923,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -6386,7 +4958,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -6411,7 +4983,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -6427,35 +4999,37 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/error-handler", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "aabf79938aa795350c07ce6464dd1985607d95d5" + "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/aabf79938aa795350c07ce6464dd1985607d95d5", - "reference": "aabf79938aa795350c07ce6464dd1985607d95d5", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c1119fe8dcfc3825ec74ec061b96ef0c8f281517", + "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^7.4|^8.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" + "symfony/deprecation-contracts": "<2.5" }, "require-dev": { + "symfony/console": "^7.4|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/http-kernel": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -6486,7 +5060,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.2.4" + "source": "https://github.com/symfony/error-handler/tree/v8.0.8" }, "funding": [ { @@ -6497,33 +5071,37 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-02T20:27:07+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" + "reference": "f662acc6ab22a3d6d716dcb44c381c6002940df6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f662acc6ab22a3d6d716dcb44c381c6002940df6", + "reference": "f662acc6ab22a3d6d716dcb44c381c6002940df6", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<6.4", + "symfony/security-http": "<7.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -6532,13 +5110,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6566,7 +5145,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.8" }, "funding": [ { @@ -6577,25 +5156,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -6609,7 +5192,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -6642,7 +5225,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -6658,27 +5241,27 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/finder", - "version": "v7.2.2", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb" + "reference": "8da41214757b87d97f181e3d14a4179286151007" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb", + "url": "https://api.github.com/repos/symfony/finder/zipball/8da41214757b87d97f181e3d14a4179286151007", + "reference": "8da41214757b87d97f181e3d14a4179286151007", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "symfony/filesystem": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6706,7 +5289,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.2.2" + "source": "https://github.com/symfony/finder/tree/v8.0.8" }, "funding": [ { @@ -6717,46 +5300,48 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-30T19:00:17+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.2.3", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0" + "reference": "02656f7ebeae5c155d659e946f6b3a33df24051b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ee1b504b8926198be89d05e5b6fc4c3810c090f0", - "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/02656f7ebeae5c155d659e946f6b3a33df24051b", + "reference": "02656f7ebeae5c155d659e946f6b3a33df24051b", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.1" }, "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + "doctrine/dbal": "<4.3" }, "require-dev": { - "doctrine/dbal": "^3.6|^4", + "doctrine/dbal": "^4.3", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0" + "symfony/cache": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6784,7 +5369,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.2.3" + "source": "https://github.com/symfony/http-foundation/tree/v8.0.8" }, "funding": [ { @@ -6795,82 +5380,72 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-17T10:56:55+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "9f1103734c5789798fefb90e91de4586039003ed" + "reference": "1770f6818d83b2fddc12185025b93f39a90cb628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f1103734c5789798fefb90e91de4586039003ed", - "reference": "9f1103734c5789798fefb90e91de4586039003ed", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1770f6818d83b2fddc12185025b93f39a90cb628", + "reference": "1770f6818d83b2fddc12185025b93f39a90cb628", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", + "symfony/flex": "<2.10", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.12" + "twig/twig": "<3.21" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^7.1", - "symfony/routing": "^6.4|^7.0", - "symfony/serializer": "^7.1", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.12" + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0", + "symfony/var-exporter": "^7.4|^8.0", + "twig/twig": "^3.21" }, "type": "library", "autoload": { @@ -6898,7 +5473,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.2.4" + "source": "https://github.com/symfony/http-kernel/tree/v8.0.8" }, "funding": [ { @@ -6909,48 +5484,48 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-26T11:01:22+00:00" + "time": "2026-03-31T21:14:05+00:00" }, { "name": "symfony/mailer", - "version": "v7.2.3", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3" + "reference": "ca5f6edaf8780ece814404b58a4482b22b509c56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3", - "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ca5f6edaf8780ece814404b58a4482b22b509c56", + "reference": "ca5f6edaf8780ece814404b58a4482b22b509c56", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.2", + "php": ">=8.4", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^7.2", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/messenger": "<6.4", - "symfony/mime": "<6.4", - "symfony/twig-bridge": "<6.4" + "symfony/http-client-contracts": "<2.5" }, "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0" + "symfony/console": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/twig-bridge": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6978,7 +5553,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.2.3" + "source": "https://github.com/symfony/mailer/tree/v8.0.8" }, "funding": [ { @@ -6989,48 +5564,50 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-27T11:08:17+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/mime", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "87ca22046b78c3feaff04b337f33b38510fd686b" + "reference": "ddff21f14c7ce04b98101b399a9463dce8b0ce66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/87ca22046b78c3feaff04b337f33b38510fd686b", - "reference": "87ca22046b78c3feaff04b337f33b38510fd686b", + "url": "https://api.github.com/repos/symfony/mime/zipball/ddff21f14c7ce04b98101b399a9463dce8b0ce66", + "reference": "ddff21f14c7ce04b98101b399a9463dce8b0ce66", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<6.4", - "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7062,7 +5639,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.2.4" + "source": "https://github.com/symfony/mime/tree/v8.0.8" }, "funding": [ { @@ -7073,25 +5650,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-19T08:51:20+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.2.0", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", "shasum": "" }, "require": { @@ -7129,7 +5710,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.8" }, "funding": [ { @@ -7140,25 +5721,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-20T11:17:29+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -7208,7 +5793,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0" }, "funding": [ { @@ -7219,25 +5804,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df", + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df", "shasum": "" }, "require": { @@ -7286,7 +5875,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0" }, "funding": [ { @@ -7297,25 +5886,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", "shasum": "" }, "require": { @@ -7369,7 +5962,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.36.0" }, "funding": [ { @@ -7380,16 +5973,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-09-10T14:38:51+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -7450,7 +6047,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0" }, "funding": [ { @@ -7461,6 +6058,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -7470,19 +6071,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -7530,7 +6132,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.36.0" }, "funding": [ { @@ -7541,25 +6143,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { @@ -7610,7 +6216,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.36.0" }, "funding": [ { @@ -7621,25 +6227,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.31.0", + "name": "symfony/polyfill-php84", + "version": "v1.36.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", "shasum": "" }, "require": { @@ -7657,7 +6267,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" + "Symfony\\Polyfill\\Php84\\": "" }, "classmap": [ "Resources/stubs" @@ -7677,7 +6287,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -7686,7 +6296,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.36.0" }, "funding": [ { @@ -7697,25 +6307,109 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T18:47:49+00:00" }, { - "name": "symfony/polyfill-uuid", - "version": "v1.31.0", + "name": "symfony/polyfill-php85", + "version": "v1.36.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "2c408a6bb0313e6001a83628dc5506100474254e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/2c408a6bb0313e6001a83628dc5506100474254e", + "reference": "2c408a6bb0313e6001a83628dc5506100474254e", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.36.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:50:15+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", "shasum": "" }, "require": { @@ -7765,7 +6459,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.36.0" }, "funding": [ { @@ -7776,29 +6470,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/process", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf" + "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", - "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", + "url": "https://api.github.com/repos/symfony/process/zipball/cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", + "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "type": "library", "autoload": { @@ -7826,7 +6524,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.2.4" + "source": "https://github.com/symfony/process/tree/v8.0.8" }, "funding": [ { @@ -7837,45 +6535,49 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-05T08:33:46+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f" + "reference": "94facc221260c1d5f20e31ee43cd6c6a824b4a19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/94facc221260c1d5f20e31ee43cd6c6a824b4a19", + "reference": "94facc221260c1d5f20e31ee43cd6c6a824b4a19", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/http-message": "^1.0|^2.0", - "symfony/http-foundation": "^6.4|^7.0" + "symfony/http-foundation": "^7.4|^8.0" }, "conflict": { - "php-http/discovery": "<1.15", - "symfony/http-kernel": "<6.4" + "php-http/discovery": "<1.15" }, "require-dev": { "nyholm/psr7": "^1.1", "php-http/discovery": "^1.15", "psr/log": "^1.1.4|^2|^3", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0" + "symfony/browser-kit": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/runtime": "^7.4|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -7909,7 +6611,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.2.0" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v8.0.8" }, "funding": [ { @@ -7920,43 +6622,42 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-26T08:57:56+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/routing", - "version": "v7.2.3", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" + "reference": "0de330ec2ea922a7b08ec45615bd51179de7fda4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", - "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", + "url": "https://api.github.com/repos/symfony/routing/zipball/0de330ec2ea922a7b08ec45615bd51179de7fda4", + "reference": "0de330ec2ea922a7b08ec45615bd51179de7fda4", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/deprecation-contracts": "^2.5|^3" }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/yaml": "<6.4" - }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7990,7 +6691,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.2.3" + "source": "https://github.com/symfony/routing/tree/v8.0.8" }, "funding": [ { @@ -8001,25 +6702,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-17T10:56:55+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -8037,7 +6742,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -8073,7 +6778,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -8084,44 +6789,47 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" + "reference": "ae9488f874d7603f9d2dfbf120203882b645d963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", + "url": "https://api.github.com/repos/symfony/string/zipball/ae9488f874d7603f9d2dfbf120203882b645d963", + "reference": "ae9488f874d7603f9d2dfbf120203882b645d963", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -8160,7 +6868,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.2.0" + "source": "https://github.com/symfony/string/tree/v8.0.8" }, "funding": [ { @@ -8171,60 +6879,58 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-13T13:31:26+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/translation", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" + "reference": "27c03ae3940de24ba2f71cfdbac824f2aa1fdf2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", + "url": "https://api.github.com/repos/symfony/translation/zipball/27c03ae3940de24ba2f71cfdbac824f2aa1fdf2f", + "reference": "27c03ae3940de24ba2f71cfdbac824f2aa1fdf2f", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation-contracts": "^3.6.1" }, "conflict": { - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", + "nikic/php-parser": "<5.0", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<6.4", - "symfony/yaml": "<6.4" + "symfony/service-contracts": "<2.5" }, "provide": { "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", + "symfony/routing": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -8255,7 +6961,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.4" + "source": "https://github.com/symfony/translation/tree/v8.0.8" }, "funding": [ { @@ -8266,25 +6972,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-13T10:27:23+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { @@ -8297,7 +7007,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -8333,7 +7043,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { @@ -8344,33 +7054,37 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/uid", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "2d294d0c48df244c71c105a169d0190bfb080426" + "reference": "f63fa6096a24147283bce4d29327d285326438e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", - "reference": "2d294d0c48df244c71c105a169d0190bfb080426", + "url": "https://api.github.com/repos/symfony/uid/zipball/f63fa6096a24147283bce4d29327d285326438e0", + "reference": "f63fa6096a24147283bce4d29327d285326438e0", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "symfony/console": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -8407,7 +7121,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.2.0" + "source": "https://github.com/symfony/uid/tree/v8.0.8" }, "funding": [ { @@ -8418,40 +7132,44 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.2.3", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "82b478c69745d8878eb60f9a049a4d584996f73a" + "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a", - "reference": "82b478c69745d8878eb60f9a049a4d584996f73a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", + "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<7.4", + "symfony/error-handler": "<7.4" }, "require-dev": { - "ext-iconv": "*", - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", + "symfony/console": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", "twig/twig": "^3.12" }, "bin": [ @@ -8490,7 +7208,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.2.3" + "source": "https://github.com/symfony/var-dumper/tree/v8.0.8" }, "funding": [ { @@ -8501,43 +7219,54 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-17T11:39:41+00:00" + "time": "2026-03-31T07:15:36+00:00" }, { - "name": "symfony/var-exporter", - "version": "v7.2.4", + "name": "tightenco/ziggy", + "version": "v2.6.2", "source": { "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "4ede73aa7a73d81506002d2caadbbdad1ef5b69a" + "url": "https://github.com/tighten/ziggy.git", + "reference": "8a0b645921623f77dceaf543d61ecd51a391d96e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/4ede73aa7a73d81506002d2caadbbdad1ef5b69a", - "reference": "4ede73aa7a73d81506002d2caadbbdad1ef5b69a", + "url": "https://api.github.com/repos/tighten/ziggy/zipball/8a0b645921623f77dceaf543d61ecd51a391d96e", + "reference": "8a0b645921623f77dceaf543d61ecd51a391d96e", "shasum": "" }, "require": { - "php": ">=8.2" + "ext-json": "*", + "laravel/framework": ">=9.0", + "php": ">=8.1" }, "require-dev": { - "symfony/property-access": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "laravel/folio": "^1.1", + "orchestra/testbench": "^8.0 || ^9.0 || ^10.0", + "pestphp/pest": "^2.0 || ^3.0 || ^4.0", + "pestphp/pest-plugin-laravel": "^2.0 || ^3.0 || ^4.0" }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "Tighten\\Ziggy\\ZiggyServiceProvider" + ] + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\VarExporter\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Tighten\\Ziggy\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8545,64 +7274,51 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Daniel Coulbourne", + "email": "daniel@tighten.co" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jake Bathman", + "email": "jake@tighten.co" + }, + { + "name": "Jacob Baker-Kretzmar", + "email": "jacob@tighten.co" } ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", - "homepage": "https://symfony.com", + "description": "Use your Laravel named routes in JavaScript.", + "homepage": "https://github.com/tighten/ziggy", "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "lazy-loading", - "proxy", - "serialize" + "Ziggy", + "javascript", + "laravel", + "routes" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.2.4" + "issues": "https://github.com/tighten/ziggy/issues", + "source": "https://github.com/tighten/ziggy/tree/v2.6.2" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-02-13T10:27:23+00:00" + "time": "2026-03-05T14:41:19+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d" + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^7.4 || ^8.0", - "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^2.0", @@ -8635,28 +7351,28 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" }, - "time": "2024-12-21T16:25:41+00:00" + "time": "2025-12-02T11:56:42+00:00" }, { "name": "uwil/admin-secure-laravel", - "version": "5.0.0", + "version": "5.1.0", "source": { "type": "git", "url": "git@lab.s-web.fr:ldc-web/projets/ldc-web-admin-secure-laravel.git", - "reference": "7d9c052db4318752a312dc9763bc8c31ea053aa2" + "reference": "0299d8397111b5a80ea3200a9fd387b94c34f208" }, "dist": { "type": "zip", - "url": "https://lab.s-web.fr/api/v4/projects/20/packages/composer/archives/uwil/admin-secure-laravel.zip?sha=7d9c052db4318752a312dc9763bc8c31ea053aa2", - "reference": "7d9c052db4318752a312dc9763bc8c31ea053aa2", + "url": "https://lab.s-web.fr/api/v4/projects/20/packages/composer/archives/uwil/admin-secure-laravel.zip?sha=0299d8397111b5a80ea3200a9fd387b94c34f208", + "reference": "0299d8397111b5a80ea3200a9fd387b94c34f208", "shasum": "" }, "require": { "dxw/cidr": "^3.2", - "illuminate/support": "~11|~12", - "laravel/framework": "~11|~12", + "illuminate/support": "~11|~12|~13", + "laravel/framework": "~11|~12|~13", "php": "^8.3", "symfony/options-resolver": "^7.0" }, @@ -8705,21 +7421,21 @@ }, { "name": "uwil/k8s-laravel", - "version": "1.4.0", + "version": "3.0.0", "source": { "type": "git", "url": "git@lab.s-web.fr:ldc-web/projets/k8s-laravel.git", - "reference": "14da608cb5ebc1c48615d213545655db2009364f" + "reference": "96f85bef45b1ee8d6c2f85e5af2aa6003fa357fd" }, "dist": { "type": "zip", - "url": "https://lab.s-web.fr/api/v4/projects/90/packages/composer/archives/uwil/k8s-laravel.zip?sha=14da608cb5ebc1c48615d213545655db2009364f", - "reference": "14da608cb5ebc1c48615d213545655db2009364f", + "url": "https://lab.s-web.fr/api/v4/projects/90/packages/composer/archives/uwil/k8s-laravel.zip?sha=96f85bef45b1ee8d6c2f85e5af2aa6003fa357fd", + "reference": "96f85bef45b1ee8d6c2f85e5af2aa6003fa357fd", "shasum": "" }, "require": { - "illuminate/support": "~8|~9|~10|~11", - "laravel/framework": "~8|~9|~10|~11", + "illuminate/support": "~8|~9|~10|~11|~12|~13", + "laravel/framework": "~8|~9|~10|~11|~12|~13", "php": "~7.3|~7.4|~8" }, "require-dev": { @@ -8758,37 +7474,311 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Vincent BRIDIER", - "email": "vincent.bridier@ldc.fr", - "homepage": "https://www.ldc.fr" - } - ], - "description": "Laravel requirements for k8s" + "description": "Laravel requirements for k8s", + "support": { + "email": "equipe.web@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/k8s-laravel/-/issues" + } }, { - "name": "vlucas/phpdotenv", - "version": "v5.6.1", + "name": "uwil/laravel-activity-logs", + "version": "6.0.0", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + "url": "git@lab.s-web.fr:ldc-web/projets/laravel-activity-logs.git", + "reference": "765bf7aab42af11e79a64ce1b2245a09abae6fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "url": "https://lab.s-web.fr/api/v4/projects/229/packages/composer/archives/uwil/laravel-activity-logs.zip?sha=765bf7aab42af11e79a64ce1b2245a09abae6fe1", + "reference": "765bf7aab42af11e79a64ce1b2245a09abae6fe1", + "shasum": "" + }, + "require": { + "illuminate/support": "~13", + "laravel/framework": "~13", + "php": "^8.5", + "uwil/laravel-backend": "^5.0", + "uwil/laravel-common": "^6.0" + }, + "require-dev": { + "larastan/larastan": "^3.9", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\LaravelActivityLogs\\ActivityLogsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Uwil\\LaravelActivityLogs\\": "src/" + } + }, + "license": [ + "MIT" + ], + "description": "UWIL Laravel Activity logs", + "keywords": [ + "activity", + "laravel", + "uwil" + ], + "support": { + "email": "digital@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/laravel-activity-logs/-/issues" + } + }, + { + "name": "uwil/laravel-backend", + "version": "5.0.1", + "source": { + "type": "git", + "url": "git@lab.s-web.fr:ldc-web/projets/laravel-backend.git", + "reference": "9ec385e80de62ebcb0362911c56a9e7d917bcc80" + }, + "dist": { + "type": "zip", + "url": "https://lab.s-web.fr/api/v4/projects/228/packages/composer/archives/uwil/laravel-backend.zip?sha=9ec385e80de62ebcb0362911c56a9e7d917bcc80", + "reference": "9ec385e80de62ebcb0362911c56a9e7d917bcc80", + "shasum": "" + }, + "require": { + "diglactic/laravel-breadcrumbs": "^10.0", + "illuminate/support": "~13", + "inertiajs/inertia-laravel": "^2.0", + "laravel/framework": "~13", + "laravel/telescope": "^5.7", + "php": "^8.5", + "sentry/sentry-laravel": "^4.10", + "uwil/laravel-activity-logs": "^6.0", + "uwil/laravel-common": "^6.0" + }, + "require-dev": { + "larastan/larastan": "^3.9", + "orchestra/testbench": "^11.0", + "phpunit/php-code-coverage": "^11.0", + "phpunit/phpunit": "^11.0", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7", + "uwil/admin-secure-laravel": "^5.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\LaravelBackend\\BackendServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Uwil\\LaravelBackend\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Uwil\\LaravelBackend\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit" + ], + "phpcs": [ + "./vendor/bin/phpcs" + ], + "phpstan": [ + "./vendor/bin/phpstan" + ], + "post-autoload-dump": [ + "@php ./vendor/bin/testbench package:discover --ansi" + ] + }, + "license": [ + "MIT" + ], + "description": "UWIL Laravel backend", + "keywords": [ + "backend", + "laravel", + "uwil" + ], + "support": { + "email": "digital@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/laravel-backend/-/issues" + } + }, + { + "name": "uwil/laravel-common", + "version": "6.0.0", + "source": { + "type": "git", + "url": "git@lab.s-web.fr:ldc-web/projets/laravel-common.git", + "reference": "dbaeb3f980a1c7a17c92601c090d8687c6bae8e6" + }, + "dist": { + "type": "zip", + "url": "https://lab.s-web.fr/api/v4/projects/215/packages/composer/archives/uwil/laravel-common.zip?sha=dbaeb3f980a1c7a17c92601c090d8687c6bae8e6", + "reference": "dbaeb3f980a1c7a17c92601c090d8687c6bae8e6", + "shasum": "" + }, + "require": { + "diglactic/laravel-breadcrumbs": "^10.0", + "illuminate/support": "~13", + "inertiajs/inertia-laravel": "^2.0", + "laravel/framework": "~13", + "mews/purifier": "^3.4", + "php": "^8.5", + "sentry/sentry-laravel": "^4.10", + "uwil/k8s-laravel": "^3.0", + "uwil/laravel-i18n": "^3.0" + }, + "require-dev": { + "larastan/larastan": "^3.9", + "orchestra/testbench": "^11.0", + "phpunit/php-code-coverage": "^11.0", + "phpunit/phpunit": "^11.0", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\LaravelCommon\\CommonServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Helpers/methods.php" + ], + "psr-4": { + "Uwil\\LaravelCommon\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Uwil\\LaravelCommon\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit" + ], + "post-autoload-dump": [ + "@php ./vendor/bin/testbench package:discover --ansi" + ] + }, + "license": [ + "MIT" + ], + "description": "UWIL Laravel common utils and clean install", + "keywords": [ + "common", + "laravel", + "uwil" + ], + "support": { + "email": "digital@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/laravel-common/-/issues" + } + }, + { + "name": "uwil/laravel-i18n", + "version": "3.0.0", + "source": { + "type": "git", + "url": "git@lab.s-web.fr:ldc-web/projets/laravel-i18n.git", + "reference": "a87ec12228efd4b13c4a7298631c6dc0f601be47" + }, + "dist": { + "type": "zip", + "url": "https://lab.s-web.fr/api/v4/projects/252/packages/composer/archives/uwil/laravel-i18n.zip?sha=a87ec12228efd4b13c4a7298631c6dc0f601be47", + "reference": "a87ec12228efd4b13c4a7298631c6dc0f601be47", + "shasum": "" + }, + "require": { + "illuminate/support": "~13", + "laravel/framework": "~13", + "mcamara/laravel-localization": "^2.3", + "php": "^8.5", + "spatie/laravel-translatable": "^6.11", + "uwil/laravel-common": "^6.0" + }, + "require-dev": { + "larastan/larastan": "^3.9", + "orchestra/testbench": "^11.0", + "phpunit/php-code-coverage": "^11.0", + "phpunit/phpunit": "^11.0", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\LaravelI18n\\I18nServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Uwil\\LaravelI18n\\": "src/" + } + }, + "scripts": { + "phpcs": [ + "./vendor/bin/phpcs" + ], + "phpstan": [ + "./vendor/bin/phpstan" + ], + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump" + ] + }, + "license": [ + "MIT" + ], + "description": "UWIL Laravel I18N", + "keywords": [ + "i18n", + "laravel", + "uwil" + ], + "support": { + "email": "digital@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/laravel-i18n/-/issues" + } + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.3", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "955e7815d677a3eaa7075231212f2110983adecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.3", + "graham-campbell/result-type": "^1.1.4", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3", - "symfony/polyfill-ctype": "^1.24", - "symfony/polyfill-mbstring": "^1.24", - "symfony/polyfill-php80": "^1.24" + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", @@ -8837,7 +7827,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" }, "funding": [ { @@ -8849,27 +7839,27 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:52:34+00:00" + "time": "2025-12-27T19:49:13+00:00" }, { "name": "voku/portable-ascii", - "version": "2.0.3", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + "reference": "d870a33f0f79d2b4579740b0620200221ee44aeb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/d870a33f0f79d2b4579740b0620200221ee44aeb", + "reference": "d870a33f0f79d2b4579740b0620200221ee44aeb", "shasum": "" }, "require": { - "php": ">=7.0.0" + "php": ">=7.1.0" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" }, "suggest": { "ext-intl": "Use Intl for transliterator_transliterate() support" @@ -8899,7 +7889,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + "source": "https://github.com/voku/portable-ascii/tree/2.1.0" }, "funding": [ { @@ -8923,220 +7913,35 @@ "type": "tidelift" } ], - "time": "2024-11-21T01:49:47+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2026-04-16T23:10:39+00:00" } ], "packages-dev": [ - { - "name": "archtechx/enums", - "version": "v0.3.2", - "source": { - "type": "git", - "url": "https://github.com/archtechx/enums.git", - "reference": "475f45e682b0771253707f9403b704759a08da5f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/archtechx/enums/zipball/475f45e682b0771253707f9403b704759a08da5f", - "reference": "475f45e682b0771253707f9403b704759a08da5f", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "nunomaduro/larastan": "^1.0|^2.4", - "orchestra/testbench": "^6.9|^7.0|^8.0", - "pestphp/pest": "^1.2|^2.0", - "pestphp/pest-plugin-laravel": "^1.0|^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "ArchTech\\Enums\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Samuel Štancl", - "email": "samuel@archte.ch" - } - ], - "description": "Helpers for making PHP enums more lovable.", - "support": { - "issues": "https://github.com/archtechx/enums/issues", - "source": "https://github.com/archtechx/enums/tree/v0.3.2" - }, - "time": "2023-02-15T13:05:41+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.3", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-09-19T14:15:21+00:00" - }, { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v1.0.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/composer-installer.git", - "reference": "4be43904336affa5c2f70744a348312336afd0da" + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", - "reference": "4be43904336affa5c2f70744a348312336afd0da", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/845eb62303d2ca9b289ef216356568ccc075ffd1", + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0", + "composer-plugin-api": "^2.2", "php": ">=5.4", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" + "squizlabs/php_codesniffer": "^3.1.0 || ^4.0" }, "require-dev": { - "composer/composer": "*", + "composer/composer": "^2.2", "ext-json": "*", "ext-zip": "*", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpcompatibility/php-compatibility": "^9.0 || ^10.0.0@dev", "yoast/phpunit-polyfills": "^1.0" }, "type": "composer-plugin", @@ -9155,9 +7960,9 @@ "authors": [ { "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" + "email": "opensource@frenck.dev", + "homepage": "https://frenck.dev", + "role": "Open source developer" }, { "name": "Contributors", @@ -9165,7 +7970,6 @@ } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", "keywords": [ "PHPCodeSniffer", "PHP_CodeSniffer", @@ -9186,237 +7990,28 @@ ], "support": { "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "security": "https://github.com/PHPCSStandards/composer-installer/security/policy", "source": "https://github.com/PHPCSStandards/composer-installer" }, - "time": "2023-01-05T11:28:13+00:00" - }, - { - "name": "dragon-code/contracts", - "version": "2.24.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/contracts.git", - "reference": "c21ea4fc0a399bd803a2805a7f2c989749083896" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/contracts/zipball/c21ea4fc0a399bd803a2805a7f2c989749083896", - "reference": "c21ea4fc0a399bd803a2805a7f2c989749083896", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-message": "^1.0.1 || ^2.0", - "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.23" - }, - "conflict": { - "andrey-helldar/contracts": "*" - }, - "require-dev": { - "illuminate/database": "^10.0 || ^11.0 || ^12.0", - "phpdocumentor/reflection-docblock": "^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "DragonCode\\Contracts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "A set of contracts for any project", - "keywords": [ - "contracts", - "interfaces" - ], - "support": { - "source": "https://github.com/TheDragonCode/contracts" - }, "funding": [ { - "url": "https://boosty.to/dragon-code", - "type": "boosty" + "url": "https://github.com/PHPCSStandards", + "type": "github" }, { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2025-02-23T23:11:50+00:00" - }, - { - "name": "dragon-code/pretty-array", - "version": "4.2.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/pretty-array.git", - "reference": "b94034d92172a5d14a578822d68b2a8f8b5388e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/pretty-array/zipball/b94034d92172a5d14a578822d68b2a8f8b5388e0", - "reference": "b94034d92172a5d14a578822d68b2a8f8b5388e0", - "shasum": "" - }, - "require": { - "dragon-code/contracts": "^2.20", - "dragon-code/support": "^6.11.2", - "ext-dom": "*", - "ext-mbstring": "*", - "php": "^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^10.0 || ^11.0 || ^12.0" - }, - "suggest": { - "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" - }, - "type": "library", - "autoload": { - "psr-4": { - "DragonCode\\PrettyArray\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "Simple conversion of an array to a pretty view", - "keywords": [ - "andrey helldar", - "array", - "dragon", - "dragon code", - "pretty", - "pretty array" - ], - "support": { - "issues": "https://github.com/TheDragonCode/pretty-array/issues", - "source": "https://github.com/TheDragonCode/pretty-array" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" + "url": "https://github.com/jrfnl", + "type": "github" }, { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2025-02-24T15:35:24+00:00" - }, - { - "name": "dragon-code/support", - "version": "6.16.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/support.git", - "reference": "ab9b657a307e75f6ba5b2b39e1e45207dc1a065a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/support/zipball/ab9b657a307e75f6ba5b2b39e1e45207dc1a065a", - "reference": "ab9b657a307e75f6ba5b2b39e1e45207dc1a065a", - "shasum": "" - }, - "require": { - "dragon-code/contracts": "^2.22.0", - "ext-bcmath": "*", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.1", - "psr/http-message": "^1.0.1 || ^2.0", - "symfony/polyfill-php81": "^1.25", - "voku/portable-ascii": "^1.4.8 || ^2.0.1" - }, - "conflict": { - "andrey-helldar/support": "*" - }, - "require-dev": { - "illuminate/contracts": "^9.0 || ^10.0 || ^11.0 || ^12.0", - "phpunit/phpunit": "^9.6 || ^11.0 || ^12.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "suggest": { - "dragon-code/laravel-support": "Various helper files for the Laravel and Lumen frameworks", - "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" - }, - "type": "library", - "extra": { - "dragon-code": { - "docs-generator": { - "preview": { - "brand": "php", - "vendor": "The Dragon Code" - } - } - } - }, - "autoload": { - "psr-4": { - "DragonCode\\Support\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "Support package is a collection of helpers and tools for any project.", - "keywords": [ - "dragon", - "dragon-code", - "framework", - "helper", - "helpers", - "laravel", - "php", - "support", - "symfony", - "yii", - "yii2" - ], - "support": { - "issues": "https://github.com/TheDragonCode/support/issues", - "source": "https://github.com/TheDragonCode/support" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" }, { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2025-02-24T14:01:52+00:00" + "time": "2025-11-11T04:32:07+00:00" }, { "name": "fakerphp/faker", @@ -9483,16 +8078,16 @@ }, { "name": "filp/whoops", - "version": "2.17.0", + "version": "2.18.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "075bc0c26631110584175de6523ab3f1652eb28e" + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e", - "reference": "075bc0c26631110584175de6523ab3f1652eb28e", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", "shasum": "" }, "require": { @@ -9542,7 +8137,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.17.0" + "source": "https://github.com/filp/whoops/tree/2.18.4" }, "funding": [ { @@ -9550,24 +8145,24 @@ "type": "github" } ], - "time": "2025-01-25T12:00:00+00:00" + "time": "2025-08-08T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" + "php": "^7.4|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -9575,8 +8170,8 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -9599,45 +8194,32 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" }, - "time": "2020-07-09T08:09:16+00:00" + "time": "2025-04-30T06:54:44+00:00" }, { - "name": "laravel-lang/attributes", - "version": "2.13.1", + "name": "iamcal/sql-parser", + "version": "v0.7", "source": { "type": "git", - "url": "https://github.com/Laravel-Lang/attributes.git", - "reference": "394329d99eaa990626c194c5eb39648e881ecc35" + "url": "https://github.com/iamcal/SQLParser.git", + "reference": "610392f38de49a44dab08dc1659960a29874c4b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/394329d99eaa990626c194c5eb39648e881ecc35", - "reference": "394329d99eaa990626c194c5eb39648e881ecc35", + "url": "https://api.github.com/repos/iamcal/SQLParser/zipball/610392f38de49a44dab08dc1659960a29874c4b8", + "reference": "610392f38de49a44dab08dc1659960a29874c4b8", "shasum": "" }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", - "php": "^8.1" - }, "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", - "symfony/var-dumper": "^6.0 || ^7.0" + "php-coveralls/php-coveralls": "^1.0", + "phpunit/phpunit": "^5|^6|^7|^8|^9" }, "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Attributes\\ServiceProvider" - ] - } - }, "autoload": { "psr-4": { - "LaravelLang\\Attributes\\": "src/" + "iamcal\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9646,296 +8228,72 @@ ], "authors": [ { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" + "name": "Cal Henderson", + "email": "cal@iamcal.com" } ], - "description": "List of 126 languages for form field names", - "keywords": [ - "attributes", - "fields", - "form", - "lang", - "languages", - "laravel", - "messages", - "translations", - "validation" - ], + "description": "MySQL schema parser", "support": { - "issues": "https://github.com/Laravel-Lang/attributes/issues", - "source": "https://github.com/Laravel-Lang/attributes/tree/2.13.1" + "issues": "https://github.com/iamcal/SQLParser/issues", + "source": "https://github.com/iamcal/SQLParser/tree/v0.7" }, - "time": "2025-03-04T07:28:17+00:00" + "time": "2026-01-28T22:20:33+00:00" }, { - "name": "laravel-lang/common", - "version": "v4.0.0", + "name": "larastan/larastan", + "version": "v3.9.6", "source": { "type": "git", - "url": "https://github.com/Laravel-Lang/common.git", - "reference": "31744c7f64610990a77c7705e590e04c1fca372d" + "url": "https://github.com/larastan/larastan.git", + "reference": "9ad17e83e96b63536cb6ac39c3d40d29ff9cf636" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/common/zipball/31744c7f64610990a77c7705e590e04c1fca372d", - "reference": "31744c7f64610990a77c7705e590e04c1fca372d", - "shasum": "" - }, - "require": { - "laravel-lang/attributes": "^2.3.3", - "laravel-lang/http-statuses": "^3.3.1", - "laravel-lang/lang": "^13.0", - "laravel-lang/publisher": "^14.6.4", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.5 || ^9.0", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.3" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - }, - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://github.com/andrey-helldar" - } - ], - "description": "Easily connect the necessary language packs to the application", - "keywords": [ - "Laravel-lang", - "attribute", - "attributes", - "breeze", - "cashier", - "fortify", - "framework", - "http", - "http-status", - "http-status-code", - "i18n", - "jetstream", - "lang", - "language", - "languages", - "laravel", - "locale", - "locales", - "nova", - "publisher", - "spark", - "translation", - "translations", - "ui" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/common/issues", - "source": "https://github.com/Laravel-Lang/common" - }, - "funding": [ - { - "url": "https://opencollective.com/laravel-lang", - "type": "open_collective" - } - ], - "time": "2023-08-09T09:24:50+00:00" - }, - { - "name": "laravel-lang/http-statuses", - "version": "3.10.1", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/http-statuses.git", - "reference": "061870d98bf213bccfdc8e7421a820ee7916922d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/http-statuses/zipball/061870d98bf213bccfdc8e7421a820ee7916922d", - "reference": "061870d98bf213bccfdc8e7421a820ee7916922d", + "url": "https://api.github.com/repos/larastan/larastan/zipball/9ad17e83e96b63536cb6ac39c3d40d29ff9cf636", + "reference": "9ad17e83e96b63536cb6ac39c3d40d29ff9cf636", "shasum": "" }, "require": { "ext-json": "*", - "laravel-lang/publisher": "^14.1 || ^15.0 || ^16.0", - "php": "^8.1" + "iamcal/sql-parser": "^0.7.0", + "illuminate/console": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/container": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/contracts": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/database": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/http": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/pipeline": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/support": "^11.44.2 || ^12.4.1 || ^13", + "php": "^8.2", + "phpstan/phpstan": "^2.1.44" }, "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\HttpStatuses\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\HttpStatuses\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 127 languages for HTTP statuses", - "keywords": [ - "http", - "lang", - "languages", - "laravel", - "messages", - "status", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/http-statuses/issues", - "source": "https://github.com/Laravel-Lang/http-statuses/tree/3.10.1" - }, - "time": "2025-03-02T15:29:55+00:00" - }, - { - "name": "laravel-lang/lang", - "version": "13.12.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/lang.git", - "reference": "25a5a07b635f0694cb34a37b58cfb78d0f4ee19e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/25a5a07b635f0694cb34a37b58cfb78d0f4ee19e", - "reference": "25a5a07b635f0694cb34a37b58cfb78d0f4ee19e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", - "php": "^8.1" - }, - "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Lang\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Lang\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 78 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark and Laravel UI", - "keywords": [ - "lang", - "languages", - "laravel", - "lpm" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/lang/issues", - "source": "https://github.com/Laravel-Lang/lang" - }, - "time": "2023-12-16T17:26:12+00:00" - }, - { - "name": "laravel-lang/publisher", - "version": "14.7.1", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/publisher.git", - "reference": "946405e3d8c7105b0ae8cf8de34a3e6e98a70a84" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/946405e3d8c7105b0ae8cf8de34a3e6e98a70a84", - "reference": "946405e3d8c7105b0ae8cf8de34a3e6e98a70a84", - "shasum": "" - }, - "require": { - "archtechx/enums": "^0.3", - "composer/semver": "^3.3", - "dragon-code/pretty-array": "^4.0", - "dragon-code/support": "^6.3", - "ext-json": "*", - "illuminate/console": "^8.79 || ^9.18 || ^10.0 || ^11.0", - "illuminate/support": "^8.79 || ^9.18 || ^10.0 || ^11.0", - "league/commonmark": "^2.3", - "league/config": "^1.2", - "php": "^8.1" - }, - "conflict": { - "laravel-lang/attributes": "<2.0", - "laravel-lang/http-statuses": "<3.0", - "laravel-lang/lang": "<11.0" - }, - "require-dev": { - "laravel-lang/json-fallback-hotfix": "^1.0", - "orchestra/testbench": "^6.25 || ^7.22 || ^8.0 || ^9.0", - "phpunit/phpunit": "^9.6 || ^10.0", - "symfony/var-dumper": "^5.0 || ^6.0" + "doctrine/coding-standard": "^13", + "laravel/framework": "^11.44.2 || ^12.7.2 || ^13", + "mockery/mockery": "^1.6.12", + "nikic/php-parser": "^5.4", + "orchestra/canvas": "^v9.2.2 || ^10.0.1 || ^11", + "orchestra/testbench-core": "^9.12.0 || ^10.1 || ^11", + "phpstan/phpstan-deprecation-rules": "^2.0.1", + "phpunit/phpunit": "^10.5.35 || ^11.5.15 || ^12.5.8" }, "suggest": { - "laravel-lang/attributes": "List of 78 languages for form field names", - "laravel-lang/http-statuses": "List of 78 languages for HTTP statuses", - "laravel-lang/lang": "List of 78 languages for Laravel Framework, Jetstream, Fortify, Breeze, Cashier, Nova, Spark and UI." + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench", + "phpmyadmin/sql-parser": "Install to enable Larastan's optional phpMyAdmin-based SQL parser automatically" }, - "type": "library", + "type": "phpstan-extension", "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Publisher\\ServiceProvider" + "phpstan": { + "includes": [ + "extension.neon" ] + }, + "branch-alias": { + "dev-master": "3.0-dev" } }, "autoload": { - "files": [ - "helper.php" - ], "psr-4": { - "LaravelLang\\Publisher\\": "src" + "Larastan\\Larastan\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -9944,61 +8302,186 @@ ], "authors": [ { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" + "name": "Can Vural", + "email": "can9119@gmail.com" } ], - "description": "Publisher lang files for the Laravel and Lumen Frameworks, Jetstream, Fortify, Cashier, Spark and Nova from Laravel-Lang/lang", + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", "keywords": [ - "breeze", - "cashier", - "fortify", - "framework", - "i18n", - "jetstream", - "lang", - "languages", + "PHPStan", + "code analyse", + "code analysis", + "larastan", "laravel", - "locale", - "locales", - "localization", - "lpm", - "lumen", - "nova", - "publisher", - "spark", - "trans", - "translations", - "validations" + "package", + "php", + "static analysis" ], "support": { - "issues": "https://github.com/Laravel-Lang/publisher/issues", - "source": "https://github.com/Laravel-Lang/publisher" + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v3.9.6" }, "funding": [ { - "url": "https://opencollective.com/laravel-lang", - "type": "open_collective" + "url": "https://github.com/canvural", + "type": "github" } ], - "time": "2023-10-29T21:03:27+00:00" + "time": "2026-04-16T10:02:43+00:00" + }, + { + "name": "laravel/breeze", + "version": "v2.4.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/breeze.git", + "reference": "28cefeaf6af20177ddf5cc7b93e87e4ad79d533f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/breeze/zipball/28cefeaf6af20177ddf5cc7b93e87e4ad79d533f", + "reference": "28cefeaf6af20177ddf5cc7b93e87e4ad79d533f", + "shasum": "" + }, + "require": { + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/filesystem": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "illuminate/validation": "^11.0|^12.0|^13.0", + "php": "^8.2.0", + "symfony/console": "^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^11.0|^12.0|^13.0", + "orchestra/testbench-core": "^9.0|^10.0|^11.0", + "phpstan/phpstan": "^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Breeze\\BreezeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Breeze\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.", + "keywords": [ + "auth", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/breeze/issues", + "source": "https://github.com/laravel/breeze" + }, + "time": "2026-03-10T19:59:01+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.6", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf", + "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0|^13.0", + "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", + "illuminate/log": "^10.24|^11.0|^12.0|^13.0", + "illuminate/process": "^10.24|^11.0|^12.0|^13.0", + "illuminate/support": "^10.24|^11.0|^12.0|^13.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0|^13.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", + "pestphp/pest": "^2.20|^3.0|^4.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0|^8.0", + "symfony/yaml": "^6.3|^7.0|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2026-02-09T13:44:54+00:00" }, { "name": "laravel/pint", - "version": "v1.21.0", + "version": "v1.29.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425" + "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/531fa0871fbde719c51b12afa3a443b8f4e4b425", - "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425", + "url": "https://api.github.com/repos/laravel/pint/zipball/0770e9b7fafd50d4586881d456d6eb41c9247a80", + "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80", "shasum": "" }, "require": { @@ -10009,13 +8492,14 @@ "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.68.5", - "illuminate/view": "^11.42.0", - "larastan/larastan": "^3.0.4", - "laravel-zero/framework": "^11.36.1", + "friendsofphp/php-cs-fixer": "^3.95.1", + "illuminate/view": "^12.56.0", + "larastan/larastan": "^3.9.6", + "laravel-zero/framework": "^12.1.0", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^2.3", - "pestphp/pest": "^2.36.0" + "nunomaduro/termwind": "^2.4.0", + "pestphp/pest": "^3.8.6", + "shipfastlabs/agent-detector": "^1.1.3" }, "bin": [ "builds/pint" @@ -10041,6 +8525,7 @@ "description": "An opinionated code formatter for PHP.", "homepage": "https://laravel.com", "keywords": [ + "dev", "format", "formatter", "lint", @@ -10051,70 +8536,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-02-18T03:18:57+00:00" - }, - { - "name": "laravel/sail", - "version": "v1.41.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/sail.git", - "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", - "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", - "shasum": "" - }, - "require": { - "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", - "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", - "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", - "php": "^8.0", - "symfony/console": "^6.0|^7.0", - "symfony/yaml": "^6.0|^7.0" - }, - "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", - "phpstan/phpstan": "^1.10" - }, - "bin": [ - "bin/sail" - ], - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Sail\\SailServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Sail\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Docker files for running a basic Laravel application.", - "keywords": [ - "docker", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/sail/issues", - "source": "https://github.com/laravel/sail" - }, - "time": "2025-01-24T15:45:36+00:00" + "time": "2026-04-20T15:26:14+00:00" }, { "name": "mockery/mockery", @@ -10200,39 +8622,97 @@ "time": "2024-05-16T03:13:13+00:00" }, { - "name": "nunomaduro/collision", - "version": "v8.5.0", + "name": "myclabs/deep-copy", + "version": "1.13.4", "source": { "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { - "filp/whoops": "^2.16.0", - "nunomaduro/termwind": "^2.1.0", - "php": "^8.2.0", - "symfony/console": "^7.1.5" + "php": "^7.1 || ^8.0" }, "conflict": { - "laravel/framework": "<11.0.0 || >=12.0.0", - "phpunit/phpunit": "<10.5.1 || >=12.0.0" + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { - "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.28.0", - "laravel/pint": "^1.18.1", - "laravel/sail": "^1.36.0", - "laravel/sanctum": "^4.0.3", - "laravel/tinker": "^2.10.0", - "orchestra/testbench-core": "^9.5.3", - "pestphp/pest": "^2.36.0 || ^3.4.0", - "sebastian/environment": "^6.1.0 || ^7.2.0" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.9.4", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/716af8f95a470e9094cfca09ed897b023be191a5", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", + "php": "^8.2.0", + "symfony/console": "^7.4.8 || ^8.0.8" + }, + "conflict": { + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.9.6", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.5.0", + "laravel/pint": "^1.29.1", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.2.1", + "pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.3.0" }, "type": "library", "extra": { @@ -10269,6 +8749,7 @@ "cli", "command-line", "console", + "dev", "error", "handling", "laravel", @@ -10294,7 +8775,7 @@ "type": "patreon" } ], - "time": "2024-10-15T16:06:32+00:00" + "time": "2026-04-21T14:04:20+00:00" }, { "name": "phar-io/manifest", @@ -10416,16 +8897,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", "shasum": "" }, "require": { @@ -10457,41 +8938,92 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2026-01-25T14:56:51+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "2.1.51", + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc3b523c45e714c70de2ac5113b958223b55dc59", + "reference": "dc3b523c45e714c70de2ac5113b958223b55dc59", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2026-04-21T18:22:01+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.16", + "version": "12.5.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + "reference": "876099a072646c7745f673d7aeab5382c4439691" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/876099a072646c7745f673d7aeab5382c4439691", + "reference": "876099a072646c7745f673d7aeab5382c4439691", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", - "theseer/tokenizer": "^1.2.3" + "nikic/php-parser": "^5.7.0", + "php": ">=8.3", + "phpunit/php-text-template": "^5.0", + "sebastian/complexity": "^5.0", + "sebastian/environment": "^8.0.3", + "sebastian/lines-of-code": "^4.0", + "sebastian/version": "^6.0", + "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^12.5.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10500,7 +9032,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1.x-dev" + "dev-main": "12.5.x-dev" } }, "autoload": { @@ -10529,40 +9061,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" } ], - "time": "2024-08-22T04:31:57+00:00" + "time": "2026-04-15T08:23:17+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10590,36 +9134,48 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2026-02-02T14:04:18+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "suggest": { "ext-pcntl": "*" @@ -10627,7 +9183,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10653,7 +9209,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" }, "funding": [ { @@ -10661,32 +9218,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2025-02-07T04:58:58+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10713,7 +9270,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" }, "funding": [ { @@ -10721,32 +9278,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2025-02-07T04:59:16+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -10772,7 +9329,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" }, "funding": [ { @@ -10780,20 +9338,20 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2025-02-07T04:59:38+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.45", + "version": "12.5.23", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "bd68a781d8e30348bc297449f5234b3458267ae8" + "reference": "c54fcf3d6bcb6e96ac2f7e40097dc37b5f139969" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bd68a781d8e30348bc297449f5234b3458267ae8", - "reference": "bd68a781d8e30348bc297449f5234b3458267ae8", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c54fcf3d6bcb6e96ac2f7e40097dc37b5f139969", + "reference": "c54fcf3d6bcb6e96ac2f7e40097dc37b5f139969", "shasum": "" }, "require": { @@ -10803,29 +9361,26 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.3", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.5.6", + "phpunit/php-file-iterator": "^6.0.1", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.0", + "phpunit/php-timer": "^8.0.0", + "sebastian/cli-parser": "^4.2.0", + "sebastian/comparator": "^7.1.6", + "sebastian/diff": "^7.0.0", + "sebastian/environment": "^8.1.0", + "sebastian/exporter": "^7.0.2", + "sebastian/global-state": "^8.0.2", + "sebastian/object-enumerator": "^7.0.0", + "sebastian/recursion-context": "^7.0.1", + "sebastian/type": "^6.0.3", + "sebastian/version": "^6.0.0", + "staabm/side-effects-detector": "^1.0.5" }, "bin": [ "phpunit" @@ -10833,7 +9388,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "12.5-dev" } }, "autoload": { @@ -10865,48 +9420,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.45" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.23" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" + "url": "https://phpunit.de/sponsoring.html", + "type": "other" } ], - "time": "2025-02-06T16:08:12+00:00" + "time": "2026-04-18T06:12:49+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.1", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04", + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "4.2-dev" } }, "autoload": { @@ -10930,155 +9477,59 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - } - ], - "time": "2024-03-02T07:12:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ + }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" - }, - "funding": [ + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:58:43+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2025-09-14T09:36:45+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.3", + "version": "7.1.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + "reference": "c769009dee98f494e0edc3fd4f4087501688f11e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c769009dee98f494e0edc3fd4f4087501688f11e", + "reference": "c769009dee98f494e0edc3fd4f4087501688f11e", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=8.3", + "sebastian/diff": "^7.0", + "sebastian/exporter": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^12.2" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.1-dev" } }, "autoload": { @@ -11118,41 +9569,53 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2024-10-18T14:56:07+00:00" + "time": "2026-04-14T08:23:15+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11176,7 +9639,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" }, "funding": [ { @@ -11184,33 +9647,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2025-02-07T04:55:25+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "7ab1ea946c012266ca32390913653d844ecd085f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^12.0", + "symfony/process": "^7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11243,7 +9706,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" }, "funding": [ { @@ -11251,27 +9714,27 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2025-02-07T04:55:46+00:00" }, { "name": "sebastian/environment", - "version": "6.1.0", + "version": "8.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "reference": "b121608b28a13f721e76ffbbd386d08eff58f3f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b121608b28a13f721e76ffbbd386d08eff58f3f6", + "reference": "b121608b28a13f721e76ffbbd386d08eff58f3f6", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "suggest": { "ext-posix": "*" @@ -11279,7 +9742,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "8.1-dev" } }, "autoload": { @@ -11307,42 +9770,54 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/8.1.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" } ], - "time": "2024-03-23T08:47:14+00:00" + "time": "2026-04-15T12:13:01+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "016951ae10980765e4e7aee491eb288c64e505b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7", + "reference": "016951ae10980765e4e7aee491eb288c64e505b7", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=8.3", + "sebastian/recursion-context": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11385,43 +9860,55 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2025-09-24T06:16:11+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.2", + "version": "8.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "reference": "ef1377171613d09edd25b7816f05be8313f9115d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d", + "reference": "ef1377171613d09edd25b7816f05be8313f9115d", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -11447,41 +9934,53 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" } ], - "time": "2024-03-02T07:19:19+00:00" + "time": "2025-08-29T11:29:25+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f", + "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11505,7 +10004,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.0" }, "funding": [ { @@ -11513,34 +10012,34 @@ "type": "github" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2025-02-07T04:57:28+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11562,7 +10061,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" }, "funding": [ { @@ -11570,32 +10070,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2025-02-07T04:57:48+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "4bfa827c969c98be1e527abd576533293c634f6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11617,7 +10117,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" }, "funding": [ { @@ -11625,32 +10126,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2025-02-07T04:58:17+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11680,40 +10181,53 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2025-08-13T04:44:59+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d", + "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -11736,37 +10250,50 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/6.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2025-08-09T06:57:12+00:00" }, { "name": "sebastian/version", - "version": "4.0.1", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -11789,7 +10316,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" }, "funding": [ { @@ -11797,36 +10325,36 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2025-02-07T05:00:38+00:00" }, { "name": "slevomat/coding-standard", - "version": "8.16.0", + "version": "8.28.1", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "7748a4282df19daf966fda1d8c60a8aec803c83a" + "reference": "66151cfbd25b50e8becd9f809fb704f01fd4d6f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/7748a4282df19daf966fda1d8c60a8aec803c83a", - "reference": "7748a4282df19daf966fda1d8c60a8aec803c83a", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/66151cfbd25b50e8becd9f809fb704f01fd4d6f2", + "reference": "66151cfbd25b50e8becd9f809fb704f01fd4d6f2", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.2.0", "php": "^7.4 || ^8.0", - "phpstan/phpdoc-parser": "^2.1.0", - "squizlabs/php_codesniffer": "^3.11.3" + "phpstan/phpdoc-parser": "^2.3.2", + "squizlabs/php_codesniffer": "^4.0.1" }, "require-dev": { - "phing/phing": "3.0.1", + "phing/phing": "3.0.1|3.1.2", "php-parallel-lint/php-parallel-lint": "1.4.0", - "phpstan/phpstan": "2.1.6", - "phpstan/phpstan-deprecation-rules": "2.0.1", - "phpstan/phpstan-phpunit": "2.0.4", - "phpstan/phpstan-strict-rules": "2.0.3", - "phpunit/phpunit": "9.6.8|10.5.45|11.4.4|11.5.9|12.0.4" + "phpstan/phpstan": "2.1.42", + "phpstan/phpstan-deprecation-rules": "2.0.4", + "phpstan/phpstan-phpunit": "2.0.16", + "phpstan/phpstan-strict-rules": "2.0.10", + "phpunit/phpunit": "9.6.34|10.5.63|11.4.4|11.5.50|12.5.14" }, "type": "phpcodesniffer-standard", "extra": { @@ -11850,7 +10378,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.16.0" + "source": "https://github.com/slevomat/coding-standard/tree/8.28.1" }, "funding": [ { @@ -11862,421 +10390,36 @@ "type": "tidelift" } ], - "time": "2025-02-23T18:12:49+00:00" - }, - { - "name": "spatie/backtrace", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "0f2477c520e3729de58e061b8192f161c99f770b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/0f2477c520e3729de58e061b8192f161c99f770b", - "reference": "0f2477c520e3729de58e061b8192f161c99f770b", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "ext-json": "*", - "laravel/serializable-closure": "^1.3 || ^2.0", - "phpunit/phpunit": "^9.3 || ^11.4.3", - "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", - "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Backtrace\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van de Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A better backtrace", - "homepage": "https://github.com/spatie/backtrace", - "keywords": [ - "Backtrace", - "spatie" - ], - "support": { - "source": "https://github.com/spatie/backtrace/tree/1.7.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2024-12-02T13:28:15+00:00" - }, - { - "name": "spatie/error-solutions", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/spatie/error-solutions.git", - "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", - "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "illuminate/broadcasting": "^10.0|^11.0|^12.0", - "illuminate/cache": "^10.0|^11.0|^12.0", - "illuminate/support": "^10.0|^11.0|^12.0", - "livewire/livewire": "^2.11|^3.5.20", - "openai-php/client": "^0.10.1", - "orchestra/testbench": "8.22.3|^9.0|^10.0", - "pestphp/pest": "^2.20|^3.0", - "phpstan/phpstan": "^2.1", - "psr/simple-cache": "^3.0", - "psr/simple-cache-implementation": "^3.0", - "spatie/ray": "^1.28", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "legacy/ignition", - "Spatie\\ErrorSolutions\\": "src", - "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ruben Van Assche", - "email": "ruben@spatie.be", - "role": "Developer" - } - ], - "description": "This is my package error-solutions", - "homepage": "https://github.com/spatie/error-solutions", - "keywords": [ - "error-solutions", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.3" - }, - "funding": [ - { - "url": "https://github.com/Spatie", - "type": "github" - } - ], - "time": "2025-02-14T12:29:50+00:00" - }, - { - "name": "spatie/flare-client-php", - "version": "1.10.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/flare-client-php.git", - "reference": "bf1716eb98bd689451b071548ae9e70738dce62f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f", - "reference": "bf1716eb98bd689451b071548ae9e70738dce62f", - "shasum": "" - }, - "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0", - "php": "^8.0", - "spatie/backtrace": "^1.6.1", - "symfony/http-foundation": "^5.2|^6.0|^7.0", - "symfony/mime": "^5.2|^6.0|^7.0", - "symfony/process": "^5.2|^6.0|^7.0", - "symfony/var-dumper": "^5.2|^6.0|^7.0" - }, - "require-dev": { - "dms/phpunit-arraysubset-asserts": "^0.5.0", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/pest-plugin-snapshots": "^1.0|^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.3.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\FlareClient\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/spatie/flare-client-php", - "keywords": [ - "exception", - "flare", - "reporting", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.10.1" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2025-02-14T13:42:06+00:00" - }, - { - "name": "spatie/ignition", - "version": "1.15.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/ignition.git", - "reference": "31f314153020aee5af3537e507fef892ffbf8c85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85", - "reference": "31f314153020aee5af3537e507fef892ffbf8c85", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.0", - "spatie/error-solutions": "^1.0", - "spatie/flare-client-php": "^1.7", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" - }, - "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0|^12.0", - "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "psr/simple-cache-implementation": "*", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for PHP applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/ignition/issues", - "source": "https://github.com/spatie/ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2025-02-21T14:31:39+00:00" - }, - { - "name": "spatie/laravel-ignition", - "version": "2.9.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "1baee07216d6748ebd3a65ba97381b051838707a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", - "reference": "1baee07216d6748ebd3a65ba97381b051838707a", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0|^12.0", - "php": "^8.1", - "spatie/ignition": "^1.15", - "symfony/console": "^6.2.3|^7.0", - "symfony/var-dumper": "^6.2.3|^7.0" - }, - "require-dev": { - "livewire/livewire": "^2.11|^3.3.5", - "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.8.1|^0.10", - "orchestra/testbench": "8.22.3|^9.0|^10.0", - "pestphp/pest": "^2.34|^3.7", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", - "phpstan/phpstan-phpunit": "^1.3.16|^2.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" - }, - "providers": [ - "Spatie\\LaravelIgnition\\IgnitionServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\LaravelIgnition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/laravel-ignition/issues", - "source": "https://github.com/spatie/laravel-ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2025-02-20T13:13:55+00:00" + "time": "2026-03-22T17:22:38+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.11.3", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10" + "reference": "0525c73950de35ded110cffafb9892946d7771b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", - "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0525c73950de35ded110cffafb9892946d7771b5", + "reference": "0525c73950de35ded110cffafb9892946d7771b5", "shasum": "" }, "require": { "ext-simplexml": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": ">=5.4.0" + "php": ">=7.2.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + "phpunit/phpunit": "^8.4.0 || ^9.3.4 || ^10.5.32 || 11.3.3 - 11.5.28 || ^11.5.31" }, "bin": [ "bin/phpcbf", "bin/phpcs" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" @@ -12295,7 +10438,7 @@ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "description": "PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.", "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", @@ -12322,240 +10465,83 @@ "type": "open_collective" }, { - "url": "https://thanks.dev/phpcsstandards", + "url": "https://thanks.dev/u/gh/phpcsstandards", "type": "thanks_dev" } ], - "time": "2025-01-23T17:04:15+00:00" + "time": "2025-11-10T16:43:36+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.31.0", + "name": "staabm/side-effects-detector", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/yaml", - "version": "v7.2.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ac238f173df0c9c1120f862d0f599e17535a87ec", - "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" }, - "bin": [ - "Resources/bin/yaml-lint" - ], "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "lib/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-01-07T12:55:42+00:00" - }, - { - "name": "thedoctor0/laravel-factory-generator", - "version": "1.4.4", - "source": { - "type": "git", - "url": "https://github.com/TheDoctor0/laravel-factory-generator.git", - "reference": "adfff0e5444d3113e9c7b376fa32d3e589cc0ec9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDoctor0/laravel-factory-generator/zipball/adfff0e5444d3113e9c7b376fa32d3e589cc0ec9", - "reference": "adfff0e5444d3113e9c7b376fa32d3e589cc0ec9", - "shasum": "" - }, - "require": { - "illuminate/console": "^10.0|^11.0|^12.0", - "illuminate/filesystem": "^10.0|^11.0|^12.0", - "illuminate/support": "^10.0|^11.0|^12.0", - "php": "^8.1" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "TheDoctor0\\LaravelFactoryGenerator\\FactoryGeneratorServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "TheDoctor0\\LaravelFactoryGenerator\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Automatically generate Laravel factories for your models.", + "description": "A static analysis tool to detect side effects in PHP code", "keywords": [ - "factories", - "factory", - "generator", - "laravel", - "tests" + "static analysis" ], "support": { - "issues": "https://github.com/TheDoctor0/laravel-factory-generator/issues", - "source": "https://github.com/TheDoctor0/laravel-factory-generator/tree/1.4.4" + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" }, "funding": [ { - "url": "https://www.paypal.me/thedoctor0", - "type": "custom" - }, - { - "url": "https://github.com/thedoctor0", + "url": "https://github.com/staabm", "type": "github" } ], - "time": "2025-02-22T18:52:08+00:00" + "time": "2024-10-20T05:08:20+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": "^8.1" }, "type": "library", "autoload": { @@ -12577,7 +10563,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/2.0.1" }, "funding": [ { @@ -12585,17 +10571,17 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-12-08T11:19:18+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.3" + "php": "^8.5" }, - "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform-dev": {}, + "plugin-api-version": "2.9.0" } diff --git a/config/app.php b/config/app.php index ad0b01c..cda0231 100644 --- a/config/app.php +++ b/config/app.php @@ -1,215 +1,126 @@ env('APP_NAME', 'Laravel'), - /* - |-------------------------------------------------------------------------- - | Application Environment - |-------------------------------------------------------------------------- - | - | This value determines the "environment" your application is currently - | running in. This may determine how you prefer to configure various - | services the application utilizes. Set this in your ".env" file. - | - */ + /** + *-------------------------------------------------------------------------- + * Application Environment + *-------------------------------------------------------------------------- + * + * This value determines the "environment" your application is currently + * running in. This may determine how you prefer to configure various + * services the application utilizes. Set this in your ".env" file. + * + */ 'env' => env('APP_ENV', 'production'), - /* - |-------------------------------------------------------------------------- - | Application Debug Mode - |-------------------------------------------------------------------------- - | - | When your application is in debug mode, detailed error messages with - | stack traces will be shown on every error that occurs within your - | application. If disabled, a simple generic error page is shown. - | - */ + /** + *-------------------------------------------------------------------------- + * Application Debug Mode + *-------------------------------------------------------------------------- + * + * When your application is in debug mode, detailed error messages with + * stack traces will be shown on every error that occurs within your + * application. If disabled, a simple generic error page is shown. + * + */ - 'debug' => (bool)env('APP_DEBUG', false), + 'debug' => (bool) env('APP_DEBUG', false), - /* - |-------------------------------------------------------------------------- - | Application URL - |-------------------------------------------------------------------------- - | - | This URL is used by the console to properly generate URLs when using - | the Artisan command line tool. You should set this to the root of - | your application so that it is used when running Artisan tasks. - | - */ + /** + *-------------------------------------------------------------------------- + * Application URL + *-------------------------------------------------------------------------- + * + * This URL is used by the console to properly generate URLs when using + * the Artisan command line tool. You should set this to the root of + * the application so that it's available within Artisan commands. + * + */ 'url' => env('APP_URL', 'http://localhost'), - 'asset_url' => env('ASSET_URL'), + /** + *-------------------------------------------------------------------------- + * Application Timezone + *-------------------------------------------------------------------------- + * + * Here you may specify the default timezone for your application, which + * will be used by the PHP date and date-time functions. The timezone + * is set to "UTC" by default as it is suitable for most use cases. + * + */ - /* - |-------------------------------------------------------------------------- - | Application Timezone - |-------------------------------------------------------------------------- - | - | Here you may specify the default timezone for your application, which - | will be used by the PHP date and date-time functions. We have gone - | ahead and set this to a sensible default for you out of the box. - | - */ + 'timezone' => env('APP_TIMEZONE', 'Europe/Paris'), - 'timezone' => 'Europe/Paris', + /** + *-------------------------------------------------------------------------- + * Application Locale Configuration + *-------------------------------------------------------------------------- + * + * The application locale determines the default locale that will be used + * by Laravel's translation / localization methods. This option can be + * set to any locale for which you plan to have translation strings. + * + */ - /* - |-------------------------------------------------------------------------- - | Application Locale Configuration - |-------------------------------------------------------------------------- - | - | The application locale determines the default locale that will be used - | by the translation service provider. You are free to set this value - | to any of the locales which will be supported by the application. - | - */ + 'locale' => env('APP_LOCALE', 'fr'), - 'locale' => 'fr', + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'fr'), - /* - |-------------------------------------------------------------------------- - | Application Fallback Locale - |-------------------------------------------------------------------------- - | - | The fallback locale determines the locale to use when the current one - | is not available. You may change the value to correspond to any of - | the language folders that are provided through your application. - | - */ + 'faker_locale' => env('APP_FAKER_LOCALE', 'fr_FR'), - 'fallback_locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Faker Locale - |-------------------------------------------------------------------------- - | - | This locale will be used by the Faker PHP library when generating fake - | data for your database seeds. For example, this will be used to get - | localized telephone numbers, street address information and more. - | - */ - - 'faker_locale' => 'fr_FR', - - /* - |-------------------------------------------------------------------------- - | Encryption Key - |-------------------------------------------------------------------------- - | - | This key is used by the Illuminate encrypter service and should be set - | to a random, 32 character string, otherwise these encrypted strings - | will not be safe. Please do this before deploying an application! - | - */ - - 'key' => env('APP_KEY'), + /** + *-------------------------------------------------------------------------- + * Encryption Key + *-------------------------------------------------------------------------- + * + * This key is utilized by Laravel's encryption services and should be set + * to a random, 32 character string to ensure that all encrypted values + * are secure. You should do this prior to deploying the application. + * + */ 'cipher' => 'AES-256-CBC', - /* - |-------------------------------------------------------------------------- - | Maintenance Mode Driver - |-------------------------------------------------------------------------- - | - | These configuration options determine the driver used to determine and - | manage Laravel's "maintenance mode" status. The "cache" driver will - | allow maintenance mode to be controlled across multiple machines. - | - | Supported drivers: "file", "cache" - | - */ + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /** + *-------------------------------------------------------------------------- + * Maintenance Mode Driver + *-------------------------------------------------------------------------- + * + * These configuration options determine the driver used to determine and + * manage Laravel's "maintenance mode" status. The "cache" driver will + * allow maintenance mode to be controlled across multiple machines. + * + * Supported drivers: "file", "cache" + * + */ 'maintenance' => [ - 'driver' => 'file' + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), ], - /* - |-------------------------------------------------------------------------- - | Autoloaded Service Providers - |-------------------------------------------------------------------------- - | - | The service providers listed here will be automatically loaded on the - | request to your application. Feel free to add your own services to - | this array to grant expanded functionality to your applications. - | - */ - - 'providers' => [ - - /* - * Laravel Framework Service Providers... - */ - - Illuminate\Auth\AuthServiceProvider::class, - Illuminate\Broadcasting\BroadcastServiceProvider::class, - Illuminate\Bus\BusServiceProvider::class, - Illuminate\Cache\CacheServiceProvider::class, - Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, - Illuminate\Cookie\CookieServiceProvider::class, - Illuminate\Database\DatabaseServiceProvider::class, - Illuminate\Encryption\EncryptionServiceProvider::class, - Illuminate\Filesystem\FilesystemServiceProvider::class, - Illuminate\Foundation\Providers\FoundationServiceProvider::class, - Illuminate\Hashing\HashServiceProvider::class, - Illuminate\Mail\MailServiceProvider::class, - Illuminate\Notifications\NotificationServiceProvider::class, - Illuminate\Pagination\PaginationServiceProvider::class, - Illuminate\Pipeline\PipelineServiceProvider::class, - Illuminate\Queue\QueueServiceProvider::class, - Illuminate\Redis\RedisServiceProvider::class, - Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, - Illuminate\Session\SessionServiceProvider::class, - Illuminate\Translation\TranslationServiceProvider::class, - Illuminate\Validation\ValidationServiceProvider::class, - Illuminate\View\ViewServiceProvider::class, - - /* - * Package Service Providers... - */ - - /* - * Application Service Providers... - */ - - App\Providers\AppServiceProvider::class, - App\Providers\AuthServiceProvider::class, - App\Providers\EventServiceProvider::class, - App\Providers\RouteServiceProvider::class, - App\Providers\TranslationServiceProvider::class, - App\Providers\ViewServiceProvider::class - - ], - - /* - |-------------------------------------------------------------------------- - | Class Aliases - |-------------------------------------------------------------------------- - | - | This array of class aliases will be registered when this application - | is started. However, feel free to register as many as you wish as - | the aliases are "lazy" loaded so they don't hinder performance. - | - */ - - 'aliases' => Facade::defaultAliases()->toArray() - ]; diff --git a/config/auth.php b/config/auth.php index c21299e..5cb5e72 100644 --- a/config/auth.php +++ b/config/auth.php @@ -2,111 +2,114 @@ return [ - /* - |-------------------------------------------------------------------------- - | Authentication Defaults - |-------------------------------------------------------------------------- - | - | This option controls the default authentication "guard" and password - | reset options for your application. You may change these defaults - | as required, but they're a perfect start for most applications. - | - */ + /** + *-------------------------------------------------------------------------- + * Authentication Defaults + *-------------------------------------------------------------------------- + * + * This option defines the default authentication "guard" and password + * reset "broker" for your application. You may change these values + * as required, but they're a perfect start for most applications. + * + */ 'defaults' => [ - 'guard' => 'backend', - 'passwords' => 'users', + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), ], - /* - |-------------------------------------------------------------------------- - | Authentication Guards - |-------------------------------------------------------------------------- - | - | Next, you may define every authentication guard for your application. - | Of course, a great default configuration has been defined for you - | here which uses session storage and the Eloquent user provider. - | - | All authentication drivers have a user provider. This defines how the - | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. - | - | Supported: "session", "token" - | - */ + /** + *-------------------------------------------------------------------------- + * Authentication Guards + *-------------------------------------------------------------------------- + * + * Next, you may define every authentication guard for your application. + * Of course, a great default configuration has been defined for you + * which utilizes session storage plus the Eloquent user provider. + * + * All authentication guards have a user provider, which defines how the + * users are actually retrieved out of your database or other storage + * system used by the application. Typically, Eloquent is utilized. + * + * Supported: "session" + * + */ 'guards' => [ 'backend' => [ - 'driver' => 'session', + 'driver' => 'session', 'provider' => 'users', ], 'frontend' => [ - 'driver' => 'session', - // ! Remplacer "users" par le model authenticable voulu - 'provider' => 'users', + 'driver' => 'session', + 'provider' => 'customers', ], ], - /* - |-------------------------------------------------------------------------- - | User Providers - |-------------------------------------------------------------------------- - | - | All authentication drivers have a user provider. This defines how the - | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. - | - | If you have multiple user tables or models you may configure multiple - | sources which represent each model / table. These sources may then - | be assigned to any extra authentication guards you have defined. - | - | Supported: "database", "eloquent" - | - */ + /** + *-------------------------------------------------------------------------- + * User Providers + *-------------------------------------------------------------------------- + * + * All authentication guards have a user provider, which defines how the + * users are actually retrieved out of your database or other storage + * system used by the application. Typically, Eloquent is utilized. + * + * If you have multiple user tables or models you may configure multiple + * providers to represent the model / table. These providers may then + * be assigned to any extra authentication guards you have defined. + * + * Supported: "database", "eloquent" + * + */ 'providers' => [ 'users' => [ 'driver' => 'eloquent', - 'model' => App\Models\User::class, - ] + 'model' => env('AUTH_MODEL', Uwil\LaravelBackend\Models\User::class), + ], ], - /* - |-------------------------------------------------------------------------- - | Resetting Passwords - |-------------------------------------------------------------------------- - | - | You may specify multiple password reset configurations if you have more - | than one user table or model in the application and you want to have - | separate password reset settings based on the specific user types. - | - | The expire time is the number of minutes that the reset token should be - | considered valid. This security feature keeps tokens short-lived so - | they have less time to be guessed. You may change this as needed. - | - */ + /** + *-------------------------------------------------------------------------- + * Resetting Passwords + *-------------------------------------------------------------------------- + * + * These configuration options specify the behavior of Laravel's password + * reset functionality, including the table utilized for token storage + * and the user provider that is invoked to actually retrieve users. + * + * The expiry time is the number of minutes that each reset token will be + * considered valid. This security feature keeps tokens short-lived so + * they have less time to be guessed. You may change this as needed. + * + * The throttle setting is the number of seconds a user must wait before + * generating more password reset tokens. This prevents the user from + * quickly generating a very large amount of password reset tokens. + * + */ 'passwords' => [ 'users' => [ 'provider' => 'users', - 'table' => 'password_resets', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), 'expire' => 60, 'throttle' => 60, ], ], - /* - |-------------------------------------------------------------------------- - | Password Confirmation Timeout - |-------------------------------------------------------------------------- - | - | Here you may define the amount of seconds before a password confirmation - | times out and the user is prompted to re-enter their password via the - | confirmation screen. By default, the timeout lasts for three hours. - | - */ + /** + *-------------------------------------------------------------------------- + * Password Confirmation Timeout + *-------------------------------------------------------------------------- + * + * Here you may define the amount of seconds before a password confirmation + * window expires and users are asked to re-enter their password via the + * confirmation screen. By default, the timeout lasts for three hours. + * + */ - 'password_timeout' => 10800, + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), ]; diff --git a/config/breadcrumbs.php b/config/breadcrumbs.php index f3eab6a..550b8ad 100644 --- a/config/breadcrumbs.php +++ b/config/breadcrumbs.php @@ -2,53 +2,53 @@ return [ - /* - |-------------------------------------------------------------------------- - | View Name - |-------------------------------------------------------------------------- - | - | Choose a view to display when Breadcrumbs::render() is called. - | Built in templates are: - | - | - 'breadcrumbs::bootstrap5' - Bootstrap 5 - | - 'breadcrumbs::bootstrap4' - Bootstrap 4 - | - 'breadcrumbs::bulma' - Bulma - | - 'breadcrumbs::foundation6' - Foundation 6 - | - 'breadcrumbs::json-ld' - JSON-LD Structured Data - | - 'breadcrumbs::materialize' - Materialize - | - 'breadcrumbs::tailwind' - Tailwind CSS - | - 'breadcrumbs::uikit' - UIkit - | - | Or a custom view, e.g. '_partials/breadcrumbs'. - | - */ + /** + *-------------------------------------------------------------------------- + * View Name + *-------------------------------------------------------------------------- + * + * Choose a view to display when Breadcrumbs::render() is called. + * Built in templates are: + * + * - 'breadcrumbs::bootstrap5' - Bootstrap 5 + * - 'breadcrumbs::bootstrap4' - Bootstrap 4 + * - 'breadcrumbs::bulma' - Bulma + * - 'breadcrumbs::foundation6' - Foundation 6 + * - 'breadcrumbs::json-ld' - JSON-LD Structured Data + * - 'breadcrumbs::materialize' - Materialize + * - 'breadcrumbs::tailwind' - Tailwind CSS + * - 'breadcrumbs::uikit' - UIkit + * + * Or a custom view, e.g. '_partials/breadcrumbs'. + * + */ - 'view' => 'breadcrumbs/breadcrumb-layout', + 'view' => null, - /* - |-------------------------------------------------------------------------- - | Breadcrumbs File(s) - |-------------------------------------------------------------------------- - | - | The file(s) where breadcrumbs are defined. e.g. - | - | - base_path('routes/breadcrumbs.php') - | - glob(base_path('breadcrumbs/*.php')) - | - */ + /** + *-------------------------------------------------------------------------- + * Breadcrumbs File(s) + *-------------------------------------------------------------------------- + * + * The file(s) where breadcrumbs are defined. e.g. + * + * - base_path('routes/breadcrumbs.php') + * - glob(base_path('breadcrumbs/*.php')) + * + */ - 'files' => [ - base_path('routes/breadcrumbs-bo.php'), - ], + 'files' => array_filter([ + ...glob(base_path('routes/breadcrumbs/*.php')) ?: [], + ]), - /* - |-------------------------------------------------------------------------- - | Exceptions - |-------------------------------------------------------------------------- - | - | Determine when to throw an exception. - | - */ + /** + *-------------------------------------------------------------------------- + * Exceptions + *-------------------------------------------------------------------------- + * + * Determine when to throw an exception. + * + */ // * When route-bound breadcrumbs are used but the current route doesn't have a name (UnnamedRouteException) 'unnamed-route-exception' => true, @@ -59,14 +59,14 @@ return [ // * When a named breadcrumb is used but doesn't exist (InvalidBreadcrumbException) 'invalid-named-breadcrumb-exception' => true, - /* - |-------------------------------------------------------------------------- - | Classes - |-------------------------------------------------------------------------- - | - | Subclass the default classes for more advanced customisations. - | - */ + /** + *-------------------------------------------------------------------------- + * Classes + *-------------------------------------------------------------------------- + * + * Subclass the default classes for more advanced customisations. + * + */ // * Manager 'manager-class' => Diglactic\Breadcrumbs\Manager::class, diff --git a/config/broadcasting.php b/config/broadcasting.php deleted file mode 100644 index 3e45d82..0000000 --- a/config/broadcasting.php +++ /dev/null @@ -1,70 +0,0 @@ - env('BROADCAST_DRIVER', 'null'), - - /* - |-------------------------------------------------------------------------- - | Broadcast Connections - |-------------------------------------------------------------------------- - | - | Here you may define all of the broadcast connections that will be used - | to broadcast events to other systems or over websockets. Samples of - | each available type of connection are provided inside this array. - | - */ - - 'connections' => [ - - 'pusher' => [ - 'driver' => 'pusher', - 'key' => env('PUSHER_APP_KEY'), - 'secret' => env('PUSHER_APP_SECRET'), - 'app_id' => env('PUSHER_APP_ID'), - 'options' => [ - 'host' => env('PUSHER_HOST') ?: 'api-' . env('PUSHER_APP_CLUSTER', 'mt1') . '.pusher.com', - 'port' => env('PUSHER_PORT', 443), - 'scheme' => env('PUSHER_SCHEME', 'https'), - 'encrypted' => true, - 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', - ], - 'client_options' => [ - // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html . - ], - ], - - 'ably' => [ - 'driver' => 'ably', - 'key' => env('ABLY_KEY'), - ], - - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - ], - - 'log' => [ - 'driver' => 'log', - ], - - 'null' => [ - 'driver' => 'null', - ], - - ], - -]; diff --git a/config/cache.php b/config/cache.php index 0441464..28f84a4 100644 --- a/config/cache.php +++ b/config/cache.php @@ -5,38 +5,35 @@ use Illuminate\Support\Str; return [ /* - |-------------------------------------------------------------------------- - | Default Cache Store - |-------------------------------------------------------------------------- - | - | This option controls the default cache connection that gets used while - | using this caching library. This connection is used when another is - | not explicitly specified when executing a given caching function. - | - | Supported: "apc", "array", "database", "file", - | "memcached", "redis", "dynamodb" - | - */ + *-------------------------------------------------------------------------- + * Default Cache Store + *-------------------------------------------------------------------------- + * + * This option controls the default cache store that will be used by the + * framework. This connection is utilized if another isn't explicitly + * specified when running a cache operation inside the application. + * + */ - 'default' => env('CACHE_DRIVER', 'file'), + 'default' => env('CACHE_STORE', 'database'), /* - |-------------------------------------------------------------------------- - | Cache Stores - |-------------------------------------------------------------------------- - | - | Here you may define all of the cache "stores" for your application as - | well as their drivers. You may even define multiple stores for the - | same cache driver to group types of items stored in your caches. - | - */ + *-------------------------------------------------------------------------- + * Cache Stores + *-------------------------------------------------------------------------- + * + * Here you may define all of the cache "stores" for your application as + * well as their drivers. You may even define multiple stores for the + * same cache driver to group types of items stored in your caches. + * + * Supported drivers: "array", "database", "file", "memcached", + * "redis", "dynamodb", "octane", + * "failover", "null" + * + */ 'stores' => [ - 'apc' => [ - 'driver' => 'apc', - ], - 'array' => [ 'driver' => 'array', 'serialize' => false, @@ -44,14 +41,16 @@ return [ 'database' => [ 'driver' => 'database', - 'table' => 'cache', - 'connection' => null, - 'lock_connection' => null, + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), ], 'file' => [ 'driver' => 'file', 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), ], 'memcached' => [ @@ -61,9 +60,7 @@ return [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], - 'options' => [ - // Memcached::OPT_CONNECT_TIMEOUT => 2000, . - ], + 'options' => [], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), @@ -75,8 +72,8 @@ return [ 'redis' => [ 'driver' => 'redis', - 'connection' => 'cache', - 'lock_connection' => 'default', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), ], 'dynamodb' => [ @@ -92,19 +89,27 @@ return [ 'driver' => 'octane', ], + 'failover' => [ + 'driver' => 'failover', + 'stores' => [ + 'database', + 'array', + ], + ], + ], /* - |-------------------------------------------------------------------------- - | Cache Key Prefix - |-------------------------------------------------------------------------- - | - | When utilizing a RAM based store such as APC or Memcached, there might - | be other applications utilizing the same cache. So, we'll specify a - | value to get prefixed to all our keys so we can avoid collisions. - | - */ + *-------------------------------------------------------------------------- + * Cache Key Prefix + *-------------------------------------------------------------------------- + * + * When utilizing the APC, database, memcached, Redis, and DynamoDB cache + * stores, there might be other applications using the same cache. For + * that reason, you may prefix every cache key to avoid collisions. + * + */ - 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache'), + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')) . '-cache-'), ]; diff --git a/config/cors.php b/config/cors.php deleted file mode 100644 index caccf68..0000000 --- a/config/cors.php +++ /dev/null @@ -1,34 +0,0 @@ - ['api/*'], - - 'allowed_methods' => ['*'], - - 'allowed_origins' => ['*'], - - 'allowed_origins_patterns' => [], - - 'allowed_headers' => ['*'], - - 'exposed_headers' => [], - - 'max_age' => 0, - - 'supports_credentials' => false, - -]; diff --git a/config/database.php b/config/database.php index 9dfe93d..8342fc8 100644 --- a/config/database.php +++ b/config/database.php @@ -5,88 +5,114 @@ use Illuminate\Support\Str; return [ /* - |-------------------------------------------------------------------------- - | Default Database Connection Name - |-------------------------------------------------------------------------- - | - | Here you may specify which of the database connections below you wish - | to use as your default connection for all database work. Of course - | you may use many connections at once using the Database library. - | - */ + *-------------------------------------------------------------------------- + * Default Database Connection Name + *-------------------------------------------------------------------------- + * + * Here you may specify which of the database connections below you wish + * to use as your default connection for database operations. This is + * the connection which will be utilized unless another connection + * is explicitly specified when you execute a query / statement. + * + */ - 'default' => env('DB_CONNECTION', 'mysql'), + 'default' => env('DB_CONNECTION', 'sqlite'), /* - |-------------------------------------------------------------------------- - | Database Connections - |-------------------------------------------------------------------------- - | - | Here are each of the database connections setup for your application. - | Of course, examples of configuring each database platform that is - | supported by Laravel is shown below to make development simple. - | - | - | All database work in Laravel is done through the PHP PDO facilities - | so make sure you have the driver for your particular database of - | choice installed on your machine before you begin development. - | - */ + *-------------------------------------------------------------------------- + * Database Connections + *-------------------------------------------------------------------------- + * + * Below are all of the database connections defined for your application. + * An example configuration is provided for each database system which + * is supported by Laravel. You're free to add / remove connections. + * + */ 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + 'transaction_mode' => 'DEFERRED', ], 'mysql' => [ 'driver' => 'mysql', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + (PHP_VERSION_ID >= 80500 + ? \Pdo\Mysql::ATTR_SSL_CA + : \PDO::MYSQL_ATTR_SSL_CA + ) => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + (PHP_VERSION_ID >= 80500 + ? \Pdo\Mysql::ATTR_SSL_CA + : \PDO::MYSQL_ATTR_SSL_CA + ) => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'pgsql' => [ 'driver' => 'pgsql', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, 'search_path' => 'public', - 'sslmode' => 'prefer', + 'sslmode' => env('DB_SSLMODE', 'prefer'), ], 'sqlsrv' => [ 'driver' => 'sqlsrv', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, ], @@ -94,28 +120,31 @@ return [ ], /* - |-------------------------------------------------------------------------- - | Migration Repository Table - |-------------------------------------------------------------------------- - | - | This table keeps track of all the migrations that have already run for - | your application. Using this information, we can determine which of - | the migrations on disk haven't actually been run in the database. - | - */ + *-------------------------------------------------------------------------- + * Migration Repository Table + *-------------------------------------------------------------------------- + * + * This table keeps track of all the migrations that have already run for + * your application. Using this information, we can determine which of + * the migrations on disk haven't actually been run on the database. + * + */ - 'migrations' => 'migrations', + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], /* - |-------------------------------------------------------------------------- - | Redis Databases - |-------------------------------------------------------------------------- - | - | Redis is an open source, fast, and advanced key-value store that also - | provides a richer body of commands than a typical key-value system - | such as APC or Memcached. Laravel makes it easy to dig right in. - | - */ + *-------------------------------------------------------------------------- + * Redis Databases + *-------------------------------------------------------------------------- + * + * Redis is an open source, fast, and advanced key-value store that also + * provides a richer body of commands than a typical key-value system + * such as Memcached. You may define your connection settings here. + * + */ 'redis' => [ @@ -123,7 +152,8 @@ return [ 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')) . '-database-'), + 'persistent' => env('REDIS_PERSISTENT', false), ], 'default' => [ @@ -133,6 +163,10 @@ return [ 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_DB', '0'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), ], 'cache' => [ @@ -142,6 +176,10 @@ return [ 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_CACHE_DB', '1'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), ], ], diff --git a/config/filesystems.php b/config/filesystems.php index 679fdfc..c04e9ba 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -2,38 +2,40 @@ return [ - /* - |-------------------------------------------------------------------------- - | Default Filesystem Disk - |-------------------------------------------------------------------------- - | - | Here you may specify the default filesystem disk that should be used - | by the framework. The "local" disk, as well as a variety of cloud - | based disks are available to your application. Just store away! - | - */ + /** + *-------------------------------------------------------------------------- + * Default Filesystem Disk + *-------------------------------------------------------------------------- + * + * Here you may specify the default filesystem disk that should be used + * by the framework. The "local" disk, as well as a variety of cloud + * based disks are available to your application for file storage. + * + */ - 'default' => env('FILESYSTEM_DRIVER', 'local'), + 'default' => env('FILESYSTEM_DISK', 'local'), - /* - |-------------------------------------------------------------------------- - | Filesystem Disks - |-------------------------------------------------------------------------- - | - | Here you may configure as many filesystem "disks" as you wish, and you - | may even configure multiple disks of the same driver. Defaults have - | been setup for each driver as an example of the required options. - | - | Supported Drivers: "local", "ftp", "sftp", "s3" - | - */ + /** + *-------------------------------------------------------------------------- + * Filesystem Disks + *-------------------------------------------------------------------------- + * + * Below you may configure as many filesystem disks as necessary, and you + * may even configure multiple disks for the same driver. Examples for + * most supported storage drivers are configured here for reference. + * + * Supported drivers: "local", "ftp", "sftp", "s3" + * + */ 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), + 'serve' => true, 'throw' => false, + 'report' => false, ], 'public' => [ @@ -42,13 +44,7 @@ return [ 'url' => env('APP_URL') . '/storage', 'visibility' => 'public', 'throw' => false, - ], - - 'private' => [ - 'driver' => 'local', - 'root' => storage_path('app/private'), - 'visibility' => 'private', - 'throw' => false, + 'report' => false, ], 's3' => [ @@ -61,25 +57,21 @@ return [ 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' => false, - ], - - 'samlidp' => [ - 'driver' => 'local', - 'root' => storage_path() . '/samlidp', + 'report' => false, ], ], - /* - |-------------------------------------------------------------------------- - | Symbolic Links - |-------------------------------------------------------------------------- - | - | Here you may configure the symbolic links that will be created when the - | `storage:link` Artisan command is executed. The array keys should be - | the locations of the links and the values should be their targets. - | - */ + /** + *-------------------------------------------------------------------------- + * Symbolic Links + *-------------------------------------------------------------------------- + * + * Here you may configure the symbolic links that will be created when the + * `storage:link` Artisan command is executed. The array keys should be + * the locations of the links and the values should be their targets. + * + */ 'links' => [ public_path('storage') => storage_path('app/public'), diff --git a/config/gitlab.php b/config/gitlab.php deleted file mode 100644 index 6f8f388..0000000 --- a/config/gitlab.php +++ /dev/null @@ -1,74 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -return [ - - /** - *-------------------------------------------------------------------------- - * Default Connection Name - *-------------------------------------------------------------------------- - * - * Here you may specify which of the connections below you wish to use as - * your default connection for all work. Of course, you may use many - * connections at once using the manager class. - * - */ - - 'default' => 'main', - - /** - *-------------------------------------------------------------------------- - * GitLab Connections - *-------------------------------------------------------------------------- - * - * Here are each of the connections setup for your application. Example - * configuration has been included, but you may add as many connections as - * you would like. Note that the 4 supported authentication methods are: - * "none", "oauth", "job_token", and "token". - * - */ - - 'connections' => [ - 'main' => [ - 'token' => env('GITLAB_TOKEN'), - 'method' => 'token', - 'url' => env('GITLAB_URL'), - ], - ], - - /** - *-------------------------------------------------------------------------- - * HTTP Cache - *-------------------------------------------------------------------------- - * - * Here are each of the cache configurations setup for your application. - * Only the "illuminate" driver is provided out of the box. Example - * configuration has been included. - * - */ - - 'cache' => [ - - 'main' => [ - 'driver' => 'illuminate', - 'connector' => null, - ], - - 'bar' => [ - 'driver' => 'illuminate', - 'connector' => 'redis', - ], - - ], - -]; diff --git a/config/hashing.php b/config/hashing.php deleted file mode 100644 index db3d9dd..0000000 --- a/config/hashing.php +++ /dev/null @@ -1,52 +0,0 @@ - 'bcrypt', - - /* - |-------------------------------------------------------------------------- - | Bcrypt Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Bcrypt algorithm. This will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'bcrypt' => [ - 'rounds' => env('BCRYPT_ROUNDS', 10), - ], - - /* - |-------------------------------------------------------------------------- - | Argon Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Argon algorithm. These will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'argon' => [ - 'memory' => 65536, - 'threads' => 1, - 'time' => 4, - ], - -]; diff --git a/config/inertia.php b/config/inertia.php new file mode 100644 index 0000000..a33e426 --- /dev/null +++ b/config/inertia.php @@ -0,0 +1,64 @@ + [ + + 'enabled' => false, + + 'url' => env('APP_URL', 'https://localhost'), + + ], + + /** + *-------------------------------------------------------------------------- + * Testing + *-------------------------------------------------------------------------- + * + * The values described here are used to locate Inertia components on the + * filesystem. For instance, when using `assertInertia`, the assertion + * attempts to locate the component as a file relative to any of the + * paths AND with any of the extensions specified here. + * + */ + + 'testing' => [ + + 'ensure_pages_exist' => true, + + 'page_paths' => [ + resource_path('ts/front/Pages'), + ], + + 'page_extensions' => [ + 'js', + 'jsx', + 'svelte', + 'ts', + 'tsx', + 'vue', + ], + ], + + 'history' => [ + 'encrypt' => false, + ], + +]; diff --git a/config/laravellocalization.php b/config/laravellocalization.php new file mode 100644 index 0000000..40e2e5b --- /dev/null +++ b/config/laravellocalization.php @@ -0,0 +1,354 @@ + [ + //'ace' => ['name' => 'Achinese', 'script' => 'Latn', 'native' => 'Aceh', 'regional' => ''], + //'af' => ['name' => 'Afrikaans', 'script' => 'Latn', 'native' => 'Afrikaans', 'regional' => 'af_ZA'], + //'agq' => ['name' => 'Aghem', 'script' => 'Latn', 'native' => 'Aghem', 'regional' => ''], + //'ak' => ['name' => 'Akan', 'script' => 'Latn', 'native' => 'Akan', 'regional' => 'ak_GH'], + //'an' => ['name' => 'Aragonese', 'script' => 'Latn', 'native' => 'aragonés', 'regional' => 'an_ES'], + //'cch' => ['name' => 'Atsam', 'script' => 'Latn', 'native' => 'Atsam', 'regional' => ''], + //'gn' => ['name' => 'Guaraní', 'script' => 'Latn', 'native' => 'Avañe’ẽ', 'regional' => ''], + //'ae' => ['name' => 'Avestan', 'script' => 'Latn', 'native' => 'avesta', 'regional' => ''], + //'ay' => ['name' => 'Aymara', 'script' => 'Latn', 'native' => 'aymar aru', 'regional' => 'ay_PE'], + //'az' => ['name' => 'Azerbaijani (Latin)', 'script' => 'Latn', 'native' => 'azərbaycanca', 'regional' => 'az_AZ'], + //'id' => ['name' => 'Indonesian', 'script' => 'Latn', 'native' => 'Bahasa Indonesia', 'regional' => 'id_ID'], + //'ms' => ['name' => 'Malay', 'script' => 'Latn', 'native' => 'Bahasa Melayu', 'regional' => 'ms_MY'], + //'bm' => ['name' => 'Bambara', 'script' => 'Latn', 'native' => 'bamanakan', 'regional' => ''], + //'jv' => ['name' => 'Javanese (Latin)', 'script' => 'Latn', 'native' => 'Basa Jawa', 'regional' => ''], + //'su' => ['name' => 'Sundanese', 'script' => 'Latn', 'native' => 'Basa Sunda', 'regional' => ''], + //'bh' => ['name' => 'Bihari', 'script' => 'Latn', 'native' => 'Bihari', 'regional' => ''], + //'bi' => ['name' => 'Bislama', 'script' => 'Latn', 'native' => 'Bislama', 'regional' => ''], + //'nb' => ['name' => 'Norwegian Bokmål', 'script' => 'Latn', 'native' => 'Bokmål', 'regional' => 'nb_NO'], + //'bs' => ['name' => 'Bosnian', 'script' => 'Latn', 'native' => 'bosanski', 'regional' => 'bs_BA'], + //'br' => ['name' => 'Breton', 'script' => 'Latn', 'native' => 'brezhoneg', 'regional' => 'br_FR'], + //'ca' => ['name' => 'Catalan', 'script' => 'Latn', 'native' => 'català', 'regional' => 'ca_ES'], + //'ch' => ['name' => 'Chamorro', 'script' => 'Latn', 'native' => 'Chamoru', 'regional' => ''], + //'ny' => ['name' => 'Chewa', 'script' => 'Latn', 'native' => 'chiCheŵa', 'regional' => ''], + //'kde' => ['name' => 'Makonde', 'script' => 'Latn', 'native' => 'Chimakonde', 'regional' => ''], + //'sn' => ['name' => 'Shona', 'script' => 'Latn', 'native' => 'chiShona', 'regional' => ''], + //'co' => ['name' => 'Corsican', 'script' => 'Latn', 'native' => 'corsu', 'regional' => ''], + //'cy' => ['name' => 'Welsh', 'script' => 'Latn', 'native' => 'Cymraeg', 'regional' => 'cy_GB'], + //'da' => ['name' => 'Danish', 'script' => 'Latn', 'native' => 'dansk', 'regional' => 'da_DK'], + //'se' => ['name' => 'Northern Sami', 'script' => 'Latn', 'native' => 'davvisámegiella', 'regional' => 'se_NO'], + 'de' => ['name' => 'German', 'script' => 'Latn', 'native' => 'Deutsch', 'regional' => 'de_DE'], + //'luo' => ['name' => 'Luo', 'script' => 'Latn', 'native' => 'Dholuo', 'regional' => ''], + //'nv' => ['name' => 'Navajo', 'script' => 'Latn', 'native' => 'Diné bizaad', 'regional' => ''], + //'dua' => ['name' => 'Duala', 'script' => 'Latn', 'native' => 'duálá', 'regional' => ''], + //'et' => ['name' => 'Estonian', 'script' => 'Latn', 'native' => 'eesti', 'regional' => 'et_EE'], + //'na' => ['name' => 'Nauru', 'script' => 'Latn', 'native' => 'Ekakairũ Naoero', 'regional' => ''], + //'guz' => ['name' => 'Ekegusii', 'script' => 'Latn', 'native' => 'Ekegusii', 'regional' => ''], + 'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'], + //'en-AU' => ['name' => 'Australian English', 'script' => 'Latn', 'native' => 'Australian English', 'regional' => 'en_AU'], + //'en-GB' => ['name' => 'British English', 'script' => 'Latn', 'native' => 'British English', 'regional' => 'en_GB'], + //'en-CA' => ['name' => 'Canadian English', 'script' => 'Latn', 'native' => 'Canadian English', 'regional' => 'en_CA'], + //'en-US' => ['name' => 'U.S. English', 'script' => 'Latn', 'native' => 'U.S. English', 'regional' => 'en_US'], + 'es' => ['name' => 'Spanish', 'script' => 'Latn', 'native' => 'español', 'regional' => 'es_ES'], + //'eo' => ['name' => 'Esperanto', 'script' => 'Latn', 'native' => 'esperanto', 'regional' => ''], + //'eu' => ['name' => 'Basque', 'script' => 'Latn', 'native' => 'euskara', 'regional' => 'eu_ES'], + //'ewo' => ['name' => 'Ewondo', 'script' => 'Latn', 'native' => 'ewondo', 'regional' => ''], + //'ee' => ['name' => 'Ewe', 'script' => 'Latn', 'native' => 'eʋegbe', 'regional' => ''], + //'fil' => ['name' => 'Filipino', 'script' => 'Latn', 'native' => 'Filipino', 'regional' => 'fil_PH'], + 'fr' => ['name' => 'French', 'script' => 'Latn', 'native' => 'français', 'regional' => 'fr_FR'], + //'fr-CA' => ['name' => 'Canadian French', 'script' => 'Latn', 'native' => 'français canadien', 'regional' => 'fr_CA'], + //'fy' => ['name' => 'Western Frisian', 'script' => 'Latn', 'native' => 'frysk', 'regional' => 'fy_DE'], + //'fur' => ['name' => 'Friulian', 'script' => 'Latn', 'native' => 'furlan', 'regional' => 'fur_IT'], + //'fo' => ['name' => 'Faroese', 'script' => 'Latn', 'native' => 'føroyskt', 'regional' => 'fo_FO'], + //'gaa' => ['name' => 'Ga', 'script' => 'Latn', 'native' => 'Ga', 'regional' => ''], + //'ga' => ['name' => 'Irish', 'script' => 'Latn', 'native' => 'Gaeilge', 'regional' => 'ga_IE'], + //'gv' => ['name' => 'Manx', 'script' => 'Latn', 'native' => 'Gaelg', 'regional' => 'gv_GB'], + //'sm' => ['name' => 'Samoan', 'script' => 'Latn', 'native' => 'Gagana fa’a Sāmoa', 'regional' => ''], + //'gl' => ['name' => 'Galician', 'script' => 'Latn', 'native' => 'galego', 'regional' => 'gl_ES'], + //'ki' => ['name' => 'Kikuyu', 'script' => 'Latn', 'native' => 'Gikuyu', 'regional' => ''], + //'gd' => ['name' => 'Scottish Gaelic', 'script' => 'Latn', 'native' => 'Gàidhlig', 'regional' => 'gd_GB'], + //'ha' => ['name' => 'Hausa', 'script' => 'Latn', 'native' => 'Hausa', 'regional' => 'ha_NG'], + //'bez' => ['name' => 'Bena', 'script' => 'Latn', 'native' => 'Hibena', 'regional' => ''], + //'ho' => ['name' => 'Hiri Motu', 'script' => 'Latn', 'native' => 'Hiri Motu', 'regional' => ''], + //'hr' => ['name' => 'Croatian', 'script' => 'Latn', 'native' => 'hrvatski', 'regional' => 'hr_HR'], + //'bem' => ['name' => 'Bemba', 'script' => 'Latn', 'native' => 'Ichibemba', 'regional' => 'bem_ZM'], + //'io' => ['name' => 'Ido', 'script' => 'Latn', 'native' => 'Ido', 'regional' => ''], + //'ig' => ['name' => 'Igbo', 'script' => 'Latn', 'native' => 'Igbo', 'regional' => 'ig_NG'], + //'rn' => ['name' => 'Rundi', 'script' => 'Latn', 'native' => 'Ikirundi', 'regional' => ''], + //'ia' => ['name' => 'Interlingua', 'script' => 'Latn', 'native' => 'interlingua', 'regional' => 'ia_FR'], + //'iu-Latn' => ['name' => 'Inuktitut (Latin)', 'script' => 'Latn', 'native' => 'Inuktitut', 'regional' => 'iu_CA'], + //'sbp' => ['name' => 'Sileibi', 'script' => 'Latn', 'native' => 'Ishisangu', 'regional' => ''], + //'nd' => ['name' => 'North Ndebele', 'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => ''], + //'nr' => ['name' => 'South Ndebele', 'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => 'nr_ZA'], + //'xh' => ['name' => 'Xhosa', 'script' => 'Latn', 'native' => 'isiXhosa', 'regional' => 'xh_ZA'], + //'zu' => ['name' => 'Zulu', 'script' => 'Latn', 'native' => 'isiZulu', 'regional' => 'zu_ZA'], + //'it' => ['name' => 'Italian', 'script' => 'Latn', 'native' => 'italiano', 'regional' => 'it_IT'], + //'ik' => ['name' => 'Inupiaq', 'script' => 'Latn', 'native' => 'Iñupiaq', 'regional' => 'ik_CA'], + //'dyo' => ['name' => 'Jola-Fonyi', 'script' => 'Latn', 'native' => 'joola', 'regional' => ''], + //'kea' => ['name' => 'Kabuverdianu', 'script' => 'Latn', 'native' => 'kabuverdianu', 'regional' => ''], + //'kaj' => ['name' => 'Jju', 'script' => 'Latn', 'native' => 'Kaje', 'regional' => ''], + //'mh' => ['name' => 'Marshallese', 'script' => 'Latn', 'native' => 'Kajin M̧ajeļ', 'regional' => 'mh_MH'], + //'kl' => ['name' => 'Kalaallisut', 'script' => 'Latn', 'native' => 'kalaallisut', 'regional' => 'kl_GL'], + //'kln' => ['name' => 'Kalenjin', 'script' => 'Latn', 'native' => 'Kalenjin', 'regional' => ''], + //'kr' => ['name' => 'Kanuri', 'script' => 'Latn', 'native' => 'Kanuri', 'regional' => ''], + //'kcg' => ['name' => 'Tyap', 'script' => 'Latn', 'native' => 'Katab', 'regional' => ''], + //'kw' => ['name' => 'Cornish', 'script' => 'Latn', 'native' => 'kernewek', 'regional' => 'kw_GB'], + //'naq' => ['name' => 'Nama', 'script' => 'Latn', 'native' => 'Khoekhoegowab', 'regional' => ''], + //'rof' => ['name' => 'Rombo', 'script' => 'Latn', 'native' => 'Kihorombo', 'regional' => ''], + //'kam' => ['name' => 'Kamba', 'script' => 'Latn', 'native' => 'Kikamba', 'regional' => ''], + //'kg' => ['name' => 'Kongo', 'script' => 'Latn', 'native' => 'Kikongo', 'regional' => ''], + //'jmc' => ['name' => 'Machame', 'script' => 'Latn', 'native' => 'Kimachame', 'regional' => ''], + //'rw' => ['name' => 'Kinyarwanda', 'script' => 'Latn', 'native' => 'Kinyarwanda', 'regional' => 'rw_RW'], + //'asa' => ['name' => 'Kipare', 'script' => 'Latn', 'native' => 'Kipare', 'regional' => ''], + //'rwk' => ['name' => 'Rwa', 'script' => 'Latn', 'native' => 'Kiruwa', 'regional' => ''], + //'saq' => ['name' => 'Samburu', 'script' => 'Latn', 'native' => 'Kisampur', 'regional' => ''], + //'ksb' => ['name' => 'Shambala', 'script' => 'Latn', 'native' => 'Kishambaa', 'regional' => ''], + //'swc' => ['name' => 'Congo Swahili', 'script' => 'Latn', 'native' => 'Kiswahili ya Kongo', 'regional' => ''], + //'sw' => ['name' => 'Swahili', 'script' => 'Latn', 'native' => 'Kiswahili', 'regional' => 'sw_KE'], + //'dav' => ['name' => 'Dawida', 'script' => 'Latn', 'native' => 'Kitaita', 'regional' => ''], + //'teo' => ['name' => 'Teso', 'script' => 'Latn', 'native' => 'Kiteso', 'regional' => ''], + //'khq' => ['name' => 'Koyra Chiini', 'script' => 'Latn', 'native' => 'Koyra ciini', 'regional' => ''], + //'ses' => ['name' => 'Songhay', 'script' => 'Latn', 'native' => 'Koyraboro senni', 'regional' => ''], + //'mfe' => ['name' => 'Morisyen', 'script' => 'Latn', 'native' => 'kreol morisien', 'regional' => ''], + //'ht' => ['name' => 'Haitian', 'script' => 'Latn', 'native' => 'Kreyòl ayisyen', 'regional' => 'ht_HT'], + //'kj' => ['name' => 'Kuanyama', 'script' => 'Latn', 'native' => 'Kwanyama', 'regional' => ''], + //'ksh' => ['name' => 'Kölsch', 'script' => 'Latn', 'native' => 'Kölsch', 'regional' => ''], + //'ebu' => ['name' => 'Kiembu', 'script' => 'Latn', 'native' => 'Kĩembu', 'regional' => ''], + //'mer' => ['name' => 'Kimîîru', 'script' => 'Latn', 'native' => 'Kĩmĩrũ', 'regional' => ''], + //'lag' => ['name' => 'Langi', 'script' => 'Latn', 'native' => 'Kɨlaangi', 'regional' => ''], + //'lah' => ['name' => 'Lahnda', 'script' => 'Latn', 'native' => 'Lahnda', 'regional' => ''], + //'la' => ['name' => 'Latin', 'script' => 'Latn', 'native' => 'latine', 'regional' => ''], + //'lv' => ['name' => 'Latvian', 'script' => 'Latn', 'native' => 'latviešu', 'regional' => 'lv_LV'], + //'to' => ['name' => 'Tongan', 'script' => 'Latn', 'native' => 'lea fakatonga', 'regional' => ''], + //'lt' => ['name' => 'Lithuanian', 'script' => 'Latn', 'native' => 'lietuvių', 'regional' => 'lt_LT'], + //'li' => ['name' => 'Limburgish', 'script' => 'Latn', 'native' => 'Limburgs', 'regional' => 'li_BE'], + //'ln' => ['name' => 'Lingala', 'script' => 'Latn', 'native' => 'lingála', 'regional' => ''], + //'lg' => ['name' => 'Ganda', 'script' => 'Latn', 'native' => 'Luganda', 'regional' => 'lg_UG'], + //'luy' => ['name' => 'Oluluyia', 'script' => 'Latn', 'native' => 'Luluhia', 'regional' => ''], + //'lb' => ['name' => 'Luxembourgish', 'script' => 'Latn', 'native' => 'Lëtzebuergesch', 'regional' => 'lb_LU'], + //'hu' => ['name' => 'Hungarian', 'script' => 'Latn', 'native' => 'magyar', 'regional' => 'hu_HU'], + //'mgh' => ['name' => 'Makhuwa-Meetto', 'script' => 'Latn', 'native' => 'Makua', 'regional' => ''], + //'mg' => ['name' => 'Malagasy', 'script' => 'Latn', 'native' => 'Malagasy', 'regional' => 'mg_MG'], + //'mt' => ['name' => 'Maltese', 'script' => 'Latn', 'native' => 'Malti', 'regional' => 'mt_MT'], + //'mtr' => ['name' => 'Mewari', 'script' => 'Latn', 'native' => 'Mewari', 'regional' => ''], + //'mua' => ['name' => 'Mundang', 'script' => 'Latn', 'native' => 'Mundang', 'regional' => ''], + //'mi' => ['name' => 'Māori', 'script' => 'Latn', 'native' => 'Māori', 'regional' => 'mi_NZ'], + 'nl' => ['name' => 'Dutch', 'script' => 'Latn', 'native' => 'Nederlands', 'regional' => 'nl_NL'], + //'nmg' => ['name' => 'Kwasio', 'script' => 'Latn', 'native' => 'ngumba', 'regional' => ''], + //'yav' => ['name' => 'Yangben', 'script' => 'Latn', 'native' => 'nuasue', 'regional' => ''], + //'nn' => ['name' => 'Norwegian Nynorsk', 'script' => 'Latn', 'native' => 'nynorsk', 'regional' => 'nn_NO'], + //'oc' => ['name' => 'Occitan', 'script' => 'Latn', 'native' => 'occitan', 'regional' => 'oc_FR'], + //'ang' => ['name' => 'Old English', 'script' => 'Runr', 'native' => 'Old English', 'regional' => ''], + //'xog' => ['name' => 'Soga', 'script' => 'Latn', 'native' => 'Olusoga', 'regional' => ''], + //'om' => ['name' => 'Oromo', 'script' => 'Latn', 'native' => 'Oromoo', 'regional' => 'om_ET'], + //'ng' => ['name' => 'Ndonga', 'script' => 'Latn', 'native' => 'OshiNdonga', 'regional' => ''], + //'hz' => ['name' => 'Herero', 'script' => 'Latn', 'native' => 'Otjiherero', 'regional' => ''], + //'uz-Latn' => ['name' => 'Uzbek (Latin)', 'script' => 'Latn', 'native' => 'oʼzbekcha', 'regional' => 'uz_UZ'], + //'nds' => ['name' => 'Low German', 'script' => 'Latn', 'native' => 'Plattdüütsch', 'regional' => 'nds_DE'], + 'pl' => ['name' => 'Polish', 'script' => 'Latn', 'native' => 'polski', 'regional' => 'pl_PL'], + //'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'português', 'regional' => 'pt_PT'], + //'pt-BR' => ['name' => 'Brazilian Portuguese', 'script' => 'Latn', 'native' => 'português do Brasil', 'regional' => 'pt_BR'], + //'ff' => ['name' => 'Fulah', 'script' => 'Latn', 'native' => 'Pulaar', 'regional' => 'ff_SN'], + //'pi' => ['name' => 'Pahari-Potwari', 'script' => 'Latn', 'native' => 'Pāli', 'regional' => ''], + //'aa' => ['name' => 'Afar', 'script' => 'Latn', 'native' => 'Qafar', 'regional' => 'aa_ER'], + //'ty' => ['name' => 'Tahitian', 'script' => 'Latn', 'native' => 'Reo Māohi', 'regional' => ''], + //'ksf' => ['name' => 'Bafia', 'script' => 'Latn', 'native' => 'rikpa', 'regional' => ''], + //'ro' => ['name' => 'Romanian', 'script' => 'Latn', 'native' => 'română', 'regional' => 'ro_RO'], + //'cgg' => ['name' => 'Chiga', 'script' => 'Latn', 'native' => 'Rukiga', 'regional' => ''], + //'rm' => ['name' => 'Romansh', 'script' => 'Latn', 'native' => 'rumantsch', 'regional' => ''], + //'qu' => ['name' => 'Quechua', 'script' => 'Latn', 'native' => 'Runa Simi', 'regional' => ''], + //'nyn' => ['name' => 'Nyankole', 'script' => 'Latn', 'native' => 'Runyankore', 'regional' => ''], + //'ssy' => ['name' => 'Saho', 'script' => 'Latn', 'native' => 'Saho', 'regional' => ''], + //'sc' => ['name' => 'Sardinian', 'script' => 'Latn', 'native' => 'sardu', 'regional' => 'sc_IT'], + //'de-CH' => ['name' => 'Swiss High German', 'script' => 'Latn', 'native' => 'Schweizer Hochdeutsch', 'regional' => 'de_CH'], + //'gsw' => ['name' => 'Swiss German', 'script' => 'Latn', 'native' => 'Schwiizertüütsch', 'regional' => ''], + //'trv' => ['name' => 'Taroko', 'script' => 'Latn', 'native' => 'Seediq', 'regional' => ''], + //'seh' => ['name' => 'Sena', 'script' => 'Latn', 'native' => 'sena', 'regional' => ''], + //'nso' => ['name' => 'Northern Sotho', 'script' => 'Latn', 'native' => 'Sesotho sa Leboa', 'regional' => 'nso_ZA'], + //'st' => ['name' => 'Southern Sotho', 'script' => 'Latn', 'native' => 'Sesotho', 'regional' => 'st_ZA'], + //'tn' => ['name' => 'Tswana', 'script' => 'Latn', 'native' => 'Setswana', 'regional' => 'tn_ZA'], + //'sq' => ['name' => 'Albanian', 'script' => 'Latn', 'native' => 'shqip', 'regional' => 'sq_AL'], + //'sid' => ['name' => 'Sidamo', 'script' => 'Latn', 'native' => 'Sidaamu Afo', 'regional' => 'sid_ET'], + //'ss' => ['name' => 'Swati', 'script' => 'Latn', 'native' => 'Siswati', 'regional' => 'ss_ZA'], + //'sk' => ['name' => 'Slovak', 'script' => 'Latn', 'native' => 'slovenčina', 'regional' => 'sk_SK'], + //'sl' => ['name' => 'Slovene', 'script' => 'Latn', 'native' => 'slovenščina', 'regional' => 'sl_SI'], + //'so' => ['name' => 'Somali', 'script' => 'Latn', 'native' => 'Soomaali', 'regional' => 'so_SO'], + //'sr-Latn' => ['name' => 'Serbian (Latin)', 'script' => 'Latn', 'native' => 'Srpski', 'regional' => 'sr_RS'], + //'sh' => ['name' => 'Serbo-Croatian', 'script' => 'Latn', 'native' => 'srpskohrvatski', 'regional' => ''], + //'fi' => ['name' => 'Finnish', 'script' => 'Latn', 'native' => 'suomi', 'regional' => 'fi_FI'], + //'sv' => ['name' => 'Swedish', 'script' => 'Latn', 'native' => 'svenska', 'regional' => 'sv_SE'], + //'sg' => ['name' => 'Sango', 'script' => 'Latn', 'native' => 'Sängö', 'regional' => ''], + //'tl' => ['name' => 'Tagalog', 'script' => 'Latn', 'native' => 'Tagalog', 'regional' => 'tl_PH'], + //'tzm-Latn' => ['name' => 'Central Atlas Tamazight (Latin)', 'script' => 'Latn', 'native' => 'Tamazight', 'regional' => ''], + //'kab' => ['name' => 'Kabyle', 'script' => 'Latn', 'native' => 'Taqbaylit', 'regional' => 'kab_DZ'], + //'twq' => ['name' => 'Tasawaq', 'script' => 'Latn', 'native' => 'Tasawaq senni', 'regional' => ''], + //'shi' => ['name' => 'Tachelhit (Latin)', 'script' => 'Latn', 'native' => 'Tashelhit', 'regional' => ''], + //'nus' => ['name' => 'Nuer', 'script' => 'Latn', 'native' => 'Thok Nath', 'regional' => ''], + //'vi' => ['name' => 'Vietnamese', 'script' => 'Latn', 'native' => 'Tiếng Việt', 'regional' => 'vi_VN'], + //'tg-Latn' => ['name' => 'Tajik (Latin)', 'script' => 'Latn', 'native' => 'tojikī', 'regional' => 'tg_TJ'], + //'lu' => ['name' => 'Luba-Katanga', 'script' => 'Latn', 'native' => 'Tshiluba', 'regional' => 've_ZA'], + //'ve' => ['name' => 'Venda', 'script' => 'Latn', 'native' => 'Tshivenḓa', 'regional' => ''], + //'tw' => ['name' => 'Twi', 'script' => 'Latn', 'native' => 'Twi', 'regional' => ''], + //'tr' => ['name' => 'Turkish', 'script' => 'Latn', 'native' => 'Türkçe', 'regional' => 'tr_TR'], + //'ale' => ['name' => 'Aleut', 'script' => 'Latn', 'native' => 'Unangax tunuu', 'regional' => ''], + //'ca-valencia' => ['name' => 'Valencian', 'script' => 'Latn', 'native' => 'valencià', 'regional' => ''], + //'vai-Latn' => ['name' => 'Vai (Latin)', 'script' => 'Latn', 'native' => 'Viyamíĩ', 'regional' => ''], + //'vo' => ['name' => 'Volapük', 'script' => 'Latn', 'native' => 'Volapük', 'regional' => ''], + //'fj' => ['name' => 'Fijian', 'script' => 'Latn', 'native' => 'vosa Vakaviti', 'regional' => ''], + //'wa' => ['name' => 'Walloon', 'script' => 'Latn', 'native' => 'Walon', 'regional' => 'wa_BE'], + //'wae' => ['name' => 'Walser', 'script' => 'Latn', 'native' => 'Walser', 'regional' => 'wae_CH'], + //'wen' => ['name' => 'Sorbian', 'script' => 'Latn', 'native' => 'Wendic', 'regional' => ''], + //'wo' => ['name' => 'Wolof', 'script' => 'Latn', 'native' => 'Wolof', 'regional' => 'wo_SN'], + //'ts' => ['name' => 'Tsonga', 'script' => 'Latn', 'native' => 'Xitsonga', 'regional' => 'ts_ZA'], + //'dje' => ['name' => 'Zarma', 'script' => 'Latn', 'native' => 'Zarmaciine', 'regional' => ''], + //'yo' => ['name' => 'Yoruba', 'script' => 'Latn', 'native' => 'Èdè Yorùbá', 'regional' => 'yo_NG'], + // 'de-AT' => ['name' => 'Austrian German', 'script' => 'Latn', 'native' => 'Österreichisches Deutsch', 'regional' => 'de_AT'], + //'is' => ['name' => 'Icelandic', 'script' => 'Latn', 'native' => 'íslenska', 'regional' => 'is_IS'], + //'cs' => ['name' => 'Czech', 'script' => 'Latn', 'native' => 'čeština', 'regional' => 'cs_CZ'], + //'bas' => ['name' => 'Basa', 'script' => 'Latn', 'native' => 'Ɓàsàa', 'regional' => ''], + //'mas' => ['name' => 'Masai', 'script' => 'Latn', 'native' => 'ɔl-Maa', 'regional' => ''], + //'haw' => ['name' => 'Hawaiian', 'script' => 'Latn', 'native' => 'ʻŌlelo Hawaiʻi', 'regional' => ''], + //'el' => ['name' => 'Greek', 'script' => 'Grek', 'native' => 'Ελληνικά', 'regional' => 'el_GR'], + //'uz' => ['name' => 'Uzbek (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Ўзбек', 'regional' => 'uz_UZ'], + //'az-Cyrl' => ['name' => 'Azerbaijani (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Азәрбајҹан', 'regional' => 'uz_UZ'], + //'ab' => ['name' => 'Abkhazian', 'script' => 'Cyrl', 'native' => 'Аҧсуа', 'regional' => ''], + //'os' => ['name' => 'Ossetic', 'script' => 'Cyrl', 'native' => 'Ирон', 'regional' => 'os_RU'], + //'ky' => ['name' => 'Kyrgyz', 'script' => 'Cyrl', 'native' => 'Кыргыз', 'regional' => 'ky_KG'], + //'sr' => ['name' => 'Serbian (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Српски', 'regional' => 'sr_RS'], + //'av' => ['name' => 'Avaric', 'script' => 'Cyrl', 'native' => 'авар мацӀ', 'regional' => ''], + //'ady' => ['name' => 'Adyghe', 'script' => 'Cyrl', 'native' => 'адыгэбзэ', 'regional' => ''], + //'ba' => ['name' => 'Bashkir', 'script' => 'Cyrl', 'native' => 'башҡорт теле', 'regional' => ''], + //'be' => ['name' => 'Belarusian', 'script' => 'Cyrl', 'native' => 'беларуская', 'regional' => 'be_BY'], + //'bg' => ['name' => 'Bulgarian', 'script' => 'Cyrl', 'native' => 'български', 'regional' => 'bg_BG'], + //'kv' => ['name' => 'Komi', 'script' => 'Cyrl', 'native' => 'коми кыв', 'regional' => ''], + //'mk' => ['name' => 'Macedonian', 'script' => 'Cyrl', 'native' => 'македонски', 'regional' => 'mk_MK'], + //'mn' => ['name' => 'Mongolian (Cyrillic)', 'script' => 'Cyrl', 'native' => 'монгол', 'regional' => 'mn_MN'], + //'ce' => ['name' => 'Chechen', 'script' => 'Cyrl', 'native' => 'нохчийн мотт', 'regional' => 'ce_RU'], + //'ru' => ['name' => 'Russian', 'script' => 'Cyrl', 'native' => 'русский', 'regional' => 'ru_RU'], + //'sah' => ['name' => 'Yakut', 'script' => 'Cyrl', 'native' => 'саха тыла', 'regional' => ''], + //'tt' => ['name' => 'Tatar', 'script' => 'Cyrl', 'native' => 'татар теле', 'regional' => 'tt_RU'], + //'tg' => ['name' => 'Tajik (Cyrillic)', 'script' => 'Cyrl', 'native' => 'тоҷикӣ', 'regional' => 'tg_TJ'], + //'tk' => ['name' => 'Turkmen', 'script' => 'Cyrl', 'native' => 'түркменче', 'regional' => 'tk_TM'], + //'uk' => ['name' => 'Ukrainian', 'script' => 'Cyrl', 'native' => 'українська', 'regional' => 'uk_UA'], + //'cv' => ['name' => 'Chuvash', 'script' => 'Cyrl', 'native' => 'чӑваш чӗлхи', 'regional' => 'cv_RU'], + //'cu' => ['name' => 'Church Slavic', 'script' => 'Cyrl', 'native' => 'ѩзыкъ словѣньскъ', 'regional' => ''], + //'kk' => ['name' => 'Kazakh', 'script' => 'Cyrl', 'native' => 'қазақ тілі', 'regional' => 'kk_KZ'], + //'hy' => ['name' => 'Armenian', 'script' => 'Armn', 'native' => 'Հայերեն', 'regional' => 'hy_AM'], + //'yi' => ['name' => 'Yiddish', 'script' => 'Hebr', 'native' => 'ייִדיש', 'regional' => 'yi_US'], + //'he' => ['name' => 'Hebrew', 'script' => 'Hebr', 'native' => 'עברית', 'regional' => 'he_IL'], + //'ug' => ['name' => 'Uyghur', 'script' => 'Arab', 'native' => 'ئۇيغۇرچە', 'regional' => 'ug_CN'], + //'ur' => ['name' => 'Urdu', 'script' => 'Arab', 'native' => 'اردو', 'regional' => 'ur_PK'], + //'ar' => ['name' => 'Arabic', 'script' => 'Arab', 'native' => 'العربية', 'regional' => 'ar_AE'], + //'uz-Arab' => ['name' => 'Uzbek (Arabic)', 'script' => 'Arab', 'native' => 'اۉزبېک', 'regional' => ''], + //'tg-Arab' => ['name' => 'Tajik (Arabic)', 'script' => 'Arab', 'native' => 'تاجیکی', 'regional' => 'tg_TJ'], + //'sd' => ['name' => 'Sindhi', 'script' => 'Arab', 'native' => 'سنڌي', 'regional' => 'sd_IN'], + //'fa' => ['name' => 'Persian', 'script' => 'Arab', 'native' => 'فارسی', 'regional' => 'fa_IR'], + //'pa-Arab' => ['name' => 'Punjabi (Arabic)', 'script' => 'Arab', 'native' => 'پنجاب', 'regional' => 'pa_IN'], + //'ps' => ['name' => 'Pashto', 'script' => 'Arab', 'native' => 'پښتو', 'regional' => 'ps_AF'], + //'ks' => ['name' => 'Kashmiri (Arabic)', 'script' => 'Arab', 'native' => 'کأشُر', 'regional' => 'ks_IN'], + //'ku' => ['name' => 'Kurdish', 'script' => 'Arab', 'native' => 'کوردی', 'regional' => 'ku_TR'], + //'dv' => ['name' => 'Divehi', 'script' => 'Thaa', 'native' => 'ދިވެހިބަސް', 'regional' => 'dv_MV'], + //'ks-Deva' => ['name' => 'Kashmiri (Devaganari)', 'script' => 'Deva', 'native' => 'कॉशुर', 'regional' => 'ks_IN'], + //'kok' => ['name' => 'Konkani', 'script' => 'Deva', 'native' => 'कोंकणी', 'regional' => 'kok_IN'], + //'doi' => ['name' => 'Dogri', 'script' => 'Deva', 'native' => 'डोगरी', 'regional' => 'doi_IN'], + //'ne' => ['name' => 'Nepali', 'script' => 'Deva', 'native' => 'नेपाली', 'regional' => ''], + //'pra' => ['name' => 'Prakrit', 'script' => 'Deva', 'native' => 'प्राकृत', 'regional' => ''], + //'brx' => ['name' => 'Bodo', 'script' => 'Deva', 'native' => 'बड़ो', 'regional' => 'brx_IN'], + //'bra' => ['name' => 'Braj', 'script' => 'Deva', 'native' => 'ब्रज भाषा', 'regional' => ''], + //'mr' => ['name' => 'Marathi', 'script' => 'Deva', 'native' => 'मराठी', 'regional' => 'mr_IN'], + //'mai' => ['name' => 'Maithili', 'script' => 'Tirh', 'native' => 'मैथिली', 'regional' => 'mai_IN'], + //'raj' => ['name' => 'Rajasthani', 'script' => 'Deva', 'native' => 'राजस्थानी', 'regional' => ''], + //'sa' => ['name' => 'Sanskrit', 'script' => 'Deva', 'native' => 'संस्कृतम्', 'regional' => 'sa_IN'], + //'hi' => ['name' => 'Hindi', 'script' => 'Deva', 'native' => 'हिन्दी', 'regional' => 'hi_IN'], + //'as' => ['name' => 'Assamese', 'script' => 'Beng', 'native' => 'অসমীয়া', 'regional' => 'as_IN'], + //'bn' => ['name' => 'Bengali', 'script' => 'Beng', 'native' => 'বাংলা', 'regional' => 'bn_BD'], + //'mni' => ['name' => 'Manipuri', 'script' => 'Beng', 'native' => 'মৈতৈ', 'regional' => 'mni_IN'], + //'pa' => ['name' => 'Punjabi (Gurmukhi)', 'script' => 'Guru', 'native' => 'ਪੰਜਾਬੀ', 'regional' => 'pa_IN'], + //'gu' => ['name' => 'Gujarati', 'script' => 'Gujr', 'native' => 'ગુજરાતી', 'regional' => 'gu_IN'], + //'or' => ['name' => 'Oriya', 'script' => 'Orya', 'native' => 'ଓଡ଼ିଆ', 'regional' => 'or_IN'], + //'ta' => ['name' => 'Tamil', 'script' => 'Taml', 'native' => 'தமிழ்', 'regional' => 'ta_IN'], + //'te' => ['name' => 'Telugu', 'script' => 'Telu', 'native' => 'తెలుగు', 'regional' => 'te_IN'], + //'kn' => ['name' => 'Kannada', 'script' => 'Knda', 'native' => 'ಕನ್ನಡ', 'regional' => 'kn_IN'], + //'ml' => ['name' => 'Malayalam', 'script' => 'Mlym', 'native' => 'മലയാളം', 'regional' => 'ml_IN'], + //'si' => ['name' => 'Sinhala', 'script' => 'Sinh', 'native' => 'සිංහල', 'regional' => 'si_LK'], + //'th' => ['name' => 'Thai', 'script' => 'Thai', 'native' => 'ไทย', 'regional' => 'th_TH'], + //'lo' => ['name' => 'Lao', 'script' => 'Laoo', 'native' => 'ລາວ', 'regional' => 'lo_LA'], + //'bo' => ['name' => 'Tibetan', 'script' => 'Tibt', 'native' => 'པོད་སྐད་', 'regional' => 'bo_IN'], + //'dz' => ['name' => 'Dzongkha', 'script' => 'Tibt', 'native' => 'རྫོང་ཁ', 'regional' => 'dz_BT'], + //'my' => ['name' => 'Burmese', 'script' => 'Mymr', 'native' => 'မြန်မာဘာသာ', 'regional' => 'my_MM'], + //'ka' => ['name' => 'Georgian', 'script' => 'Geor', 'native' => 'ქართული', 'regional' => 'ka_GE'], + //'byn' => ['name' => 'Blin', 'script' => 'Ethi', 'native' => 'ብሊን', 'regional' => 'byn_ER'], + //'tig' => ['name' => 'Tigre', 'script' => 'Ethi', 'native' => 'ትግረ', 'regional' => 'tig_ER'], + //'ti' => ['name' => 'Tigrinya', 'script' => 'Ethi', 'native' => 'ትግርኛ', 'regional' => 'ti_ET'], + //'am' => ['name' => 'Amharic', 'script' => 'Ethi', 'native' => 'አማርኛ', 'regional' => 'am_ET'], + //'wal' => ['name' => 'Wolaytta', 'script' => 'Ethi', 'native' => 'ወላይታቱ', 'regional' => 'wal_ET'], + //'chr' => ['name' => 'Cherokee', 'script' => 'Cher', 'native' => 'ᏣᎳᎩ', 'regional' => ''], + //'iu' => ['name' => 'Inuktitut (Canadian Aboriginal Syllabics)', 'script' => 'Cans', 'native' => 'ᐃᓄᒃᑎᑐᑦ', 'regional' => 'iu_CA'], + //'oj' => ['name' => 'Ojibwa', 'script' => 'Cans', 'native' => 'ᐊᓂᔑᓈᐯᒧᐎᓐ', 'regional' => ''], + //'cr' => ['name' => 'Cree', 'script' => 'Cans', 'native' => 'ᓀᐦᐃᔭᐍᐏᐣ', 'regional' => ''], + //'km' => ['name' => 'Khmer', 'script' => 'Khmr', 'native' => 'ភាសាខ្មែរ', 'regional' => 'km_KH'], + //'mn-Mong' => ['name' => 'Mongolian (Mongolian)', 'script' => 'Mong', 'native' => 'ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ', 'regional' => 'mn_MN'], + //'shi-Tfng' => ['name' => 'Tachelhit (Tifinagh)', 'script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''], + //'tzm' => ['name' => 'Central Atlas Tamazight (Tifinagh)','script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''], + //'yue' => ['name' => 'Yue', 'script' => 'Hant', 'native' => '廣州話', 'regional' => 'yue_HK'], + //'ja' => ['name' => 'Japanese', 'script' => 'Jpan', 'native' => '日本語', 'regional' => 'ja_JP'], + //'zh' => ['name' => 'Chinese (Simplified)', 'script' => 'Hans', 'native' => '简体中文', 'regional' => 'zh_CN'], + //'zh-Hant' => ['name' => 'Chinese (Traditional)', 'script' => 'Hant', 'native' => '繁體中文', 'regional' => 'zh_CN'], + //'ii' => ['name' => 'Sichuan Yi', 'script' => 'Yiii', 'native' => 'ꆈꌠꉙ', 'regional' => ''], + //'vai' => ['name' => 'Vai (Vai)', 'script' => 'Vaii', 'native' => 'ꕙꔤ', 'regional' => ''], + //'jv-Java' => ['name' => 'Javanese (Javanese)', 'script' => 'Java', 'native' => 'ꦧꦱꦗꦮ', 'regional' => ''], + //'ko' => ['name' => 'Korean', 'script' => 'Hang', 'native' => '한국어', 'regional' => 'ko_KR'], + ], + // @phpcs:enable + + // Requires middleware `LaravelSessionRedirect.php`. + // + // Automatically determine locale from browser + // (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) + // on first call if it's not defined in the URL. Redirect user to computed localized url. + // For example, if users browser language is `de`, and `de` is active in the array `supportedLocales`, + // the `/about` would be redirected to `/de/about`. + // + // The locale will be stored in session and only be computed from browser + // again if the session expires. + // + // If false, system will take app.php locale attribute. + 'useAcceptLanguageHeader' => false, + + // If `hideDefaultLocaleInURL` is true, then a url without locale + // is identical with the same url with default locale. + // For example, if `en` is default locale, then `/en/about` and `/about` + // would be identical. + // + // If in addition the middleware `LaravelLocalizationRedirectFilter` is active, then + // every url with default locale is redirected to url without locale. + // For example, `/en/about` would be redirected to `/about`. + // It is recommended to use `hideDefaultLocaleInURL` only in + // combination with the middleware `LaravelLocalizationRedirectFilter` + // to avoid duplicate content (SEO). + // + // If `useAcceptLanguageHeader` is true, then the first time + // the locale will be determined from browser and redirect to that language. + // After that, `hideDefaultLocaleInURL` behaves as usual. + 'hideDefaultLocaleInURL' => true, + + // If you want to display the locales in particular order in the language selector you should write the order here. + // CAUTION: Please consider using the appropriate locale code otherwise it will not work + // Example: 'localesOrder' => ['es','en']. + 'localesOrder' => ['fr', 'en'], + + // If you want to use custom language URL segments like 'at' instead of 'de-AT', you can map them to allow the + // LanguageNegotiator to assign the desired locales based on HTTP Accept Language Header. For example, if you want + // to use 'at' instead of 'de-AT', you would map 'de-AT' to 'at' (ie. ['de-AT' => 'at']). + 'localesMapping' => [], + + // Locale suffix for LC_TIME and LC_MONETARY + // Defaults to most common ".UTF-8". Set to blank on Windows systems, change to ".utf8" on CentOS and similar. + 'utf8suffix' => env('LARAVELLOCALIZATION_UTF8SUFFIX', '.UTF-8'), + + // URLs which should not be processed, e.g. '/nova', '/nova/*', '/nova-api/*' or specific application URLs + // Defaults to []. + 'urlsIgnored' => ['/skipped'], + + 'httpMethodsIgnored' => ['POST', 'PUT', 'PATCH', 'DELETE'], +]; diff --git a/config/logging.php b/config/logging.php index a94301e..eaa3ced 100644 --- a/config/logging.php +++ b/config/logging.php @@ -3,57 +3,58 @@ use Monolog\Handler\NullHandler; use Monolog\Handler\StreamHandler; use Monolog\Handler\SyslogUdpHandler; +use Monolog\Processor\PsrLogMessageProcessor; return [ /* - |-------------------------------------------------------------------------- - | Default Log Channel - |-------------------------------------------------------------------------- - | - | This option defines the default log channel that gets used when writing - | messages to the logs. The name specified in this option should match - | one of the channels defined in the "channels" configuration array. - | - */ + *-------------------------------------------------------------------------- + * Default Log Channel + *-------------------------------------------------------------------------- + * + * This option defines the default log channel that is utilized to write + * messages to your logs. The value provided here should match one of + * the channels present in the list of "channels" configured below. + * + */ 'default' => env('LOG_CHANNEL', 'stack'), /* - |-------------------------------------------------------------------------- - | Deprecations Log Channel - |-------------------------------------------------------------------------- - | - | This option controls the log channel that should be used to log warnings - | regarding deprecated PHP and library features. This allows you to get - | your application ready for upcoming major versions of dependencies. - | - */ + *-------------------------------------------------------------------------- + * Deprecations Log Channel + *-------------------------------------------------------------------------- + * + * This option controls the log channel that should be used to log warnings + * regarding deprecated PHP and library features. This allows you to get + * your application ready for upcoming major versions of dependencies. + * + */ 'deprecations' => [ 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), - 'trace' => false, + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), ], /* - |-------------------------------------------------------------------------- - | Log Channels - |-------------------------------------------------------------------------- - | - | Here you may configure the log channels for your application. Out of - | the box, Laravel uses the Monolog PHP logging library. This gives - | you a variety of powerful log handlers / formatters to utilize. - | - | Available Drivers: "single", "daily", "slack", "syslog", - | "errorlog", "monolog", - | "custom", "stack" - | - */ + *-------------------------------------------------------------------------- + * Log Channels + *-------------------------------------------------------------------------- + * + * Here you may configure the log channels for your application. Laravel + * utilizes the Monolog PHP logging library, which includes a variety + * of powerful log handlers and formatters that you're free to use. + * + * Available drivers: "single", "daily", "slack", "syslog", + * "errorlog", "monolog", "custom", "stack" + * + */ 'channels' => [ + 'stack' => [ 'driver' => 'stack', - 'channels' => ['single'], + 'channels' => explode(',', (string) env('LOG_STACK', 'single')), 'ignore_exceptions' => false, ], @@ -68,15 +69,15 @@ return [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), - 'days' => 14, + 'days' => env('LOG_DAILY_DAYS', 14), 'replace_placeholders' => true, ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), - 'username' => 'Laravel Log', - 'emoji' => ':boom:', + 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), 'level' => env('LOG_LEVEL', 'critical'), 'replace_placeholders' => true, ], @@ -97,17 +98,17 @@ return [ 'driver' => 'monolog', 'level' => env('LOG_LEVEL', 'debug'), 'handler' => StreamHandler::class, - 'formatter' => env('LOG_STDERR_FORMATTER'), - 'with' => [ + 'handler_with' => [ 'stream' => 'php://stderr', ], + 'formatter' => env('LOG_STDERR_FORMATTER'), 'processors' => [PsrLogMessageProcessor::class], ], 'syslog' => [ 'driver' => 'syslog', 'level' => env('LOG_LEVEL', 'debug'), - 'facility' => LOG_USER, + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), 'replace_placeholders' => true, ], diff --git a/config/macroschedule.php b/config/macroschedule.php deleted file mode 100644 index 54f70e5..0000000 --- a/config/macroschedule.php +++ /dev/null @@ -1,8 +0,0 @@ - 3, - 'totalAvailableDevs' => 6, - // * En pourcentage - 'loadDevThreshold' => 0.5, -]; diff --git a/config/mail.php b/config/mail.php index 030c464..dc53168 100644 --- a/config/mail.php +++ b/config/mail.php @@ -3,63 +3,67 @@ return [ /* - |-------------------------------------------------------------------------- - | Default Mailer - |-------------------------------------------------------------------------- - | - | This option controls the default mailer that is used to send any email - | messages sent by your application. Alternative mailers may be setup - | and used as needed; however, this mailer will be used by default. - | - */ + *-------------------------------------------------------------------------- + * Default Mailer + *-------------------------------------------------------------------------- + * + * This option controls the default mailer that is used to send all email + * messages unless another mailer is explicitly specified when sending + * the message. All additional mailers can be configured within the + * "mailers" array. Examples of each type of mailer are provided. + * + */ - 'default' => env('MAIL_MAILER', 'smtp'), - - // * Mail admin - 'MAIL_ADMIN' => env('MAIL_ADMIN', 'digital@ldc.fr'), + 'default' => env('MAIL_MAILER', 'log'), /* - |-------------------------------------------------------------------------- - | Mailer Configurations - |-------------------------------------------------------------------------- - | - | Here you may configure all of the mailers used by your application plus - | their respective settings. Several examples have been configured for - | you and you are free to add your own as your application requires. - | - | Laravel supports a variety of mail "transport" drivers to be used while - | sending an e-mail. You will specify which one you are using for your - | mailers below. You are free to add additional mailers as required. - | - | Supported: "smtp", "sendmail", "mailgun", "ses", - | "postmark", "log", "array" - | - */ + *-------------------------------------------------------------------------- + * Mailer Configurations + *-------------------------------------------------------------------------- + * + * Here you may configure all of the mailers used by your application plus + * their respective settings. Several examples have been configured for + * you and you are free to add your own as your application requires. + * + * Laravel supports a variety of mail "transport" drivers that can be used + * when delivering an email. You may specify which one you're using for + * your mailers below. You may also add additional mailers if needed. + * + * Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + * "postmark", "resend", "log", "array", + * "failover", "roundrobin" + * + */ 'mailers' => [ + 'smtp' => [ 'transport' => 'smtp', - 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), - 'port' => env('MAIL_PORT', 587), - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, - 'local_domain' => env('MAIL_EHLO_DOMAIN'), + 'local_domain' => env( + 'MAIL_EHLO_DOMAIN', + parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST) + ), ], 'ses' => [ 'transport' => 'ses', ], - 'mailgun' => [ - 'transport' => 'mailgun', - ], - 'postmark' => [ 'transport' => 'postmark', ], + 'resend' => [ + 'transport' => 'resend', + ], + 'sendmail' => [ 'transport' => 'sendmail', 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), @@ -80,46 +84,34 @@ return [ 'smtp', 'log', ], + 'retry_after' => 60, ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + 'retry_after' => 60, + ], + ], /* - |-------------------------------------------------------------------------- - | Global "From" Address - |-------------------------------------------------------------------------- - | - | You may wish for all e-mails sent by your application to be sent from - | the same address. Here, you may specify a name and address that is - | used globally for all e-mails that are sent by your application. - | - */ + *-------------------------------------------------------------------------- + * Global "From" Address + *-------------------------------------------------------------------------- + * + * You may wish for all emails sent by your application to be sent from + * the same address. Here you may specify a name and address that is + * used globally for all emails that are sent by your application. + * + */ 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], - 'contactsList' => [ - 'serviceweb' => env('MAIL_LIST_SERVICEWEB', 'digital@ldc.fr') - ], - - /* - |-------------------------------------------------------------------------- - | Markdown Mail Settings - |-------------------------------------------------------------------------- - | - | If you are using Markdown based email rendering, you may configure your - | theme and component paths here, allowing you to customize the design - | of the emails. Or, you may simply stick with the Laravel defaults! - | - */ - - 'markdown' => [ - 'theme' => 'default', - - 'paths' => [ - resource_path('views/vendor/mail'), - ], - ], - ]; diff --git a/config/pagination.php b/config/pagination.php deleted file mode 100644 index 87ad521..0000000 --- a/config/pagination.php +++ /dev/null @@ -1,18 +0,0 @@ - env('DEFAULT_PAGINATION', 12), -]; diff --git a/config/purifier.php b/config/purifier.php deleted file mode 100644 index d74b7a6..0000000 --- a/config/purifier.php +++ /dev/null @@ -1,132 +0,0 @@ -set('Core.Encoding', $this->config->get('purifier.encoding')); - * $config->set('Cache.SerializerPath', $this->config->get('purifier.cachePath')); - * if ( ! $this->config->get('purifier.finalize')) { - * $config->autoFinalize = false; - * } - * $config->load [$this->getConfig()); - * - * You must NOT delete the default settings - * anything in settings should be compacted with params that needed to instance HTMLPurifier_Config. - * - * @link http://htmlpurifier.org/live/configdoc/plain.html - */ - -// phpcs:disable Generic.Files.LineLength.TooLong -return [ - 'encoding' => 'UTF-8', - 'finalize' => true, - 'cachePath' => storage_path('app/purifier'), - 'cacheFileMode' => 0755, - 'settings' => [ - 'default' => [ - 'HTML.SafeIframe' => true, - // * For iframes - 'URI.SafeIframeRegexp' => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/)%", - 'HTML.Doctype' => 'HTML 4.01 Transitional', - // * Legacy filter en full avec safe legacy. - // 'HTML.Allowed' => 'h1[style|id],h2[style|id],h3[style|id],h4[style|id],h5[style|id],h6[style|id],figure[class|style],oembed[url],div[style],b,strong,i,em,u,s,pre,code[class],a[href|title|target|rel|id],ul[style],ol[style],dl[style],li,p[style],br,span[style|class],img[width|height|alt|src|style|class|title],iframe[src|width|height|class|frameborder|style],table[style|align|border|cellspacing|cellpadding|width],thead,tbody,th[colspan|align|valign|style],tr[align|valign|style],td[style|colspan|rowspan|scope|align|valign],hr,dl,dt,mark[class]', - // * Restricted basics. - 'HTML.Allowed' => 'br,p[style],b[style],u[style],i[style],a[href|title|target|rel],strong[style],span[class],ul[style],ol[style],li[style],h2[style],h3[style],h4[style],hr,blockquote[style]', - // * Legacy filter en full avec safe legacy. - // 'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,list-style-type,float,width,height,vertical-align,border,border-color,margin-left', - // * Restricted basics. - 'CSS.AllowedProperties' => 'text-align,margin-left', - 'AutoFormat.AutoParagraph' => false, - 'AutoFormat.RemoveEmpty' => false, - 'AutoFormat.RemoveEmpty.RemoveNbsp' => false, - ], - "youtube" => [ - "HTML.SafeIframe" => 'true', - "URI.SafeIframeRegexp" => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/)%", - ], - 'custom_definition' => [ - 'id' => 'html5-definitions', - 'rev' => 1, - 'debug' => true, - 'elements' => [ - // * http://developers.whatwg.org/sections.html - ['section', 'Block', 'Flow', 'Common'], - ['nav', 'Block', 'Flow', 'Common'], - ['article', 'Block', 'Flow', 'Common'], - ['aside', 'Block', 'Flow', 'Common'], - ['header', 'Block', 'Flow', 'Common'], - ['footer', 'Block', 'Flow', 'Common'], - - // * Content model actually excludes several tags, not modelled here - ['address', 'Block', 'Flow', 'Common'], - ['hgroup', 'Block', 'Required: h1 | h2 | h3 | h4 | h5 | h6', 'Common'], - - // * http://developers.whatwg.org/grouping-content.html - ['figure', 'Block', 'Optional: (figcaption, Flow) | (Flow, figcaption) | Flow', 'Common'], - ['figcaption', 'Inline', 'Flow', 'Common'], - ['oembed', 'Inline', 'Flow', 'Common'], - - // * http://developers.whatwg.org/the-video-element.html#the-video-element - ['video', 'Block', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', [ - 'src' => 'URI', - 'type' => 'Text', - 'width' => 'Length', - 'height' => 'Length', - 'poster' => 'URI', - 'preload' => 'Enum#auto,metadata,none', - 'controls' => 'Bool', - ]], - ['source', 'Block', 'Flow', 'Common', [ - 'src' => 'URI', - 'type' => 'Text', - ]], - - // * http://developers.whatwg.org/text-level-semantics.html - ['s', 'Inline', 'Inline', 'Common'], - ['var', 'Inline', 'Inline', 'Common'], - ['sub', 'Inline', 'Inline', 'Common'], - ['sup', 'Inline', 'Inline', 'Common'], - ['mark', 'Inline', 'Inline', 'Common'], - ['wbr', 'Inline', 'Empty', 'Core'], - - // * http://developers.whatwg.org/edits.html - ['ins', 'Block', 'Flow', 'Common', ['cite' => 'URI', 'datetime' => 'CDATA']], - ['del', 'Block', 'Flow', 'Common', ['cite' => 'URI', 'datetime' => 'CDATA']], - ], - 'attributes' => [ - ['iframe', 'allowfullscreen', 'Bool'], - ['table', 'height', 'Text'], - ['td', 'border', 'Text'], - ['th', 'border', 'Text'], - ['tr', 'width', 'Text'], - ['tr', 'height', 'Text'], - ['tr', 'border', 'Text'], - ['figure', 'class', 'Text'], - ['figure', 'style', 'Text'], - ['oembed', 'url', 'Text'], - ['span', 'style', 'Text'], - ['img', 'style', 'Text'], - ], - ], - 'custom_attributes' => [ - ['a', 'target', 'Enum#_blank,_self,_target,_top'], - ['a', 'id', 'Text'], - ['ol', 'style', 'Text'], - ['figure', 'style', 'Text'], - ['img', 'style', 'Text'], - ['span', 'style', 'Text'], - ['oembed', 'url', 'Text'], - ['h1', 'id', 'Text'], - ['h2', 'id', 'Text'], - ['h3', 'id', 'Text'], - ['h4', 'id', 'Text'], - ['h5', 'id', 'Text'], - ['h6', 'id', 'Text'], - ], - 'custom_elements' => [ - ['u', 'Inline', 'Inline', 'Common'], - ['oembed', 'Inline', 'Inline', 'Common'], - ], - ], -]; diff --git a/config/queue.php b/config/queue.php index f5a66b9..5259aa1 100644 --- a/config/queue.php +++ b/config/queue.php @@ -3,30 +3,31 @@ return [ /* - |-------------------------------------------------------------------------- - | Default Queue Connection Name - |-------------------------------------------------------------------------- - | - | Laravel's queue API supports an assortment of back-ends via a single - | API, giving you convenient access to each back-end using the same - | syntax for every one. Here you may define a default connection. - | - */ + *-------------------------------------------------------------------------- + * Default Queue Connection Name + *-------------------------------------------------------------------------- + * + * Laravel's queue supports a variety of backends via a single, unified + * API, giving you convenient access to each backend using identical + * syntax for each. The default queue connection is defined below. + * + */ - 'default' => env('QUEUE_CONNECTION', 'sync'), + 'default' => env('QUEUE_CONNECTION', 'database'), /* - |-------------------------------------------------------------------------- - | Queue Connections - |-------------------------------------------------------------------------- - | - | Here you may configure the connection information for each server that - | is used by your application. A default configuration has been added - | for each back-end shipped with Laravel. You are free to add more. - | - | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" - | - */ + *-------------------------------------------------------------------------- + * Queue Connections + *-------------------------------------------------------------------------- + * + * Here you may configure the connection options for every queue backend + * used by your application. An example configuration is provided for + * each backend supported by Laravel. You're also free to add more. + * + * Drivers: "sync", "database", "beanstalkd", "sqs", "redis", + * "deferred", "background", "failover", "null" + * + */ 'connections' => [ @@ -36,17 +37,18 @@ return [ 'database' => [ 'driver' => 'database', - 'table' => 'jobs', - 'queue' => 'default', - 'retry_after' => 90, + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), 'after_commit' => false, ], 'beanstalkd' => [ 'driver' => 'beanstalkd', - 'host' => 'localhost', - 'queue' => 'default', - 'retry_after' => 90, + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), 'block_for' => 0, 'after_commit' => false, ], @@ -64,45 +66,63 @@ return [ 'redis' => [ 'driver' => 'redis', - 'connection' => 'default', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 'queue' => env('REDIS_QUEUE', 'default'), - 'retry_after' => 90, + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), 'block_for' => null, 'after_commit' => false, ], + 'deferred' => [ + 'driver' => 'deferred', + ], + + 'background' => [ + 'driver' => 'background', + ], + + 'failover' => [ + 'driver' => 'failover', + 'connections' => [ + 'database', + 'deferred', + ], + ], + ], /* - |-------------------------------------------------------------------------- - | Job Batching - |-------------------------------------------------------------------------- - | - | The following options configure the database and table that store job - | batching information. These options can be updated to any database - | connection and table which has been defined by your application. - | - */ + *-------------------------------------------------------------------------- + * Job Batching + *-------------------------------------------------------------------------- + * + * The following options configure the database and table that store job + * batching information. These options can be updated to any database + * connection and table which has been defined by your application. + * + */ 'batching' => [ - 'database' => env('DB_CONNECTION', 'mysql'), + 'database' => env('DB_CONNECTION', 'sqlite'), 'table' => 'job_batches', ], /* - |-------------------------------------------------------------------------- - | Failed Queue Jobs - |-------------------------------------------------------------------------- - | - | These options configure the behavior of failed queue job logging so you - | can control which database and table are used to store the jobs that - | have failed. You may change them to any database / table you wish. - | - */ + *-------------------------------------------------------------------------- + * Failed Queue Jobs + *-------------------------------------------------------------------------- + * + * These options configure the behavior of failed queue job logging so you + * can control how and where failed jobs are stored. Laravel ships with + * support for storing failed jobs in a simple file or in a database. + * + * Supported drivers: "database-uuids", "dynamodb", "file", "null" + * + */ 'failed' => [ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), - 'database' => env('DB_CONNECTION', 'mysql'), + 'database' => env('DB_CONNECTION', 'sqlite'), 'table' => 'failed_jobs', ], diff --git a/config/saml2.php b/config/saml2.php new file mode 100644 index 0000000..f84b2e4 --- /dev/null +++ b/config/saml2.php @@ -0,0 +1,397 @@ + \Slides\Saml2\Models\Tenant::class, + + /** + *-------------------------------------------------------------------------- + * Use built-in routes + *-------------------------------------------------------------------------- + * + * If "useRoutes" set to true, the package defines five new routes: + * + * Method | URI | Name + * -------|---------------------------------|------------------ + * POST | {routesPrefix}/{uuid}/acs | saml.acs + * GET | {routesPrefix}/{uuid}/login | saml.login + * GET | {routesPrefix}/{uuid}/logout | saml.logout + * GET | {routesPrefix}/{uuid}/metadata | saml.metadata + * GET | {routesPrefix}/{uuid}/sls | saml.sls + * + */ + + 'useRoutes' => true, + + /** + *-------------------------------------------------------------------------- + * Built-in routes prefix + *-------------------------------------------------------------------------- + * + * Here you may define the prefix for built-in routes. + * + */ + + 'routesPrefix' => '/saml2', + + /** + *-------------------------------------------------------------------------- + * Middle groups to use for the SAML routes + *-------------------------------------------------------------------------- + * + * Note, Laravel 5.2 requires a group which includes StartSession + * + */ + + 'routesMiddleware' => ['saml'], + + /** + *-------------------------------------------------------------------------- + * Signature validation + *-------------------------------------------------------------------------- + * + * Set to true if you want to use parameters from $_SERVER to validate the signature. + * + */ + + 'retrieveParametersFromServer' => false, + + /** + *-------------------------------------------------------------------------- + * Login redirection URL. + *-------------------------------------------------------------------------- + * + * The redirection URL after successful login. + * + */ + + 'loginRoute' => '/admin/login', + + /** + *-------------------------------------------------------------------------- + * Logout redirection URL. + *-------------------------------------------------------------------------- + * + * The redirection URL after successful logout. + * + */ + + 'logoutRoute' => '/admin/login', + + /** + *-------------------------------------------------------------------------- + * Login error redirection URL. + *-------------------------------------------------------------------------- + * + * The redirection URL after login failing. + * + */ + + 'errorRoute' => '/admin/login', + + /** + *-------------------------------------------------------------------------- + * Strict mode. + *-------------------------------------------------------------------------- + * + * If 'strict' is True, then the PHP Toolkit will reject unsigned + * or unencrypted messages if it expects them signed or encrypted + * Also will reject the messages if not strictly follow the SAML + * standard: Destination, NameId, Conditions... are validated too. + * + */ + + 'strict' => true, + + /** + *-------------------------------------------------------------------------- + * Debug mode. + *-------------------------------------------------------------------------- + * + * When enabled, errors must be printed. + * + */ + + 'debug' => env('SAML2_DEBUG', env('APP_DEBUG', false)), + + /** + *-------------------------------------------------------------------------- + * Whether to use `X-Forwarded-*` headers to determine port/domain/protocol. + *-------------------------------------------------------------------------- + * + * If 'proxyVars' is True, then the Saml lib will trust proxy headers + * e.g X-Forwarded-Proto / HTTP_X_FORWARDED_PROTO. This is useful if + * your application is running behind a load balancer which terminates SSL. + * + */ + + 'proxyVars' => true, + + /** + *-------------------------------------------------------------------------- + * Service Provider configuration. + *-------------------------------------------------------------------------- + * + * General setting of the service provider. + * + */ + + 'sp' => [ + + /** + *-------------------------------------------------------------------------- + * NameID format. + *-------------------------------------------------------------------------- + * + * Specifies constraints on the name identifier to be used to + * represent the requested subject. + * + */ + + 'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress', + + /** + *-------------------------------------------------------------------------- + * SP Certificates. + *-------------------------------------------------------------------------- + * + * Usually x509cert and privateKey of the SP are provided by files placed at + * the certs folder. But we can also provide them with the following parameters. + * + */ + + 'x509cert' => env('SAML2_SP_CERT_x509', ''), + 'privateKey' => env('SAML2_SP_CERT_PRIVATEKEY', ''), + + /** + *-------------------------------------------------------------------------- + * Identifier (URI) of the SP entity. + *-------------------------------------------------------------------------- + * + * Leave blank to use the 'saml.metadata' route. + * + */ + + 'entityId' => env('SAML2_SP_ENTITYID', ''), + + /** + *-------------------------------------------------------------------------- + * The Assertion Consumer Service (ACS) URL. + *-------------------------------------------------------------------------- + * + * URL Location where the from the IdP will be returned, using HTTP-POST binding. + * Leave blank to use the 'saml.acs' route. + * + */ + + 'assertionConsumerService' => [ + 'url' => '', + ], + + /** + *-------------------------------------------------------------------------- + * The Single Logout Service URL. + *-------------------------------------------------------------------------- + * + * Specifies info about where and how the message MUST be + * returned to the requester, in this case our SP. + * + * URL Location where the from the IdP will be returned, using HTTP-Redirect binding. + * Leave blank to use the 'saml.sls' route. + * + */ + + 'singleLogoutService' => [ + 'url' => '' + ], + ], + + /** + *-------------------------------------------------------------------------- + * OneLogin security settings. + *-------------------------------------------------------------------------- + */ + + 'security' => [ + + 'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256', + 'digestAlgorithm' => 'http://www.w3.org/2001/04/xmlenc#sha256', + + /** + *-------------------------------------------------------------------------- + * NameId encryption + *-------------------------------------------------------------------------- + * + * Indicates that the nameID of the sent by this SP + * will be encrypted. + * + */ + + 'nameIdEncrypted' => true, + + /** + *-------------------------------------------------------------------------- + * AuthnRequest signage + *-------------------------------------------------------------------------- + * + * Indicates whether the messages sent by + * this SP will be signed. The Metadata of the SP will offer this info + * + */ + + 'authnRequestsSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Logout request signage + *-------------------------------------------------------------------------- + * + * Indicates whether the messages sent by this SP + * will be signed. + * + */ + + 'logoutRequestSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Logout response signage + *-------------------------------------------------------------------------- + * + * Indicates whether the messages sent by this SP + * will be signed. + * + */ + + 'logoutResponseSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Whether need to sign metadata. + *-------------------------------------------------------------------------- + * + * The possible values: + * - false + * - true (use certs) + * - array: + * ``` + * [ + * 'keyFileName' => 'metadata.key', + * 'certFileName' => 'metadata.crt' + * ] + * ``` + * + */ + + 'signMetadata' => true, + + /** + *-------------------------------------------------------------------------- + * Requirement to sign messages. + *-------------------------------------------------------------------------- + * + * Indicates a requirement for the , and + * elements received by this SP to be signed. + * + */ + + 'wantMessagesSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Requirement to sign assertion elements. + *-------------------------------------------------------------------------- + * + * Indicates a requirement for the elements received by + * this SP to be signed. + * + */ + + 'wantAssertionsSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Requirement to encrypt NameID. + *-------------------------------------------------------------------------- + * + * Indicates a requirement for the NameID received by this SP to be encrypted. + * + */ + + 'wantNameIdEncrypted' => false, + + /** + *-------------------------------------------------------------------------- + * Authentication context. + *-------------------------------------------------------------------------- + * + * Set to false and no AuthContext will be sent in the AuthNRequest, + * + * Set true or don't present this parameter and you will get an + * AuthContext 'exact' 'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport' + * + * Set an array with the possible auth context values: + * ['urn:oasis:names:tc:SAML:2.0:ac:classes:Password', 'urn:oasis:names:tc:SAML:2.0:ac:classes:X509'] + * + */ + + 'requestedAuthnContext' => true, + ], + + /** + *-------------------------------------------------------------------------- + * Contact information. + *-------------------------------------------------------------------------- + * + * It is recommended to supply a technical and support contacts. + * + */ + + 'contactPerson' => [ + 'technical' => [ + 'givenName' => env('SAML2_CONTACT_TECHNICAL_NAME', env('APP_NAME', 'Technical')), + 'emailAddress' => env('SAML2_CONTACT_TECHNICAL_EMAIL', 'no@reply.com') + ], + 'support' => [ + 'givenName' => env('SAML2_CONTACT_SUPPORT_NAME', env('APP_NAME', 'Support')), + 'emailAddress' => env('SAML2_CONTACT_SUPPORT_EMAIL', 'no@reply.com') + ], + ], + + /** + *-------------------------------------------------------------------------- + * Organization information. + *-------------------------------------------------------------------------- + * + * The info in en_US lang is recommended, add more if required. + * + */ + + 'organization' => [ + 'en-US' => [ + 'name' => env('SAML2_ORGANIZATION_NAME', env('APP_NAME', 'Name')), + 'displayname' => env('SAML2_ORGANIZATION_NAME', env('APP_NAME', 'Name')), + 'url' => env('SAML2_ORGANIZATION_URL', env('APP_URL', 'http://url')) + ], + ], + + /** + * Default tenant UUID. + */ + + 'default_tenant_uuid' => env('SAML2_DEFAULT_TENANT_UUID', null), + + /** + * Target domain. + */ + 'domain' => env('SAML2_DOMAIN', "") +]; diff --git a/config/samlidp.php b/config/samlidp.php deleted file mode 100644 index b26958d..0000000 --- a/config/samlidp.php +++ /dev/null @@ -1,80 +0,0 @@ -url()] = $sp->url(); - $sp_configs[$sp->acsBase64()] = [ - 'destination' => $sp->destination(), - 'logout' => $sp->logout(), - 'certificate' => $sp->certificate() - ]; -} - -return [ - /** - |-------------------------------------------------------------------------- - | SAML idP configuration file - |-------------------------------------------------------------------------- - | - | Use this file to configure the service providers you want to use. - | - */ - // Outputs data to your laravel.log file for debugging. - 'debug' => (bool)env('APP_DEBUG', false), - // Define the email address field name in the users table. - 'email_field' => 'email', - // Define the name field in the users table. - 'name_field' => 'name', - // The URI to your login page. - 'login_uri' => 'login', - // Log out of the IdP after SLO. - 'logout_after_slo' => env('LOGOUT_AFTER_SLO', false), - // The URI to the saml metadata file, this describes your idP. - 'issuer_uri' => 'saml/metadata', - // The certificate. - 'cert' => env('SAMLIDP_CERT'), - // Name of the certificate PEM file, ignored if cert is used. - 'certname' => 'cert.pem', - // The certificate key. - 'key' => env('SAMLIDP_KEY'), - // Name of the certificate key PEM file, ignored if key is used. - 'keyname' => 'key.pem', - // Encrypt requests and responses. - 'encrypt_assertion' => true, - // Make sure messages are signed. - 'messages_signed' => true, - // Defind what digital algorithm you want to use. - 'digest_algorithm' => \RobRichards\XMLSecLibs\XMLSecurityDSig::SHA256, - // List of all service providers. - // 'sp' => [ - // Base64 encoded ACS URL - // 'aHR0cHM6Ly9teWZhY2Vib29rd29ya3BsYWNlLmZhY2Vib29rLmNvbS93b3JrL3NhbWwucGhw' => [ - // Your destination is the ACS URL of the Service Provider - // 'destination' => 'https://myfacebookworkplace.facebook.com/work/saml.php', - // 'logout' => 'https://myfacebookworkplace.facebook.com/work/sls.php', - // SP certificate - // 'certificate' => '', - // Turn off auto appending of the idp query param - // 'query_params' => false, - // Turn off the encryption of the assertion per SP - // 'encrypt_assertion' => false - // ]. - // ],. - 'sp' => $sp_configs, - - // If you need to redirect after SLO depending on SLO initiator - // Key is beginning of HTTP_REFERER value from SERVER, value is redirect path. - 'sp_slo_redirects' => $sp_slo_redirects, - - // All of the Laravel SAML IdP event / listener mappings. - 'events' => [ - 'CodeGreenCreative\SamlIdp\Events\Assertion' => [], - 'Illuminate\Auth\Events\Logout' => ['CodeGreenCreative\SamlIdp\Listeners\SamlLogout'], - 'Illuminate\Auth\Events\Authenticated' => ['CodeGreenCreative\SamlIdp\Listeners\SamlAuthenticated'], - 'Illuminate\Auth\Events\Login' => ['CodeGreenCreative\SamlIdp\Listeners\SamlLogin'], - ], - - // List of guards saml idp will catch Authenticated, Login and Logout events. - 'guards' => ['backend'], -]; diff --git a/config/schedules.php b/config/schedules.php deleted file mode 100644 index 3930479..0000000 --- a/config/schedules.php +++ /dev/null @@ -1,6 +0,0 @@ - 2, - 'daySlots' => 8, -]; diff --git a/config/sentry.php b/config/sentry.php deleted file mode 100644 index 0234010..0000000 --- a/config/sentry.php +++ /dev/null @@ -1,61 +0,0 @@ - env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')), - - // The release version of your application - // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')). - 'release' => env('SENTRY_RELEASE'), - - // When left empty or `null` the Laravel environment will be used. - 'environment' => env('SENTRY_ENVIRONMENT'), - - 'breadcrumbs' => [ - // Capture Laravel logs in breadcrumbs. - 'logs' => true, - - // Capture SQL queries in breadcrumbs. - 'sql_queries' => true, - - // Capture bindings on SQL queries logged in breadcrumbs. - 'sql_bindings' => false, - - // Capture queue job information in breadcrumbs. - 'queue_info' => true, - - // Capture command information in breadcrumbs. - 'command_info' => true, - ], - - 'tracing' => [ - // Trace queue jobs as their own transactions. - 'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', false), - - // Capture queue jobs as spans when executed on the sync driver. - 'queue_jobs' => true, - - // Capture SQL queries as spans. - 'sql_queries' => true, - - // Try to find out where the SQL query originated from and add it to the query spans. - 'sql_origin' => true, - - // Capture views as spans. - 'views' => true, - - // Indicates if the tracing integrations supplied by Sentry should be loaded. - 'default_integrations' => true, - - // Indicates that requests without a matching route should be traced. - 'missing_routes' => false, - ], - - // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send-default-pii - 'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', false), - - // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces-sample-rate - 'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float)env('SENTRY_TRACES_SAMPLE_RATE'), - - 'before_send' => [\App\Lib\Helpers\ExceptionsHelper::class, 'sentryEventHandler'], -]; diff --git a/config/services.php b/config/services.php index 88b9614..db17a96 100644 --- a/config/services.php +++ b/config/services.php @@ -3,26 +3,23 @@ return [ /* - |-------------------------------------------------------------------------- - | Third Party Services - |-------------------------------------------------------------------------- - | - | This file is for storing the credentials for third party services such - | as Mailgun, Postmark, AWS and more. This file provides the de facto - | location for this type of information, allowing packages to have - | a conventional file to locate the various service credentials. - | - */ - - 'mailgun' => [ - 'domain' => env('MAILGUN_DOMAIN'), - 'secret' => env('MAILGUN_SECRET'), - 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), - 'scheme' => 'https', - ], + *-------------------------------------------------------------------------- + * Third Party Services + *-------------------------------------------------------------------------- + * + * This file is for storing the credentials for third party services such + * as Mailgun, Postmark, AWS and more. This file provides the de facto + * location for this type of information, allowing packages to have + * a conventional file to locate the various service credentials. + * + */ 'postmark' => [ - 'token' => env('POSTMARK_TOKEN'), + 'key' => env('POSTMARK_API_KEY'), + ], + + 'resend' => [ + 'key' => env('RESEND_API_KEY'), ], 'ses' => [ @@ -31,4 +28,11 @@ return [ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + ]; diff --git a/config/session.php b/config/session.php index 6f41017..2504484 100644 --- a/config/session.php +++ b/config/session.php @@ -5,197 +5,213 @@ use Illuminate\Support\Str; return [ /* - |-------------------------------------------------------------------------- - | Default Session Driver - |-------------------------------------------------------------------------- - | - | This option controls the default session "driver" that will be used on - | requests. By default, we will use the lightweight native driver but - | you may specify any of the other wonderful drivers provided here. - | - | Supported: "file", "cookie", "database", "apc", - | "memcached", "redis", "dynamodb", "array" - | - */ + *-------------------------------------------------------------------------- + * Default Session Driver + *-------------------------------------------------------------------------- + * + * This option determines the default session driver that is utilized for + * incoming requests. Laravel supports a variety of storage options to + * persist session data. Database storage is a great default choice. + * + * Supported: "file", "cookie", "database", "memcached", + * "redis", "dynamodb", "array" + * + */ - 'driver' => env('SESSION_DRIVER', 'file'), + 'driver' => env('SESSION_DRIVER', 'database'), /* - |-------------------------------------------------------------------------- - | Session Lifetime - |-------------------------------------------------------------------------- - | - | Here you may specify the number of minutes that you wish the session - | to be allowed to remain idle before it expires. If you want them - | to immediately expire on the browser closing, set that option. - | - */ + *-------------------------------------------------------------------------- + * Session Lifetime + *-------------------------------------------------------------------------- + * + * Here you may specify the number of minutes that you wish the session + * to be allowed to remain idle before it expires. If you want them + * to expire immediately when the browser is closed then you may + * indicate that via the expire_on_close configuration option. + * + */ - 'lifetime' => env('SESSION_LIFETIME', 120), + 'lifetime' => (int) env('SESSION_LIFETIME', 120), - 'expire_on_close' => false, + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), /* - |-------------------------------------------------------------------------- - | Session Encryption - |-------------------------------------------------------------------------- - | - | This option allows you to easily specify that all of your session data - | should be encrypted before it is stored. All encryption will be run - | automatically by Laravel and you can use the Session like normal. - | - */ + *-------------------------------------------------------------------------- + * Session Encryption + *-------------------------------------------------------------------------- + * + * This option allows you to easily specify that all of your session data + * should be encrypted before it's stored. All encryption is performed + * automatically by Laravel and you may use the session like normal. + * + */ - 'encrypt' => false, + 'encrypt' => env('SESSION_ENCRYPT', false), /* - |-------------------------------------------------------------------------- - | Session File Location - |-------------------------------------------------------------------------- - | - | When using the native session driver, we need a location where session - | files may be stored. A default has been set for you but a different - | location may be specified. This is only needed for file sessions. - | - */ + *-------------------------------------------------------------------------- + * Session File Location + *-------------------------------------------------------------------------- + * + * When utilizing the "file" session driver, the session files are placed + * on disk. The default storage location is defined here; however, you + * are free to provide another location where they should be stored. + * + */ 'files' => storage_path('framework/sessions'), /* - |-------------------------------------------------------------------------- - | Session Database Connection - |-------------------------------------------------------------------------- - | - | When using the "database" or "redis" session drivers, you may specify a - | connection that should be used to manage these sessions. This should - | correspond to a connection in your database configuration options. - | - */ + *-------------------------------------------------------------------------- + * Session Database Connection + *-------------------------------------------------------------------------- + * + * When using the "database" or "redis" session drivers, you may specify a + * connection that should be used to manage these sessions. This should + * correspond to a connection in your database configuration options. + * + */ 'connection' => env('SESSION_CONNECTION'), /* - |-------------------------------------------------------------------------- - | Session Database Table - |-------------------------------------------------------------------------- - | - | When using the "database" session driver, you may specify the table we - | should use to manage the sessions. Of course, a sensible default is - | provided for you; however, you are free to change this as needed. - | - */ + *-------------------------------------------------------------------------- + * Session Database Table + *-------------------------------------------------------------------------- + * + * When using the "database" session driver, you may specify the table to + * be used to store sessions. Of course, a sensible default is defined + * for you; however, you're welcome to change this to another table. + * + */ - 'table' => 'sessions', + 'table' => env('SESSION_TABLE', 'sessions'), /* - |-------------------------------------------------------------------------- - | Session Cache Store - |-------------------------------------------------------------------------- - | - | While using one of the framework's cache driven session backends you may - | list a cache store that should be used for these sessions. This value - | must match with one of the application's configured cache "stores". - | - | Affects: "apc", "dynamodb", "memcached", "redis" - | - */ + *-------------------------------------------------------------------------- + * Session Cache Store + *-------------------------------------------------------------------------- + * + * When using one of the framework's cache driven session backends, you may + * define the cache store which should be used to store the session data + * between requests. This must match one of your defined cache stores. + * + * Affects: "dynamodb", "memcached", "redis" + * + */ 'store' => env('SESSION_STORE'), /* - |-------------------------------------------------------------------------- - | Session Sweeping Lottery - |-------------------------------------------------------------------------- - | - | Some session drivers must manually sweep their storage location to get - | rid of old sessions from storage. Here are the chances that it will - | happen on a given request. By default, the odds are 2 out of 100. - | - */ + *-------------------------------------------------------------------------- + * Session Sweeping Lottery + *-------------------------------------------------------------------------- + * + * Some session drivers must manually sweep their storage location to get + * rid of old sessions from storage. Here are the chances that it will + * happen on a given request. By default, the odds are 2 out of 100. + * + */ 'lottery' => [2, 100], /* - |-------------------------------------------------------------------------- - | Session Cookie Name - |-------------------------------------------------------------------------- - | - | Here you may change the name of the cookie used to identify a session - | instance by ID. The name specified here will get used every time a - | new session cookie is created by the framework for every driver. - | - */ + *-------------------------------------------------------------------------- + * Session Cookie Name + *-------------------------------------------------------------------------- + * + * Here you may change the name of the session cookie that is created by + * the framework. Typically, you should not need to change this value + * since doing so does not grant a meaningful security improvement. + * + */ 'cookie' => env( 'SESSION_COOKIE', - Str::slug(env('APP_NAME', 'laravel'), '_') . '_session' + Str::slug((string) env('APP_NAME', 'laravel')) . '-session' ), /* - |-------------------------------------------------------------------------- - | Session Cookie Path - |-------------------------------------------------------------------------- - | - | The session cookie path determines the path for which the cookie will - | be regarded as available. Typically, this will be the root path of - | your application but you are free to change this when necessary. - | - */ + *-------------------------------------------------------------------------- + * Session Cookie Path + *-------------------------------------------------------------------------- + * + * The session cookie path determines the path for which the cookie will + * be regarded as available. Typically, this will be the root path of + * your application, but you're free to change this when necessary. + * + */ - 'path' => '/', + 'path' => env('SESSION_PATH', '/'), /* - |-------------------------------------------------------------------------- - | Session Cookie Domain - |-------------------------------------------------------------------------- - | - | Here you may change the domain of the cookie used to identify a session - | in your application. This will determine which domains the cookie is - | available to in your application. A sensible default has been set. - | - */ + *-------------------------------------------------------------------------- + * Session Cookie Domain + *-------------------------------------------------------------------------- + * + * This value determines the domain and subdomains the session cookie is + * available to. By default, the cookie will be available to the root + * domain without subdomains. Typically, this shouldn't be changed. + * + */ 'domain' => env('SESSION_DOMAIN'), /* - |-------------------------------------------------------------------------- - | HTTPS Only Cookies - |-------------------------------------------------------------------------- - | - | By setting this option to true, session cookies will only be sent back - | to the server if the browser has a HTTPS connection. This will keep - | the cookie from being sent to you if it can not be done securely. - | - */ + *-------------------------------------------------------------------------- + * HTTPS Only Cookies + *-------------------------------------------------------------------------- + * + * By setting this option to true, session cookies will only be sent back + * to the server if the browser has a HTTPS connection. This will keep + * the cookie from being sent to you when it can't be done securely. + * + */ 'secure' => env('SESSION_SECURE_COOKIE'), /* - |-------------------------------------------------------------------------- - | HTTP Access Only - |-------------------------------------------------------------------------- - | - | Setting this value to true will prevent JavaScript from accessing the - | value of the cookie and the cookie will only be accessible through - | the HTTP protocol. You are free to modify this option if needed. - | - */ + *-------------------------------------------------------------------------- + * HTTP Access Only + *-------------------------------------------------------------------------- + * + * Setting this value to true will prevent JavaScript from accessing the + * value of the cookie and the cookie will only be accessible through + * the HTTP protocol. It's unlikely you should disable this option. + * + */ - 'http_only' => true, + 'http_only' => env('SESSION_HTTP_ONLY', true), /* - |-------------------------------------------------------------------------- - | Same-Site Cookies - |-------------------------------------------------------------------------- - | - | This option determines how your cookies behave when cross-site requests - | take place, and can be used to mitigate CSRF attacks. By default, we - | will set this value to "lax" since this is a secure default value. - | - | Supported: "lax", "strict", "none", null - | - */ + *-------------------------------------------------------------------------- + * Same-Site Cookies + *-------------------------------------------------------------------------- + * + * This option determines how your cookies behave when cross-site requests + * take place, and can be used to mitigate CSRF attacks. By default, we + * will set this value to "lax" to permit secure cross-site requests. + * + * See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + * + * Supported: "lax", "strict", "none", null + * + */ - 'same_site' => 'lax', + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + *-------------------------------------------------------------------------- + * Partitioned Cookies + *-------------------------------------------------------------------------- + * + * Setting this value to true will tie the cookie to the top-level site for + * a cross-site context. Partitioned cookies are accepted by the browser + * when flagged "secure" and the Same-Site attribute is set to "none". + * + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), ]; diff --git a/config/telescope.php b/config/telescope.php new file mode 100644 index 0000000..3d4c080 --- /dev/null +++ b/config/telescope.php @@ -0,0 +1,184 @@ + env('TELESCOPE_ENABLED', true), + + /** + *-------------------------------------------------------------------------- + * Telescope Domain + *-------------------------------------------------------------------------- + * + * This is the subdomain where Telescope will be accessible from. If the + * setting is null, Telescope will reside under the same domain as the + * application. Otherwise, this value will be used as the subdomain. + * + */ + + 'domain' => env('TELESCOPE_DOMAIN'), + + /** + *-------------------------------------------------------------------------- + * Telescope Path + *-------------------------------------------------------------------------- + * + * This is the URI path where Telescope will be accessible from. Feel free + * to change this path to anything you like. Note that the URI will not + * affect the paths of its internal API that aren't exposed to users. + * + */ + + 'path' => env('TELESCOPE_PATH', 'admin/telescope'), + + /** + *-------------------------------------------------------------------------- + * Telescope Storage Driver + *-------------------------------------------------------------------------- + * + * This configuration options determines the storage driver that will + * be used to store Telescope's data. In addition, you may set any + * custom options as needed by the particular driver you choose. + * + */ + + 'driver' => env('TELESCOPE_DRIVER', 'database'), + + 'storage' => [ + 'database' => [ + 'connection' => env('DB_CONNECTION', 'mysql'), + 'chunk' => 1000, + ], + ], + + /** + *-------------------------------------------------------------------------- + * Telescope Queue + *-------------------------------------------------------------------------- + * + * This configuration options determines the queue connection and queue + * which will be used to process ProcessPendingUpdate jobs. This can + * be changed if you would prefer to use a non-default connection. + * + */ + + 'queue' => [ + 'connection' => env('TELESCOPE_QUEUE_CONNECTION', null), + 'queue' => env('TELESCOPE_QUEUE', null), + ], + + /** + *-------------------------------------------------------------------------- + * Telescope Route Middleware + *-------------------------------------------------------------------------- + * + * These middleware will be assigned to every Telescope route, giving you + * the chance to add your own middleware to this list or change any of + * the existing middleware. Or, you can simply stick with this list. + * + */ + + 'middleware' => [ + Authorize::class, + ], + + /** + *-------------------------------------------------------------------------- + * Allowed / Ignored Paths & Commands + *-------------------------------------------------------------------------- + * + * The following array lists the URI paths and Artisan commands that will + * not be watched by Telescope. In addition to this list, some Laravel + * commands, like migrations and queue commands, are always ignored. + * + */ + + 'only_paths' => [], + + 'ignore_paths' => [ + 'livewire*', + 'nova-api*', + 'pulse*', + ], + + 'ignore_commands' => [], + + /** + *-------------------------------------------------------------------------- + * Telescope Watchers + *-------------------------------------------------------------------------- + * + * The following array lists the "watchers" that will be registered with + * Telescope. The watchers gather the application's profile data when + * a request or task is executed. Feel free to customize this list. + * + */ + + 'watchers' => [ + Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true), + Watchers\CacheWatcher::class => [ + 'enabled' => env('TELESCOPE_CACHE_WATCHER', true), + 'hidden' => [], + ], + Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true), + Watchers\CommandWatcher::class => [ + 'enabled' => env('TELESCOPE_COMMAND_WATCHER', true), + 'ignore' => [], + ], + Watchers\DumpWatcher::class => [ + 'enabled' => env('TELESCOPE_DUMP_WATCHER', true), + 'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false), + ], + Watchers\EventWatcher::class => [ + 'enabled' => env('TELESCOPE_EVENT_WATCHER', true), + 'ignore' => [], + ], + Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true), + Watchers\GateWatcher::class => [ + 'enabled' => env('TELESCOPE_GATE_WATCHER', true), + 'ignore_abilities' => [], + 'ignore_packages' => true, + 'ignore_paths' => [], + ], + Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true), + Watchers\LogWatcher::class => [ + 'enabled' => env('TELESCOPE_LOG_WATCHER', true), + 'level' => 'error', + ], + Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true), + Watchers\ModelWatcher::class => [ + 'enabled' => env('TELESCOPE_MODEL_WATCHER', true), + 'events' => ['eloquent.*'], + 'hydrations' => true, + ], + Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true), + Watchers\QueryWatcher::class => [ + 'enabled' => env('TELESCOPE_QUERY_WATCHER', true), + 'ignore_packages' => true, + 'ignore_paths' => [], + 'slow' => 100, + ], + Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true), + Watchers\RequestWatcher::class => [ + 'enabled' => env('TELESCOPE_REQUEST_WATCHER', true), + 'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64), + 'ignore_http_methods' => [], + 'ignore_status_codes' => [], + ], + Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true), + Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true), + ], +]; diff --git a/config/tickets.php b/config/tickets.php deleted file mode 100644 index 09ddda7..0000000 --- a/config/tickets.php +++ /dev/null @@ -1,9 +0,0 @@ - 37, - 'workedDaysInAWeek' => 5, - 'workingDevsPerWeek' => 2, - 'avgTimeForTicket' => 0.95, -// 0.95 heure -]; diff --git a/config/trustedproxy.php b/config/trustedproxy.php deleted file mode 100644 index ee9fc90..0000000 --- a/config/trustedproxy.php +++ /dev/null @@ -1,52 +0,0 @@ - '*', - - /* - * To trust one or more specific proxies that connect - * directly to your server, use an array or a string separated by comma of IP addresses: - */ - - /* - * Or, to trust all proxies that connect - * directly to your server, use a "*" - */ - - /* - * Which headers to use to detect proxy related data (For, Host, Proto, Port) - * - * Options include: - * - * - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust) - * - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust) - * - Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB (If you are using AWS Elastic Load Balancer) - * - * - 'HEADER_X_FORWARDED_ALL' (use all x-forwarded-* headers to establish trust) - * - 'HEADER_FORWARDED' (use the FORWARDED header to establish trust) - * - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer) - * - * @link https://symfony.com/doc/current/deployment/proxies.html - */ - - 'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_FOR | - Illuminate\Http\Request::HEADER_X_FORWARDED_HOST | - Illuminate\Http\Request::HEADER_X_FORWARDED_PORT | - Illuminate\Http\Request::HEADER_X_FORWARDED_PROTO, - -]; diff --git a/config/view.php b/config/view.php deleted file mode 100644 index d8b71b1..0000000 --- a/config/view.php +++ /dev/null @@ -1,38 +0,0 @@ - [ - resource_path('views'), - // ! for vendor publish (mail notifications par ex) - resource_path('views/vendor'), - ], - - /* - |-------------------------------------------------------------------------- - | Compiled View Path - |-------------------------------------------------------------------------- - | - | This option determines where all the compiled Blade templates will be - | stored for your application. Typically, this is within the storage - | directory. However, as usual, you are free to change this value. - | - */ - - 'compiled' => env( - 'VIEW_COMPILED_PATH', - realpath(storage_path('framework/views')) - ), - -]; diff --git a/database/.gitignore b/database/.gitignore deleted file mode 100644 index 97fc976..0000000 --- a/database/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.sqlite -*.sqlite-journal diff --git a/resources/ts/libs/.gitkeep b/database/factories/.gitkeep similarity index 100% rename from resources/ts/libs/.gitkeep rename to database/factories/.gitkeep diff --git a/database/factories/CompanyFactory.php b/database/factories/CompanyFactory.php deleted file mode 100644 index aefb175..0000000 --- a/database/factories/CompanyFactory.php +++ /dev/null @@ -1,28 +0,0 @@ - $this->faker->name, - ]; - } -} diff --git a/database/factories/InvoiceFactory.php b/database/factories/InvoiceFactory.php deleted file mode 100644 index cb1f232..0000000 --- a/database/factories/InvoiceFactory.php +++ /dev/null @@ -1,141 +0,0 @@ -faker->numberBetween(1, 4); - $type = \collect(TaskTypeEnum::cases())->random(); - $amount = 0; - switch ($type) { - case TaskTypeEnum::web: - $amount = $days * $type->price; - break; - case TaskTypeEnum::seo: - $amount = $days * $type->price; - break; - case TaskTypeEnum::package: - $amount = $days * (\optional(Package::query()->inRandomOrder()->first())->amount ?? - $this->faker->randomFloat(null, 150, 650)); - break; - case TaskTypeEnum::package: - $amount = $days * $this->faker->randomFloat(null, 150, 650); - break; - } - $this->totalDays += $days; - $this->total += $amount; - /** @var \App\Enums\Invoices\TaskTypeEnum */ - $this->tasks[] = \array_merge(Invoice::getTaskStructure(), [ - 'desc' => $this->faker->words(9, true), - 'days' => $days, - 'type' => \collect(TaskTypeEnum::cases())->random()->value, - 'amount' => $amount, - 'package' => 1 - ]); - /** Dates */ - $this->signedDateBoolean = $this->faker->boolean(25); - $this->sentClientDateBoolean = $this->faker->boolean(25); - $this->sentAccountingDateBoolean = $this->faker->boolean(25); - } //end for - } - - /** - * Define the model's default state. - * - * @return array - */ - public function definition() - { - $this->customData(); - return [ - 'firstname' => $this->faker->firstName, - 'lastname' => $this->faker->lastName, - 'object' => $this->faker->words(3, true), - // * constructed object - 'tasks' => $this->tasks, - // * constructed object result - 'total' => $this->total, - // * constructed object result - 'total_days' => $this->totalDays, - 'comment' => $this->faker->text(\rand(20, 40)), - 'show_days' => $this->faker->boolean(75), - 'signed_date' => - $this->signedDateBoolean ? - $this->faker->dateTimeBetween('-1 year', '+1 year') : null, - 'sent_client_date' => - $this->signedDateBoolean && $this->sentClientDateBoolean ? - $this->faker->dateTimeBetween('-1 year', '+1 year') : null, - 'sent_accounting_date' => - $this->signedDateBoolean && $this->sentClientDateBoolean && $this->sentAccountingDateBoolean ? - $this->faker->dateTimeBetween('-1 year', '+1 year') : null, - 'status' => $this->signedDateBoolean && $this->sentClientDateBoolean && $this->sentAccountingDateBoolean ? - InvoiceStatusEnum::archived : InvoiceStatusEnum::opened, - ]; - } -} diff --git a/database/factories/PackageFactory.php b/database/factories/PackageFactory.php deleted file mode 100644 index 85ce43e..0000000 --- a/database/factories/PackageFactory.php +++ /dev/null @@ -1,29 +0,0 @@ - $this->faker->name, - 'amount' => $this->faker->unique()->randomFloat(2, 120, 850) - ]; - } -} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php deleted file mode 100644 index 7b01f11..0000000 --- a/database/factories/UserFactory.php +++ /dev/null @@ -1,34 +0,0 @@ - $this->faker->name, - 'email' => $this->faker->unique()->safeEmail, - 'email_verified_at' => now(), - // * password - 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', - 'remember_token' => Str::random(10), - ]; - } -} diff --git a/database/migrations/.gitkeep b/database/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/migrations/2022_05_24_104346_assign_user_to_tickets.php b/database/migrations/2022_05_24_104346_assign_user_to_tickets.php deleted file mode 100644 index 542f53b..0000000 --- a/database/migrations/2022_05_24_104346_assign_user_to_tickets.php +++ /dev/null @@ -1,38 +0,0 @@ -foreignId('assigned_to') - ->comment('La personne a qui est assigné le ticket.') - ->nullable() - ->after('created_by') - ->constrained('users') - ->nullOnDelete(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropForeign(['assigned_to']); - $table->dropColumn('assigned_to'); - }); - } -} diff --git a/database/migrations/2022_05_24_122728_move_images_to_storage.php b/database/migrations/2022_05_24_122728_move_images_to_storage.php deleted file mode 100644 index c404e2d..0000000 --- a/database/migrations/2022_05_24_122728_move_images_to_storage.php +++ /dev/null @@ -1,59 +0,0 @@ -map(function (Ticket $ticket) { - if ($ticket->file) { - $ticket->file = "storage/{$ticket->file}"; - } - if ($ticket->file2) { - $ticket->file2 = "storage/{$ticket->file2}"; - } - $ticket->saveQuietly(); - }); - Message::all()->map(function (Message $message) { - if ($message->file) { - $message->file = "storage/{$message->file}"; - } - $message->saveQuietly(); - }); - ModelsFile::all()->map(function (ModelsFile $fichier) { - if ($fichier->file) { - $fichier->file = "storage/{$fichier->file}"; - } - $fichier->saveQuietly(); - }); - } //end if - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('storage', function (Blueprint $table) { - }); - } -} diff --git a/database/migrations/2022_05_25_120339_create_labels_table.php b/database/migrations/2022_05_25_120339_create_labels_table.php deleted file mode 100644 index 94e75bb..0000000 --- a/database/migrations/2022_05_25_120339_create_labels_table.php +++ /dev/null @@ -1,44 +0,0 @@ -id(); - $table->string('name')->unique()->comment('Un ou deux mot désignant le label'); - $table->unsignedInteger('color')->comment('Cast HTML color'); - }); - - $defaultLabels = [ - ['name' => 'urgent', 'color' => '#ebb734'], - ['name' => 'bloquant', 'color' => '#851400'] - ]; - collect($defaultLabels)->map(function (array $defaultLabel) { - $label = new Label(); - $label->name = $defaultLabel['name']; - $label->color = $defaultLabel['color']; - $label->saveOrFail(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('labels'); - } -} diff --git a/database/migrations/2022_05_25_121407_create_label_ticket_table.php b/database/migrations/2022_05_25_121407_create_label_ticket_table.php deleted file mode 100644 index 29bd99d..0000000 --- a/database/migrations/2022_05_25_121407_create_label_ticket_table.php +++ /dev/null @@ -1,35 +0,0 @@ -foreignIdFor(Ticket::class) - ->constrained()->cascadeOnDelete(); - $table->foreignIdFor(Label::class) - ->constrained()->cascadeOnDelete(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('label_ticket'); - } -} diff --git a/database/migrations/2022_05_30_091333_create_brands_table.php b/database/migrations/2022_05_30_091333_create_brands_table.php deleted file mode 100644 index 48fa439..0000000 --- a/database/migrations/2022_05_30_091333_create_brands_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id()->comment('Doit correspondre aux ids marques de la CRM'); - - $table->string('name')->comment('Nom de la marque'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('brands'); - } -} diff --git a/database/migrations/2022_05_30_091340_add_brand_id_to_sites.php b/database/migrations/2022_05_30_091340_add_brand_id_to_sites.php deleted file mode 100644 index 8dfd1f2..0000000 --- a/database/migrations/2022_05_30_091340_add_brand_id_to_sites.php +++ /dev/null @@ -1,38 +0,0 @@ -foreignIdFor(Brand::class) - ->nullable() - ->comment('Relation is nullable, since not all site would be affiliate with a brand.') - ->after('todo') - ->constrained(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('sites', function (Blueprint $table) { - $table->dropForeign(['brand_id']); - $table->dropColumn('brand_id'); - }); - } -} diff --git a/database/migrations/2022_05_30_091401_create_credit_accounts_table.php b/database/migrations/2022_05_30_091401_create_credit_accounts_table.php deleted file mode 100644 index eb4e732..0000000 --- a/database/migrations/2022_05_30_091401_create_credit_accounts_table.php +++ /dev/null @@ -1,41 +0,0 @@ -id(); - - $table->unsignedTinyInteger('type')->comment('Enum Credit\\AccountTypeEnum'); - - $table->string('label')->comment('Custom account label'); - $table->float('balance')->comment('Account balance'); - - $table->foreignIdFor(Brand::class) - ->constrained(); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('credit_accounts'); - } -} diff --git a/database/migrations/2022_05_30_091412_create_credit_logs_table.php b/database/migrations/2022_05_30_091412_create_credit_logs_table.php deleted file mode 100644 index 3caeb08..0000000 --- a/database/migrations/2022_05_30_091412_create_credit_logs_table.php +++ /dev/null @@ -1,39 +0,0 @@ -id(); - - $table->unsignedTinyInteger('type')->comment('Enum Credit\\BalanceOperationEnum'); - $table->unsignedFloat('amount')->comment('Montant de l\'opération'); - - $table->foreignId('credit_account_id') - ->constrained('credit_accounts') - ->cascadeOnDelete(); - - $table->timestamp('created_at'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('credit_logs'); - } -} diff --git a/database/migrations/2022_05_30_091438_create_credit_estimations_table.php b/database/migrations/2022_05_30_091438_create_credit_estimations_table.php deleted file mode 100644 index 6100458..0000000 --- a/database/migrations/2022_05_30_091438_create_credit_estimations_table.php +++ /dev/null @@ -1,53 +0,0 @@ -id(); - - $table->unsignedTinyInteger('status')->default(EstimationStatusEnum::pending) - ->comment('Enum Credit\\EstimationStatusEnum'); - - $table->unsignedFloat('amount')->comment('Estimation amount'); - - $table->foreignIdFor(Ticket::class) - ->constrained(); - - $table->foreignId('credit_account_id') - ->comment('The account to debit.') - ->constrained('credit_accounts'); - $table->foreignId('estimator_id') - ->comment('The person who has done the estimate.') - ->constrained('users'); - $table->foreignId('validator_id') - ->nullable() - ->comment('The person who has validate the estimate.') - ->constrained('users'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('credit_estimations'); - } -} diff --git a/database/migrations/2022_05_30_091453_create_credit_estimation_log_table.php b/database/migrations/2022_05_30_091453_create_credit_estimation_log_table.php deleted file mode 100644 index b9758b5..0000000 --- a/database/migrations/2022_05_30_091453_create_credit_estimation_log_table.php +++ /dev/null @@ -1,40 +0,0 @@ -id(); - - $table->foreignId('credit_log_id') - ->constrained('credit_logs') - ->cascadeOnDelete(); - - $table->foreignId('credit_estimation_id') - ->constrained('credit_estimations') - ->cascadeOnDelete(); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('credit_estimation_log'); - } -} diff --git a/database/migrations/2022_06_15_182442_change_amout_floating_point_on_credit_estimations.php b/database/migrations/2022_06_15_182442_change_amout_floating_point_on_credit_estimations.php deleted file mode 100644 index e60f793..0000000 --- a/database/migrations/2022_06_15_182442_change_amout_floating_point_on_credit_estimations.php +++ /dev/null @@ -1,33 +0,0 @@ -unsignedFloat('amount', 8, 3) - ->comment('Estimation amount')->change(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('credit_estimations', function ($table) { - $table->unsignedFloat('amount') - ->comment('Estimation amount')->change(); - }); - } -} diff --git a/database/migrations/2022_08_22_154457_create_packages_table.php b/database/migrations/2022_08_22_154457_create_packages_table.php deleted file mode 100644 index 65d1bbb..0000000 --- a/database/migrations/2022_08_22_154457_create_packages_table.php +++ /dev/null @@ -1,33 +0,0 @@ -id(); - - $table->string('name'); - $table->unsignedFloat('amount')->comment('The cost per day'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('packages'); - } -} diff --git a/database/migrations/2022_08_23_085321_create_companies_table.php b/database/migrations/2022_08_23_085321_create_companies_table.php deleted file mode 100644 index 1de59aa..0000000 --- a/database/migrations/2022_08_23_085321_create_companies_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - - $table->string('name'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('companies'); - } -} diff --git a/database/migrations/2022_08_23_085833_create_invoices_table.php b/database/migrations/2022_08_23_085833_create_invoices_table.php deleted file mode 100644 index c079c23..0000000 --- a/database/migrations/2022_08_23_085833_create_invoices_table.php +++ /dev/null @@ -1,73 +0,0 @@ -id(); - $table->string('ref') - ->comment(sprintf( - '%s. %s. %s. %s.', - 'The invoice reference built as YYYY_MM_INCREMENT_USER', - 'INCREMENT is the N invoice of the month', - 'USER is the first two letters of the user who last edited the invoice', - 'This field has to generated only on create' - )); - - $table->string('firstname')->comment('The person to which the invoice is addressed.'); - $table->string('lastname')->comment('The person to which the invoice is addressed.'); - - $table->string('object')->comment('The invoice object.'); - - $table->text('tasks') - ->comment( - // phpcs:ignore Generic.Files.LineLength.TooLong - 'A JSON object, each line has to be contructed using these fields description, days, type Invoices\TaskTypeEnum, amount' - ); - - $table->unsignedFloat('total')->comment('The total calculated using all tasks'); - $table->unsignedFloat('total_days')->comment('The total days calculated using all tasks'); - - $table->text('comment')->nullable() - ->comment('Any comment joined to the invoice'); - - $table->boolean('show_days')->comment('Show days on the printed invoice'); - - $table->timestamp('signed_date')->nullable() - ->comment('The date the invoice was signed'); - $table->timestamp('sent_client_date')->nullable() - ->comment('The date the invoice was send to the client'); - $table->timestamp('sent_accounting_date')->nullable() - ->comment('The date the invoice was send to the client'); - - $table->foreignIdFor(Site::class)->constrained(); - $table->foreignIdFor(Company::class)->constrained(); - $table->foreignId('invoiced_to_id') - ->constrained((new Company())->getTable()); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('invoices'); - } -} diff --git a/database/migrations/2022_08_26_112109_change_sites_projets_relation.php b/database/migrations/2022_08_26_112109_change_sites_projets_relation.php deleted file mode 100644 index e2b55d2..0000000 --- a/database/migrations/2022_08_26_112109_change_sites_projets_relation.php +++ /dev/null @@ -1,44 +0,0 @@ -get(); - Schema::table('projects', function (Blueprint $table) { - $table->foreignId('site_id')->nullable()->after('todo'); - }); - collect($project_siteIds)->map(function (object $project_site) { - DB::table('projects')->where('id', $project_site->project_id) - ->update(['site_id' => $project_site->site_id]); - }); - Schema::table('projects', function (Blueprint $table) { - $table->foreignId('site_id')->nullable(false)->change(); - $table->foreign('site_id')->on('sites')->references('id'); - }); - Schema::drop('project_site'); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('projects', function (Blueprint $table) { - $table->dropForeign('admins_post_id_foreign'); - $table->dropColumn('post_id'); - }); - } -} diff --git a/database/migrations/2023_04_06_101917_change_tickets_status.php b/database/migrations/2023_04_06_101917_change_tickets_status.php deleted file mode 100644 index 5b2aa0d..0000000 --- a/database/migrations/2023_04_06_101917_change_tickets_status.php +++ /dev/null @@ -1,49 +0,0 @@ -update(['status' => 3]); - Ticket::where('status', 9) - ->update(['status' => 4]); - Ticket::where('status', 17) - ->update(['status' => 5]); - Ticket::where('status', 12) - ->update(['status' => 6]); - Ticket::where('status', 13) - ->update(['status' => 7]); - Ticket::where('status', 15) - ->update(['status' => 8]); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Ticket::where('status', 3) - ->update(['status' => 10]); - Ticket::where('status', 4) - ->update(['status' => 9]); - Ticket::where('status', 5) - ->update(['status' => 17]); - Ticket::where('status', 6) - ->update(['status' => 12]); - Ticket::where('status', 7) - ->update(['status' => 13]); - Ticket::where('status', 8) - ->update(['status' => 15]); - } -} diff --git a/database/migrations/2023_04_06_122125_add_message_type.php b/database/migrations/2023_04_06_122125_add_message_type.php deleted file mode 100644 index f7233b5..0000000 --- a/database/migrations/2023_04_06_122125_add_message_type.php +++ /dev/null @@ -1,42 +0,0 @@ -unsignedTinyInteger('type') - ->comment('Message Type defined by an enum.') - ->after('message'); - }); - // Set all existing messages as public. - $messages = DB::table('messages')->get(); - collect($messages)->map(function (object $message) { - DB::table('messages')->where('id', $message->id) - ->update(['type' => MessageTypeEnum::public]); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('messages', function (Blueprint $table) { - $table->dropColumn('type'); - }); - } -} diff --git a/database/migrations/2023_04_18_123853_create_dutyhours_table.php b/database/migrations/2023_04_18_123853_create_dutyhours_table.php deleted file mode 100644 index 1d8ccb9..0000000 --- a/database/migrations/2023_04_18_123853_create_dutyhours_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - $table->date('date')->unique(); - $table->string('person'); - $table->string('place'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('dutyhours'); - } -} diff --git a/database/migrations/2023_04_18_150623_create_informations_table.php b/database/migrations/2023_04_18_150623_create_informations_table.php deleted file mode 100644 index ae4165b..0000000 --- a/database/migrations/2023_04_18_150623_create_informations_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - $table->string('title'); - $table->string('message'); - $table->unsignedTinyInteger('type')->comment('Defined by the InfoColorsEnum enum.'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('informations'); - } -} diff --git a/database/migrations/2023_04_19_160127_create_ticket_types_table.php b/database/migrations/2023_04_19_160127_create_ticket_types_table.php deleted file mode 100644 index d77f578..0000000 --- a/database/migrations/2023_04_19_160127_create_ticket_types_table.php +++ /dev/null @@ -1,44 +0,0 @@ -id(); - - $table->unsignedTinyInteger('type')->unique()->comment('TicketType Enum'); - $table->text('template')->comment('Le template du type de ticket'); - - $table->timestamps(); - }); - - foreach (TicketTypeEnum::cases() as $ticketType) { - (new TicketType([ - 'type' => $ticketType, - 'template' => "Cordialement.", - ]))->saveQuietly(); - }; - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('ticket_types'); - } -} diff --git a/database/migrations/2023_08_01_125540_drop_macro_activities_table.php b/database/migrations/2023_08_01_125540_drop_macro_activities_table.php deleted file mode 100644 index 039d4c9..0000000 --- a/database/migrations/2023_08_01_125540_drop_macro_activities_table.php +++ /dev/null @@ -1,39 +0,0 @@ -id(); - $table->dateTime('start')->comment('La date de début de l\'activité.'); - $table->dateTime('end')->comment('La date de fin de l\'activité.'); - $table->unsignedSmallInteger('activity')->comment('Enum MacroSchedule/Activity'); - $table->unsignedSmallInteger('load')->comment('Le nombre d\'hommes qui vont être mobilisé pour la tâche'); - $table->string('comment')->comment('Commentaire sur la tâche, (255 chars max)'); - - $table->foreignIdFor(Project::class)->constrained() - ->onUpdate('cascade')->onDelete('cascade'); - }); - } -}; diff --git a/database/migrations/2023_08_01_130046_drop_macro_markers_table.php b/database/migrations/2023_08_01_130046_drop_macro_markers_table.php deleted file mode 100644 index 98b1d4b..0000000 --- a/database/migrations/2023_08_01_130046_drop_macro_markers_table.php +++ /dev/null @@ -1,37 +0,0 @@ -id(); - - $table->string('label')->comment('Le libellé du marqueur.'); - $table->dateTime('marker')->comment('Le point dans le temps du marqueur.'); - - $table->foreignIdFor(Project::class)->constrained() - ->onUpdate('cascade')->onDelete('cascade'); - }); - } -}; diff --git a/database/migrations/2023_08_08_101912_remove_description_and_todo_fields_in_projects.php b/database/migrations/2023_08_08_101912_remove_description_and_todo_fields_in_projects.php deleted file mode 100644 index 5e31dce..0000000 --- a/database/migrations/2023_08_08_101912_remove_description_and_todo_fields_in_projects.php +++ /dev/null @@ -1,34 +0,0 @@ -dropColumn('description'); - $table->dropColumn('todo'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('projects', function (Blueprint $table) { - $table->text('description')->after('status'); - $table->text('todo')->after('description')->nullable(); - }); - } -}; diff --git a/database/migrations/2023_08_08_122708_drop_data_sites_table.php b/database/migrations/2023_08_08_122708_drop_data_sites_table.php deleted file mode 100644 index a41bbd4..0000000 --- a/database/migrations/2023_08_08_122708_drop_data_sites_table.php +++ /dev/null @@ -1,36 +0,0 @@ -dropColumn('status'); - $table->dropColumn('description'); - $table->dropColumn('todo'); - }); - } - - /** - * Run the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->string('status')->after('name'); - $table->text('description')->after('status'); - $table->text('todo')->nullable()->after('description'); - }); - } -}; diff --git a/database/migrations/2023_08_11_093937_drop_files_table.php b/database/migrations/2023_08_11_093937_drop_files_table.php deleted file mode 100644 index 4871010..0000000 --- a/database/migrations/2023_08_11_093937_drop_files_table.php +++ /dev/null @@ -1,37 +0,0 @@ -id(); - $table->string('name'); - $table->string('uri', 2000)->nullable(); - $table->string('file')->nullable(); - $table->smallInteger('type'); - $table->smallInteger('category'); - $table->morphs('parent'); - $table->timestamps(); - }); - } -}; diff --git a/database/migrations/2023_08_11_094518_drop_logs_table.php b/database/migrations/2023_08_11_094518_drop_logs_table.php deleted file mode 100644 index 44dd7f7..0000000 --- a/database/migrations/2023_08_11_094518_drop_logs_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - $table->text('entry'); - $table->foreignId('user_id')->constrained('users'); - $table->morphs('parent'); - $table->timestamps(); - }); - } -}; diff --git a/database/migrations/2023_08_14_100506_add_status_invoices_table.php b/database/migrations/2023_08_14_100506_add_status_invoices_table.php deleted file mode 100644 index 025fe31..0000000 --- a/database/migrations/2023_08_14_100506_add_status_invoices_table.php +++ /dev/null @@ -1,36 +0,0 @@ -unsignedTinyInteger('status') - ->default(InvoiceStatusEnum::opened->value) - ->comment('Status of the invoice.') - ->after('invoiced_to_id'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('invoices', function (Blueprint $table) { - $table->dropColumn('status'); - }); - } -}; diff --git a/database/migrations/2023_08_14_134026_add_gitlab_id_to_sites_table.php b/database/migrations/2023_08_14_134026_add_gitlab_id_to_sites_table.php deleted file mode 100644 index 43f46f5..0000000 --- a/database/migrations/2023_08_14_134026_add_gitlab_id_to_sites_table.php +++ /dev/null @@ -1,36 +0,0 @@ -unsignedInteger('gitlab_project_id') - ->unique() - ->nullable() - ->comment("ID du dépôt Gitlab") - ->after('name'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->dropColumn('gitlab_project_id'); - }); - } -}; diff --git a/database/migrations/2023_08_14_142748_add_last_activity_tickets_table.php b/database/migrations/2023_08_14_142748_add_last_activity_tickets_table.php deleted file mode 100644 index e4b1128..0000000 --- a/database/migrations/2023_08_14_142748_add_last_activity_tickets_table.php +++ /dev/null @@ -1,43 +0,0 @@ -timestamp('last_activity') - ->default(Carbon::now()) - ->comment('Last activity on the ticket.') - ->after('is_internal'); - }); - Ticket::get()->map(function (object $ticket) { - $lastMessage = $ticket->messages->whereNotNull('user_id')->sortByDesc('updated_at')->first(); - $ticket->last_activity = - $lastMessage->updated_at ?? $ticket->updated_at; - $ticket->saveQuietly(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('last_activity'); - }); - } -}; diff --git a/database/migrations/2023_08_14_151531_add_gitlab_issue_to_tickets_table.php b/database/migrations/2023_08_14_151531_add_gitlab_issue_to_tickets_table.php deleted file mode 100644 index cbb42db..0000000 --- a/database/migrations/2023_08_14_151531_add_gitlab_issue_to_tickets_table.php +++ /dev/null @@ -1,35 +0,0 @@ -string('gitlab_issue') - ->nullable() - ->comment("URL de l'issue Gitlab") - ->after('is_internal'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('gitlab_issue'); - }); - } -}; diff --git a/database/migrations/2023_08_14_171640_add_urls_to_sites_table.php b/database/migrations/2023_08_14_171640_add_urls_to_sites_table.php deleted file mode 100644 index ec5427d..0000000 --- a/database/migrations/2023_08_14_171640_add_urls_to_sites_table.php +++ /dev/null @@ -1,33 +0,0 @@ -string('url_re7')->nullable()->after('name'); - $table->string('url_prod')->nullable()->after('url_re7'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->dropColumn(['url_re7', 'url_prod']); - }); - } -}; diff --git a/database/migrations/2023_08_17_164511_remove_status_from_projects_table.php b/database/migrations/2023_08_17_164511_remove_status_from_projects_table.php deleted file mode 100644 index ee77e6e..0000000 --- a/database/migrations/2023_08_17_164511_remove_status_from_projects_table.php +++ /dev/null @@ -1,32 +0,0 @@ -dropColumn('status'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('projects', function (Blueprint $table) { - $table->unsignedSmallInteger('status')->default(0)->comment('Enum ProjectStatus')->after('name'); - }); - } -}; diff --git a/database/migrations/2023_08_18_091917_drop_schedules_table.php b/database/migrations/2023_08_18_091917_drop_schedules_table.php deleted file mode 100644 index 1920eba..0000000 --- a/database/migrations/2023_08_18_091917_drop_schedules_table.php +++ /dev/null @@ -1,40 +0,0 @@ -id(); - $table->foreignId('user_id')->unique(); - $table->foreign('user_id')->on('sites')->references('id'); - $table->date('date')->unique(); - $table->tinyInteger('slot')->unique(); - $table->string('activity')->nullable(); - $table->text('description'); - $table->bigInteger('id_lie'); - $table->string('model_lie'); - - $table->timestamps(); - }); - } -} diff --git a/database/migrations/2023_11_13_144755_add_title_to_tickets_table.php b/database/migrations/2023_11_13_144755_add_title_to_tickets_table.php deleted file mode 100644 index 548d20d..0000000 --- a/database/migrations/2023_11_13_144755_add_title_to_tickets_table.php +++ /dev/null @@ -1,44 +0,0 @@ -string('title') - ->after('type') - ->comment('Titre du ticket'); - }); - - DB::transaction(function () { - $tickets = Ticket::all(); - foreach ($tickets as $ticket) { - $ticket->title = 'ts-' . $ticket->id; - $ticket->saveQuietly(); - } - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('title'); - }); - } -}; diff --git a/database/migrations/2024_07_19_150414_add_files_to_tickets_table.php b/database/migrations/2024_07_19_150414_add_files_to_tickets_table.php deleted file mode 100644 index a3e3ace..0000000 --- a/database/migrations/2024_07_19_150414_add_files_to_tickets_table.php +++ /dev/null @@ -1,36 +0,0 @@ -string('file3')->after('file2')->nullable()->comment('Pièce jointes n°3'); - $table->string('file4')->after('file3')->nullable()->comment('Pièce jointes n°4'); - $table->string('file5')->after('file4')->nullable()->comment('Pièce jointes n°5'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('file3'); - $table->dropColumn('file4'); - $table->dropColumn('file5'); - }); - } -}; diff --git a/database/migrations/2024_07_19_151553_add_files_to_messages_table.php b/database/migrations/2024_07_19_151553_add_files_to_messages_table.php deleted file mode 100644 index f3ec4c1..0000000 --- a/database/migrations/2024_07_19_151553_add_files_to_messages_table.php +++ /dev/null @@ -1,34 +0,0 @@ -string('file2')->after('file')->nullable()->comment('Pièce jointes n°2'); - $table->string('file3')->after('file2')->nullable()->comment('Pièce jointes n°3'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('messages', function (Blueprint $table) { - $table->dropColumn('file2'); - $table->dropColumn('file3'); - }); - } -}; diff --git a/database/migrations/2025_02_14_122301_rebase_tickets_type.php b/database/migrations/2025_02_14_122301_rebase_tickets_type.php deleted file mode 100644 index 6c8fcf1..0000000 --- a/database/migrations/2025_02_14_122301_rebase_tickets_type.php +++ /dev/null @@ -1,42 +0,0 @@ -get()->map(function (Ticket $model) { - $model->type = $model->getRawOriginal('type') + 1; - $model->saveQuietly(); - }); - TicketType::query()->orderBy('type', 'DESC')->get()->map(function (TicketType $model) { - $model->type = $model->getRawOriginal('type') + 1; - $model->saveQuietly(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Ticket::query()->get()->map(function (Ticket $model) { - $model->type = $model->getRawOriginal('type') - 1; - $model->saveQuietly(); - }); - TicketType::query()->orderBy('type', 'DESC')->get()->map(function (TicketType $model) { - $model->type = $model->getRawOriginal('type') - 1; - $model->saveQuietly(); - }); - } -}; diff --git a/database/migrations/2025_02_19_154440_rebase_tickets_status.php b/database/migrations/2025_02_19_154440_rebase_tickets_status.php deleted file mode 100644 index cc26af3..0000000 --- a/database/migrations/2025_02_19_154440_rebase_tickets_status.php +++ /dev/null @@ -1,33 +0,0 @@ -where('status', '>', 6)->get()->map(function (Ticket $model) { - $model->status = $model->getRawOriginal('status') + 1; - $model->saveQuietly(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Ticket::query()->where('status', '>', 6)->get()->map(function (Ticket $model) { - $model->status = $model->getRawOriginal('status') - 1; - $model->saveQuietly(); - }); - } -}; diff --git a/database/migrations/2025_03_12_102925_change_order_to_tickets.php b/database/migrations/2025_03_12_102925_change_order_to_tickets.php deleted file mode 100644 index 3483b0a..0000000 --- a/database/migrations/2025_03_12_102925_change_order_to_tickets.php +++ /dev/null @@ -1,40 +0,0 @@ -integer('order')->after('status')->comment('Ticket order.'); - }); - - Site::query()->get()->map(function ($site) { - $site->tickets->map(function ($ticket, $ticketIndex) { - $ticket->order = $ticketIndex + 1; - $ticket->saveQuietly(); - }); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('order'); - }); - } -}; diff --git a/database/migrations/2025_03_13_094420_add_mep_date_on_tickets.php b/database/migrations/2025_03_13_094420_add_mep_date_on_tickets.php deleted file mode 100644 index deb9c5b..0000000 --- a/database/migrations/2025_03_13_094420_add_mep_date_on_tickets.php +++ /dev/null @@ -1,32 +0,0 @@ -date('date_mep')->nullable()->after('gitlab_issue')->comment('Date MEP souhaitée'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('date_mep'); - }); - } -}; diff --git a/database/migrations/2025_03_13_151503_tickets_linking.php b/database/migrations/2025_03_13_151503_tickets_linking.php deleted file mode 100644 index 801bbb3..0000000 --- a/database/migrations/2025_03_13_151503_tickets_linking.php +++ /dev/null @@ -1,35 +0,0 @@ -unsignedBigInteger('ticket_id') - ->constrained()->cascadeOnDelete(); - $table->unsignedBigInteger('linked_ticket_id') - ->constrained()->cascadeOnDelete(); - $table->foreign('ticket_id')->references('id')->on('tickets'); - $table->foreign('linked_ticket_id')->references('id')->on('tickets'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::dropIfExists('linked_tickets'); - } -}; diff --git a/database/migrations/2025_04_11_183728_delete_dutyhours_table.php b/database/migrations/2025_04_11_183728_delete_dutyhours_table.php deleted file mode 100644 index 77d5818..0000000 --- a/database/migrations/2025_04_11_183728_delete_dutyhours_table.php +++ /dev/null @@ -1,30 +0,0 @@ -id(); - $table->date('date')->unique(); - $table->string('person'); - $table->string('place'); - $table->timestamps(); - }); - } -}; diff --git a/database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php b/database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php deleted file mode 100644 index 3712c0d..0000000 --- a/database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php +++ /dev/null @@ -1,38 +0,0 @@ -unsignedBigInteger('project_manager_id') - ->nullable() - ->after('brand_id') - ->comment('Project manager relationship'); - - $table->foreign('project_manager_id')->references('id')->on('users')->nullOnDelete(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->dropForeign(['project_manager_id']); - $table->dropColumn('project_manager_id'); - }); - } -}; diff --git a/database/migrations/2025_04_17_162711_add_gitlab_id_to_users_table.php b/database/migrations/2025_04_17_162711_add_gitlab_id_to_users_table.php deleted file mode 100644 index f096889..0000000 --- a/database/migrations/2025_04_17_162711_add_gitlab_id_to_users_table.php +++ /dev/null @@ -1,36 +0,0 @@ -unsignedInteger('gitlab_id') - ->unique() - ->nullable() - ->comment("ID du user Gitlab") - ->after('remember_token'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('users', function (Blueprint $table) { - $table->dropColumn('gitlab_id'); - }); - } -}; diff --git a/database/migrations/2025_06_17_145213_add_deleted_at_to_invoices_table.php b/database/migrations/2025_06_17_145213_add_deleted_at_to_invoices_table.php deleted file mode 100644 index c34330b..0000000 --- a/database/migrations/2025_06_17_145213_add_deleted_at_to_invoices_table.php +++ /dev/null @@ -1,32 +0,0 @@ -softDeletes(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('invoices', function (Blueprint $table) { - $table->dropColumn('deleted_at'); - }); - } -}; diff --git a/database/migrations/2025_06_17_150855_add_deleted_at_to_tickets_table.php b/database/migrations/2025_06_17_150855_add_deleted_at_to_tickets_table.php deleted file mode 100644 index efdad61..0000000 --- a/database/migrations/2025_06_17_150855_add_deleted_at_to_tickets_table.php +++ /dev/null @@ -1,32 +0,0 @@ -softDeletes(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('deleted_at'); - }); - } -}; diff --git a/database/migrations/2025_07_10_103249_add_favourite_site_to_user.php b/database/migrations/2025_07_10_103249_add_favourite_site_to_user.php deleted file mode 100644 index 7eda1af..0000000 --- a/database/migrations/2025_07_10_103249_add_favourite_site_to_user.php +++ /dev/null @@ -1,37 +0,0 @@ -foreignId('favourite_site_id') - ->nullable() - ->after('gitlab_id') - ->constrained('sites') - ->onDelete('set null'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('users', function (Blueprint $table) { - $table->dropForeign(['favourite_site_id']); - $table->dropColumn('favourite_site_id'); - }); - } -}; diff --git a/database/migrations/2025_08_21_120157_delete_projects_table.php b/database/migrations/2025_08_21_120157_delete_projects_table.php deleted file mode 100644 index f784842..0000000 --- a/database/migrations/2025_08_21_120157_delete_projects_table.php +++ /dev/null @@ -1,23 +0,0 @@ -unsignedInteger('gitlab_project_id') - ->unique(false) - ->nullable() - ->change(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->unsignedInteger('gitlab_project_id') - ->unique(true) - ->nullable() - ->change(); - }); - } -}; diff --git a/database/migrations/2025_11_19_142520_reorder_all_tickets.php b/database/migrations/2025_11_19_142520_reorder_all_tickets.php deleted file mode 100644 index 56fb9e2..0000000 --- a/database/migrations/2025_11_19_142520_reorder_all_tickets.php +++ /dev/null @@ -1,36 +0,0 @@ -each(function (Site $site) { - $tickets = $site->tickets()->whereNot('status', TicketStatusEnum::archived)->orderBy('order')->get(); - $order = 1; - foreach ($tickets as $ticket) { - $ticket->order = $order; - $ticket->saveOrFail(); - $order++; - } - }); - Ticket::query()->where('status', TicketStatusEnum::archived)->update([ - 'order' => 0 - ]); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - // Nothing to revert. - } -}; diff --git a/database/migrations/2026_01_02_101346_create_gitlab_projects_table.php b/database/migrations/2026_01_02_101346_create_gitlab_projects_table.php deleted file mode 100644 index 82ce049..0000000 --- a/database/migrations/2026_01_02_101346_create_gitlab_projects_table.php +++ /dev/null @@ -1,31 +0,0 @@ -id(); - $table->string('name')->comment("Gitlab project name"); - $table->string('url')->comment("Gitlab URL"); - $table->boolean('is_archived')->comment("Gitlab archive status"); - $table->integer('gitlab_id')->unique()->comment("Gitlab unique ID"); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_projects'); - } -}; diff --git a/database/migrations/2026_01_02_111055_create_gitlab_issues_table.php b/database/migrations/2026_01_02_111055_create_gitlab_issues_table.php deleted file mode 100644 index c4496f0..0000000 --- a/database/migrations/2026_01_02_111055_create_gitlab_issues_table.php +++ /dev/null @@ -1,42 +0,0 @@ -id(); - $table->string('title')->comment("Gitlab issue title"); - $table->string('url')->comment("Gitlab URL"); - $table->integer('estimate_time')->default(0)->comment("Gitlab issue estimate time in seconds"); - $table->integer('spent_time')->default(0)->comment("Gitlab issue spent time in seconds"); - $table->boolean('is_closed')->comment("Gitlab issue status"); - $table->integer('gitlab_id')->comment("Gitlab issue id"); - $table->integer('gitlab_iid')->comment("Gitlab issue iid in project"); - $table->integer('milestone_iid')->nullable()->comment("Gitlab issue linked milestone iid in project"); - $table->integer('gitlab_project_id')->comment("Gitlab project id"); - $table->date('g_created_at')->comment("Gitlab issue created at"); - $table->date('g_updated_at')->comment("Gitlab issue updated at"); - $table->date('g_closed_at')->nullable()->comment("Gitlab issue closed at"); - $table->date('g_due_date')->nullable()->comment("Gitlab issue due date"); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_issues'); - } -}; - -//"labels" : ["foo", "bar"], \ No newline at end of file diff --git a/database/migrations/2026_01_02_121235_create_gitlab_labels_table.php b/database/migrations/2026_01_02_121235_create_gitlab_labels_table.php deleted file mode 100644 index 8da813b..0000000 --- a/database/migrations/2026_01_02_121235_create_gitlab_labels_table.php +++ /dev/null @@ -1,29 +0,0 @@ -id(); - $table->string('name')->unique()->comment("Label name"); - $table->integer('gitlab_id')->comment("Label Gitlab id"); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_labels'); - } -}; diff --git a/database/migrations/2026_01_02_124727_create_gitlab_milestones_table.php b/database/migrations/2026_01_02_124727_create_gitlab_milestones_table.php deleted file mode 100644 index bc593a0..0000000 --- a/database/migrations/2026_01_02_124727_create_gitlab_milestones_table.php +++ /dev/null @@ -1,37 +0,0 @@ -id(); - $table->string('title')->comment("Milestone title"); - $table->string('url')->comment("Gitlab URL"); - $table->boolean('is_closed')->comment("Gitlab milestone status"); - $table->integer('gitlab_id')->comment("Gitlab milestone id"); - $table->integer('gitlab_iid')->comment("Gitlab milestone iid in project"); - $table->integer('gitlab_project_id')->comment("Gitlab project id"); - $table->date('g_created_at')->comment("Gitlab milestone created at"); - $table->date('g_updated_at')->comment("Gitlab milestone updated at"); - $table->date('g_start_date')->nullable()->comment("Gitlab milestone start date"); - $table->date('g_due_date')->nullable()->comment("Gitlab milestone due date"); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_milestones'); - } -}; diff --git a/database/migrations/2026_01_02_142743_create_pivot_gitlab_issues_labels.php b/database/migrations/2026_01_02_142743_create_pivot_gitlab_issues_labels.php deleted file mode 100644 index 0b7d793..0000000 --- a/database/migrations/2026_01_02_142743_create_pivot_gitlab_issues_labels.php +++ /dev/null @@ -1,30 +0,0 @@ -foreignId('issue_id')->constrained('gitlab_issues')->cascadeOnDelete(); - $table->foreignId('label_id')->constrained('gitlab_labels')->cascadeOnDelete(); - $table->timestamps(); - - $table->primary(['issue_id', 'label_id']); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_issues_labels'); - } -}; diff --git a/database/migrations/2026_02_25_171152_alter_packages_table.php b/database/migrations/2026_02_25_171152_alter_packages_table.php deleted file mode 100644 index 9d534fd..0000000 --- a/database/migrations/2026_02_25_171152_alter_packages_table.php +++ /dev/null @@ -1,28 +0,0 @@ -boolean('published')->after('amount'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('packages', function (Blueprint $table) { - $table->dropColumn('published'); - }); - } -}; diff --git a/database/schema/mysql-schema.dump b/database/schema/mysql-schema.dump deleted file mode 100644 index 92c5495..0000000 --- a/database/schema/mysql-schema.dump +++ /dev/null @@ -1,266 +0,0 @@ -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -DROP TABLE IF EXISTS `files`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `files` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `uri` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `file` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `type` smallint(6) NOT NULL, - `category` smallint(6) NOT NULL, - `parent_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `parent_id` bigint(20) unsigned NOT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `files_parent_type_parent_id_index` (`parent_type`,`parent_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `logs`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `logs` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `entry` text COLLATE utf8mb4_unicode_ci NOT NULL, - `user_id` bigint(20) unsigned NOT NULL, - `parent_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `parent_id` bigint(20) unsigned NOT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `logs_user_id_foreign` (`user_id`), - KEY `logs_parent_type_parent_id_index` (`parent_type`,`parent_id`), - CONSTRAINT `logs_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `macro_activities`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `macro_activities` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `start` datetime NOT NULL COMMENT 'La date de début de l''activité.', - `end` datetime NOT NULL COMMENT 'La date de fin de l''activité.', - `activity` smallint(5) unsigned NOT NULL COMMENT 'Enum MacroSchedule/Activity', - `load` smallint(5) unsigned NOT NULL COMMENT 'Le nombre d''hommes qui vont être mobilisé pour la tâche', - `comment` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Commentaire sur la tâche, (255 chars max)', - `project_id` bigint(20) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `macro_activities_project_id_foreign` (`project_id`), - CONSTRAINT `macro_activities_project_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `macro_markers`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `macro_markers` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `label` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Le libellé du marqueur.', - `marker` datetime NOT NULL COMMENT 'Le point dans le temps du marqueur.', - `project_id` bigint(20) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `macro_markers_project_id_foreign` (`project_id`), - CONSTRAINT `macro_markers_project_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `messages`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `messages` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `ticket_id` bigint(20) unsigned NOT NULL, - `user_id` bigint(20) unsigned DEFAULT NULL, - `message` text COLLATE utf8mb4_unicode_ci NOT NULL, - `file` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `messages_ticket_id_foreign` (`ticket_id`), - KEY `messages_user_id_foreign` (`user_id`), - CONSTRAINT `messages_ticket_id_foreign` FOREIGN KEY (`ticket_id`) REFERENCES `tickets` (`id`), - CONSTRAINT `messages_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `migrations`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `migrations` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `migration` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `batch` int(11) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `password_resets`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `password_resets` ( - `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `token` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `created_at` timestamp NULL DEFAULT NULL, - KEY `password_resets_email_index` (`email`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `project_site`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `project_site` ( - `project_id` bigint(20) unsigned NOT NULL, - `site_id` bigint(20) unsigned NOT NULL, - UNIQUE KEY `project_site_project_id_site_id_unique` (`project_id`,`site_id`), - KEY `project_site_site_id_foreign` (`site_id`), - CONSTRAINT `project_site_project_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE CASCADE, - CONSTRAINT `project_site_site_id_foreign` FOREIGN KEY (`site_id`) REFERENCES `sites` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `projects`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `projects` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `status` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 'Enum ProjectStatus', - `description` text COLLATE utf8mb4_unicode_ci NOT NULL, - `todo` text COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `schedules`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `schedules` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `user_id` bigint(20) unsigned NOT NULL, - `date` date NOT NULL, - `slot` smallint(6) NOT NULL, - `activity` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8mb4_unicode_ci NOT NULL, - `id_lie` bigint(20) DEFAULT NULL, - `model_lie` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `user_day_slot_unique` (`user_id`,`date`,`slot`), - CONSTRAINT `schedules_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `site_user`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `site_user` ( - `site_id` bigint(20) unsigned NOT NULL, - `user_id` bigint(20) unsigned NOT NULL, - UNIQUE KEY `site_user_site_id_user_id_unique` (`site_id`,`user_id`), - KEY `project_user_user_id_foreign` (`user_id`), - CONSTRAINT `project_user_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, - CONSTRAINT `site_user_site_id_foreign` FOREIGN KEY (`site_id`) REFERENCES `sites` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `sites`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `sites` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `status` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `description` text COLLATE utf8mb4_unicode_ci NOT NULL, - `todo` text COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - `deleted_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `subscriptions`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `subscriptions` ( - `ticket_id` bigint(20) unsigned NOT NULL, - `user_id` bigint(20) unsigned NOT NULL, - PRIMARY KEY (`ticket_id`,`user_id`), - KEY `subscriptions_user_id_foreign` (`user_id`), - CONSTRAINT `subscriptions_ticket_id_foreign` FOREIGN KEY (`ticket_id`) REFERENCES `tickets` (`id`), - CONSTRAINT `subscriptions_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `tickets`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `tickets` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `created_by` bigint(20) unsigned NOT NULL, - `site_id` bigint(20) unsigned NOT NULL, - `type` int(11) NOT NULL, - `text` text COLLATE utf8mb4_unicode_ci NOT NULL, - `file` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `file2` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `status` int(11) NOT NULL DEFAULT 1, - `is_internal` tinyint(4) NOT NULL DEFAULT 0, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `tickets_created_by_foreign` (`created_by`), - KEY `tickets_project_id_foreign` (`site_id`), - CONSTRAINT `tickets_created_by_foreign` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`), - CONSTRAINT `tickets_site_id_foreign` FOREIGN KEY (`site_id`) REFERENCES `sites` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `users`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `users` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `role` int(11) NOT NULL DEFAULT 2, - `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - `deleted_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `users_email_unique` (`email`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - -INSERT INTO `migrations` VALUES (1,'2014_10_12_000000_create_users_table',1); -INSERT INTO `migrations` VALUES (2,'2020_11_13_152248_create_projects',1); -INSERT INTO `migrations` VALUES (3,'2020_11_13_152321_create_tickets',1); -INSERT INTO `migrations` VALUES (4,'2020_11_17_140637_update_users',1); -INSERT INTO `migrations` VALUES (5,'2020_11_25_104931_create_messages',2); -INSERT INTO `migrations` VALUES (6,'2020_11_25_141438_alter_tickets',2); -INSERT INTO `migrations` VALUES (7,'2020_11_26_132557_create_subscriptions',3); -INSERT INTO `migrations` VALUES (8,'2021_04_21_132132_update_tickets_status_with_enum_status',4); -INSERT INTO `migrations` VALUES (9,'2021_04_21_132140_update_tickets_status_with_enum_status2',5); -INSERT INTO `migrations` VALUES (10,'2021_04_21_132140_update_tickets_status_with_enum_status3',6); -INSERT INTO `migrations` VALUES (11,'2021_06_17_173912_create_project_user_table',7); -INSERT INTO `migrations` VALUES (12,'2021_06_28_163754_add_soft_delete_on_users',8); -INSERT INTO `migrations` VALUES (13,'2021_06_28_163755_add_soft_delete_on_projects',9); -INSERT INTO `migrations` VALUES (14,'2021_07_23_111336_rename_projects_table_into_sites_table',10); -INSERT INTO `migrations` VALUES (15,'2021_07_23_150120_create_projects_table',11); -INSERT INTO `migrations` VALUES (16,'2021_07_23_152102_create_project_site_table',12); -INSERT INTO `migrations` VALUES (17,'2021_07_23_152810_create_logs_table',13); -INSERT INTO `migrations` VALUES (18,'2021_07_23_153446_create_files_table',14); -INSERT INTO `migrations` VALUES (19,'2021_07_27_144557_add_todo_on_sites_table',15); -INSERT INTO `migrations` VALUES (20,'2021_08_01_140823_create_password_resets_table',16); -INSERT INTO `migrations` VALUES (21,'2021_10_01_090053_create_week_plannings_table',17); -INSERT INTO `migrations` VALUES (22,'2021_12_03_195755_create_schedules_table',18); -INSERT INTO `migrations` VALUES (23,'2022_02_23_121545_add_is_internal_on_tickets_table',19); -INSERT INTO `migrations` VALUES (24,'2022_03_08_101614_migrate_schedules_to_eight_slots_per_day',20); -INSERT INTO `migrations` VALUES (25,'2022_03_15_164122_drop_week_plannings_table',21); -INSERT INTO `migrations` VALUES (26,'2022_04_26_095605_create_markers_table',22); -INSERT INTO `migrations` VALUES (27,'2022_04_26_095636_create_activities_table',23); -INSERT INTO `migrations` VALUES (28,'2022_04_26_102155_change_status_on_projects_table',24); diff --git a/database/seeders/Classic/.gitkeep b/database/seeders/Classic/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index cac798a..e29c5fc 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -3,6 +3,8 @@ namespace Database\Seeders; use Illuminate\Database\Seeder; +use Uwil\LaravelCommon\Enums\SeederCategoryEnum; +use Uwil\LaravelCommon\Support\SeederRegistry; class DatabaseSeeder extends Seeder { @@ -11,7 +13,8 @@ class DatabaseSeeder extends Seeder * * @return void */ - public function run() + public function run(): void { + SeederRegistry::runAll(SeederCategoryEnum::classic); } } diff --git a/database/seeders/InvoicingSeeder.php b/database/seeders/InvoicingSeeder.php deleted file mode 100644 index 166c42e..0000000 --- a/database/seeders/InvoicingSeeder.php +++ /dev/null @@ -1,54 +0,0 @@ -getTable())->truncate(); - - /** Reset all packages (forfaits) */ - Package::all()->map(function (Package $model) { - $model->deleteOrFail(); - }); - Package::factory(6)->create(); - - /** Reset all companies */ - Company::all()->map(function (Company $model) { - $model->deleteOrFail(); - }); - Company::factory(6)->create(); - - Invoice::factory(45)->make()->each(function (Invoice $model) { - $model->ref = \sprintf( - '%s_%s_%s', - Carbon::now()->isoFormat('YYYY-MM'), - Str::padLeft((Invoice::whereYear('created_at', Carbon::now()->isoFormat('YYYY')) - ->whereMonth('created_at', Carbon::now()->isoFormat('MM')) - ->count() + 1) ?: 1, 4, '0'), - Str::substr(Str::upper(Str::slug(User::query()->inRandomOrder()->first()->name)), 0, 1) - ); - $model->site()->associate(Site::query()->inRandomOrder()->first()); - $model->company()->associate(Company::query()->inRandomOrder()->first()); - $model->companyInvoiced()->associate(Company::query()->inRandomOrder()->first()); - $model->saveQuietly(); - }); - } -} diff --git a/database/seeders/Mandatory/.gitkeep b/database/seeders/Mandatory/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/seeders/MandatorySeeder.php b/database/seeders/MandatorySeeder.php new file mode 100644 index 0000000..0c19304 --- /dev/null +++ b/database/seeders/MandatorySeeder.php @@ -0,0 +1,20 @@ + "Tableau de bord", +]; diff --git a/lang/de/enums.php b/lang/de/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/de/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/de/errors.php b/lang/de/errors.php new file mode 100644 index 0000000..b2f9363 --- /dev/null +++ b/lang/de/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Ungültige Anfrage", + "description" => "Der Server konnte Ihre Anfrage nicht verstehen. Bitte überprüfen Sie sie und versuchen Sie es erneut.", + ], + "401" => [ + "title" => "Nicht autorisiert", + "description" => "Sie müssen angemeldet sein, um auf diese Seite zuzugreifen.", + ], + "403" => [ + "title" => "Zugriff verweigert", + "description" => "Entschuldigung, Sie haben keine Berechtigung, auf diese Seite zuzugreifen.", + ], + "404" => [ + "title" => "Seite nicht gefunden", + "description" => "Entschuldigung, die von Ihnen gesuchte Seite konnte nicht gefunden werden.", + ], + "405" => [ + "title" => "Methode nicht erlaubt", + "description" => "Die für diese Anfrage verwendete Methode ist nicht erlaubt.", + ], + "408" => [ + "title" => "Zeitüberschreitung", + "description" => "Der Server hat zu lange gebraucht, um zu antworten. Bitte versuchen Sie es erneut.", + ], + "419" => [ + "title" => "Seite abgelaufen", + "description" => "Ihre Sitzung ist abgelaufen. Bitte aktualisieren Sie die Seite und versuchen Sie es erneut.", + ], + "422" => [ + "title" => "Nicht verarbeitbare Entität", + "description" => "Die bereitgestellten Daten sind ungültig. Bitte überprüfen Sie sie und versuchen Sie es erneut.", + ], + "429" => [ + "title" => "Zu viele Anfragen", + "description" => "Sie haben zu viele Anfragen in kurzer Zeit gesendet. Bitte warten Sie einen Moment und versuchen Sie es erneut.", + ], + "500" => [ + "title" => "Serverfehler", + "description" => "Ups, es ist ein Fehler auf unseren Servern aufgetreten.", + ], + "502" => [ + "title" => "Fehlerhafte Gateway-Antwort", + "description" => "Der Server hat eine ungültige Antwort erhalten. Bitte versuchen Sie es später erneut.", + ], + "503" => [ + "title" => "Dienst nicht verfügbar", + "description" => "Entschuldigung, wir führen gerade Wartungsarbeiten durch. Bitte versuchen Sie es später erneut.", + ], + "504" => [ + "title" => "Gateway-Zeitüberschreitung", + "description" => "Der Server hat zu lange gebraucht, um zu antworten. Bitte versuchen Sie es später erneut.", + ], +]; diff --git a/lang/de/front.php b/lang/de/front.php new file mode 100644 index 0000000..f28dc82 --- /dev/null +++ b/lang/de/front.php @@ -0,0 +1,6 @@ + "Hallo Welt", + "back_to_your_website" => "Zurück zur Startseite", +]; diff --git a/lang/de/models.php b/lang/de/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/de/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/de/validation.php b/lang/de/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/de/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/en/back.php b/lang/en/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/en/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/en/enums.php b/lang/en/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/en/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/en/errors.php b/lang/en/errors.php new file mode 100644 index 0000000..f716b76 --- /dev/null +++ b/lang/en/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Bad Request", + "description" => "The server could not understand your request. Please check and try again.", + ], + "401" => [ + "title" => "Unauthorized", + "description" => "You must be logged in to access this page.", + ], + "403" => [ + "title" => "Forbidden", + "description" => "Sorry, you are forbidden from accessing this page.", + ], + "404" => [ + "title" => "Page Not Found", + "description" => "Sorry, the page you are looking for could not be found.", + ], + "405" => [ + "title" => "Method Not Allowed", + "description" => "The method used for this request is not allowed.", + ], + "408" => [ + "title" => "Request Timeout", + "description" => "The server took too long to respond. Please try again.", + ], + "419" => [ + "title" => "Page Expired", + "description" => "Your session has expired. Please refresh and try again.", + ], + "422" => [ + "title" => "Unprocessable Entity", + "description" => "The data provided was invalid. Please check and try again.", + ], + "429" => [ + "title" => "Too Many Requests", + "description" => "You have made too many requests in a short time. Please slow down.", + ], + "500" => [ + "title" => "Server Error", + "description" => "Whoops, something went wrong on our servers.", + ], + "502" => [ + "title" => "Bad Gateway", + "description" => "The server received an invalid response. Please try again later.", + ], + "503" => [ + "title" => "Service Unavailable", + "description" => "Sorry, we are doing some maintenance. Please check back soon.", + ], + "504" => [ + "title" => "Gateway Timeout", + "description" => "The server took too long to respond. Please try again later.", + ], +]; diff --git a/lang/en/front.php b/lang/en/front.php new file mode 100644 index 0000000..a9c94a1 --- /dev/null +++ b/lang/en/front.php @@ -0,0 +1,6 @@ + "Hello World", + "back_to_your_website" => "Return to the home page", +]; diff --git a/lang/en/models.php b/lang/en/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/en/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/en/validation.php b/lang/en/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/en/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/es/back.php b/lang/es/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/es/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/es/enums.php b/lang/es/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/es/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/es/errors.php b/lang/es/errors.php new file mode 100644 index 0000000..d5e2344 --- /dev/null +++ b/lang/es/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Solicitud incorrecta", + "description" => "El servidor no pudo entender su solicitud. Por favor, verifique e intente nuevamente.", + ], + "401" => [ + "title" => "No autorizado", + "description" => "Debe iniciar sesión para acceder a esta página.", + ], + "403" => [ + "title" => "Acceso prohibido", + "description" => "Lo sentimos, no está autorizado para acceder a esta página.", + ], + "404" => [ + "title" => "Página no encontrada", + "description" => "Lo sentimos, la página que busca no se encuentra.", + ], + "405" => [ + "title" => "Método no permitido", + "description" => "El método utilizado para esta solicitud no está permitido.", + ], + "408" => [ + "title" => "Tiempo de espera agotado", + "description" => "El servidor tardó demasiado en responder. Por favor, intente nuevamente.", + ], + "419" => [ + "title" => "Página expirada", + "description" => "Su sesión ha expirado. Por favor, actualice y vuelva a intentarlo.", + ], + "422" => [ + "title" => "Entidad no procesable", + "description" => "Los datos proporcionados no son válidos. Por favor, verifique e intente nuevamente.", + ], + "429" => [ + "title" => "Demasiadas solicitudes", + "description" => "Ha realizado demasiadas solicitudes en poco tiempo. Por favor, espere antes de intentar nuevamente.", + ], + "500" => [ + "title" => "Error del servidor", + "description" => "Ups, ocurrió un error en nuestros servidores.", + ], + "502" => [ + "title" => "Puerta de enlace incorrecta", + "description" => "El servidor recibió una respuesta inválida. Por favor, intente nuevamente más tarde.", + ], + "503" => [ + "title" => "Servicio no disponible", + "description" => "Lo sentimos, estamos realizando mantenimiento. Por favor, vuelva más tarde.", + ], + "504" => [ + "title" => "Tiempo de espera de la puerta de enlace agotado", + "description" => "El servidor tardó demasiado en responder. Por favor, intente nuevamente más tarde.", + ], +]; diff --git a/lang/es/front.php b/lang/es/front.php new file mode 100644 index 0000000..17a9360 --- /dev/null +++ b/lang/es/front.php @@ -0,0 +1,6 @@ + "Hola Mundo", + "back_to_your_website" => "Volver a la página de inicio", +]; diff --git a/lang/es/models.php b/lang/es/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/es/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/es/validation.php b/lang/es/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/es/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/fr/back.php b/lang/fr/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/fr/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/fr/enums.php b/lang/fr/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/fr/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/fr/errors.php b/lang/fr/errors.php new file mode 100644 index 0000000..789db6c --- /dev/null +++ b/lang/fr/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Requête invalide", + "description" => "Le serveur n’a pas pu comprendre votre requête. Veuillez vérifier et réessayer.", + ], + "401" => [ + "title" => "Non autorisé", + "description" => "Vous devez être connecté pour accéder à cette page.", + ], + "403" => [ + "title" => "Accès interdit", + "description" => "Désolé, vous n’êtes pas autorisé à accéder à cette page.", + ], + "404" => [ + "title" => "Page introuvable", + "description" => "Désolé, la page que vous recherchez est introuvable.", + ], + "405" => [ + "title" => "Méthode non autorisée", + "description" => "La méthode utilisée pour cette requête n’est pas autorisée.", + ], + "408" => [ + "title" => "Délai d’attente dépassé", + "description" => "Le serveur a mis trop de temps à répondre. Veuillez réessayer.", + ], + "419" => [ + "title" => "Page expirée", + "description" => "Votre session a expiré. Veuillez actualiser et réessayer.", + ], + "422" => [ + "title" => "Entité non traitable", + "description" => "Les données fournies ne sont pas valides. Veuillez vérifier et réessayer.", + ], + "429" => [ + "title" => "Trop de requêtes", + "description" => "Vous avez effectué trop de requêtes en peu de temps. Veuillez patienter avant de réessayer.", + ], + "500" => [ + "title" => "Erreur serveur", + "description" => "Oups, une erreur est survenue sur nos serveurs.", + ], + "502" => [ + "title" => "Mauvaise passerelle", + "description" => "Le serveur a reçu une réponse invalide. Veuillez réessayer plus tard.", + ], + "503" => [ + "title" => "Service indisponible", + "description" => "Désolé, nous effectuons une maintenance. Merci de revenir plus tard.", + ], + "504" => [ + "title" => "Délai d’attente de la passerelle dépassé", + "description" => "Le serveur a mis trop de temps à répondre. Veuillez réessayer plus tard.", + ], +]; diff --git a/lang/fr/front.php b/lang/fr/front.php new file mode 100644 index 0000000..13f78de --- /dev/null +++ b/lang/fr/front.php @@ -0,0 +1,6 @@ + "Bonjour Monde", + "back_to_your_website" => "Revenir à la page d'accueil", +]; diff --git a/lang/fr/models.php b/lang/fr/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/fr/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/fr/validation.php b/lang/fr/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/fr/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/nl/back.php b/lang/nl/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/nl/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/nl/enums.php b/lang/nl/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/nl/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/nl/errors.php b/lang/nl/errors.php new file mode 100644 index 0000000..0ec4fa4 --- /dev/null +++ b/lang/nl/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Ongeldig verzoek", + "description" => "De server kon je verzoek niet begrijpen. Controleer het en probeer het opnieuw.", + ], + "401" => [ + "title" => "Niet geautoriseerd", + "description" => "Je moet ingelogd zijn om deze pagina te bekijken.", + ], + "403" => [ + "title" => "Toegang geweigerd", + "description" => "Sorry, je hebt geen toestemming om deze pagina te bekijken.", + ], + "404" => [ + "title" => "Pagina niet gevonden", + "description" => "Sorry, de door jou gezochte pagina bestaat niet.", + ], + "405" => [ + "title" => "Methode niet toegestaan", + "description" => "De gebruikte methode voor dit verzoek is niet toegestaan.", + ], + "408" => [ + "title" => "Time-out", + "description" => "De server deed er te lang over om te reageren. Probeer het opnieuw.", + ], + "419" => [ + "title" => "Pagina verlopen", + "description" => "Je sessie is verlopen. Vernieuw de pagina en probeer het opnieuw.", + ], + "422" => [ + "title" => "Niet verwerkbare entiteit", + "description" => "De opgegeven gegevens zijn ongeldig. Controleer ze en probeer het opnieuw.", + ], + "429" => [ + "title" => "Te veel verzoeken", + "description" => "Je hebt te veel verzoeken in korte tijd gedaan. Wacht even en probeer het opnieuw.", + ], + "500" => [ + "title" => "Serverfout", + "description" => "Oeps, er is een fout op onze servers opgetreden.", + ], + "502" => [ + "title" => "Ongeldige gateway", + "description" => "De server heeft een ongeldig antwoord ontvangen. Probeer het later opnieuw.", + ], + "503" => [ + "title" => "Dienst niet beschikbaar", + "description" => "Sorry, we voeren onderhoud uit. Probeer het later opnieuw.", + ], + "504" => [ + "title" => "Gateway Time-out", + "description" => "De server deed er te lang over om te reageren. Probeer het later opnieuw.", + ], +]; \ No newline at end of file diff --git a/lang/nl/front.php b/lang/nl/front.php new file mode 100644 index 0000000..6397686 --- /dev/null +++ b/lang/nl/front.php @@ -0,0 +1,6 @@ + "Hallo wereld", + "back_to_your_website" => "Terug naar de startpagina", +]; diff --git a/lang/nl/models.php b/lang/nl/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/nl/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/nl/validation.php b/lang/nl/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/nl/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/pl/back.php b/lang/pl/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/pl/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/pl/enums.php b/lang/pl/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/pl/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/pl/errors.php b/lang/pl/errors.php new file mode 100644 index 0000000..26618bf --- /dev/null +++ b/lang/pl/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Nieprawidłowe żądanie", + "description" => "Serwer nie mógł zrozumieć Twojego żądania. Sprawdź je i spróbuj ponownie.", + ], + "401" => [ + "title" => "Nieautoryzowany", + "description" => "Musisz być zalogowany, aby uzyskać dostęp do tej strony.", + ], + "403" => [ + "title" => "Dostęp zabroniony", + "description" => "Przepraszamy, nie masz uprawnień do tej strony.", + ], + "404" => [ + "title" => "Strona nie znaleziona", + "description" => "Przepraszamy, strona, której szukasz, nie istnieje.", + ], + "405" => [ + "title" => "Metoda niedozwolona", + "description" => "Użyta metoda żądania nie jest dozwolona.", + ], + "408" => [ + "title" => "Przekroczono czas oczekiwania", + "description" => "Serwer potrzebował zbyt dużo czasu, aby odpowiedzieć. Spróbuj ponownie.", + ], + "419" => [ + "title" => "Strona wygasła", + "description" => "Twoja sesja wygasła. Odśwież stronę i spróbuj ponownie.", + ], + "422" => [ + "title" => "Nieprzetwarzalna jednostka", + "description" => "Dostarczone dane są nieprawidłowe. Sprawdź je i spróbuj ponownie.", + ], + "429" => [ + "title" => "Za dużo żądań", + "description" => "Wysłano zbyt wiele żądań w krótkim czasie. Poczekaj chwilę i spróbuj ponownie.", + ], + "500" => [ + "title" => "Błąd serwera", + "description" => "Ups, wystąpił błąd po stronie serwera.", + ], + "502" => [ + "title" => "Zła brama", + "description" => "Serwer otrzymał nieprawidłową odpowiedź. Spróbuj ponownie później.", + ], + "503" => [ + "title" => "Usługa niedostępna", + "description" => "Przepraszamy, trwa konserwacja. Spróbuj ponownie później.", + ], + "504" => [ + "title" => "Przekroczono czas oczekiwania bramy", + "description" => "Serwer potrzebował zbyt dużo czasu, aby odpowiedzieć. Spróbuj ponownie później.", + ], +]; diff --git a/lang/pl/front.php b/lang/pl/front.php new file mode 100644 index 0000000..e8cf5ac --- /dev/null +++ b/lang/pl/front.php @@ -0,0 +1,6 @@ + "Witaj świecie", + "back_to_your_website" => "Powrót do strony głównej", +]; diff --git a/lang/pl/models.php b/lang/pl/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/pl/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/pl/validation.php b/lang/pl/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/pl/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/manifest.yaml b/manifest.yaml index 3ab6e6c..2eb7bba 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -1,4 +1,3 @@ ---- apiVersion: v1 kind: ConfigMap metadata: @@ -8,11 +7,14 @@ data: APP_ENV: "${APP_APP_ENV}" APP_KEY: "${APP_APP_KEY}" APP_DEBUG: "${APP_APP_DEBUG}" + SESSION_DRIVER: "${APP_SESSION_DRIVER}" APP_URL: "https://${APP_DOMAIN}" LOG_CHANNEL: "k8s" + CACHE_STORE: "${APP_CACHE_STORE}" DB_HOST: "${APP_DB_HOST}" DB_PORT: "${APP_DB_PORT}" DB_DATABASE: "${APP_DB_DATABASE}" + DB_CONNECTION: "mysql" DB_USERNAME: "${APP_DB_USERNAME}" DB_PASSWORD: "${APP_DB_PASSWORD}" MAIL_HOST: "${APP_MAIL_HOST}" @@ -22,12 +24,26 @@ data: MAIL_ENCRYPTION: "${APP_MAIL_ENCRYPTION}" MAIL_FROM_ADDRESS: "${APP_MAIL_FROM_ADDRESS}" MAIL_FROM_NAME: "${APP_APP_NAME}" - LDC_WEB_API_KEY: "${APP_LDC_WEB_API_KEY}" SENTRY_LARAVEL_DSN: "${APP_SENTRY_LARAVEL_DSN}" - GITLAB_URL: "https://${CI_SERVER_HOST}" - GITLAB_TOKEN: "${APP_GITLAB_TOKEN}" + TELESCOPE_ENABLED: "${APP_TELESCOPE_ENABLED}" + CRM_ENDPOINT: "${APP_CRM_ENDPOINT}" + CRM_TOKEN: "${APP_CRM_TOKEN}" + CRM_PASSWORD: "${APP_CRM_PASSWORD}" + MATOMO_SITE_ID: "${APP_MATOMO_SITE_ID}" + GOOGLE_RECAPTCHA_PRIVATE: "${APP_GOOGLE_RECAPTCHA_PRIVATE}" + GOOGLE_RECAPTCHA_PUBLIC: "${APP_GOOGLE_RECAPTCHA_PUBLIC}" + GOOGLE_RECAPTCHA_VERSION: "${APP_GOOGLE_RECAPTCHA_VERSION}" + GOOGLE_MAPS_KEY: "${APP_GOOGLE_MAPS_KEY}" + SCOUT_PREFIX: "${APP_SCOUT_PREFIX}" + SCOUT_QUEUE: "${APP_SCOUT_QUEUE}" + MEILISEARCH_HOST: "meilisearch.common-services:7700" + MEILISEARCH_KEY: "${APP_MEILISEARCH_KEY}" + SAML2_SP_CERT_x509: "${APP_SAML2_SP_CERT_x509}" + SAML2_SP_CERT_PRIVATEKEY: "${APP_SAML2_SP_CERT_PRIVATEKEY}" + SAML2_CONTACT_TECHNICAL_EMAIL: "${APP_SAML2_CONTACT_TECHNICAL_EMAIL}" + SAML2_CONTACT_SUPPORT_EMAIL: "${APP_SAML2_CONTACT_SUPPORT_EMAIL}" + SAML2_DEFAULT_TENANT_UUID: "${APP_SAML2_DEFAULT_TENANT_UUID}" UWIL_ADMIN_SECURE_CIDR_LIST: "${APP_GLOBAL_UWIL_ADMIN_SECURE_CIDR_LIST}" - --- apiVersion: v1 kind: PersistentVolumeClaim @@ -40,7 +56,6 @@ spec: resources: requests: storage: $APP_PVC_SIZE - --- apiVersion: apps/v1 kind: Deployment @@ -72,6 +87,29 @@ spec: volumeMounts: - name: storage mountPath: /app/srcs/storage + - name: ${CI_PROJECT_PATH_SLUG}-queue-worker + image: $IMAGE_TAG + lifecycle: + preStop: + exec: + command: [ "/bin/sh", "-c", "kill -s TERM 1; while test $(ps ax | grep -v grep | grep bash | wc -l) -gt 0; do sleep 2s; done" ] + resources: + limits: + cpu: "${APP_CI_CPU_LIMIT}" + memory: "${APP_CI_MEMORY_LIMIT}" + requests: + cpu: "${APP_CI_CPU_REQUEST}" + memory: "${APP_CI_MEMORY_REQUEST}" + command: + - "bash" + args: + - "k8s-queues.sh" + envFrom: + - configMapRef: + name: ${CI_PROJECT_PATH_SLUG}-config-map + volumeMounts: + - name: storage + mountPath: /app/srcs/storage imagePullSecrets: - name: docker-registry-credentials securityContext: @@ -83,7 +121,6 @@ spec: - name: storage persistentVolumeClaim: claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage - --- apiVersion: v1 kind: Service @@ -95,7 +132,6 @@ spec: ports: - port: 80 targetPort: 80 - --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute @@ -113,7 +149,6 @@ spec: port: 80 tls: secretName: ${CRT_TLS_NAME} - --- apiVersion: batch/v1 kind: CronJob @@ -131,35 +166,35 @@ spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: app - operator: In - values: - - ${CI_PROJECT_PATH_SLUG}-app - topologyKey: "kubernetes.io/hostname" - namespaces: [$KUBE_NAMESPACE] + - labelSelector: + matchExpressions: + - key: app + operator: In + values: + - ${CI_PROJECT_PATH_SLUG}-app + topologyKey: "kubernetes.io/hostname" + namespaces: [ $KUBE_NAMESPACE ] containers: - - name: ${CI_PROJECT_PATH_SLUG}-scheduled - image: $IMAGE_TAG - imagePullPolicy: IfNotPresent - command: - - "php" - args: - - "artisan" - - "schedule:run" - envFrom: - - configMapRef: - name: ${CI_PROJECT_PATH_SLUG}-config-map - volumeMounts: - - name: storage - mountPath: /app/srcs/storage - imagePullSecrets: - - name: docker-registry-credentials - volumes: + - name: ${CI_PROJECT_PATH_SLUG}-scheduled + image: $IMAGE_TAG + imagePullPolicy: IfNotPresent + command: + - "php" + args: + - "artisan" + - "schedule:run" + envFrom: + - configMapRef: + name: ${CI_PROJECT_PATH_SLUG}-config-map + volumeMounts: - name: storage - persistentVolumeClaim: - claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage + mountPath: /app/srcs/storage + imagePullSecrets: + - name: docker-registry-credentials + volumes: + - name: storage + persistentVolumeClaim: + claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage securityContext: runAsUser: 33 runAsGroup: 33 diff --git a/package-lock.json b/package-lock.json index 572ab94..57db0e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,112 +4,171 @@ "requires": true, "packages": { "": { - "devDependencies": { - "@eastdesire/jscolor": "^2.5.1", - "@fortawesome/fontawesome-svg-core": "latest", - "@fortawesome/free-brands-svg-icons": "latest", - "@fortawesome/free-regular-svg-icons": "latest", - "@fortawesome/free-solid-svg-icons": "latest", - "@fortawesome/vue-fontawesome": "^3.0.3", - "@sipec/vue3-tags-input": "^3.0.4", - "@types/bootstrap": "^5.2.7", - "@types/node": "^20.8.2", - "@types/toastify-js": "^1.12.1", - "@types/vue-select": "^3.16.5", - "@vitejs/plugin-legacy": "latest", - "@vitejs/plugin-vue": "latest", - "@vue/compiler-sfc": "latest", - "@vue/eslint-config-typescript": "latest", - "@vue/tsconfig": "latest", - "axios": "^1.5.1", - "bootstrap": "^5.3.2", - "chart.js": "^4.4.0", - "cropperjs": "^1.6.1", - "eslint": "latest", - "eslint-plugin-vue": "latest", - "glightbox": "^3.2.0", - "laravel-vite-plugin": "latest", - "moment": "^2.29.4", - "postcss-discard-comments": "^6.0.0", - "prettier": "latest", - "print-js": "^1.6.0", - "sass": "latest", - "slugify": "^1.6.6", - "stylelint-config-idiomatic-order": "github:ream88/stylelint-config-idiomatic-order", - "stylelint-config-sass-guidelines": "latest", - "stylelint-config-standard-scss": "latest", - "sweetalert2": "^11.7.31", - "terser": "latest", - "toastify-js": "^1.12.0", - "typescript": "latest", - "vite-plugin-checker": "latest", - "vite-plugin-eslint": "latest", - "vite-plugin-stylelint": "latest", - "vue": "latest", - "vue-select": "^4.0.0-beta.6", - "vue-tsc": "1.6.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/sortable": "^10.0.0", + "@dnd-kit/utilities": "^3.2.2", + "@inertiajs/core": "^2.1.5", + "@inertiajs/react": "^2.3.21", + "@tanstack/react-table": "^8.21.3", + "@tiptap/core": "^3.22.4", + "@tiptap/extension-blockquote": "^3.22.4", + "@tiptap/extension-bold": "^3.22.4", + "@tiptap/extension-bullet-list": "^3.22.4", + "@tiptap/extension-color": "^3.22.4", + "@tiptap/extension-heading": "^3.22.4", + "@tiptap/extension-history": "^3.22.4", + "@tiptap/extension-horizontal-rule": "^3.22.4", + "@tiptap/extension-image": "^3.22.4", + "@tiptap/extension-invisible-characters": "^3.22.4", + "@tiptap/extension-italic": "^3.22.4", + "@tiptap/extension-link": "^3.22.4", + "@tiptap/extension-list": "^3.22.4", + "@tiptap/extension-ordered-list": "^3.22.4", + "@tiptap/extension-placeholder": "^3.22.4", + "@tiptap/extension-strike": "^3.22.4", + "@tiptap/extension-subscript": "^3.22.4", + "@tiptap/extension-superscript": "^3.22.4", + "@tiptap/extension-table": "^3.22.4", + "@tiptap/extension-table-cell": "^3.22.4", + "@tiptap/extension-table-header": "^3.22.4", + "@tiptap/extension-table-row": "^3.22.4", + "@tiptap/extension-text-align": "^3.22.4", + "@tiptap/extension-underline": "^3.22.4", + "@tiptap/react": "^3.22.4", + "@tiptap/starter-kit": "^3.22.4", + "@types/pluralize": "^0.0.33", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "axios": "^1.15.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "json-edit-react": "^1.29.0", + "laravel-vite-plugin": "^1.3.0", + "lucide-react": "^0.503.0", + "motion": "^12.38.0", + "prosemirror-state": "^1.4.4", + "react-color": "^2.19.3", + "react-dropzone": "^14.4.1", + "react-image-crop": "^11.0.10", + "slugify": "^1.6.9", + "tailwind-merge": "^3.5.0", + "ziggy-js": "^2.6.2", + "zod": "^4.3.6", + "zustand": "^5.0.12" }, + "devDependencies": { + "@headlessui/react": "^2.2.10", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-toast": "^1.2.15", + "@radix-ui/react-tooltip": "^1.2.8", + "@tailwindcss/forms": "^0.5.11", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.0.0", + "@types/react-color": "^3.0.13", + "@typescript-eslint/eslint-plugin": "^8.59.0", + "@typescript-eslint/parser": "^8.59.0", + "@uwil/husky-config": "^1.0.1", + "@vitejs/plugin-react": "^4.7.0", + "autoprefixer": "^10.5.0", + "concurrently": "^9.2.1", + "eslint": "^8.57.1", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^10.1.8", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^4.6.2", + "flag-icons": "^7.5.0", + "pluralize": "^8.0.0", + "prettier": "^3.8.3", + "react": "^19.2.5", + "react-day-picker": "^9.14.0", + "react-dom": "^19.2.5", + "rollup-plugin-copy": "^3.5.0", + "sass-embedded": "^1.99.0", + "stylelint": "^16.26.1", + "stylelint-config-idiomatic-order": "^10.0.0", + "stylelint-config-sass-guidelines": "^12.1.0", + "stylelint-config-standard-scss": "^14.0.0", + "stylelint-scss": "^6.14.0", + "tailwindcss": "^3.4.19", + "tailwindcss-animate": "^1.0.7", + "vite": "^6.4.2" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, + "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -124,54 +183,43 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -179,131 +227,50 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.0" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -312,171 +279,69 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -484,81 +349,14 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -567,37 +365,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -606,1120 +381,409 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", - "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", - "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.2", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.23.2", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.23.0", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.23.0", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.23.0", - "@babel/plugin-transform-modules-commonjs": "^7.23.0", - "@babel/plugin-transform-modules-systemjs": "^7.23.0", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.23.0", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.23.0", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true - }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.12.0.tgz", + "integrity": "sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA==", + "devOptional": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@cacheable/memory": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", + "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.4.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/memory/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/utils/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@commitlint/cli": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.5.0.tgz", + "integrity": "sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/format": "^20.5.0", + "@commitlint/lint": "^20.5.0", + "@commitlint/load": "^20.5.0", + "@commitlint/read": "^20.5.0", + "@commitlint/types": "^20.5.0", + "tinyexec": "^1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.5.0.tgz", + "integrity": "sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "conventional-changelog-conventionalcommits": "^9.2.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.5.0.tgz", + "integrity": "sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.5.0.tgz", + "integrity": "sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz", + "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.5.0.tgz", + "integrity": "sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.5.0.tgz", + "integrity": "sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/lint": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.5.0.tgz", + "integrity": "sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/is-ignored": "^20.5.0", + "@commitlint/parse": "^20.5.0", + "@commitlint/rules": "^20.5.0", + "@commitlint/types": "^20.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.5.0.tgz", + "integrity": "sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^20.5.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.5.0", + "@commitlint/types": "^20.5.0", + "cosmiconfig": "^9.0.1", + "cosmiconfig-typescript-loader": "^6.1.0", + "is-plain-obj": "^4.1.0", + "lodash.mergewith": "^4.6.2", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/message": { + "version": "20.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.3.tgz", + "integrity": "sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.5.0.tgz", + "integrity": "sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "conventional-changelog-angular": "^8.2.0", + "conventional-commits-parser": "^6.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/read": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.5.0.tgz", + "integrity": "sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/top-level": "^20.4.3", + "@commitlint/types": "^20.5.0", + "git-raw-commits": "^5.0.0", + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.5.0.tgz", + "integrity": "sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^20.5.0", + "@commitlint/types": "^20.5.0", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.5.0.tgz", + "integrity": "sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/ensure": "^20.5.0", + "@commitlint/message": "^20.4.3", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz", + "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level": { + "version": "20.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.3.tgz", + "integrity": "sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@conventional-changelog/git-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-2.7.0.tgz", + "integrity": "sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/child-process-utils": "^1.0.0", + "@simple-libs/stream-utils": "^1.2.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.4.0" + }, + "peerDependenciesMeta": { + "conventional-commits-filter": { + "optional": true + }, + "conventional-commits-parser": { + "optional": true + } + } + }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", - "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, "funding": [ { @@ -1731,18 +795,43 @@ "url": "https://opencollective.com/csstools" } ], - "peer": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.1" + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.3.tgz", + "integrity": "sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", - "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, "funding": [ { @@ -1754,15 +843,15 @@ "url": "https://opencollective.com/csstools" } ], - "peer": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", - "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "funding": [ { @@ -1774,447 +863,571 @@ "url": "https://opencollective.com/csstools" } ], - "peer": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@csstools/selector-specificity": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", - "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "peer": true, - "engines": { - "node": "^14 || ^16 || >=18" + "license": "MIT" + }, + "node_modules/@dnd-kit/accessibility": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", + "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" }, "peerDependencies": { - "postcss-selector-parser": "^6.0.13" + "react": ">=16.8.0" } }, - "node_modules/@eastdesire/jscolor": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@eastdesire/jscolor/-/jscolor-2.5.1.tgz", - "integrity": "sha512-+D7Xz2f1Zxpc438q0s7wwKHwWal596dcAGcWp+pxfHlYtt0LVdynMFrf0PYdmwHt8idKfeglyU2h2LdkATFcbQ==", - "dev": true + "node_modules/@dnd-kit/core": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", + "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", + "license": "MIT", + "dependencies": { + "@dnd-kit/accessibility": "^3.1.1", + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.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" - ], + "node_modules/@dnd-kit/sortable": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-10.0.0.tgz", + "integrity": "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==", + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.3.0", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/utilities": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", + "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz", + "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==", "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/JounQin" } }, - "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" - ], + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" } }, - "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" - ], + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.4.0" } }, - "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" - ], + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.4.0" } }, - "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" - ], - "peer": true, - "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" - ], - "peer": true, - "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" - ], - "peer": true, - "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" - ], - "peer": true, - "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" - ], - "peer": true, - "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" - ], - "peer": true, - "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" - ], - "peer": true, - "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" - ], - "peer": true, - "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==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], - "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, "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==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "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==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "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==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, - "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==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ - "x64" + "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, - "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==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", "optional": true, "os": [ "openbsd" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, - "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==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", "optional": true, "os": [ "sunos" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "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==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "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==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "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==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2233,133 +1446,213 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, "node_modules/@eslint/js": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", - "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", - "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", - "dev": true, - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", - "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", - "dev": true, - "hasInstallScript": true, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "devOptional": true, + "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" - }, - "engines": { - "node": ">=6" + "@floating-ui/utils": "^0.2.11" } }, - "node_modules/@fortawesome/free-brands-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.4.2.tgz", - "integrity": "sha512-LKOwJX0I7+mR/cvvf6qIiqcERbdnY+24zgpUSouySml+5w8B4BJOx8EhDR/FTKAu06W12fmUIcv6lzPSwYKGGg==", - "dev": true, - "hasInstallScript": true, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "devOptional": true, + "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" - }, - "engines": { - "node": ">=6" + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" } }, - "node_modules/@fortawesome/free-regular-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.2.tgz", - "integrity": "sha512-0+sIUWnkgTVVXVAPQmW4vxb9ZTHv0WstOa3rBx9iPxrrrDH6bNLsDYuwXF9b6fGm+iR7DKQvQshUH/FJm3ed9Q==", + "node_modules/@floating-ui/react": { + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz", - "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/vue-fontawesome": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.3.tgz", - "integrity": "sha512-KCPHi9QemVXGMrfuwf3nNnNo129resAIQWut9QTAMXmXqL2ErABC6ohd2yY5Ipq0CLWNbKHk8TMdTXL/Zf3ZhA==", - "dev": true, "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1 || ~6", - "vue": ">= 3.0.0 < 4" + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@headlessui/react": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.10.tgz", + "integrity": "sha512-5pVLNK9wlpxTUTy9GpgbX/SdcRh+HBnPktjM2wbiLTH4p+2EPHBO1aoSryUCuKUIItdDWO9ITlhUL8UnUN/oIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.20.2", + "@react-aria/interactions": "^3.25.0", + "@tanstack/react-virtual": "^3.13.9", + "use-sync-external-store": "^1.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2369,80 +1662,175 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@inertiajs/core": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.1.5.tgz", + "integrity": "sha512-bVApSgzooJ7Wl+x1ZFEvkKRcjpuRHN85l4rVzjbjvqSsy2fXSlsGpHAB4wtLE7Dum+6pdweN1lSMXkaqfjHC+Q==", + "license": "MIT", + "dependencies": { + "@types/lodash-es": "^4.17.12", + "axios": "^1.11.0", + "lodash-es": "^4.17.21", + "qs": "^6.9.0" + } + }, + "node_modules/@inertiajs/react": { + "version": "2.3.21", + "resolved": "https://registry.npmjs.org/@inertiajs/react/-/react-2.3.21.tgz", + "integrity": "sha512-puyk610JRni/ex8T3Di3dyz2c1eYU/u5bmef2BdKhMnn2nrC2hITXtpcFf0emk1yR8Q3+rdO6aaq68Lwk+P3Rw==", + "license": "MIT", + "dependencies": { + "@inertiajs/core": "2.3.21", + "@types/lodash-es": "^4.17.12", + "laravel-precognition": "^1.0.2", + "lodash-es": "^4.18.1" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@inertiajs/react/node_modules/@inertiajs/core": { + "version": "2.3.21", + "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.3.21.tgz", + "integrity": "sha512-grHSCUiWDBWqpRxaobyxUJu0FV6HLkkuJwvoNLVkHwkexLvoaLhb9BmtoQydlIYL5pk2O3jcKaGtWJ83JwTB4A==", + "license": "MIT", + "dependencies": { + "@types/lodash-es": "^4.17.12", + "axios": "^1.13.5", + "laravel-precognition": "^1.0.2", + "lodash-es": "^4.18.1", + "qs": "^6.15.0" + } + }, + "node_modules/@internationalized/date": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.1.tgz", + "integrity": "sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.6.tgz", + "integrity": "sha512-iFgmQaXHE0vytNfpLZWOC2mEJCBRzcUxt53Xf/yCXG93lRvqas237i3r7X4RKMwO3txiyZD4mQjKAByFv6UGSQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.8.tgz", + "integrity": "sha512-NdbMQUSfXLYIQol5VyMtinm9pZDciiMfN7RtmSuSB78io1hqwJ0naYfxyW6vgxWBkzWymQa/3uLDlbfmshtCaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", - "dev": true + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } }, "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, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2456,6 +1844,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -2465,6 +1854,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2473,284 +1863,4132 @@ "node": ">= 8" } }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" } }, - "node_modules/@sipec/vue3-tags-input": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@sipec/vue3-tags-input/-/vue3-tags-input-3.0.4.tgz", - "integrity": "sha512-zE4OiFkWvlvvGT3FZQ9hRrvJW935VPW0fe4K03SxM5Q/UQZMqph763UHXTuyK1orWNQMTbDx9tKPLIMZTiDXLA==", + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "dev": true, + "license": "MIT", "dependencies": { - "vue": "^3.0.0-beta.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { - "vue": "3.x" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@types/bootstrap": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.7.tgz", - "integrity": "sha512-vWs0HzobIB8Af2F0B1GXpaVLSVn1NWULDYgTIWp08Et/r2B3aAwwhFBeOs/rRFWJA38EZTXkWP3tepIjpQkpLg==", + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@popperjs/core": "^2.9.2" + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@types/eslint": { - "version": "8.44.4", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.4.tgz", - "integrity": "sha512-lOzjyfY/D9QR4hY9oblZ76B90MYTB3RrQ4z2vBIJKj9ROCRqdkYl2gSUx1x1a4IWPjKJZLL4Aw1Zfay7eMnmnA==", + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.8.tgz", + "integrity": "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", + "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", + "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", + "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@react-aria/focus": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.22.0.tgz", + "integrity": "sha512-ZfDOVuVhqDsM9mkNji3QUZ/d40JhlVgXrDkrfXylM1035QCrcTHN7m2DpbE95sU2A8EQb4wikvt5jM6K/73BPg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-aria": "3.48.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.28.0.tgz", + "integrity": "sha512-OXwdU1EWFdMxmr/K1CXNGJzmNlCClByb+PuCaqUyzBymHPCGVhawirLIon/CrIN5psh3AiWpHSh4H0WeJdVpng==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.34.0", + "@swc/helpers": "^0.5.0", + "react-aria": "3.48.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.34.0.tgz", + "integrity": "sha512-gp6xo/s2lX54AlTjOiqwDnxA7UW79BNvI9dB9pr3LZTzRKCd1ZA+ZbgKw/ReIiWuvvVw/8QFJpnqeeFyLocMcQ==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", + "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", + "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", + "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", + "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", + "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", + "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", + "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", + "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", + "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", + "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", + "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", + "cpu": [ + "loong64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", + "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", + "cpu": [ + "loong64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", + "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", + "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", + "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", + "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", + "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", + "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", + "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", + "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", + "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", + "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", + "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", + "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", + "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@simple-libs/child-process-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-1.0.2.tgz", + "integrity": "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, + "node_modules/@simple-libs/stream-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.2.0.tgz", + "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, + "node_modules/@stylistic/stylelint-plugin": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.3.tgz", + "integrity": "sha512-85fsmzgsIVmyG3/GFrjuYj6Cz8rAM7IZiPiXCMiSMfoDOC1lOrzrXPDk24WqviAghnPqGpx8b0caK2PuewWGFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1", + "@csstools/media-query-list-parser": "^3.0.1", + "is-plain-object": "^5.0.0", + "postcss": "^8.4.41", + "postcss-selector-parser": "^6.1.2", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0" + }, + "engines": { + "node": "^18.12 || >=20.9" + }, + "peerDependencies": { + "stylelint": "^16.8.0" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/@csstools/media-query-list-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz", + "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", + "integrity": "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tabby_ai/hijri-converter": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@tabby_ai/hijri-converter/-/hijri-converter-1.0.5.tgz", + "integrity": "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz", + "integrity": "sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz", + "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.4" + } + }, + "node_modules/@tailwindcss/node/node_modules/tailwindcss": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", + "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz", + "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-x64": "4.2.4", + "@tailwindcss/oxide-freebsd-x64": "4.2.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-x64-musl": "4.2.4", + "@tailwindcss/oxide-wasm32-wasi": "4.2.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz", + "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz", + "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz", + "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz", + "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz", + "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz", + "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz", + "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz", + "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz", + "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz", + "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz", + "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz", + "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.4.tgz", + "integrity": "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.4", + "@tailwindcss/oxide": "4.2.4", + "tailwindcss": "4.2.4" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tailwindcss/vite/node_modules/tailwindcss": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", + "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tanstack/react-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", + "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/react-virtual": { + "version": "3.13.24", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.24.tgz", + "integrity": "sha512-aIJvz5OSkhNIhZIpYivrxrPTKYsjW9Uzy+sP/mx0S3sev2HyvPb7xmjbYvokzEpfgYHy/HjzJ2zFAETuUfgCpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.14.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.14.0.tgz", + "integrity": "sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tiptap/core": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.22.4.tgz", + "integrity": "sha512-vGIGm/HpqLg8EAAQXQ+koV+/S828OEpzocfWcPOwo1u2QUVf9dQG47Yy6JJ8zFFaJwfv4dBcOXli+7BrJwsxDQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.22.4.tgz", + "integrity": "sha512-7/61kNPbGFhMgM//zMknD0pSb69rGdRIkpulXOWS1JBrFHkH6hjZDfrOETNzgKkO+NlmzVl9rXSTv0xauS3lzA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.22.4.tgz", + "integrity": "sha512-jIaPKfNOQu2lhpbLDvtwlQqM+mjF+Kk+auHpzYjBnsuwUli1Cl5ZOau7RH+rru/SQvZe1DtpQlANujDywugZAA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.22.4.tgz", + "integrity": "sha512-v4pux5Ql3THAEjaLMY4ldtdy/Xy2qU7PJLBkq8ugLp8qicaKC+tpqxp6sGif4vLIjz7Ap5hurRbTNbXzszyyHA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.22.4.tgz", + "integrity": "sha512-TB+d3fGcTixYjO7coKqTr1mGTJuqr8hjDCPUFgzuvKyJnBhqWITmBzQ/8CLq4rr6mihgGURbD3N+xkQuPAKFiw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.22.4.tgz", + "integrity": "sha512-cnbxmVhAcc7X3G81QUYEmKP0ve2hRmvAiFXBuuv9RUtQlBiRnzmhHoJOMgkX0CsMR7+8kMRpTfeDUYq2xp5s5w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.22.4.tgz", + "integrity": "sha512-MEurzNXfMET3rhjpoPJYUgMfxTdTqbzT9+ToFrqNGAHocdXVm6m1hhO2frVC7fEtHPnxXKsn0Z3NUbCRkRTLuA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-color": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-3.22.4.tgz", + "integrity": "sha512-1vDuVsrOETshe4j4nZhWalbKYcWfNybRCe30h829ExX06XwFryUYLb/LgTIaGCr9beWZUldsK+vOkBWdDTGMTw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-text-style": "3.22.4" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.22.4.tgz", + "integrity": "sha512-XQKla1+703FqQJC48tPDVgt9ucGiFbIEmQdOg5L5o07z9a6/NzuaZAc+1zJ7NxcUZzy+z6wBn1PrVMTiqiSXlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.22.4.tgz", + "integrity": "sha512-N9/yMDC35jJp0V/naL0+6gi4gUDUIcPpWEzFdCDWUSYBA8mt41c1kI1ZU7UTKYIBzTClenhYHRc2XKZxxx0+LQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.22.4.tgz", + "integrity": "sha512-DFuyYxgaZPgxum5z1yvJPbfYCvDdO8geXsdyqt0qYYdiat3aGE4ncJhiLRIFDhSHBhaZg5eCgu/YPYAN6jZnrA==", + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@floating-ui/dom": "^1.0.0", + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.22.4.tgz", + "integrity": "sha512-UYBEUj3SFpKINIE7AdzcyeS3xICK+ee+YLBbuqNXyHStYChjJOohzJehqiqhjR16A88KQQ+ZjgyDcItKGygSog==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.22.4.tgz", + "integrity": "sha512-xq+a4dE7T6VwApCkh/yU3p30gn3F8g8Arb9CyEZm58/WIJUIGvHSTjDdHmvU16+kiWSBg+wOOsaFHhYjJjxcKA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.22.4.tgz", + "integrity": "sha512-TUaj5f0Ir5qy9HKKt2ocnwfXKpZDYeHgbbP9gshKFzdq5PLe1RbIgkjfy6bnoI865cYjmPYWRjcT7XsKyIcb9Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-history": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-3.22.4.tgz", + "integrity": "sha512-yk1RrBJty4F3Os+w6zIS3nOSOKy+iIax3UyXwCKiP+JI4nsTlYvgQTgTtT9Wqa14ZrypasV8gAuQeTNf/spFLg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.22.4.tgz", + "integrity": "sha512-cCI1HekGQwhY/MbgaKQ0R/7HcH5ZM1oFAyI/J72QGLC0XnF403S/OXoHMuBWr1mCu8hNiQWCzeNRJUty0iytNw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-image": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.22.4.tgz", + "integrity": "sha512-ZDc+fLaratTQ4IgnKcJJwfUgUgpcHjbZSBi6UQAILJwkflMy1Zxj8mpbma5P934nLSI+uDnR5ret6ZZLNITKhA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-invisible-characters": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-invisible-characters/-/extension-invisible-characters-3.22.4.tgz", + "integrity": "sha512-KfEgd4p2dcw+qQKI+0drj6Q2uqUOdCEEK1WO2DlbmV5JbpG8yOPhZbLI8bnYaPqWW/leAAHdszOwq93yO2HORg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/extension-text-style": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.22.4.tgz", + "integrity": "sha512-fVSDx5AYXgDI3v2zZIqb7V8EewthwM2NJ/ZCX+XaxRsqNEpnjVhgHs7UlvDqK1wj2OJ6zmUNjPtVlAFRxwT+HQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-link": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.22.4.tgz", + "integrity": "sha512-uoP3yus02uwGPVzW2QaEPJWVIrUb/r5nKm6c8DiJv9fNSX1+gykZZMg42c6GwRFLZ/vyfWjVCbAE03VMUqafgA==", + "license": "MIT", + "dependencies": { + "linkifyjs": "^4.3.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-list": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.22.4.tgz", + "integrity": "sha512-Xe8UFvvHmyp/c/TJsFwlwU9CWACYbBirNsluJ3U1+H8BTu1wqdrT/AXR5uIXeyCl5kiWKgX5q71eHWbYFOrqrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.22.4.tgz", + "integrity": "sha512-H659KXTvggSypIDWSOJBZ37jh9pKjQriDDvYPYvOZCdfij0D0hsDXN/wXoypArneUkoBdgruHfTtMkFOaQlgkw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-list-keymap": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.22.4.tgz", + "integrity": "sha512-t/zhker4oIS78AIGYDdFFfZC6zSBlszfD7z/zqFLGCg5PHNNgkZK5hKj6Vyix6D2SapRn/ajnx+8mhbKIUH5eA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.22.4.tgz", + "integrity": "sha512-w77hPVf7pcHt97vfrybg/l0t5CimCd4y75OJKuHuo3CfgM5xbUP/gaPNMDyLLe7MYole/UHi/XvG3XjgzqTzAw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.22.4.tgz", + "integrity": "sha512-de6dFkIhigiENESY6rNJ3yTVS/337ybfP30dNPudTwGe9oAu9ZCS+04j6QCvXSjhlI3ULiv7wiSHqrP26Gd+Hw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-placeholder": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.22.4.tgz", + "integrity": "sha512-Z3wtWL+KufwkC7CkJge5enAxx4q8C3oOYixme02snY9zfjX3V/1pjAmEfP4wxScgM5GIuTEJ83B9Yz3wRzPA6Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.22.4.tgz", + "integrity": "sha512-aRHWQj42HiailXSC9LkKYM3jWMcSeGwOjbqM4PiuxQZmHVDRFmeHkfJItOdn2cSHaO0vuEVK+TvrWUWsBFi3pg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-subscript": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-3.22.4.tgz", + "integrity": "sha512-95Uwi8jEYVr/qil7tGZhG87wR0SNIUBZXSFcDkDeFBzRdccofwD2XL2HU5FqWm2IPNuE21lQWPImVspXR0Kzyw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-superscript": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-3.22.4.tgz", + "integrity": "sha512-VGNR67uTmdTfRC5+1HqtAfA+kK6Lbh9tXitcIs8Scwxlq89PBOUEs11RnzcXfwv5hYq94WjgQJF3A99Jc9Cg2w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-table": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-3.22.4.tgz", + "integrity": "sha512-kjvLv3Z4JI+1tLDqZKa+bKU8VcxY+ZOyMCKWQA7wYmy8nKWkLJ60W+xy8AcXXpHB2goCIgSFLhsTyswx0GXH4w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-table-cell": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-3.22.4.tgz", + "integrity": "sha512-uvFegCc1UQYK2nfIV2sIHg+hzLIMroJJm00XomzBgC1w/eSO7Ui8APiDh/baBcTPpCSU3SLiQLTgx7AU7oE3pg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-table": "3.22.4" + } + }, + "node_modules/@tiptap/extension-table-header": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-3.22.4.tgz", + "integrity": "sha512-V4kLLWeRdc/I+IXiXZZhLAjsaHHiJWuLXTuOtZRDrCxQUiFLi4AgNg1DPQ09JAANkEWDhXq3x6BoUXaFwumbEw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-table": "3.22.4" + } + }, + "node_modules/@tiptap/extension-table-row": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-3.22.4.tgz", + "integrity": "sha512-9tdS6jgS6DqUu5TpEmNrRoo/DL5Xam0PyrQaUEXUC+ssci+bMRCJ8PAWMcunNsI9NKf/Tb3wYrv6hGFChaT9uA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-table": "3.22.4" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.22.4.tgz", + "integrity": "sha512-mM69uUW5cSxIhyEpWXi/YcfyupcJMDLCPEfYi62awH0iOP/LRoCv/nHjJq4Hyj/KxRJbe8HKwIUnqaCUf7m5Pg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-text-align": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-3.22.4.tgz", + "integrity": "sha512-W7TnXWSyfDXSatGXp5y/CahE8G4btrQPb0/sy+eG+42FxdzYsqvh1ys3OE9j2XSuTrZ1q/tZA/NLPUkc7vw6Kw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-text-style": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.22.4.tgz", + "integrity": "sha512-24DVBdySNKq3ovY+v9ERVxAyHStDa6ftUlyoHuZv0YXQ2amjUNOmqQtGEHBIULpCbBb1jZ+atHhv9MBZ0Ia9Pw==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-underline": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.22.4.tgz", + "integrity": "sha512-08kGdbhIrA6h10GWXqOkqIveaBj5tmxclK208/nUIAlonI9hPd739vu7fmVtpnmqCnSSNpoRtU4u6Gj5at0ZpA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extensions": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.22.4.tgz", + "integrity": "sha512-fOe8VptJvLPs32bNdUYo8SRyljwqKNQVXWW056VoXIc5en/59OdJlJQVeHI0jRRciH3MtrqODi/gfJR0VHNZ8A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/pm": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.22.4.tgz", + "integrity": "sha512-hj8Qka6WcHRllHUdeSjDnq2XaisUo4KsoGJc1WcFpoa1Yd+OeD861zUMnV7DFVGdZRy45Obht0CUYJpXQ4yA4w==", + "license": "MIT", + "dependencies": { + "prosemirror-changeset": "^2.3.0", + "prosemirror-commands": "^1.6.2", + "prosemirror-dropcursor": "^1.8.1", + "prosemirror-gapcursor": "^1.3.2", + "prosemirror-history": "^1.4.1", + "prosemirror-keymap": "^1.2.2", + "prosemirror-model": "^1.24.1", + "prosemirror-schema-list": "^1.5.0", + "prosemirror-state": "^1.4.3", + "prosemirror-tables": "^1.6.4", + "prosemirror-transform": "^1.10.2", + "prosemirror-view": "^1.38.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/react": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.22.4.tgz", + "integrity": "sha512-XIQZPwLakR1t8+Q1UeCpr+kUHDWxpJzGy9r2xUi3mpPd6Wh8dtNltScBkUlCcr0sqc6J1GF6Is02JJVQGmCZMA==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "fast-equals": "^5.3.3", + "use-sync-external-store": "^1.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "optionalDependencies": { + "@tiptap/extension-bubble-menu": "^3.22.4", + "@tiptap/extension-floating-menu": "^3.22.4" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.22.4.tgz", + "integrity": "sha512-qWjw+vfdin1rzMRpRU4cC5tLTwMJtUpXeQukv+6mOqqvhptuwuZBjUHImVEJaSPoHXS7+1ut+nTnrLyWyEuE5Q==", + "license": "MIT", + "dependencies": { + "@tiptap/core": "^3.22.4", + "@tiptap/extension-blockquote": "^3.22.4", + "@tiptap/extension-bold": "^3.22.4", + "@tiptap/extension-bullet-list": "^3.22.4", + "@tiptap/extension-code": "^3.22.4", + "@tiptap/extension-code-block": "^3.22.4", + "@tiptap/extension-document": "^3.22.4", + "@tiptap/extension-dropcursor": "^3.22.4", + "@tiptap/extension-gapcursor": "^3.22.4", + "@tiptap/extension-hard-break": "^3.22.4", + "@tiptap/extension-heading": "^3.22.4", + "@tiptap/extension-horizontal-rule": "^3.22.4", + "@tiptap/extension-italic": "^3.22.4", + "@tiptap/extension-link": "^3.22.4", + "@tiptap/extension-list": "^3.22.4", + "@tiptap/extension-list-item": "^3.22.4", + "@tiptap/extension-list-keymap": "^3.22.4", + "@tiptap/extension-ordered-list": "^3.22.4", + "@tiptap/extension-paragraph": "^3.22.4", + "@tiptap/extension-strike": "^3.22.4", + "@tiptap/extension-text": "^3.22.4", + "@tiptap/extension-underline": "^3.22.4", + "@tiptap/extensions": "^3.22.4", + "@tiptap/pm": "^3.22.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" } }, "node_modules/@types/estree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", - "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", - "dev": true + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" }, - "node_modules/@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", - "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", + "node_modules/@types/fs-extra": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", + "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", "dev": true, - "peer": true + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", - "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", - "dev": true, + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "devOptional": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.25.1" + "undici-types": "~7.19.0" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", - "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", - "dev": true, - "peer": true + "node_modules/@types/pluralize": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.33.tgz", + "integrity": "sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==", + "license": "MIT" }, - "node_modules/@types/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", - "dev": true - }, - "node_modules/@types/toastify-js": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.1.tgz", - "integrity": "sha512-9CTM+LKFmS0+Ii+RH55XPKcmNxCjLticj8kxeCxa7PnSVCZPQurb9XtKQtoMl/fv7WaqUpRezDcFuY8n92CtUg==", - "dev": true - }, - "node_modules/@types/vue-select": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@types/vue-select/-/vue-select-3.16.5.tgz", - "integrity": "sha512-hL0aNZHALvJSPZCNP1Z4uDivQ2uAxOFiPJESajETjUb9HNrCz8+WtkI1LVuowBf4c31JkY5am1OyLGQhiuZseg==", - "dev": true, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "license": "MIT", "dependencies": { - "vue": "^2.0.0" + "csstype": "^3.2.2" } }, - "node_modules/@types/vue-select/node_modules/@vue/compiler-sfc": { - "version": "2.7.14", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", - "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "node_modules/@types/react-color": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.13.tgz", + "integrity": "sha512-2c/9FZ4ixC5T3JzN0LP5Cke2Mf0MKOP2Eh0NPDPWmuVH3NjPyhEjqNMQpN1Phr5m74egAy+p2lYNAFrX1z9Yrg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.18.4", - "postcss": "^8.4.14", - "source-map": "^0.6.1" + "@types/reactcss": "*" + }, + "peerDependencies": { + "@types/react": "*" } }, - "node_modules/@types/vue-select/node_modules/vue": { - "version": "2.7.14", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", - "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", - "dev": true, - "dependencies": { - "@vue/compiler-sfc": "2.7.14", - "csstype": "^3.1.0" + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" } }, + "node_modules/@types/reactcss": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.13.tgz", + "integrity": "sha512-gi3S+aUi6kpkF5vdhUsnkwbiSEIU/BEJyD7kBy2SudWBUuKmJk8AQKE0OVcQQeEy40Azh0lV6uynxlikYIJuwg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.5.tgz", - "integrity": "sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz", + "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/type-utils": "6.7.5", - "@typescript-eslint/utils": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/type-utils": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.59.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", - "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz", + "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "debug": "^4.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz", + "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.59.0", + "@typescript-eslint/types": "^8.59.0", + "debug": "^4.4.3" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", - "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", + "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5" + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.5.tgz", - "integrity": "sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz", + "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==", "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/utils": "6.7.5", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz", + "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", - "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz", + "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==", "dev": true, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2758,410 +5996,443 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", - "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz", + "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@typescript-eslint/project-service": "8.59.0", + "@typescript-eslint/tsconfig-utils": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", - "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz", + "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "semver": "^7.5.4" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", - "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz", + "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.7.5", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.59.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@vitejs/plugin-legacy": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz", - "integrity": "sha512-um3gbVouD2Q/g19C0qpDfHwveXDCAHzs8OC3e9g6aXpKoD1H14himgs7wkMnhAynBJy7QqUoZNAXDuqN8zLR2g==", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@babel/core": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "browserslist": "^4.21.9", - "core-js": "^3.31.1", - "magic-string": "^0.30.1", - "regenerator-runtime": "^0.13.11", - "systemjs": "^6.14.1" + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@uwil/husky-config": { + "version": "1.0.1", + "resolved": "https://lab.s-web.fr/api/v4/projects/259/packages/npm/@uwil/husky-config/-/@uwil/husky-config-1.0.1.tgz", + "integrity": "sha1-VGchal1LcEFXNFsQZxh5pn4495Q=", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@commitlint/cli": "^20.5.0", + "@commitlint/config-conventional": "^20.5.0", + "husky": "^9.1.7" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, "peerDependencies": { - "terser": "^5.4.0", - "vite": "^4.0.0" + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/@vitejs/plugin-vue": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz", - "integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@volar/language-core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.4.1.tgz", - "integrity": "sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==", - "dev": true, - "dependencies": { - "@volar/source-map": "1.4.1" - } - }, - "node_modules/@volar/source-map": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.4.1.tgz", - "integrity": "sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==", - "dev": true, - "dependencies": { - "muggle-string": "^0.2.2" - } - }, - "node_modules/@volar/typescript": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.4.1.tgz", - "integrity": "sha512-phTy6p9yG6bgMIKQWEeDOi/aeT0njZsb1a/G1mrEuDsLmAn24Le4gDwSsGNhea6Uhu+3gdpUZn2PmZXa+WG2iQ==", - "dev": true, - "dependencies": { - "@volar/language-core": "1.4.1" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/@volar/vue-language-core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-1.6.0.tgz", - "integrity": "sha512-oyX+A4vclBlDB7UQtfAPraD6tt3nE+y9YNXdH+xjDi//Cokdx65PZnwLaiG+hURI6WgDn1ZQffTE1OeJtr786A==", - "dev": true, - "dependencies": { - "@volar/language-core": "1.4.1", - "@volar/source-map": "1.4.1", - "@vue/compiler-dom": "^3.2.0", - "@vue/compiler-sfc": "^3.2.0", - "@vue/reactivity": "^3.2.0", - "@vue/shared": "^3.2.0", - "minimatch": "^9.0.0", - "muggle-string": "^0.2.2", - "vue-template-compiler": "^2.7.14" - } - }, - "node_modules/@volar/vue-language-core/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@volar/vue-language-core/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@volar/vue-typescript": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-1.6.0.tgz", - "integrity": "sha512-Ob5X/XICtwCFwHDo9zUhQuCIH4QmiDWX7DgQkuPBZkO18mirp27ymRJk2Q5EtHKedGQnTce/NRsoqjn8DnyLKw==", - "deprecated": "WARNING: This project has been renamed to @vue/typescript. Install using @vue/typescript instead.", - "dev": true, - "dependencies": { - "@volar/typescript": "1.4.1", - "@volar/vue-language-core": "1.6.0" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", - "dev": true, - "dependencies": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", - "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/eslint-config-typescript": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz", - "integrity": "sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "vue-eslint-parser": "^9.3.1" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", - "eslint-plugin-vue": "^9.0.0", - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "dev": true, - "dependencies": { - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "dev": true, - "dependencies": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "dev": true, - "dependencies": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "dev": true, - "dependencies": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" - }, - "peerDependencies": { - "vue": "3.3.4" - } - }, - "node_modules/@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", - "dev": true - }, - "node_modules/@vue/tsconfig": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.4.0.tgz", - "integrity": "sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==", - "dev": true - }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3174,67 +6445,67 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, "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==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3243,163 +6514,424 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "license": "MIT" }, - "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz", - "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3", - "core-js-compat": "^3.32.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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==", - "dev": true, + "node_modules/attr-accept": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bootstrap": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", - "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", + "node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/twbs" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, "peerDependencies": { - "@popperjs/core": "^2.11.8" + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.3.tgz", + "integrity": "sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", + "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.21", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.21.tgz", + "integrity": "sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -3415,11 +6947,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -3428,55 +6962,102 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "node_modules/cacheable": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.4.tgz", + "integrity": "sha512-djgxybDbw9fL/ZWMI3+CE8ZilNxcwFkVtDc1gJ+IlOSSWkSMPQabhV/XCHTQ6pwwN6aivXPZ43omTooZiX06Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.0.8", + "@cacheable/utils": "^2.4.0", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.9.0" + } + }, + "node_modules/cacheable/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "dev": true, - "optional": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001547", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", - "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", + "version": "1.0.30001790", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz", + "integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==", "dev": true, "funding": [ { @@ -3491,100 +7072,153 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chart.js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz", - "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "@kurkle/color": "^0.3.0" + "has-flag": "^4.0.0" }, "engines": { - "pnpm": ">=7" + "node": ">=8" } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, "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" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/chokidar/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==", - "dev": true, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", "dependencies": { - "is-glob": "^4.0.1" + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 6" + "node": ">=12" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "devOptional": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3593,58 +7227,126 @@ } }, "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "license": "MIT" + }, + "node_modules/conventional-changelog-angular": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.1.tgz", + "integrity": "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.3.1.tgz", + "integrity": "sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-commits-parser": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.4.0.tgz", + "integrity": "sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0", + "meow": "^13.0.0" + }, + "bin": { + "conventional-commits-parser": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/core-js": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.0.tgz", - "integrity": "sha512-HoZr92+ZjFEKar5HS6MC776gYslNOKHt75mEBKWKnPeFDpZ6nH5OeF3S6HFT1mUAUZKrzkez05VboaX8myjSuw==", "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", - "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", - "dev": true, - "dependencies": { - "browserslist": "^4.22.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } + "license": "MIT" }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -3661,17 +7363,30 @@ } } }, - "node_modules/cropperjs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.6.1.tgz", - "integrity": "sha512-F4wsi+XkDHCOMrHMYjrTEE4QBOrsHHN5/2VsVAaRq8P7E5z7xQpT75S+f/9WikmBEailas3+yo+6zPIomW+NOA==", - "dev": true + "node_modules/cosmiconfig-typescript-loader": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.3.0.tgz", + "integrity": "sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jiti": "2.6.1" + }, + "engines": { + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" + } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3682,24 +7397,24 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", - "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz", + "integrity": "sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=12.22" + "node": ">=12" } }, "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" @@ -3710,6 +7425,7 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -3718,24 +7434,97 @@ } }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" }, - "node_modules/de-indent": { + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "dev": true, + "license": "MIT" }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3746,63 +7535,87 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "peer": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -3810,11 +7623,19 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -3822,98 +7643,334 @@ "node": ">=6.0.0" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { - "version": "1.4.551", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.551.tgz", - "integrity": "sha512-/Ng/W/kFv7wdEHYzxdK7Cv0BHEGSkSB3M0Ssl8Ndr1eMiYeas/+Mv4cNaDqamqWx6nd2uQZfPz6g25z25M/sdw==", - "dev": true + "version": "1.5.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", + "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", + "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "hasInstallScript": true, - "peer": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "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" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", - "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.51.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3955,65 +8012,487 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-vue": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", - "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", - "vue-eslint-parser": "^9.3.1", - "xml-name-validator": "^4.0.0" + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" } }, - "node_modules/eslint-plugin-vue/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" }, "engines": { - "node": ">=10" + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" } }, - "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, - "node_modules/eslint-plugin-vue/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-context": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz", + "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-context" + }, + "peerDependencies": { + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz", + "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==", + "dev": true, + "license": "ISC", + "dependencies": { + "debug": "^4.4.1", + "eslint-import-context": "^0.1.8", + "get-tsconfig": "^4.10.1", + "is-bun-module": "^2.0.0", + "stable-hash-x": "^0.2.0", + "tinyglobby": "^0.2.14", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^16.17.0 || >=18.6.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -4030,6 +8509,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4037,113 +8517,69 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, "node_modules/espree": { @@ -4151,6 +8587,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -4164,10 +8601,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -4180,6 +8618,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -4192,21 +8631,17 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -4215,19 +8650,37 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-equals": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", + "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==", + "license": "MIT", + "engines": { + "node": ">=6.0.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==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "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" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -4238,6 +8691,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4249,38 +8703,76 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } }, "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==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -4288,11 +8780,24 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-selector": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", + "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", + "license": "MIT", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">= 12" + } + }, "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==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4305,6 +8810,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -4316,37 +8822,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "node_modules/flag-icons": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/flag-icons/-/flag-icons-7.5.0.tgz", + "integrity": "sha512-kd+MNXviFIg5hijH766tt+3x76ele1AXlo4zDdCxIvqWZhKt4T83bOtxUOOMlTx/EcFdUMH5yvQgYlFh1EqqFg==", "dev": true, + "license": "MIT" + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", - "dev": true, + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -4356,46 +8871,107 @@ } } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { "node": ">= 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==", + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz", + "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.38.0", + "motion-utils": "^12.36.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=14.14" + "node": ">=6 <7 || >=8" } }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -4404,26 +8980,177 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/glightbox": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/glightbox/-/glightbox-3.2.0.tgz", - "integrity": "sha512-iit1xYixqL4YVL+I2YJLfMeyJwvLi6FE6kY3qNKeZHEJgRIz80QU8Rm7YCyw1wOTgXvmNDnXGVhHOHRCwnDltQ==", - "dev": true + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/git-raw-commits": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-5.0.1.tgz", + "integrity": "sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@conventional-changelog/git-client": "^2.6.0", + "meow": "^13.0.0" + }, + "bin": { + "git-raw-commits": "src/cli.js" + }, + "engines": { + "node": ">=18" + } }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4444,6 +9171,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -4451,12 +9179,59 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" }, @@ -4469,7 +9244,7 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -4479,12 +9254,19 @@ "node": ">=6" } }, + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "peer": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4493,129 +9275,14 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "type-fest": "^0.20.2" }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true, - "peer": true - }, - "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/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "peer": true, "engines": { "node": ">=8" }, @@ -4623,26 +9290,249 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "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==", - "dev": true + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "devOptional": true, + "license": "MIT" }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4654,14 +9544,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { + "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/imurmurhash": { @@ -4669,26 +9570,18 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4698,27 +9591,101 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, - "peer": true + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "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==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4726,13 +9693,92 @@ "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==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4742,26 +9788,64 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4769,61 +9853,301 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "peer": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4832,47 +10156,65 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/json-edit-react": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/json-edit-react/-/json-edit-react-1.29.0.tgz", + "integrity": "sha512-qxho/m0w6GCaKLic6XsZgmCrKKwluMvoy92teRBRus1PRHJQiP4pkFQJ90lmrno1KNgSePYIG0mcscS0GjdH3A==", + "license": "MIT", + "dependencies": { + "object-property-assigner": "^1.3.5", + "object-property-extractor": "^1.0.13" + }, + "peerDependencies": { + "react": ">=16.0.0" + } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -4881,22 +10223,37 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -4906,31 +10263,65 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/known-css-properties": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", - "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", - "dev": true - }, - "node_modules/laravel-vite-plugin": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.8.1.tgz", - "integrity": "sha512-fxzUDjOA37kOsYq8dP+3oPIlw8/kJVXwu0hOXLun82R1LpV02shGeWGYKx2lbpKffL5I0sfPPjfqbYxuqBluAA==", + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", + "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", "dev": true, + "license": "MIT" + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "vite-plugin-full-reload": "^1.0.5" + "language-subtag-registry": "^0.3.20" }, "engines": { - "node": ">=14" + "node": ">=0.10" + } + }, + "node_modules/laravel-precognition": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/laravel-precognition/-/laravel-precognition-1.0.2.tgz", + "integrity": "sha512-0H08JDdMWONrL/N314fvsO3FATJwGGlFKGkMF3nNmizVFJaWs17816iM+sX7Rp8d5hUjYCx6WLfsehSKfaTxjg==", + "license": "MIT", + "dependencies": { + "axios": "^1.4.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.3.0.tgz", + "integrity": "sha512-P5qyG56YbYxM8OuYmK2OkhcKe0AksNVJUjq9LUZ5tOekU9fBn9LujYyctI4t9XoLjuMvHJXXpCoPntY1oKltuA==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" + "vite": "^5.0.0 || ^6.0.0" } }, "node_modules/levn": { @@ -4938,6 +10329,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -4946,18 +10338,300 @@ "node": ">= 0.8.0" } }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "devOptional": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/linkifyjs": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", + "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==", + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -4969,68 +10643,127 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.pick": { + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.startcase": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/magic-string": { - "version": "0.30.4", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", - "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "node_modules/lucide-react": { + "version": "0.503.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.503.0.tgz", + "integrity": "sha512-HGGkdlPWQ0vTF8jJ5TdIqhQXZi6uh3LnNgfZ8MHiuxFfX3RZeA79r2MW2tHAZKlAVfoNE8esm3p+O6VkIvpj6w==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, "node_modules/mathml-tag-names": { @@ -5038,56 +10771,27 @@ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, - "peer": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", "dev": true, - "peer": true + "license": "CC0-1.0" }, "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5098,28 +10802,43 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "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==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5128,7 +10847,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -5136,75 +10855,113 @@ "node": ">= 0.6" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "*" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "peer": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "node": "18 || 20 || >=22" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "engines": { - "node": "*" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.38.0.tgz", + "integrity": "sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.38.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz", + "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.36.0" + } + }, + "node_modules/motion-utils": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", + "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", + "license": "MIT" + }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, - "node_modules/muggle-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.2.2.tgz", - "integrity": "sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==", - "dev": true + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } }, "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==", - "dev": true, + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5212,101 +10969,223 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "peer": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/node-releases": { + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", "dev": true, - "peer": true + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, - "dependencies": { - "boolbase": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-property-assigner": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/object-property-assigner/-/object-property-assigner-1.3.5.tgz", + "integrity": "sha512-DIzHzNSTnpoG8QPQCDNrHa6O3vLMhktK3Igirqpk523UYIVe8JNCKcn5C9WyLQxJc58EGsAIiiEu10gqPrud8w==", + "license": "MIT" + }, + "node_modules/object-property-extractor": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/object-property-extractor/-/object-property-extractor-1.0.14.tgz", + "integrity": "sha512-euG3MQwj41DMbfk1keguY+jKQvaf9r26NeECtb28G8jABnhZVqxVEvIFywWC2107cSgx8dimA+JXuCAZFfbsSg==", + "license": "MIT" + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { @@ -5314,32 +11193,59 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT" + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5355,6 +11261,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -5365,22 +11272,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -5393,7 +11290,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5412,6 +11309,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5421,6 +11319,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5430,6 +11329,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5438,40 +11338,81 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", "funding": [ { "type": "opencollective", @@ -5486,54 +11427,204 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-discard-comments": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", - "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=14.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", - "dev": true - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "dev": true, - "peer": true, + "license": "MIT" + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, "engines": { "node": ">=12.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.31" } }, "node_modules/postcss-scss": { @@ -5555,6 +11646,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "engines": { "node": ">=12.0" }, @@ -5563,10 +11655,11 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -5580,6 +11673,7 @@ "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", "dev": true, + "license": "MIT", "peerDependencies": { "postcss": "^8.4.20" } @@ -5588,22 +11682,25 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -5614,27 +11711,225 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/print-js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz", - "integrity": "sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==", - "dev": true + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prosemirror-changeset": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.1.tgz", + "integrity": "sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==", + "license": "MIT", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", + "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.10.2" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", + "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz", + "integrity": "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz", + "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", + "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.25.4", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz", + "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==", + "license": "MIT", + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", + "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz", + "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz", + "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.2.3", + "prosemirror-model": "^1.25.4", + "prosemirror-state": "^1.4.4", + "prosemirror-transform": "^1.10.5", + "prosemirror-view": "^1.41.4" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.0.tgz", + "integrity": "sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.21.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.41.8", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.8.tgz", + "integrity": "sha512-TnKDdohEatgyZNGCDWIdccOHXhYloJwbwU+phw/a23KBvJIR9lWQWW7WHHK3vBdOLDNuF7TaX98GObUZOWkOnA==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/qified": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.9.1.tgz", + "integrity": "sha512-n7mar4T0xQ+39dE2vGTAlbxUEpndwPANH0kDef1/MYsB8Bba9wshkybIRx74qgcvKQPEWErf9AqAdYjhzY2Ilg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qified/node_modules/hookified": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.1.1.tgz", + "integrity": "sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA==", + "dev": true, + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/qs-esm": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/qs-esm/-/qs-esm-7.0.3.tgz", + "integrity": "sha512-8jbjCR0PPbqoQcv83C2K/zvVeytRPwPpt3WPDbq51qyLAxcWGtXVRjSe6GHtLCoVbg9+NEFkv7GyUxqjcDIJzw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=18" + }, + "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", @@ -5653,266 +11948,307 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/react-aria": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.48.0.tgz", + "integrity": "sha512-jQjd4rBEIMqecBaAKYJbVGK6EqIHLa5znVQ7jwFyK5vCyljoj6KhgtiahmcIPsG5vG5vEDLw+ba+bEWn6A2P4w==", "dev": true, - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "@internationalized/date": "^3.12.1", + "@internationalized/number": "^3.6.6", + "@internationalized/string": "^3.2.8", + "@react-types/shared": "^3.34.0", + "@swc/helpers": "^0.5.0", + "aria-hidden": "^1.2.3", + "clsx": "^2.0.0", + "react-stately": "3.46.0", + "use-sync-external-store": "^1.6.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/react-color": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", + "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "@icons/material": "^0.2.4", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-day-picker": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.14.0.tgz", + "integrity": "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "@tabby_ai/hijri-converter": "1.0.5", + "date-fns": "^4.1.0", + "date-fns-jalali": "4.1.0-0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-dropzone": { + "version": "14.4.1", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.4.1.tgz", + "integrity": "sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g==", + "license": "MIT", + "dependencies": { + "attr-accept": "^2.2.4", + "file-selector": "^2.1.0", + "prop-types": "^15.8.1" }, "engines": { - "node": ">=8" + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" } }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/react-image-crop": { + "version": "11.0.10", + "resolved": "https://registry.npmjs.org/react-image-crop/-/react-image-crop-11.0.10.tgz", + "integrity": "sha512-+5FfDXUgYLLqBh1Y/uQhIycpHCbXkI50a+nbfkB1C0xXXUTwkisHDo2QCB1SQJyHCqIuia4FeyReqXuMDKWQTQ==", + "license": "ISC", + "peerDependencies": { + "react": ">=16.13.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", "dev": true, - "optional": true, - "peer": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/react-stately": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.46.0.tgz", + "integrity": "sha512-OdxhWvHgs2L4OJGIs7hnuTr5WjjMM6enhNEAMRqiekhF8+ITvA2LRwNftOZwcogaoCslGYq5S2VQTQwnm0GbCA==", "dev": true, - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "p-limit": "^2.2.0" + "@internationalized/date": "^3.12.1", + "@internationalized/number": "^3.6.6", + "@internationalized/string": "^3.2.8", + "@react-types/shared": "^3.34.0", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "lodash": "^4.0.1" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" } }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", "optional": true, - "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { - "regenerate": "^1.4.2" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "node": ">=0.10.0" } }, "node_modules/require-from-string": { @@ -5920,42 +12256,61 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -5965,7 +12320,9 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -5977,22 +12334,72 @@ } }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, - "peer": true, + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", + "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.2", + "@rollup/rollup-android-arm64": "4.60.2", + "@rollup/rollup-darwin-arm64": "4.60.2", + "@rollup/rollup-darwin-x64": "4.60.2", + "@rollup/rollup-freebsd-arm64": "4.60.2", + "@rollup/rollup-freebsd-x64": "4.60.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", + "@rollup/rollup-linux-arm-musleabihf": "4.60.2", + "@rollup/rollup-linux-arm64-gnu": "4.60.2", + "@rollup/rollup-linux-arm64-musl": "4.60.2", + "@rollup/rollup-linux-loong64-gnu": "4.60.2", + "@rollup/rollup-linux-loong64-musl": "4.60.2", + "@rollup/rollup-linux-ppc64-gnu": "4.60.2", + "@rollup/rollup-linux-ppc64-musl": "4.60.2", + "@rollup/rollup-linux-riscv64-gnu": "4.60.2", + "@rollup/rollup-linux-riscv64-musl": "4.60.2", + "@rollup/rollup-linux-s390x-gnu": "4.60.2", + "@rollup/rollup-linux-x64-gnu": "4.60.2", + "@rollup/rollup-linux-x64-musl": "4.60.2", + "@rollup/rollup-openbsd-x64": "4.60.2", + "@rollup/rollup-openharmony-arm64": "4.60.2", + "@rollup/rollup-win32-arm64-msvc": "4.60.2", + "@rollup/rollup-win32-ia32-msvc": "4.60.2", + "@rollup/rollup-win32-x64-gnu": "4.60.2", + "@rollup/rollup-win32-x64-msvc": "4.60.2", "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-copy": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz", + "integrity": "sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6012,18 +12419,85 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, - "node_modules/sass": { - "version": "1.69.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.3.tgz", - "integrity": "sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==", - "dev": true, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sass": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", + "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.1.5", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -6031,15 +12505,415 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, + "node_modules/sass-embedded": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.99.0.tgz", + "integrity": "sha512-gF/juR1aX02lZHkvwxdF80SapkQeg2fetoDF6gIQkNbSw5YEUFspMkyGTjPjgZSgIHuZpy+Wz4PlebKnLXMjdg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.99.0", + "sass-embedded-android-arm": "1.99.0", + "sass-embedded-android-arm64": "1.99.0", + "sass-embedded-android-riscv64": "1.99.0", + "sass-embedded-android-x64": "1.99.0", + "sass-embedded-darwin-arm64": "1.99.0", + "sass-embedded-darwin-x64": "1.99.0", + "sass-embedded-linux-arm": "1.99.0", + "sass-embedded-linux-arm64": "1.99.0", + "sass-embedded-linux-musl-arm": "1.99.0", + "sass-embedded-linux-musl-arm64": "1.99.0", + "sass-embedded-linux-musl-riscv64": "1.99.0", + "sass-embedded-linux-musl-x64": "1.99.0", + "sass-embedded-linux-riscv64": "1.99.0", + "sass-embedded-linux-x64": "1.99.0", + "sass-embedded-unknown-all": "1.99.0", + "sass-embedded-win32-arm64": "1.99.0", + "sass-embedded-win32-x64": "1.99.0" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.99.0.tgz", + "integrity": "sha512-qPIRG8Uhjo6/OKyAKixTnwMliTz+t9K6Duk0mx5z+K7n0Ts38NSJz2sjDnc7cA/8V9Lb3q09H38dZ1CLwD+ssw==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.99.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.99.0.tgz", + "integrity": "sha512-EHvJ0C7/VuP78Qr6f8gIUVUmCqIorEQpw2yp3cs3SMg02ZuumlhjXvkTcFBxHmFdFR23vTNk1WnhY6QSeV1nFQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.99.0.tgz", + "integrity": "sha512-fNHhdnP23yqqieCbAdym4N47AleSwjbNt6OYIYx4DdACGdtERjQB4iOX/TaKsW034MupfF7SjnAAK8w7Ptldtg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.99.0.tgz", + "integrity": "sha512-4zqDFRvgGDTL5vTHuIhRxUpXFoh0Cy7Gm5Ywk19ASd8Settmd14YdPRZPmMxfgS1GH292PofV1fq1ifiSEJWBw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.99.0.tgz", + "integrity": "sha512-Uk53k/dGYt04RjOL4gFjZ0Z9DH9DKh8IA8WsXUkNqsxerAygoy3zqRBS2zngfE9K2jiOM87q+1R1p87ory9oQQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.99.0.tgz", + "integrity": "sha512-u61/7U3IGLqoO6gL+AHeiAtlTPFwJK1+964U8gp45ZN0hzh1yrARf5O1mivXv8NnNgJvbG2wWJbiNZP0lG/lTg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.99.0.tgz", + "integrity": "sha512-j/kkk/NcXdIameLezSfXjgCiBkVcA+G60AXrX768/3g0miK1g7M9dj7xOhCb1i7/wQeiEI3rw2LLuO63xRIn4A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.99.0.tgz", + "integrity": "sha512-d4IjJZrX2+AwB2YCy1JySwdptJECNP/WfAQLUl8txI3ka8/d3TUI155GtelnoZUkio211PwIeFvvAeZ9RXPQnw==", + "cpu": [ + "arm" + ], + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.99.0.tgz", + "integrity": "sha512-btNcFpItcB56L40n8hDeL7sRSMLDXQ56nB5h2deddJx1n60rpKSElJmkaDGHtpkrY+CTtDRV0FZDjHeTJddYew==", + "cpu": [ + "arm64" + ], + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.99.0.tgz", + "integrity": "sha512-2gvHOupgIw3ytatXT4nFUow71LFbuOZPEwG+HUzcNQDH8ue4Ez8cr03vsv5MDv3lIjOKcXwDvWD980t18MwkoQ==", + "cpu": [ + "arm" + ], + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.99.0.tgz", + "integrity": "sha512-Hi2bt/IrM5P4FBKz6EcHAlniwfpoz9mnTdvSd58y+avA3SANM76upIkAdSayA8ZGwyL3gZokru1AKDPF9lJDNw==", + "cpu": [ + "arm64" + ], + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.99.0.tgz", + "integrity": "sha512-mKqGvVaJ9rHMqyZsF0kikQe4NO0f4osb67+X6nLhBiVDKvyazQHJ3zJQreNefIE36yL2sjHIclSB//MprzaQDg==", + "cpu": [ + "riscv64" + ], + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.99.0.tgz", + "integrity": "sha512-huhgOMmOc30r7CH7qbRbT9LerSEGSnWuS4CYNOskr9BvNeQp4dIneFufNRGZ7hkOAxUM8DglxIZJN/cyAT95Ew==", + "cpu": [ + "x64" + ], + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.99.0.tgz", + "integrity": "sha512-mevFPIFAVhrH90THifxLfOntFmHtcEKOcdWnep2gJ0X4DVva4AiVIRlQe/7w9JFx5+gnDRE1oaJJkzuFUuYZsA==", + "cpu": [ + "riscv64" + ], + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.99.0.tgz", + "integrity": "sha512-9k7IkULqIZdCIVt4Mboryt6vN8Mjmm3EhI1P3mClU5y5i3wLK5ExC3cbVWk047KsID/fvB1RLslqghXJx5BoxA==", + "cpu": [ + "x64" + ], + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.99.0.tgz", + "integrity": "sha512-P7MxiUtL/XzGo3PX0CaB8lNNEFLQWKikPA8pbKytx9ZCLZSDkt2NJcdAbblB/sqMs4AV3EK2NadV8rI/diq3xg==", + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.99.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.99.0.tgz", + "integrity": "sha512-8whpsW7S+uO8QApKfQuc36m3P9EISzbVZOgC79goob4qGy09u8Gz/rYvw8h1prJDSjltpHGhOzBE6LDz7WvzVw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.99.0.tgz", + "integrity": "sha512-ipuOv1R2K4MHeuCEAZGpuUbAgma4gb0sdacyrTjJtMOy/OY9UvWfVlwErdB09KIkp4fPDpQJDJfvYN6bC8jeNg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/shebang-command": { @@ -6047,6 +12921,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6059,16 +12934,102 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "peer": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -6081,6 +13042,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6090,7 +13052,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -6103,121 +13065,54 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, "node_modules/slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", - "dev": true, + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.9.tgz", + "integrity": "sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==", + "license": "MIT", "engines": { "node": ">=8.0.0" } }, - "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==", - "dev": true, - "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==", - "dev": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/stable-hash-x": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", + "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==", "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "license": "MIT", + "engines": { + "node": ">=12.0.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true, - "peer": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "peer": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", - "dev": true, - "peer": true - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6227,11 +13122,125 @@ "node": ">=8" } }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6239,18 +13248,14 @@ "node": ">=8" } }, - "node_modules/strip-indent": { + "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "min-indent": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/strip-json-comments": { @@ -6258,6 +13263,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -6270,70 +13276,76 @@ "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true, - "peer": true + "license": "ISC" }, "node_modules/stylelint": { - "version": "15.10.3", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz", - "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==", + "version": "16.26.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.26.1.tgz", + "integrity": "sha512-v20V59/crfc8sVTAtge0mdafI3AdnzQ2KsWe6v523L4OA1bJO02S7MO2oyXDCS6iWb9ckIPnqAFVItqSBQr7jw==", "dev": true, - "peer": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-syntax-patches-for-csstree": "^1.0.19", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.2.1", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.0", - "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.4.3", + "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^11.1.1", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^7.0.5", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.28.0", + "known-css-properties": "^0.37.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", + "meow": "^13.2.0", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.27", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "picocolors": "^1.1.1", + "postcss": "^8.5.6", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^3.0.0", + "supports-hyperlinks": "^3.2.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.9.0", "write-file-atomic": "^5.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" + "node": ">=18.12.0" } }, "node_modules/stylelint-config-idiomatic-order": { "version": "10.0.0", - "resolved": "git+ssh://git@github.com/ream88/stylelint-config-idiomatic-order.git#2b456525ef46ed343959a664adbff608899f70de", + "resolved": "https://registry.npmjs.org/stylelint-config-idiomatic-order/-/stylelint-config-idiomatic-order-10.0.0.tgz", + "integrity": "sha512-gJjT1nwhgnHS52+mRn+5Iw6keZIPRN4W+vbzct9Elb+tWOo61jC/CzXzAJHvvOYQZqUYItfs2aQ8fU5hnCvuGg==", "dev": true, "license": "MIT", "dependencies": { @@ -6347,30 +13359,45 @@ } }, "node_modules/stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-recommended-scss": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.0.0.tgz", - "integrity": "sha512-7AmMIsHTsuwUQm7I+DD5BGeIgCvqYZ4BpeYJJpb1cUXQwrJAKjA+GBotFZgUEGP8lAM+wmd91ovzOi8xfAyWEw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", + "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-scss": "^4.0.7", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.1.0" + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^14.0.1", + "stylelint-scss": "^6.4.0" + }, + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^15.10.0" + "stylelint": "^16.6.1" }, "peerDependenciesMeta": { "postcss": { @@ -6378,66 +13405,67 @@ } } }, - "node_modules/stylelint-config-recommended-scss/node_modules/stylelint-scss": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.2.1.tgz", - "integrity": "sha512-ZoTJUM85/qqpQHfEppjW/St//8s6p9Qsg8deWlYlr56F9iUgC9vXeIDQvH4odkRRJLTLFQzYMALSOFCQ3MDkgw==", - "dev": true, - "dependencies": { - "known-css-properties": "^0.28.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" - } - }, "node_modules/stylelint-config-sass-guidelines": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-10.0.0.tgz", - "integrity": "sha512-+Rr2Dd4b72CWA4qoj1Kk+y449nP/WJsrD0nzQAWkmPPIuyVcy2GMIcfNr0Z8JJOLjRvtlkKxa49FCNXMePBikQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-12.1.0.tgz", + "integrity": "sha512-NTxEtVT6uNSqRvq+A3ScyKhjUrY/Z845TnpWEwnMgIPZ/+/Waa4+51r6OPuQRMu4XZS3D8DK1UaT4TWFBvuuAw==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-scss": "^4.0.6", - "stylelint-scss": "^4.4.0" + "@stylistic/stylelint-plugin": "^3.0.1", + "postcss-scss": "^4.0.9", + "stylelint-scss": "^6.2.1" }, "engines": { - "node": "^14.13.1 || >=16.13.0 || >=18.0.0" + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.4.21", - "stylelint": "^15.2.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-standard": { - "version": "34.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", - "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", + "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", "dependencies": { - "stylelint-config-recommended": "^13.0.0" + "stylelint-config-recommended": "^14.0.1" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-standard-scss": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.0.0.tgz", - "integrity": "sha512-fGE79NBOLg09a9afqGH/guJulRULCaQWWv4cv1v2bMX92B+fGb0y56WqIguwvFcliPmmUXiAhKrrnXilIeXoHA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-14.0.0.tgz", + "integrity": "sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg==", "dev": true, + "license": "MIT", "dependencies": { - "stylelint-config-recommended-scss": "^13.0.0", - "stylelint-config-standard": "^34.0.0" + "stylelint-config-recommended-scss": "^14.1.0", + "stylelint-config-standard": "^36.0.1" + }, + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^15.10.0" + "stylelint": "^16.11.0" }, "peerDependenciesMeta": { "postcss": { @@ -6446,31 +13474,87 @@ } }, "node_modules/stylelint-order": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.3.tgz", - "integrity": "sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", + "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", "dev": true, + "license": "MIT", "dependencies": { - "postcss": "^8.4.21", + "postcss": "^8.4.32", "postcss-sorting": "^8.0.2" }, "peerDependencies": { - "stylelint": "^14.0.0 || ^15.0.0" + "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" } }, "node_modules/stylelint-scss": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", - "integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.14.0.tgz", + "integrity": "sha512-ZKmHMZolxeuYsnB+PCYrTpFce0/QWX9i9gh0hPXzp73WjuIMqUpzdQaBCrKoLWh6XtCFSaNDErkMPqdjy1/8aA==", "dev": true, + "license": "MIT", "dependencies": { + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.37.0", + "mdn-data": "^2.25.0", "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.11", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.1.1", "postcss-value-parser": "^4.2.0" }, + "engines": { + "node": ">=18.12.0" + }, "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" + "stylelint": "^16.8.2" + } + }, + "node_modules/stylelint-scss/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylelint-scss/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylelint/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" } }, "node_modules/stylelint/node_modules/balanced-match": { @@ -6478,46 +13562,44 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true, - "peer": true + "license": "MIT" }, - "node_modules/stylelint/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.2.tgz", + "integrity": "sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==", "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "flat-cache": "^6.1.20" } }, - "node_modules/stylelint/node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "node_modules/stylelint/node_modules/flat-cache": { + "version": "6.1.22", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.22.tgz", + "integrity": "sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "cacheable": "^2.3.4", + "flatted": "^3.4.2", + "hookified": "^1.15.0" + } + }, + "node_modules/stylelint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { "node": ">=10" }, @@ -6525,199 +13607,94 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/node_modules/indent-string": { + "node_modules/stylelint/node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/stylelint/node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/stylelint/node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "node_modules/stylelint/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "peer": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "peer": true, - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "peer": true, - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "peer": true, - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { "node": ">=4" } }, - "node_modules/supports-hyperlinks": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", - "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { "node": ">=14.18" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, "node_modules/supports-hyperlinks/node_modules/supports-color": { @@ -6725,7 +13702,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6738,6 +13715,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6749,31 +13727,60 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true, - "peer": true - }, - "node_modules/sweetalert2": { - "version": "11.7.32", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.32.tgz", - "integrity": "sha512-44tNNe2oLe7T94mT6dus4hc9G7qg6jZU/K5qZzpNS6e5HGPrSF6Kie6oZ7B5puIJydB34V2h/8f5EhIFivYo4A==", - "dev": true, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/limonte" - } - }, - "node_modules/systemjs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.14.2.tgz", - "integrity": "sha512-1TlOwvKWdXxAY9vba+huLu99zrQURDWA8pUTYsRIYDZYQbGyK+pyEP4h4dlySsqo7ozyJBmYD20F+iUHhAltEg==", "dev": true }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -6785,67 +13792,248 @@ "node": ">=10.0.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", + "license": "MIT", "funding": { "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/dcastil" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/terser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", - "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "bin": { - "terser": "bin/terser" + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tailwindcss/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tailwindcss/node_modules/chokidar/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/tailwindcss/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tailwindcss/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, "engines": { - "node": ">=4" + "node": ">=0.8" + } + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, "node_modules/to-regex-range": { @@ -6853,6 +14041,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -6860,40 +14049,74 @@ "node": ">=8.0" } }, - "node_modules/toastify-js": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", - "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==", - "dev": true - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "license": "MIT", + "bin": { + "tree-kill": "cli.js" } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16.13.0" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -6902,10 +14125,11 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -6913,11 +14137,91 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6926,65 +14230,81 @@ "node": ">=14.17" } }, - "node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/undici-types": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "devOptional": true, + "license": "MIT" }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">= 4.0.0" + } + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -7000,9 +14320,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -7016,63 +14337,122 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "peer": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } + "license": "MIT" + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "devOptional": true, + "license": "MIT" }, "node_modules/vite": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", - "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", - "dev": true, - "peer": true, + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "license": "MIT", "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -7082,6 +14462,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -7090,523 +14473,49 @@ }, "terser": { "optional": true - } - } - }, - "node_modules/vite-plugin-checker": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.6.2.tgz", - "integrity": "sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "ansi-escapes": "^4.3.0", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "commander": "^8.0.0", - "fast-glob": "^3.2.7", - "fs-extra": "^11.1.0", - "lodash.debounce": "^4.0.8", - "lodash.pick": "^4.4.0", - "npm-run-path": "^4.0.1", - "semver": "^7.5.0", - "strip-ansi": "^6.0.0", - "tiny-invariant": "^1.1.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" - }, - "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "eslint": ">=7", - "meow": "^9.0.0", - "optionator": "^0.9.1", - "stylelint": ">=13", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": ">=1.3.9" - }, - "peerDependenciesMeta": { - "eslint": { + }, + "tsx": { "optional": true }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { + "yaml": { "optional": true } } }, - "node_modules/vite-plugin-checker/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/vite-plugin-checker/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/vite-plugin-checker/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/vite-plugin-checker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite-plugin-checker/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vite-plugin-checker/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vite-plugin-checker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite-plugin-checker/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/vite-plugin-eslint": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz", - "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.2.1", - "@types/eslint": "^8.4.5", - "rollup": "^2.77.2" - }, - "peerDependencies": { - "eslint": ">=7", - "vite": ">=2" - } - }, - "node_modules/vite-plugin-eslint/node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/vite-plugin-full-reload": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.5.tgz", - "integrity": "sha512-kVZFDFWr0DxiHn6MuDVTQf7gnWIdETGlZh0hvTiMXzRN80vgF4PKbONSq8U1d0WtHsKaFODTQgJeakLacoPZEQ==", - "dev": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "license": "MIT", "dependencies": { "picocolors": "^1.0.0", "picomatch": "^2.3.1" - }, - "peerDependencies": { - "vite": "^2 || ^3 || ^4" } }, - "node_modules/vite-plugin-stylelint": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/vite-plugin-stylelint/-/vite-plugin-stylelint-5.1.1.tgz", - "integrity": "sha512-+BGLJG51Sx5YRg1zZX2MR0rWHzWUcxGSHUcKJW7zz5Lku/WrqGDRlU9atKcg6rhhXZMQgELj2/sFjKRoaNhgLA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.3", - "chokidar": "^3.5.3", - "debug": "^4.3.4" - }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", "engines": { - "node": ">=14.18" - }, - "peerDependencies": { - "@types/stylelint": "^13.0.0", - "postcss": "^7.0.0 || ^8.0.0", - "rollup": "^2.0.0 || ^3.0.0", - "stylelint": "^13.0.0 || ^14.0.0 || ^15.0.0", - "vite": "^2.0.0 || ^3.0.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "@types/stylelint": { - "optional": true - }, - "postcss": { - "optional": true - }, - "rollup": { - "optional": true - } - } - }, - "node_modules/vite-plugin-stylelint/node_modules/@rollup/pluginutils": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", - "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "dev": true, - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "engines": { - "vscode": "^1.52.0" - } - }, - "node_modules/vscode-languageclient/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vscode-languageclient/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vscode-languageclient/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "dev": true, - "dependencies": { - "vscode-languageserver-protocol": "3.16.0" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dev": true, - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", - "dev": true - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true - }, - "node_modules/vscode-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true - }, - "node_modules/vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", - "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/vue-eslint-parser": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", - "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/vue-eslint-parser/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-eslint-parser/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/vue-select": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-4.0.0-beta.6.tgz", - "integrity": "sha512-K+zrNBSpwMPhAxYLTCl56gaMrWZGgayoWCLqe5rWwkB8aUbAUh7u6sXjIR7v4ckp2WKC7zEEUY27g6h1MRsIHw==", - "dev": true, - "peerDependencies": { - "vue": "3.x" - } - }, - "node_modules/vue-template-compiler": { - "version": "2.7.14", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", - "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", - "dev": true, - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/vue-tsc": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.6.0.tgz", - "integrity": "sha512-JO8Hmc/ZL8pEXtYsUuMFHIvpu5zqtBLtKBp6CRq2O0JVgrRGqYmVIq9v2R7LMVhMo1LhJEvPBWcE24w30mUvXQ==", - "dev": true, - "dependencies": { - "@volar/vue-language-core": "1.6.0", - "@volar/vue-typescript": "1.6.0", - "semver": "^7.3.8" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/vue-tsc/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-tsc/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-tsc/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7617,18 +14526,136 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, - "peer": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -7637,29 +14664,50 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "peer": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yocto-queue": { @@ -7667,12 +14715,60 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/ziggy-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/ziggy-js/-/ziggy-js-2.6.2.tgz", + "integrity": "sha512-41xc9wRvv5Olh8pZjKSaL5vDAjw4BfTDMFoeLwRpDGc2B+uqcdwIKd81EHs6uwpqahdRrU7uMab0xWj0hBSDjg==", + "license": "MIT", + "dependencies": { + "qs-esm": "^7.0.3" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zustand": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz", + "integrity": "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 9b806c9..9366cae 100644 --- a/package.json +++ b/package.json @@ -1,59 +1,125 @@ { + "$schema": "https://www.schemastore.org/package.json", "private": true, + "type": "module", "scripts": { + "build": "vite build", + "dev": "vite", "prod": "vite build --mode production", - "dev": "NODE_ENV=development vite build -d --mode development", - "watch": "NODE_ENV=development vite build --mode development --watch", - "eslint": "node ./node_modules/.bin/eslint --max-warnings 0 -c .eslintrc.json ./resources", - "eslint-fix": "node ./node_modules/.bin/eslint --fix --max-warnings 0 -c .eslintrc.json ./resources", - "eslint-ci": "node ./node_modules/.bin/eslint --max-warnings 0 -c .eslintrc.json ./resources -f junit", - "stylelint": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 '**/resources/**/*.scss'", - "stylelint-fix": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --fix --max-warnings 0 '**/resources/**/*.scss'", - "stylelint-ci": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 '**/resources/**/*.scss' -f json" + "eslint": "node ./node_modules/.bin/eslint --config './.eslintrc.cjs' --max-warnings 0 'resources/ts/**/*.{ts,tsx}'", + "eslint-fix": "node ./node_modules/.bin/eslint --config './.eslintrc.cjs' --max-warnings 0 'resources/ts/**/*.{ts,tsx}' --fix", + "eslint-ci": "node ./node_modules/.bin/eslint --config './.eslintrc.cjs' --max-warnings 0 'resources/ts/**/*.{ts,tsx}' -f junit", + "stylelint": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss'", + "stylelint-fix": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss' --fix", + "stylelint-ci": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss' -f json" }, "devDependencies": { - "@eastdesire/jscolor": "^2.5.1", - "@fortawesome/fontawesome-svg-core": "latest", - "@fortawesome/free-brands-svg-icons": "latest", - "@fortawesome/free-regular-svg-icons": "latest", - "@fortawesome/free-solid-svg-icons": "latest", - "@fortawesome/vue-fontawesome": "^3.0.3", - "@sipec/vue3-tags-input": "^3.0.4", - "@types/bootstrap": "^5.2.7", - "@types/node": "^20.8.2", - "@types/toastify-js": "^1.12.1", - "@types/vue-select": "^3.16.5", - "@vitejs/plugin-legacy": "latest", - "@vitejs/plugin-vue": "latest", - "@vue/compiler-sfc": "latest", - "@vue/eslint-config-typescript": "latest", - "@vue/tsconfig": "latest", - "axios": "^1.5.1", - "bootstrap": "^5.3.2", - "chart.js": "^4.4.0", - "cropperjs": "^1.6.1", - "eslint": "latest", - "eslint-plugin-vue": "latest", - "glightbox": "^3.2.0", - "laravel-vite-plugin": "latest", - "moment": "^2.29.4", - "postcss-discard-comments": "^6.0.0", - "prettier": "latest", - "print-js": "^1.6.0", - "sass": "latest", - "slugify": "^1.6.6", - "stylelint-config-idiomatic-order": "github:ream88/stylelint-config-idiomatic-order", - "stylelint-config-sass-guidelines": "latest", - "stylelint-config-standard-scss": "latest", - "sweetalert2": "^11.7.31", - "terser": "latest", - "toastify-js": "^1.12.0", - "typescript": "latest", - "vite-plugin-checker": "latest", - "vite-plugin-eslint": "latest", - "vite-plugin-stylelint": "latest", - "vue": "latest", - "vue-select": "^4.0.0-beta.6", - "vue-tsc": "1.6.0" + "@headlessui/react": "^2.2.10", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-toast": "^1.2.15", + "@radix-ui/react-tooltip": "^1.2.8", + "@tailwindcss/forms": "^0.5.11", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.0.0", + "@types/react-color": "^3.0.13", + "@typescript-eslint/eslint-plugin": "^8.59.0", + "@typescript-eslint/parser": "^8.59.0", + "@uwil/husky-config": "^1.0.1", + "@vitejs/plugin-react": "^4.7.0", + "autoprefixer": "^10.5.0", + "concurrently": "^9.2.1", + "eslint": "^8.57.1", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^10.1.8", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^4.6.2", + "flag-icons": "^7.5.0", + "pluralize": "^8.0.0", + "prettier": "^3.8.3", + "react": "^19.2.5", + "react-day-picker": "^9.14.0", + "react-dom": "^19.2.5", + "rollup-plugin-copy": "^3.5.0", + "sass-embedded": "^1.99.0", + "stylelint": "^16.26.1", + "stylelint-config-idiomatic-order": "^10.0.0", + "stylelint-config-sass-guidelines": "^12.1.0", + "stylelint-config-standard-scss": "^14.0.0", + "stylelint-scss": "^6.14.0", + "tailwindcss": "^3.4.19", + "tailwindcss-animate": "^1.0.7", + "vite": "^6.4.2" + }, + "dependencies": { + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/sortable": "^10.0.0", + "@dnd-kit/utilities": "^3.2.2", + "@inertiajs/core": "^2.1.5", + "@inertiajs/react": "^2.3.21", + "@tanstack/react-table": "^8.21.3", + "@tiptap/core": "^3.22.4", + "@tiptap/extension-blockquote": "^3.22.4", + "@tiptap/extension-bold": "^3.22.4", + "@tiptap/extension-bullet-list": "^3.22.4", + "@tiptap/extension-color": "^3.22.4", + "@tiptap/extension-heading": "^3.22.4", + "@tiptap/extension-history": "^3.22.4", + "@tiptap/extension-horizontal-rule": "^3.22.4", + "@tiptap/extension-image": "^3.22.4", + "@tiptap/extension-invisible-characters": "^3.22.4", + "@tiptap/extension-italic": "^3.22.4", + "@tiptap/extension-link": "^3.22.4", + "@tiptap/extension-list": "^3.22.4", + "@tiptap/extension-ordered-list": "^3.22.4", + "@tiptap/extension-placeholder": "^3.22.4", + "@tiptap/extension-strike": "^3.22.4", + "@tiptap/extension-subscript": "^3.22.4", + "@tiptap/extension-superscript": "^3.22.4", + "@tiptap/extension-table": "^3.22.4", + "@tiptap/extension-table-cell": "^3.22.4", + "@tiptap/extension-table-header": "^3.22.4", + "@tiptap/extension-table-row": "^3.22.4", + "@tiptap/extension-text-align": "^3.22.4", + "@tiptap/extension-underline": "^3.22.4", + "@tiptap/react": "^3.22.4", + "@tiptap/starter-kit": "^3.22.4", + "@types/pluralize": "^0.0.33", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "axios": "^1.15.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "json-edit-react": "^1.29.0", + "laravel-vite-plugin": "^1.3.0", + "lucide-react": "^0.503.0", + "motion": "^12.38.0", + "prosemirror-state": "^1.4.4", + "react-color": "^2.19.3", + "react-dropzone": "^14.4.1", + "react-image-crop": "^11.0.10", + "slugify": "^1.6.9", + "tailwind-merge": "^3.5.0", + "ziggy-js": "^2.6.2", + "zod": "^4.3.6", + "zustand": "^5.0.12" } } diff --git a/phpcs.xml b/phpcs.xml index 3e28d83..10dfcd1 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -8,6 +8,7 @@ config/ database/factories routes/ + */vendor/* @@ -29,8 +30,7 @@ - - + @@ -44,9 +44,6 @@ - - - @@ -79,7 +76,7 @@ - + @@ -109,6 +106,7 @@ + diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..4859286 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,8 @@ +includes: + - vendor/larastan/larastan/extension.neon + +parameters: + paths: + - app/ + + level: 7 diff --git a/phpunit.xml b/phpunit.xml index eb13aff..e7f0a48 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,31 +1,36 @@ - ./tests/Unit + tests/Unit - ./tests/Feature + tests/Feature - + - ./app + app - + + - - - + + + + + + + diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..49c0612 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/production-resources.yaml b/production-resources.yaml index d3ac864..f940be0 100644 --- a/production-resources.yaml +++ b/production-resources.yaml @@ -1,12 +1,56 @@ ---- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: $APP_DOMAIN spec: dnsNames: - - $APP_DOMAIN + - $APP_DOMAIN secretName: $APP_DOMAIN issuerRef: name: $APP_CERT_ISSUER kind: ClusterIssuer +--- +# Redirect with domain replacement +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: redirect-multi-to-ldcfr +spec: + redirectRegex: + regex: ^https://(.*)(corico|volaillesdeblancafort).fr(.*) + replacement: https://${REDIRECT}${APP_DOMAIN} + permanent: true +--- +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: redirect-multi-to-ldcfr +spec: + entryPoints: + - websecure + routes: + - match: (Host(`corico.fr`) || Host(`www.corico.fr`) || Host(`volaillesdeblancafort.fr`) || Host(`www.volaillesdeblancafort.fr`)) && !PathPrefix(`/.well-known/acme-challenge/`) + kind: Rule + services: + - name: api@internal + kind: TraefikService + middlewares: + - name: redirect-multi-to-ldcfr + tls: + secretName: redirect-multi-to-ldcfr +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: redirect-multi-to-ldcfr +spec: + dnsNames: + - corico.fr + - www.corico.fr + - volaillesdeblancafort.fr + - www.volaillesdeblancafort.fr + secretName: redirect-multi-to-ldcfr + issuerRef: + name: $APP_CERT_ISSUER + kind: ClusterIssuer + diff --git a/public/.htaccess b/public/.htaccess index 3aec5e2..d4b5cfb 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -14,8 +14,77 @@ RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] + # Redirect /index.php/anything to /anything + RewriteCond %{THE_REQUEST} /index\.php/([^\s?]*) [NC] + RewriteRule ^index\.php/(.*)$ /$1 [L,R=301,NC] + # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] + + + ExpiresActive On + + # Images + ExpiresByType image/jpg "access plus 1 year" + ExpiresByType image/jpeg "access plus 1 year" + ExpiresByType image/png "access plus 1 year" + ExpiresByType image/gif "access plus 1 year" + ExpiresByType image/webp "access plus 1 year" + ExpiresByType image/svg+xml "access plus 1 year" + + # CSS / JS + ExpiresByType text/css "access plus 1 year" + ExpiresByType text/javascript "access plus 1 year" + ExpiresByType application/javascript "access plus 1 year" + ExpiresByType application/x-javascript "access plus 1 year" + + # WOFF / WOFF2 / Fonts + ExpiresByType application/font-woff "access plus 1 year" + ExpiresByType font/woff "access plus 1 year" + ExpiresByType application/font-woff2 "access plus 1 year" + ExpiresByType font/woff2 "access plus 1 year" + + # Favicon + ExpiresByType image/x-icon "access plus 1 year" + + + + Header set Cache-Control "public, max-age=31536000, immutable" + + + + AddOutputFilterByType BROTLI_COMPRESS text/html text/css text/plain text/xml text/javascript application/javascript application/x-javascript + AddType text/plain .br + + + + AddOutputFilterByType DEFLATE text/html + AddOutputFilterByType DEFLATE text/plain + AddOutputFilterByType DEFLATE text/xml + AddOutputFilterByType DEFLATE text/css + AddOutputFilterByType DEFLATE text/javascript + AddOutputFilterByType DEFLATE application/javascript + AddOutputFilterByType DEFLATE application/x-javascript + AddOutputFilterByType DEFLATE application/xml + AddOutputFilterByType DEFLATE application/xhtml+xml + AddOutputFilterByType DEFLATE application/rss+xml + AddOutputFilterByType DEFLATE image/svg+xml + + + + AddType application/javascript .js + AddType font/woff2 .woff2 + AddType application/font-woff2 .woff2 + AddType application/font-woff .woff + AddType font/woff .woff + AddType image/svg+xml .svg + + + + FileETag None + Header unset ETag + Header unset Set-Cookie + \ No newline at end of file diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png deleted file mode 100644 index 7daa444..0000000 Binary files a/public/android-chrome-192x192.png and /dev/null differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png deleted file mode 100644 index 8e4b3dc..0000000 Binary files a/public/android-chrome-512x512.png and /dev/null differ diff --git a/public/android-icon-144x144.png b/public/android-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/public/android-icon-144x144.png differ diff --git a/public/android-icon-192x192.png b/public/android-icon-192x192.png new file mode 100644 index 0000000..2d53c6e Binary files /dev/null and b/public/android-icon-192x192.png differ diff --git a/public/android-icon-36x36.png b/public/android-icon-36x36.png new file mode 100644 index 0000000..de42461 Binary files /dev/null and b/public/android-icon-36x36.png differ diff --git a/public/android-icon-48x48.png b/public/android-icon-48x48.png new file mode 100644 index 0000000..962d30b Binary files /dev/null and b/public/android-icon-48x48.png differ diff --git a/public/android-icon-72x72.png b/public/android-icon-72x72.png new file mode 100644 index 0000000..4510fa0 Binary files /dev/null and b/public/android-icon-72x72.png differ diff --git a/public/android-icon-96x96.png b/public/android-icon-96x96.png new file mode 100644 index 0000000..f2732bf Binary files /dev/null and b/public/android-icon-96x96.png differ diff --git a/public/apple-icon-114x114.png b/public/apple-icon-114x114.png new file mode 100644 index 0000000..87d6b72 Binary files /dev/null and b/public/apple-icon-114x114.png differ diff --git a/public/apple-icon-120x120.png b/public/apple-icon-120x120.png new file mode 100644 index 0000000..86811dc Binary files /dev/null and b/public/apple-icon-120x120.png differ diff --git a/public/apple-icon-144x144.png b/public/apple-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/public/apple-icon-144x144.png differ diff --git a/public/apple-icon-152x152.png b/public/apple-icon-152x152.png new file mode 100644 index 0000000..ff41715 Binary files /dev/null and b/public/apple-icon-152x152.png differ diff --git a/public/apple-icon-180x180.png b/public/apple-icon-180x180.png new file mode 100644 index 0000000..9fa3160 Binary files /dev/null and b/public/apple-icon-180x180.png differ diff --git a/public/apple-icon-57x57.png b/public/apple-icon-57x57.png new file mode 100644 index 0000000..1713575 Binary files /dev/null and b/public/apple-icon-57x57.png differ diff --git a/public/apple-icon-60x60.png b/public/apple-icon-60x60.png new file mode 100644 index 0000000..17d0fbf Binary files /dev/null and b/public/apple-icon-60x60.png differ diff --git a/public/apple-icon-72x72.png b/public/apple-icon-72x72.png new file mode 100644 index 0000000..4510fa0 Binary files /dev/null and b/public/apple-icon-72x72.png differ diff --git a/public/apple-icon-76x76.png b/public/apple-icon-76x76.png new file mode 100644 index 0000000..7248415 Binary files /dev/null and b/public/apple-icon-76x76.png differ diff --git a/public/apple-touch-icon-120x120.png b/public/apple-touch-icon-120x120.png deleted file mode 100644 index b523397..0000000 Binary files a/public/apple-touch-icon-120x120.png and /dev/null differ diff --git a/public/apple-touch-icon-152x152.png b/public/apple-touch-icon-152x152.png deleted file mode 100644 index d372615..0000000 Binary files a/public/apple-touch-icon-152x152.png and /dev/null differ diff --git a/public/apple-touch-icon-180x180.png b/public/apple-touch-icon-180x180.png deleted file mode 100644 index 9d8e301..0000000 Binary files a/public/apple-touch-icon-180x180.png and /dev/null differ diff --git a/public/apple-touch-icon-60x60.png b/public/apple-touch-icon-60x60.png deleted file mode 100644 index 0c8549a..0000000 Binary files a/public/apple-touch-icon-60x60.png and /dev/null differ diff --git a/public/apple-touch-icon-76x76.png b/public/apple-touch-icon-76x76.png deleted file mode 100644 index e4577cc..0000000 Binary files a/public/apple-touch-icon-76x76.png and /dev/null differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png deleted file mode 100644 index 9d8e301..0000000 Binary files a/public/apple-touch-icon.png and /dev/null differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png index 5efca53..8f13f54 100644 Binary files a/public/favicon-16x16.png and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png index 2a190d7..7f21663 100644 Binary files a/public/favicon-32x32.png and b/public/favicon-32x32.png differ diff --git a/public/favicon-back/android-icon-144x144.png b/public/favicon-back/android-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/public/favicon-back/android-icon-144x144.png differ diff --git a/public/favicon-back/android-icon-192x192.png b/public/favicon-back/android-icon-192x192.png new file mode 100644 index 0000000..2d53c6e Binary files /dev/null and b/public/favicon-back/android-icon-192x192.png differ diff --git a/public/favicon-back/android-icon-36x36.png b/public/favicon-back/android-icon-36x36.png new file mode 100644 index 0000000..de42461 Binary files /dev/null and b/public/favicon-back/android-icon-36x36.png differ diff --git a/public/favicon-back/android-icon-48x48.png b/public/favicon-back/android-icon-48x48.png new file mode 100644 index 0000000..962d30b Binary files /dev/null and b/public/favicon-back/android-icon-48x48.png differ diff --git a/public/favicon-back/android-icon-72x72.png b/public/favicon-back/android-icon-72x72.png new file mode 100644 index 0000000..4510fa0 Binary files /dev/null and b/public/favicon-back/android-icon-72x72.png differ diff --git a/public/favicon-back/android-icon-96x96.png b/public/favicon-back/android-icon-96x96.png new file mode 100644 index 0000000..f2732bf Binary files /dev/null and b/public/favicon-back/android-icon-96x96.png differ diff --git a/public/favicon-back/apple-icon-114x114.png b/public/favicon-back/apple-icon-114x114.png new file mode 100644 index 0000000..87d6b72 Binary files /dev/null and b/public/favicon-back/apple-icon-114x114.png differ diff --git a/public/favicon-back/apple-icon-120x120.png b/public/favicon-back/apple-icon-120x120.png new file mode 100644 index 0000000..86811dc Binary files /dev/null and b/public/favicon-back/apple-icon-120x120.png differ diff --git a/public/favicon-back/apple-icon-144x144.png b/public/favicon-back/apple-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/public/favicon-back/apple-icon-144x144.png differ diff --git a/public/favicon-back/apple-icon-152x152.png b/public/favicon-back/apple-icon-152x152.png new file mode 100644 index 0000000..ff41715 Binary files /dev/null and b/public/favicon-back/apple-icon-152x152.png differ diff --git a/public/favicon-back/apple-icon-180x180.png b/public/favicon-back/apple-icon-180x180.png new file mode 100644 index 0000000..9fa3160 Binary files /dev/null and b/public/favicon-back/apple-icon-180x180.png differ diff --git a/public/favicon-back/apple-icon-57x57.png b/public/favicon-back/apple-icon-57x57.png new file mode 100644 index 0000000..1713575 Binary files /dev/null and b/public/favicon-back/apple-icon-57x57.png differ diff --git a/public/favicon-back/apple-icon-60x60.png b/public/favicon-back/apple-icon-60x60.png new file mode 100644 index 0000000..17d0fbf Binary files /dev/null and b/public/favicon-back/apple-icon-60x60.png differ diff --git a/public/favicon-back/apple-icon-72x72.png b/public/favicon-back/apple-icon-72x72.png new file mode 100644 index 0000000..4510fa0 Binary files /dev/null and b/public/favicon-back/apple-icon-72x72.png differ diff --git a/public/favicon-back/apple-icon-76x76.png b/public/favicon-back/apple-icon-76x76.png new file mode 100644 index 0000000..7248415 Binary files /dev/null and b/public/favicon-back/apple-icon-76x76.png differ diff --git a/public/favicon-back/favicon-16x16.png b/public/favicon-back/favicon-16x16.png new file mode 100644 index 0000000..8f13f54 Binary files /dev/null and b/public/favicon-back/favicon-16x16.png differ diff --git a/public/favicon-back/favicon-32x32.png b/public/favicon-back/favicon-32x32.png new file mode 100644 index 0000000..7f21663 Binary files /dev/null and b/public/favicon-back/favicon-32x32.png differ diff --git a/public/favicon-back/favicon.ico b/public/favicon-back/favicon.ico new file mode 100644 index 0000000..467711c Binary files /dev/null and b/public/favicon-back/favicon.ico differ diff --git a/public/favicon-back/manifest.json b/public/favicon-back/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/public/favicon-back/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/public/favicon-back/ms-icon-144x144.png b/public/favicon-back/ms-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/public/favicon-back/ms-icon-144x144.png differ diff --git a/public/favicon-back/ms-icon-150x150.png b/public/favicon-back/ms-icon-150x150.png new file mode 100644 index 0000000..78c8cd0 Binary files /dev/null and b/public/favicon-back/ms-icon-150x150.png differ diff --git a/public/favicon-back/ms-icon-310x310.png b/public/favicon-back/ms-icon-310x310.png new file mode 100644 index 0000000..e0d5a87 Binary files /dev/null and b/public/favicon-back/ms-icon-310x310.png differ diff --git a/public/favicon-back/ms-icon-70x70.png b/public/favicon-back/ms-icon-70x70.png new file mode 100644 index 0000000..ca90a5b Binary files /dev/null and b/public/favicon-back/ms-icon-70x70.png differ diff --git a/public/favicon.ico b/public/favicon.ico index fcd0d21..467711c 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/index.php b/public/index.php index a8137b1..ee8f07e 100644 --- a/public/index.php +++ b/public/index.php @@ -1,55 +1,20 @@ make(Kernel::class); - -$response = tap($kernel->handle( - $request = Request::capture() -))->send(); - -$kernel->terminate($request, $response); +$app->handleRequest(Request::capture()); diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/public/ms-icon-144x144.png b/public/ms-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/public/ms-icon-144x144.png differ diff --git a/public/ms-icon-150x150.png b/public/ms-icon-150x150.png new file mode 100644 index 0000000..78c8cd0 Binary files /dev/null and b/public/ms-icon-150x150.png differ diff --git a/public/ms-icon-310x310.png b/public/ms-icon-310x310.png new file mode 100644 index 0000000..e0d5a87 Binary files /dev/null and b/public/ms-icon-310x310.png differ diff --git a/public/ms-icon-70x70.png b/public/ms-icon-70x70.png new file mode 100644 index 0000000..ca90a5b Binary files /dev/null and b/public/ms-icon-70x70.png differ diff --git a/public/mstile-144x144.png b/public/mstile-144x144.png deleted file mode 100644 index b9bf3f3..0000000 Binary files a/public/mstile-144x144.png and /dev/null differ diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png deleted file mode 100644 index 322c5a9..0000000 Binary files a/public/mstile-150x150.png and /dev/null differ diff --git a/public/robots.txt b/public/robots.txt index 1ef3776..eb05362 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,11 +1,2 @@ User-agent: * -Disallow: / - -User-agent: GPTBot -Disallow: / - -User-agent: Amazonbot -Disallow: / - -User-agent: ClaudeBot -Disallow: / +Disallow: diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg deleted file mode 100644 index 2429f6c..0000000 --- a/public/safari-pinned-tab.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - diff --git a/public/site.webmanifest b/public/site.webmanifest deleted file mode 100644 index 3a91549..0000000 --- a/public/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Support", - "short_name": "Support", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/public/web.config b/public/web.config deleted file mode 100644 index d3711d7..0000000 --- a/public/web.config +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/assets/documents/invoice/logo_ldc.jpg b/resources/assets/documents/invoice/logo_ldc.jpg deleted file mode 100644 index d9ad13e..0000000 Binary files a/resources/assets/documents/invoice/logo_ldc.jpg and /dev/null differ diff --git a/resources/assets/documents/invoice/logo_ldc.png b/resources/assets/documents/invoice/logo_ldc.png deleted file mode 100644 index 81d3282..0000000 Binary files a/resources/assets/documents/invoice/logo_ldc.png and /dev/null differ diff --git a/resources/assets/documents/invoice/separator.png b/resources/assets/documents/invoice/separator.png deleted file mode 100644 index bfcb9f0..0000000 Binary files a/resources/assets/documents/invoice/separator.png and /dev/null differ diff --git a/resources/assets/fonts/Figtree/Figtree-Black.ttf b/resources/assets/fonts/Figtree/Figtree-Black.ttf new file mode 100644 index 0000000..526fe1d Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-Black.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-BlackItalic.ttf b/resources/assets/fonts/Figtree/Figtree-BlackItalic.ttf new file mode 100644 index 0000000..f67766c Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-BlackItalic.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-Bold.ttf b/resources/assets/fonts/Figtree/Figtree-Bold.ttf new file mode 100644 index 0000000..6f8ad64 Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-Bold.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-BoldItalic.ttf b/resources/assets/fonts/Figtree/Figtree-BoldItalic.ttf new file mode 100644 index 0000000..6b3e86c Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-BoldItalic.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-ExtraBold.ttf b/resources/assets/fonts/Figtree/Figtree-ExtraBold.ttf new file mode 100644 index 0000000..8589c04 Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-ExtraBold.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-ExtraBoldItalic.ttf b/resources/assets/fonts/Figtree/Figtree-ExtraBoldItalic.ttf new file mode 100644 index 0000000..8ad84e8 Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-ExtraBoldItalic.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-Italic.ttf b/resources/assets/fonts/Figtree/Figtree-Italic.ttf new file mode 100644 index 0000000..7ff07e5 Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-Italic.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-Light.ttf b/resources/assets/fonts/Figtree/Figtree-Light.ttf new file mode 100644 index 0000000..e238878 Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-Light.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-LightItalic.ttf b/resources/assets/fonts/Figtree/Figtree-LightItalic.ttf new file mode 100644 index 0000000..ff188b9 Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-LightItalic.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-Medium.ttf b/resources/assets/fonts/Figtree/Figtree-Medium.ttf new file mode 100644 index 0000000..5b89c89 Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-Medium.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-MediumItalic.ttf b/resources/assets/fonts/Figtree/Figtree-MediumItalic.ttf new file mode 100644 index 0000000..d612e17 Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-MediumItalic.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-Regular.ttf b/resources/assets/fonts/Figtree/Figtree-Regular.ttf new file mode 100644 index 0000000..4b42cdb Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-Regular.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-SemiBold.ttf b/resources/assets/fonts/Figtree/Figtree-SemiBold.ttf new file mode 100644 index 0000000..aa2b78c Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-SemiBold.ttf differ diff --git a/resources/assets/fonts/Figtree/Figtree-SemiBoldItalic.ttf b/resources/assets/fonts/Figtree/Figtree-SemiBoldItalic.ttf new file mode 100644 index 0000000..fd8b3a4 Binary files /dev/null and b/resources/assets/fonts/Figtree/Figtree-SemiBoldItalic.ttf differ diff --git a/resources/assets/images/logos/uwil-cms-dark-icon.svg b/resources/assets/images/logos/uwil-cms-dark-icon.svg new file mode 100644 index 0000000..b060e17 --- /dev/null +++ b/resources/assets/images/logos/uwil-cms-dark-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-cms-dark.svg b/resources/assets/images/logos/uwil-cms-dark.svg new file mode 100644 index 0000000..ad78eac --- /dev/null +++ b/resources/assets/images/logos/uwil-cms-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-cms-light-icon.svg b/resources/assets/images/logos/uwil-cms-light-icon.svg new file mode 100644 index 0000000..84e4426 --- /dev/null +++ b/resources/assets/images/logos/uwil-cms-light-icon.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + CMS. + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-cms-light.svg b/resources/assets/images/logos/uwil-cms-light.svg new file mode 100644 index 0000000..6079765 --- /dev/null +++ b/resources/assets/images/logos/uwil-cms-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-report-dark.svg b/resources/assets/images/logos/uwil-report-dark.svg new file mode 100644 index 0000000..a1ea004 --- /dev/null +++ b/resources/assets/images/logos/uwil-report-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-report-light.svg b/resources/assets/images/logos/uwil-report-light.svg new file mode 100644 index 0000000..d2318ec --- /dev/null +++ b/resources/assets/images/logos/uwil-report-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-support-dark.svg b/resources/assets/images/logos/uwil-support-dark.svg new file mode 100644 index 0000000..a29be57 --- /dev/null +++ b/resources/assets/images/logos/uwil-support-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-support-light.svg b/resources/assets/images/logos/uwil-support-light.svg new file mode 100644 index 0000000..4a00988 --- /dev/null +++ b/resources/assets/images/logos/uwil-support-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/supportweb_128.png b/resources/assets/images/supportweb_128.png deleted file mode 100644 index 6e6d38a..0000000 Binary files a/resources/assets/images/supportweb_128.png and /dev/null differ diff --git a/resources/favicons/back/android-icon-144x144.png b/resources/favicons/back/android-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/resources/favicons/back/android-icon-144x144.png differ diff --git a/resources/favicons/back/android-icon-192x192.png b/resources/favicons/back/android-icon-192x192.png new file mode 100644 index 0000000..2d53c6e Binary files /dev/null and b/resources/favicons/back/android-icon-192x192.png differ diff --git a/resources/favicons/back/android-icon-36x36.png b/resources/favicons/back/android-icon-36x36.png new file mode 100644 index 0000000..de42461 Binary files /dev/null and b/resources/favicons/back/android-icon-36x36.png differ diff --git a/resources/favicons/back/android-icon-48x48.png b/resources/favicons/back/android-icon-48x48.png new file mode 100644 index 0000000..962d30b Binary files /dev/null and b/resources/favicons/back/android-icon-48x48.png differ diff --git a/resources/favicons/back/android-icon-72x72.png b/resources/favicons/back/android-icon-72x72.png new file mode 100644 index 0000000..4510fa0 Binary files /dev/null and b/resources/favicons/back/android-icon-72x72.png differ diff --git a/resources/favicons/back/android-icon-96x96.png b/resources/favicons/back/android-icon-96x96.png new file mode 100644 index 0000000..f2732bf Binary files /dev/null and b/resources/favicons/back/android-icon-96x96.png differ diff --git a/resources/favicons/back/apple-icon-114x114.png b/resources/favicons/back/apple-icon-114x114.png new file mode 100644 index 0000000..87d6b72 Binary files /dev/null and b/resources/favicons/back/apple-icon-114x114.png differ diff --git a/resources/favicons/back/apple-icon-120x120.png b/resources/favicons/back/apple-icon-120x120.png new file mode 100644 index 0000000..86811dc Binary files /dev/null and b/resources/favicons/back/apple-icon-120x120.png differ diff --git a/resources/favicons/back/apple-icon-144x144.png b/resources/favicons/back/apple-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/resources/favicons/back/apple-icon-144x144.png differ diff --git a/resources/favicons/back/apple-icon-152x152.png b/resources/favicons/back/apple-icon-152x152.png new file mode 100644 index 0000000..ff41715 Binary files /dev/null and b/resources/favicons/back/apple-icon-152x152.png differ diff --git a/resources/favicons/back/apple-icon-180x180.png b/resources/favicons/back/apple-icon-180x180.png new file mode 100644 index 0000000..9fa3160 Binary files /dev/null and b/resources/favicons/back/apple-icon-180x180.png differ diff --git a/resources/favicons/back/apple-icon-57x57.png b/resources/favicons/back/apple-icon-57x57.png new file mode 100644 index 0000000..1713575 Binary files /dev/null and b/resources/favicons/back/apple-icon-57x57.png differ diff --git a/resources/favicons/back/apple-icon-60x60.png b/resources/favicons/back/apple-icon-60x60.png new file mode 100644 index 0000000..17d0fbf Binary files /dev/null and b/resources/favicons/back/apple-icon-60x60.png differ diff --git a/resources/favicons/back/apple-icon-72x72.png b/resources/favicons/back/apple-icon-72x72.png new file mode 100644 index 0000000..4510fa0 Binary files /dev/null and b/resources/favicons/back/apple-icon-72x72.png differ diff --git a/resources/favicons/back/apple-icon-76x76.png b/resources/favicons/back/apple-icon-76x76.png new file mode 100644 index 0000000..7248415 Binary files /dev/null and b/resources/favicons/back/apple-icon-76x76.png differ diff --git a/resources/favicons/back/favicon-16x16.png b/resources/favicons/back/favicon-16x16.png new file mode 100644 index 0000000..8f13f54 Binary files /dev/null and b/resources/favicons/back/favicon-16x16.png differ diff --git a/resources/favicons/back/favicon-32x32.png b/resources/favicons/back/favicon-32x32.png new file mode 100644 index 0000000..7f21663 Binary files /dev/null and b/resources/favicons/back/favicon-32x32.png differ diff --git a/resources/favicons/back/favicon.ico b/resources/favicons/back/favicon.ico new file mode 100644 index 0000000..467711c Binary files /dev/null and b/resources/favicons/back/favicon.ico differ diff --git a/resources/favicons/back/manifest.json b/resources/favicons/back/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/resources/favicons/back/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/resources/favicons/back/ms-icon-144x144.png b/resources/favicons/back/ms-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/resources/favicons/back/ms-icon-144x144.png differ diff --git a/resources/favicons/back/ms-icon-150x150.png b/resources/favicons/back/ms-icon-150x150.png new file mode 100644 index 0000000..78c8cd0 Binary files /dev/null and b/resources/favicons/back/ms-icon-150x150.png differ diff --git a/resources/favicons/back/ms-icon-310x310.png b/resources/favicons/back/ms-icon-310x310.png new file mode 100644 index 0000000..e0d5a87 Binary files /dev/null and b/resources/favicons/back/ms-icon-310x310.png differ diff --git a/resources/favicons/back/ms-icon-70x70.png b/resources/favicons/back/ms-icon-70x70.png new file mode 100644 index 0000000..ca90a5b Binary files /dev/null and b/resources/favicons/back/ms-icon-70x70.png differ diff --git a/resources/favicons/front/android-icon-144x144.png b/resources/favicons/front/android-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/resources/favicons/front/android-icon-144x144.png differ diff --git a/resources/favicons/front/android-icon-192x192.png b/resources/favicons/front/android-icon-192x192.png new file mode 100644 index 0000000..2d53c6e Binary files /dev/null and b/resources/favicons/front/android-icon-192x192.png differ diff --git a/resources/favicons/front/android-icon-36x36.png b/resources/favicons/front/android-icon-36x36.png new file mode 100644 index 0000000..de42461 Binary files /dev/null and b/resources/favicons/front/android-icon-36x36.png differ diff --git a/resources/favicons/front/android-icon-48x48.png b/resources/favicons/front/android-icon-48x48.png new file mode 100644 index 0000000..962d30b Binary files /dev/null and b/resources/favicons/front/android-icon-48x48.png differ diff --git a/resources/favicons/front/android-icon-72x72.png b/resources/favicons/front/android-icon-72x72.png new file mode 100644 index 0000000..4510fa0 Binary files /dev/null and b/resources/favicons/front/android-icon-72x72.png differ diff --git a/resources/favicons/front/android-icon-96x96.png b/resources/favicons/front/android-icon-96x96.png new file mode 100644 index 0000000..f2732bf Binary files /dev/null and b/resources/favicons/front/android-icon-96x96.png differ diff --git a/resources/favicons/front/apple-icon-114x114.png b/resources/favicons/front/apple-icon-114x114.png new file mode 100644 index 0000000..87d6b72 Binary files /dev/null and b/resources/favicons/front/apple-icon-114x114.png differ diff --git a/resources/favicons/front/apple-icon-120x120.png b/resources/favicons/front/apple-icon-120x120.png new file mode 100644 index 0000000..86811dc Binary files /dev/null and b/resources/favicons/front/apple-icon-120x120.png differ diff --git a/resources/favicons/front/apple-icon-144x144.png b/resources/favicons/front/apple-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/resources/favicons/front/apple-icon-144x144.png differ diff --git a/resources/favicons/front/apple-icon-152x152.png b/resources/favicons/front/apple-icon-152x152.png new file mode 100644 index 0000000..ff41715 Binary files /dev/null and b/resources/favicons/front/apple-icon-152x152.png differ diff --git a/resources/favicons/front/apple-icon-180x180.png b/resources/favicons/front/apple-icon-180x180.png new file mode 100644 index 0000000..9fa3160 Binary files /dev/null and b/resources/favicons/front/apple-icon-180x180.png differ diff --git a/resources/favicons/front/apple-icon-57x57.png b/resources/favicons/front/apple-icon-57x57.png new file mode 100644 index 0000000..1713575 Binary files /dev/null and b/resources/favicons/front/apple-icon-57x57.png differ diff --git a/resources/favicons/front/apple-icon-60x60.png b/resources/favicons/front/apple-icon-60x60.png new file mode 100644 index 0000000..17d0fbf Binary files /dev/null and b/resources/favicons/front/apple-icon-60x60.png differ diff --git a/resources/favicons/front/apple-icon-72x72.png b/resources/favicons/front/apple-icon-72x72.png new file mode 100644 index 0000000..4510fa0 Binary files /dev/null and b/resources/favicons/front/apple-icon-72x72.png differ diff --git a/resources/favicons/front/apple-icon-76x76.png b/resources/favicons/front/apple-icon-76x76.png new file mode 100644 index 0000000..7248415 Binary files /dev/null and b/resources/favicons/front/apple-icon-76x76.png differ diff --git a/resources/favicons/front/favicon-16x16.png b/resources/favicons/front/favicon-16x16.png new file mode 100644 index 0000000..8f13f54 Binary files /dev/null and b/resources/favicons/front/favicon-16x16.png differ diff --git a/resources/favicons/front/favicon-32x32.png b/resources/favicons/front/favicon-32x32.png new file mode 100644 index 0000000..7f21663 Binary files /dev/null and b/resources/favicons/front/favicon-32x32.png differ diff --git a/resources/favicons/front/favicon.ico b/resources/favicons/front/favicon.ico new file mode 100644 index 0000000..467711c Binary files /dev/null and b/resources/favicons/front/favicon.ico differ diff --git a/resources/favicons/front/manifest.json b/resources/favicons/front/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/resources/favicons/front/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/resources/favicons/front/ms-icon-144x144.png b/resources/favicons/front/ms-icon-144x144.png new file mode 100644 index 0000000..c92fc36 Binary files /dev/null and b/resources/favicons/front/ms-icon-144x144.png differ diff --git a/resources/favicons/front/ms-icon-150x150.png b/resources/favicons/front/ms-icon-150x150.png new file mode 100644 index 0000000..78c8cd0 Binary files /dev/null and b/resources/favicons/front/ms-icon-150x150.png differ diff --git a/resources/favicons/front/ms-icon-310x310.png b/resources/favicons/front/ms-icon-310x310.png new file mode 100644 index 0000000..e0d5a87 Binary files /dev/null and b/resources/favicons/front/ms-icon-310x310.png differ diff --git a/resources/favicons/front/ms-icon-70x70.png b/resources/favicons/front/ms-icon-70x70.png new file mode 100644 index 0000000..ca90a5b Binary files /dev/null and b/resources/favicons/front/ms-icon-70x70.png differ diff --git a/resources/imageSources/supportweb.png b/resources/imageSources/supportweb.png deleted file mode 100644 index 9641d1f..0000000 Binary files a/resources/imageSources/supportweb.png and /dev/null differ diff --git a/resources/imageSources/supportweb.xcf b/resources/imageSources/supportweb.xcf deleted file mode 100644 index f3adda5..0000000 Binary files a/resources/imageSources/supportweb.xcf and /dev/null differ diff --git a/resources/imageSources/supportweb_favico.png b/resources/imageSources/supportweb_favico.png deleted file mode 100644 index 5d70c73..0000000 Binary files a/resources/imageSources/supportweb_favico.png and /dev/null differ diff --git a/resources/js/vendor/ckeditor/.gitignore b/resources/js/vendor/ckeditor/.gitignore deleted file mode 100644 index 3c3629e..0000000 --- a/resources/js/vendor/ckeditor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/resources/js/vendor/ckeditor/LICENSE.md b/resources/js/vendor/ckeditor/LICENSE.md deleted file mode 100644 index 95eabee..0000000 --- a/resources/js/vendor/ckeditor/LICENSE.md +++ /dev/null @@ -1,49 +0,0 @@ -Software License Agreement -========================== - -Copyright (c) 2014-2021, CKSource - Frederico Knabben. All rights reserved. - -Online builder code samples are licensed under the terms of the MIT License (see Appendix A): - - http://en.wikipedia.org/wiki/MIT_License - -CKEditor 5 collaboration features are only available under a commercial license. [Contact us](https://ckeditor.com/contact/) for more details. - -Free 30-days trials of CKEditor 5 collaboration features are available: - * https://ckeditor.com/collaboration/ - Real-time collaboration (with all features). - * https://ckeditor.com/collaboration/comments/ - Inline comments feature (without real-time collaborative editing). - * https://ckeditor.com/collaboration/track-changes/ - Track changes feature (without real-time collaborative editing). - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand -and product names are trademarks, registered trademarks or service -marks of their respective holders. - ---- - -Appendix A: The MIT License ---------------------------- - -The MIT License (MIT) - -Copyright (c) 2014-2021, CKSource - Frederico Knabben - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/resources/js/vendor/ckeditor/README.md b/resources/js/vendor/ckeditor/README.md deleted file mode 100644 index 9290930..0000000 --- a/resources/js/vendor/ckeditor/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# CKEditor 5 editor generated with the online builder - -This repository presents a CKEditor 5 editor build generated by the [Online builder tool](https://ckeditor.com/ckeditor-5/online-builder) - -## Quick start - -1. Open the `sample/index.html` page in the browser. - -If you picked the real-time collaboration plugins: - -2. Fill the dialog with correct token, websocket and upload URL endpoints. If you do not have these yet or do not know their meaning, [contact us](https://ckeditor.com/contact/). - -3. Copy the URL and share it or paste in another tab to enjoy real-time collaborative editing. - -If you picked the non-real-time collaboration plugins: - -2. Fill the prompt with the license key. If you do not have the license key yet [contact us](https://ckeditor.com/contact/). - -## Configuring build - -Changes like changing toolbar items, changing order of icons or customizing plugin configurations should be relatively easy to make. Open the `sample/index.html` file and edit the script that initialized the CKEditor 5. Save the file and refresh the browser. That's all. - -*Note:* If you have any problems with browser caching use the `Ctrl + R` or `Cmd + R` shortcut depending on your system. - -However if you want to remove or add a plugin to the build you need to follow the next step of this guide. - -Note that it is also possible to go back to the [Online builder tool](https://ckeditor.com/ckeditor-5/online-builder) and pick other set of plugins. But we encourage you to try the harder way and to learn the principles of Node.js and CKEditor 5 ecosystems that will allow you to do more cool things in the future! - -### Installation - -In order to rebuild the application you need to install all dependencies first. To do it, open the terminal in the project directory and type: - -``` -npm install -``` - -Make sure that you have the `node` and `npm` installed first. If not, then follow the instructions on the [Node.js documentation page](https://nodejs.org/en/). - -### Adding or removing plugins - -Now you can install additional plugin in the build. Just follow the [Adding a plugin to an editor tutorial](https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/installing-plugins.html#adding-a-plugin-to-an-editor) - -### Rebuilding editor - -If you have already done the [Installation](#installation) and [Adding or removing plugins](#adding-or-removing-plugins) steps, you're ready to rebuild the editor by running the following command: - -``` -npm run build -``` - -This will build the CKEditor 5 to the `build` directory. You can open your browser and you should be able to see the changes you've made in the code. If not, then try to refresh also the browser cache by typing `Ctrl + R` or `Cmd + R` depending on your system. - -## What's next? - -Follow the guides available on https://ckeditor.com/docs/ckeditor5/latest/framework/index.html and enjoy the document editing. - -## FAQ -| Where is the place to report bugs and feature requests? - -You can create an issue on https://github.com/ckeditor/ckeditor5/issues including the build id - `unyb7c61pdjq-xt0bz4ltrghq`. Make sure that the question / problem is unique, please look for a possibly asked questions in the search box. Duplicates will be closed. - -| Where can I learn more about the CKEditor 5 framework? - -Here: https://ckeditor.com/docs/ckeditor5/latest/framework/ - -| Is it possible to use online builder with common frameworks like React, Vue or Angular? - -Not yet, but it these integrations will be available at some point in the future. diff --git a/resources/js/vendor/ckeditor/build/ckeditor.js b/resources/js/vendor/ckeditor/build/ckeditor.js deleted file mode 100644 index c9923c9..0000000 --- a/resources/js/vendor/ckeditor/build/ckeditor.js +++ /dev/null @@ -1,86516 +0,0 @@ -(function(d){ const l = d['fr'] = d['fr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 sur %1",Accept:"","Align center":"Centrer","Align left":"Aligner à gauche","Align right":"Aligner à droite",Aquamarine:"Bleu vert",Big:"Grand",Black:"Noir","Block quote":"Citation",Blue:"Bleu",Bold:"Gras","Bulleted List":"Liste à puces","Bulleted list styles toolbar":"Barre d'outils des styles de liste à puce",Cancel:"Annuler","Characters: %0":"Caractères : %0","Choose heading":"Choisir l'en-tête",Circle:"Cercle",Decimal:"Chiffres","Decimal with leading zero":"Chiffres avec des zéros supplémentaire","Decrease indent":"Diminuer le retrait",Default:"Par défaut","Dim grey":"Gris pâle",Disc:"Disque","Document colors":"Couleurs du document",Downloadable:"Fichier téléchargeable","Dropdown toolbar":"Barre d'outils dans un menu déroulant","Edit block":"Modifier le bloc","Edit link":"Modifier le lien","Editor block content toolbar":"Barre d'outils du contenu du bloc éditeur","Editor contextual toolbar":"Barre d'outils contextuelle de l'éditeur","Editor editing area: %0":"Zone d'édition de l'éditeur : %0","Editor toolbar":"Barre d'outils de l'éditeur","Font Color":"Couleur de police","Font Family":"Police","Font Size":"Taille de police",Green:"Vert",Grey:"Gris",Heading:"En-tête","Heading 1":"Titre 1","Heading 2":"Titre 2","Heading 3":"Titre 3","Heading 4":"Titre 4","Heading 5":"Titre 5","Heading 6":"Titre 6",HEX:"","Horizontal line":"Ligne horizontale",Huge:"Enorme","Increase indent":"Augmenter le retrait","Insert paragraph after block":"Insérer du texte après ce bloc","Insert paragraph before block":"Insérer du texte avant ce bloc",Italic:"Italique",Justify:"Justifier","Light blue":"Bleu clair","Light green":"Vert clair","Light grey":"Gris clair",Link:"Lien","Link URL":"URL du lien","List properties":"Liste des propriétés","Lower-latin":"Lettres minuscules","Lower–roman":"Chiffres romains en minuscules",Next:"Suivant","Numbered List":"Liste numérotée","Numbered list styles toolbar":"Barre d'outils des styles de liste numérotée","Open in a new tab":"Ouvrir dans un nouvel onglet","Open link in new tab":"Ouvrir le lien dans un nouvel onglet",Orange:"Orange",Paragraph:"Paragraphe","Press Enter to type after or press Shift + Enter to type before the widget":"Appuyez sur la touche Entrée pour taper après ou sur Maj + Entrée pour taper avant le widget.",Previous:"Précedent",Purple:"Violet",Red:"Rouge",Redo:"Restaurer","Remove color":"Enlever la couleur","Remove Format":"Enlever le format","Reversed order":"Ordre inversé","Rich Text Editor":"Éditeur de texte enrichi",Save:"Enregistrer","Select all":"Sélectionner tout","Show more items":"Montrer plus d'éléments",Small:"Petit",Source:"Source",Square:"Carré","Start at":"Commencer à","Start index must be greater than 0.":"L'indice de départ doit être supérieur à 0.","Text alignment":"Alignement du texte","Text alignment toolbar":"Barre d'outils d'alignement du texte","This link has no URL":"Ce lien n'a pas d'URL",Tiny:"Minuscule","Toggle the circle list style":"Activer / désactiver le style de liste \"cercle\"","Toggle the decimal list style":"Activer / désactiver le style de liste \"chiffres\"","Toggle the decimal with leading zero list style":"Activer / désactiver le style de liste \"chiffres de mêmes longueurs\"","Toggle the disc list style":"Activer / désactiver le style de liste \"disque\"","Toggle the lower–latin list style":"Activer / désactiver le style de liste \"lettres minuscules\"","Toggle the lower–roman list style":"Activer / désactiver le style de liste \"chiffres romains en minuscules\"","Toggle the square list style":"Activer / désactiver le style de liste \"carré\"","Toggle the upper–latin list style":"Activer / désactiver le style de liste \"lettres majuscules\"","Toggle the upper–roman list style":"Activer / désactiver le style de liste \"chiffres romains en majuscules\"",Turquoise:"Turquoise",Underline:"Souligné",Undo:"Annuler",Unlink:"Supprimer le lien","Upper-latin":"Lettres majuscules","Upper-roman":"Chiffres romains en majuscules",White:"Blanc","Widget toolbar":"Barre d'outils du widget","Words: %0":"Mots : %0",Yellow:"Jaune"} );l.getPluralForm=function(n){return (n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); -/*! - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md. - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["ClassicEditor"] = factory(); - else - root["ClassicEditor"] = factory(); -})(self, function() { -return /******/ (function() { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ 168: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* MIT license */ -/* eslint-disable no-mixed-operators */ -const cssKeywords = __webpack_require__(874); - -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) - -const reverseKeywords = {}; -for (const key of Object.keys(cssKeywords)) { - reverseKeywords[cssKeywords[key]] = key; -} - -const convert = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; - -module.exports = convert; - -// Hide .channels and .labels properties -for (const model of Object.keys(convert)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - const {channels, labels} = convert[model]; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); -} - -convert.rgb.hsl = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const min = Math.min(r, g, b); - const max = Math.max(r, g, b); - const delta = max - min; - let h; - let s; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - const l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; -}; - -convert.rgb.hsv = function (rgb) { - let rdif; - let gdif; - let bdif; - let h; - let s; - - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const v = Math.max(r, g, b); - const diff = v - Math.min(r, g, b); - const diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = 0; - s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; -}; - -convert.rgb.hwb = function (rgb) { - const r = rgb[0]; - const g = rgb[1]; - let b = rgb[2]; - const h = convert.rgb.hsl(rgb)[0]; - const w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; -}; - -convert.rgb.cmyk = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - - const k = Math.min(1 - r, 1 - g, 1 - b); - const c = (1 - r - k) / (1 - k) || 0; - const m = (1 - g - k) / (1 - k) || 0; - const y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; -}; - -function comparativeDistance(x, y) { - /* - See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - */ - return ( - ((x[0] - y[0]) ** 2) + - ((x[1] - y[1]) ** 2) + - ((x[2] - y[2]) ** 2) - ); -} - -convert.rgb.keyword = function (rgb) { - const reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - let currentClosestDistance = Infinity; - let currentClosestKeyword; - - for (const keyword of Object.keys(cssKeywords)) { - const value = cssKeywords[keyword]; - - // Compute comparative distance - const distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - - return currentClosestKeyword; -}; - -convert.keyword.rgb = function (keyword) { - return cssKeywords[keyword]; -}; - -convert.rgb.xyz = function (rgb) { - let r = rgb[0] / 255; - let g = rgb[1] / 255; - let b = rgb[2] / 255; - - // Assume sRGB - r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); - g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); - b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); - - const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; -}; - -convert.rgb.lab = function (rgb) { - const xyz = convert.rgb.xyz(rgb); - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.hsl.rgb = function (hsl) { - const h = hsl[0] / 360; - const s = hsl[1] / 100; - const l = hsl[2] / 100; - let t2; - let t3; - let val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - const t1 = 2 * l - t2; - - const rgb = [0, 0, 0]; - for (let i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; -}; - -convert.hsl.hsv = function (hsl) { - const h = hsl[0]; - let s = hsl[1] / 100; - let l = hsl[2] / 100; - let smin = s; - const lmin = Math.max(l, 0.01); - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - const v = (l + s) / 2; - const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; -}; - -convert.hsv.rgb = function (hsv) { - const h = hsv[0] / 60; - const s = hsv[1] / 100; - let v = hsv[2] / 100; - const hi = Math.floor(h) % 6; - - const f = h - Math.floor(h); - const p = 255 * v * (1 - s); - const q = 255 * v * (1 - (s * f)); - const t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; - -convert.hsv.hsl = function (hsv) { - const h = hsv[0]; - const s = hsv[1] / 100; - const v = hsv[2] / 100; - const vmin = Math.max(v, 0.01); - let sl; - let l; - - l = (2 - s) * v; - const lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; -}; - -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - const h = hwb[0] / 360; - let wh = hwb[1] / 100; - let bl = hwb[2] / 100; - const ratio = wh + bl; - let f; - - // Wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - const i = Math.floor(6 * h); - const v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - const n = wh + f * (v - wh); // Linear interpolation - - let r; - let g; - let b; - /* eslint-disable max-statements-per-line,no-multi-spaces */ - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - /* eslint-enable max-statements-per-line,no-multi-spaces */ - - return [r * 255, g * 255, b * 255]; -}; - -convert.cmyk.rgb = function (cmyk) { - const c = cmyk[0] / 100; - const m = cmyk[1] / 100; - const y = cmyk[2] / 100; - const k = cmyk[3] / 100; - - const r = 1 - Math.min(1, c * (1 - k) + k); - const g = 1 - Math.min(1, m * (1 - k) + k); - const b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.rgb = function (xyz) { - const x = xyz[0] / 100; - const y = xyz[1] / 100; - const z = xyz[2] / 100; - let r; - let g; - let b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // Assume sRGB - r = r > 0.0031308 - ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.lab = function (xyz) { - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.lab.xyz = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let x; - let y; - let z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - const y2 = y ** 3; - const x2 = x ** 3; - const z2 = z ** 3; - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; -}; - -convert.lab.lch = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let h; - - const hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - const c = Math.sqrt(a * a + b * b); - - return [l, c, h]; -}; - -convert.lch.lab = function (lch) { - const l = lch[0]; - const c = lch[1]; - const h = lch[2]; - - const hr = h / 360 * 2 * Math.PI; - const a = c * Math.cos(hr); - const b = c * Math.sin(hr); - - return [l, a, b]; -}; - -convert.rgb.ansi16 = function (args, saturation = null) { - const [r, g, b] = args; - let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - let ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; -}; - -convert.hsv.ansi16 = function (args) { - // Optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); -}; - -convert.rgb.ansi256 = function (args) { - const r = args[0]; - const g = args[1]; - const b = args[2]; - - // We use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - const ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; -}; - -convert.ansi16.rgb = function (args) { - let color = args % 10; - - // Handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - const mult = (~~(args > 50) + 1) * 0.5; - const r = ((color & 1) * mult) * 255; - const g = (((color >> 1) & 1) * mult) * 255; - const b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; -}; - -convert.ansi256.rgb = function (args) { - // Handle greyscale - if (args >= 232) { - const c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - let rem; - const r = Math.floor(args / 36) / 5 * 255; - const g = Math.floor((rem = args % 36) / 6) / 5 * 255; - const b = (rem % 6) / 5 * 255; - - return [r, g, b]; -}; - -convert.rgb.hex = function (args) { - const integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.hex.rgb = function (args) { - const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - let colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(char => { - return char + char; - }).join(''); - } - - const integer = parseInt(colorString, 16); - const r = (integer >> 16) & 0xFF; - const g = (integer >> 8) & 0xFF; - const b = integer & 0xFF; - - return [r, g, b]; -}; - -convert.rgb.hcg = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const max = Math.max(Math.max(r, g), b); - const min = Math.min(Math.min(r, g), b); - const chroma = (max - min); - let grayscale; - let hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; -}; - -convert.hsl.hcg = function (hsl) { - const s = hsl[1] / 100; - const l = hsl[2] / 100; - - const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); - - let f = 0; - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; -}; - -convert.hsv.hcg = function (hsv) { - const s = hsv[1] / 100; - const v = hsv[2] / 100; - - const c = s * v; - let f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; -}; - -convert.hcg.rgb = function (hcg) { - const h = hcg[0] / 360; - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - const pure = [0, 0, 0]; - const hi = (h % 1) * 6; - const v = hi % 1; - const w = 1 - v; - let mg = 0; - - /* eslint-disable max-statements-per-line */ - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - /* eslint-enable max-statements-per-line */ - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; - -convert.hcg.hsv = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const v = c + g * (1.0 - c); - let f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; -}; - -convert.hcg.hsl = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const l = g * (1.0 - c) + 0.5 * c; - let s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; -}; - -convert.hcg.hwb = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - const v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; - -convert.hwb.hcg = function (hwb) { - const w = hwb[1] / 100; - const b = hwb[2] / 100; - const v = 1 - b; - const c = v - w; - let g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; -}; - -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; - -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; - -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; - -convert.gray.hsl = function (args) { - return [0, 0, args[0]]; -}; - -convert.gray.hsv = convert.gray.hsl; - -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; - -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; - -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; - -convert.gray.hex = function (gray) { - const val = Math.round(gray[0] / 100 * 255) & 0xFF; - const integer = (val << 16) + (val << 8) + val; - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.rgb.gray = function (rgb) { - const val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; - - -/***/ }), - -/***/ 85: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -const conversions = __webpack_require__(168); -const route = __webpack_require__(111); - -const convert = {}; - -const models = Object.keys(conversions); - -function wrapRaw(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - return fn(args); - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -function wrapRounded(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - const result = fn(args); - - // We're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (let len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -models.forEach(fromModel => { - convert[fromModel] = {}; - - Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); - - const routes = route(fromModel); - const routeModels = Object.keys(routes); - - routeModels.forEach(toModel => { - const fn = routes[toModel]; - - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); - }); -}); - -module.exports = convert; - - -/***/ }), - -/***/ 111: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -const conversions = __webpack_require__(168); - -/* - This function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. -*/ - -function buildGraph() { - const graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - const models = Object.keys(conversions); - - for (let len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - const graph = buildGraph(); - const queue = [fromModel]; // Unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - const current = queue.pop(); - const adjacents = Object.keys(conversions[current]); - - for (let len = adjacents.length, i = 0; i < len; i++) { - const adjacent = adjacents[i]; - const node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; -} - -function link(from, to) { - return function (args) { - return to(from(args)); - }; -} - -function wrapConversion(toModel, graph) { - const path = [graph[toModel].parent, toModel]; - let fn = conversions[graph[toModel].parent][toModel]; - - let cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; -} - -module.exports = function (fromModel) { - const graph = deriveBFS(fromModel); - const conversion = {}; - - const models = Object.keys(graph); - for (let len = models.length, i = 0; i < len; i++) { - const toModel = models[i]; - const node = graph[toModel]; - - if (node.parent === null) { - // No possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; -}; - - - -/***/ }), - -/***/ 874: -/***/ (function(module) { - -"use strict"; - - -module.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/global */ -/******/ !function() { -/******/ __webpack_require__.g = (function() { -/******/ if (typeof globalThis === 'object') return globalThis; -/******/ try { -/******/ return this || new Function('return this')(); -/******/ } catch (e) { -/******/ if (typeof window === 'object') return window; -/******/ } -/******/ })(); -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be in strict mode. -!function() { -"use strict"; - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "default": function() { return /* binding */ ckeditor; } -}); - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-ui/src/bindings/clickoutsidehandler.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/* global document */ -/** - * Handles clicking **outside** of a specified set of elements, then fires an action. - * - * **Note**: Actually, the action is executed upon `mousedown`, not `click`. It prevents - * certain issues when the user keeps holding the mouse button and the UI cannot react - * properly. - * - * @param options Configuration options. - * @param options.emitter The emitter to which this behavior should be added. - * @param options.activator Function returning a `Boolean`, to determine whether the handler is active. - * @param options.contextElements Array of HTML elements or a callback returning an array of HTML elements - * that determine the scope of the handler. Clicking any of them or their descendants will **not** fire the callback. - * @param options.callback An action executed by the handler. - */ -function clickoutsidehandler_clickOutsideHandler({ emitter, activator, callback, contextElements }) { - emitter.listenTo(document, 'mousedown', (evt, domEvt) => { - if (!activator()) { - return; - } - // Check if `composedPath` is `undefined` in case the browser does not support native shadow DOM. - // Can be removed when all supported browsers support native shadow DOM. - const path = typeof domEvt.composedPath == 'function' ? domEvt.composedPath() : []; - const contextElementsList = typeof contextElements == 'function' ? contextElements() : contextElements; - for (const contextElement of contextElementsList) { - if (contextElement.contains(domEvt.target) || path.includes(contextElement)) { - return; - } - } - callback(); - }); -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-ui/src/bindings/csstransitiondisablermixin.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * A mixin that brings the possibility to temporarily disable CSS transitions using - * {@link module:ui/view~View} methods. It is helpful when, for instance, the transitions should not happen - * when the view is first displayed but they should work normal in other cases. - * - * The methods to control the CSS transitions are: - * * `disableCssTransitions()` – Adds the `.ck-transitions-disabled` class to the - * {@link module:ui/view~View#element view element}. - * * `enableCssTransitions()` – Removes the `.ck-transitions-disabled` class from the - * {@link module:ui/view~View#element view element}. - * - * The usage comes down to: - * - * ```ts - * const MyViewWithCssTransitionDisabler = CssTransitionDisablerMixin( MyView ); - * const view = new MyViewWithCssTransitionDisabler(); - * - * // ... - * - * view.disableCssTransitions(); - * view.show(); - * view.enableCssTransitions(); - * ``` - * - * @param view View instance that should get this functionality. - */ -function CssTransitionDisablerMixin(view) { - class Mixin extends view { - disableCssTransitions() { - this._isCssTransitionsDisabled = true; - } - enableCssTransitions() { - this._isCssTransitionsDisabled = false; - } - constructor(...args) { - super(...args); - this.set('_isCssTransitionsDisabled', false); - this.initializeCssTransitionDisablerMixin(); - } - initializeCssTransitionDisablerMixin() { - this.extendTemplate({ - attributes: { - class: [ - this.bindTemplate.if('_isCssTransitionsDisabled', 'ck-transitions-disabled') - ] - } - }); - } - } - return Mixin; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-ui/src/bindings/submithandler.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * A handler useful for {@link module:ui/view~View views} working as HTML forms. It intercepts a native DOM - * `submit` event, prevents the default web browser behavior (navigation and page reload) and - * fires the `submit` event on a view instead. Such a custom event can be then used by any - * {@link module:utils/dom/emittermixin~DomEmitter emitter}, e.g. to serialize the form data. - * - * ```ts - * import submitHandler from '@ckeditor/ckeditor5-ui/src/bindings/submithandler'; - * - * // ... - * - * class AnyFormView extends View { - * constructor() { - * super(); - * - * // ... - * - * submitHandler( { - * view: this - * } ); - * } - * } - * - * // ... - * - * const view = new AnyFormView(); - * - * // A sample listener attached by an emitter working with the view. - * this.listenTo( view, 'submit', () => { - * saveTheFormData(); - * hideTheForm(); - * } ); - * ``` - * - * @param options Configuration options. - * @param options.view The view which DOM `submit` events should be handled. - */ -function submitHandler({ view }) { - view.listenTo(view.element, 'submit', (evt, domEvt) => { - domEvt.preventDefault(); - view.fire('submit'); - }, { useCapture: true }); -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-ui/src/bindings/addkeyboardhandlingforgrid.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * A helper that adds a keyboard navigation support (arrow up/down/left/right) for grids. - * - * @param options Configuration options. - * @param options.keystrokeHandler Keystroke handler to register navigation with arrow keys. - * @param options.focusTracker A focus tracker for grid elements. - * @param options.gridItems A collection of grid items. - * @param options.numberOfColumns Number of columns in the grid. Can be specified as a function that returns - * the number (e.g. for responsive grids). - * @param options.uiLanguageDirection String of ui language direction. - */ -function addKeyboardHandlingForGrid({ keystrokeHandler, focusTracker, gridItems, numberOfColumns, uiLanguageDirection }) { - const getNumberOfColumns = typeof numberOfColumns === 'number' ? () => numberOfColumns : numberOfColumns; - keystrokeHandler.set('arrowright', getGridItemFocuser((focusedElementIndex, gridItems) => { - return uiLanguageDirection === 'rtl' ? - getLeftElementIndex(focusedElementIndex, gridItems.length) : - getRightElementIndex(focusedElementIndex, gridItems.length); - })); - keystrokeHandler.set('arrowleft', getGridItemFocuser((focusedElementIndex, gridItems) => { - return uiLanguageDirection === 'rtl' ? - getRightElementIndex(focusedElementIndex, gridItems.length) : - getLeftElementIndex(focusedElementIndex, gridItems.length); - })); - keystrokeHandler.set('arrowup', getGridItemFocuser((focusedElementIndex, gridItems) => { - let nextIndex = focusedElementIndex - getNumberOfColumns(); - if (nextIndex < 0) { - nextIndex = focusedElementIndex + getNumberOfColumns() * Math.floor(gridItems.length / getNumberOfColumns()); - if (nextIndex > gridItems.length - 1) { - nextIndex -= getNumberOfColumns(); - } - } - return nextIndex; - })); - keystrokeHandler.set('arrowdown', getGridItemFocuser((focusedElementIndex, gridItems) => { - let nextIndex = focusedElementIndex + getNumberOfColumns(); - if (nextIndex > gridItems.length - 1) { - nextIndex = focusedElementIndex % getNumberOfColumns(); - } - return nextIndex; - })); - function getGridItemFocuser(getIndexToFocus) { - return (evt) => { - const focusedElement = gridItems.find(item => item.element === focusTracker.focusedElement); - const focusedElementIndex = gridItems.getIndex(focusedElement); - const nextIndexToFocus = getIndexToFocus(focusedElementIndex, gridItems); - gridItems.get(nextIndexToFocus).focus(); - evt.stopPropagation(); - evt.preventDefault(); - }; - } - /** - * Function returning the next index. - * - * ``` - * before: [ ][x][ ] after: [ ][ ][x] - * index = 1 index = 2 - * ``` - * - * If current index is last, function returns first index. - * - * ``` - * before: [ ][ ][x] after: [x][ ][ ] - * index = 2 index = 0 - * ``` - * - * @param elementIndex Number of current index. - * @param collectionLength A count of collection items. - */ - function getRightElementIndex(elementIndex, collectionLength) { - if (elementIndex === collectionLength - 1) { - return 0; - } - else { - return elementIndex + 1; - } - } - /** - * Function returning the previous index. - * - * ``` - * before: [ ][x][ ] after: [x][ ][ ] - * index = 1 index = 0 - * ``` - * - * If current index is first, function returns last index. - * - * ``` - * before: [x][ ][ ] after: [ ][ ][x] - * index = 0 index = 2 - * ``` - * - * @param elementIndex Number of current index. - * @param collectionLength A count of collection items. - */ - function getLeftElementIndex(elementIndex, collectionLength) { - if (elementIndex === 0) { - return collectionLength - 1; - } - else { - return elementIndex - 1; - } - } -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/env.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/* globals navigator:false */ -/** - * @module utils/env - */ -/** - * Safely returns `userAgent` from browser's navigator API in a lower case. - * If navigator API is not available it will return an empty string. - */ -function getUserAgent() { - // In some environments navigator API might not be available. - try { - return navigator.userAgent.toLowerCase(); - } - catch (e) { - return ''; - } -} -const userAgent = getUserAgent(); -/** - * A namespace containing environment and browser information. - */ -const env_env = { - isMac: isMac(userAgent), - isWindows: isWindows(userAgent), - isGecko: isGecko(userAgent), - isSafari: isSafari(userAgent), - isiOS: isiOS(userAgent), - isAndroid: isAndroid(userAgent), - isBlink: isBlink(userAgent), - features: { - isRegExpUnicodePropertySupported: isRegExpUnicodePropertySupported() - } -}; -/* harmony default export */ var src_env = (env_env); -/** - * Checks if User Agent represented by the string is running on Macintosh. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is running on Macintosh or not. - */ -function isMac(userAgent) { - return userAgent.indexOf('macintosh') > -1; -} -/** - * Checks if User Agent represented by the string is running on Windows. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is running on Windows or not. - */ -function isWindows(userAgent) { - return userAgent.indexOf('windows') > -1; -} -/** - * Checks if User Agent represented by the string is Firefox (Gecko). - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is Firefox or not. - */ -function isGecko(userAgent) { - return !!userAgent.match(/gecko\/\d+/); -} -/** - * Checks if User Agent represented by the string is Safari. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is Safari or not. - */ -function isSafari(userAgent) { - return userAgent.indexOf(' applewebkit/') > -1 && userAgent.indexOf('chrome') === -1; -} -/** - * Checks if User Agent represented by the string is running in iOS. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is running in iOS or not. - */ -function isiOS(userAgent) { - // "Request mobile site" || "Request desktop site". - return !!userAgent.match(/iphone|ipad/i) || (isMac(userAgent) && navigator.maxTouchPoints > 0); -} -/** - * Checks if User Agent represented by the string is Android mobile device. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is Safari or not. - */ -function isAndroid(userAgent) { - return userAgent.indexOf('android') > -1; -} -/** - * Checks if User Agent represented by the string is Blink engine. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is Blink engine or not. - */ -function isBlink(userAgent) { - // The Edge browser before switching to the Blink engine used to report itself as Chrome (and "Edge/") - // but after switching to the Blink it replaced "Edge/" with "Edg/". - return userAgent.indexOf('chrome/') > -1 && userAgent.indexOf('edge/') < 0; -} -/** - * Checks if the current environment supports ES2018 Unicode properties like `\p{P}` or `\p{L}`. - * More information about unicode properties might be found - * [in Unicode Standard Annex #44](https://www.unicode.org/reports/tr44/#GC_Values_Table). - */ -function isRegExpUnicodePropertySupported() { - let isSupported = false; - // Feature detection for Unicode properties. Added in ES2018. Currently Firefox does not support it. - // See https://github.com/ckeditor/ckeditor5-mention/issues/44#issuecomment-487002174. - try { - // Usage of regular expression literal cause error during build (ckeditor/ckeditor5-dev#534). - isSupported = 'ć'.search(new RegExp('[\\p{L}]', 'u')) === 0; - } - catch (error) { - // Firefox throws a SyntaxError when the group is unsupported. - } - return isSupported; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/fastdiff.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/fastdiff - */ -/** - * Finds positions of the first and last change in the given string/array and generates a set of changes: - * - * ```ts - * fastDiff( '12a', '12xyza' ); - * // [ { index: 2, type: 'insert', values: [ 'x', 'y', 'z' ] } ] - * - * fastDiff( '12a', '12aa' ); - * // [ { index: 3, type: 'insert', values: [ 'a' ] } ] - * - * fastDiff( '12xyza', '12a' ); - * // [ { index: 2, type: 'delete', howMany: 3 } ] - * - * fastDiff( [ '1', '2', 'a', 'a' ], [ '1', '2', 'a' ] ); - * // [ { index: 3, type: 'delete', howMany: 1 } ] - * - * fastDiff( [ '1', '2', 'a', 'b', 'c', '3' ], [ '2', 'a', 'b' ] ); - * // [ { index: 0, type: 'insert', values: [ '2', 'a', 'b' ] }, { index: 3, type: 'delete', howMany: 6 } ] - * ``` - * - * Passed arrays can contain any type of data, however to compare them correctly custom comparator function - * should be passed as a third parameter: - * - * ```ts - * fastDiff( [ { value: 1 }, { value: 2 } ], [ { value: 1 }, { value: 3 } ], ( a, b ) => { - * return a.value === b.value; - * } ); - * // [ { index: 1, type: 'insert', values: [ { value: 3 } ] }, { index: 2, type: 'delete', howMany: 1 } ] - * ``` - * - * The resulted set of changes can be applied to the input in order to transform it into the output, for example: - * - * ```ts - * let input = '12abc3'; - * const output = '2ab'; - * const changes = fastDiff( input, output ); - * - * changes.forEach( change => { - * if ( change.type == 'insert' ) { - * input = input.substring( 0, change.index ) + change.values.join( '' ) + input.substring( change.index ); - * } else if ( change.type == 'delete' ) { - * input = input.substring( 0, change.index ) + input.substring( change.index + change.howMany ); - * } - * } ); - * - * // input equals output now - * ``` - * - * or in case of arrays: - * - * ```ts - * let input = [ '1', '2', 'a', 'b', 'c', '3' ]; - * const output = [ '2', 'a', 'b' ]; - * const changes = fastDiff( input, output ); - * - * changes.forEach( change => { - * if ( change.type == 'insert' ) { - * input = input.slice( 0, change.index ).concat( change.values, input.slice( change.index ) ); - * } else if ( change.type == 'delete' ) { - * input = input.slice( 0, change.index ).concat( input.slice( change.index + change.howMany ) ); - * } - * } ); - * - * // input equals output now - * ``` - * - * By passing `true` as the fourth parameter (`atomicChanges`) the output of this function will become compatible with - * the {@link module:utils/diff~diff `diff()`} function: - * - * ```ts - * fastDiff( '12a', '12xyza', undefined, true ); - * // [ 'equal', 'equal', 'insert', 'insert', 'insert', 'equal' ] - * ``` - * - * The default output format of this function is compatible with the output format of - * {@link module:utils/difftochanges~diffToChanges `diffToChanges()`}. The `diffToChanges()` input format is, in turn, - * compatible with the output of {@link module:utils/diff~diff `diff()`}: - * - * ```ts - * const a = '1234'; - * const b = '12xyz34'; - * - * // Both calls will return the same results (grouped changes format). - * fastDiff( a, b ); - * diffToChanges( diff( a, b ) ); - * - * // Again, both calls will return the same results (atomic changes format). - * fastDiff( a, b, undefined, true ); - * diff( a, b ); - * ``` - * - * @typeParam T The type of array elements. - * @typeParam AtomicChanges The type of `atomicChanges` parameter (selects the result type). - * @param a Input array or string. - * @param b Input array or string. - * @param cmp Optional function used to compare array values, by default `===` (strict equal operator) is used. - * @param atomicChanges Whether an array of `inset|delete|equal` operations should - * be returned instead of changes set. This makes this function compatible with {@link module:utils/diff~diff `diff()`}. - * Defaults to `false`. - * @returns Array of changes. The elements are either {@link module:utils/diff~DiffResult} or {@link module:utils/difftochanges~Change}, - * depending on `atomicChanges` parameter. - */ -function fastDiff(a, b, cmp, atomicChanges) { - // Set the comparator function. - cmp = cmp || function (a, b) { - return a === b; - }; - // Convert the string (or any array-like object - eg. NodeList) to an array by using the slice() method because, - // unlike Array.from(), it returns array of UTF-16 code units instead of the code points of a string. - // One code point might be a surrogate pair of two code units. All text offsets are expected to be in code units. - // See ckeditor/ckeditor5#3147. - // - // We need to make sure here that fastDiff() works identical to diff(). - const arrayA = Array.isArray(a) ? a : Array.prototype.slice.call(a); - const arrayB = Array.isArray(b) ? b : Array.prototype.slice.call(b); - // Find first and last change. - const changeIndexes = findChangeBoundaryIndexes(arrayA, arrayB, cmp); - // Transform into changes array. - const result = atomicChanges ? - changeIndexesToAtomicChanges(changeIndexes, arrayB.length) : - changeIndexesToChanges(arrayB, changeIndexes); - return result; -} -/** - * Finds position of the first and last change in the given arrays. For example: - * - * ```ts - * const indexes = findChangeBoundaryIndexes( [ '1', '2', '3', '4' ], [ '1', '3', '4', '2', '4' ] ); - * console.log( indexes ); // { firstIndex: 1, lastIndexOld: 3, lastIndexNew: 4 } - * ``` - * - * The above indexes means that in the first array the modified part is `1[23]4` and in the second array it is `1[342]4`. - * Based on such indexes, array with `insert`/`delete` operations which allows transforming first value into the second one - * can be generated. - */ -function findChangeBoundaryIndexes(arr1, arr2, cmp) { - // Find the first difference between passed values. - const firstIndex = findFirstDifferenceIndex(arr1, arr2, cmp); - // If arrays are equal return -1 indexes object. - if (firstIndex === -1) { - return { firstIndex: -1, lastIndexOld: -1, lastIndexNew: -1 }; - } - // Remove the common part of each value and reverse them to make it simpler to find the last difference between them. - const oldArrayReversed = cutAndReverse(arr1, firstIndex); - const newArrayReversed = cutAndReverse(arr2, firstIndex); - // Find the first difference between reversed values. - // It should be treated as "how many elements from the end the last difference occurred". - // - // For example: - // - // initial -> after cut -> reversed: - // oldValue: '321ba' -> '21ba' -> 'ab12' - // newValue: '31xba' -> '1xba' -> 'abx1' - // lastIndex: -> 2 - // - // So the last change occurred two characters from the end of the arrays. - const lastIndex = findFirstDifferenceIndex(oldArrayReversed, newArrayReversed, cmp); - // Use `lastIndex` to calculate proper offset, starting from the beginning (`lastIndex` kind of starts from the end). - const lastIndexOld = arr1.length - lastIndex; - const lastIndexNew = arr2.length - lastIndex; - return { firstIndex, lastIndexOld, lastIndexNew }; -} -/** - * Returns a first index on which given arrays differ. If both arrays are the same, -1 is returned. - */ -function findFirstDifferenceIndex(arr1, arr2, cmp) { - for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) { - if (arr1[i] === undefined || arr2[i] === undefined || !cmp(arr1[i], arr2[i])) { - return i; - } - } - return -1; // Return -1 if arrays are equal. -} -/** - * Returns a copy of the given array with `howMany` elements removed starting from the beginning and in reversed order. - * - * @param arr Array to be processed. - * @param howMany How many elements from array beginning to remove. - * @returns Shortened and reversed array. - */ -function cutAndReverse(arr, howMany) { - return arr.slice(howMany).reverse(); -} -/** - * Generates changes array based on change indexes from `findChangeBoundaryIndexes` function. This function will - * generate array with 0 (no changes), 1 (deletion or insertion) or 2 records (insertion and deletion). - * - * @param newArray New array for which change indexes were calculated. - * @param changeIndexes Change indexes object from `findChangeBoundaryIndexes` function. - * @returns Array of changes compatible with {@link module:utils/difftochanges~diffToChanges} format. - */ -function changeIndexesToChanges(newArray, changeIndexes) { - const result = []; - const { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes; - // Order operations as 'insert', 'delete' array to keep compatibility with {@link module:utils/difftochanges~diffToChanges} - // in most cases. However, 'diffToChanges' does not stick to any order so in some cases - // (for example replacing '12345' with 'abcd') it will generate 'delete', 'insert' order. - if (lastIndexNew - firstIndex > 0) { - result.push({ - index: firstIndex, - type: 'insert', - values: newArray.slice(firstIndex, lastIndexNew) - }); - } - if (lastIndexOld - firstIndex > 0) { - result.push({ - index: firstIndex + (lastIndexNew - firstIndex), - type: 'delete', - howMany: lastIndexOld - firstIndex - }); - } - return result; -} -/** - * Generates array with set `equal|insert|delete` operations based on change indexes from `findChangeBoundaryIndexes` function. - * - * @param changeIndexes Change indexes object from `findChangeBoundaryIndexes` function. - * @param newLength Length of the new array on which `findChangeBoundaryIndexes` calculated change indexes. - * @returns Array of changes compatible with {@link module:utils/diff~diff} format. - */ -function changeIndexesToAtomicChanges(changeIndexes, newLength) { - const { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes; - // No changes. - if (firstIndex === -1) { - return Array(newLength).fill('equal'); - } - let result = []; - if (firstIndex > 0) { - result = result.concat(Array(firstIndex).fill('equal')); - } - if (lastIndexNew - firstIndex > 0) { - result = result.concat(Array(lastIndexNew - firstIndex).fill('insert')); - } - if (lastIndexOld - firstIndex > 0) { - result = result.concat(Array(lastIndexOld - firstIndex).fill('delete')); - } - if (lastIndexNew < newLength) { - result = result.concat(Array(newLength - lastIndexNew).fill('equal')); - } - return result; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/diff.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/diff - */ - -// The following code is based on the "O(NP) Sequence Comparison Algorithm" -// by Sun Wu, Udi Manber, Gene Myers, Webb Miller. -/** - * Calculates the difference between two arrays or strings producing an array containing a list of changes - * necessary to transform input into output. - * - * ```ts - * diff( 'aba', 'acca' ); // [ 'equal', 'insert', 'insert', 'delete', 'equal' ] - * ``` - * - * This function is based on the "O(NP) Sequence Comparison Algorithm" by Sun Wu, Udi Manber, Gene Myers, Webb Miller. - * Unfortunately, while it gives the most precise results, its to complex for longer strings/arrow (above 200 items). - * Therefore, `diff()` automatically switches to {@link module:utils/fastdiff~fastDiff `fastDiff()`} when detecting - * such a scenario. The return formats of both functions are identical. - * - * @param a Input array or string. - * @param b Output array or string. - * @param cmp Optional function used to compare array values, by default === is used. - * @returns Array of changes. - */ -function diff(a, b, cmp) { - // Set the comparator function. - cmp = cmp || function (a, b) { - return a === b; - }; - const aLength = a.length; - const bLength = b.length; - // Perform `fastDiff` for longer strings/arrays (see #269). - if (aLength > 200 || bLength > 200 || aLength + bLength > 300) { - return diff.fastDiff(a, b, cmp, true); - } - // Temporary action type statics. - let _insert, _delete; - // Swapped the arrays to use the shorter one as the first one. - if (bLength < aLength) { - const tmp = a; - a = b; - b = tmp; - // We swap the action types as well. - _insert = 'delete'; - _delete = 'insert'; - } - else { - _insert = 'insert'; - _delete = 'delete'; - } - const m = a.length; - const n = b.length; - const delta = n - m; - // Edit scripts, for each diagonal. - const es = {}; - // Furthest points, the furthest y we can get on each diagonal. - const fp = {}; - function snake(k) { - // We use -1 as an alternative below to handle initial values ( instead of filling the fp with -1 first ). - // Furthest points (y) on the diagonal below k. - const y1 = (fp[k - 1] !== undefined ? fp[k - 1] : -1) + 1; - // Furthest points (y) on the diagonal above k. - const y2 = fp[k + 1] !== undefined ? fp[k + 1] : -1; - // The way we should go to get further. - const dir = y1 > y2 ? -1 : 1; - // Clone previous changes array (if any). - if (es[k + dir]) { - es[k] = es[k + dir].slice(0); - } - // Create changes array. - if (!es[k]) { - es[k] = []; - } - // Push the action. - es[k].push(y1 > y2 ? _insert : _delete); - // Set the beginning coordinates. - let y = Math.max(y1, y2); - let x = y - k; - // Traverse the diagonal as long as the values match. - while (x < m && y < n && cmp(a[x], b[y])) { - x++; - y++; - // Push no change action. - es[k].push('equal'); - } - return y; - } - let p = 0; - let k; - // Traverse the graph until we reach the end of the longer string. - do { - // Updates furthest points and edit scripts for diagonals below delta. - for (k = -p; k < delta; k++) { - fp[k] = snake(k); - } - // Updates furthest points and edit scripts for diagonals above delta. - for (k = delta + p; k > delta; k--) { - fp[k] = snake(k); - } - // Updates furthest point and edit script for the delta diagonal. - // note that the delta diagonal is the one which goes through the sink (m, n). - fp[delta] = snake(delta); - p++; - } while (fp[delta] !== n); - // Return the final list of edit changes. - // We remove the first item that represents the action for the injected nulls. - return es[delta].slice(1); -} -// Store the API in static property to easily overwrite it in tests. -// Too bad dependency injection does not work in Webpack + ES 6 (const) + Babel. -diff.fastDiff = fastDiff; - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/spy.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/spy - */ -/** - * Creates a spy function (ala Sinon.js) that can be used to inspect call to it. - * - * The following are the present features: - * - * * spy.called: property set to `true` if the function has been called at least once. - * - * @returns The spy function. - */ -function spy() { - return function spy() { - spy.called = true; - }; -} -/* harmony default export */ var src_spy = (spy); - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/eventinfo.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/eventinfo - */ - -/** - * The event object passed to event callbacks. It is used to provide information about the event as well as a tool to - * manipulate it. - */ -class EventInfo { - /** - * @param source The emitter. - * @param name The event name. - */ - constructor(source, name) { - this.source = source; - this.name = name; - this.path = []; - // The following methods are defined in the constructor because they must be re-created per instance. - this.stop = src_spy(); - this.off = src_spy(); - } -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/uid.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/uid - */ -/** - * A hash table of hex numbers to avoid using toString() in uid() which is costly. - * [ '00', '01', '02', ..., 'fe', 'ff' ] - */ -const HEX_NUMBERS = new Array(256).fill('') - .map((_, index) => ('0' + (index).toString(16)).slice(-2)); -/** - * Returns a unique id. The id starts with an "e" character and a randomly generated string of - * 32 alphanumeric characters. - * - * **Note**: The characters the unique id is built from correspond to the hex number notation - * (from "0" to "9", from "a" to "f"). In other words, each id corresponds to an "e" followed - * by 16 8-bit numbers next to each other. - * - * @returns An unique id string. - */ -function uid_uid() { - // Let's create some positive random 32bit integers first. - // - // 1. Math.random() is a float between 0 and 1. - // 2. 0x100000000 is 2^32 = 4294967296. - // 3. >>> 0 enforces integer (in JS all numbers are floating point). - // - // For instance: - // Math.random() * 0x100000000 = 3366450031.853859 - // but - // Math.random() * 0x100000000 >>> 0 = 3366450031. - const r1 = Math.random() * 0x100000000 >>> 0; - const r2 = Math.random() * 0x100000000 >>> 0; - const r3 = Math.random() * 0x100000000 >>> 0; - const r4 = Math.random() * 0x100000000 >>> 0; - // Make sure that id does not start with number. - return 'e' + - HEX_NUMBERS[r1 >> 0 & 0xFF] + - HEX_NUMBERS[r1 >> 8 & 0xFF] + - HEX_NUMBERS[r1 >> 16 & 0xFF] + - HEX_NUMBERS[r1 >> 24 & 0xFF] + - HEX_NUMBERS[r2 >> 0 & 0xFF] + - HEX_NUMBERS[r2 >> 8 & 0xFF] + - HEX_NUMBERS[r2 >> 16 & 0xFF] + - HEX_NUMBERS[r2 >> 24 & 0xFF] + - HEX_NUMBERS[r3 >> 0 & 0xFF] + - HEX_NUMBERS[r3 >> 8 & 0xFF] + - HEX_NUMBERS[r3 >> 16 & 0xFF] + - HEX_NUMBERS[r3 >> 24 & 0xFF] + - HEX_NUMBERS[r4 >> 0 & 0xFF] + - HEX_NUMBERS[r4 >> 8 & 0xFF] + - HEX_NUMBERS[r4 >> 16 & 0xFF] + - HEX_NUMBERS[r4 >> 24 & 0xFF]; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/priorities.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * Provides group of constants to use instead of hardcoding numeric priority values. - */ -const priorities = { - get(priority = 'normal') { - if (typeof priority != 'number') { - return this[priority] || this.normal; - } - else { - return priority; - } - }, - highest: 100000, - high: 1000, - normal: 0, - low: -1000, - lowest: -100000 -}; -/* harmony default export */ var src_priorities = (priorities); - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/inserttopriorityarray.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ - -/** - * Inserts any object with priority at correct index by priority so registered objects are always sorted from highest to lowest priority. - * - * @param objects Array of objects with priority to insert object to. - * @param objectToInsert Object with `priority` property. - */ -function insertToPriorityArray(objects, objectToInsert) { - const priority = src_priorities.get(objectToInsert.priority); - for (let i = 0; i < objects.length; i++) { - if (src_priorities.get(objects[i].priority) < priority) { - objects.splice(i, 0, objectToInsert); - return; - } - } - objects.push(objectToInsert); -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/ckeditorerror.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/ckeditorerror - */ -/* globals console */ -/** - * URL to the documentation with error codes. - */ -const DOCUMENTATION_URL = 'https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html'; -/** - * The CKEditor error class. - * - * You should throw `CKEditorError` when: - * - * * An unexpected situation occurred and the editor (most probably) will not work properly. Such exception will be handled - * by the {@link module:watchdog/watchdog~Watchdog watchdog} (if it is integrated), - * * If the editor is incorrectly integrated or the editor API is used in the wrong way. This way you will give - * feedback to the developer as soon as possible. Keep in mind that for common integration issues which should not - * stop editor initialization (like missing upload adapter, wrong name of a toolbar component) we use - * {@link module:utils/ckeditorerror~logWarning `logWarning()`} and - * {@link module:utils/ckeditorerror~logError `logError()`} - * to improve developers experience and let them see the a working editor as soon as possible. - * - * ```ts - * /** - * * Error thrown when a plugin cannot be loaded due to JavaScript errors, lack of plugins with a given name, etc. - * * - * * @error plugin-load - * * @param pluginName The name of the plugin that could not be loaded. - * * @param moduleName The name of the module which tried to load this plugin. - * *\/ - * throw new CKEditorError( 'plugin-load', { - * pluginName: 'foo', - * moduleName: 'bar' - * } ); - * ``` - */ -class ckeditorerror_CKEditorError extends Error { - /** - * Creates an instance of the CKEditorError class. - * - * @param errorName The error id in an `error-name` format. A link to this error documentation page will be added - * to the thrown error's `message`. - * @param context A context of the error by which the {@link module:watchdog/watchdog~Watchdog watchdog} - * is able to determine which editor crashed. It should be an editor instance or a property connected to it. It can be also - * a `null` value if the editor should not be restarted in case of the error (e.g. during the editor initialization). - * The error context should be checked using the `areConnectedThroughProperties( editor, context )` utility - * to check if the object works as the context. - * @param data Additional data describing the error. A stringified version of this object - * will be appended to the error message, so the data are quickly visible in the console. The original - * data object will also be later available under the {@link #data} property. - */ - constructor(errorName, context, data) { - super(getErrorMessage(errorName, data)); - this.name = 'CKEditorError'; - this.context = context; - this.data = data; - } - /** - * Checks if the error is of the `CKEditorError` type. - */ - is(type) { - return type === 'CKEditorError'; - } - /** - * A utility that ensures that the thrown error is a {@link module:utils/ckeditorerror~CKEditorError} one. - * It is useful when combined with the {@link module:watchdog/watchdog~Watchdog} feature, which can restart the editor in case - * of a {@link module:utils/ckeditorerror~CKEditorError} error. - * - * @param err The error to rethrow. - * @param context An object connected through properties with the editor instance. This context will be used - * by the watchdog to verify which editor should be restarted. - */ - static rethrowUnexpectedError(err, context) { - if (err.is && err.is('CKEditorError')) { - throw err; - } - /** - * An unexpected error occurred inside the CKEditor 5 codebase. This error will look like the original one - * to make the debugging easier. - * - * This error is only useful when the editor is initialized using the {@link module:watchdog/watchdog~Watchdog} feature. - * In case of such error (or any {@link module:utils/ckeditorerror~CKEditorError} error) the watchdog should restart the editor. - * - * @error unexpected-error - */ - const error = new ckeditorerror_CKEditorError(err.message, context); - // Restore the original stack trace to make the error look like the original one. - // See https://github.com/ckeditor/ckeditor5/issues/5595 for more details. - error.stack = err.stack; - throw error; - } -} -/** - * Logs a warning to the console with a properly formatted message and adds a link to the documentation. - * Use whenever you want to log a warning to the console. - * - * ```ts - * /** - * * There was a problem processing the configuration of the toolbar. The item with the given - * * name does not exist, so it was omitted when rendering the toolbar. - * * - * * @error toolbarview-item-unavailable - * * @param {String} name The name of the component. - * *\/ - * logWarning( 'toolbarview-item-unavailable', { name } ); - * ``` - * - * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to throw an error and when to log - * a warning or an error to the console. - * - * @param errorName The error name to be logged. - * @param data Additional data to be logged. - */ -function ckeditorerror_logWarning(errorName, data) { - console.warn(...formatConsoleArguments(errorName, data)); -} -/** - * Logs an error to the console with a properly formatted message and adds a link to the documentation. - * Use whenever you want to log an error to the console. - * - * ```ts - * /** - * * There was a problem processing the configuration of the toolbar. The item with the given - * * name does not exist, so it was omitted when rendering the toolbar. - * * - * * @error toolbarview-item-unavailable - * * @param {String} name The name of the component. - * *\/ - * logError( 'toolbarview-item-unavailable', { name } ); - * ``` - * - * **Note**: In most cases logging a warning using {@link module:utils/ckeditorerror~logWarning} is enough. - * - * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to use each method. - * - * @param errorName The error name to be logged. - * @param data Additional data to be logged. - */ -function logError(errorName, data) { - console.error(...formatConsoleArguments(errorName, data)); -} -/** - * Returns formatted link to documentation message. - */ -function getLinkToDocumentationMessage(errorName) { - return `\nRead more: ${DOCUMENTATION_URL}#error-${errorName}`; -} -/** - * Returns formatted error message. - */ -function getErrorMessage(errorName, data) { - const processedObjects = new WeakSet(); - const circularReferencesReplacer = (key, value) => { - if (typeof value === 'object' && value !== null) { - if (processedObjects.has(value)) { - return `[object ${value.constructor.name}]`; - } - processedObjects.add(value); - } - return value; - }; - const stringifiedData = data ? ` ${JSON.stringify(data, circularReferencesReplacer)}` : ''; - const documentationLink = getLinkToDocumentationMessage(errorName); - return errorName + stringifiedData + documentationLink; -} -/** - * Returns formatted console error arguments. - */ -function formatConsoleArguments(errorName, data) { - const documentationMessage = getLinkToDocumentationMessage(errorName); - return data ? [errorName, data, documentationMessage] : [errorName, documentationMessage]; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/version.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/version - */ -/* globals window, global */ - -const version = '38.0.1'; -/* harmony default export */ var src_version = ((/* unused pure expression or super */ null && (version))); -// The second argument is not a month. It is `monthIndex` and starts from `0`. -const releaseDate = new Date(2023, 4, 23); -/* istanbul ignore next -- @preserve */ -const windowOrGlobal = typeof window === 'object' ? window : __webpack_require__.g; -/* istanbul ignore next -- @preserve */ -if (windowOrGlobal.CKEDITOR_VERSION) { - /** - * This error is thrown when due to a mistake in how CKEditor 5 was installed or initialized, some - * of its modules were duplicated (evaluated and executed twice). Module duplication leads to inevitable runtime - * errors. - * - * There are many situations in which some modules can be loaded twice. In the worst case scenario, - * you may need to check your project for each of these issues and fix them all. - * - * # Trying to add a plugin to an existing build - * - * If you import an existing CKEditor 5 build and a plugin like this: - * - * ```ts - * import ClassicEditor from '@ckeditor/ckeditor5-build-classic'; - * import Highlight from '@ckeditor/ckeditor5-highlight/src/highlight'; - * ``` - * - * Then your project loads some CKEditor 5 packages twice. How does it happen? - * - * The build package contains a file which is already compiled with webpack. This means - * that it contains all the necessary code from e.g. `@ckeditor/ckeditor5-engine` and `@ckeditor/ckeditor5-utils`. - * - * However, the `Highlight` plugin imports some of the modules from these packages, too. If you ask webpack to - * build such a project, you will end up with the modules being included (and run) twice — first, because they are - * included inside the build package, and second, because they are required by the `Highlight` plugin. - * - * Therefore, **you must never add plugins to an existing build** unless your plugin has no dependencies. - * - * Adding plugins to a build is done by taking the source version of this build (so, before it was built with webpack) - * and adding plugins there. In this situation, webpack will know that it only needs to load each plugin once. - * - * Read more in the {@glink installation/plugins/installing-plugins Installing plugins} guide. - * - * # Confused an editor build with an editor implementation - * - * This scenario is very similar to the previous one, but has a different origin. - * - * Let's assume that you wanted to use CKEditor 5 from source, as explained in the - * {@glink installation/advanced/alternative-setups/integrating-from-source-webpack "Building from source"} section - * or in the {@glink framework/quick-start "Quick start"} guide of CKEditor 5 Framework. - * - * The correct way to do so is to import an editor and plugins and run them together like this: - * - * ```ts - * import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'; - * import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials'; - * import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph'; - * import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold'; - * import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic'; - * - * ClassicEditor - * .create( document.querySelector( '#editor' ), { - * plugins: [ Essentials, Paragraph, Bold, Italic ], - * toolbar: [ 'bold', 'italic' ] - * } ) - * .then( editor => { - * console.log( 'Editor was initialized', editor ); - * } ) - * .catch( error => { - * console.error( error.stack ); - * } ); - * ``` - * - * However, you might have mistakenly imported a build instead of the source `ClassicEditor`. In this case - * your imports will look like this: - * - * ```ts - * import ClassicEditor from '@ckeditor/ckeditor5-build-classic'; - * import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials'; - * import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph'; - * import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold'; - * import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic'; - * ``` - * - * This creates the same situation as in the previous section because you use a build together with source plugins. - * - * Remember: `@ckeditor/ckeditor5-build-*` packages contain editor builds and `@ckeditor/ckeditor5-editor-*` contain source editors. - * - * # Loading two or more builds on one page - * - * If you use CKEditor 5 builds, you might have loaded two (or more) `ckeditor.js` files on one web page. - * Check your web page for duplicated ` - - - \ No newline at end of file diff --git a/resources/js/vendor/ckeditor/sample/styles.css b/resources/js/vendor/ckeditor/sample/styles.css deleted file mode 100644 index ec013f9..0000000 --- a/resources/js/vendor/ckeditor/sample/styles.css +++ /dev/null @@ -1,500 +0,0 @@ -/** - * @license Copyright (c) 2014-2021, CKSource - Frederico Knabben. All rights reserved. - * This file is licensed under the terms of the MIT License (see LICENSE.md). - */ - -:root { - --ck-sample-base-spacing: 2em; - --ck-sample-color-white: #fff; - --ck-sample-color-green: #279863; - --ck-sample-color-blue: #1a9aef; - --ck-sample-container-width: 1285px; - --ck-sample-sidebar-width: 350px; - --ck-sample-editor-min-height: 400px; - --ck-sample-editor-z-index: 10; -} - -/* --------- EDITOR STYLES ---------------------------------------------------------------------------------------- */ - -.editor__editable, -/* Classic build. */ -main .ck-editor[role='application'] .ck.ck-content, -/* Decoupled document build. */ -.ck.editor__editable[role='textbox'], -.ck.ck-editor__editable[role='textbox'], -/* Inline & Balloon build. */ -.ck.editor[role='textbox'] { - width: 100%; - background: #fff; - font-size: 1em; - line-height: 1.6em; - min-height: var(--ck-sample-editor-min-height); - padding: 1.5em 2em; -} - -main .ck-editor[role='application'] { - overflow: auto; -} - -.ck.ck-editor__editable { - background: #fff; - border: 1px solid hsl(0, 0%, 70%); - width: 100%; -} - -/* Because of sidebar `position: relative`, Edge is overriding the outline of a focused editor. */ -.ck.ck-editor__editable { - position: relative; - z-index: var(--ck-sample-editor-z-index); -} - -.editor-container { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - position: relative; - width: 100%; - justify-content: center; -} - -/* --------- DECOUPLED (DOCUMENT) BUILD. ---------------------------------------------*/ -body[data-editor='DecoupledDocumentEditor'] .document-editor__toolbar { - width: 100%; -} - -body[data-editor='DecoupledDocumentEditor'] .collaboration-demo__editable, -body[data-editor='DecoupledDocumentEditor'] .row-editor .editor { - /* A pixel is added for each of the border. */ - width: calc(21cm + 2px); - min-height: calc(29.7cm + 2px); - /* To avoid having extra scrolls inside the editor container. */ - height: fit-content; - padding: 2cm 1.2cm; - margin: 2.5rem; - border: 1px hsl( 0, 0%, 82.7% ) solid; - background-color: var(--ck-sample-color-white); - box-shadow: 0 0 5px hsla( 0, 0%, 0%, .1 ); - box-sizing: border-box; -} - -body[data-editor='DecoupledDocumentEditor'] .row-editor { - display: flex; - position: relative; - justify-content: center; - overflow-y: auto; - background-color: #f2f2f2; - border: 1px solid hsl(0, 0%, 77%); - /* Limit the max-height of the editor to avoid scrolling from bottom to top to see the toolbar. */ - max-height: 700px; -} - -body[data-editor='DecoupledDocumentEditor'] .sidebar { - background: transparent; - border: 0; - box-shadow: none; -} - -/* --------- COMMENTS & TRACK CHANGES FEATURE ---------------------------------------------------------------------- */ -.sidebar { - padding: 0 15px; - position: relative; - min-width: var(--ck-sample-sidebar-width); - max-width: var(--ck-sample-sidebar-width); - font-size: 20px; - border: 1px solid hsl(0, 0%, 77%); - background: hsl(0, 0%, 98%); - border-left: 0; - overflow: hidden; - min-height: 100%; - flex-grow: 1; -} - -/* Do not inherit styles related to the editable editor content. See line 25.*/ -.sidebar .ck-content[role='textbox'], -.ck.ck-annotation-wrapper .ck-content[role='textbox'] { - min-height: unset; - width: unset; - padding: 0; - background: transparent; -} - -.sidebar.narrow { - min-width: 60px; - flex-grow: 0; -} - -.sidebar.hidden { - display: none !important; -} - -#sidebar-display-toggle { - position: absolute; - z-index: 1; - width: 30px; - height: 30px; - text-align: center; - left: 15px; - top: 30px; - border: 0; - padding: 0; - color: hsl( 0, 0%, 50% ); - transition: 250ms ease color; - background-color: transparent; -} - -#sidebar-display-toggle:hover { - color: hsl( 0, 0%, 30% ); - cursor: pointer; -} - -#sidebar-display-toggle:focus, -#sidebar-display-toggle:active { - outline: none; - border: 1px solid #a9d29d; -} - -#sidebar-display-toggle svg { - fill: currentColor; -} - -/* --------- COLLABORATION FEATURES (USERS) ------------------------------------------------------------------------ */ -.row-presence { - width: 100%; - border: 1px solid hsl(0, 0%, 77%); - border-bottom: 0; - background: hsl(0, 0%, 98%); - padding: var(--ck-spacing-small); - - /* Make `border-bottom` as `box-shadow` to not overlap with the editor border. */ - box-shadow: 0 1px 0 0 hsl(0, 0%, 77%); - - /* Make `z-index` bigger than `.editor` to properly display tooltips. */ - z-index: 20; -} - -.ck.ck-presence-list { - flex: 1; - padding: 1.25rem .75rem; -} - -.presence .ck.ck-presence-list__counter { - order: 2; - margin-left: var(--ck-spacing-large) -} - -/* --------- REAL TIME COLLABORATION FEATURES (SHARE TOPBAR CONTAINER) --------------------------------------------- */ -.collaboration-demo__row { - display: flex; - position: relative; - justify-content: center; - overflow-y: auto; - background-color: #f2f2f2; - border: 1px solid hsl(0, 0%, 77%); -} - -body[data-editor='InlineEditor'] .collaboration-demo__row { - border: 0; -} - -.collaboration-demo__container { - max-width: var(--ck-sample-container-width); - margin: 0 auto; - padding: 1.25rem; -} - -.presence, .collaboration-demo__row { - transition: .2s opacity; -} - -.collaboration-demo__topbar { - background: #fff; - border: 1px solid var(--ck-color-toolbar-border); - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 0; - border-radius: 4px 4px 0 0; -} - -.collaboration-demo__topbar .btn { - margin-right: 1em; - outline-offset: 2px; - outline-width: 2px; - background-color: var( --ck-sample-color-blue ); -} - -.collaboration-demo__topbar .btn:focus, -.collaboration-demo__topbar .btn:hover { - border-color: var( --ck-sample-color-blue ); -} - -.collaboration-demo__share { - display: flex; - align-items: center; - padding: 1.25rem .75rem -} - -.collaboration-demo__share-description p { - margin: 0; - font-weight: bold; - font-size: 0.9em; -} - -.collaboration-demo__share input { - height: auto; - font-size: 0.9em; - min-width: 220px; - margin: 0 10px; - border-radius: 4px; - border: 1px solid var(--ck-color-toolbar-border) -} - -.collaboration-demo__share button, -.collaboration-demo__share input { - height: 40px; - padding: 5px 10px; -} - -.collaboration-demo__share button { - position: relative; -} - -.collaboration-demo__share button:focus { - outline: none; -} - -.collaboration-demo__share button[data-tooltip]::before, -.collaboration-demo__share button[data-tooltip]::after { - position: absolute; - visibility: hidden; - opacity: 0; - pointer-events: none; - transition: all .15s cubic-bezier(.5,1,.25,1); - z-index: 1; -} - -.collaboration-demo__share button[data-tooltip]::before { - content: attr(data-tooltip); - padding: 5px 15px; - border-radius: 3px; - background: #111; - color: #fff; - text-align: center; - font-size: 11px; - top: 100%; - left: 50%; - margin-top: 5px; - transform: translateX(-50%); -} - -.collaboration-demo__share button[data-tooltip]::after { - content: ''; - border: 5px solid transparent; - width: 0; - font-size: 0; - line-height: 0; - top: 100%; - left: 50%; - transform: translateX(-50%); - border-bottom: 5px solid #111; - border-top: none; -} - -.collaboration-demo__share button[data-tooltip]:hover:before, -.collaboration-demo__share button[data-tooltip]:hover:after { - visibility: visible; - opacity: 1; -} - -.collaboration-demo--ready { - overflow: visible; - height: auto; -} - -.collaboration-demo--ready .presence, -.collaboration-demo--ready .collaboration-demo__row { - opacity: 1; -} - -/* --------- PAGINATION FEATURE ------------------------------------------------------------------------------------ */ - -/* Pagination view line must be stacked at least at the same level as the editor, - otherwise it will be hidden underneath. */ -.ck.ck-pagination-view-line { - z-index: var(--ck-sample-editor-z-index); -} - -/* --------- REVISION HISTORY FEATURE ------------------------------------------------------------------------------ */ - -.revision-viewer-container { - display: none; -} - -.revision-viewer-sidebar { - position: relative; - min-width: 310px; - overflow: hidden; - background: var(--ck-color-toolbar-background); - border: 1px solid var(--ck-color-toolbar-border); - margin-left: -1px; -} - -/* A case when Pagination and Revision History features are enabled in the editor. */ -/* Move the square with page number from the Pagination plugin to the left side, so that it does not cover the RH sidebar. */ -body[data-revision-history='true'] .ck.ck-pagination-view-line::after { - transform: translateX(-100%) !important; - left: -1px !important; - right: unset !important; -} - -/* --------- SAMPLE GENERIC STYLES (not related to CKEditor) ------------------------------------------------------- */ -body, html { - padding: 0; - margin: 0; - - font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 16px; - line-height: 1.5; -} - -body { - height: 100%; - color: #2D3A4A; -} - -body * { - box-sizing: border-box; -} - -a { - color: #38A5EE; -} - -header .centered { - display: flex; - flex-flow: row nowrap; - justify-content: space-between; - align-items: center; - min-height: 8em; -} - -header h1 a { - font-size: 20px; - display: flex; - align-items: center; - color: #2D3A4A; - text-decoration: none; -} - -header h1 img { - display: block; - height: 64px; -} - -header nav ul { - margin: 0; - padding: 0; - list-style-type: none; -} - -header nav ul li { - display: inline-block; -} - -header nav ul li + li { - margin-left: 1em; -} - -header nav ul li a { - font-weight: bold; - text-decoration: none; - color: #2D3A4A; -} - -header nav ul li a:hover { - text-decoration: underline; -} - -main .message { - padding: 0 0 var(--ck-sample-base-spacing); - background: var(--ck-sample-color-green); - color: var(--ck-sample-color-white); -} - -main .message::after { - content: ""; - z-index: -1; - display: block; - height: 10em; - width: 100%; - background: var(--ck-sample-color-green); - position: absolute; - left: 0; -} - -main .message h2 { - position: relative; - padding-top: 1em; - font-size: 2em; -} - -.centered { - /* Hide overlapping comments. */ - overflow: hidden; - max-width: var(--ck-sample-container-width); - margin: 0 auto; - padding: 0 var(--ck-sample-base-spacing); -} - -.row { - display: flex; - position: relative; -} - -.btn { - cursor: pointer; - padding: 8px 16px; - font-size: 1rem; - user-select: none; - border-radius: 4px; - transition: color .2s ease-in-out,background-color .2s ease-in-out,border-color .2s ease-in-out,opacity .2s ease-in-out; - background-color: var(--ck-sample-color-button-blue); - border-color: var(--ck-sample-color-button-blue); - color: var(--ck-sample-color-white); - display: inline-block; -} - -.btn--tiny { - padding: 6px 12px; - font-size: .8rem; -} - -footer { - margin: calc(2*var(--ck-sample-base-spacing)) var(--ck-sample-base-spacing); - font-size: .8em; - text-align: center; - color: rgba(0,0,0,.4); -} - -/* --------- RWD --------------------------------------------------------------------------------------------------- */ -@media screen and ( max-width: 800px ) { - :root { - --ck-sample-base-spacing: 1em; - } - - header h1 { - width: 100%; - } - - header h1 img { - height: 40px; - } - - header nav ul { - text-align: right; - } - - main .message h2 { - font-size: 1.5em; - } -} diff --git a/resources/js/vendor/ckeditor/src/ckeditor.js b/resources/js/vendor/ckeditor/src/ckeditor.js deleted file mode 100644 index bccefc8..0000000 --- a/resources/js/vendor/ckeditor/src/ckeditor.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @license Copyright (c) 2014-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -import ClassicEditor from "@ckeditor/ckeditor5-editor-classic/src/classiceditor"; -import Alignment from "@ckeditor/ckeditor5-alignment/src/alignment.js"; -import Autoformat from "@ckeditor/ckeditor5-autoformat/src/autoformat.js"; -import BlockQuote from "@ckeditor/ckeditor5-block-quote/src/blockquote.js"; -import Bold from "@ckeditor/ckeditor5-basic-styles/src/bold.js"; -import Essentials from "@ckeditor/ckeditor5-essentials/src/essentials.js"; -import FontColor from "@ckeditor/ckeditor5-font/src/fontcolor.js"; -import FontFamily from "@ckeditor/ckeditor5-font/src/fontfamily.js"; -import FontSize from "@ckeditor/ckeditor5-font/src/fontsize.js"; -import Heading from "@ckeditor/ckeditor5-heading/src/heading.js"; -// @ts-ignore -import HorizontalLine from "@ckeditor/ckeditor5-horizontal-line/src/horizontalline.js"; -// import Image from "@ckeditor/ckeditor5-image/src/image.js"; -// import ImageResize from "@ckeditor/ckeditor5-image/src/imageresize.js"; -// import ImageStyle from "@ckeditor/ckeditor5-image/src/imagestyle.js"; -// import ImageToolbar from "@ckeditor/ckeditor5-image/src/imagetoolbar.js"; -// import ImageUpload from "@ckeditor/ckeditor5-image/src/imageupload.js"; -import Indent from "@ckeditor/ckeditor5-indent/src/indent.js"; -import IndentBlock from "@ckeditor/ckeditor5-indent/src/indentblock.js"; -import Italic from "@ckeditor/ckeditor5-basic-styles/src/italic.js"; -import Link from "@ckeditor/ckeditor5-link/src/link.js"; -// import LinkImage from '@ckeditor/ckeditor5-link/src/linkimage.js'; -import List from "@ckeditor/ckeditor5-list/src/list.js"; -import ListProperties from "@ckeditor/ckeditor5-list/src/listproperties"; -// Disable media pas recceté/demandé -// import MediaEmbed from "@ckeditor/ckeditor5-media-embed/src/mediaembed.js"; -// import MediaEmbedEditing from "@ckeditor/ckeditor5-media-embed/src/mediaembedediting"; -// import MediaEmbedUI from "@ckeditor/ckeditor5-media-embed/src/mediaembedui"; -import Widget from "@ckeditor/ckeditor5-widget/src/widget"; -import Paragraph from "@ckeditor/ckeditor5-paragraph/src/paragraph.js"; -import PasteFromOffice from "@ckeditor/ckeditor5-paste-from-office/src/pastefromoffice.js"; -// @ts-ignore -import RemoveFormat from "@ckeditor/ckeditor5-remove-format/src/removeformat.js"; -// import SimpleUploadAdapter from "@ckeditor/ckeditor5-upload/src/adapters/simpleuploadadapter.js"; -// import Table from "@ckeditor/ckeditor5-table/src/table.js"; -// import TableToolbar from "@ckeditor/ckeditor5-table/src/tabletoolbar"; -// import TableProperties from "@ckeditor/ckeditor5-table/src/tableproperties"; -// import TableCellProperties from "@ckeditor/ckeditor5-table/src/tablecellproperties"; -// import TableCaption from "@ckeditor/ckeditor5-table/src/tablecaption"; -import TextTransformation from "@ckeditor/ckeditor5-typing/src/texttransformation.js"; -import Underline from "@ckeditor/ckeditor5-basic-styles/src/underline.js"; -import Undo from "@ckeditor/ckeditor5-undo/src/undo.js"; -import WordCount from "@ckeditor/ckeditor5-word-count/src/wordcount.js"; -// @ts-ignore -import SourceEditing from "@ckeditor/ckeditor5-source-editing/src/sourceediting.js"; -// import ImageInsert from "@ckeditor/ckeditor5-image/src/imageinsert.js"; -// import LaravelFileManager from "../../../LaravelFileManager" - -class Editor extends ClassicEditor { } - -// Plugins to include in the build. -Editor.builtinPlugins = [ - Alignment, - Autoformat, - BlockQuote, - Bold, - Essentials, - FontColor, - FontFamily, - FontSize, - Heading, - HorizontalLine, - // Image, - // ImageResize, - // ImageStyle, - // ImageToolbar, - // ImageUpload, - Indent, - IndentBlock, - Italic, - Link, - // LinkImage, - List, - ListProperties, - // MediaEmbed, - // MediaEmbedEditing, - // MediaEmbedUI, - Widget, - Paragraph, - PasteFromOffice, - RemoveFormat, - // SimpleUploadAdapter, - // Table, - // TableToolbar, - // TableProperties, - // TableCellProperties, - // TableCaption, - TextTransformation, - Underline, - Undo, - WordCount, - SourceEditing, - // ImageInsert, - // LaravelFileManager, -]; - -export default Editor; diff --git a/resources/js/vendor/ckeditor/webpack.config.js b/resources/js/vendor/ckeditor/webpack.config.js deleted file mode 100644 index 140b0d6..0000000 --- a/resources/js/vendor/ckeditor/webpack.config.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * @license Copyright (c) 2014-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ - -'use strict'; - -/* eslint-env node */ - -const path = require( 'path' ); -const webpack = require( 'webpack' ); -const { bundler, styles } = require( '@ckeditor/ckeditor5-dev-utils' ); -const { CKEditorTranslationsPlugin } = require( '@ckeditor/ckeditor5-dev-translations' ); -const TerserWebpackPlugin = require('terser-webpack-plugin'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); - -module.exports = { - // devtool: 'source-map', - performance: { hints: false }, - - entry: path.resolve(__dirname, 'src', 'ckeditor.js'), - - output: { - // The name under which the editor will be exported. - library: 'ClassicEditor', - - path: path.resolve(__dirname, 'build'), - filename: 'ckeditor.js', - libraryTarget: 'umd', - libraryExport: 'default' - }, - - mode: 'development', - optimization: { - minimize: false, - minimizer: [ - new TerserWebpackPlugin( { - sourceMap: false, - terserOptions: { - output: { - // Preserve CKEditor 5 license comments. - // comments: /^!/ - } - }, - // extractComments: false - } ) - ] - }, - - plugins: [ - new CKEditorTranslationsPlugin({ - // The main language that will be built into the main bundle. - language: 'fr', - - // Additional languages that will be emitted to the `outputDirectory`. - // This option can be set to an array of language codes or `'all'` to build all found languages. - // The bundle is optimized for one language when this option is omitted. - additionalLanguages: 'all', - - // For more advanced options see https://github.com/ckeditor/ckeditor5-dev/tree/master/packages/ckeditor5-dev-translations. - }), - new webpack.BannerPlugin({ - banner: bundler.getLicenseBanner(), - raw: true - }), - new MiniCssExtractPlugin({ - filename: 'styles.css' - }) - ], - - module: { - rules: [ - { - test: /\.svg$/, - use: ['raw-loader'] - }, - { - test: /\.css$/, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader' - }, - { - loader: 'postcss-loader', - options: { - postcssOptions: styles.getPostCssConfig({ - themeImporter: { - themePath: require.resolve('@ckeditor/ckeditor5-theme-lark') - }, - minify: false - }) - } - }, - ] - } - ] - } -}; diff --git a/resources/lang/en.json b/resources/lang/en.json deleted file mode 100644 index 714172c..0000000 --- a/resources/lang/en.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "(and :count more error)": "(and :count more error)", - "(and :count more errors)": "(and :count more errors)", - "A fresh verification link has been sent to your email address.": "A fresh verification link has been sent to your email address.", - "All rights reserved.": "All rights reserved.", - "Before proceeding, please check your email for a verification link.": "Before proceeding, please check your email for a verification link.", - "click here to request another": "click here to request another", - "Confirm Password": "Confirm Password", - "Dashboard": "Dashboard", - "Email Address": "Email Address", - "Forbidden": "Forbidden", - "Forgot Your Password?": "Forgot Your Password?", - "Go to page :page": "Go to page :page", - "Hello!": "Hello!", - "If you did not create an account, no further action is required.": "If you did not create an account, no further action is required.", - "If you did not receive the email": "If you did not receive the email", - "If you did not request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.", - "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:", - "Invalid JSON was returned from the route.": "Invalid JSON was returned from the route.", - "Login": "Login", - "Logout": "Logout", - "Name": "Name", - "Not Found": "Not Found", - "of": "of", - "Page Expired": "Page Expired", - "Pagination Navigation": "Pagination Navigation", - "Password": "Password", - "Payment Required": "Payment Required", - "Please click the button below to verify your email address.": "Please click the button below to verify your email address.", - "Please confirm your password before continuing.": "Please confirm your password before continuing.", - "Regards": "Regards", - "Register": "Register", - "Remember Me": "Remember Me", - "Reset Password": "Reset Password", - "Reset Password Notification": "Reset Password Notification", - "results": "results", - "Send Password Reset Link": "Send Password Reset Link", - "Server Error": "Server Error", - "Service Unavailable": "Service Unavailable", - "Showing": "Showing", - "The given data was invalid.": "The given data was invalid.", - "The response is not a streamed response.": "The response is not a streamed response.", - "The response is not a view.": "The response is not a view.", - "This password reset link will expire in :count minutes.": "This password reset link will expire in :count minutes.", - "to": "to", - "Toggle navigation": "Toggle navigation", - "Too Many Requests": "Too Many Requests", - "Unauthorized": "Unauthorized", - "Verify Email Address": "Verify Email Address", - "Verify Your Email Address": "Verify Your Email Address", - "Whoops!": "Whoops!", - "You are logged in!": "You are logged in!", - "You are receiving this email because we received a password reset request for your account.": "You are receiving this email because we received a password reset request for your account.", - "see_mode": "see :mode mode" -} diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php deleted file mode 100644 index 6db4982..0000000 --- a/resources/lang/en/auth.php +++ /dev/null @@ -1,9 +0,0 @@ - 'These credentials do not match our records.', - 'password' => 'The password is incorrect.', - 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', -]; diff --git a/resources/lang/en/crud.php b/resources/lang/en/crud.php deleted file mode 100644 index f244945..0000000 --- a/resources/lang/en/crud.php +++ /dev/null @@ -1,57 +0,0 @@ - [ - 'list' => 'List', - 'view' => 'View', - 'create' => 'Create', - 'update' => 'Update', - 'delete' => 'Delete', - 'create' => 'Create', - 'save' => 'Save', - 'edit' => 'Edit', - ], - - 'helpers' => [ - 'list' => 'List', - 'list_all' => 'List all :model', - 'create_model' => 'Create :model', - 'view_model' => 'View :model', - 'update_model' => 'Update :model', - 'delete_model' => 'Delete :model', - 'no_results' => 'No results for :models', - 'publish' => 'Publish', - 'unpublish' => 'Unpublish', - 'manage' => 'Manage :attributes for :model' - ], - - 'libs' => [ - 'toolbox' => [ - 'assertFieldIsUnique' => 'The :value for the :attribute field is already in use', - 'assertNoInternalBoUrls' => ':attribute : It is forbidden to paste backoffice uri into this field', - 'assertNoInternalUrls' => ':attribute : It is forbidden to paste a url of :appname into this field', - ] - ], - - 'messages' => [ - 'has_been_created' => ':model has been created', - 'cannot_be_created' => ':model cannot be created', - 'has_been_updated' => ':model has been updated', - 'cannot_be_updated' => ':model cannot be updated', - 'has_been_deleted' => ':model has been deleted', - 'cannot_be_deleted' => ':model cannot be deleted' - ], - - 'minicrud' => [ - 'visibility_label' => 'Visibility', - 'visibility_helper' => 'Check to make it visible.', - 'select' => 'Select :entity from the list.', - 'associated' => 'Associated :entity', - 'dimensions_must_be' => 'Must be :widthpx (width) by :heightpx (height).', - 'picture_title_helper' => 'Useful for users, displayed by moving the mouse over the image', - 'picture_title_label' => 'Title attribute of the image', - 'picture_alt_helper' => 'Must describe your image for search engines and blind people (5 to 6 words)', - 'picture_alt_label' => 'Alt attribute of the image', - 'text_warning' => 'Proofread your content before publishing it', - ] -]; diff --git a/resources/lang/en/http-statuses.php b/resources/lang/en/http-statuses.php deleted file mode 100644 index 3346f78..0000000 --- a/resources/lang/en/http-statuses.php +++ /dev/null @@ -1,84 +0,0 @@ - 'Unknown Error', - '100' => 'Continue', - '101' => 'Switching Protocols', - '102' => 'Processing', - '200' => 'OK', - '201' => 'Created', - '202' => 'Accepted', - '203' => 'Non-Authoritative Information', - '204' => 'No Content', - '205' => 'Reset Content', - '206' => 'Partial Content', - '207' => 'Multi-Status', - '208' => 'Already Reported', - '226' => 'IM Used', - '300' => 'Multiple Choices', - '301' => 'Moved Permanently', - '302' => 'Found', - '303' => 'See Other', - '304' => 'Not Modified', - '305' => 'Use Proxy', - '307' => 'Temporary Redirect', - '308' => 'Permanent Redirect', - '400' => 'Bad Request', - '401' => 'Unauthorized', - '402' => 'Payment Required', - '403' => 'Forbidden', - '404' => 'Not Found', - '405' => 'Method Not Allowed', - '406' => 'Not Acceptable', - '407' => 'Proxy Authentication Required', - '408' => 'Request Timeout', - '409' => 'Conflict', - '410' => 'Gone', - '411' => 'Length Required', - '412' => 'Precondition Failed', - '413' => 'Payload Too Large', - '414' => 'URI Too Long', - '415' => 'Unsupported Media Type', - '416' => 'Range Not Satisfiable', - '417' => 'Expectation Failed', - '418' => 'I\'m a teapot', - '419' => 'Session Has Expired', - '421' => 'Misdirected Request', - '422' => 'Unprocessable Entity', - '423' => 'Locked', - '424' => 'Failed Dependency', - '425' => 'Too Early', - '426' => 'Upgrade Required', - '428' => 'Precondition Required', - '429' => 'Too Many Requests', - '431' => 'Request Header Fields Too Large', - '444' => 'Connection Closed Without Response', - '449' => 'Retry With', - '451' => 'Unavailable For Legal Reasons', - '499' => 'Client Closed Request', - '500' => 'Internal Server Error', - '501' => 'Not Implemented', - '502' => 'Bad Gateway', - '503' => 'Maintenance Mode', - '504' => 'Gateway Timeout', - '505' => 'HTTP Version Not Supported', - '506' => 'Variant Also Negotiates', - '507' => 'Insufficient Storage', - '508' => 'Loop Detected', - '509' => 'Bandwidth Limit Exceeded', - '510' => 'Not Extended', - '511' => 'Network Authentication Required', - '520' => 'Unknown Error', - '521' => 'Web Server is Down', - '522' => 'Connection Timed Out', - '523' => 'Origin Is Unreachable', - '524' => 'A Timeout Occurred', - '525' => 'SSL Handshake Failed', - '526' => 'Invalid SSL Certificate', - '527' => 'Railgun Error', - '598' => 'Network Read Timeout Error', - '599' => 'Network Connect Timeout Error', - 'unknownError' => 'Unknown Error', -]; diff --git a/resources/lang/en/models.php b/resources/lang/en/models.php deleted file mode 100644 index 1d9f51d..0000000 --- a/resources/lang/en/models.php +++ /dev/null @@ -1,19 +0,0 @@ - [ - 'users' => 'Users', - 'accounts' => 'Accounts', - 'markers' => 'Markers', - 'tickets' => 'Tickets', - 'creditlogs' => 'Logs', - 'sites' => 'Sites', - 'brands' => 'Brands', - 'labels' => 'Labels', - 'packages' => 'Packages', - 'invoices' => 'Invoices', - 'companies' => 'Companies', - 'informations' => 'Informations', - 'ticket_types' => 'Ticket types' - ] -]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php deleted file mode 100644 index f4cedde..0000000 --- a/resources/lang/en/pagination.php +++ /dev/null @@ -1,8 +0,0 @@ - 'Next »', - 'previous' => '« Previous', -]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php deleted file mode 100644 index f3b65ba..0000000 --- a/resources/lang/en/passwords.php +++ /dev/null @@ -1,11 +0,0 @@ - 'Your password has been reset.', - 'sent' => 'We have emailed your password reset link.', - 'throttled' => 'Please wait before retrying.', - 'token' => 'This password reset token is invalid.', - 'user' => 'We can\'t find a user with that email address.', -]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php deleted file mode 100644 index bc330f4..0000000 --- a/resources/lang/en/validation.php +++ /dev/null @@ -1,229 +0,0 @@ - 'The :attribute must be accepted.', - 'accepted_if' => 'The :attribute must be accepted when :other is :value.', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.', - 'before' => 'The :attribute must be a date before :date.', - 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', - 'between' => [ - 'array' => 'The :attribute must have between :min and :max items.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'numeric' => 'The :attribute must be between :min and :max.', - 'string' => 'The :attribute must be between :min and :max characters.', - ], - 'boolean' => 'The :attribute field must be true or false.', - 'can' => 'The :attribute field contains an unauthorized value.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'current_password' => 'The password is incorrect.', - 'date' => 'The :attribute is not a valid date.', - 'date_equals' => 'The :attribute must be a date equal to :date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'decimal' => 'The :attribute field must have :decimal decimal places.', - 'declined' => 'The :attribute must be declined.', - 'declined_if' => 'The :attribute must be declined when :other is :value.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'dimensions' => 'The :attribute has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.', - 'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.', - 'email' => 'The :attribute must be a valid email address.', - 'ends_with' => 'The :attribute must end with one of the following: :values.', - 'enum' => 'The selected :attribute is invalid.', - 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute must be a file.', - 'filled' => 'The :attribute field is required.', - 'gt' => [ - 'array' => 'The :attribute must have more than :value items.', - 'file' => 'The :attribute must be greater than :value kilobytes.', - 'numeric' => 'The :attribute must be greater than :value.', - 'string' => 'The :attribute must be greater than :value characters.', - ], - 'gte' => [ - 'array' => 'The :attribute must have :value items or more.', - 'file' => 'The :attribute must be greater than or equal :value kilobytes.', - 'numeric' => 'The :attribute must be greater than or equal :value.', - 'string' => 'The :attribute must be greater than or equal :value characters.', - ], - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'ipv4' => 'The :attribute must be a valid IPv4 address.', - 'ipv6' => 'The :attribute must be a valid IPv6 address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'lowercase' => 'The :attribute field must be lowercase.', - 'lt' => [ - 'array' => 'The :attribute must have less than :value items.', - 'file' => 'The :attribute must be less than :value kilobytes.', - 'numeric' => 'The :attribute must be less than :value.', - 'string' => 'The :attribute must be less than :value characters.', - ], - 'lte' => [ - 'array' => 'The :attribute must not have more than :value items.', - 'file' => 'The :attribute must be less than or equal :value kilobytes.', - 'numeric' => 'The :attribute must be less than or equal :value.', - 'string' => 'The :attribute must be less than or equal :value characters.', - ], - 'mac_address' => 'The :attribute must be a valid MAC address.', - 'max' => [ - 'array' => 'The :attribute may not have more than :max items.', - 'file' => 'The :attribute may not be greater than :max kilobytes.', - 'numeric' => 'The :attribute may not be greater than :max.', - 'string' => 'The :attribute may not be greater than :max characters.', - ], - 'max_digits' => 'The :attribute field must not have more than :max digits.', - 'mimes' => 'The :attribute must be a file of type: :values.', - 'mimetypes' => 'The :attribute must be a file of type: :values.', - 'min' => [ - 'array' => 'The :attribute must have at least :min items.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'numeric' => 'The :attribute must be at least :min.', - 'string' => 'The :attribute must be at least :min characters.', - ], - 'min_digits' => 'The :attribute field must have at least :min digits.', - 'missing' => 'The :attribute field must be missing.', - 'missing_if' => 'The :attribute field must be missing when :other is :value.', - 'missing_unless' => 'The :attribute field must be missing unless :other is :value.', - 'missing_with' => 'The :attribute field must be missing when :values is present.', - 'missing_with_all' => 'The :attribute field must be missing when :values are present.', - 'multiple_of' => 'The :attribute must be a multiple of :value.', - 'not_in' => 'The selected :attribute is invalid.', - 'not_regex' => 'The :attribute format is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'password' => [ - 'letters' => 'The :attribute field must contain at least one letter.', - 'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.', - 'numbers' => 'The :attribute field must contain at least one number.', - 'symbols' => 'The :attribute field must contain at least one symbol.', - 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', - ], - 'present' => 'The :attribute field must be present.', - 'prohibited' => 'The :attribute field is prohibited.', - 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', - 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', - 'prohibits' => 'The :attribute field prohibits :other from being present.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_array_keys' => 'The :attribute field must contain entries for: :values.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size' => [ - 'array' => 'The :attribute must contain :size items.', - 'file' => 'The :attribute must be :size kilobytes.', - 'numeric' => 'The :attribute must be :size.', - 'string' => 'The :attribute must be :size characters.', - ], - 'starts_with' => 'The :attribute must start with one of the following: :values', - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid zone.', - 'ulid' => 'The :attribute field must be a valid ULID.', - 'unique' => 'The :attribute has already been taken.', - 'uploaded' => 'The :attribute failed to upload.', - 'uppercase' => 'The :attribute field must be uppercase.', - 'url' => 'The :attribute format is invalid.', - 'uuid' => 'The :attribute must be a valid UUID.', - 'attributes' => [ - 'address' => 'address', - 'age' => 'age', - 'amount' => 'amount', - 'area' => 'area', - 'available' => 'available', - 'birthday' => 'birthday', - 'body' => 'body', - 'city' => 'city', - 'content' => 'content', - 'country' => 'country', - 'created_at' => 'created at', - 'creator' => 'creator', - 'current_password' => 'current password', - 'date' => 'date', - 'date_of_birth' => 'date of birth', - 'day' => 'day', - 'deleted_at' => 'deleted at', - 'description' => 'description', - 'district' => 'district', - 'duration' => 'duration', - 'email' => 'email', - 'excerpt' => 'excerpt', - 'filter' => 'filter', - 'first_name' => 'first name', - 'gender' => 'gender', - 'group' => 'group', - 'hour' => 'hour', - 'image' => 'image', - 'last_name' => 'last name', - 'lesson' => 'lesson', - 'line_address_1' => 'line address 1', - 'line_address_2' => 'line address 2', - 'message' => 'message', - 'middle_name' => 'middle name', - 'minute' => 'minute', - 'mobile' => 'mobile', - 'month' => 'month', - 'name' => 'name', - 'national_code' => 'national code', - 'number' => 'number', - 'password' => 'password', - 'password_confirmation' => 'password confirmation', - 'phone' => 'phone', - 'photo' => 'photo', - 'postal_code' => 'postal code', - 'price' => 'price', - 'province' => 'province', - 'recaptcha_response_field' => 'recaptcha response field', - 'remember' => 'remember', - 'restored_at' => 'restored at', - 'result_text_under_image' => 'result text under image', - 'role' => 'role', - 'second' => 'second', - 'sex' => 'sex', - 'short_text' => 'short text', - 'size' => 'size', - 'state' => 'state', - 'street' => 'street', - 'student' => 'student', - 'subject' => 'subject', - 'teacher' => 'teacher', - 'terms' => 'terms', - 'test_description' => 'test description', - 'test_locale' => 'test locale', - 'test_name' => 'test name', - 'text' => 'text', - 'time' => 'time', - 'title' => 'title', - 'updated_at' => 'updated at', - 'username' => 'username', - 'year' => 'year', - ], - 'custom' => [ - 'type' => 'type', - 'tickets' => 'tickets', - 'assigned_to' => 'assigned to', - 'order' => 'order', - 'priority' => 'priority', - 'default' => 'default', - 'date_mep' => 'Desired Launch', - 'published' => 'Publication', - 'all' => 'All', - 'estimate' => 'estimate', - ] -]; diff --git a/resources/lang/fr.json b/resources/lang/fr.json deleted file mode 100644 index b405e2f..0000000 --- a/resources/lang/fr.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "(and :count more error)": "(et :count erreur en plus)", - "(and :count more errors)": "(et :count erreurs en plus)", - "A fresh verification link has been sent to your email address.": "Un nouveau lien de vérification a été envoyé à votre adresse e-mail.", - "All rights reserved.": "Tous droits réservés.", - "Before proceeding, please check your email for a verification link.": "Avant de continuer, merci de vérifier votre e-mail contenant un lien de vérification.", - "click here to request another": "cliquez ici pour en demander un autre", - "Confirm Password": "Confirmer le mot de passe", - "Dashboard": "Tableau de bord", - "Email Address": "Adresse e-mail", - "Forbidden": "Interdit", - "Forgot Your Password?": "Mot de passe oublié ?", - "Go to page :page": "Aller à la page :page", - "Hello!": "Bonjour !", - "If you did not create an account, no further action is required.": "Si vous n'avez pas créé de compte, vous pouvez ignorer ce message.", - "If you did not receive the email": "Si vous n'avez pas reçu cet e-mail", - "If you did not request a password reset, no further action is required.": "Si vous n'avez pas demandé de réinitialisation de mot de passe, vous pouvez ignorer ce message.", - "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Si vous avez des difficultés à cliquer sur le bouton \":actionText\", copiez et collez l'URL ci-dessous\ndans votre navigateur Web :", - "Invalid JSON was returned from the route.": "Un JSON non valide a été renvoyé par la route.", - "Login": "Connexion", - "Logout": "Déconnexion", - "Name": "Nom", - "Not Found": "Non trouvé", - "of": "de", - "Page Expired": "Page expirée", - "Pagination Navigation": "Pagination", - "Password": "Mot de passe", - "Payment Required": "Paiement requis", - "Please click the button below to verify your email address.": "Veuillez cliquer sur le bouton ci-dessous pour vérifier votre adresse e-mail :", - "Please confirm your password before continuing.": "Veuillez confirmer votre mot de passe avant de continuer.", - "Regards": "Cordialement", - "Register": "Inscription", - "Remember Me": "Se souvenir de moi", - "Reset Password": "Réinitialisation du mot de passe", - "Reset Password Notification": "Notification de réinitialisation du mot de passe", - "results": "résultats", - "Send Password Reset Link": "Envoyer le lien de réinitialisation du mot de passe", - "Server Error": "Erreur serveur", - "Service Unavailable": "Service indisponible", - "Showing": "Montrant", - "The :attribute must contain at least one letter.": ":attribute doit contenir au moins une lettre.", - "The :attribute must contain at least one number.": ":attribute doit contenir au moins un nombre.", - "The :attribute must contain at least one symbol.": ":attribute doit contenir au moins un caractère spécial.", - "The :attribute must contain at least one uppercase and one lowercase letter.": ":attribute doit contenir au moins une lettre majuscule et une lettre minuscule.", - "The given :attribute has appeared in a data leak. Please choose a different :attribute.": ":attribute apparait dans une fuite de données sur le web. Merci de choisir un :attribute différent.", - "The given data was invalid.": "La donnée renseignée est incorrecte.", - "The response is not a streamed response.": "La réponse n'est pas une réponse diffusée.", - "The response is not a view.": "La réponse n'est pas une vue.", - "This password reset link will expire in :count minutes.": "Ce lien de réinitialisation du mot de passe expirera dans :count minutes.", - "to": "à", - "Toggle navigation": "Afficher / masquer le menu de navigation", - "Too Many Requests": "Trop de requêtes", - "Unauthorized": "Non autorisé", - "Verify Email Address": "Vérifier l'adresse e-mail", - "Verify Your Email Address": "Vérifiez votre adresse e-mail", - "Whoops!": "Oups !", - "You are logged in!": "Vous êtes connecté·e !", - "You are receiving this email because we received a password reset request for your account.": "Vous recevez cet e-mail car nous avons reçu une demande de réinitialisation de mot de passe pour votre compte.", - "see_mode": "voir mode :mode", - "Website": "Site" -} diff --git a/resources/lang/fr/auth.php b/resources/lang/fr/auth.php deleted file mode 100644 index a22cd3f..0000000 --- a/resources/lang/fr/auth.php +++ /dev/null @@ -1,9 +0,0 @@ - 'Ces identifiants ne correspondent pas à nos enregistrements.', - 'password' => 'Le mot de passe est incorrect', - 'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.', -]; diff --git a/resources/lang/fr/crud.php b/resources/lang/fr/crud.php deleted file mode 100644 index 950d5d1..0000000 --- a/resources/lang/fr/crud.php +++ /dev/null @@ -1,96 +0,0 @@ - [ - 'list' => 'Liste', - 'view' => 'Voir', - 'create' => 'Créer', - 'duplicate' => 'Dupliquer', - 'update' => 'Éditer', - 'delete' => 'Supprimer', - 'save' => 'Sauvegarder', - 'edit' => 'Mise à jour', - 'show' => 'Aperçu', - 'download' => 'Télécharger', - 'historic' => 'Historique', - 'credit' => 'Créditer', - ], - - 'helpers' => [ - 'list' => 'Liste', - 'list_all' => 'Lister tous les :model', - 'create_model' => 'Créer :model', - 'view_model' => 'Voir :model', - 'update_model' => 'Éditer :model', - 'duplicate_model' => 'Dupliquer :model', - 'delete_model' => 'Supprimer :model', - 'save_model' => 'Sauvegarder :model', - 'edit_model' => 'Mettre à jour :model', - 'credit_model' => 'Créditer :model', - 'no_results' => 'Aucun résultat pour :models', - 'publish' => 'Publié', - 'unpublish' => 'Dépublié', - ], - - 'libs' => [ - 'toolbox' => [ - 'assertFieldIsUnique' => 'La :valeur du champ :attribut est déjà utilisée', - 'assertNoInternalBoUrls' => ':attribute : Il est interdit de coller l\'uri de back-office dans ce champ', - 'assertNoInternalUrls' => ':attribute : Il est interdit de coller une url de :appname dans ce champ.', - ] - ], - - 'messages' => [ - 'has_been_created' => ':model a été créé', - 'cannot_be_created' => ':model ne peut être créé', - 'has_been_updated' => ':model a été mis à jour', - 'cannot_be_updated' => ':model ne peut être mis à jour', - 'has_been_deleted' => ':model a été supprimé', - 'cannot_be_deleted' => ':model ne peut être supprimé', - 'cannot_be_deleted_relationship' => ':model ne peut être supprimé. - Veuillez d\'abord supprimer les :relationship associé(e)s', - 'order_changed' => 'L\'ordre a été changé !', - 'order_not_changed' => 'L\'ordre n\'a pas été changé !', - 'publish_status_saved' => 'Changement de l\'état de publication réussit !', - 'favourite_site_changed' => 'Votre site favori a été mis à jour avec succès.', - 'favourite_site_not_changed' => 'Une erreur est survenue lors de la mise à jour de votre site favori.', - ], - - 'minicrud' => [ - 'visibility_label' => 'Visibilité', - 'visibility_helper' => 'Vérifier qu\'il est visible.', - 'enum_select' => 'Sélectionnez un(e) :enum dans la liste.', - 'select' => 'Sélectionnez un(e) :entity dans la liste.', - 'associated_enum' => ':enum associé(e)', - 'associated' => ':entity associé(e)', - 'dimensions_must_be' => 'Doit être :widthpx (largeur) par :heightpx (hauteur).', - 'picture_title_helper' => 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image', - 'picture_title_label' => 'Attribut du titre de l\'image', - 'picture_alt_helper' => 'Doit décrire votre image pour les moteurs de recherche et les aveugles (5 à 6 mots)', - 'picture_alt_label' => 'Attribut Alt de l\'image', - 'text_warning' => 'Relisez votre contenu avant de le publier (minimum :number caractères)', - 'url' => 'Doit être une url valide.', - ], - - 'pagination' => [ - "previous" => "Page précédente", - "next" => "Page suivante", - "specific_page" => "Accéder à la page n°:id", - 'paginate_list' => 'Nombre d\'éléments par page', - ], - - 'other' => [ - 'up' => 'Modifier l\'ordre d\'apparition vers le haut', - 'down' => 'Modifier l\'ordre d\'apparition vers le bas', - 'no_model_found' => 'Aucun :model trouvé', - 'publish' => 'Publié', - 'unpublish' => 'Dépublié', - 'sort_ascending' => 'Trier :name dans l\'ordre croissant', - 'sort_descending' => 'Trier :name dans l\'ordre décroissant', - 'sort_delete' => 'Supprimer le tri', - 'sort_arrow' => 'Ici, les flèches sont utilisées pour trier et non pour filtrer', - 'right' => 'Vous n\'avez pas les droits', - 'view_linked_ticket' => 'voir le ticket :model', - 'unlink_ticket' => 'supprimer le lien avec le ticket :model' - ] -]; diff --git a/resources/lang/fr/enums.php b/resources/lang/fr/enums.php deleted file mode 100644 index 8b6e5d2..0000000 --- a/resources/lang/fr/enums.php +++ /dev/null @@ -1,19 +0,0 @@ - 'enfant', - 'balanced_menu_type' => [ - 'kid' => 'enfant', - 'teenager' => 'adolescent', - 'woman' => 'femme', - 'man' => 'homme', - 'senior' => 'senior', - 'withPrefix' => [ - 'kid' => 'un enfant', - 'teenager' => 'un adolescent', - 'woman' => 'une femme', - 'man' => 'un homme', - 'senior' => 'un senior' - ] - ] -]; diff --git a/resources/lang/fr/http-statuses.php b/resources/lang/fr/http-statuses.php deleted file mode 100644 index af44920..0000000 --- a/resources/lang/fr/http-statuses.php +++ /dev/null @@ -1,84 +0,0 @@ - 'Erreur inconnue', - '100' => 'Continuer', - '101' => 'Protocoles de commutation', - '102' => 'En traitement', - '200' => 'D\'accord', - '201' => 'Créé', - '202' => 'Accepté', - '203' => 'Informations non autorisées', - '204' => 'Pas content', - '205' => 'Réinitialiser le contenu', - '206' => 'Contenu partiel', - '207' => 'Multi-statut', - '208' => 'Déjà rapporté', - '226' => 'J\'ai l\'habitude', - '300' => 'Choix multiples', - '301' => 'Déplacé de façon permanente', - '302' => 'A trouvé', - '303' => 'Voir autre', - '304' => 'Non modifié', - '305' => 'Utiliser un proxy', - '307' => 'Redirection temporaire', - '308' => 'Redirection permanente', - '400' => 'Mauvaise Demande', - '401' => 'Non autorisé', - '402' => 'Paiement Requis', - '403' => 'Interdit', - '404' => 'Page non trouvée', - '405' => 'Méthode Non Autorisée', - '406' => 'Pas acceptable', - '407' => 'Authentification proxy requise', - '408' => 'Délai d\'expiration de la demande', - '409' => 'Conflit', - '410' => 'Disparu', - '411' => 'Longueur requise', - '412' => 'La précondition a échoué', - '413' => 'Charge utile trop grande', - '414' => 'URI trop long', - '415' => 'Type de support non supporté', - '416' => 'Plage non satisfaisante', - '417' => 'Échec de l\'attente', - '418' => 'Je suis une théière', - '419' => 'La session a expiré', - '421' => 'Demande mal dirigée', - '422' => 'Entité non traitable', - '423' => 'Fermé à clef', - '424' => 'Dépendance échouée', - '425' => 'Trop tôt', - '426' => 'Mise à niveau requise', - '428' => 'Condition préalable requise', - '429' => 'Trop de demandes', - '431' => 'Demander des champs d\'en-tête trop grands', - '444' => 'Connexion fermée sans réponse', - '449' => 'Réessayer avec', - '451' => 'Indisponible pour des raisons légales', - '499' => 'Demande fermée du client', - '500' => 'Erreur Interne du Serveur', - '501' => 'Pas mis en œuvre', - '502' => 'Mauvaise passerelle', - '503' => 'Mode de Maintenance', - '504' => 'Délai d\'attente de la passerelle', - '505' => 'Version HTTP non prise en charge', - '506' => 'La variante négocie également', - '507' => 'Espace insuffisant', - '508' => 'Boucle détectée', - '509' => 'Limite de bande passante dépassée', - '510' => 'Non prolongé', - '511' => 'Authentification réseau requise', - '520' => 'Erreur inconnue', - '521' => 'Le serveur Web est en panne', - '522' => 'La connexion a expiré', - '523' => 'L\'origine est inaccessible', - '524' => 'Un dépassement de délai s\'est produit', - '525' => 'Échec de la prise de contact SSL', - '526' => 'Certificat SSL invalide', - '527' => 'Erreur de canon ferroviaire', - '598' => 'Erreur de délai de lecture réseau', - '599' => 'Erreur de délai de connexion réseau', - 'unknownError' => 'Erreur inconnue', -]; diff --git a/resources/lang/fr/models.php b/resources/lang/fr/models.php deleted file mode 100644 index 53d59ef..0000000 --- a/resources/lang/fr/models.php +++ /dev/null @@ -1,18 +0,0 @@ - [ - 'users' => 'Utilisateurs', - 'accounts' => 'Comptes', - 'tickets' => 'Tickets', - 'creditlogs' => 'Historique', - 'sites' => 'Sites', - 'brands' => 'Marques', - 'labels' => 'Labels', - 'packages' => 'Forfaits', - 'invoices' => 'Devis', - 'companies' => 'Sociétés', - 'informations' => 'Informations', - 'ticket_types' => 'Type de ticket|Types de tickets' - ] -]; diff --git a/resources/lang/fr/pagination.php b/resources/lang/fr/pagination.php deleted file mode 100644 index 225391e..0000000 --- a/resources/lang/fr/pagination.php +++ /dev/null @@ -1,8 +0,0 @@ - 'Suivant »', - 'previous' => '« Précédent', -]; diff --git a/resources/lang/fr/passwords.php b/resources/lang/fr/passwords.php deleted file mode 100644 index 75ae148..0000000 --- a/resources/lang/fr/passwords.php +++ /dev/null @@ -1,11 +0,0 @@ - 'Votre mot de passe a été réinitialisé !', - 'sent' => 'Nous vous avons envoyé par email le lien de réinitialisation du mot de passe !', - 'throttled' => 'Veuillez patienter avant de réessayer.', - 'token' => 'Ce jeton de réinitialisation du mot de passe n\'est pas valide.', - 'user' => 'Aucun utilisateur n\'a été trouvé avec cette adresse email.', -]; diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php deleted file mode 100644 index a0d2279..0000000 --- a/resources/lang/fr/validation.php +++ /dev/null @@ -1,265 +0,0 @@ - 'Le champ :attribute doit être accepté.', - 'accepted_if' => 'Le champ :attribute doit être accepté quand :other a la valeur :value.', - 'active_url' => 'Le champ :attribute n\'est pas une URL valide.', - 'after' => 'Le champ :attribute doit être une date postérieure au :date.', - 'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale au :date.', - 'alpha' => 'Le champ :attribute doit contenir uniquement des lettres.', - 'alpha_dash' => 'Le champ :attribute doit contenir uniquement des lettres, des chiffres et des tirets.', - 'alpha_num' => 'Le champ :attribute doit contenir uniquement des chiffres et des lettres.', - 'array' => 'Le champ :attribute doit être un tableau.', - 'ascii' => 'Le champ :attribute ne doit contenir que des caractères alphanumériques et des symboles codés sur un octet.', - 'attached' => ':attribute est déjà attaché(e).', - 'before' => 'Le champ :attribute doit être une date antérieure au :date.', - 'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.', - 'between' => [ - 'array' => 'Le tableau :attribute doit contenir entre :min et :max éléments.', - 'file' => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.', - 'string' => 'Le texte :attribute doit contenir entre :min et :max caractères.', - ], - 'boolean' => 'Le champ :attribute doit être vrai ou faux.', - 'can' => 'Le champ :attribute contient une valeur non autorisée.', - 'color' => 'Le champ :attribute doit être au format hexadécimal (ex: #FFFFFF)', - 'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.', - 'current_password' => 'Le mot de passe est incorrect.', - 'date' => 'Le champ :attribute n\'est pas une date valide.', - 'date_equals' => 'Le champ :attribute doit être une date égale à :date.', - 'date_format' => 'Le champ :attribute ne correspond pas au format :format.', - 'decimal' => 'Le champ :attribute doit comporter :decimal décimales.', - 'declined' => 'Le champ :attribute doit être décliné.', - 'declined_if' => 'Le champ :attribute doit être décliné quand :other a la valeur :value.', - 'different' => 'Les champs :attribute et :other doivent être différents.', - 'digits' => 'Le champ :attribute doit contenir :digits chiffres.', - 'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.', - 'dimensions' => 'La taille de l\'image :attribute n\'est pas conforme.', - 'distinct' => 'Le champ :attribute a une valeur en double.', - 'doesnt_end_with' => 'Le champ :attribute ne doit pas finir avec une des valeurs suivantes : :values.', - 'doesnt_start_with' => 'Le champ :attribute ne doit pas commencer avec une des valeurs suivantes : :values.', - 'email' => 'Le champ :attribute doit être une adresse e-mail valide.', - 'ends_with' => 'Le champ :attribute doit se terminer par une des valeurs suivantes : :values', - 'enum' => 'Le champ :attribute sélectionné est invalide.', - 'exists' => 'Le champ :attribute sélectionné est invalide.', - 'file' => 'Le champ :attribute doit être un fichier.', - 'filled' => 'Le champ :attribute doit avoir une valeur.', - 'gt' => [ - 'array' => 'Le tableau :attribute doit contenir plus de :value éléments.', - 'file' => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être supérieure à :value.', - 'string' => 'Le texte :attribute doit contenir plus de :value caractères.', - ], - 'gte' => [ - 'array' => 'Le tableau :attribute doit contenir au moins :value éléments.', - 'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.', - 'string' => 'Le texte :attribute doit contenir au moins :value caractères.', - ], - 'image' => 'Le champ :attribute doit être une image.', - 'in' => 'Le champ :attribute est invalide.', - 'in_array' => 'Le champ :attribute n\'existe pas dans :other.', - 'integer' => 'Le champ :attribute doit être un entier.', - 'ip' => 'Le champ :attribute doit être une adresse IP valide.', - 'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.', - 'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.', - 'json' => 'Le champ :attribute doit être un document JSON valide.', - 'lowercase' => 'Le champ :attribute doit être en minuscules.', - 'lt' => [ - 'array' => 'Le tableau :attribute doit contenir moins de :value éléments.', - 'file' => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être inférieure à :value.', - 'string' => 'Le texte :attribute doit contenir moins de :value caractères.', - ], - 'lte' => [ - 'array' => 'Le tableau :attribute doit contenir au plus :value éléments.', - 'file' => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.', - 'string' => 'Le texte :attribute doit contenir au plus :value caractères.', - ], - 'mac_address' => 'Le champ :attribute doit être une adresse MAC valide.', - 'max' => [ - 'array' => 'Le tableau :attribute ne peut pas contenir plus que :max éléments.', - 'file' => 'La taille du fichier de :attribute ne peut pas dépasser :max kilo-octets.', - 'numeric' => 'La valeur de :attribute ne peut pas être supérieure à :max.', - 'string' => 'Le texte de :attribute ne peut pas contenir plus de :max caractères.', - ], - 'max_digits' => 'Le champ :attribute ne doit pas avoir plus de :max chiffres.', - 'mimes' => 'Le champ :attribute doit être un fichier de type : :values.', - 'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.', - 'min' => [ - 'array' => 'Le tableau :attribute doit contenir au moins :min éléments.', - 'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :min kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.', - 'string' => 'Le texte de :attribute doit contenir au moins :min caractères.', - ], - 'min_digits' => 'Le champ :attribute doit avoir au moins :min chiffres.', - 'missing' => 'Le champ :attribute doit être manquant.', - 'missing_if' => 'Le champ :attribute doit être manquant quand :other a la valeur :value.', - 'missing_unless' => 'Le champ :attribute doit être manquant sauf si :other a la valeur :value.', - 'missing_with' => 'Le champ :attribute doit être manquant quand :values est présent.', - 'missing_with_all' => 'Le champ :attribute doit être manquant quand :values sont présents.', - 'multiple_of' => 'La valeur de :attribute doit être un multiple de :value', - 'not_in' => 'Le champ :attribute sélectionné n\'est pas valide.', - 'not_regex' => 'Le format du champ :attribute n\'est pas valide.', - 'numeric' => 'Le champ :attribute doit contenir un nombre.', - 'password' => [ - 'letters' => 'Le champ :attribute doit contenir au moins une lettre.', - 'mixed' => 'Le champ :attribute doit contenir au moins une majuscule et une minuscule.', - 'numbers' => 'Le champ :attribute doit contenir au moins un chiffre.', - 'symbols' => 'Le champ :attribute doit contenir au moins un symbole.', - 'uncompromised' => 'La valeur du champ :attribute est apparue dans une fuite de données. Veuillez choisir une valeur différente.', - ], - 'present' => 'Le champ :attribute doit être présent.', - 'prohibited' => 'Le champ :attribute est interdit.', - 'prohibited_if' => 'Le champ :attribute est interdit quand :other a la valeur :value.', - 'prohibited_unless' => 'Le champ :attribute est interdit à moins que :other est l\'une des valeurs :values.', - 'prohibits' => 'Le champ :attribute interdit :other d\'être présent.', - 'regex' => 'Le format du champ :attribute est invalide.', - 'relatable' => ':attribute n\'est sans doute pas associé(e) avec cette donnée.', - 'required' => 'Le champ :attribute est obligatoire.', - 'required_array_keys' => 'Le champ :attribute doit contenir des entrées pour : :values.', - 'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.', - 'required_if_accepted' => 'Le champ :attribute est obligatoire quand le champ :other a été accepté.', - 'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.', - 'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.', - 'required_with_all' => 'Le champ :attribute est obligatoire quand :values sont présents.', - 'required_without' => 'Le champ :attribute est obligatoire quand :values n\'est pas présent.', - 'required_without_all' => 'Le champ :attribute est requis quand aucun de :values n\'est présent.', - 'same' => 'Les champs :attribute et :other doivent être identiques.', - 'size' => [ - 'array' => 'Le tableau :attribute doit contenir :size éléments.', - 'file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être :size.', - 'string' => 'Le texte de :attribute doit contenir :size caractères.', - ], - 'starts_with' => 'Le champ :attribute doit commencer avec une des valeurs suivantes : :values', - 'string' => 'Le champ :attribute doit être une chaîne de caractères.', - 'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.', - 'ulid' => 'Le champ :attribute doit être un ULID valide.', - 'unique' => 'La valeur du champ :attribute est déjà utilisée.', - 'uploaded' => 'Le fichier du champ :attribute n\'a pu être téléversé.', - 'uppercase' => 'Le champ :attribute doit être en majuscules.', - 'url' => 'Le format de l\'URL de :attribute n\'est pas valide.', - 'uuid' => 'Le champ :attribute doit être un UUID valide', - 'attributes' => [ - 'address' => 'adresse', - 'age' => 'âge', - 'amount.day' => 'Montant (par jour)', - 'amount.default' => 'Montant', - 'announce_type' => 'type d\'annonce', - 'area' => 'zone', - 'available' => 'disponible', - 'birthday' => 'anniversaire', - 'body' => 'corps', - 'brandname' => 'Nom de la marque', - 'city' => 'ville', - 'color' => 'couleur', - 'comment' => 'Commentaire', - 'company_id' => 'Sociétés', - 'content' => 'contenu', - 'country' => 'pays', - 'created_at' => 'créé à', - 'creator' => 'créateur', - 'current_password' => 'mot de passe actuel', - 'date' => 'Date', - 'date_of_birth' => 'date de naissance', - 'day' => 'jour', - 'deleted_at' => 'supprimé à', - 'description' => 'la description', - 'district' => 'quartier', - 'duration' => 'durée', - 'email' => 'adresse e-mail', - 'excerpt' => 'extrait', - 'filter' => 'filtre', - 'first_name' => 'prénom', - 'firstname' => 'prénom', - 'gender' => 'genre', - 'gitlab_project_id' => 'id du dépôt Gitlab', - 'group' => 'groupe', - 'hour' => 'heure', - 'image' => 'image', - 'invoiced_to_id' => 'Entité à facturer', - 'label' => 'label', - 'last_name' => 'nom', - 'lastname' => 'nom', - 'lesson' => 'leçon', - 'line_address_1' => 'ligne d\'adresse 1', - 'line_address_2' => 'ligne d\'adresse 2', - 'message' => 'message', - 'middle_name' => 'deuxième prénom', - 'minute' => 'minute', - 'mobile' => 'portable', - 'month' => 'mois', - 'name' => 'nom', - 'national_code' => 'code national', - 'number' => 'numéro', - 'object' => 'objet', - 'operation' => 'opération', - 'password' => 'mot de passe', - 'password_confirmation' => 'confirmation du mot de passe', - 'person' => 'personne', - 'phone' => 'téléphone', - 'photo' => 'photo', - 'place' => 'lieu', - 'postal_code' => 'code postal', - 'price' => 'prix', - 'province' => 'région', - 'recaptcha_response_field' => 'champ de réponse recaptcha', - 'ref' => 'Réference', - 'remember' => 'se souvenir', - 'restored_at' => 'restauré à', - 'result_text_under_image' => 'texte de résultat sous l\'image', - 'role' => 'rôle', - 'second' => 'seconde', - 'sent_accounting_date' => 'Date d\'envoi compta', - 'sent_client_date' => 'Date d\'envoi client', - 'sex' => 'sexe', - 'short_text' => 'texte court', - 'show_days' => 'Afficher les jours', - 'signed_date' => 'Date de signature', - 'site' => 'site', - 'sites' => 'sites', - 'size' => 'taille', - 'solde' => 'Solde', - 'state' => 'état', - 'status' => 'statut', - 'street' => 'rue', - 'student' => 'étudiant', - 'subject' => 'sujet', - 'tasks' => 'Tâches', - 'teacher' => 'professeur', - 'template' => 'Template', - 'terms' => 'conditions', - 'test_description' => 'description test', - 'test_locale' => 'localisation test', - 'test_name' => 'nom test', - 'text' => 'texte', - 'time' => 'heure', - 'title' => 'titre', - 'todo' => 'à faire', - 'total' => 'Montant total', - 'total_days' => 'Montant total (jours)', - 'type' => 'Type', - 'updated_at' => 'mis à jour à', - 'url_prod' => 'Url de PROD', - 'url_re7' => 'Url de RECETTE', - 'username' => 'nom d\'utilisateur', - 'year' => 'année', - 'id' => 'identifiant' - ], - 'custom' => [ - 'type' => 'type', - 'tickets' => 'étiquettes', - 'assigned_to' => 'assigné à', - 'order' => 'ordre', - 'priority' => 'priorité', - 'default' => 'défaut', - 'date_mep' => 'MEP souhaitée', - 'published' => 'publication', - 'all' => 'Tout', - 'estimate' => 'estimation', - ] -]; diff --git a/resources/sass/back/_fonts.scss b/resources/sass/back/_fonts.scss new file mode 100644 index 0000000..268f722 --- /dev/null +++ b/resources/sass/back/_fonts.scss @@ -0,0 +1,125 @@ +/* Figtree - Light */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 300; + src: url('&/fonts/Figtree/Figtree-Light.ttf') format('truetype'); +} + +/* Figtree - Light Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 500; + src: url('&/fonts/Figtree/Figtree-LightItalic.ttf') format('truetype'); +} + +/* Figtree - Regular */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 400; + src: url('&/fonts/Figtree/Figtree-Regular.ttf') format('truetype'); +} + +/* Figtree - Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 400; + src: url('&/fonts/Figtree/Figtree-Italic.ttf') format('truetype'); +} + +/* Figtree - Medium */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 500; + src: url('&/fonts/Figtree/Figtree-Medium.ttf') format('truetype'); +} + +/* Figtree - Medium Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 500; + src: url('&/fonts/Figtree/Figtree-MediumItalic.ttf') format('truetype'); +} + +/* Figtree - Semi Bold */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 600; + src: url('&/fonts/Figtree/Figtree-SemiBold.ttf') format('truetype'); +} + +/* Figtree - Semi Bold Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 600; + src: url('&/fonts/Figtree/Figtree-SemiBoldItalic.ttf') format('truetype'); +} + +/* Figtree - Bold */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 700; + src: url('&/fonts/Figtree/Figtree-Bold.ttf') format('truetype'); +} + +/* Figtree - Bold Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 700; + src: url('&/fonts/Figtree/Figtree-BoldItalic.ttf') format('truetype'); +} + +/* Figtree - Extra Bold */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 800; + src: url('&/fonts/Figtree/Figtree-ExtraBold.ttf') format('truetype'); +} + +/* Figtree - Extra Bold Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 800; + src: url('&/fonts/Figtree/Figtree-ExtraBoldItalic.ttf') format('truetype'); +} + +/* Figtree - Black */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 900; + src: url('&/fonts/Figtree/Figtree-Black.ttf') format('truetype'); +} + +/* Figtree - Black Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 900; + src: url('&/fonts/Figtree/Figtree-BlackItalic.ttf') format('truetype'); +} diff --git a/resources/sass/back/app.scss b/resources/sass/back/app.scss new file mode 100644 index 0000000..37dabc5 --- /dev/null +++ b/resources/sass/back/app.scss @@ -0,0 +1,133 @@ +@use '/node_modules/flag-icons/css/flag-icons.min.css'; +@use './fonts'; +@use './inputs/wysiwyg'; +@use './../common'; + +@layer base { + .light { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --primary: 211.62 98.82% 33.14%; + --primary-foreground: 0 0% 96%; + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + --successive: 113 100% 38%; + --successive-foreground: 210 40% 98%; + --informative: 207 69% 48%; + --informative-foreground: 210 40% 98%; + --preventive: 46 100% 50%; + --preventive-foreground: 210 40% 98%; + --ring: 222.2 84% 4.9%; + --radius: 0.5rem; + --sidebar-background: 211.62 98.82% 33.14%; + --sidebar-foreground: 0 0% 96%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%; + } + + .dark { + --background: 240 5.9% 10%; + --foreground: 210 40% 98%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + --card: 240 5.9% 10%; + --card-foreground: 210 40% 98%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --primary: 222.2 84% 4.9%; + --primary-foreground: 210 40% 98%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + --successive: 128 63% 31%; + --successive-foreground: 210 40% 98%; + --informative: 212 50% 45%; + --informative-foreground: 210 40% 98%; + --preventive: 41 64% 56%; + --preventive-foreground: 210 40% 98%; + --ring: 212.7 26.8% 83.9%; + --radius: 0.5rem; + --sidebar-background: 222.2 84% 4.9%; + --sidebar-foreground: 210 40% 98%; + --sidebar-primary: 224.3 76.3% 48%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8%; + } + + * { + @apply border-border; + } + + body { + @apply bg-background text-foreground; + } +} + +html { + scroll-behavior: smooth; +} + +.animation-transition { + animation: 0.4s animation-transition linear; +} + +@keyframes animation-transition { + 0% { + opacity: 0; + } + + 50% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +.table-actions { + th:last-child, + td:last-child { + @apply bg-gray-50 dark:bg-gray-900 sticky top-0 right-0 w-[72px]; + } +} + +.richtext-outline, +.richtext-outline-1, +.richtext-shadow { + all: unset !important; +} + +// Wysiwyg classes. +.reactjs-tiptap-editor { + @apply rounded-md border border-input bg-background; +} + +/* stylelint-disable-next-line selector-class-pattern */ +.ProseMirror-focused { + @apply rounded-b ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2; +} diff --git a/resources/sass/back/inputs/_color.scss b/resources/sass/back/inputs/_color.scss new file mode 100644 index 0000000..15f7746 --- /dev/null +++ b/resources/sass/back/inputs/_color.scss @@ -0,0 +1,101 @@ +.sketch-picker { + display: flex; + width: 100% !important; + flex-direction: column; + padding: 0 !important; + border: 0 !important; + box-shadow: none !important; +} + +.sketch-picker, +.sketch-picker .flexbox-fix { + gap: 0.375rem; +} + +.sketch-picker > div, +.sketch-picker .flexbox-fix > div { + padding: 0 !important; + margin: 0 !important; +} + +.sketch-picker > div:first-child { + border-radius: calc(var(--radius) - 2px); + aspect-ratio: 1 / 1; +} + +.sketch-picker > div:last-child { + justify-content: space-between; + padding-top: 0.375rem !important; +} + +.sketch-picker > div:nth-child(3) > div { + flex: auto !important; +} + +.sketch-picker > div:last-child > div { + width: 20px !important; + height: 20px !important; +} + +.sketch-picker > div:last-child > div > span > div { + border-radius: calc(var(--radius) - 2px) !important; + box-shadow: none !important; + outline: 1px solid hsl(var(--input)) !important; +} + +.sketch-picker > div:nth-child(2) > div:first-child { + display: flex; + flex-direction: column; + gap: 0.375rem; +} + +.sketch-picker > div:nth-child(2) > div:last-child { + display: none; +} + +.sketch-picker > div:nth-child(3) > div:first-child { + width: 16rem; +} + +.sketch-picker > div:nth-child(2) > div:first-child > div { + height: 20px !important; + border-radius: calc(var(--radius) - 2px); + margin: 0 !important; + cursor: pointer; + outline: 1px solid hsl(var(--input)); +} + +/* stylelint-disable-next-line selector-max-compound-selectors */ +.sketch-picker > div:first-child > div > div > div:last-child > div { + width: 10px !important; + height: 10px !important; + border-radius: 50% !important; + background-color: #fff; + box-shadow: none !important; + transform: translate(-5px, -5px) !important; +} + +/* stylelint-disable-next-line selector-max-compound-selectors */ +.sketch-picker > div:nth-child(2) > div:first-child > div > div > div > div > div { + width: 0.5rem !important; + height: 20px !important; + border: 1px hsl(var(--input)) solid; + border-radius: 0 !important; + margin-top: 0 !important; + background: #fff !important; + box-shadow: none !important; + transform: translateX(-4px) !important; +} + +.sketch-picker input { + width: 100% !important; + height: 2.5rem; + padding: 0.5rem 0.75rem !important; + border: 1px hsl(var(--input)) solid !important; + border-radius: calc(var(--radius) - 2px) !important; + background-color: hsl(var(--background)); + box-shadow: none !important; + color: var(--foreground); + outline: none; + text-align: center; +} diff --git a/resources/sass/back/inputs/_wysiwyg.scss b/resources/sass/back/inputs/_wysiwyg.scss new file mode 100644 index 0000000..5ddd75f --- /dev/null +++ b/resources/sass/back/inputs/_wysiwyg.scss @@ -0,0 +1,26 @@ +// * Custom css. +.tiptap { + @apply px-3 py-2; + + display: flow-root; + min-height: 180px; + + .link { + @apply cursor-pointer; + } + + [data-type='taskList'] > li { + @apply flex flex-row justify-start items-center gap-1.5; + } + + .is-editor-empty:first-child::before { + @apply float-left text-muted-foreground h-0 pointer-events-none; + + content: attr(data-placeholder); + } +} + +/* stylelint-disable-next-line selector-class-pattern */ +.ProseMirror-focused { + @apply rounded-b ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2; +} diff --git a/resources/sass/bo/base/_common.scss b/resources/sass/bo/base/_common.scss deleted file mode 100644 index 9044e4f..0000000 --- a/resources/sass/bo/base/_common.scss +++ /dev/null @@ -1,40 +0,0 @@ -.container-xxl { - max-width: 1600px !important; -} - -#app { - padding-bottom: 8.5rem; -} - -.btn-xs, -.btn-group-xs > .btn { - padding: 0.1rem 0.4rem; - border-radius: 0.3rem; - font-size: 0.8rem; -} - -// Tickets Labels -.ticket-index-labels { - overflow: hidden; - max-width: 15rem; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} - -.w-fit { - width: fit-content !important; -} - -.btn-md { - height: 38px; -} - -.pagination-custom .dropdown-menu { - overflow: auto; - min-width: 5rem; - max-height: 12rem; -} - -.table-col-sorter { - height: 3rem; -} diff --git a/resources/sass/bo/bo.scss b/resources/sass/bo/bo.scss deleted file mode 100644 index fc6e245..0000000 --- a/resources/sass/bo/bo.scss +++ /dev/null @@ -1,14 +0,0 @@ -@charset "UTF-8"; - -// * UTILITIES -@import "./utilities/variables"; - -// * VENDOR -@import "./vendor/bootstrap"; -@import "./vendor/bootswatch"; -@import "./vendor/ckEditorContent"; -@import "./vendor/complement"; -@import "./vendor/glightbox"; - -// * BASE -@import "base/common"; diff --git a/resources/sass/bo/utilities/_bootstrap-custom.scss b/resources/sass/bo/utilities/_bootstrap-custom.scss deleted file mode 100644 index 50438f2..0000000 --- a/resources/sass/bo/utilities/_bootstrap-custom.scss +++ /dev/null @@ -1,44 +0,0 @@ -@use "sass:list"; -@import "mixins"; - -// SET SOME CLASSES WITH BOOTSTRAP BREAKPOINTS -// * Reponsive borders -@each $breakpoint in map-keys($grid-breakpoints) { - @include media-breakpoint-up($breakpoint) { - $infix: breakpoint-infix($breakpoint, $grid-breakpoints); - - @include generate-bs-borders($infix, $prefix); - - @each $color, $value in $theme-colors { - @include generate-bs-borders($infix, $prefix, $color); - } - } -} - -// * Responsive sizings (used in laravel errors layouts) -@each $breakpoint in map-keys($grid-breakpoints) { - @include media-breakpoint-up($breakpoint) { - $infix: breakpoint-infix($breakpoint, $grid-breakpoints); - - .w#{$infix}-25 { - width: 25% !important; - } - .w#{$infix}-50 { - width: 50% !important; - } - .w#{$infix}-75 { - width: 75% !important; - } - .w#{$infix}-100 { - width: 100% !important; - } - - @each $prop, $unit in (width: vw, height: vh) { - @each $size in [25, 50, 75, 100] { - .#{$unit}#{$infix}-#{$size} { - #{$prop}: #{$size}#{$unit} !important; - } - } - } - } -} diff --git a/resources/sass/bo/utilities/_mixins.scss b/resources/sass/bo/utilities/_mixins.scss deleted file mode 100644 index b0fc0d1..0000000 --- a/resources/sass/bo/utilities/_mixins.scss +++ /dev/null @@ -1,54 +0,0 @@ -@mixin generate-bs-borders($infix, $prefix, $color:null) { - $color-var: var(--#{$prefix}border-color); - - @if $color { - $color-var: rgba(var(--#{$prefix}#{$color}-rgb)); - $color: "-#{$color}"; - } - - .border#{$infix}#{$color}-top { - border-top: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-end { - border-right: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-bottom { - border-bottom: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-start { - border-left: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - - .border#{$infix}#{$color}-0 { border: 0 !important; } - .border#{$infix}#{$color}-top-0 { border-top: 0 !important; } - .border#{$infix}#{$color}-end-0 { border-right: 0 !important; } - .border#{$infix}#{$color}-bottom-0 { border-bottom: 0 !important; } - .border#{$infix}#{$color}-start-0 { border-left: 0 !important; } - - @each $idx, $b-width in $border-widths { - $pidx: list.index(($border-widths), ($idx $b-width)); - - .border#{$infix}#{$color}-top-#{$idx} { - border-top: $b-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-end-#{$idx} { - border-right: $b-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-bottom-#{$idx} { - border-bottom: $b-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-start-#{$idx} { - border-left: $b-width var(--#{$prefix}border-style) #{$color-var} !important; - } - } - - .border#{$infix}#{$color}-x { - border-right: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - border-left: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - - .border#{$infix}#{$color}-y { - border-top: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - border-bottom: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } -} diff --git a/resources/sass/bo/utilities/_variables.scss b/resources/sass/bo/utilities/_variables.scss deleted file mode 100644 index 461f10e..0000000 --- a/resources/sass/bo/utilities/_variables.scss +++ /dev/null @@ -1,106 +0,0 @@ -@use "sass:color"; - -// Lumen 5.1.3 -// Bootswatch - -$theme: "lumen" !default; - -// Color system -$lightness: -20%; -$saturation: -5%; - -@function lower-color($color) { - @return color.scale($color, $lightness: $lightness, $saturation: $saturation); -} - -@function lower-brightness($color) { - @return color.scale($color, $lightness: $lightness + 10%); -} - -$white: #fffcf5 !default; -$gray-100: lower-brightness(#f8f9fa) !default; -$gray-200: lower-brightness(#e9ecef) !default; -$gray-300: lower-brightness(#dee2e6) !default; -$gray-400: lower-brightness(#ced4da) !default; -$gray-500: lower-brightness(#adb5bd) !default; -$gray-600: lower-brightness(#6c757d) !default; -$gray-700: lower-brightness(#495057) !default; -$gray-800: lower-brightness(#343a40) !default; -$gray-900: lower-brightness(#212529) !default; -$black: #000 !default; -$blue: lower-color(#337ab7) !default; -$indigo: lower-color(#6610f2) !default; -$purple: lower-color(#6f42c1) !default; -$pink: lower-color(#b7337a) !default; -$red: lower-color(#d9534f) !default; -$orange: lower-color(#fd7e14) !default; -$yellow: lower-color(#f0ad4e) !default; -$green: lower-color(#5cb85c) !default; -$teal: lower-color(#20c997) !default; -$cyan: lower-color(#5bc0de) !default; -$primary: $blue !default; -$secondary: $gray-600 !default; -$success: $green !default; -$info: $teal !default; -$warning: $yellow !default; -$danger: $red !default; -$discovery: $cyan !default; -$light: $gray-100 !default; -$dark: $gray-900 !default; -$body-bg: $white; -$min-contrast-ratio: 1.95 !default; -$theme-colors: ( - "primary": $primary, - "secondary": $secondary, - "success": $success, - "info": $info, - "warning": $warning, - "danger": $danger, - "light": $light, - "dark": $dark, - "discovery": $cyan -); - - -// Fonts -// stylelint-disable-next-line value-keyword-case -$font-family-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", - arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; - -// Tables -$table-bg-scale: 0% !default; - -// Buttons -$btn-font-weight: 700 !default; - -// Dropdowns -$dropdown-link-color: rgb(0 0 0 / 50%) !default; - -// Navs -$nav-tabs-border-color: $gray-200 !default; -$nav-tabs-link-hover-border-color: $nav-tabs-border-color !default; -$nav-tabs-link-active-color: $gray-900 !default; -$nav-tabs-link-active-border-color: $nav-tabs-border-color !default; - -// Pagination -$pagination-color: $gray-700 !default; -$pagination-bg: $white !default; -$pagination-hover-color: $pagination-color !default; -$pagination-hover-bg: $pagination-bg !default; -$pagination-active-border-color: color.adjust($primary, $lightness: -5%) !default; -$pagination-disabled-color: $gray-600 !default; -$pagination-disabled-bg: $pagination-bg !default; - -// Breadcrumbs -$breadcrumb-padding-y: 0.375rem !default; -$breadcrumb-padding-x: 0.75rem !default; -$breadcrumb-bg: $pagination-bg !default; -$breadcrumb-border-radius: 0.25rem !default; - -// Modals -$modal-content-border-color: rgba($black, 0.1) !default; - -// Close -$btn-close-color: $white !default; -$btn-close-opacity: 0.4 !default; -$btn-close-hover-opacity: 1 !default; diff --git a/resources/sass/bo/vendor/_bootstrap.scss b/resources/sass/bo/vendor/_bootstrap.scss deleted file mode 100644 index 6518b8e..0000000 --- a/resources/sass/bo/vendor/_bootstrap.scss +++ /dev/null @@ -1,43 +0,0 @@ -// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc) -@import "~/bootstrap/scss/functions"; - -// 2. Include remainder of required Bootstrap stylesheets -@import "~/bootstrap/scss/variables"; -@import "~/bootstrap/scss/variables-dark"; - -// 3. Include remainder of required parts -@import "~/bootstrap/scss/maps"; -@import "~/bootstrap/scss/mixins"; -@import "~/bootstrap/scss/root"; - -// 4. Optionally include any other parts as needed -@import "~/bootstrap/scss/alert"; -@import "~/bootstrap/scss/buttons"; -@import "~/bootstrap/scss/button-group"; -@import "~/bootstrap/scss/containers"; -@import "~/bootstrap/scss/dropdown"; -@import "~/bootstrap/scss/forms"; -@import "~/bootstrap/scss/grid"; -@import "~/bootstrap/scss/helpers"; -@import "~/bootstrap/scss/images"; -@import "~/bootstrap/scss/list-group"; -@import "~/bootstrap/scss/nav"; -@import "~/bootstrap/scss/navbar"; -@import "~/bootstrap/scss/pagination"; -@import "~/bootstrap/scss/reboot"; -@import "~/bootstrap/scss/tables"; -@import "~/bootstrap/scss/tooltip"; -@import "~/bootstrap/scss/type"; -@import "~/bootstrap/scss/utilities"; -@import "~/bootstrap/scss/modal"; -@import "~/bootstrap/scss/close"; -@import "~/bootstrap/scss/card"; -@import "~/bootstrap/scss/breadcrumb"; -@import "~/bootstrap/scss/badge"; -@import "~/bootstrap/scss/transitions"; - -// 5. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss` -@import "~/bootstrap/scss/utilities/api"; - -// 6 Overload bootstrap classes -@import "./../utilities/bootstrap-custom"; diff --git a/resources/sass/bo/vendor/_bootswatch.scss b/resources/sass/bo/vendor/_bootswatch.scss deleted file mode 100644 index 5e7ba8f..0000000 --- a/resources/sass/bo/vendor/_bootswatch.scss +++ /dev/null @@ -1,321 +0,0 @@ -// Lumen 5.1.3 -// Bootswatch - -$web-font-path: 'https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap' !default; -@if $web-font-path { - @import url($web-font-path); -} - -// Mixins - -@mixin shadow($width: 4px) { - border-style: solid; - border-width: 0 1px $width 1px; -} - -// Navbar - -.navbar { - @include shadow(); - - @each $color, $value in $theme-colors { - &.bg-#{$color} { - border-color: shade-color($value, 10%); - } - } -} - -// Buttons - -.btn { - @include shadow(); - text-transform: uppercase; - - &:not(.disabled):hover { - border-bottom-width: 3px; - margin-top: 1px; - } - - &:not(.disabled):active { - @include box-shadow(none); - border-bottom-width: 2px; - margin-top: 2px; - } - - @each $color, $value in $theme-colors { - &-#{$color} { - &:hover, - &:active, - &:focus { - background-color: $value; - } - - &, - &:not(.disabled):hover, - &:not(.disabled):active, - &:focus { - border-color: shade-color($value, 10%); - } - } - } -} - -[class*='btn-outline'] { - border-top-width: 1px; -} - -.btn-group-vertical { - .btn + .btn { - &:hover { - border-top-width: 1px; - margin-top: -1px; - } - - &:active { - border-top-width: 2px; - margin-top: -1px; - } - } -} - -// Typography - -.text-secondary { - color: $gray-700 !important; -} - -.blockquote-footer { - color: $gray-600; -} - -// Forms - -.form-control { - box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.075); -} - -// Navs - -.nav { - .open > a, - .open > a:hover, - .open > a:focus { - border-color: transparent; - } -} - -.nav-tabs { - .nav-link { - color: $body-color; - - &, - &.disabled, - &.disabled:hover, - &.disabled:focus { - border-color: $nav-tabs-border-color; - margin-top: 6px; - transition: padding-bottom 0.2s ease-in-out, margin-top 0.2s ease-in-out, border-bottom 0.2s ease-in-out; - } - - &:not(.disabled):hover, - &:not(.disabled):focus, - &.active { - border-bottom-color: transparent; - margin-top: 0; - padding-bottom: add(0.5rem, 6px); - } - } - - &.nav-justified > li { - vertical-align: bottom; - } -} - -.dropdown-menu { - @include shadow(); - @include box-shadow(none); - border-top-width: 1px; - margin-top: 0; -} - -.breadcrumb { - @include shadow(); - border-color: shade-color($breadcrumb-bg, 10%); -} - -.pagination { - > li > a, - > li > span { - @include shadow(); - color: $pagination-color; - font-weight: 700; - position: relative; - text-transform: uppercase; - top: 0; - - &:hover, - &:focus { - border-bottom-width: 3px; - text-decoration: none; - top: 1px; - } - - &:active { - border-bottom-width: 2px; - top: 2px; - } - } - - > .disabled > a, - > .disabled > span { - &:hover { - @include shadow(); - top: 0; - } - - &:active { - @include shadow(); - top: 0; - } - } -} - -.pager { - > li > a, - > li > span, - > .disabled > a, - > .disabled > span { - &, - &:hover, - &:active { - border-left-width: 2px; - border-right-width: 2px; - } - } -} - -// Indicators - -.btn-close { - opacity: 0.4; - text-decoration: none; - - &:hover, - &:focus { - opacity: 1; - } -} - -.alert { - @include shadow(); - color: $white; - - &-primary { - background-color: $primary; - border-color: shade-color($primary, 10%); - } - - &-secondary { - background-color: $secondary; - border-color: shade-color($secondary, 10%); - } - - &-success { - background-color: $success; - border-color: shade-color($success, 10%); - } - - &-info { - background-color: $info; - border-color: shade-color($info, 10%); - } - - &-danger { - background-color: $danger; - border-color: shade-color($danger, 10%); - } - - &-warning { - background-color: $warning; - border-color: shade-color($warning, 10%); - } - - &-dark { - background-color: $dark; - border-color: shade-color($dark, 10%); - } - - &-light { - background-color: $light; - border-color: shade-color($light, 10%); - } - - .alert-link { - color: $white; - font-weight: 400; - text-decoration: underline; - } - - &-secondary, - &-light { - &, - a, - .alert-link { - color: $body-color; - } - } -} - -.badge { - &.bg-secondary, - &.bg-light { - color: $dark; - } -} - -// Containers - -a.list-group-item { - &-success { - &.active { - background-color: $success; - } - - &.active:hover, - &.active:focus { - background-color: shade-color($success, 10%); - } - } - - &-warning { - &.active { - background-color: $warning; - } - - &.active:hover, - &.active:focus { - background-color: shade-color($warning, 10%); - } - } - - &-danger { - &.active { - background-color: $danger; - } - - &.active:hover, - &.active:focus { - background-color: shade-color($danger, 10%); - } - } -} - -.modal { - color: #1e2125; - - & .toast { - .btn-close { - background-image: url("data:image/svg+xml,"); - } - } -} diff --git a/resources/sass/bo/vendor/_ckEditorContent.scss b/resources/sass/bo/vendor/_ckEditorContent.scss deleted file mode 100644 index d9ebd78..0000000 --- a/resources/sass/bo/vendor/_ckEditorContent.scss +++ /dev/null @@ -1,417 +0,0 @@ -// CKeditor fix in alert -.ck-editor__main { - color: initial; -} - -// CK Content -/* - * CKEditor 5 (v32.0.0) content styles. - * Generated on Thu, 17 Feb 2022 10:21:25 GMT. - * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/content-styles.html - */ - -:root { - --ck-color-image-caption-background: hsl(0, 0%, 97%); - --ck-color-image-caption-text: hsl(0, 0%, 20%); - --ck-color-mention-background: hsla(341, 100%, 30%, 0.1); - --ck-color-mention-text: hsl(341, 100%, 30%); - --ck-color-table-caption-background: hsl(0, 0%, 97%); - --ck-color-table-caption-text: hsl(0, 0%, 20%); - --ck-highlight-marker-blue: hsl(201, 97%, 72%); - --ck-highlight-marker-green: hsl(120, 93%, 68%); - --ck-highlight-marker-pink: hsl(345, 96%, 73%); - --ck-highlight-marker-yellow: hsl(60, 97%, 73%); - --ck-highlight-pen-green: hsl(112, 100%, 27%); - --ck-highlight-pen-red: hsl(0, 85%, 49%); - --ck-image-style-spacing: 1.5em; - --ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2); - --ck-todo-list-checkmark-size: 16px; -} - -/* ckeditor5-block-quote/theme/blockquote.css */ -.ck-content blockquote { - border-left: solid 5px hsl(0, 0%, 80%); - font-style: italic; - margin-left: 0; - margin-right: 0; - overflow: hidden; - padding-left: 1.5em; - padding-right: 1.5em; -} -/* ckeditor5-block-quote/theme/blockquote.css */ -.ck-content[dir="rtl"] blockquote { - border-left: 0; - border-right: solid 5px hsl(0, 0%, 80%); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-yellow { - background-color: var(--ck-highlight-marker-yellow); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-green { - background-color: var(--ck-highlight-marker-green); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-pink { - background-color: var(--ck-highlight-marker-pink); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-blue { - background-color: var(--ck-highlight-marker-blue); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .pen-red { - background-color: transparent; - color: var(--ck-highlight-pen-red); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .pen-green { - background-color: transparent; - color: var(--ck-highlight-pen-green); -} -/* ckeditor5-font/theme/fontsize.css */ -.ck-content .text-tiny { - font-size: 0.7em; -} -/* ckeditor5-font/theme/fontsize.css */ -.ck-content .text-small { - font-size: 0.85em; -} -/* ckeditor5-font/theme/fontsize.css */ -.ck-content .text-big { - font-size: 1.4em; -} -/* ckeditor5-font/theme/fontsize.css */ -.ck-content .text-huge { - font-size: 1.8em; -} -/* ckeditor5-basic-styles/theme/code.css */ -.ck-content code { - background-color: hsla(0, 0%, 78%, 0.3); - border-radius: 2px; - padding: 0.15em; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image { - clear: both; - display: table; - margin: 0.9em auto; - min-width: 50px; - text-align: center; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image img { - display: block; - margin: 0 auto; - max-width: 100%; - min-width: 100%; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image-inline { - align-items: flex-start; - /* - * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).; - * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root. - * This strange behavior does not happen with inline-flex. - */ - display: inline-flex; - max-width: 100%; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image-inline picture { - display: flex; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image-inline picture, -.ck-content .image-inline img { - flex-grow: 1; - flex-shrink: 1; - max-width: 100%; -} -/* ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized { - box-sizing: border-box; - display: block; - max-width: 100%; -} -/* ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized img { - width: 100%; -} -/* ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized > figcaption { - display: block; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-left, -.ck-content .image-style-block-align-right { - max-width: calc(100% - var(--ck-image-style-spacing)); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-left, -.ck-content .image-style-align-right { - clear: none; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-side { - float: right; - margin-left: var(--ck-image-style-spacing); - max-width: 50%; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-left { - float: left; - margin-right: var(--ck-image-style-spacing); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-center { - margin-left: auto; - margin-right: auto; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-right { - float: right; - margin-left: var(--ck-image-style-spacing); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-right { - margin-left: auto; - margin-right: 0; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-left { - margin-left: 0; - margin-right: auto; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content p + .image-style-align-left, -.ck-content p + .image-style-align-right, -.ck-content p + .image-style-side { - margin-top: 0; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-left, -.ck-content .image-inline.image-style-align-right { - margin-bottom: var(--ck-inline-image-style-spacing); - margin-top: var(--ck-inline-image-style-spacing); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-left { - margin-right: var(--ck-inline-image-style-spacing); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-right { - margin-left: var(--ck-inline-image-style-spacing); -} -/* ckeditor5-image/theme/imagecaption.css */ -.ck-content .image > figcaption { - background-color: var(--ck-color-image-caption-background); - caption-side: bottom; - color: var(--ck-color-image-caption-text); - display: table-caption; - font-size: 0.75em; - outline-offset: -1px; - padding: 0.6em; - word-break: break-word; -} -/* ckeditor5-language/theme/language.css */ -.ck-content span[lang] { - font-style: italic; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list { - list-style: none; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list li { - margin-bottom: 5px; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list li .todo-list { - margin-top: 5px; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input { - appearance: none; - border: 0; - display: inline-block; - height: var(--ck-todo-list-checkmark-size); - left: -25px; - margin-left: 0; - margin-right: -15px; - position: relative; - right: 0; - vertical-align: middle; - width: var(--ck-todo-list-checkmark-size); -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input::before { - border: 1px solid hsl(0, 0%, 20%); - border-radius: 2px; - box-sizing: border-box; - content: ""; - display: block; - height: 100%; - position: absolute; - transition: 250ms ease-in-out box-shadow, 250ms ease-in-out background, 250ms ease-in-out border; - width: 100%; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input::after { - border-color: transparent; - border-style: solid; - border-width: 0 calc(var(--ck-todo-list-checkmark-size) / 8) calc(var(--ck-todo-list-checkmark-size) / 8) 0; - box-sizing: content-box; - content: ""; - display: block; - height: calc(var(--ck-todo-list-checkmark-size) / 2.6); - left: calc(var(--ck-todo-list-checkmark-size) / 3); - pointer-events: none; - position: absolute; - top: calc(var(--ck-todo-list-checkmark-size) / 5.3); - transform: rotate(45deg); - width: calc(var(--ck-todo-list-checkmark-size) / 5.3); -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input[checked]::before { - background: hsl(126, 64%, 41%); - border-color: hsl(126, 64%, 41%); -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input[checked]::after { - border-color: hsl(0, 0%, 100%); -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label .todo-list__label__description { - vertical-align: middle; -} -/* ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break { - align-items: center; - clear: both; - display: flex; - justify-content: center; - padding: 5px 0; - position: relative; -} -/* ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break::after { - border-bottom: 2px dashed hsl(0, 0%, 77%); - content: ""; - position: absolute; - width: 100%; -} -/* ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break__label { - background: hsl(0, 0%, 100%); - border: 1px solid hsl(0, 0%, 77%); - border-radius: 2px; - box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15); - color: hsl(0, 0%, 20%); - display: block; - font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif; - font-size: 0.75em; - font-weight: bold; - padding: 0.3em 0.6em; - position: relative; - text-transform: uppercase; - user-select: none; - user-select: none; - user-select: none; - user-select: none; - z-index: 1; -} -/* ckeditor5-table/theme/tablecaption.css */ -.ck-content .table > figcaption { - background-color: var(--ck-color-table-caption-background); - caption-side: top; - color: var(--ck-color-table-caption-text); - display: table-caption; - font-size: 0.75em; - outline-offset: -1px; - padding: 0.6em; - text-align: center; - word-break: break-word; -} -/* ckeditor5-media-embed/theme/mediaembed.css */ -.ck-content .media { - clear: both; - display: block; - margin: 0.9em 0; - min-width: 15em; -} -/* ckeditor5-table/theme/table.css */ -.ck-content .table { - display: table; - margin: 0.9em auto; -} -/* ckeditor5-table/theme/table.css */ -.ck-content .table table { - border: 1px double hsl(0, 0%, 70%); - border-collapse: collapse; - border-spacing: 0; - height: 100%; - width: 100%; -} -/* ckeditor5-table/theme/table.css */ -.ck-content .table table td, -.ck-content .table table th { - border: 1px solid hsl(0, 0%, 75%); - min-width: 2em; - padding: 0.4em; -} -/* ckeditor5-table/theme/table.css */ -.ck-content .table table th { - background: hsla(0, 0%, 0%, 5%); - font-weight: bold; -} -/* ckeditor5-table/theme/table.css */ -.ck-content[dir="rtl"] .table th { - text-align: right; -} -/* ckeditor5-table/theme/table.css */ -.ck-content[dir="ltr"] .table th { - text-align: left; -} -/* ckeditor5-horizontal-line/theme/horizontalline.css */ -.ck-content hr { - background: hsl(0, 0%, 87%); - border: 0; - height: 4px; - margin: 15px 0; -} -/* ckeditor5-code-block/theme/codeblock.css */ -.ck-content pre { - background: hsla(0, 0%, 78%, 0.3); - border: 1px solid hsl(0, 0%, 77%); - border-radius: 2px; - color: hsl(0, 0%, 20.8%); - direction: ltr; - font-style: normal; - min-width: 200px; - padding: 1em; - tab-size: 4; - text-align: left; - white-space: pre-wrap; -} -/* ckeditor5-code-block/theme/codeblock.css */ -.ck-content pre code { - background: unset; - border-radius: 0; - padding: 0; -} -/* ckeditor5-mention/theme/mention.css */ -.ck-content .mention { - background: var(--ck-color-mention-background); - color: var(--ck-color-mention-text); -} -@media print { - /* ckeditor5-page-break/theme/pagebreak.css */ - .ck-content .page-break { - padding: 0; - } - /* ckeditor5-page-break/theme/pagebreak.css */ - .ck-content .page-break::after { - display: none; - } -} diff --git a/resources/sass/bo/vendor/_complement.scss b/resources/sass/bo/vendor/_complement.scss deleted file mode 100644 index 17bc6cb..0000000 --- a/resources/sass/bo/vendor/_complement.scss +++ /dev/null @@ -1,244 +0,0 @@ -// @function strip-unit($value) -// @param {number with unit} $value -@function strip-unit($value) { - @return ($value / ($value * 0 + 1)); -} - -// @function pow($base, $exponents) -// Helper: Raise a number the power of another number -// Adapted from: https://gist.github.com/hail2u/1964056 -// -// @param {number} $base — The base number -// @param {number} $exponents — The exponent to which to raise $base -@function pow($base, $exponents) { - $raised: 1; - @for $i from 1 through $exponents { - $raised: $raised * $base; - } - @return $raised; -} - -// @function luminance($color) -// Helper: Calculate Luminance of a single color -// Adapted from: https://medium.com/dev-channel/using-sass-to-automatically-pick-text-colors-4ba7645d2796 -// White luminance is 1, Black luminance is 0 -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { luminance: luminance(#c00); } -// Output: -// .sample { luminance: 0.1283736922; } -// -@function luminance($color) { - // Thanks voxpelli for a very concise implementation of luminance measure in sass - // Adapted from: https://gist.github.com/voxpelli/6304812 - $rgba: red($color), green($color), blue($color); - $rgba2: (); - @for $i from 1 through 3 { - $rgb: nth($rgba, $i); - $rgb: calc($rgb / 255); - $rgb: if($rgb < 0.03928, calc($rgb / 12.92), pow(calc(($rgb + 0.055) / 1.055), 2)); - $rgba2: append($rgba2, $rgb); - } - @return (0.2126 * nth($rgba2, 1) + 0.7152 * nth($rgba2, 2) + 0.0722 * nth($rgba2, 3)) * 100; -} - -// @function contrast-ratio($fg, $bg) -// Helper: Calculate "readability" as defined by WCAG 2.1 -// Adapted from: https://github.com/LeaVerou/contrast-ratio/blob/gh-pages/color.js -// Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { color-contrast: contrast-ratio(#c00, #fff); } -// Output: -// .sample { color-contrast: 5.89; } -// -@function contrast-ratio($fg, $bg) { - $luminance1: luminance($fg) + 0.05; - $luminance2: luminance($bg) + 0.05; - $ratio: calc($luminance1 / $luminance2); - @if $luminance2 > $luminance1 { - $ratio: calc(1 / $ratio); - } - // Round to a hundreth because 6.96 should not pass a ratio of 7.0 - $ratio: calc(round($ratio * 100) / 100); - @return $ratio; -} - -// @function validate-font-size($size) -// Helper: Depending on the unit recalculate a font size value into pixels if possible -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { validate-font-size: validate-font-size(1em); } -// Output: -// .sample { validate-font-size: 16; } -// -@function validate-font-size($size) { - @if unit($size) == "em" or unit($size) == "rem" or unit($size) == "px" or unit($size) == "" { - // Check if a flexible unit - @if unit($size) == "em" or unit($size) == "rem" { - // Need to convert to a pixel value. Let's not overcomplicate it with possible EM inheritence scale factors - @return strip-unit($size * 16); - } - @if unit($size) == "px" { - // We expect PX, so strip the value and return it - @return strip-unit($size); - } - @if unit($size) == "" { - @return $size; - } - } @else { - @error "validate-font-size(): An unexpected font size unit was supplied."; - } -} - -// @function get-ratio($level: 'AA', $size: 16, $bold: false) -// Helper: Determine the correct ratio value to use based on font-size and WCAG Level -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { get-ratio: get-ratio('AAA', 19, true); } -// Output: -// .sample { get-ratio: 4.5; } -// -@function get-ratio($level: "AA", $size: 16, $bold: false) { - // Default ratio - $ratio: 4.5; - @if $level == "AAA" { - $ratio: 7; - } - - // Make sure the size is valid. If the value is not EM, REM, or PX (preferred), we can't help - $size: validate-font-size($size); - - // Check font size - @if $size < 24 { - // Small text, use defaults - // But: - @if $size >= 19 and $bold == true { - // Special case: Small text but also bold - @if $level == "AAA" { - $ratio: 4.5; - } @else { - $ratio: 3; - } - } - } @else { - // Larger than 24 - $ratio: 3; - @if $level == "AAA" { - $ratio: 4.5; - } - } - @return $ratio; -} - -// @function light-or-dark($color) -// Helper: Use contrast against white or black to determine if a color is "light" or "dark" -// Adapted from: https://medium.com/dev-channel/using-sass-to-automatically-pick-text-colors-4ba7645d2796 -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { light-or-dark: light-or-dark(#c00); } -// Output: -// .sample { light-or-dark: "light"; } -// -@function light-or-dark($color) { - $light-contrast: contrast-ratio($color, $white); - $dark-contrast: contrast-ratio($color, $black); - - @if $light-contrast > $dark-contrast { - // Contrast against white is higher than against black, so, this is a dark color - @return "dark"; - } @else { - @return "light"; - } -} - -// @function color-contrast($color) -// Helper: Returns black or white compared to a color, whichever produces the highest contrast -// Usage: -// .sample { -// background-color: #c00; -// color: color-contrast(#c00); -// } -// Output: -// .sample { -// background-color: #c00; -// color: #fff; -// } -// -// Named for the forthcoming CSS Module 5 spec function color-contrast(); -// See https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-contrast() -// -@function color-contrast($color) { - $color-lod: light-or-dark($color); - - @if ($color-lod == "dark") { - @return $white; - } @else { - @return $black; - } -} - -// @function a11y-color($fg, $bg, $level: 'AA', $size: 16, $bold: false) -// Goal: Return a color that passes for the chosen WCAG level without changing the Hue of the color -// Usage: -// .sample { -// background-color: #000; -// color: a11y-color(#c0c, #000); -// } -// Output: -// .sample { -// background-color: #000; -// color: #d200d2; -// } -// -@function a11y-color($fg, $bg, $level: "AA", $size: 16, $bold: false) { - // Helper: make sure the font size value is acceptable - $font-size: validate-font-size($size); - // Helper: With the level, font size, and bold boolean, return the proper target ratio. 3.0, 4.5, or 7.0 expected - $ratio: get-ratio($level, $font-size, $bold); - // Calculate the first contrast ratio of the given pair - $original-contrast: contrast-ratio($fg, $bg); - - @if $original-contrast >= $ratio { - // If we pass the ratio already, return the original color - @return $fg; - } @else { - // Doesn't pass. Time to get to work - // Should the color be lightened or darkened? - $fg-lod: light-or-dark($fg); - $bg-lod: light-or-dark($bg); - - // Set a "step" value to lighten or darken a color - // Note: Higher percentage steps means faster compile time, but we might overstep the required threshold too far with something higher than 4% - $step: 1%; - - // Run through some cases where we want to darken, or use a negative step value - @if $fg-lod == "light" and $bg-lod == "light" { - // Both are light colors, darken the fg - $step: -$step; - } @else if $fg-lod == "dark" and $bg-lod == "light" { - // bg is light, fg is dark but does not pass, darken more - $step: -$step; - } - // Keeping the rest of the logic here, but our default values do not change, so this logic is not needed - //@else if $fg-lod == 'light' and $bg-lod == 'dark' { - // // bg is dark, fg is light but does not pass, lighten further - // $step: $step; - //} @else if $fg-lod == 'dark' and $bg-lod == 'dark' { - // // Both are dark, so lighten the fg - // $step: $step; - //} - - // The magic happens here - // Loop through with a @while statement until the color combination passes our required ratio. Scale the color by our step value until the expression is false - // This might loop 100 times or more depending on the colors - @while contrast-ratio($fg, $bg) < $ratio { - $sat-step: 0%; - @if saturation($fg) > 10 { - $sat-step: $step; - } - $fg: scale-color($fg, $lightness: $step, $saturation: $sat-step); - } - @return $fg; - } -} diff --git a/resources/sass/bo/vendor/_glightbox.scss b/resources/sass/bo/vendor/_glightbox.scss deleted file mode 100644 index 0504b34..0000000 --- a/resources/sass/bo/vendor/_glightbox.scss +++ /dev/null @@ -1 +0,0 @@ -@import "~/glightbox/dist/css/glightbox.css"; diff --git a/resources/sass/common.scss b/resources/sass/common.scss new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/resources/sass/common.scss @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/resources/sass/front/app.scss b/resources/sass/front/app.scss new file mode 100644 index 0000000..5fd50ea --- /dev/null +++ b/resources/sass/front/app.scss @@ -0,0 +1,20 @@ +// * COMMON CSS. +@use './../common'; + +body { + height: 100vh; + padding: 1.5rem; + margin: 0; + background-color: #f3f4f6; + + > div { + display: flex; + height: 100%; + flex-direction: column; + align-items: center; + justify-content: center; + border-radius: 0.5rem; + background-color: #fff; + box-shadow: 0 1px 2px 0 #0000000d; + } +} diff --git a/resources/ts/app.tsx b/resources/ts/app.tsx new file mode 100644 index 0000000..481904a --- /dev/null +++ b/resources/ts/app.tsx @@ -0,0 +1,29 @@ +import { createInertiaApp } from "@inertiajs/react"; +import { resolvePageComponent } from "laravel-vite-plugin/inertia-helpers"; +import { createRoot } from "react-dom/client"; +import axios from "axios"; + +// @ts-expect-error Env is always present. +const appName = import.meta.env.VITE_APP_NAME || "Laravel"; + +createInertiaApp({ + title: (title) => `${title} - ${appName}`, + resolve: (name) => + resolvePageComponent( + `./${name}.tsx`, + // @ts-expect-error Glob error. + import.meta.glob("./*/Pages/**/*.tsx"), + ), + setup({ el, App, props }) { + const root = createRoot(el); + + // eslint-disable-next-line react/jsx-filename-extension, react/jsx-props-no-spreading + root.render(); + }, + progress: { + color: "#4B5563", + }, +}); + +window.axios = axios; +window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; diff --git a/resources/ts/back/Components/ApplicationLogo.tsx b/resources/ts/back/Components/ApplicationLogo.tsx new file mode 100644 index 0000000..ede39c3 --- /dev/null +++ b/resources/ts/back/Components/ApplicationLogo.tsx @@ -0,0 +1,49 @@ +// * Packages +import { Link } from "@inertiajs/react"; +import { route } from "ziggy-js"; +// * Other +import { useTheme } from "@/back/providers/ThemeProvider"; +import logoUwilCMSLight from "&/images/logos/uwil-cms-light.svg"; +import logoUwilCMSDark from "&/images/logos/uwil-cms-dark.svg"; +import logoTinyUwilCMS from "&/images/logos/uwil-cms-light-icon.svg"; + +type ApplicationLogoProps = { + forceLight?: boolean; + isCollapsed?: boolean; +}; + +/** + * Get the logo. + * + * @param isCollapsed boolean + * @param forceLight boolean + * @param theme string + * @return string + */ +function getLogo(isCollapsed: boolean, forceLight: boolean, theme: string) { + if (isCollapsed) return logoTinyUwilCMS; + if (forceLight || theme === "dark") return logoUwilCMSLight; + return logoUwilCMSDark; +} + +export default function ApplicationLogo({ + forceLight = false, + isCollapsed = false, +}: ApplicationLogoProps) { + const { theme } = useTheme(); + const wrapperClasses = isCollapsed ? "h-8" : "w-full max-w-[10rem] mx-auto"; + const logo = getLogo(isCollapsed, forceLight, theme); + + return ( + + UWIL CMS logo + + ); +} diff --git a/resources/ts/back/Components/BtnOptionnalLinkWithTooltip.tsx b/resources/ts/back/Components/BtnOptionnalLinkWithTooltip.tsx new file mode 100644 index 0000000..78f3265 --- /dev/null +++ b/resources/ts/back/Components/BtnOptionnalLinkWithTooltip.tsx @@ -0,0 +1,87 @@ +// * Packages +import { Link } from "@inertiajs/react"; +import { + ButtonHTMLAttributes, + CSSProperties, + MouseEventHandler, + ReactNode, +} from "react"; +import { VariantProps } from "class-variance-authority"; +// * Components shadcn +import { Button, buttonVariants } from "@/components/ui/button"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; + +type ButtonVariant = VariantProps["variant"]; +type ButtonSize = VariantProps["size"]; +type ButtonType = ButtonHTMLAttributes["type"]; + +type BtnOptionnalLinkWithTooltipProps = { + link?: string | null; + content: ReactNode; + tooltipContent: ReactNode; + className?: string; + type?: ButtonType; + size?: ButtonSize; + variant?: ButtonVariant; + externalLink?: boolean; + disabled?: boolean; + style?: CSSProperties; + onClick?: MouseEventHandler; +}; + +export default function BtnOptionnalLinkWithTooltip({ + link = null, + content, + tooltipContent, + className = "", + type = "button", + size = "icon", + variant = "default", + externalLink = false, + disabled = false, + style, + onClick, + ...props +}: BtnOptionnalLinkWithTooltipProps) { + let innerContent: ReactNode = content; + + if (link !== null) { + if (externalLink) { + innerContent = disabled ? ( + + ) : ( + + {content} + + ); + } else { + innerContent = {content}; + } + } + + return ( + + + + + {tooltipContent} + + ); +} diff --git a/resources/ts/back/Components/CustomSidebarTrigger.tsx b/resources/ts/back/Components/CustomSidebarTrigger.tsx new file mode 100644 index 0000000..b35e6e9 --- /dev/null +++ b/resources/ts/back/Components/CustomSidebarTrigger.tsx @@ -0,0 +1,43 @@ +// * Packages +import { PanelRightOpenIcon, PanelRightCloseIcon } from "lucide-react"; +// * Components shadcn +import { Button } from "@/components/ui/button"; +import { useSidebar } from "@/components/ui/sidebar"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; +// * Other +import useTrans from "@/hooks/use-translations"; + +export default function CustomSidebarTrigger() { + const { toggleSidebar, state } = useSidebar(); + + if (state === "collapsed") { + localStorage.setItem("vite-ui-collapsed", "true"); + } else { + localStorage.removeItem("vite-ui-collapsed"); + } + return ( + + + + + +

{useTrans("uwil-backend::back.sidebar_trigger_tooltip")}

+
+
+ ); +} diff --git a/resources/ts/back/Components/FieldsetWrapper.tsx b/resources/ts/back/Components/FieldsetWrapper.tsx new file mode 100644 index 0000000..94fd10c --- /dev/null +++ b/resources/ts/back/Components/FieldsetWrapper.tsx @@ -0,0 +1,54 @@ +// * Packages +import { ReactNode } from "react"; +// * Components shadcn +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +// * Other +import { cn } from "@/lib/utils"; + +export default function FieldsetWrapper({ + title, + icon, + description, + className, + inline, + children, +}: { + title: string; + icon: ReactNode; + description: string; + className?: string; + inline?: boolean; + children: ReactNode; +}) { + return ( + + + + {icon && icon} + {title} + + {description} + + + {children} + + + ); +} diff --git a/resources/ts/back/Components/Filters/EnumFilter.tsx b/resources/ts/back/Components/Filters/EnumFilter.tsx new file mode 100644 index 0000000..59f0bdf --- /dev/null +++ b/resources/ts/back/Components/Filters/EnumFilter.tsx @@ -0,0 +1,44 @@ +// * Packages +import { route } from "ziggy-js"; +// * Other +import EnumSelect from "@/back/Components/Inputs/EnumSelect"; +import { LaravelEnum } from "@/types/global"; +import addFilterToUrl from "@/back/lib/filters"; + +type Props = { + enums: LaravelEnum; + fieldName: string; + modelName: string; + label: string; + placeholder: string; +}; + +function EnumFilter(props: Props) { + const { enums, fieldName, modelName, label, placeholder } = props; + + const selectedEnumParam = Object.values(enums).find( + (status) => status.name === route().params.status, + ); + return ( + { + const selectedStatusName = Object.values(enums).find( + (enumValue) => enumValue.value === value, + )?.name; + const params = { + ...route().params, + [name]: selectedStatusName, + }; + addFilterToUrl({ modelName, params }); + }} + /> + ); +} + +export default EnumFilter; diff --git a/resources/ts/back/Components/Filters/MultiSelectRelationFilter.tsx b/resources/ts/back/Components/Filters/MultiSelectRelationFilter.tsx new file mode 100644 index 0000000..2da0781 --- /dev/null +++ b/resources/ts/back/Components/Filters/MultiSelectRelationFilter.tsx @@ -0,0 +1,58 @@ +// * Packages +import { route } from "ziggy-js"; +// * Other +import { ModelSelect } from "@/back/Components/Inputs/ModelSelect"; +import addFilterToUrl from "@/back/lib/filters"; + +type Props = { + fieldName: string; + modelName: string; + label: string; + placeholder: string; + /** Model target to display options */ + targetModel?: string; +}; + +function MultiSelectRelationFilter(props: Props) { + const { targetModel, fieldName, label, placeholder, modelName } = props; + + const valuesFromUrl: string[] = + typeof route().params[fieldName] === "string" + ? route().params[fieldName].split(",") + : []; + + return ( + { + const valuesArray = Array.isArray(value) ? value : [value]; + const params = { + ...route().params, + [name]: valuesArray.length ? valuesArray.join(",") : undefined, + }; + addFilterToUrl({ modelName, params }); + }} + defaultValue={valuesFromUrl} + responsive={{ + mobile: { + maxCount: 3, + }, + tablet: { + maxCount: 4, + }, + desktop: { + maxCount: 5, + }, + }} + /> + ); +} + +export default MultiSelectRelationFilter; diff --git a/resources/ts/back/Components/Filters/SwitchFilter.tsx b/resources/ts/back/Components/Filters/SwitchFilter.tsx new file mode 100644 index 0000000..ab48a14 --- /dev/null +++ b/resources/ts/back/Components/Filters/SwitchFilter.tsx @@ -0,0 +1,33 @@ +// * Packages +import { route } from "ziggy-js"; +// * Other +import SimpleSwitch from "@/back/Components/Inputs/SimpleSwitch"; +import addFilterToUrl from "@/back/lib/filters"; + +type Props = { + fieldName: string; + modelName: string; + label: string; +}; + +function SwitchFilter(props: Props) { + const { label, fieldName, modelName } = props; + return ( + { + const params = { + ...route().params, + [name]: value, + }; + addFilterToUrl({ modelName, params }); + }} + /> + ); +} + +export default SwitchFilter; diff --git a/resources/ts/back/Components/FiltersWrapper.tsx b/resources/ts/back/Components/FiltersWrapper.tsx new file mode 100644 index 0000000..984c38f --- /dev/null +++ b/resources/ts/back/Components/FiltersWrapper.tsx @@ -0,0 +1,58 @@ +// * Packages +import { Filter } from "lucide-react"; +import { ReactNode } from "react"; +// * Components shadcn +import { + Sheet, + SheetContent, + SheetDescription, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "@/components/ui/sheet"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; + +function FiltersWrapper({ children }: { children: ReactNode }) { + return ( +
+
+ + + } + tooltipContent={ +

+ {str( + useTrans("uwil-backend::back.model_filters.button_tooltip"), + ) + .ucFirst() + .value()} +

+ } + type="button" + size="icon" + variant="outline" + /> +
+ + + + {str(useTrans("uwil-backend::back.model_filters.sheet_title")) + .ucFirst() + .value()} + + + +
{children}
+
+
+
+
+
+ ); +} + +export default FiltersWrapper; diff --git a/resources/ts/back/Components/GoToFrontView.tsx b/resources/ts/back/Components/GoToFrontView.tsx new file mode 100644 index 0000000..baff1a4 --- /dev/null +++ b/resources/ts/back/Components/GoToFrontView.tsx @@ -0,0 +1,106 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { ExternalLinkIcon } from "lucide-react"; +// * Components shadcn +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; +// * Other +import { AppEnv } from "@/types/global"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import { cn, GetTranslation } from "@/lib/utils"; + +interface GoToFrontViewProps { + /** Model Name used to translate the helper */ + modelName: string; + + /** Field data to build path */ + pathField: string; + + /** Additionnal segment used in the url */ + additionalGroupPath?: string | null; + + /** Does the actual page status available in front */ + isAvailable?: boolean; + + /** Set visually in column */ + isColumn?: boolean; +} + +export default function GoToFrontView({ + modelName, + pathField, + additionalGroupPath = null, + isAvailable = false, + isColumn = false, +}: GoToFrontViewProps) { + const { url } = usePage().props.appEnv as AppEnv; + + const anchorAccessPage = useTrans("uwil-backend::back.access_model", { + params: { + model: modelName, + }, + }); + + const cleanUrl = url.endsWith("/") ? url.slice(0, -1) : url; + + const definitivePath = [cleanUrl, additionalGroupPath, pathField] + .filter(Boolean) + .join("/"); + + return ( + + {isAvailable ? ( + <> + {str( + GetTranslation("uwil-backend::back.access_to_front_page", { + params: { + model: modelName, + }, + }), + ) + .ucFirst() + .value()} + + + +

{definitivePath}

+ +
+
+ {anchorAccessPage} +
+ + ) : ( + <> + {str( + GetTranslation( + "uwil-backend::back.access_to_front_page_when_published", + { + params: { + model: modelName, + }, + }, + ), + ) + .ucFirst() + .value()} + :{definitivePath} + + )} +
+ ); +} diff --git a/resources/ts/back/Components/InputError.tsx b/resources/ts/back/Components/InputError.tsx new file mode 100644 index 0000000..8a2616d --- /dev/null +++ b/resources/ts/back/Components/InputError.tsx @@ -0,0 +1,41 @@ +// * Packages +import { AlertCircleIcon } from "lucide-react"; +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; +// * Other +import useTrans from "@/hooks/use-translations"; +import { cn } from "@/lib/utils"; + +export default function InputError({ + all, + message, +}: { + all?: boolean; + message?: string; +}) { + const { errors } = usePage().props; + const errorsTrans = useTrans("uwil-backend::back.errors"); + let messages = {} as Array; + if (message) { + messages = Object.values([message]); + } else if (Object.values(errors).length && all) { + messages = Object.values(errors); + } + if (messages.length) { + return ( + + + {all && {errorsTrans}} + + {messages.map((errorMessage) => { + return

{errorMessage}

; + })} +
+
+ ); + } +} diff --git a/resources/ts/back/Components/Inputs/CompleteInputFile.tsx b/resources/ts/back/Components/Inputs/CompleteInputFile.tsx new file mode 100644 index 0000000..20be367 --- /dev/null +++ b/resources/ts/back/Components/Inputs/CompleteInputFile.tsx @@ -0,0 +1,423 @@ +// * Packages +import { ReactNode, useCallback, useEffect, useState } from "react"; +import { FileCheck, RefreshCwIcon, Trash, UploadIcon } from "lucide-react"; +import { ErrorCode, FileWithPath, useDropzone } from "react-dropzone"; +import "react-image-crop/dist/ReactCrop.css"; +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Label } from "@/components/ui/label"; +import { Button } from "@/components/ui/button"; +// * Other +import InputError from "@/back/Components/InputError"; +import ImageCropper from "@/back/Components/Inputs/ImageCropper"; +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import { useToast } from "@/hooks/use-toast"; +import { AppEnv } from "@/types/global"; +import { cn, GetTranslation } from "@/lib/utils"; + +type FileWithPreview = FileWithPath & { + preview: string; +}; + +type FileValidation = { + validationRules?: { + width: string | null; + height: string | null; + } | null; + maxFileSize: string | null; + allowedFormats: string | null; + inputType?: "image" | "file"; +}; + +/* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */ +type CompleteInputFileProps = FileValidation & { + name: string; + value?: string | File | null; + /** Original data is the data directly from the model, not in the form state */ + originalData?: string | undefined; + /** Add custom event when refresh to the originalData */ + onRefreshFile?: () => void; + label?: ReactNode | string; + required?: boolean; + fileName?: string; + hasRefreshBtn?: boolean; + parentErrors?: Record | null; + setData: (name: string, value: File | string | null) => void; + reset: (name?: string) => void; + hasFile?: (hasFile: boolean) => void; +}; +/* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */ + +export default function CompleteInputFile(props: CompleteInputFileProps) { + const { + value, + setData, + originalData, + name = "defaultName", + onRefreshFile, + label = "defaultLabel", + required = false, + maxFileSize, + validationRules, + allowedFormats, + reset, + inputType = "image", + fileName = "image", + hasRefreshBtn = true, + hasFile, + parentErrors, + } = props; + const { toast } = useToast(); + const { errors } = usePage().props; + const { url } = usePage().props.appEnv as AppEnv; + const [isReset, setIsReset] = useState(false); + const [isDialogOpen, setDialogOpen] = useState(false); + const [accept, setAccept] = useState>>({ + "image/*": [], + }); + const [extensions, setExtensions] = useState(); + + const finalFileName = `${fileName}.png`; + const isRefreshDisabled = value != null && typeof value === "string"; + const localErrors = parentErrors ?? errors; + + const localValidationRules = { + width: validationRules?.width ? parseInt(validationRules.width, 10) : 250, + height: validationRules?.height + ? parseInt(validationRules?.height, 10) + : 250, + }; + + const localMaxFileSize = maxFileSize + ? parseInt(maxFileSize, 10) * 1024 + : 50000; + + /** + * Get the fileName from the path given by the database value + * @param path string|null + * @return string|null + */ + const getFileNameFromPath = (path?: string | null): string | null => { + if (!path || typeof path !== "string") return null; + const cleanPath = path.replace(/\/+$/, ""); + const segments = cleanPath.split("/"); + const last = segments[segments.length - 1] || ""; + return last || null; + }; + + const transValueIntoFile = (localData: string | undefined | null) => { + if (localData) { + const currentFileName = getFileNameFromPath(localData); + return { + preview: `${url}/${localData}`, + name: currentFileName ?? "", + } as FileWithPreview; + } + return null; + }; + + const [selectedFile, setSelectedFile] = useState( + () => { + // When there is an image selected but not stored yet. + if (value instanceof File) { + return Object.assign(value, { + preview: URL.createObjectURL(value), + }); + } + + // When there is already an image stored. + return transValueIntoFile(value); + }, + ); + + // Fonction utilitaire pour formater la taille de fichier + const formatFileSize = (bytes: number): string => { + if (bytes === 0) return "0 Bytes"; + const k = 1024; + const sizes = ["Bytes", "KB", "MB", "GB"]; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + const currentSize = sizes[i]; + const currentBytes = parseFloat((bytes / k ** i).toFixed(2)); + return `${currentBytes} ${currentSize}`; + }; + + // Translations + const transSelectImgZone = useTrans( + inputType === "file" + ? "uwil-backend::back.image_cropper.select_file_zone" + : "uwil-backend::back.image_cropper.select_img_zone", + ); + const transValidationAllFormats = str( + useTrans("uwil-backend::back.image_cropper.validation.all_formats"), + ) + .ucFirst() + .value(); + const transCropperFileUploaded = useTrans( + "uwil-backend::back.image_cropper.state_file_uploaded", + ); + const transCancel = useTrans("uwil-backend::back.cancel"); + const transRulesWeight = useTrans( + "uwil-backend::back.image_cropper.validation.rules_weight", + { + params: { + size: formatFileSize(localMaxFileSize).toString(), + }, + }, + ); + const transRefresh = useTrans( + "uwil-backend::back.image_cropper.refresh_original", + ); + const getTransValidationAllowedFormats = (targetExtensions: string) => { + return str( + GetTranslation( + "uwil-backend::back.image_cropper.validation.allowed_formats", + { + params: { + formats: targetExtensions, + }, + }, + ), + ) + .ucFirst() + .value(); + }; + + const buildDropzoneAccept = (): Record => { + if (!allowedFormats) return {}; + + const currentExtensions = allowedFormats.split(","); + setExtensions(allowedFormats); + const mimeMap: Record = { + jpg: "image/jpeg", + jpeg: "image/jpeg", + png: "image/png", + gif: "image/gif", + pdf: "application/pdf", + svg: "image/svg+xml", + webp: "image/webp", + }; + + const result: Record> = {}; + + currentExtensions.forEach((ext) => { + const cleanExt = ext.trim().toLowerCase(); + const mime = mimeMap[cleanExt]; + if (mime) { + if (!result[mime]) { + result[mime] = new Set(); + } + result[mime].add(`.${cleanExt}`); + } + }); + + // Convert Set to Array for React Dropzone + const currentAccept: Record = {}; + Object.entries(result).forEach(([mime, extSet]) => { + currentAccept[mime] = Array.from(extSet); + }); + setAccept(currentAccept); + return currentAccept; + }; + + useEffect(() => { + buildDropzoneAccept(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + hasFile?.(!!selectedFile); + }, [selectedFile, hasFile]); + + // This error message for the useDropZone can not be used directly in the hook because or react hook error, + // they have to be used as they actually are. + const dropErrorMessages = { + noFile: str(useTrans("uwil-backend::back.image_cropper.toast.no_file")) + .ucFirst() + .value(), + tooLarge: str( + useTrans("uwil-backend::back.image_cropper.toast.too_big", { + params: { + maxSize: formatFileSize(localMaxFileSize), + }, + }), + ) + .ucFirst() + .value(), + forbidden: str( + useTrans("uwil-backend::back.image_cropper.toast.forbidden_file"), + ) + .ucFirst() + .value(), + tooMany: str(useTrans("uwil-backend::back.image_cropper.toast.too_many")) + .ucFirst() + .value(), + default: str( + useTrans("uwil-backend::back.image_cropper.toast.defaultError"), + ) + .ucFirst() + .value(), + }; + + const onDrop = useCallback( + (acceptedFiles: FileWithPath[]) => { + const file = acceptedFiles[0]; + if (!file) { + toast({ + title: "Oups !", + description: dropErrorMessages.noFile, + }); + return; + } + const fileWithPreview = Object.assign(file, { + preview: URL.createObjectURL(file), + }); + + setSelectedFile(fileWithPreview); + if (inputType === "file") { + setData(name, file); + } + setDialogOpen(true); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [maxFileSize, formatFileSize], + ); + + const { getRootProps, getInputProps } = useDropzone({ + onDrop, + accept, + multiple: false, + maxSize: localMaxFileSize, + onDropRejected: (fileRejections) => { + const rejection = fileRejections[0]; + const rejectionCode = rejection?.errors?.[0]?.code; + if (rejectionCode === ErrorCode.FileTooLarge) { + toast({ + title: "Oups !", + description: `${dropErrorMessages.tooLarge} (${formatFileSize(rejection.file.size)}).`, + }); + } else if (rejectionCode === ErrorCode.FileInvalidType) { + toast({ + title: "Oups !", + description: dropErrorMessages.forbidden, + }); + } else if (rejectionCode === ErrorCode.TooManyFiles) { + toast({ + title: "Oups !", + description: dropErrorMessages.tooMany, + }); + } else { + toast({ + title: "Oups !", + description: dropErrorMessages.default, + }); + } + }, + }); + + return ( +
+
+
+ + {selectedFile ? ( +
+ {inputType === "image" && ( + + )} + {inputType === "file" && ( +
+
+ +

+ {str(transCropperFileUploaded).ucFirst().value()} +

+ {selectedFile.name} +
+
+ )} + } + onClick={() => { + setSelectedFile(null); + setData(name, null); + }} + tooltipContent={str(transCancel).ucFirst().value()} + /> +
+ ) : ( + + )} +
+ + {hasRefreshBtn && originalData && ( + { + setData(name, originalData); + setSelectedFile(transValueIntoFile(originalData)); + if (onRefreshFile) { + onRefreshFile(); + } + }} + content={} + tooltipContent={str(transRefresh).ucFirst().value()} + /> + )} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/EnumSelect.tsx b/resources/ts/back/Components/Inputs/EnumSelect.tsx new file mode 100644 index 0000000..3232607 --- /dev/null +++ b/resources/ts/back/Components/Inputs/EnumSelect.tsx @@ -0,0 +1,243 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { useEffect, useState } from "react"; +import { CheckIcon, ChevronsUpDownIcon, SearchIcon, XIcon } from "lucide-react"; +// * Components shadcn +import { Label } from "@/components/ui/label"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { Input } from "@/components/ui/input"; +import { Button } from "@/components/ui/button"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import InputError from "@/back/Components/InputError"; +import { AppEnv } from "@/types/global"; +import { cn } from "@/lib/utils"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; + +type EnumSelectProps = { + name: string; + label: string; + options?: Record; + placeholder?: string; + exclude?: number[]; + selected?: number | null; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: number | null) => void; + // eslint-disable-next-line no-unused-vars + onSelectValue?: (value: number | null) => void; +}; + +export default function EnumSelect({ + name, + label, + options = {}, + placeholder = "ex: John Doe", + exclude = [], + selected = null, + required = true, + disabled = false, + parentErrors = null, + setData, + onSelectValue, +}: EnumSelectProps) { + const { locale } = usePage().props.appEnv as AppEnv; + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + // List of options. + const initalOptions = Object.fromEntries( + Object.entries(options).filter(([, item]) => !exclude.includes(item.value)), + ); + const [currentOptions, setCurrentOptions] = + useState>( + initalOptions, + ); + + // Model key selected. + const initial = + selected === 0 || selected === null || selected === undefined + ? null + : Number(selected); + const [selectedEnum, setSelectedEnum] = useState(initial); + + // String research in models collection. + const [search, setSearch] = useState(""); + + // Component states. + const [open, setOpen] = useState(false); + + const transNoResults = useTrans("uwil-backend::back.table_no_results"); + const transDelete = useTrans("uwil-backend::crud.actions.delete"); + + /** + * Get the identification field of specific option. + * @param value number + * @return string + */ + const getEnumLabel = (value: number): string => { + const targetEnum = Object.values(initalOptions).find( + (option) => option.value === value, + ); + if (!targetEnum) return String(value); + if (typeof value === "object") + return String( + targetEnum.label[locale as keyof typeof targetEnum.label] ?? "", + ); + return targetEnum.label; + }; + + /** + * Updates when selecting new value. + * @param value number + * @return void + */ + const handleSelect = (value: number) => { + setSelectedEnum(value); + setData(name, value); + onSelectValue?.(value); + setOpen(false); + }; + + /** + * Updates when clear the selected value. + * @return void + */ + const handleClear = () => { + setSelectedEnum(null); + setData(name, null); + onSelectValue?.(null); + }; + + /** + * Reset the search. + * @return void + */ + const handleClearSearch = () => { + setSearch(""); + }; + + // Fetch with debounce. + useEffect(() => { + // Reset options list if empty search or null + if (search.length === 0) { + setCurrentOptions(initalOptions); + return; + } + + const optionsFiltered = Object.fromEntries( + Object.entries(initalOptions).filter(([, item]) => + item.label.toLowerCase().includes(search), + ), + ); + + // Get updated options list with search. + setCurrentOptions(optionsFiltered); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [search, options]); + + return ( +
+ +
+ + + + + +
+
+ +
+ setSearch(e.target.value)} + className="w-[calc(100%-2.5rem-40px)] border-0 mx-9" + /> + } + tooltipContent={ +

+ {str(useTrans("uwil-backend::crud.actions.delete")) + .ucFirst() + .value()} +

+ } + type="button" + variant="ghost" + size="icon" + className="absolute top-1/2 right-0 transform -translate-y-1/2 text-muted-foreground" + onClick={handleClearSearch} + disabled={search.length < 1 || disabled} + /> +
+
5 ? "h-[225px]" : "h-auto"}`, + )} + > + {Object.values(currentOptions).length === 0 && ( +

+ {transNoResults} +

+ )} +
+ {Object.values(currentOptions).map((option) => ( + + ))} +
+
+
+
+ {!required && selectedEnum !== null && ( + } + tooltipContent={

{str(transDelete).ucFirst().value()}

} + type="button" + variant="destructive" + size="icon" + onClick={handleClear} + /> + )} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/ImageCropper.tsx b/resources/ts/back/Components/Inputs/ImageCropper.tsx new file mode 100644 index 0000000..4afa24b --- /dev/null +++ b/resources/ts/back/Components/Inputs/ImageCropper.tsx @@ -0,0 +1,1005 @@ +// * Packages +import { + Dispatch, + MouseEvent, + SetStateAction, + useEffect, + useRef, + useState, + type SyntheticEvent, +} from "react"; +import { + ChevronDownIcon, + CropIcon, + FlipHorizontalIcon, + FlipVerticalIcon, + RotateCcwIcon, + RotateCwIcon, + Trash2Icon, + Upload, + ZoomInIcon, + ZoomOutIcon, + RefreshCwIcon, +} from "lucide-react"; +import { usePage } from "@inertiajs/react"; +import ReactCrop, { type Crop, type PixelCrop } from "react-image-crop"; +import { FileWithPath } from "react-dropzone"; +import "react-image-crop/dist/ReactCrop.css"; +import { route } from "ziggy-js"; +// * Components shadcn +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "@/components/ui/collapsible"; +import { Slider } from "@/components/ui/slider"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; +// * Other +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import useDeviceType from "@/hooks/use-device-type"; +import { cn, GetTranslation } from "@/lib/utils"; + +interface CropValidationRules { + width: number; + height: number; +} + +type FileWithPreview = FileWithPath & { + preview: string; +}; + +/* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */ +interface ImageCropperProps { + dialogOpen: boolean; + name: string; + value?: string | File | null; + selectedFile: FileWithPreview | null; + validationRules: CropValidationRules; + isReset: boolean; + url: string; + finalFileName: string; + setData: (name: string, value: File | string | null) => void; + setDialogOpen: Dispatch>; + reset: (name?: string) => void; + setIsReset: (value: boolean) => void; +} +/* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */ + +export default function ImageCropper({ + dialogOpen, + setDialogOpen, + selectedFile, + validationRules, + setData, + name, + value, + reset, + setIsReset, + isReset, + url, + finalFileName, +}: ImageCropperProps) { + const { errors } = usePage().props; + + const aspect = 1; + const { isDesktop } = useDeviceType(); + const imgRef = useRef(null); + + const isDuplicating = route().current("uwil-backend::back.*.duplicate"); + + // Zone of the crop in %. + const [cropZone, setCropZone] = useState(); + const [croppedImage, setCroppedImage] = useState(""); + const [rotation, setRotation] = useState(0); + const [flipX, setFlipX] = useState(false); + const [flipY, setFlipY] = useState(false); + const [zoom, setZoom] = useState(0); + const [scaleFactor, setScaleFactor] = useState(1); + const [imagePosition, setImagePosition] = useState({ x: 0, y: 0 }); + const [isDragging, setIsDragging] = useState(false); + const [dragStart, setDragStart] = useState({ x: 0, y: 0 }); + const [originalDimensions, setOriginalDimensions] = useState({ + width: 0, + height: 0, + }); + + // États pour les filtres + const [brightness, setBrightness] = useState(100); + const [contrast, setContrast] = useState(100); + const [saturation, setSaturation] = useState(100); + const [sepia, setSepia] = useState(0); + const [grayscale, setGrayscale] = useState(0); + const [filtersOpen, setFiltersOpen] = useState(false); + + const maxContainerHeight = isDesktop ? 550 : 350; + const maxContainerWidth = isDesktop ? 900 : 450; + + /** + * Generate imge from canvas with all crop options. + * @param image HTMLImageElement Ref. of the image tag. + * @param cropLocalization Crop localization in the image. + * @return string + */ + function getCroppedImg(image: HTMLImageElement, crop: PixelCrop): string { + const canvas = document.createElement("canvas"); + canvas.width = validationRules.width; + canvas.height = validationRules.height; + const ctx = canvas.getContext("2d")!; + + // Calculer le ratio entre l'affichage et les dimensions originales + const displayScale = scaleFactor * (1 + zoom); + + // Position de l'image affichée avec zoom + const displayedWidth = originalDimensions.width * displayScale; + const displayedHeight = originalDimensions.height * displayScale; + const offsetX = + imagePosition.x - + (displayedWidth - originalDimensions.width * scaleFactor) / 2; + const offsetY = + imagePosition.y - + (displayedHeight - originalDimensions.height * scaleFactor) / 2; + + // Centre de l'image dans le container d'affichage + const imageCenterX = offsetX + displayedWidth / 2; + const imageCenterY = offsetY + displayedHeight / 2; + + // Centre du crop dans le container d'affichage + const cropCenterX = crop.x + crop.width / 2; + const cropCenterY = crop.y + crop.height / 2; + + // Distance du centre du crop au centre de l'image (en pixels d'affichage) + const deltaX = cropCenterX - imageCenterX; + const deltaY = cropCenterY - imageCenterY; + + // Taille du canvas temporaire basée sur la résolution originale de la zone croppée + // On limite toutefois pour éviter des canvas trop grands (max 4x la taille finale) + const tmpWidth = Math.ceil(crop.width / displayScale); + const tmpHeight = Math.ceil(crop.height / displayScale); + + // Créer un canvas temporaire à haute résolution + const tmpCanvas = document.createElement("canvas"); + tmpCanvas.width = tmpWidth; + tmpCanvas.height = tmpHeight; + const tmpCtx = tmpCanvas.getContext("2d")!; + + tmpCtx.save(); + + // Appliquer les filtres + tmpCtx.filter = `brightness(${brightness}%) contrast(${contrast}%) saturate(${saturation}%) sepia(${sepia}%) grayscale(${grayscale}%)`; + + // Translater au centre du canvas temporaire + tmpCtx.translate(tmpWidth / 2, tmpHeight / 2); + + // Appliquer rotation et flip + tmpCtx.rotate((rotation * Math.PI) / 180); + tmpCtx.scale(flipX ? -1 : 1, flipY ? -1 : 1); + + // Calculer où dessiner l'image pour que la zone croppée soit centrée + // deltaX/deltaY sont en pixels d'affichage, on les convertit en pixels originaux + const originalDeltaX = deltaX / displayScale; + const originalDeltaY = deltaY / displayScale; + + // Dessiner l'image originale à sa pleine résolution + tmpCtx.drawImage( + image, + -originalDimensions.width / 2 - originalDeltaX, + -originalDimensions.height / 2 - originalDeltaY, + originalDimensions.width, + originalDimensions.height, + ); + + tmpCtx.restore(); + + // Redimensionner vers la taille finale en une seule opération + ctx.drawImage( + tmpCanvas, + 0, + 0, + tmpWidth, + tmpHeight, + 0, + 0, + canvas.width, + canvas.height, + ); + + return canvas.toDataURL("image/png"); + } + + /** + * Generate base64 from an url. + * @param targetUrl string + * @param callback (base64: string | ArrayBuffer | null) => void + * @param errorCallback (error: string) => void + */ + function urlToBase64( + targetUrl: string, + // eslint-disable-next-line no-unused-vars + callback: (base64: string | ArrayBuffer | null) => void, + // eslint-disable-next-line no-unused-vars + errorCallback?: (error: string) => void, + ): void { + fetch(targetUrl) + .then((response) => response.blob()) + .then((blob) => { + const reader = new FileReader(); + + reader.onloadend = () => callback(reader.result); + reader.readAsDataURL(blob); + }) + .catch((error) => { + if (errorCallback) errorCallback(error); + }); + } + + /** + * Generate file from the base64. + * @param dataUrl base64 string + * @param filename name of your file + * @return File + */ + function base64ToFile(dataUrl: string): File { + const [meta, base64] = dataUrl.split(","); + const mimeMatch = meta.match(/:(.*?);/); + const mime = mimeMatch ? mimeMatch[1] : "image/png"; + const decodedBase64 = atob(base64); + const { length } = decodedBase64; + const u8arr = new Uint8Array(length); + + for (let i = 0; i < length; i += 1) { + u8arr[i] = decodedBase64.charCodeAt(i); + } + + return new File([u8arr], finalFileName, { type: mime }); + } + + // Fonctions de gestion du drag + function handleMouseDown(e: MouseEvent) { + setIsDragging(true); + setDragStart({ + x: e.clientX - imagePosition.x, + y: e.clientY - imagePosition.y, + }); + } + + function handleMouseMove(e: MouseEvent) { + if (!isDragging) return; + + setImagePosition({ + x: e.clientX - dragStart.x, + y: e.clientY - dragStart.y, + }); + } + + function handleMouseUp() { + setIsDragging(false); + } + + // Reset de la position et dimensions quand l'image change + useEffect(() => { + setImagePosition({ x: 0, y: 0 }); + setOriginalDimensions({ width: 0, height: 0 }); + }, [selectedFile]); + + useEffect(() => { + if (!value || !isDuplicating) return; + const pathFileBase = `${url}/${value}`; + urlToBase64( + pathFileBase, + (base64) => { + if (typeof base64 === "string") { + const file = base64ToFile(base64); + setData(name, file); + } + }, + (err) => console.error(err), + ); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + /** + * Crop the image with all options. + * @return Promise + */ + async function onCrop(): Promise { + try { + if (imgRef.current && cropZone) { + // Recalculer les coordonnées en pixels à partir de cropZone actuel + // cropZone est en % par rapport au container de ReactCrop + const cropX = (cropZone.x / 100) * maxContainerWidth; + const cropY = (cropZone.y / 100) * maxContainerHeight; + const cropWidth = (cropZone.width / 100) * maxContainerWidth; + const cropHeight = (cropZone.height / 100) * maxContainerHeight; + + // Créer l'objet cropLocalization mis à jour + const currentCropLocalization: PixelCrop = { + unit: "px", + x: cropX, + y: cropY, + width: cropWidth, + height: cropHeight, + }; + + const finalImage = getCroppedImg( + imgRef.current, + currentCropLocalization, + ); + setCroppedImage(finalImage); + const file = base64ToFile(finalImage); + if (!isReset) { + setData(name, file); + } else { + reset(name); + } + setDialogOpen(false); + } + } catch (error: Error | unknown) { + throw new Error(`Something went wrong : ${error}`); + } + } + + /** + * Set the crop zone. + * @param width number + * @param height number + * @param currentScaleFactor number + */ + function placeCropZone( + width: number, + height: number, + currentScaleFactor: number, + ): void { + const displayedWidth = width * currentScaleFactor; + const displayedHeight = height * currentScaleFactor; + + // Calculer l'offset pour centrer l'image dans le container + const centerOffsetX = (maxContainerWidth - displayedWidth) / 2; + const centerOffsetY = (maxContainerHeight - displayedHeight) / 2; + + // Initialiser la position centrée (seulement si imagePosition est à 0,0) + if (imagePosition.x === 0 && imagePosition.y === 0) { + setImagePosition({ x: centerOffsetX, y: centerOffsetY }); + } + + // Zone de crop simple : garder les dimensions d'origine, réduire seulement si ça dépasse le container + let finalCropWidth = validationRules.width; + let finalCropHeight = validationRules.height; + + // Si la zone dépasse le container, la réduire proportionnellement + if ( + finalCropWidth > maxContainerWidth * 0.9 || + finalCropHeight > maxContainerHeight * 0.9 + ) { + const containerWidthRatio = (maxContainerWidth * 0.9) / finalCropWidth; + const containerHeightRatio = (maxContainerHeight * 0.9) / finalCropHeight; + const reductionRatio = Math.min( + containerWidthRatio, + containerHeightRatio, + ); + + finalCropWidth = validationRules.width * reductionRatio; + finalCropHeight = validationRules.height * reductionRatio; + } + + // Convertir en pourcentage par rapport au CONTAINER (pas à l'image) + const cropWidthPercent = (finalCropWidth / maxContainerWidth) * 100; + const cropHeightPercent = (finalCropHeight / maxContainerHeight) * 100; + + setCropZone( + cropZone ?? { + unit: "%", + width: cropWidthPercent, + height: cropHeightPercent, + x: (100 - cropWidthPercent) / 2, // Centrer horizontalement + y: (100 - cropHeightPercent) / 2, // Centrer verticalement + }, + ); + } + + /** + * Load image when open the dialog. + * @param e SyntheticEvent + * @return void + */ + function onImageLoad(e: SyntheticEvent): void { + const { naturalWidth: width, naturalHeight: height } = e.currentTarget; + + // STOCKER les dimensions naturelles originales + setOriginalDimensions({ width, height }); + + // Calculer le facteur d'échelle pour l'image + const imageWidthRatio = maxContainerWidth / width; + const imageHeightRatio = maxContainerHeight / height; + const imageScaleFactor = Math.min(imageWidthRatio, imageHeightRatio, 1); // Ne pas agrandir l'image + + setScaleFactor(imageScaleFactor); + placeCropZone(width, height, imageScaleFactor); + } + + /** + * Reset function to return to initial state. + * @return void + */ + function resetToInitialState(): void { + // Options reset. + setRotation(0); + setFlipX(false); + setFlipY(false); + setZoom(0); + setBrightness(100); + setContrast(100); + setSaturation(100); + setSepia(0); + setGrayscale(0); + if (value) setIsReset(true); + + // Recalculer et forcer le centrage de l'image ET de la zone de crop + if (imgRef.current && originalDimensions.width > 0) { + const displayedWidth = originalDimensions.width * scaleFactor; + const displayedHeight = originalDimensions.height * scaleFactor; + + // Calculer l'offset pour centrer l'image dans le container + const centerOffsetX = (maxContainerWidth - displayedWidth) / 2; + const centerOffsetY = (maxContainerHeight - displayedHeight) / 2; + + // Forcer la position centrée + setImagePosition({ x: centerOffsetX, y: centerOffsetY }); + + // IMPORTANT: Recalculer la zone de crop centrée + let finalCropWidth = validationRules.width; + let finalCropHeight = validationRules.height; + + // Si la zone dépasse le container, la réduire proportionnellement + if ( + finalCropWidth > maxContainerWidth * 0.9 || + finalCropHeight > maxContainerHeight * 0.9 + ) { + const containerWidthRatio = (maxContainerWidth * 0.9) / finalCropWidth; + const containerHeightRatio = + (maxContainerHeight * 0.9) / finalCropHeight; + const reductionRatio = Math.min( + containerWidthRatio, + containerHeightRatio, + ); + + finalCropWidth = validationRules.width * reductionRatio; + finalCropHeight = validationRules.height * reductionRatio; + } + + // Convertir en pourcentage et centrer + const cropWidthPercent = (finalCropWidth / maxContainerWidth) * 100; + const cropHeightPercent = (finalCropHeight / maxContainerHeight) * 100; + + setCropZone({ + unit: "%", + width: cropWidthPercent, + height: cropHeightPercent, + x: (100 - cropWidthPercent) / 2, // Centrer horizontalement + y: (100 - cropHeightPercent) / 2, // Centrer verticalement + }); + } else { + // Si pas d'image, remettre à 0,0 + setImagePosition({ x: 0, y: 0 }); + } + } + + // Translations. + const transBrightness = str( + useTrans("uwil-backend::back.image_cropper.filters.brightness"), + ) + .ucFirst() + .value(); + const transContrast = str( + useTrans("uwil-backend::back.image_cropper.filters.contrast"), + ) + .ucFirst() + .value(); + const transSaturation = str( + useTrans("uwil-backend::back.image_cropper.filters.saturation"), + ) + .ucFirst() + .value(); + const transSepia = str( + useTrans("uwil-backend::back.image_cropper.filters.sepia"), + ) + .ucFirst() + .value(); + const transGrayscale = str( + useTrans("uwil-backend::back.image_cropper.filters.grayscale"), + ) + .ucFirst() + .value(); + const transRotation = str( + useTrans("uwil-backend::back.image_cropper.filters.rotation"), + ) + .ucFirst() + .value(); + const transZoom = str( + useTrans("uwil-backend::back.image_cropper.filters.zoom"), + ) + .ucFirst() + .value(); + + // Filters (brightness, contrast, saturation, sepia, grayscale). + const imageFilterOptions = [ + { + label: () => `${transBrightness}: ${brightness}%`, + tooltip: "brightness", + slider: { + min: 0, + max: 200, + step: 1, + value: [brightness], + onValueChange: (e: number[]) => { + setIsReset(false); + setBrightness(parseInt(e[0].toString(), 10)); + }, + }, + }, + { + label: () => `${transContrast}: ${contrast}%`, + tooltip: "contrast", + slider: { + min: 0, + max: 200, + step: 1, + value: [contrast], + onValueChange: (e: number[]) => { + setContrast(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + }, + { + label: () => `${transSaturation}: ${saturation}%`, + tooltip: "saturation", + slider: { + min: 0, + max: 200, + step: 1, + value: [saturation], + onValueChange: (e: number[]) => { + setSaturation(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + }, + { + label: () => `${transSepia}: ${sepia}%`, + tooltip: "sepia", + slider: { + min: 0, + max: 100, + step: 1, + value: [sepia], + onValueChange: (e: number[]) => { + setSepia(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + }, + { + label: () => `${transGrayscale}: ${grayscale}%`, + tooltip: "grayscale", + slider: { + min: 0, + max: 100, + step: 1, + value: [grayscale], + onValueChange: (e: number[]) => { + setGrayscale(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + }, + ]; + + // Main options (rotation, zoom). + const mainOptions = [ + { + label: () => `${transRotation}: ${rotation}°`, + tooltip: "rotation", + slider: { + min: -180, + max: 180, + step: 1, + value: [rotation], + onValueChange: (e: number[]) => { + setRotation(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + buttons: [ + { + icon: RotateCcwIcon, + tooltip: "rotation_back", + fn: () => setRotation((r) => r - 10), + }, + { + icon: RotateCwIcon, + tooltip: "rotation_forward", + fn: () => setRotation((r) => r + 10), + }, + ], + }, + { + label: () => `${transZoom}: ${Math.round((1 + zoom) * 100)}%`, + tooltip: "zoom", + slider: { + min: -0.99, + max: 500, + step: 0.1, + value: [Math.round((1 + zoom) * 100)], + onValueChange: (e: number[]) => { + setZoom(e[0] / 100 - 1); + setIsReset(false); + }, + }, + buttons: [ + { + icon: ZoomOutIcon, + tooltip: "zoomOut", + fn: () => { + setZoom((currentValue) => { + const newValue = currentValue - 0.1; + return newValue < -0.99 ? -0.99 : parseFloat(newValue.toFixed(1)); + }); + setIsReset(false); + }, + }, + { + icon: ZoomInIcon, + tooltip: "zoomIn", + fn: () => { + setZoom((currentValue) => { + const newValue = currentValue + 0.1; + return newValue > 4 ? 4 : parseFloat(newValue.toFixed(1)); + }); + setIsReset(false); + }, + }, + ], + }, + ]; + + // Other options (reset, horizontal and vertical flip) + const otherOptions = [ + { + icon: FlipHorizontalIcon, + fn: () => setFlipX((prev) => !prev), + tooltip: "horizontal_flip", + }, + { + icon: FlipVerticalIcon, + fn: () => setFlipY((prev) => !prev), + tooltip: "vertical_flip", + }, + { + icon: RefreshCwIcon, + fn: resetToInitialState, + tooltip: "reset", + }, + ]; + + return ( + +
+ + + +
+ + + {useTrans("uwil-backend::back.image_cropper.modale_title")} + +
+ {/* Cropper content */} +
+ setCropZone(percentCrop)} + aspect={aspect} + className="w-full" + locked + > +
+ {useTrans( 0 + ? `${originalDimensions.width * scaleFactor}px` + : "auto", + height: + originalDimensions.height > 0 + ? `${originalDimensions.height * scaleFactor}px` + : "auto", + transform: `scale(${1 + zoom}) rotate(${rotation}deg) scaleX(${flipX ? -1 : 1}) scaleY(${flipY ? -1 : 1})`, + filter: `brightness(${brightness}%) contrast(${contrast}%) saturate(${saturation}%) sepia(${sepia}%) grayscale(${grayscale}%)`, + transformOrigin: "center center", + transition: !isDragging + ? "transform 0.2s ease, filter 0.2s ease" + : "none", + cursor: isDragging ? "grabbing" : "grab", + userSelect: "none", + }} + draggable={false} + /> +
+
+
+ {/* Cropper filters */} +
+
+ + {useTrans( + "uwil-backend::back.image_cropper.modale_description", + )} + + {mainOptions.map((option) => ( +
+
+ + + + + + + {str( + GetTranslation( + `uwil-backend::back.image_cropper.filters.${option.tooltip}`, + ), + ) + .ucFirst() + .value()} + + +
+
+ {option.buttons.map((currentOption) => ( + + + + + + {str( + GetTranslation( + `uwil-backend::back.image_cropper.filters.${currentOption.tooltip}`, + ), + ) + .ucFirst() + .value()} + + + ))} +
+
+ ))} + {/* FILTRES - Collapsible */} + + + + + +
+ {imageFilterOptions.map((option) => ( +
+ + + + + + + {str( + GetTranslation( + `uwil-backend::back.image_cropper.filters.${option.tooltip}`, + ), + ) + .ucFirst() + .value()} + + +
+ ))} +
+
+
+ {/* Others actions */} +
+ {otherOptions.map((option) => { + return ( + + + + + + {str( + GetTranslation( + `uwil-backend::back.image_cropper.filters.${option.tooltip}`, + ), + ) + .ucFirst() + .value()} + + + ); + })} +
+
+ + + + + + + + {str( + useTrans( + "uwil-backend::back.image_cropper.action_the_crop", + { + params: { + action: str(useTrans("uwil-backend::back.cancel")) + .ucFirst() + .value(), + }, + }, + ), + ) + .ucFirst() + .value()} + + + + + + + + + {str( + useTrans( + "uwil-backend::back.image_cropper.action_the_crop", + { + params: { + action: str(useTrans("uwil-backend::back.validate")) + .ucFirst() + .value(), + }, + }, + ), + ) + .ucFirst() + .value()} + + + +
+
+
+
+ ); +} diff --git a/resources/ts/back/Components/Inputs/ModelSelect.tsx b/resources/ts/back/Components/Inputs/ModelSelect.tsx new file mode 100644 index 0000000..0712bd3 --- /dev/null +++ b/resources/ts/back/Components/Inputs/ModelSelect.tsx @@ -0,0 +1,1676 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { + ButtonHTMLAttributes, + CSSProperties, + forwardRef, + KeyboardEvent, + ReactNode, + useCallback, + useEffect, + useId, + useImperativeHandle, + useRef, + useState, +} from "react"; +import { cva, type VariantProps } from "class-variance-authority"; +import { + CheckIcon, + XCircleIcon, + XIcon, + WandSparklesIcon, + SearchIcon, + ChevronsUpDownIcon, + ChevronLeftIcon, + ChevronRightIcon, +} from "lucide-react"; +import axios, { isAxiosError } from "axios"; +import { route } from "ziggy-js"; +// * Components shadcn +import { Separator } from "@/components/ui/separator"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { + Command, + CommandEmpty, + CommandGroup, + CommandItem, + CommandList, +} from "@/components/ui/command"; +import { Label } from "@/components/ui/label"; +import { Input } from "@/components/ui/input"; +import { Skeleton } from "@/components/ui/skeleton"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import InputError from "@/back/Components/InputError"; +import str from "@/hooks/use-string"; +import { cn, GetTranslation } from "@/lib/utils"; +import { AppEnv } from "@/types/global"; +import { DefaultModel, Paginator } from "@/back/types/global"; + +/** + * Animation types and configurations + */ +export interface AnimationConfig { + /** Badge animation type */ + badgeAnimation?: "bounce" | "pulse" | "wiggle" | "fade" | "slide" | "none"; + /** Popover animation type */ + popoverAnimation?: "scale" | "slide" | "fade" | "flip" | "none"; + /** Option hover animation type */ + optionHoverAnimation?: "highlight" | "scale" | "glow" | "none"; + /** Animation duration in seconds */ + duration?: number; + /** Animation delay in seconds */ + delay?: number; +} + +/** + * Variants for the multi-select component to handle different styles. + * Uses class-variance-authority (cva) to define different styles based on "variant" prop. + */ +const modelSelectVariants = cva("transition-all duration-300 ease-in-out", { + variants: { + variant: { + default: "border-foreground/10 text-foreground bg-card hover:bg-card/80", + ghost: "border-none text-foreground bg-background", + secondary: + "border-foreground/10 bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + inverted: "inverted", + }, + badgeAnimation: { + bounce: "hover:-translate-y-1 hover:scale-110", + pulse: "hover:animate-pulse", + wiggle: "hover:animate-wiggle", + fade: "hover:opacity-80", + slide: "hover:translate-x-1", + none: "", + }, + }, + defaultVariants: { + variant: "default", + badgeAnimation: "none", + }, +}); + +/** + * Props for MultiSelect component + */ +interface ModelSelectProps + extends + Omit, "animationConfig">, + VariantProps { + /** + * Callback function triggered when the selected values change. + * Receives an array of the new selected values. + */ + // eslint-disable-next-line no-unused-vars + onValueChange?: (value: number[]) => void; + + /** + * Callback function triggered when the selected values change. + * Receives a single or array of selected Model(s). + */ + // eslint-disable-next-line no-unused-vars + onModelChange?: (value: DefaultModel[]) => void; + + /** The default selected values when the component mounts. */ + defaultValues?: number[]; + + /** + * Placeholder text to be displayed when no values are selected. + * Optional, defaults to "Select options". + */ + placeholder?: string; + + /** + * Animation duration in seconds for the visual effects (e.g., bouncing badges). + * Optional, defaults to 0 (no animation). + */ + animation?: number; + + /** + * Advanced animation configuration for different component parts. + * Optional, allows fine-tuning of various animation effects. + */ + animationConfig?: AnimationConfig; + + /** + * Maximum number of items to display. Extra selected items will be summarized. + * Optional, defaults to 3. + */ + maxCount?: number; + + /** + * The modality of the popover. When set to true, interaction with outside elements + * will be disabled and only popover content will be visible to screen readers. + * Optional, defaults to false. + */ + modalPopover?: boolean; + + /** + * If true, renders the multi-select component as a child of another component. + * Optional, defaults to false. + */ + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + asChild?: boolean; + + /** + * Additional class names to apply custom styles to the multi-select component. + * Optional, can be used to add custom styles. + */ + className?: string; + + /** + * If true, disables the select all functionality. + * Optional, defaults to false. + */ + hideSelectAll?: boolean; + + /** + * If true, shows search functionality in the popover. + * If false, hides the search input completely. + * Optional, defaults to true. + */ + searchable?: boolean; + + /** + * Custom empty state message when no options match search. + * Optional, defaults to "No results found." + */ + emptyIndicator?: ReactNode; + + /** + * If true, allows the component to grow and shrink with its content. + * If false, uses fixed width behavior. + * Optional, defaults to false. + */ + autoSize?: boolean; + + /** + * If true, shows badges in a single line with horizontal scroll. + * If false, badges wrap to multiple lines. + * Optional, defaults to false. + */ + singleLine?: boolean; + + /** + * Custom CSS class for the popover content. + * Optional, can be used to customize popover appearance. + */ + popoverClassName?: string; + + /** + * If true, disables the component completely. + * Optional, defaults to false. + */ + disabled?: boolean; + + /** + * Responsive configuration for different screen sizes. + * Allows customizing maxCount and other properties based on viewport. + * Can be boolean true for default responsive behavior or an object for custom configuration. + */ + responsive?: + | boolean + | { + /** Configuration for mobile devices (< 640px) */ + mobile?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + /** Configuration for tablet devices (640px - 1024px) */ + tablet?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + /** Configuration for desktop devices (> 1024px) */ + desktop?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + }; + + /** + * Minimum width for the component. + * Optional, defaults to auto-sizing based on content. + * When set, component will not shrink below this width. + */ + minWidth?: string; + + /** + * Maximum width for the component. + * Optional, defaults to 100% of container. + * Component will not exceed container boundaries. + */ + maxWidth?: string; + + /** + * If true, automatically removes duplicate options based on their value. + * Optional, defaults to false (shows warning in dev mode instead). + */ + deduplicateOptions?: boolean; + + /** + * If true, the component will reset its internal state when defaultValue changes. + * Useful for React Hook Form integration and form reset functionality. + * Optional, defaults to true. + */ + resetOnDefaultValueChange?: boolean; + + /** + * If true, automatically closes the popover after selecting an option. + * Useful for single-selection-like behavior or mobile UX. + * Optional, defaults to false. + */ + closeOnSelect?: boolean; + + /** + * The name of the field to complete + */ + name: string; + + /** + * Label of the field + */ + label: ReactNode | string; + + /** + * Does the field required + */ + required?: boolean; + + /** + * The fonction to set the data in useForm inertia + */ + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: number[] | number | null) => void; + + /** + * Does the field is multiple ? If yes return will be array, if not it will be single value + */ + multiple?: boolean; + + /** + * Minimum number of selections required (only when multiple is true) + * Optional, defaults to undefined (no minimum) + */ + minSelection?: number; + + /** + * Maximum number of selections allowed (only when multiple is true) + * Optional, defaults to undefined (no maximum) + */ + maxSelection?: number; + + /** + * Helper for the input + * Optional, defaults to empty + */ + helper?: string; + + /** + * Make the Close button visible + * Optional, defaults to empty + */ + closeButtonVisible?: boolean; + + /** + * Model name + * Take the name of the model to fetch in the backend, using ajax function + */ + targetModel?: string; + + /** + * Field name used to find data in the option of the models(optional) + */ + field?: string; + + /** Exclude id in the model options (optionnal) */ + exclude?: number | null; + + parentErrors?: Record | null; +} + +/** + * Imperative methods exposed through ref + */ +export interface ModelSelectRef { + /** + * Programmatically reset the component to its default value + */ + reset: () => void; + /** + * Get current selected values + */ + getSelectedValues: () => number[]; + /** + * Set selected values programmatically + */ + // eslint-disable-next-line no-unused-vars + setSelectedValues: (values: number[]) => void; + /** + * Clear all selected values + */ + clear: () => void; + /** + * Focus the component + */ + focus: () => void; +} + +export const ModelSelect = forwardRef( + ( + { + name, + label, + required = true, + setData, + multiple = true, + minSelection, + maxSelection, + helper, + onValueChange, + onModelChange, + variant, + defaultValues = [], + placeholder = "Select options", + animation = 0, + animationConfig, + maxCount = 3, + modalPopover = false, + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + asChild = false, + className, + hideSelectAll = false, + searchable = true, + emptyIndicator, + autoSize = false, + singleLine = false, + popoverClassName, + disabled = false, + responsive, + minWidth, + maxWidth, + deduplicateOptions = false, + resetOnDefaultValueChange = true, + closeOnSelect = false, + closeButtonVisible = false, + targetModel, + field, + exclude = null, + parentErrors = null, + ...props + }, + ref, + ) => { + const [selectedValues, setSelectedValues] = + useState(defaultValues); + + const [selectedModels, setSelectedModels] = useState([]); + + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const [isAnimating, setIsAnimating] = useState(false); + const [searchValue, setSearchValue] = useState(""); + + const [politeMessage, setPoliteMessage] = useState(""); + const [assertiveMessage, setAssertiveMessage] = useState(""); + const prevSelectedCount = useRef(selectedValues.length); + const prevIsOpen = useRef(isPopoverOpen); + const prevSearchValue = useRef(searchValue); + + const { errors } = usePage().props; + const [errorAjax, setErrorsAjax] = useState | null>( + null, + ); + + const localErrors = parentErrors ?? errors; + + // Pagination. + const [page, setPage] = useState(1); + const [pageSize] = useState(5); + const [lastPage, setLastPage] = useState(1); + + // Search identification. + const requestIdRef = useRef(0); + + const [loading, setLoading] = useState(false); + const [initialLoading, setInitialLoading] = useState(true); + const [options, setOptions] = useState([]); + const [optionsMerged, setOptionsMerged] = useState([]); + // Custom by field parameter or predefined values (title, name or label). + const [dynamicField, setDynamicField] = useState( + field ?? null, + ); + + const { locale } = usePage().props.appEnv as AppEnv; + + /** + * Set call ajax. + * @param pageNumber number + * @return + */ + const fetchOptions = async (pageNumber: number) => { + const csrfToken = + document + .querySelector('meta[name="csrf-token"]') + ?.getAttribute("content") || ""; + + const response = await axios.post( + route("back.model.list"), + { + model: targetModel, + selectedIds: selectedValues, + search: searchValue, + field: dynamicField, + page: pageNumber, + pageSize, + exclude, + }, + { + headers: { + "Content-Type": "application/json", + Accept: "application/json", + "X-Requested-With": "XMLHttpRequest", + "X-Inertia": "false", + "X-CSRF-TOKEN": csrfToken, + }, + }, + ); + return response.data; + }; + + /** + * Get new options list with his target field. + * @param pageNumber number + * @return void + */ + const getData = async (pageNumber = 1) => { + // Increment search id. + requestIdRef.current += 1; + const requestId = requestIdRef.current; + setLoading(true); + try { + const data = (await fetchOptions(pageNumber)) as { + items: Paginator; + field: string; + model: DefaultModel[]; + }; + // Ignore obsolete answers. + if (requestId !== requestIdRef.current) return; + const dataModel: DefaultModel[] = data.model + ? Object.values(data.model) + : []; + const dataItems: DefaultModel[] = Array.isArray(data?.items?.data) + ? data.items.data + : []; + setOptionsMerged(() => { + const merged = [...dataModel, ...dataItems] + // Supprime les éléments undefined ou sans id + .filter( + (item): item is DefaultModel => !!item && item.id !== undefined, + ) + // Supprime les doublons par id + .filter( + (item, index, self) => + index === self.findIndex((i) => i.id === item.id), + ); + return merged; + }); + setSelectedModels(dataModel); + setDynamicField(data.field); + setOptions(data.items.data ?? []); + setPage(data.items.current_page); + setLastPage(data.items.last_page ?? 1); + } catch (err: unknown) { + // Ignore obsolete errors. + if (requestId !== requestIdRef.current) return; + console.error(err); + if (isAxiosError(err) && err.response?.data?.errors) { + setErrorsAjax(err.response?.data?.errors); + } + + setOptions([]); + setLastPage(1); + } finally { + // Only the last call can stop the loading. + if (requestId === requestIdRef.current) { + setLoading(false); + } + setInitialLoading(false); + } + }; + + /** + * Get specific page. + * @param pageNumber number + * @return void + */ + const goToPage = async (pageNumber: number) => { + if (pageNumber < 1 || pageNumber > lastPage) return; + await getData(pageNumber); + }; + + useEffect(() => { + if (disabled) { + return undefined; + } + + // Reset options list if empty search or null + if (targetModel && searchValue.length === 0) { + getData(); + return undefined; + } + + // Nothing to do if search is below 3 caracters. + if (searchValue.length < 3) return undefined; + + // Get updated options list with search. + const handler = setTimeout(() => getData(), 300); + + function cleanup(): void { + if (handler) { + clearTimeout(handler); + } + } + + return cleanup; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [searchValue, targetModel]); + + const announce = useCallback( + (message: string, priority: "polite" | "assertive" = "polite") => { + if (priority === "assertive") { + setAssertiveMessage(message); + setTimeout(() => setAssertiveMessage(""), 100); + } else { + setPoliteMessage(message); + setTimeout(() => setPoliteMessage(""), 100); + } + }, + [], + ); + + const multiSelectId = useId(); + const listboxId = `${multiSelectId}-listbox`; + const triggerDescriptionId = `${multiSelectId}-description`; + const selectedCountId = `${multiSelectId}-count`; + + // Translations. + const transDelete = GetTranslation("uwil-backend::crud.actions.delete"); + const transClose = GetTranslation("uwil-backend::back.close"); + const transClear = GetTranslation("uwil-backend::back.clear"); + const transNoResults = GetTranslation( + "uwil-backend::back.table_no_results", + ); + const transSearchOptions = GetTranslation( + "uwil-backend::back.multi_select.search_options", + ); + const transSelectAll = GetTranslation( + "uwil-backend::back.multi_select.select_all", + ); + const transMore = GetTranslation("uwil-backend::back.multi_select.more"); + const transClosePopover = GetTranslation( + "uwil-backend::back.multi_select.close_popover", + ); + const transClearList = GetTranslation( + "uwil-backend::back.multi_select.clear_list", + ); + + const prevDefaultValueRef = useRef(defaultValues); + + const arraysEqual = useCallback((a: number[], b: number[]): boolean => { + if (a.length !== b.length) return false; + const sortedA = [...a].sort(); + const sortedB = [...b].sort(); + return sortedA.every((val, index) => val === sortedB[index]); + }, []); + + const resetToDefault = useCallback(() => { + setSelectedValues(defaultValues); + setIsPopoverOpen(false); + setSearchValue(""); + if (onValueChange) { + onValueChange(defaultValues); + } + setData(name, multiple ? defaultValues : defaultValues[0]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [defaultValues, onValueChange]); + + const buttonRef = useRef(null); + + useImperativeHandle( + ref, + () => ({ + reset: resetToDefault, + getSelectedValues: () => selectedValues, + setSelectedValues: (values: number[]) => { + setSelectedValues(values); + if (onValueChange) { + onValueChange(values); + } + setData(name, multiple ? values : values[0]); + }, + clear: () => { + setSelectedValues([]); + if (onValueChange) { + onValueChange([]); + } + setData(name, multiple ? [] : null); + }, + focus: () => { + if (buttonRef.current) { + buttonRef.current.focus(); + const originalOutline = buttonRef.current.style.outline; + const originalOutlineOffset = buttonRef.current.style.outlineOffset; + buttonRef.current.style.outline = "2px solid hsl(var(--ring))"; + buttonRef.current.style.outlineOffset = "2px"; + setTimeout(() => { + if (buttonRef.current) { + buttonRef.current.style.outline = originalOutline; + buttonRef.current.style.outlineOffset = originalOutlineOffset; + } + }, 1000); + } + }, + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [resetToDefault, selectedValues, onValueChange], + ); + + const [screenSize, setScreenSize] = useState< + "mobile" | "tablet" | "desktop" + >("desktop"); + + useEffect(() => { + if (typeof window === "undefined") return undefined; + const handleResize = () => { + const width = window.innerWidth; + if (width < 640) { + setScreenSize("mobile"); + } else if (width < 1024) { + setScreenSize("tablet"); + } else { + setScreenSize("desktop"); + } + }; + handleResize(); + window.addEventListener("resize", handleResize); + return () => { + if (typeof window !== "undefined") { + window.removeEventListener("resize", handleResize); + } + }; + }, []); + + const getResponsiveSettings = () => { + if (!responsive) { + return { + maxCount, + hideIcons: false, + compactMode: false, + }; + } + if (responsive === true) { + const defaultResponsive = { + mobile: { + maxCount: 2, + hideIcons: false, + compactMode: true, + }, + tablet: { + maxCount: 4, + hideIcons: false, + compactMode: false, + }, + desktop: { + maxCount: 6, + hideIcons: false, + compactMode: false, + }, + }; + const currentSettings = defaultResponsive[screenSize]; + return { + maxCount: currentSettings?.maxCount ?? maxCount, + hideIcons: currentSettings?.hideIcons ?? false, + compactMode: currentSettings?.compactMode ?? false, + }; + } + const currentSettings = responsive[screenSize]; + return { + maxCount: currentSettings?.maxCount ?? maxCount, + hideIcons: currentSettings?.hideIcons ?? false, + compactMode: currentSettings?.compactMode ?? false, + }; + }; + + const responsiveSettings = getResponsiveSettings(); + + const getBadgeAnimationClass = () => { + if (animationConfig?.badgeAnimation) { + switch (animationConfig.badgeAnimation) { + case "bounce": + return isAnimating + ? "animate-bounce" + : "hover:-translate-y-1 hover:scale-110"; + case "pulse": + return "hover:animate-pulse"; + case "wiggle": + return "hover:animate-wiggle"; + case "fade": + return "hover:opacity-80"; + case "slide": + return "hover:translate-x-1"; + case "none": + return ""; + default: + return ""; + } + } + return isAnimating ? "animate-bounce" : ""; + }; + + const getPopoverAnimationClass = () => { + if (animationConfig?.popoverAnimation) { + switch (animationConfig.popoverAnimation) { + case "scale": + return "animate-scaleIn"; + case "slide": + return "animate-slideInDown"; + case "fade": + return "animate-fadeIn"; + case "flip": + return "animate-flipIn"; + case "none": + return ""; + default: + return ""; + } + } + return ""; + }; + + const getAllOptions = useCallback((): DefaultModel[] => { + if (optionsMerged.length === 0) return []; + const allOptions: DefaultModel[] = optionsMerged; + const valueSet = new Set(); + const duplicates: string[] = []; + const uniqueOptions: DefaultModel[] = []; + allOptions.forEach((option) => { + if (valueSet.has(option.id.toString())) { + duplicates.push(option.id.toString()); + if (!deduplicateOptions) { + uniqueOptions.push(option); + } + } else { + valueSet.add(option.id.toString()); + uniqueOptions.push(option); + } + }); + if (process.env.NODE_ENV === "development" && duplicates.length > 0) { + const action = deduplicateOptions + ? "automatically removed" + : "detected"; + console.warn( + `MultiSelect: Duplicate option values ${action}: ${duplicates.join( + ", ", + )}. ` + + `${ + deduplicateOptions + ? "Duplicates have been removed automatically." + : "This may cause unexpected behavior. Consider setting 'deduplicateOptions={true}' or ensure all option values are unique." + }`, + ); + } + return deduplicateOptions ? uniqueOptions : allOptions; + }, [optionsMerged, deduplicateOptions]); + + const getOptionByValue = useCallback( + (id: number): DefaultModel | undefined => { + const option = getAllOptions().find((opt) => opt.id === id); + if (!option && process.env.NODE_ENV === "development") { + console.warn( + `MultiSelect: Option with value "${id}" not found in options list`, + ); + } + return option; + }, + [getAllOptions], + ); + + const handleInputKeyDown = (event: KeyboardEvent) => { + if (event.key === "Enter") { + setIsPopoverOpen(true); + } else if (event.key === "Backspace" && !event.currentTarget.value) { + const newSelectedValues = [...selectedValues]; + const newSelectedModels = [...selectedModels]; + newSelectedValues.pop(); + newSelectedModels.pop(); + setSelectedValues(newSelectedValues); + setSelectedModels(newSelectedModels); + if (onValueChange) { + onValueChange(newSelectedValues); + } + if (onModelChange) { + onModelChange(newSelectedModels); + } + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + } + }; + + const toggleOption = (option: DefaultModel) => { + if (disabled) return; + // MODE SINGLE SELECT + if (!multiple) { + const newSelectedValues = selectedValues.includes(option.id) + ? [] + : [option.id]; + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + const newSelectedModels = selectedModels?.includes(option) + ? [] + : [option]; + setSelectedModels(newSelectedModels); + if (onModelChange) { + onModelChange(newSelectedModels); + } + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + if (closeOnSelect) { + setIsPopoverOpen(false); + } + return; + } + + // MODE MULTIPLE SELECT + const isCurrentlySelected = selectedValues.includes(option.id); + + if (isCurrentlySelected) { + if (minSelection && selectedValues.length <= minSelection) { + announce( + `Minimum ${minSelection} selection(s) required`, + "assertive", + ); + return; + } + const newSelectedValues = selectedValues.filter( + (value) => value !== option.id, + ); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + const newSelectedModels = selectedModels?.filter( + (value) => value.id !== option.id, + ); + if (onModelChange) { + onModelChange(newSelectedModels ?? []); + } + setSelectedModels(newSelectedModels); + + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + } else { + if (maxSelection && selectedValues.length >= maxSelection) { + announce(`Maximum ${maxSelection} selection(s) allowed`, "assertive"); + return; + } + const newSelectedValues = [...selectedValues, option.id]; + + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + const newSelectedModels = [...(selectedModels || []), option]; + if (onModelChange) { + onModelChange(newSelectedModels); + } + setSelectedModels(newSelectedModels); + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + } + if (closeOnSelect) { + setIsPopoverOpen(false); + } + }; + + const handleClear = () => { + if (disabled) return; + if (multiple && minSelection && minSelection > 0) { + announce(`Minimum ${minSelection} selection(s) required`, "assertive"); + return; + } + setSelectedValues([]); + + if (onValueChange) { + onValueChange([]); + } + setSelectedModels([]); + if (onModelChange) { + onModelChange([]); + } + setData(name, multiple ? [] : null); + }; + + const handleTogglePopover = () => { + if (disabled) return; + setIsPopoverOpen((prev) => !prev); + }; + + const clearExtraOptions = () => { + if (disabled) return; + const newSelectedValues = selectedValues.slice( + 0, + responsiveSettings.maxCount, + ); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + const newSelectedModels = selectedModels.slice( + 0, + responsiveSettings.maxCount, + ); + setSelectedModels(newSelectedModels); + if (onModelChange) { + onModelChange(newSelectedModels); + } + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + }; + + const toggleAll = () => { + if (disabled || !multiple) return; + const allOptions = getAllOptions(); + + if (selectedValues.length === allOptions.length) { + if (minSelection && minSelection > 0) { + announce( + `Minimum ${minSelection} selection(s) required`, + "assertive", + ); + return; + } + handleClear(); + } else { + const allValues = allOptions.map((option) => option.id); + if (maxSelection && allValues.length > maxSelection) { + announce(`Maximum ${maxSelection} selection(s) allowed`, "assertive"); + return; + } + setSelectedValues(allValues); + if (onValueChange) { + onValueChange(allValues); + } + setSelectedModels(allOptions); + if (onModelChange) { + onModelChange(allOptions); + } + setData(name, multiple ? allValues : allValues[0]); + } + + if (closeOnSelect) { + setIsPopoverOpen(false); + } + }; + + useEffect(() => { + if (!resetOnDefaultValueChange) return; + const prevDefaultValue = prevDefaultValueRef.current; + if (!arraysEqual(prevDefaultValue, defaultValues)) { + if (!arraysEqual(selectedValues, defaultValues)) { + setSelectedValues(defaultValues); + } + prevDefaultValueRef.current = [...defaultValues]; + } + }, [defaultValues, selectedValues, arraysEqual, resetOnDefaultValueChange]); + + const getWidthConstraints = () => { + const defaultMinWidth = screenSize === "mobile" ? "0px" : "200px"; + const effectiveMinWidth = minWidth || defaultMinWidth; + const effectiveMaxWidth = maxWidth || "100%"; + return { + minWidth: effectiveMinWidth, + maxWidth: effectiveMaxWidth, + width: autoSize ? "auto" : "100%", + }; + }; + + const widthConstraints = getWidthConstraints(); + + useEffect(() => { + if (!isPopoverOpen) { + setSearchValue(""); + } + }, [isPopoverOpen]); + + useEffect( + () => { + const selectedCount = selectedValues.length; + const allOptions = getAllOptions(); + const totalOptions = allOptions.length; + if (selectedCount !== prevSelectedCount.current) { + const diff = selectedCount - prevSelectedCount.current; + if (diff > 0) { + const addedItems = selectedValues.slice(-diff); + const addedLabels = addedItems + .map( + (value) => + allOptions.find((opt) => opt.id === value)?.[ + dynamicField as keyof DefaultModel + ], + ) + .filter(Boolean); + + if (addedLabels.length === 1) { + announce( + `${addedLabels[0]} selected. ${selectedCount} of ${totalOptions} options selected.`, + ); + } else { + announce( + `${addedLabels.length} options selected. ${selectedCount} of ${totalOptions} total selected.`, + ); + } + } else if (diff < 0) { + announce( + `Option removed. ${selectedCount} of ${totalOptions} options selected.`, + ); + } + prevSelectedCount.current = selectedCount; + } + + if (isPopoverOpen !== prevIsOpen.current) { + if (isPopoverOpen) { + announce( + `Dropdown opened. ${totalOptions} options available. Use arrow keys to navigate.`, + ); + } else { + announce("Dropdown closed."); + } + prevIsOpen.current = isPopoverOpen; + } + + if ( + searchValue !== prevSearchValue.current && + searchValue !== undefined + ) { + if (searchValue && isPopoverOpen) { + const filteredCount = allOptions.length; + + announce( + `${filteredCount} option${ + filteredCount === 1 ? "" : "s" + } found for "${searchValue}"`, + ); + } + prevSearchValue.current = searchValue; + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [selectedValues, isPopoverOpen, searchValue, announce, getAllOptions], + ); + + useEffect(() => { + if ( + minSelection !== undefined && + maxSelection !== undefined && + minSelection > maxSelection + ) { + console.error( + "MultiSelect: minSelection cannot be greater than maxSelection", + ); + } + if ( + !multiple && + (minSelection !== undefined || maxSelection !== undefined) + ) { + console.warn( + "MultiSelect: minSelection and maxSelection are ignored when multiple is false", + ); + } + if (minSelection !== undefined && minSelection < 0) { + console.error("MultiSelect: minSelection cannot be negative"); + } + if (maxSelection !== undefined && maxSelection < 1) { + console.error("MultiSelect: maxSelection must be at least 1"); + } + }, [minSelection, maxSelection, multiple]); + + const getModelField = (option: DefaultModel): string => { + const value = option[dynamicField as keyof DefaultModel] as unknown as + | Record + | string; + if (typeof value === "object") return String(value[locale] ?? ""); + return String(value ?? ""); + }; + + const buttonProps = { + ...props, + options: options + .map((option) => getModelField(option)) + .filter(Boolean) + .join(", "), + }; + + return ( +
+
+
+ {politeMessage} +
+
+ {assertiveMessage} +
+
+ + +
+ Multi-select dropdown. Use arrow keys to navigate, Enter to select, + and Escape to close. +
+
+ {selectedValues.length === 0 + ? "No options selected" + : `${selectedValues.length} option${ + selectedValues.length === 1 ? "" : "s" + } selected: ${selectedValues + .map((value) => { + const option = getOptionByValue(value); + if (!option) return undefined; + return getModelField(option); + }) + .filter(Boolean) + .join(", ")}`} +
+ + + )} + +
+ + ))} + + + setIsPopoverOpen(false)} + > + + {searchable && ( +
+
+ +
+ setSearchValue(e.target.value)} + onKeyDown={handleInputKeyDown} + className="w-[calc(100%-2.5rem-40px)] border-0 mx-9" + /> + } + tooltipContent={

{str(transDelete).ucFirst().value()}

} + type="button" + variant="ghost" + size="icon" + className="absolute top-1/2 right-0 transform -translate-y-1/2 text-muted-foreground" + onClick={() => setSearchValue("")} + disabled={searchValue.length < 1 || disabled} + /> +
+ )} + {searchable && ( +
+ Type to filter options. Use arrow keys to navigate results. +
+ )} + + {!loading && !initialLoading && ( + + {emptyIndicator || transNoResults} + + )} + {/* First option for select all items */} + {!hideSelectAll && !searchValue && multiple && ( + + + + + ({str(transSelectAll).ucFirst().value()} + {getAllOptions().length > 20 + ? ` - ${getAllOptions().length} options` + : ""} + ) + + + + )} + {/* List of items */} + + {loading + ? [...Array(pageSize)].map(() => ( + + )) + : options.map((option) => { + const isSelected = selectedValues.includes(option.id); + return ( + { + toggleOption(option); + }} + role="option" + aria-selected={isSelected} + aria-label={`${getModelField(option)}${ + isSelected ? ", selected" : ", not selected" + } + `} + className={cn( + "cursor-pointer gap-1.5 px-4 py-2 w-full h-auto min-h-10", + )} + > + + {getModelField(option)} + + ); + })} + + + + {/* Pagination boutons */} + {options.length > 0 && lastPage !== 1 && ( +
+ + + {GetTranslation("uwil-backend::pagination.previous")} + + } + tooltipContent={ +

+ {GetTranslation( + "uwil-backend::pagination.specific_page", + { + params: { + id: String(page - 1), + }, + }, + )} +

+ } + type="button" + variant="ghost" + size="sm" + onClick={() => goToPage(page - 1)} + disabled={page <= 1 || loading} + /> + {loading ? ( + + ) : ( +
+

+ {page}/{lastPage} +

+
+ )} + + {GetTranslation("uwil-backend::pagination.next")} + + + } + tooltipContent={ +

+ {GetTranslation( + "uwil-backend::pagination.specific_page", + { + params: { + id: String(page + 1), + }, + }, + )} +

+ } + type="button" + variant="ghost" + size="sm" + onClick={() => goToPage(page + 1)} + disabled={page >= lastPage || loading} + /> +
+ )} + + {(closeButtonVisible || selectedValues.length > 0) && ( + +
+ {selectedValues.length > 0 && ( + {str(transClearList).ucFirst().value()}

+ } + className="w-full" + type="button" + variant="ghost" + size="sm" + onClick={handleClear} + disabled={disabled} + /> + )} + {closeButtonVisible && selectedValues.length > 0 && ( + + )} + {closeButtonVisible && ( + {str(transClosePopover).ucFirst().value()}

+ } + className="w-full" + type="button" + variant="ghost" + size="sm" + onClick={() => setIsPopoverOpen(false)} + disabled={disabled} + /> + )} +
+
+ )} +
+
+ {animation > 0 && selectedValues.length > 0 && ( + setIsAnimating(!isAnimating)} + /> + )} + + {helper && {helper}} + + + ); + }, +); + +ModelSelect.displayName = "ModelSelect"; +export type { ModelSelectProps }; diff --git a/resources/ts/back/Components/Inputs/MultiSelect.tsx b/resources/ts/back/Components/Inputs/MultiSelect.tsx new file mode 100644 index 0000000..9af188c --- /dev/null +++ b/resources/ts/back/Components/Inputs/MultiSelect.tsx @@ -0,0 +1,1487 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { + ButtonHTMLAttributes, + ComponentType, + CSSProperties, + forwardRef, + KeyboardEvent, + ReactNode, + useCallback, + useEffect, + useId, + useImperativeHandle, + useMemo, + useRef, + useState, +} from "react"; +import { cva, type VariantProps } from "class-variance-authority"; +import { + CheckIcon, + XCircleIcon, + XIcon, + WandSparklesIcon, + SearchIcon, + ChevronsUpDownIcon, +} from "lucide-react"; +// * Components shadcn +import { Separator } from "@/components/ui/separator"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { + Command, + CommandEmpty, + CommandGroup, + CommandItem, + CommandList, +} from "@/components/ui/command"; +import { Label } from "@/components/ui/label"; +import { Input } from "@/components/ui/input"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import InputError from "@/back/Components/InputError"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import { cn } from "@/lib/utils"; + +/** + * Animation types and configurations + */ +export interface AnimationConfig { + /** Badge animation type */ + badgeAnimation?: "bounce" | "pulse" | "wiggle" | "fade" | "slide" | "none"; + /** Popover animation type */ + popoverAnimation?: "scale" | "slide" | "fade" | "flip" | "none"; + /** Option hover animation type */ + optionHoverAnimation?: "highlight" | "scale" | "glow" | "none"; + /** Animation duration in seconds */ + duration?: number; + /** Animation delay in seconds */ + delay?: number; +} + +/** + * Variants for the multi-select component to handle different styles. + * Uses class-variance-authority (cva) to define different styles based on "variant" prop. + */ +const multiSelectVariants = cva("transition-all duration-300 ease-in-out", { + variants: { + variant: { + default: "border-foreground/10 text-foreground bg-card hover:bg-card/80", + secondary: + "border-foreground/10 bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + inverted: "inverted", + }, + badgeAnimation: { + bounce: "hover:-translate-y-1 hover:scale-110", + pulse: "hover:animate-pulse", + wiggle: "hover:animate-wiggle", + fade: "hover:opacity-80", + slide: "hover:translate-x-1", + none: "", + }, + }, + defaultVariants: { + variant: "default", + badgeAnimation: "none", + }, +}); + +/** + * Option interface for MultiSelect component + */ +export interface MultiSelectOption { + /** The text to display for the option. */ + label: string; + /** The unique value associated with the option. */ + value: string; + /** Optional icon component to display alongside the option. */ + icon?: ComponentType<{ className?: string }>; + /** Whether this option is disabled */ + disabled?: boolean; + /** Custom styling for the option */ + style?: { + /** Custom badge color */ + badgeColor?: string; + /** Custom icon color */ + iconColor?: string; + /** Gradient background for badge */ + gradient?: string; + }; +} + +/** + * Group interface for organizing options + */ +interface MultiSelectGroup { + /** Group heading */ + heading: string; + /** Options in this group */ + options: MultiSelectOption[]; +} + +/** + * Props for MultiSelect component + */ +interface MultiSelectProps + extends + Omit, "animationConfig">, + VariantProps { + /** + * An array of option objects or groups to be displayed in the multi-select component. + */ + options: MultiSelectOption[] | MultiSelectGroup[]; + /** + * Callback function triggered when the selected values change. + * Receives an array of the new selected values. + */ + // eslint-disable-next-line no-unused-vars + onValueChange?: (value: string[]) => void; + + /** The default selected values when the component mounts. */ + defaultValue?: string[]; + + /** + * Placeholder text to be displayed when no values are selected. + * Optional, defaults to "Select options". + */ + placeholder?: string; + + /** + * Animation duration in seconds for the visual effects (e.g., bouncing badges). + * Optional, defaults to 0 (no animation). + */ + animation?: number; + + /** + * Advanced animation configuration for different component parts. + * Optional, allows fine-tuning of various animation effects. + */ + animationConfig?: AnimationConfig; + + /** + * Maximum number of items to display. Extra selected items will be summarized. + * Optional, defaults to 3. + */ + maxCount?: number; + + /** + * The modality of the popover. When set to true, interaction with outside elements + * will be disabled and only popover content will be visible to screen readers. + * Optional, defaults to false. + */ + modalPopover?: boolean; + + /** + * If true, renders the multi-select component as a child of another component. + * Optional, defaults to false. + */ + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + asChild?: boolean; + + /** + * Additional class names to apply custom styles to the multi-select component. + * Optional, can be used to add custom styles. + */ + className?: string; + + /** + * If true, disables the select all functionality. + * Optional, defaults to false. + */ + hideSelectAll?: boolean; + + /** + * If true, shows search functionality in the popover. + * If false, hides the search input completely. + * Optional, defaults to true. + */ + searchable?: boolean; + + /** + * Custom empty state message when no options match search. + * Optional, defaults to "No results found." + */ + emptyIndicator?: ReactNode; + + /** + * If true, allows the component to grow and shrink with its content. + * If false, uses fixed width behavior. + * Optional, defaults to false. + */ + autoSize?: boolean; + + /** + * If true, shows badges in a single line with horizontal scroll. + * If false, badges wrap to multiple lines. + * Optional, defaults to false. + */ + singleLine?: boolean; + + /** + * Custom CSS class for the popover content. + * Optional, can be used to customize popover appearance. + */ + popoverClassName?: string; + + /** + * If true, disables the component completely. + * Optional, defaults to false. + */ + disabled?: boolean; + + /** + * Responsive configuration for different screen sizes. + * Allows customizing maxCount and other properties based on viewport. + * Can be boolean true for default responsive behavior or an object for custom configuration. + */ + responsive?: + | boolean + | { + /** Configuration for mobile devices (< 640px) */ + mobile?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + /** Configuration for tablet devices (640px - 1024px) */ + tablet?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + /** Configuration for desktop devices (> 1024px) */ + desktop?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + }; + + /** + * Minimum width for the component. + * Optional, defaults to auto-sizing based on content. + * When set, component will not shrink below this width. + */ + minWidth?: string; + + /** + * Maximum width for the component. + * Optional, defaults to 100% of container. + * Component will not exceed container boundaries. + */ + maxWidth?: string; + + /** + * If true, automatically removes duplicate options based on their value. + * Optional, defaults to false (shows warning in dev mode instead). + */ + deduplicateOptions?: boolean; + + /** + * If true, the component will reset its internal state when defaultValue changes. + * Useful for React Hook Form integration and form reset functionality. + * Optional, defaults to true. + */ + resetOnDefaultValueChange?: boolean; + + /** + * If true, automatically closes the popover after selecting an option. + * Useful for single-selection-like behavior or mobile UX. + * Optional, defaults to false. + */ + closeOnSelect?: boolean; + + /** + * The name of the field to complete + */ + name: string; + + /** + * Label of the field + */ + label: ReactNode | string; + + /** + * Does the field required + */ + required?: boolean; + + /** + * The fonction to set the data in useForm inertia + */ + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: string[]) => void; + + /** + * Does the field required + */ + multiple?: boolean; + + /** + * Minimum number of selections required (only when multiple is true) + * Optional, defaults to undefined (no minimum) + */ + minSelection?: number; + + /** + * Maximum number of selections allowed (only when multiple is true) + * Optional, defaults to undefined (no maximum) + */ + maxSelection?: number; + + /** + * Helper for the input + * Optional, defaults to empty + */ + helper?: string; + + /** + * Make the Close button visible + * Optional, defaults to empty + */ + closeButtonVisible?: boolean; +} + +/** + * Imperative methods exposed through ref + */ +export interface MultiSelectRef { + /** + * Programmatically reset the component to its default value + */ + reset: () => void; + /** + * Get current selected values + */ + getSelectedValues: () => string[]; + /** + * Set selected values programmatically + */ + // eslint-disable-next-line no-unused-vars + setSelectedValues: (values: string[]) => void; + /** + * Clear all selected values + */ + clear: () => void; + /** + * Focus the component + */ + focus: () => void; +} + +export const MultiSelect = forwardRef( + ( + { + name, + label, + required = true, + setData, + multiple = true, + minSelection, + maxSelection, + helper, + options, + onValueChange, + variant, + defaultValue = [], + placeholder = "Select options", + animation = 0, + animationConfig, + maxCount = 3, + modalPopover = false, + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + asChild = false, + className, + hideSelectAll = false, + searchable = true, + emptyIndicator, + autoSize = false, + singleLine = false, + popoverClassName, + disabled = false, + responsive, + minWidth, + maxWidth, + deduplicateOptions = false, + resetOnDefaultValueChange = true, + closeOnSelect = false, + closeButtonVisible = false, + ...props + }, + ref, + ) => { + const [selectedValues, setSelectedValues] = + useState(defaultValue); + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const [isAnimating, setIsAnimating] = useState(false); + const [searchValue, setSearchValue] = useState(""); + + const [politeMessage, setPoliteMessage] = useState(""); + const [assertiveMessage, setAssertiveMessage] = useState(""); + const prevSelectedCount = useRef(selectedValues.length); + const prevIsOpen = useRef(isPopoverOpen); + const prevSearchValue = useRef(searchValue); + + const { errors } = usePage().props; + + const announce = useCallback( + (message: string, priority: "polite" | "assertive" = "polite") => { + if (priority === "assertive") { + setAssertiveMessage(message); + setTimeout(() => setAssertiveMessage(""), 100); + } else { + setPoliteMessage(message); + setTimeout(() => setPoliteMessage(""), 100); + } + }, + [], + ); + + const multiSelectId = useId(); + const listboxId = `${multiSelectId}-listbox`; + const triggerDescriptionId = `${multiSelectId}-description`; + const selectedCountId = `${multiSelectId}-count`; + + // Translations. + const transDelete = useTrans("uwil-backend::crud.actions.delete"); + const transClose = useTrans("uwil-backend::back.close"); + const transClear = useTrans("uwil-backend::back.clear"); + const transNoResults = useTrans("uwil-backend::back.table_no_results"); + const transSearchOptions = useTrans( + "uwil-backend::back.multi_select.search_options", + ); + const transSelectAll = useTrans( + "uwil-backend::back.multi_select.select_all", + ); + const transMore = useTrans("uwil-backend::back.multi_select.more"); + const transClosePopover = useTrans( + "uwil-backend::back.multi_select.close_popover", + ); + const transClearList = useTrans( + "uwil-backend::back.multi_select.clear_list", + ); + + const prevDefaultValueRef = useRef(defaultValue); + + const isGroupedOptions = useCallback( + ( + opts: MultiSelectOption[] | MultiSelectGroup[], + ): opts is MultiSelectGroup[] => { + return opts.length > 0 && "heading" in opts[0]; + }, + [], + ); + + const arraysEqual = useCallback((a: string[], b: string[]): boolean => { + if (a.length !== b.length) return false; + const sortedA = [...a].sort(); + const sortedB = [...b].sort(); + return sortedA.every((val, index) => val === sortedB[index]); + }, []); + + const resetToDefault = useCallback(() => { + setSelectedValues(defaultValue); + setIsPopoverOpen(false); + setSearchValue(""); + if (onValueChange) { + onValueChange(defaultValue); + } + setData(name, defaultValue); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [defaultValue, onValueChange]); + + const buttonRef = useRef(null); + + useImperativeHandle( + ref, + () => ({ + reset: resetToDefault, + getSelectedValues: () => selectedValues, + setSelectedValues: (values: string[]) => { + setSelectedValues(values); + if (onValueChange) { + onValueChange(values); + } + setData(name, values); + }, + clear: () => { + setSelectedValues([]); + if (onValueChange) { + onValueChange([]); + } + setData(name, []); + }, + focus: () => { + if (buttonRef.current) { + buttonRef.current.focus(); + const originalOutline = buttonRef.current.style.outline; + const originalOutlineOffset = buttonRef.current.style.outlineOffset; + buttonRef.current.style.outline = "2px solid hsl(var(--ring))"; + buttonRef.current.style.outlineOffset = "2px"; + setTimeout(() => { + if (buttonRef.current) { + buttonRef.current.style.outline = originalOutline; + buttonRef.current.style.outlineOffset = originalOutlineOffset; + } + }, 1000); + } + }, + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [resetToDefault, selectedValues, onValueChange], + ); + + const [screenSize, setScreenSize] = useState< + "mobile" | "tablet" | "desktop" + >("desktop"); + + useEffect(() => { + if (typeof window === "undefined") return undefined; + const handleResize = () => { + const width = window.innerWidth; + if (width < 640) { + setScreenSize("mobile"); + } else if (width < 1024) { + setScreenSize("tablet"); + } else { + setScreenSize("desktop"); + } + }; + handleResize(); + window.addEventListener("resize", handleResize); + return () => { + if (typeof window !== "undefined") { + window.removeEventListener("resize", handleResize); + } + }; + }, []); + + const getResponsiveSettings = () => { + if (!responsive) { + return { + maxCount, + hideIcons: false, + compactMode: false, + }; + } + if (responsive === true) { + const defaultResponsive = { + mobile: { + maxCount: 2, + hideIcons: false, + compactMode: true, + }, + tablet: { + maxCount: 4, + hideIcons: false, + compactMode: false, + }, + desktop: { + maxCount: 6, + hideIcons: false, + compactMode: false, + }, + }; + const currentSettings = defaultResponsive[screenSize]; + return { + maxCount: currentSettings?.maxCount ?? maxCount, + hideIcons: currentSettings?.hideIcons ?? false, + compactMode: currentSettings?.compactMode ?? false, + }; + } + const currentSettings = responsive[screenSize]; + return { + maxCount: currentSettings?.maxCount ?? maxCount, + hideIcons: currentSettings?.hideIcons ?? false, + compactMode: currentSettings?.compactMode ?? false, + }; + }; + + const responsiveSettings = getResponsiveSettings(); + + const getBadgeAnimationClass = () => { + if (animationConfig?.badgeAnimation) { + switch (animationConfig.badgeAnimation) { + case "bounce": + return isAnimating + ? "animate-bounce" + : "hover:-translate-y-1 hover:scale-110"; + case "pulse": + return "hover:animate-pulse"; + case "wiggle": + return "hover:animate-wiggle"; + case "fade": + return "hover:opacity-80"; + case "slide": + return "hover:translate-x-1"; + case "none": + return ""; + default: + return ""; + } + } + return isAnimating ? "animate-bounce" : ""; + }; + + const getPopoverAnimationClass = () => { + if (animationConfig?.popoverAnimation) { + switch (animationConfig.popoverAnimation) { + case "scale": + return "animate-scaleIn"; + case "slide": + return "animate-slideInDown"; + case "fade": + return "animate-fadeIn"; + case "flip": + return "animate-flipIn"; + case "none": + return ""; + default: + return ""; + } + } + return ""; + }; + + const getAllOptions = useCallback((): MultiSelectOption[] => { + if (options.length === 0) return []; + let allOptions: MultiSelectOption[]; + if (isGroupedOptions(options)) { + allOptions = options.flatMap((group) => group.options); + } else { + allOptions = options; + } + const valueSet = new Set(); + const duplicates: string[] = []; + const uniqueOptions: MultiSelectOption[] = []; + allOptions.forEach((option) => { + if (valueSet.has(option.value)) { + duplicates.push(option.value); + if (!deduplicateOptions) { + uniqueOptions.push(option); + } + } else { + valueSet.add(option.value); + uniqueOptions.push(option); + } + }); + if (process.env.NODE_ENV === "development" && duplicates.length > 0) { + const action = deduplicateOptions + ? "automatically removed" + : "detected"; + console.warn( + `MultiSelect: Duplicate option values ${action}: ${duplicates.join( + ", ", + )}. ` + + `${ + deduplicateOptions + ? "Duplicates have been removed automatically." + : "This may cause unexpected behavior. Consider setting 'deduplicateOptions={true}' or ensure all option values are unique." + }`, + ); + } + return deduplicateOptions ? uniqueOptions : allOptions; + }, [options, deduplicateOptions, isGroupedOptions]); + + const getOptionByValue = useCallback( + (value: string): MultiSelectOption | undefined => { + const option = getAllOptions().find((opt) => opt.value === value); + if (!option && process.env.NODE_ENV === "development") { + console.warn( + `MultiSelect: Option with value "${value}" not found in options list`, + ); + } + return option; + }, + [getAllOptions], + ); + + const filteredOptions = useMemo(() => { + if (!searchable || !searchValue) return options; + if (options.length === 0) return []; + if (isGroupedOptions(options)) { + return options + .map((group) => ({ + ...group, + options: group.options.filter( + (option) => + option.label + .toLowerCase() + .includes(searchValue.toLowerCase()) || + option.value.toLowerCase().includes(searchValue.toLowerCase()), + ), + })) + .filter((group) => group.options.length > 0); + } + return options.filter( + (option) => + option.label.toLowerCase().includes(searchValue.toLowerCase()) || + option.value.toLowerCase().includes(searchValue.toLowerCase()), + ); + }, [options, searchValue, searchable, isGroupedOptions]); + + const handleInputKeyDown = (event: KeyboardEvent) => { + if (event.key === "Enter") { + setIsPopoverOpen(true); + } else if (event.key === "Backspace" && !event.currentTarget.value) { + const newSelectedValues = [...selectedValues]; + newSelectedValues.pop(); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + } + }; + + const toggleOption = (optionValue: string) => { + if (disabled) return; + const option = getOptionByValue(optionValue); + if (option?.disabled) return; + + // MODE SINGLE SELECT + if (!multiple) { + const newSelectedValues = selectedValues.includes(optionValue) + ? [] + : [optionValue]; + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + if (closeOnSelect) { + setIsPopoverOpen(false); + } + return; + } + + // MODE MULTIPLE SELECT + const isCurrentlySelected = selectedValues.includes(optionValue); + + if (isCurrentlySelected) { + if (minSelection && selectedValues.length <= minSelection) { + announce( + `Minimum ${minSelection} selection(s) required`, + "assertive", + ); + return; + } + const newSelectedValues = selectedValues.filter( + (value) => value !== optionValue, + ); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + } else { + if (maxSelection && selectedValues.length >= maxSelection) { + announce(`Maximum ${maxSelection} selection(s) allowed`, "assertive"); + return; + } + const newSelectedValues = [...selectedValues, optionValue]; + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + } + + if (closeOnSelect) { + setIsPopoverOpen(false); + } + }; + + const handleClear = () => { + if (disabled) return; + if (multiple && minSelection && minSelection > 0) { + announce(`Minimum ${minSelection} selection(s) required`, "assertive"); + return; + } + setSelectedValues([]); + if (onValueChange) { + onValueChange([]); + } + setData(name, []); + }; + + const handleTogglePopover = () => { + if (disabled) return; + setIsPopoverOpen((prev) => !prev); + }; + + const clearExtraOptions = () => { + if (disabled) return; + const newSelectedValues = selectedValues.slice( + 0, + responsiveSettings.maxCount, + ); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + }; + + const toggleAll = () => { + if (disabled || !multiple) return; + const allOptions = getAllOptions().filter((option) => !option.disabled); + + if (selectedValues.length === allOptions.length) { + if (minSelection && minSelection > 0) { + announce( + `Minimum ${minSelection} selection(s) required`, + "assertive", + ); + return; + } + handleClear(); + } else { + const allValues = allOptions.map((option) => option.value); + if (maxSelection && allValues.length > maxSelection) { + announce(`Maximum ${maxSelection} selection(s) allowed`, "assertive"); + return; + } + setSelectedValues(allValues); + if (onValueChange) { + onValueChange(allValues); + } + setData(name, allValues); + } + + if (closeOnSelect) { + setIsPopoverOpen(false); + } + }; + + useEffect(() => { + if (!resetOnDefaultValueChange) return; + const prevDefaultValue = prevDefaultValueRef.current; + if (!arraysEqual(prevDefaultValue, defaultValue)) { + if (!arraysEqual(selectedValues, defaultValue)) { + setSelectedValues(defaultValue); + } + prevDefaultValueRef.current = [...defaultValue]; + } + }, [defaultValue, selectedValues, arraysEqual, resetOnDefaultValueChange]); + + const getWidthConstraints = () => { + const defaultMinWidth = screenSize === "mobile" ? "0px" : "200px"; + const effectiveMinWidth = minWidth || defaultMinWidth; + const effectiveMaxWidth = maxWidth || "100%"; + return { + minWidth: effectiveMinWidth, + maxWidth: effectiveMaxWidth, + width: autoSize ? "auto" : "100%", + }; + }; + + const widthConstraints = getWidthConstraints(); + + useEffect(() => { + if (!isPopoverOpen) { + setSearchValue(""); + } + }, [isPopoverOpen]); + + useEffect(() => { + const selectedCount = selectedValues.length; + const allOptions = getAllOptions(); + const totalOptions = allOptions.filter((opt) => !opt.disabled).length; + if (selectedCount !== prevSelectedCount.current) { + const diff = selectedCount - prevSelectedCount.current; + if (diff > 0) { + const addedItems = selectedValues.slice(-diff); + const addedLabels = addedItems + .map( + (value) => allOptions.find((opt) => opt.value === value)?.label, + ) + .filter(Boolean); + + if (addedLabels.length === 1) { + announce( + `${addedLabels[0]} selected. ${selectedCount} of ${totalOptions} options selected.`, + ); + } else { + announce( + `${addedLabels.length} options selected. ${selectedCount} of ${totalOptions} total selected.`, + ); + } + } else if (diff < 0) { + announce( + `Option removed. ${selectedCount} of ${totalOptions} options selected.`, + ); + } + prevSelectedCount.current = selectedCount; + } + + if (isPopoverOpen !== prevIsOpen.current) { + if (isPopoverOpen) { + announce( + `Dropdown opened. ${totalOptions} options available. Use arrow keys to navigate.`, + ); + } else { + announce("Dropdown closed."); + } + prevIsOpen.current = isPopoverOpen; + } + + if ( + searchValue !== prevSearchValue.current && + searchValue !== undefined + ) { + if (searchValue && isPopoverOpen) { + const filteredCount = allOptions.filter( + (opt) => + opt.label.toLowerCase().includes(searchValue.toLowerCase()) || + opt.value.toLowerCase().includes(searchValue.toLowerCase()), + ).length; + + announce( + `${filteredCount} option${ + filteredCount === 1 ? "" : "s" + } found for "${searchValue}"`, + ); + } + prevSearchValue.current = searchValue; + } + }, [selectedValues, isPopoverOpen, searchValue, announce, getAllOptions]); + + useEffect(() => { + if ( + minSelection !== undefined && + maxSelection !== undefined && + minSelection > maxSelection + ) { + console.error( + "MultiSelect: minSelection cannot be greater than maxSelection", + ); + } + if ( + !multiple && + (minSelection !== undefined || maxSelection !== undefined) + ) { + console.warn( + "MultiSelect: minSelection and maxSelection are ignored when multiple is false", + ); + } + if (minSelection !== undefined && minSelection < 0) { + console.error("MultiSelect: minSelection cannot be negative"); + } + if (maxSelection !== undefined && maxSelection < 1) { + console.error("MultiSelect: maxSelection must be at least 1"); + } + }, [minSelection, maxSelection, multiple]); + + return ( +
+
+
+ {politeMessage} +
+
+ {assertiveMessage} +
+
+ + +
+ Multi-select dropdown. Use arrow keys to navigate, Enter to select, + and Escape to close. +
+
+ {selectedValues.length === 0 + ? "No options selected" + : `${selectedValues.length} option${ + selectedValues.length === 1 ? "" : "s" + } selected: ${selectedValues + .map((value) => getOptionByValue(value)?.label) + .filter(Boolean) + .join(", ")}`} +
+ + + +
+ + ) : ( +
+

+ {placeholder} +

+ +
+ )} + + + setIsPopoverOpen(false)} + > + + {searchable && ( +
+
+ +
+ setSearchValue(e.target.value)} + onKeyDown={handleInputKeyDown} + className="w-[calc(100%-2.5rem-40px)] border-0 mx-9" + /> + } + tooltipContent={

{str(transDelete).ucFirst().value()}

} + type="button" + variant="ghost" + size="icon" + className="absolute top-1/2 right-0 transform -translate-y-1/2 text-muted-foreground" + onClick={() => setSearchValue("")} + disabled={searchValue.length < 1 || disabled} + /> +
+ )} + {searchable && ( +
+ Type to filter options. Use arrow keys to navigate results. +
+ )} + + {emptyIndicator || transNoResults} + {/* First option for select all items */} + {!hideSelectAll && !searchValue && multiple && ( + + !opt.disabled).length + } + aria-label={`Select all ${ + getAllOptions().length + } options`} + className="cursor-pointer gap-1.5 px-4 py-2 w-full h-auto min-h-10" + > +
!opt.disabled) + .length + ? "bg-primary text-primary-foreground" + : "opacity-50 [&_svg]:invisible", + )} + aria-hidden="true" + > + +
+ + ({str(transSelectAll).ucFirst().value()} + {getAllOptions().length > 20 + ? ` - ${getAllOptions().length} options` + : ""} + ) + +
+
+ )} + {/* List of items */} + {isGroupedOptions(filteredOptions) ? ( + filteredOptions.map((group) => ( + + {group.options.map((option) => { + const isSelected = selectedValues.includes( + option.value, + ); + return ( + toggleOption(option.value)} + role="option" + aria-selected={isSelected} + aria-disabled={option.disabled} + aria-label={`${option.label}${ + isSelected ? ", selected" : ", not selected" + }${option.disabled ? ", disabled" : ""}`} + className={cn( + "cursor-pointer gap-1.5 px-4 py-2 w-full h-auto min-h-10", + option.disabled && + "opacity-50 cursor-not-allowed", + )} + disabled={option.disabled} + > + + {option.icon && ( + + ); + })} + + )) + ) : ( + + {filteredOptions.map((option) => { + const isSelected = selectedValues.includes(option.value); + return ( + toggleOption(option.value)} + role="option" + aria-selected={isSelected} + aria-disabled={option.disabled} + aria-label={`${option.label}${ + isSelected ? ", selected" : ", not selected" + }${option.disabled ? ", disabled" : ""}`} + className={cn( + "cursor-pointer gap-1.5 px-4 py-2 w-full h-auto min-h-10", + option.disabled && "opacity-50 cursor-not-allowed", + )} + disabled={option.disabled} + > + + {option.icon && ( + + ); + })} + + )} +
+ {(closeButtonVisible || selectedValues.length > 0) && ( + +
+ {selectedValues.length > 0 && ( + {str(transClearList).ucFirst().value()}

+ } + className="w-full" + type="button" + variant="ghost" + size="default" + onClick={handleClear} + disabled={disabled} + /> + )} + {closeButtonVisible && selectedValues.length > 0 && ( + + )} + {closeButtonVisible && ( + {str(transClosePopover).ucFirst().value()}

+ } + className="w-full" + type="button" + variant="ghost" + size="default" + onClick={() => setIsPopoverOpen(false)} + disabled={disabled} + /> + )} +
+
+ )} +
+
+ {animation > 0 && selectedValues.length > 0 && ( + setIsAnimating(!isAnimating)} + /> + )} + + {helper && {helper}} + + + ); + }, +); + +MultiSelect.displayName = "MultiSelect"; +export type { MultiSelectOption, MultiSelectGroup, MultiSelectProps }; diff --git a/resources/ts/back/Components/Inputs/SimpleColorPicker.tsx b/resources/ts/back/Components/Inputs/SimpleColorPicker.tsx new file mode 100644 index 0000000..c2d949e --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleColorPicker.tsx @@ -0,0 +1,285 @@ +// * Packages +import { useState, useEffect, useRef, ReactNode } from "react"; +import { usePage } from "@inertiajs/react"; +import { SketchPicker, ColorResult } from "react-color"; +import { RefreshCwIcon, TrashIcon, ShuffleIcon } from "lucide-react"; +import { PresetColor } from "react-color/lib/components/sketch/Sketch"; +// * Components shadcn +import { Label } from "@/components/ui/label"; +import { Input } from "@/components/ui/input"; +import { + Popover, + PopoverTrigger, + PopoverContent, +} from "@/components/ui/popover"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import InputError from "@/back/Components/InputError"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import { cn } from "@/lib/utils"; + +type SimpleColorPickerProps = { + className?: string; + name: string; + id?: string; + label: ReactNode | string; + value: string | null; + placeholder?: string; + presetColors?: PresetColor[]; + randomize?: boolean; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + /* eslint-disable no-unused-vars */ + setData: (name: string, value: string | null) => void; +}; + +export default function SimpleColorPicker({ + className, + name, + id = name, + label, + value = null, + placeholder = "#ffffffff", + presetColors = [ + "#000000", // Black + "#ffffff", // White + "#ff0000", // Red + "#00ff00", // Vert + "#008080", // Teal + "#8a2be2", // Violet + "#0000ff", // Blue + "#ff7f50", // Coral + "#ffa500", // Orange + "#ffff00", // Yellow + ], + required = true, + disabled = false, + randomize = true, + parentErrors = null, + setData, +}: SimpleColorPickerProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + // Colors. + const [color, setColor] = useState(value); + const initialColor = useRef(value ?? "#ffffffff"); + + // Popover status. + const [open, setOpen] = useState(false); + + // Translations. + const transSelect = useTrans("uwil-backend::back.simple_color_picker.select"); + const transReset = useTrans("uwil-backend::back.simple_color_picker.reset"); + const transDelete = useTrans("uwil-backend::back.simple_color_picker.delete"); + + /** + * Check the format/structure of the selected color. + * + * @param val string + * @return boolean + */ + function isHex(val: string): boolean { + return /^#([0-9A-Fa-f]{3,4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(val); + } + + /** + * Convert ColorResult → HEXA. + * + * @param targetColor ColorResult + * @return string + */ + function toHEXA(targetColor: ColorResult): string { + const r = targetColor.rgb.r.toString(16).padStart(2, "0"); + const g = targetColor.rgb.g.toString(16).padStart(2, "0"); + const b = targetColor.rgb.b.toString(16).padStart(2, "0"); + const a = + Math.round((targetColor.rgb.a ?? 1) * 255) + .toString(16) + .padStart(2, "0") ?? "ff"; + return `#${r}${g}${b}${a}`; + } + + /** + * Generate random HEXA color. + */ + function randomColor(): string { + const r = Math.floor(Math.random() * 256) + .toString(16) + .padStart(2, "0"); + const g = Math.floor(Math.random() * 256) + .toString(16) + .padStart(2, "0"); + const b = Math.floor(Math.random() * 256) + .toString(16) + .padStart(2, "0"); + const a = Math.floor(Math.random() * 256) + .toString(16) + .padStart(2, "0"); // alpha + return `#${r}${g}${b}${a}`; + } + + /** + * Generate random color. + */ + function handleRandom(): void { + const hex = randomColor(); + setColor(hex); + setData(name, hex); + } + + /** + * On change color via picker. + * + * @param color ColorResult + * @return void + */ + function handleChange(c: ColorResult): void { + const hex = toHEXA(c); + setColor(hex); + } + + /** + * Update color via picker. + * + * @param targetColor ColorResult + * @return void + */ + function handleChangeComplete(targetColor: ColorResult): void { + const hex = toHEXA(targetColor); + setColor(hex); + setData(name, hex); + } + + /** + * Reset input color. + * + * @return void + */ + function handleReset(): void { + setColor(initialColor.current); + setData(name, initialColor.current); + } + + /** + * Clear input color. + * + * @return void + */ + function handleClear(): void { + setColor(null); + setData(name, null); + setOpen(false); + } + + /** + * Change color manually. + * + * @param val string + * @returns void + */ + function handleInput(val: string): void { + if (val === "") { + setColor(null); + setData(name, null); + return; + } + setColor(val); + + // Validate format. + if (isHex(val)) { + setData(name, val); + } + } + + useEffect(() => { + if (value !== color) setColor(value); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [value]); + + return ( +
+ +
+ {/* POPUP PICKER */} + + {/* Preview */} + + + + {/* Input HEX / RGBA */} + handleInput(e.target.value)} + placeholder={placeholder} + disabled={disabled} + className="flex-1" + /> + {/* POPUP CONTENT */} + + handleChange(newColor)} + onChangeComplete={(newCompleteColor) => + handleChangeComplete(newCompleteColor) + } + disableAlpha={false} + presetColors={presetColors} + /> + + + {/* Random Color */} + {randomize && ( + } + tooltipContent="Couleur aléatoire" + type="button" + variant="secondary" + size="icon" + onClick={() => handleRandom()} + disabled={disabled} + /> + )} + {/* RESET/DELETE */} + } + tooltipContent={str(transReset).ucFirst().value()} + type="button" + variant="secondary" + size="icon" + onClick={() => handleReset()} + disabled={disabled} + /> + {!required && ( + } + tooltipContent={str(transDelete).ucFirst().value()} + type="button" + variant="destructive" + size="icon" + onClick={() => handleClear()} + disabled={disabled} + /> + )} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleDatePicker.tsx b/resources/ts/back/Components/Inputs/SimpleDatePicker.tsx new file mode 100644 index 0000000..b307406 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleDatePicker.tsx @@ -0,0 +1,219 @@ +// * Other +import { fr, enUS } from "date-fns/locale"; +import { usePage } from "@inertiajs/react"; +import { CalendarIcon, RefreshCcw } from "lucide-react"; +import { ReactNode } from "react"; +// * Components shadcn +import { Calendar } from "@/components/ui/calendar"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { Button } from "@/components/ui/button"; +import { Label } from "@/components/ui/label"; +import { Separator } from "@/components/ui/separator"; +import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; +// * Other +import InputError from "@/back/Components/InputError"; +import { cn, GetFormatedDate } from "@/lib/utils"; +import str from "@/hooks/use-string"; +import useLocale from "@/store/use-locale-store"; +import useTrans from "@/hooks/use-translations"; + +type SimpleDatePickerProps = { + name: string; + placeholder?: string; + date?: Date | null; + required?: boolean; + disabled?: boolean; + className?: string; + label: ReactNode | string; + hasTime?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: Date | null) => void; +}; + +export default function SimpleDatePicker({ + name, + placeholder = "Sélectionner une date", + date, + required = false, + disabled = false, + className, + label, + hasTime = false, + parentErrors = null, + setData, +}: SimpleDatePickerProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + let calendarLocale = fr; + switch (usePage().props.locale) { + case "en": + calendarLocale = enUS; + break; + default: + calendarLocale = fr; + break; + } + + const parsedDate = date ? new Date(date) : undefined; + const hours = Array.from({ length: 24 }, (_, i) => i); + const minutes = Array.from({ length: 12 }, (_, i) => i * 5); + const handleDateSelect = (selectedDate: Date | undefined) => { + if (selectedDate) { + setData(name, selectedDate); + } + }; + + const resetDate = () => { + setData(name, null); + }; + + function handleTimeChange(type: "hour" | "minute", value: string) { + const currentDate = parsedDate || new Date(); + const newDate = new Date(currentDate); + if (type === "hour") { + const hour = parseInt(value, 10); + newDate.setHours(hour); + } else if (type === "minute") { + newDate.setMinutes(parseInt(value, 10)); + } + setData(name, newDate); + } + + return ( +
+ + + + + + +
+ + {hasTime && ( +
+ +
+ {hours.map((hour) => ( + + ))} +
+ +
+ +
+ {minutes.map((minute) => ( + + ))} +
+ +
+
+ )} +
+
+ + +
+
+
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleNumber.tsx b/resources/ts/back/Components/Inputs/SimpleNumber.tsx new file mode 100644 index 0000000..e6e6418 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleNumber.tsx @@ -0,0 +1,92 @@ +// * Packages +import { useState, useEffect, ReactNode } from "react"; +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +// * Other +import InputError from "@/back/Components/InputError"; +import { cn } from "@/lib/utils"; +import useTrans from "@/hooks/use-translations"; + +type SimpleNumberProps = { + className?: string; + name: string; + label: ReactNode | string; + value?: number; + id?: string; + step?: number; + limits?: Record; + placeholder?: string; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: string) => void; +}; + +export default function SimpleNumber({ + className, + value = 0, + name, + label, + id = name, + step = 1, + limits, + placeholder = "uwil-backend::back.enter_number_here", + required = true, + disabled = false, + parentErrors = null, + setData, +}: SimpleNumberProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + const localLimits = { + min: limits?.min ? limits.min : 1, + max: limits?.max ? limits.max : 1000, + }; + const safeValue = + value >= localLimits.min && value <= localLimits.max + ? value + : localLimits.min; + + const [inputValue, setInputValue] = useState(safeValue); + + useEffect(() => { + setInputValue(safeValue); + setData(name, String(safeValue)); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [safeValue]); + + return ( +
+ +
+ { + setInputValue(Number(e.target.value)); + setData(name, e.target.value); + }} + required={required} + disabled={disabled} + className={cn("w-full", { + "border-destructive/50": localErrors[name], + })} + /> +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleString.tsx b/resources/ts/back/Components/Inputs/SimpleString.tsx new file mode 100644 index 0000000..e305877 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleString.tsx @@ -0,0 +1,111 @@ +// * Packages +import { EyeIcon, EyeOffIcon } from "lucide-react"; +import { useState, useEffect, useRef, ReactNode } from "react"; +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Button } from "@/components/ui/button"; +// * Other +import InputError from "@/back/Components/InputError"; +import WordCounter from "@/back/Components/WordCounter"; +import { cn } from "@/lib/utils"; +import useTrans from "@/hooks/use-translations"; + +type SimpleStringProps = { + className?: string; + name: string; + label: ReactNode | string; + value?: string; + id?: string; + type?: string; + placeholder?: string; + wordCounter?: boolean; + required?: boolean; + disabled?: boolean; + /** Pattern is regex without antislash */ + pattern?: string; + checkVisibility?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: string) => void; +}; + +export default function SimpleString({ + className, + value = "", + name, + label, + id = name, + type = "text", + placeholder = "uwil-backend::back.enter_text_here", + wordCounter = true, + required = true, + disabled = false, + pattern, + checkVisibility = false, + parentErrors = null, + setData, +}: SimpleStringProps) { + const [isVisible, setIsVisible] = useState(checkVisibility); + const inputRef = useRef(null); + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + useEffect(() => { + if (inputRef.current && inputRef.current.value !== value) { + inputRef.current.value = value; + } + }, [value]); + + return ( +
+ + {wordCounter && } +
+ { + setData(name, e.target.value); + }} + required={required} + disabled={disabled} + className={cn( + type === "password" || checkVisibility + ? "w-[calc(100%-40px-0.25rem)]" + : "w-full", + { "border-destructive/50": localErrors[name] }, + )} + pattern={pattern ?? undefined} + /> + {(type === "password" || checkVisibility) && ( + + )} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleSwitch.tsx b/resources/ts/back/Components/Inputs/SimpleSwitch.tsx new file mode 100644 index 0000000..e10d164 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleSwitch.tsx @@ -0,0 +1,66 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { ReactNode } from "react"; +// * Components shadcn +import { Switch } from "@/components/ui/switch"; +import { Label } from "@/components/ui/label"; +// * Other +import InputError from "@/back/Components/InputError"; +import { cn } from "@/lib/utils"; + +type SimpleSwitchProps = { + name: string; + checked?: boolean; + label?: ReactNode | string; + leftHelper?: string; + rightHelper?: string; + className?: string; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: boolean) => void; +}; + +export default function SimpleSwitch({ + name, + checked, + label, + leftHelper, + rightHelper, + className = "", + required = false, + disabled = false, + parentErrors = null, + setData, +}: SimpleSwitchProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + return ( +
+ {label && ( + + )} +
+ {leftHelper && {leftHelper}} + setData(name, value)} + required={required} + checked={checked} + disabled={disabled} + className={cn({ + "border-destructive/50": localErrors[name], + })} + /> + {rightHelper && {rightHelper}} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleTextarea.tsx b/resources/ts/back/Components/Inputs/SimpleTextarea.tsx new file mode 100644 index 0000000..03d8ed1 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleTextarea.tsx @@ -0,0 +1,74 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Label } from "@/components/ui/label"; +import { Textarea } from "@/components/ui/textarea"; +// * Other +import InputError from "@/back/Components/InputError"; +import WordCounter from "@/back/Components/WordCounter"; +import useTrans from "@/hooks/use-translations"; +import { cn } from "@/lib/utils"; + +type SimpleTextareaProps = { + className?: string; + name: string; + label: string; + value?: string; + id?: string; + placeholder?: string; + wordCounter?: boolean; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: string) => void; +}; + +export default function SimpleTextarea({ + className, + name, + label, + value = "", + id = name, + placeholder = "uwil-backend::back.enter_text_here", + wordCounter = true, + required = true, + disabled = false, + parentErrors = null, + setData, +}: SimpleTextareaProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + return ( +
+ + {wordCounter && } +
+ -
- -@for ($i = 1; $i < 6; $i++) -

Fichier joint {{ $i }}

-
- - @if (isset($ticket) and $ticket->file !== null) - @php - $fileNumber = 'file'. $i; - @endphp -
- -
- @endif -
-
-@endfor - -@can('changeInternalStatus', App\Models\Ticket::class) -
- is_internal)) checked @endif> - -
-@endcan diff --git a/resources/views/bo/pages/tickets/index.blade.php b/resources/views/bo/pages/tickets/index.blade.php deleted file mode 100644 index 208d498..0000000 --- a/resources/views/bo/pages/tickets/index.blade.php +++ /dev/null @@ -1,445 +0,0 @@ -@extends('layout.app') - -@section('title', __('models.classes.tickets')) -@section('description', __('Liste de tous les :model', ['model' => __('models.classes.tickets')])) -@section('bodyClass', 'content ticketsIndex') - -@section('content') - @php - $userPr = Auth::user()->sites ?? collect([]); - @endphp -
-
-
-

{{ __('Tickets') }} - @if (Session::get('tickets.st') == \App\Enums\Tickets\TicketStatusEnum::archived->value) - (Archivés) - @endif -

- @if (session('tickets.pr')) - @php - $site = \App\Models\Site::query()->find(session('tickets.pr')); - $projectManager = $site ? $site->projectManager : false; - @endphp - @if ($projectManager) -

{{ __('Chef de projet') }} : {{ $projectManager->name }}

- @endif - @endif -
- -
-
-
-
-
-
-
-
- {{-- All sites --}} -
-
- - - @push('scripts') - - @endpush -
-
- {{-- All types --}} -
-
- - - @push('scripts') - - @endpush -
-
- {{-- All status --}} -
-
- - - @push('scripts') - - @endpush -
-
- {{-- All assigned to --}} - @can('assignTickets', App\Models\Ticket::class) -
-
- - - @push('scripts') - - @endpush -
-
- @endcan - {{-- Search form --}} -
-
-
- - - -
- @push('scripts') - - @endpush -
-
-
-
-
-
-
-
- @if (session('tickets.pr') && session('tickets.st') != \App\Enums\Tickets\TicketStatusEnum::archived->value) - @if (session('tickets.or')) - -   {{ __('see_mode', ['mode' => __('validation.custom.default')]) }} - - @else - -   {{ __('see_mode', ['mode' => __('validation.custom.priority')]) }} - - @endif - @endif - @if (session('tickets.st') == \App\Enums\Tickets\TicketStatusEnum::archived->value) - - - - @else - - - - @endif - -  {{ __(' le tri') }} - -
-
-
-
-
-
- - - @php - $cols = []; - if (session('tickets.or')) { - $cols = array_merge($cols, [ - 'order' => Str::ucfirst(__('validation.custom.priority')), - ]); - } - $cols = array_merge($cols, [ - 'id' => '#', - ]); - if (!session()->has('tickets.pr') && !session('tickets.or')) { - $cols = array_merge($cols, [ - 'site' => Str::ucfirst(__('Website')), - ]); - } - $cols = array_merge($cols, [ - 'type' => Str::ucfirst(__('validation.custom.type')), - 'status' => Str::ucfirst(__('validation.attributes.status')), - 'title' => Str::ucfirst(__('validation.attributes.name')), - ]); - if (session()->has('tickets.ty') && intval(session('tickets.ty')) === \App\Enums\Tickets\TicketTypeEnum::evolution->value) { - $cols = array_merge($cols, [ - 'estimate' => Str::ucfirst(__('validation.custom.estimate')), - ]); - } - if (Auth::user()->isAdmin()) { - $cols = array_merge($cols, [ - 'tickets' => Str::ucfirst(__('validation.custom.tickets')), - 'assigned_to' => Str::ucfirst(__('validation.custom.assigned_to')), - ]); - } - $cols = array_merge($cols, [ - 'date_mep' => Str::ucfirst(__('validation.custom.date_mep')), - 'created_at' => Str::ucfirst(__('validation.attributes.created_at')), - ]); - @endphp - @include('bo.modules.table-col-sorter', [ - 'cols' => $cols, - 'ignore' => session('tickets.or') ? array_keys($cols) : ['id', 'site', 'status', 'tickets', 'estimate'], - ]) - - - @if (!count($tickets)) - - - - @endif - @foreach ($tickets as $key => $ticket) - - {{-- order --}} - @if (session('tickets.or')) - @include('bo.modules.change-model-order-select', [ - 'model' => $ticket, - 'value' => $key + 1 + ($tickets->currentPage() - 1) * $tickets->perPage(), - ]) - @endif - {{-- id --}} - - @if (!session()->has('tickets.pr') && !session('tickets.or')) - {{-- site --}} - - @endif - {{-- type --}} - - {{-- status --}} - - {{-- title --}} - - {{-- estimate --}} - @if (session()->has('tickets.ty') && intval(session('tickets.ty')) === \App\Enums\Tickets\TicketTypeEnum::evolution->value) - - @endif - {{-- tag --}} - @php - $routeName = request()->route()->getName(); - @endphp - @can('assignLabels', App\Models\Ticket::class) - - @endcan - {{-- assigned_to / date_mep --}} - @if (Auth::user()->isAdmin()) - - @endif - - - - - @endforeach - -
-

{{ __('Aucun ticket') }}

-
-
- {{ $ticket->id }}   - @if ($ticket->is_internal) - - @endif - -
-
-
- @if (Auth::user()->isAdmin()) - {{ $ticket->site->name }} - @else - {{ $ticket->site->name }} - @endif -
-
- {{ $ticket->type->label() }} - -
- - - {{ $ticket->status->label() }} - - -
-
- {{ $ticket->title }} - - {{ $ticket->estimation?->amount ? sprintf('%sj', $ticket->estimation->amount) : 'En cours' }} - - - @foreach ($ticket->labels as $label) - {{ $label->name }} - @endforeach - - {{ $ticket->assignedUser ? $ticket->assignedUser->name : __('Personne') }} - - {{ is_null($ticket->date_mep) ? '-' : $ticket->date_mep->format('d/m/Y') }} - {{ Carbon\Carbon::parse($ticket->created_at)->format('d/m/Y à H:i') }} -
-
-
- @php - $ticket_files = $ticket->getFiles(); - @endphp - @foreach ($ticket_files as $key => $file) - @if ($file !== null && (\App\Lib\Helpers\ToolboxHelper::isImageFile($file) || \App\Lib\Helpers\ToolboxHelper::isPdfFile($file))) - - - @break - @endif - @endforeach - {{-- Modal du ticket --}} - - - - @if (auth()->user()->isAdmin()) - - @endif - @can('changeStatus', $ticket) - @if (!$ticket->status->equals(\App\Enums\Tickets\TicketStatusEnum::archived)) -
- @method('PUT') - @csrf - -
- @endif - @endcan -
-
- - -
-
- {{ $tickets->withQueryString()->links() }} -
-
-
-
-
-
-@endsection diff --git a/resources/views/bo/pages/tickets/show.blade.php b/resources/views/bo/pages/tickets/show.blade.php deleted file mode 100644 index 587e197..0000000 --- a/resources/views/bo/pages/tickets/show.blade.php +++ /dev/null @@ -1,355 +0,0 @@ -@extends('layout.app') - -@section('title', __('Aperçu d\'un :model', ['model' => Str::singular(__('models.classes.tickets'))])) -@section('description', __('Aperçu d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.tickets'))])) -@section('bodyClass', 'content ticketsShow') - -@section('content') -
-

- - {{ $ticket->full_name }} - @if ($ticket->is_internal)@endif - {{ $ticket->type->label() }} - @if (auth()->user()->isAdmin()) - - @endif -

-
- @can('suscribeToTicket', $ticket) -
- @csrf -
- - -
- @push('scripts') - - @endpush -
- @endcan - @can('assignTo', $ticket) -
- @csrf -
- - - @push('scripts') - - @endpush -
-
- @endcan - @can('changeStatus', $ticket) -
- @csrf -
- - - @push('scripts') - - @endpush -
-
- @endcan - @if ($ticket->status->equals(\App\Enums\Tickets\TicketStatusEnum::archived)) - @can('reopen', $ticket) -
- @csrf - -
- @endcan - @endif -
-
-

{{ $ticket->title }}

- @can('assignLabels', App\Models\Ticket::class) -
-
- @foreach ($ticket->labels as $label) - {{ $label->name }} - @endforeach -
-
- @endcan -
- @if ($ticket->estimation) - @include('estimations.pendingCard', ['ticket' => $ticket, 'estimation' => $ticket->estimation]) -
- @endif -
-
- @if ($ticket->site->projectManager) -

- {{ __("Chef de projet") }} : {{ $ticket->site->projectManager->name }} -

- @endif -
- @can('estimate', $ticket) - {{ __('Estimation') }} - @endcan - @can('createMessage', $ticket) - - @endcan -
-
- {{-- if the user can create message, the modal is displayed --}} - @can('createMessage', $ticket) - - @endcan - {{-- modal end --}} - {{-- Section to display the messages --}} - @foreach ($messages as $message) - @if ($message->type->equals(\App\Enums\MessageTypeEnum::public) || Auth::user()->can('createPrivateMessage', $ticket)) - @if ($message->user_id === null) -
- {!! nl2br(clean($message->message)) !!} - Le - {{ \Carbon\Carbon::parse($message->created_at)->format('d/m/Y à H:i') }} - ({{ __('Message système') }}) -
- @else -
- @if ($message->type->equals(\App\Enums\MessageTypeEnum::private)) -    - @endif - {!! \App\Lib\Helpers\ToolboxHelper::plainToHtml($message->message) !!} - @foreach ([$message->file, $message->file2, $message->file3] as $file) - @if ($file !== null) -
Ouvrir la pièce jointe - @endif - @endforeach -

- - {!! __('Créé le :date par :userName', [ - 'date' => \Carbon\Carbon::parse($message->created_at)->format('d/m/Y à H:i'), - 'userName' => $message->user ? $message->user->name : __('Utilisateur supprimé'), - ]) !!} - - @if ($message->user_id === Auth::user()->id) - @can('updateMessage', $ticket, $message) - - - @endcan - @endif -
- @endif - @endif - @endforeach - {{-- End display message --}} -
-
-

{{ __('Description') }}

-

{!! clean(\App\Lib\Helpers\ToolboxHelper::plainToHtml($ticket->text)) !!}

- {!! __('Créé le :date par :userName', [ - 'date' => \Carbon\Carbon::parse($ticket->created_at)->format('d/m/Y à H:i'), - 'userName' => $ticket->user ? $ticket->user->name : __('Utilisateur supprimé'), - ]) !!} -
- @php - $ticket_files = $ticket->getFiles(); - @endphp - @if (!empty(Arr::whereNotNull($ticket_files))) -
-

{{ __('Pièces jointes') }}

- @foreach ($ticket_files as $key => $file) - @if (!is_null($file)) - - @endif - @endforeach -
- @endif - @php - $linkedTickets = $ticket->linkedTickets; - @endphp - @if (!$linkedTickets->isEmpty() or auth()->user()->can('linkTicket', $ticket)) -
-
-
-

{{ __('Tickets liés') }}

-
- @can('linkTicket', $ticket) -
- -
- @endcan -
- @foreach ($linkedTickets as $linked) -
- @can('linkTicket', $ticket) - - @endcan -
- @endforeach -
- @endif -
-
- @can('createGitlabIssue', $ticket) -
- @csrf - -
- @else - @can('isAdmin') - @if (!\is_null($ticket->gitlab_issue)) -
-

- {{ __("Lien vers l'issue Gitlab : ") }} - {{ __('Ouvrir') }} -

- @endif - @endcan - @endcan -
-@endsection diff --git a/resources/views/bo/pages/users/create.blade.php b/resources/views/bo/pages/users/create.blade.php deleted file mode 100644 index e9341f2..0000000 --- a/resources/views/bo/pages/users/create.blade.php +++ /dev/null @@ -1,46 +0,0 @@ -@extends('layout.app', ['brParam' => $userModel]) - -@section('title', __('Création d\'un :model', ['model' => Str::singular(__('models.classes.users'))])) -@section('description', __('Création d\'un tout nouveau :model', ['model' => Str::singular(__('models.classes.users'))])) -@section('breadcrumb', request()->route()->getName()) - -@section('content') -
-
- - - - @include('breadcrumbs.breadcrumb-body', ['brParam' => $userModel]) -
-
- -
-
-
- @csrf - @include('bo.pages.users.form-inputs') -
-
- -
-
-
-@endsection diff --git a/resources/views/bo/pages/users/edit.blade.php b/resources/views/bo/pages/users/edit.blade.php deleted file mode 100644 index cc5f621..0000000 --- a/resources/views/bo/pages/users/edit.blade.php +++ /dev/null @@ -1,62 +0,0 @@ -@extends('layout.app', ['brParam' => $userModel]) - -@section('title', __('Édition d\'un :model', ['model' => Str::singular(__('models.classes.users'))])) -@section('description', __('Édition d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.users'))])) -@section('breadcrumb', request()->route()->getName()) - -@section('content') -
-
- - - - @include('breadcrumbs.breadcrumb-body', ['brParam' => $userModel]) -
-
-
- @csrf - @method('DELETE') -
- - -
-
-
-
-
- @csrf - @method('PUT') - @include('bo.pages.users.form-inputs') -
-
- -
-
-
-@endsection diff --git a/resources/views/bo/pages/users/form-inputs.blade.php b/resources/views/bo/pages/users/form-inputs.blade.php deleted file mode 100644 index ee0e1e0..0000000 --- a/resources/views/bo/pages/users/form-inputs.blade.php +++ /dev/null @@ -1,154 +0,0 @@ -
- {{-- NAME --}} -
-
- {{ Str::ucfirst(__('validation.attributes.name')) }} -
-
- @include('bo.partials.inputs.varchar', [ - 'id' => 'userName', - 'label' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.name')), - 'model' => Str::singular(__('models.classes.users')), - ]), - 'hasWordCounter' => true, - 'name' => 'name', - 'required' => true, - 'model' => $userModel ?? null, - 'helper' => __('validation.between.string', [ - 'attribute' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.name')), - 'model' => Str::singular(__('models.classes.users')), - ]), - 'min' => 3, - 'max' => 255, - ]), - 'placeholder' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.name')), - 'model' => Str::singular(__('models.classes.users')), - ]), - ]) -
-
-
-
- {{-- EMAIL --}} -
-
- {{ Str::ucfirst(__('validation.attributes.email')) }} -
-
- @include('bo.partials.inputs.varchar', [ - 'id' => 'userEmail', - 'label' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.email')), - 'model' => Str::singular(__('models.classes.users')), - ]), - 'hasWordCounter' => true, - 'name' => 'email', - 'required' => true, - 'model' => $userModel ?? null, - 'helper' => __('validation.between.string', [ - 'attribute' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.email')), - 'model' => Str::singular(__('models.classes.users')), - ]), - 'min' => 3, - 'max' => 255, - ]), - 'placeholder' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.email')), - 'model' => Str::singular(__('models.classes.users')), - ]), - ]) -
-
-
-
- {{-- ROLE --}} -
-
- {{ __('Role') }} -
-
- @include('bo.partials.inputs.tinyint-enum', [ - 'id' => 'userRole', - 'label' => __('crud.minicrud.associated', [ - 'entity' => 'Role', - ]), - 'name' => 'role', - 'model' => $userModel ?? null, - 'required' => true, - 'associatedModels' => \App\Enums\Users\RoleEnum::toArray(), - 'helper' => __('crud.minicrud.select', [ - 'entity' => 'role', - ]), - ]) -
-
-
-
- {{-- SITES --}} -
-
- {{ __('models.classes.sites') }} -
-
- @include('bo.partials.inputs.pivot-belongsToMany', [ - 'id' => 'userSites', - 'label' => __(':model associés', [ - 'model' => __('models.classes.sites') - ]), - 'name' => 'sites', - 'model' => $userModel ?? null, - 'itemsList' => $siteModels, - 'itemLimit' => [0, count($siteModels)], - 'placeholder' => __('Rechercher un :model', [ - 'model' => Str::singular(__('models.classes.sites')), - ]), - 'helper' => __('Séléctionnez le ou les :model1 à associer à cet :model2 (minimum :min, maximum :max)', [ - 'model1' => __('models.classes.sites'), - 'model2' => Str::singular(__('models.classes.users')), - 'min' => 0, - 'max' => count($siteModels), - ]), - 'required' => true, - ]) -
-
-
-
- {{-- GITLAB_USER_ID --}} -
-
- {{ __("ID de l'utilisateur Gitlab") }} -
-
- @include('bo.partials.inputs.int-number', [ - 'id' => 'siteGitlabUserId', - 'label' => __("ID de l'utilisateur Gitlab"), - 'name' => 'gitlab_id', - 'required' => false, - 'model' => $userModel ?? null, - 'helper' => __("ID de l'utilisateur Gitlab"), - 'step' => 1, - ]) -
-
-
-
-
- -@push('scripts') - -@endpush diff --git a/resources/views/bo/pages/users/index.blade.php b/resources/views/bo/pages/users/index.blade.php deleted file mode 100644 index aa2bb66..0000000 --- a/resources/views/bo/pages/users/index.blade.php +++ /dev/null @@ -1,70 +0,0 @@ -@extends('layout.app') - -@section('title', __('models.classes.users')) -@section('description', __('Liste de tous les :model', ['model' => __('models.classes.users')])) - -@section('content') -
- @include('breadcrumbs.breadcrumb-body') - - - -
-@include('bo.modules.search-bar') - - @if (count($userModels) > 0) - - @include('bo.modules.table-col-sorter', [ - 'cols' => [ - 'name' => Str::ucfirst(__('validation.attributes.name')), - 'email' => Str::ucfirst(__('validation.attributes.email')), - 'role' => Str::ucfirst(__('validation.attributes.role')), - 'sites' => Str::ucfirst(__('validation.attributes.sites')) - ], - ]) - - - @foreach ($userModels as $userModel) - - - - - - - - @endforeach - - @else - - - - @endif -
{{ $userModel->name }}{{ $userModel->email }}{{ $userModel->role->label() }}{{ collect(json_decode($userModel->sites))->implode('name', ', ') }} -
- - - - @csrf - @method('DELETE') - -
-
{{ __('crud.other.no_model_found', ['model' => Str::singular(__('models.classes.users'))]) }}
-{!! $userModels->links() !!} -@endsection diff --git a/resources/views/bo/pages/users/settings.blade.php b/resources/views/bo/pages/users/settings.blade.php deleted file mode 100644 index d408ab9..0000000 --- a/resources/views/bo/pages/users/settings.blade.php +++ /dev/null @@ -1,66 +0,0 @@ -@extends('layout.app') - -@section('title', __('Paramètres')) -@section('description', __('Paramètres de l\':model :user', ['model' => Str::singular(__('models.classes.users')), 'user' => auth()->user()->name])) - -@section('content') -
-
-
-
-
{{ __('Définir un site comme favori') }}
- -
- @php - $user = auth()->user(); - @endphp -
- @csrf -
-
- - -
-
-
-
-
-
-
{{ __('Réinitialisation de mot de passe') }}
- -
- @if (session('status')) - - @endif - @error('email') - - @endif - - -
- @csrf -
-
- -
-
-
-
-
-
-
-
-@endsection diff --git a/resources/views/bo/partials/inputs/bigint-foreign-id.blade.php b/resources/views/bo/partials/inputs/bigint-foreign-id.blade.php deleted file mode 100644 index dcf9d41..0000000 --- a/resources/views/bo/partials/inputs/bigint-foreign-id.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -@if(!empty($label)) - -@endif - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/date.blade.php b/resources/views/bo/partials/inputs/date.blade.php deleted file mode 100644 index d5a69c2..0000000 --- a/resources/views/bo/partials/inputs/date.blade.php +++ /dev/null @@ -1,15 +0,0 @@ - - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/int-color.blade.php b/resources/views/bo/partials/inputs/int-color.blade.php deleted file mode 100644 index b42f1e9..0000000 --- a/resources/views/bo/partials/inputs/int-color.blade.php +++ /dev/null @@ -1,71 +0,0 @@ - -@if(!empty($label)) - -@endif -@if(isset($appendText)) -
- @endif - - @if(isset($appendText)) - -
-@endif -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) - -@push('scripts') - -@endpush diff --git a/resources/views/bo/partials/inputs/int-number.blade.php b/resources/views/bo/partials/inputs/int-number.blade.php deleted file mode 100644 index 7e1b841..0000000 --- a/resources/views/bo/partials/inputs/int-number.blade.php +++ /dev/null @@ -1,42 +0,0 @@ -@if(!empty($label)) - -@endif -
- - @if(isset($appendText)) - - @endif -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id.'Help', - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php b/resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php deleted file mode 100644 index 10f1ea4..0000000 --- a/resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -@if(!empty($label)) - -@endif -@php -$data = [ - 'name' => $name, - 'value' => old($name, $model->{$name} ?? []) ?? [], - 'placeholder' => $placeholder, - 'itemsList' => $itemsList, - 'itemLimit' => $itemLimit ?? null, - 'errors' => $errors->getBag('default')->getMessages() ?? [] -]; -@endphp -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper, -]) diff --git a/resources/views/bo/partials/inputs/publish-dates.blade.php b/resources/views/bo/partials/inputs/publish-dates.blade.php deleted file mode 100644 index cedd68e..0000000 --- a/resources/views/bo/partials/inputs/publish-dates.blade.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - @include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => (isset($model) and $model->{$name}) ? __('Leave empty for immediate display of the slider.') : __('Empty for immediate display of the slider.') - ]) diff --git a/resources/views/bo/partials/inputs/search-belongs-to-dropdown.blade.php b/resources/views/bo/partials/inputs/search-belongs-to-dropdown.blade.php deleted file mode 100644 index 571de8e..0000000 --- a/resources/views/bo/partials/inputs/search-belongs-to-dropdown.blade.php +++ /dev/null @@ -1,28 +0,0 @@ - -@php -if (old($name)) { - $model = $targetModel::find(old($name, [])); - $modelSelected = [ - 'id' => $model->id, - 'name' => $model->name, - 'value' => $model->id, - ]; -} -$data = [ - 'readonly' => $readonly, - 'name' => $name, - 'targetModel' => $targetModel, - 'routeName' => $routeName, - 'modelRelated' => $modelRelated, - 'modelSelected' => $modelSelected, - 'placeholder' => $placeholder, -]; -@endphp -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper, -]) diff --git a/resources/views/bo/partials/inputs/select-multiple-enum.blade.php b/resources/views/bo/partials/inputs/select-multiple-enum.blade.php deleted file mode 100644 index a4f3dfc..0000000 --- a/resources/views/bo/partials/inputs/select-multiple-enum.blade.php +++ /dev/null @@ -1,16 +0,0 @@ -@php -$data = [ - "name" => $name, - "label" => $label, - "value" => $value ?? [], - "placeholder" => $placeholder, - "itemsSelected" => $itemsSelected, - "itemsList" => $itemsList, - "itemLimit" => $itemLimit, - "showSpecificItem" => $showSpecificItem ?? null, - "errors" => $errors->getBag("default")->getMessages() ?? [], - 'helper' => $helper, - 'required' => $required -]; -@endphp -
diff --git a/resources/views/bo/partials/inputs/text-html.blade.php b/resources/views/bo/partials/inputs/text-html.blade.php deleted file mode 100644 index 17b9af0..0000000 --- a/resources/views/bo/partials/inputs/text-html.blade.php +++ /dev/null @@ -1,20 +0,0 @@ -@if(!empty($label)) - -@endif -@php -$data = [ - 'name' => $name, - 'text' => old($name, $model->{$name} ?? $value ?? '') -]; -@endphp -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper ?? __('crud.minicrud.text_warning', ['number' => 15]) . '. ' . __('validation.min.string', [ - 'attribute' => $input['label'], - 'min' => 15 - ]), -]) diff --git a/resources/views/bo/partials/inputs/text-list-items.blade.php b/resources/views/bo/partials/inputs/text-list-items.blade.php deleted file mode 100644 index 5641ec9..0000000 --- a/resources/views/bo/partials/inputs/text-list-items.blade.php +++ /dev/null @@ -1,31 +0,0 @@ -
-
-
- -
-
-
-
- @php - $data = [ - 'itemList' => old($name, $model->{$name} ?? []) ?? [], - 'itemColumns' => $itemColumns, - 'itemType' => $itemType, - 'itemLimit' => $itemLimit ?? [], - 'inputName' => $name, - 'inputPlaceholder' => $inputPlaceholder, - 'header' => $header ?? false, - 'errors' => $errors->getBag('default')->getMessages() ?? [] - ]; - @endphp -
- @include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper, - ]) -
-
-
diff --git a/resources/views/bo/partials/inputs/timestamp-datetime.blade.php b/resources/views/bo/partials/inputs/timestamp-datetime.blade.php deleted file mode 100644 index ea9c701..0000000 --- a/resources/views/bo/partials/inputs/timestamp-datetime.blade.php +++ /dev/null @@ -1,15 +0,0 @@ - - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/tinyint-boolean.blade.php b/resources/views/bo/partials/inputs/tinyint-boolean.blade.php deleted file mode 100644 index 5e4440d..0000000 --- a/resources/views/bo/partials/inputs/tinyint-boolean.blade.php +++ /dev/null @@ -1,14 +0,0 @@ -
- - {$name} ?? false)))) checked @endif> -
-@include('modules.input-error', [ - 'inputName' => $name, 'helperId' => $id."Help", 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/tinyint-enum.blade.php b/resources/views/bo/partials/inputs/tinyint-enum.blade.php deleted file mode 100644 index 302f187..0000000 --- a/resources/views/bo/partials/inputs/tinyint-enum.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -@if(!empty($label)) - -@endif - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/varchar-multiline.blade.php b/resources/views/bo/partials/inputs/varchar-multiline.blade.php deleted file mode 100644 index 6906f56..0000000 --- a/resources/views/bo/partials/inputs/varchar-multiline.blade.php +++ /dev/null @@ -1,27 +0,0 @@ -{{-- $id : id de l'input --}} -{{-- $label : Libellé de l'input --}} -{{-- $name : name de l'input --}} -{{-- $model : instance du model --}} -{{-- $required : l'input est obligatoire ? (true/false) --}} -{{-- $placeholder : texte visible dans l'input lorsque son contenu est vide --}} -{{-- $helper : texte visible en dessous de l'input --}} - -@php -$data = [ - 'id' => $id, - 'class' => 'form-control', - 'name' => $name, - 'placeholder' => $placeholder, - 'ariaDescribedby' => "{$id}Help", - 'required' => $required, - 'value' => old($name, $model->{$name} ?? '') -]; -@endphp -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/varchar-picture.blade.php b/resources/views/bo/partials/inputs/varchar-picture.blade.php deleted file mode 100644 index c054913..0000000 --- a/resources/views/bo/partials/inputs/varchar-picture.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -@php -$data = [ - 'id' => $id, - 'name' => $name, - 'helper' => $helper, - 'width' => $width, - 'height' => $height, - 'value' => $model->{$name} ?? $value ?? '', - 'preview' => $preview ?? false, - 'browseEvent' => $browseEvent ?? false, - 'required' => $required ?? false, -]; -@endphp -
-@include('modules.input-error', ['inputName' => $name, 'helper' => null]) diff --git a/resources/views/bo/partials/inputs/varchar.blade.php b/resources/views/bo/partials/inputs/varchar.blade.php deleted file mode 100644 index fa79d0a..0000000 --- a/resources/views/bo/partials/inputs/varchar.blade.php +++ /dev/null @@ -1,26 +0,0 @@ -@if(!empty($label)) - -@endif -@if(!empty($hasWordCounter ?? false)) -
$id])'>
-@endif - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/breadcrumbs/breadcrumb-body.blade.php b/resources/views/breadcrumbs/breadcrumb-body.blade.php deleted file mode 100644 index 2f17974..0000000 --- a/resources/views/breadcrumbs/breadcrumb-body.blade.php +++ /dev/null @@ -1,12 +0,0 @@ -@hasSection('breadcrumb') -@if(Breadcrumbs::exists(app()->view->getSections()['breadcrumb'])) -{{ call_user_func_array('Breadcrumbs::render', array_merge( - [app()->view->getSections()['breadcrumb']], - !empty($brParam) ? (is_array($brParam) ? $brParam : [$brParam]) : [] -)) }} -@endif -@elseif(request()->route() != null) -@if(Breadcrumbs::exists(request()->route()->getName())) -{{ Breadcrumbs::render(request()->route()->getName()) }} -@endif -@endif diff --git a/resources/views/breadcrumbs/breadcrumb-head.blade.php b/resources/views/breadcrumbs/breadcrumb-head.blade.php deleted file mode 100644 index b2d8502..0000000 --- a/resources/views/breadcrumbs/breadcrumb-head.blade.php +++ /dev/null @@ -1,9 +0,0 @@ -@hasSection('breadcrumb') -@if(Breadcrumbs::exists(app()->view->getSections()['breadcrumb'])) -{{ Breadcrumbs::view('breadcrumbs::json-ld', app()->view->getSections()['breadcrumb'], $brParam ?? null) }} -@endif -@elseif(request()->route() != null) -@if (Breadcrumbs::exists(request()->route()->getName())) -{{ Breadcrumbs::view('breadcrumbs::json-ld', request()->route()->getName()) }} -@endif -@endif diff --git a/resources/views/breadcrumbs/breadcrumb-layout.blade.php b/resources/views/breadcrumbs/breadcrumb-layout.blade.php deleted file mode 100644 index e9ff09d..0000000 --- a/resources/views/breadcrumbs/breadcrumb-layout.blade.php +++ /dev/null @@ -1,17 +0,0 @@ -@if (count($breadcrumbs)) - -@endif diff --git a/resources/views/emails/mail-created-plain.blade.php b/resources/views/emails/mail-created-plain.blade.php deleted file mode 100644 index b987446..0000000 --- a/resources/views/emails/mail-created-plain.blade.php +++ /dev/null @@ -1,8 +0,0 @@ -Bonjour {{ $user->name }}, -Votre compte {{ config('app.name') }} vient d'être créé. - -Vous pouvez vous y connecter sur {{ config('app.url') }} - -Votre identifiant est votre email. -Votre mot de passe est le suivant: {{$pwd }} -Merci d'enregistrer celui-ci dans un gestionnaire de mot de passe et de supprimer cet email au plus vite. diff --git a/resources/views/emails/mail-created.blade.php b/resources/views/emails/mail-created.blade.php deleted file mode 100644 index c60da03..0000000 --- a/resources/views/emails/mail-created.blade.php +++ /dev/null @@ -1,15 +0,0 @@ - - - - {{ config('app.name') }} - - - -

Bonjour {{ $user->name }},

-

Votre compte {{ config('app.name') }} vient d'être créé


-

Vous pouvez vous y connecter sur {{ config('app.url') }}


-

Votre identifiant est votre email.

-

Votre mot de passe est le suivant : {{$pwd }}

-

Merci d'enregistrer celui-ci dans un gestionnaire de mot de passe et de supprimer cet email au plus vite.

- - diff --git a/resources/views/emails/new-ticket.blade.php b/resources/views/emails/new-ticket.blade.php deleted file mode 100644 index bf19818..0000000 --- a/resources/views/emails/new-ticket.blade.php +++ /dev/null @@ -1,13 +0,0 @@ -

Bonjour,

-

Un nouveau ticket (n°{{ $ticket->id }}) a été créé sur le support :

-
    -
  • Projet : {{ $ticket->site->name }}
  • -
  • Titre : {{ $ticket->title }}
  • -
  • Type : {{ $ticket->type->label() }}
  • -
  • Créé par : {{ $ticket->user()->withTrashed()->firstOrFail()->name }}
  • -
-

- Description :
- {!! clean(nl2br($ticket->text)) !!} -

-

Lien vers le ticket : Ouvrir dans un nouvel onglet

diff --git a/resources/views/emails/ticket-mention.blade.php b/resources/views/emails/ticket-mention.blade.php deleted file mode 100644 index 6c19367..0000000 --- a/resources/views/emails/ticket-mention.blade.php +++ /dev/null @@ -1,10 +0,0 @@ -

Bonjour,

-

Vous avez été mentionné sur le ticket n°{{ $ticket->id }}:

-
    -
  • Projet : {{ $ticket->site->name }}
  • -
  • Titre : {{ $ticket->title }}
  • -
  • Type : {{ $ticket->label }}
  • -
  • Créé par : {{ $ticket->user()->withTrashed()->firstOrFail()->name }}
  • -
-

{!! clean(nl2br($corpsMaj)) !!}

-

Lien vers le ticket : Ouvrir dans un nouvel onglet

diff --git a/resources/views/emails/ticket-update.blade.php b/resources/views/emails/ticket-update.blade.php deleted file mode 100644 index 69c0951..0000000 --- a/resources/views/emails/ticket-update.blade.php +++ /dev/null @@ -1,10 +0,0 @@ -

Bonjour,

-

Le ticket n°{{ $ticket->id }} à été mis à jour :

-
    -
  • Projet : {{ $ticket->site->name }}
  • -
  • Titre : {{ $ticket->title }}
  • -
  • Type : {{ $ticket->type->label() }}
  • -
  • Créé par : {{ $ticket->user()->withTrashed()->firstOrFail()->name }}
  • -
-

{!! clean(nl2br($corpsMaj)) !!}

-

Lien vers le ticket : Ouvrir dans un nouvel onglet

diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php deleted file mode 100644 index 294412e..0000000 --- a/resources/views/errors/401.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Unauthorized')) -@section('code', '401') -@section('message', __('Unauthorized')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php deleted file mode 100644 index 1ed034e..0000000 --- a/resources/views/errors/403.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Accès interdit')) -@section('code', '403') -@section('message', __($exception->getMessage() ?: 'Vous n\'êtes pas autorisé à acceder à cette page.')) diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php deleted file mode 100644 index 9e23a71..0000000 --- a/resources/views/errors/404.blade.php +++ /dev/null @@ -1,6 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Page non trouvée')) -@section('code', '404') -@section('message', __('Oups.. Cette page n\'est pas ou plus disponible.')) -@section('redirect', true) diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php deleted file mode 100644 index 4c96f0b..0000000 --- a/resources/views/errors/419.blade.php +++ /dev/null @@ -1,6 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Page expirée')) -@section('code', '419') -@section('message', __('Cette page à expiré, vous devrez peut être vous reconnecter afin d\'y accéder.')) -@section('redirect', true) diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php deleted file mode 100644 index a0ac50f..0000000 --- a/resources/views/errors/429.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Trop de requêtes')) -@section('code', '429') -@section('message', __('Il semblerait que votre navigateur ai essayé de charge cette page trop de fois dans un temps rapproché. Merci de réessayer plus tard.')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php deleted file mode 100644 index db471e6..0000000 --- a/resources/views/errors/500.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Erreur serveur')) -@section('code', '500') -@section('message', __('Oups, une erreur est survenue. L\'équipe est déjà prévenu par mail. Inutile d\'appeler quelqu\'un est déjà dessus. Merci de réessayer dans un moment.')) diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php deleted file mode 100644 index 0963aeb..0000000 --- a/resources/views/errors/503.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Service non disponible')) -@section('code', '503') -@section('message', __('Veuillez nous excuser pour la gêne occasionnée, le service est en maintenance. Inutile d\'appeler quelqu\'un est déjà dessus. Merci de réessayer dans un moment.')) diff --git a/resources/views/errors/illustrated-layout.blade.php b/resources/views/errors/illustrated-layout.blade.php deleted file mode 100644 index 0c8de1a..0000000 --- a/resources/views/errors/illustrated-layout.blade.php +++ /dev/null @@ -1,486 +0,0 @@ - - - - - - - @yield('title') - - - - - - - - - -
-
-
-
- @yield('code', __('Oh no')) -
- -
- -

- @yield('message') -

- - - - -
-
- -
- @yield('image') -
-
- - diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php deleted file mode 100644 index 07521b6..0000000 --- a/resources/views/errors/layout.blade.php +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - @yield('title') - - - - - - - - - -
- {{-- FIXME Mettre nouveau logo UWIL --}} -
-
- @yield('message') -
- @hasSection('redirect') - - - - @endif -
-
- - diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php deleted file mode 100644 index 8534a57..0000000 --- a/resources/views/errors/minimal.blade.php +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - @yield('title') - - - - - - - - - - -
-
-
-
- @yield('code') -
- -
- @yield('message') -
-
-
-
- - diff --git a/resources/views/estimations/create.blade.php b/resources/views/estimations/create.blade.php deleted file mode 100644 index 3d1da93..0000000 --- a/resources/views/estimations/create.blade.php +++ /dev/null @@ -1,26 +0,0 @@ -@extends('layout.app') - -@section('bodyClass', 'col-md-8') - -@section('content') -
-
-

- - {{ $ticket->full_name }} - @if ($ticket->is_internal)@endif - {{ $ticket->type->label() }} -  {{ __('Créer une estimation') }} -

-
-
-
- @csrf - @include('estimations.form-inputs') -
- -
-
-
-
-@endsection diff --git a/resources/views/estimations/form-inputs.blade.php b/resources/views/estimations/form-inputs.blade.php deleted file mode 100644 index c467b0a..0000000 --- a/resources/views/estimations/form-inputs.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -
- - - @include('modules.input-error', [ - 'inputName' => 'amount', 'helperId' => 'amountHelper' , 'helper' => __('Le montant en homme jour estimé.') - ]) -
-
- - - @include('modules.input-error', [ - 'inputName' => 'brand_id', 'helperId' => 'creditAccountHelp' , 'helper' => __('Le compte de la marque à débiter') - ]) -
diff --git a/resources/views/estimations/pendingCard.blade.php b/resources/views/estimations/pendingCard.blade.php deleted file mode 100644 index d0688df..0000000 --- a/resources/views/estimations/pendingCard.blade.php +++ /dev/null @@ -1,58 +0,0 @@ -
-
- {{ __('Estimation faite par :user', ['user' => optional($estimation->estimator)->name ?? 'utilisateur supprimé']) }} -
-
-
-
-
- {{ __('Temps estimé :time jours/homme', ['time' => $estimation->amount]) }} -
- @if($estimation->status->equals(App\Enums\Credit\EstimationStatusEnum::pending)) -
- {{ __('En attente') }} -
- @endif - @if($estimation->status->equals(App\Enums\Credit\EstimationStatusEnum::accepted)) -
- {{ __('Validé par :user', ['user' => optional($estimation->validator)->name ?? 'utilisateur supprimé']) }} -
- @endif - @if($estimation->status->equals(App\Enums\Credit\EstimationStatusEnum::refused)) -
- {{ __('Refusé par :user', ['user' => optional($estimation->validator)->name ?? 'utilisateur supprimé']) }} -
- @endif - @can('validateEstimate', $ticket) - @can('answer', $estimation) -
-
- @csrf - - -
- @if (auth()->user()->role->equals(App\Enums\Users\RoleEnum::developper)) -
- @csrf - -
- @else -
- @csrf - - -
- @endif -
- @endcan - @endcan -
-
-
-
diff --git a/resources/views/front/app.blade.php b/resources/views/front/app.blade.php new file mode 100644 index 0000000..4d009ad --- /dev/null +++ b/resources/views/front/app.blade.php @@ -0,0 +1,29 @@ + + + + + + + + {{ config('app.name') }} + + + + + + + + + @routes(nonce: $nonce ?? '') + @if (app()->hasDebugModeEnabled()) + @viteReactRefresh + @endif + @vite(["resources/ts/{$page['component']}.tsx", 'resources/sass/front/app.scss']) + @inertiaHead + + + + @inertia + + + diff --git a/resources/views/layout/app.blade.php b/resources/views/layout/app.blade.php deleted file mode 100644 index d657902..0000000 --- a/resources/views/layout/app.blade.php +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - {{ config('app.name') }} - @yield('title') - - - - - - - - - - - - - - - - - - - - - @vite(['resources/sass/bo/bo.scss']) - @stack('styles') - - - - @include('layout.nav') -
-
-
-
- @auth - @foreach ($informations as $information) - - @endforeach - @endauth - - @include('modules.flash-messages') - @yield('content') -
-
-
-
- @include('layout.footer') - @stack('scriptsConstants') - @include('modules.script-constants') - @vite(['resources/ts/bo/bo.ts']) - - @stack('scripts') - - - diff --git a/resources/views/layout/footer.blade.php b/resources/views/layout/footer.blade.php deleted file mode 100644 index d6710d2..0000000 --- a/resources/views/layout/footer.blade.php +++ /dev/null @@ -1,8 +0,0 @@ -
-
- {{ $name }} - {{ $version }} - - - UWIL - © {{ date('Y') }} -
-
diff --git a/resources/views/layout/nav.blade.php b/resources/views/layout/nav.blade.php deleted file mode 100644 index 8991ccb..0000000 --- a/resources/views/layout/nav.blade.php +++ /dev/null @@ -1,125 +0,0 @@ - diff --git a/resources/views/modules/flash-messages.blade.php b/resources/views/modules/flash-messages.blade.php deleted file mode 100644 index 2b99fd2..0000000 --- a/resources/views/modules/flash-messages.blade.php +++ /dev/null @@ -1,40 +0,0 @@ -@if ($message = Session::get('success', Session::get('bo.success'))) - -@endif - -@if ($message = Session::get('error', Session::get('bo.error'))) - -@endif - -@if ($message = Session::get('warning', Session::get('bo.warning'))) - -@endif - -@if ($message = Session::get('info', Session::get('bo.info'))) - -@endif - -@if ($errors->any()) - -@endif diff --git a/resources/views/modules/input-error.blade.php b/resources/views/modules/input-error.blade.php deleted file mode 100644 index 5a17ab3..0000000 --- a/resources/views/modules/input-error.blade.php +++ /dev/null @@ -1,8 +0,0 @@ -@if($errors->has($inputName)) -
- {{ implode(',', $errors->get($inputName)) }} -
-@endif -@if(isset($helper)) -{{ $helper }} -@endif diff --git a/resources/views/modules/script-constants.blade.php b/resources/views/modules/script-constants.blade.php deleted file mode 100644 index 9dbbeaa..0000000 --- a/resources/views/modules/script-constants.blade.php +++ /dev/null @@ -1,27 +0,0 @@ - diff --git a/resources/views/vendor/mail/html/header.blade.php b/resources/views/vendor/mail/html/header.blade.php deleted file mode 100644 index c2441c4..0000000 --- a/resources/views/vendor/mail/html/header.blade.php +++ /dev/null @@ -1,8 +0,0 @@ - - - - {{-- FIXME Changer le logo par uwil --}} - - - - diff --git a/routes/api.php b/routes/api.php deleted file mode 100644 index b3d9bbc..0000000 --- a/routes/api.php +++ /dev/null @@ -1 +0,0 @@ -push(__('models.classes.packages'), route('bo.packages.index')); -}); -Breadcrumbs::for('bo.packages.create', function (Generator $trail) { - $trail->parent('bo.packages.index'); - $trail->push(__('crud.actions.create'), route('bo.packages.create')); -}); -Breadcrumbs::for('bo.packages.edit', function (Generator $trail, Package $package) { - $trail->parent('bo.packages.index'); - $trail->push(__('crud.actions.edit'), route('bo.packages.edit', $package->id)); -}); - -// * INFORMATIONS -Breadcrumbs::for('bo.informations.index', function (Generator $trail) { - $trail->push(__('models.classes.informations'), route('bo.informations.index')); -}); -Breadcrumbs::for('bo.informations.create', function (Generator $trail) { - $trail->parent('bo.informations.index'); - $trail->push(__('crud.actions.create'), route('bo.informations.create')); -}); -Breadcrumbs::for('bo.informations.edit', function (Generator $trail, Information $information) { - $trail->parent('bo.informations.index'); - $trail->push(__('crud.actions.edit'), route('bo.informations.edit', $information->id)); -}); - -// * USERS -Breadcrumbs::for('bo.users.index', function (Generator $trail) { - $trail->push(__('models.classes.users'), route('bo.users.index')); -}); -Breadcrumbs::for('bo.users.create', function (Generator $trail) { - $trail->parent('bo.users.index'); - $trail->push(__('crud.actions.create'), route('bo.users.create')); -}); -Breadcrumbs::for('bo.users.edit', function (Generator $trail, User $user) { - $trail->parent('bo.users.index'); - $trail->push(__('crud.actions.edit'), route('bo.users.edit', $user->id)); -}); - -// * TICKET_TYPES -Breadcrumbs::for('bo.ticket_types.index', function (Generator $trail) { - $trail->push(trans_choice('models.classes.ticket_types', 2), route('bo.ticket_types.index')); -}); -Breadcrumbs::for('bo.ticket_types.create', function (Generator $trail) { - $trail->parent('bo.ticket_types.index'); - $trail->push(__('crud.actions.create'), route('bo.ticket_types.create')); -}); -Breadcrumbs::for('bo.ticket_types.edit', function (Generator $trail, TicketType $ticket_type) { - $trail->parent('bo.ticket_types.index'); - $trail->push(__('crud.actions.edit'), route('bo.ticket_types.edit', $ticket_type->id)); -}); - -// * COMPANIES -Breadcrumbs::for('bo.companies.index', function (Generator $trail) { - $trail->push(__('models.classes.companies'), route('bo.companies.index')); -}); -Breadcrumbs::for('bo.companies.create', function (Generator $trail) { - $trail->parent('bo.companies.index'); - $trail->push(__('crud.actions.create'), route('bo.companies.create')); -}); -Breadcrumbs::for('bo.companies.edit', function (Generator $trail, Company $company) { - $trail->parent('bo.companies.index'); - $trail->push(__('crud.actions.edit'), route('bo.companies.edit', $company->id)); -}); - -// * INVOICES -Breadcrumbs::for('bo.invoices.index', function (Generator $trail) { - $trail->push(__('models.classes.invoices'), route('bo.invoices.index', ['status' => InvoiceStatusEnum::opened])); -}); -Breadcrumbs::for('bo.invoices.create', function (Generator $trail) { - $trail->parent('bo.invoices.index'); - $trail->push(__('crud.actions.create'), route('bo.invoices.create')); -}); -Breadcrumbs::for('bo.invoices.edit', function (Generator $trail, Invoice $invoice) { - $trail->parent('bo.invoices.index'); - $trail->push(__('crud.actions.edit'), route('bo.invoices.edit', $invoice->id)); -}); -Breadcrumbs::for('bo.invoices.show', function (Generator $trail, Invoice $invoice) { - $trail->parent('bo.invoices.index'); - $trail->push(__('crud.actions.show'), route('bo.invoices.show', $invoice->id)); -}); - -// * SITES -Breadcrumbs::for('bo.sites.index', function (Generator $trail) { - $trail->push(__('models.classes.sites'), route('bo.sites.index')); -}); -Breadcrumbs::for('bo.sites.create', function (Generator $trail) { - $trail->parent('bo.sites.index'); - $trail->push(__('crud.actions.create'), route('bo.sites.create')); -}); -Breadcrumbs::for('bo.sites.edit', function (Generator $trail, Site $site) { - $trail->parent('bo.sites.index'); - $trail->push(__('crud.actions.edit'), route('bo.sites.edit', $site->id)); -}); -Breadcrumbs::for('bo.sites.show', function (Generator $trail, Site $site) { - $trail->parent('bo.sites.index'); - $trail->push(__('crud.actions.show'), route('bo.sites.show', $site->id)); -}); - -// * BRANDS -Breadcrumbs::for('bo.brands.index', function (Generator $trail) { - $trail->push(__('models.classes.brands'), route('bo.brands.index')); -}); -Breadcrumbs::for('bo.brands.create', function (Generator $trail) { - $trail->parent('bo.brands.index'); - $trail->push(__('crud.actions.create'), route('bo.brands.create')); -}); -Breadcrumbs::for('bo.brands.edit', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.index'); - $trail->push(__('crud.actions.edit'), route('bo.brands.edit', $brand->id)); -}); -Breadcrumbs::for('bo.brands.show', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.index'); - $trail->push(__('crud.actions.show'), route('bo.brands.show', $brand->id)); -}); - -// * ACCOUNTS -Breadcrumbs::for('bo.credit_accounts.index', function (Generator $trail) { - $trail->push(__('models.classes.accounts'), route('bo.credit_accounts.index')); -}); -Breadcrumbs::for('bo.credit_accounts.credit_logs.index', function (Generator $trail) { - $trail->parent('bo.credit_accounts.index'); - $trail->push(__('crud.actions.historic')); -}); - -Breadcrumbs::for('bo.brands.credit_accounts.index', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.index'); - $trail->push(__('models.classes.accounts'), route('bo.brands.credit_accounts.index', $brand)); -}); -Breadcrumbs::for('bo.brands.credit_accounts.create', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.credit_accounts.index', $brand); - $trail->push(__('crud.actions.create')); -}); -Breadcrumbs::for('bo.brands.credit_accounts.credit_logs.index', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.credit_accounts.index', $brand); - $trail->push(__('crud.actions.historic')); -}); -Breadcrumbs::for('bo.brands.credit_accounts.credit_logs.create', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.credit_accounts.index', $brand); - $trail->push(__('crud.actions.credit')); -}); - -// * LABELS -Breadcrumbs::for('bo.labels.index', function (Generator $trail) { - $trail->push(__('models.classes.labels'), route('bo.labels.index')); -}); -Breadcrumbs::for('bo.labels.create', function (Generator $trail) { - $trail->parent('bo.labels.index'); - $trail->push(trans('crud.actions.create'), route('bo.labels.create')); -}); -Breadcrumbs::for('bo.labels.edit', function (Generator $trail, Label $label) { - $trail->parent('bo.labels.index'); - $trail->push(trans('crud.actions.edit'), route('bo.labels.edit', $label->id)); -}); diff --git a/routes/breadcrumbs/front.php b/routes/breadcrumbs/front.php new file mode 100644 index 0000000..ee863e7 --- /dev/null +++ b/routes/breadcrumbs/front.php @@ -0,0 +1,13 @@ +push( + Str::ucfirst(trans('front.homepage')), + route('front.homepage') + ); +}); diff --git a/routes/console.php b/routes/console.php deleted file mode 100644 index b3d9bbc..0000000 --- a/routes/console.php +++ /dev/null @@ -1 +0,0 @@ -group(function () { - - Route::namespace('\App\Http\Controllers\Bo') - ->withoutMiddleware([SecureHeaders::class]) - ->group(function () { - Auth::routes( - [ - 'login' => true, - 'logout' => true, - 'register' => false, - 'reset' => true, - 'confirm' => false, - 'verify' => false - ] - ); - }); - - Route::name('bo.') - ->group(function () { - Route::middleware('auth:backend') - ->group(function () { - // * HOME - Route::get('/', function () { - return redirect()->route('bo.ticket.index'); - })->name('dashboard'); - - Route::middleware(['can:isAdmin']) - ->group(function () { - // * RESOURCES - Route::resource('users', UserController::class)->except('show'); - Route::resource('informations', InformationController::class)->except('show'); - Route::resource('ticket_types', TicketTypeController::class) - ->only(['index', 'edit', 'update']) - ->withoutMiddleware('htmlsanitize') - ->middleware('htmlsanitize:template') - ->parameters(['ticket_types' => 'ticket_type']); - Route::resource('packages', PackageController::class)->except('show'); - Route::patch('/packages/{package}/change-published', [PackageController::class, 'changePublished']) - ->name('packages.change-published'); - Route::resource('invoices', InvoiceController::class) - ->withoutMiddleware('htmlsanitize') - ->middleware(['htmlsanitize:comment']); - Route::resource('companies', CompanyController::class)->except('show'); - Route::resource('brands', BrandController::class); - Route::resource('brands.credit_accounts', AccountController::class) - ->only(['index', 'create', 'store']) - ->parameters(['credit_accounts' => 'account']); - Route::resource('brands.credit_accounts.credit_logs', CreditLogController::class) - ->only(['index', 'create', 'store']) - ->parameters(['credit_accounts' => 'account', 'credit_logs' => 'credit_log']); - Route::resource('labels', LabelController::class)->except('show'); - - // * INVOICES - Route::get('/invoices/json/paginate', [InvoiceController::class, 'jsonPaginate']) - ->name('invoices.json-paginate'); - Route::get('/invoices/{invoice}/download', [InvoiceController::class, 'download']) - ->name('invoices.download'); - - // * SITES - Route::resource('sites', SiteController::class)->except('index'); - Route::get('/sites/json/paginate', [SiteController::class, 'jsonPaginate']) - ->name('sites.json-paginate'); - - // * TICKETS - Route::get('/tickets/json/paginate', [TicketController::class, 'jsonPaginate']) - ->name('tickets.json-paginate'); - Route::post( - '/ticket/{ticket}/create-issue', - [TicketController::class, 'createGitlabIssue'] - ) - ->middleware('can:createGitlabIssue,ticket') - ->name('ticket.create-issue'); - Route::patch('/tickets/{ticket}/change-priority', [ - TicketController::class, - 'changePriority' - ])->name('ticket.change-priority'); - }); - Route::resource('credit_accounts', AccountController::class) - ->only(['index']) - ->parameters(['credit_accounts' => 'account']); - Route::resource('credit_accounts.credit_logs', CreditLogController::class) - ->only(['index']) - ->parameters(['credit_accounts' => 'account', 'credit_logs' => 'credit_log']); - - // * USERS - Route::get('/users/settings', [UserController::class, 'settings']) - ->name('users.settings'); - Route::post('/users/favourite-site', [UserController::class, 'favouriteSiteSubmit']) - ->name('users.favouriteSiteSubmit'); - Route::post('/users/change-password', [UserController::class, 'passwordResetSubmit']) - ->name('users.passwordResetSubmit'); - - // * SITES - Route::resource('sites', SiteController::class)->only('index'); - - // * TICKETS - Route::resource('ticket', TicketController::class)->except(['destroy']); - Route::prefix('/ticket') - ->name('ticket.') - ->group(function () { - // * Estimation - Route::name('estimation.')->group(function () { - Route::get('/{ticket}/estimate', [EstimationController::class, 'estimate']) - ->middleware('can:estimate,ticket') - ->name('estimate'); - Route::post('/{ticket}/estimate', [EstimationController::class, 'estimateSubmit']) - ->middleware('can:estimate,ticket') - ->name('estimateSubmit'); - Route::post('/{ticket}/estimate/answer', [ - EstimationController::class, 'estimatePendingSubmit' - ]) - ->middleware('can:validateEstimate,ticket') - ->name('estimatePendingSubmit'); - Route::post('/{ticket}/estimate/cancel', [ - EstimationController::class, - 'estimateCancelSubmit' - ]) - ->middleware('can:cancelEstimate,ticket') - ->name('estimateCancelSubmit'); - }); - - Route::post('/{ticket}/assignTo', [TicketController::class, 'assignTo']) - ->middleware('can:assignTo,ticket') - ->name('assignTo'); - Route::post('/{ticket}/reopen', [TicketController::class, 'reopen']) - ->middleware('can:reopen,ticket') - ->name('reopen'); - Route::post('/{ticket}/status', [TicketController::class, 'changeStatus']) - ->middleware('can:changeStatus,ticket') - ->name('changeStatus'); - Route::post('/{ticket}/subscribe', [TicketController::class, 'subscribe']) - ->middleware('can:suscribeToTicket,ticket') - ->name('subscribe'); - Route::post('/{ticket}/link', [TicketController::class, 'linkTicket']) - ->middleware('can:linkTicket,ticket') - ->name('link'); - Route::delete( - '/{ticket}/unlink/{linkedTicket}', - [TicketController::class, 'unlinkTicket'] - ) - ->middleware('can:linkTicket,ticket') - ->name('unlink'); - Route::put('/{ticket}/archive', [TicketController::class, 'setToArchive']) - ->middleware('can:changeStatus,ticket') - ->name('archive'); - Route::put('/{ticket}/message/create', [TicketController::class, 'createMessage']) - ->middleware('can:createMessage,ticket') - ->name('message.create'); - Route::put('/{ticket}/message/{message}/update', [ - TicketController::class, - 'updateMessage' - ])->middleware('can:updateMessage,ticket,message') - ->name('message.update'); - }); - }); - - // * Session Ping - Route::get('/ping', function () { - if (request()->isJson()) { - abort(404); - } - return auth()->check() ? response()->json() : response()->json([], 401); - })->withoutMiddleware('auth'); - }); - }); diff --git a/routes/web-front.php b/routes/web-front.php new file mode 100644 index 0000000..0430511 --- /dev/null +++ b/routes/web-front.php @@ -0,0 +1,6 @@ +name('homepage'); diff --git a/storage/app/.gitignore b/storage/app/.gitignore index 8f4803c..fedb287 100644 --- a/storage/app/.gitignore +++ b/storage/app/.gitignore @@ -1,3 +1,4 @@ * +!private/ !public/ !.gitignore diff --git a/storage/app/private/.gitignore b/storage/app/private/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/private/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/samlidp/config.php b/storage/samlidp/config.php deleted file mode 100644 index c30ac2d..0000000 --- a/storage/samlidp/config.php +++ /dev/null @@ -1,25 +0,0 @@ - 'https://le-gaulois-pro.s-web.test' - }; - } -} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..d33e644 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,135 @@ +import defaultTheme from "tailwindcss/defaultTheme"; +import forms from "@tailwindcss/forms"; +import typography from "@tailwindcss/typography"; + +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: ['class'], + content: [ + './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', + './storage/framework/views/*.php', + './resources/views/**/*.blade.php', + './resources/ts/**/*.tsx', + './resources/js/Components/ui/**/*.{js,ts,jsx,tsx}' + ], + theme: { + extend: { + typography: { + DEFAULT: { + css: { + p: { color: 'hsl(var(--card-foreground))', margin: '0' }, + }, + }, + }, + fontFamily: { + sans: [ + 'Figtree', + ...defaultTheme.fontFamily.sans + ] + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + }, + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + successive: { + DEFAULT: 'hsl(var(--successive))', + foreground: 'hsl(var(--successive-foreground))' + }, + informative: { + DEFAULT: 'hsl(var(--informative))', + foreground: 'hsl(var(--informative-foreground))' + }, + preventive: { + DEFAULT: 'hsl(var(--preventive))', + foreground: 'hsl(var(--preventive-foreground))' + }, + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + }, + sidebar: { + DEFAULT: 'hsl(var(--sidebar-background))', + foreground: 'hsl(var(--sidebar-foreground))', + primary: 'hsl(var(--sidebar-primary))', + 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))', + accent: 'hsl(var(--sidebar-accent))', + 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))', + border: 'hsl(var(--sidebar-border))', + ring: 'hsl(var(--sidebar-ring))' + } + }, + keyframes: { + 'accordion-down': { + from: { height: 0 }, + to: { height: 'var(--radix-accordion-content-height)' }, + }, + 'accordion-up': { + from: { height: 'var(--radix-accordion-content-height)' }, + to: { height: 0 }, + }, + }, + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + }, + } + }, + safelist: [ + 'bg-successive', + 'text-successive-foreground', + 'hover:bg-successive/90', + 'bg-destructive', + 'text-destructive-foreground', + 'hover:bg-destructive/90', + 'bg-informative', + 'text-informative-foreground', + 'hover:bg-informative/90', + 'bg-preventive', + 'text-preventive-foreground', + 'hover:bg-preventive/90', + ], + plugins: [ + forms, + require("tailwindcss-animate"), + require('@tailwindcss/typography'), + typography, + ], +}; diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php deleted file mode 100644 index ab92402..0000000 --- a/tests/CreatesApplication.php +++ /dev/null @@ -1,22 +0,0 @@ -make(Kernel::class)->bootstrap(); - - return $app; - } -} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php deleted file mode 100644 index 8fbf370..0000000 --- a/tests/Feature/ExampleTest.php +++ /dev/null @@ -1,20 +0,0 @@ -get('/'); - - $response->assertStatus(200); - } -} diff --git a/tests/TestCase.php b/tests/TestCase.php deleted file mode 100644 index 2932d4a..0000000 --- a/tests/TestCase.php +++ /dev/null @@ -1,10 +0,0 @@ -assertTrue(true); - } -} diff --git a/tsconfig.json b/tsconfig.json index b061908..c7898b8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,29 @@ { - "extends": "@vue/tsconfig/tsconfig.dom.json", - "sourceMap": true, "compilerOptions": { - "lib": ["ESNEXT", "DOM", "DOM.Iterable"], "baseUrl": ".", + "allowJs": true, + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "strict": true, + "isolatedModules": true, + "target": "ESNext", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "skipLibCheck": true, "paths": { - "~/*": ["node_modules/*", "node_modules/@types/*"], - "@/*": ["resources/assets/*"] + "@/*": [ + "resources/ts/*" + ], + "&/*": [ + "resources/assets/*" + ] } }, - "include": ["resources/**/*.js", "resources/**/*.ts", "resources/**/*.vue"], - "exclude": ["node_modules"] + "include": [ + "resources/ts/**/*.ts", + "resources/ts/**/*.tsx", + "resources/ts/**/*.d.ts" + ] } diff --git a/vite.config.ts b/vite.config.ts index 3fae383..adf5ec0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,117 +1,44 @@ -import legacy from "@vitejs/plugin-legacy"; -import vue from "@vitejs/plugin-vue"; -import laravel from "laravel-vite-plugin"; +import { defineConfig } from 'vite'; +import copy from "rollup-plugin-copy"; +import laravel from 'laravel-vite-plugin'; import path from "path"; -import { defineConfig } from "vite"; -import checker from "vite-plugin-checker"; -import eslint from "vite-plugin-eslint"; -import stylelint from "vite-plugin-stylelint"; +import react from '@vitejs/plugin-react'; export default defineConfig({ - build: { - rollupOptions: { - output: { - entryFileNames: `assets/${ - process.env.NODE_ENV === "local" ? "[name]-" : "" - }[hash].js`, - chunkFileNames: `assets/${ - process.env.NODE_ENV === "local" ? "[name]-" : "" - }[hash].js`, - assetFileNames: `assets/${ - process.env.NODE_ENV === "local" ? "[name]-" : "" - }[hash].[ext]`, - }, - }, - emptyOutDir: true, - sourcemap: process.env.NODE_ENV === "local" ? "inline" : false, - }, - css: { - devSourcemap: process.env.NODE_ENV === "local" ? true : false, - postcss: { - map: { - inline: true, - }, - plugins: [ - require("postcss-discard-comments")({ - removeAll: true, - }), - ], - }, - }, plugins: [ - checker({ - enableBuild: true, - vueTsc: { - root: ".", - tsconfigPath: "tsconfig.json", - }, - typescript: { - root: ".", - tsconfigPath: "tsconfig.json", - }, - eslint: { - lintCommand: - "eslint --fix --quiet -c .eslintrc.json \"./resources\"", - }, - stylelint: { - lintCommand: - "stylelint -q --config \"./.stylelintrc.json\" --fix \"**/resources/**/*.scss\"", - }, - }), laravel({ input: [ - "resources/sass/bo/bo.scss", - "resources/ts/bo/bo.ts", + 'resources/ts/app.tsx', + 'resources/sass/front/app.scss', + 'resources/sass/back/app.scss', ], + refresh: true, }), - stylelint({ - dev: false, - build: true, - cache: false, - chokidar: true, - quiet: false, - include: ["**/resources/**/*.scss", "**/resources/**/*.css"], - exclude: ["node_modules", "vendor"], - lintOnStart: false, - emitError: true, - emitWarning: true, - emitErrorAsWarning: false, - emitWarningAsError: true, - }), - eslint({ - cache: false, - extensions: ["js", "ts"], - include: "**/*.ts", - exclude: ["node_modules", "vendor"], - lintOnStart: false, - emitWarning: true, - emitError: true, - failOnWarning: false, - failOnError: false, - }), - vue({ - isProduction: process.env.NODE_ENV !== "local" ? true : false, - exclude: ["node_modules", "vendor"], - }), - legacy({ - targets: "last 3 version, not dead, >0.3%", - renderLegacyChunks: false, + react(), + copy({ + targets: [ + { + src: path.normalize("resources/favicons/front/*"), + dest: path.normalize("public/") + }, + { + src: path.normalize("resources/favicons/back/*"), + dest: path.normalize("public/favicon-back") + }, + ], + copyOnce: true, + verbose: true }), ], resolve: { - extensions: ["*", ".js", ".ts", ".vue"], alias: [ { - find: "vue", - replacement: "vue/dist/vue.runtime.esm-bundler.js", - }, - { - find: "@", + find: "&", replacement: "/resources/assets", }, { - find: "~", - replacement: path.resolve(__dirname, "./node_modules"), + find: "@", + replacement: "/resources/ts", }, ], },