├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .prettierignore ├── .prettierrc ├── CONTRIBUTING.md ├── LICENCE.md ├── Modules └── .gitignore ├── README.md ├── SECURITY.md ├── app ├── Http │ └── Controllers │ │ └── Controller.php ├── Providers │ └── AppServiceProvider.php └── helpers.php ├── artisan ├── bootstrap ├── app.php ├── cache │ └── .gitignore └── providers.php ├── bun.lock ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── cache.php ├── croppa.php ├── database.php ├── eloquent-sortable.php ├── file.php ├── filesystems.php ├── javascript.php ├── logging.php ├── mail.php ├── permission.php ├── queue.php ├── services.php ├── session.php └── translatable-bootforms.php ├── database ├── .gitignore └── factories │ └── UserFactory.php ├── lang └── .gitignore ├── package.json ├── phpstan.neon ├── phpunit.xml ├── pint.json ├── public ├── .htaccess ├── favicon.ico ├── index.php └── robots.txt ├── routes ├── console.php └── web.php ├── storage ├── app │ ├── .gitignore │ ├── private │ │ └── .gitignore │ └── public │ │ └── .gitignore ├── debugbar │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ ├── .gitignore │ │ └── data │ │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tsconfig.json └── vite.config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 4 7 | indent_style = space 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | max_line_length = 200 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | max_line_length = off 15 | indent_size = 2 16 | 17 | [*.{yml,yaml}] 18 | indent_size = 2 19 | 20 | [docker-compose.yml] 21 | indent_size = 4 22 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=TypiCMS 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_URL=http://localhost 6 | APP_LOGO=resources/images/typicms.svg 7 | APP_OG_IMAGE=resources/images/og-image.png 8 | 9 | APP_LOCALE=en 10 | APP_FALLBACK_LOCALE=en 11 | APP_FAKER_LOCALE=en_US 12 | 13 | APP_MAINTENANCE_DRIVER=file 14 | # APP_MAINTENANCE_STORE=database 15 | 16 | PHP_CLI_SERVER_WORKERS=4 17 | 18 | BCRYPT_ROUNDS=12 19 | 20 | LOG_CHANNEL=single 21 | LOG_STACK=single 22 | LOG_DEPRECATIONS_CHANNEL=null 23 | LOG_LEVEL=debug 24 | 25 | DB_CONNECTION=mysql 26 | DB_HOST=127.0.0.1 27 | DB_PORT=3306 28 | DB_DATABASE=typicms 29 | DB_USERNAME=root 30 | DB_PASSWORD= 31 | 32 | AUTH_MODEL=TypiCMS\Modules\Core\Models\User 33 | 34 | SESSION_DRIVER=redis 35 | SESSION_LIFETIME=120 36 | SESSION_ENCRYPT=false 37 | SESSION_PATH=/ 38 | SESSION_DOMAIN=null 39 | 40 | BROADCAST_CONNECTION=log 41 | FILESYSTEM_DISK=public 42 | QUEUE_CONNECTION=database 43 | 44 | CACHE_STORE=redis 45 | CACHE_PREFIX=typicms 46 | 47 | MAX_FILE_UPLOAD_SIZE=60000 48 | MODEL_CACHE_ENABLED=true 49 | 50 | MEMCACHED_HOST=127.0.0.1 51 | 52 | REDIS_CLIENT=phpredis 53 | REDIS_HOST=127.0.0.1 54 | REDIS_PASSWORD=null 55 | REDIS_PORT=6379 56 | 57 | WELCOME_MESSAGE_URL= 58 | 59 | WEBMASTER_EMAIL= 60 | 61 | MAIL_MAILER=mailgun 62 | MAIL_HOST=127.0.0.1 63 | MAIL_PORT=2525 64 | MAIL_USERNAME=null 65 | MAIL_PASSWORD=null 66 | MAIL_ENCRYPTION=null 67 | 68 | MAIL_FROM_ADDRESS="hello@example.com" 69 | MAIL_FROM_NAME="${APP_NAME}" 70 | 71 | MAILGUN_DOMAIN= 72 | MAILGUN_SECRET= 73 | MAILGUN_ENDPOINT=api.eu.mailgun.net 74 | 75 | AWS_ACCESS_KEY_ID= 76 | AWS_SECRET_ACCESS_KEY= 77 | AWS_DEFAULT_REGION=us-east-1 78 | AWS_BUCKET= 79 | AWS_USE_PATH_STYLE_ENDPOINT=false 80 | 81 | VITE_APP_NAME="${APP_NAME}" 82 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | 3 | *.blade.php diff=html 4 | *.css diff=css 5 | *.html diff=html 6 | *.md diff=markdown 7 | *.php diff=php 8 | 9 | /.github export-ignore 10 | CHANGELOG.md export-ignore 11 | .styleci.yml export-ignore 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.phpunit.cache 2 | /node_modules 3 | /public/build 4 | /public/hot 5 | /public/storage 6 | /storage/*.key 7 | /storage/pail 8 | /vendor 9 | .env 10 | .env.backup 11 | .env.production 12 | .phpactor.json 13 | .phpunit.result.cache 14 | Homestead.json 15 | Homestead.yaml 16 | npm-debug.log 17 | yarn-error.log 18 | /auth.json 19 | /.fleet 20 | /.idea 21 | /.nova 22 | /.vscode 23 | /.zed 24 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | /resources/**/mail/**/*.blade.php 2 | /resources/**/notifications/**/*.blade.php 3 | /resources/**/feed/**/*.blade.php 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 4, 3 | "singleQuote": true, 4 | "plugins": [ 5 | "@shufo/prettier-plugin-blade" 6 | ], 7 | "overrides": [ 8 | { 9 | "files": [ 10 | "*.blade.php" 11 | ], 12 | "options": { 13 | "parser": "blade", 14 | "printWidth": 9999, 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Contributions are **welcome**. 4 | 5 | We accept contributions via Pull Requests on [Github](https://github.com/TypiCMS). 6 | 7 | 8 | ## Pull Requests 9 | 10 | - TypiCMS follows the **[PSR-12 Coding Standard](https://www.php-fig.org/psr/psr-12/)**. 11 | - **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. 12 | - **Create feature branches** - Don't ask us to pull from your master branch. 13 | - **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. 14 | - **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](http://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. 15 | 16 | **Happy coding**! 17 | -------------------------------------------------------------------------------- /LICENCE.md: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | 3 | Copyright (c) 2025 Samuel De Backer 4 | 5 | > Permission is hereby granted, free of charge, to any person obtaining a copy 6 | > of this software and associated documentation files (the "Software"), to deal 7 | > in the Software without restriction, including without limitation the rights 8 | > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | > copies of the Software, and to permit persons to whom the Software is 10 | > furnished to do so, subject to the following conditions: 11 | > 12 | > The above copyright notice and this permission notice shall be included in 13 | > all copies or substantial portions of the Software. 14 | > 15 | > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | > THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Modules/.gitignore: -------------------------------------------------------------------------------- 1 | !.gitignore 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TypiCMS 2 | 3 | [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md) 4 | [![Larastan](https://img.shields.io/badge/PHPStan-level%205-brightgreen.svg?style=flat-square)](https://github.com/nunomaduro/larastan) 5 | 6 | TypiCMS is a modular multilingual content management system built with [Laravel](https://laravel.com). Out of the box you can manage pages, events, news, places, menus, translations, etc. 7 | 8 | ![TypiCMS screenshot](https://typicms.org/uploads/files/typicms-screenshot.png?2) 9 | 10 | ## Table of contents 11 | 12 | - [Features](#features) 13 | - [Requirements](#requirements) 14 | - [Installation](#installation) 15 | - [Assets](#assets) 16 | - [Locales configuration](#locales-configuration) 17 | - [Installation of a module](#installation-of-a-module) 18 | - [Available modules](#available-modules) 19 | - [Pages](#pages) 20 | - [Menus](#menus) 21 | - [Projects](#projects) 22 | - [Categories](#categories) 23 | - [Tags](#tags) 24 | - [Events](#events) 25 | - [News](#news) 26 | - [Contacts](#contacts) 27 | - [Partners](#partners) 28 | - [Files](#files) 29 | - [Users and roles](#users-and-roles) 30 | - [Blocks](#blocks) 31 | - [Translations](#translations) 32 | - [Sitemap](#sitemap) 33 | - [Settings](#settings) 34 | - [History](#history) 35 | - [Facades](#facades) 36 | - [Artisan commands](#artisan-commands) 37 | - [Roadmap](#roadmap) 38 | - [Change log](#change-log) 39 | - [Contributing](#contributing) 40 | - [Credits](#credits) 41 | - [Licence](#licence) 42 | 43 | ## Features 44 | 45 | ### URLs 46 | 47 | These kind of URLs are managed by the CMS: 48 | 49 | **Modules:** 50 | 51 | - /en/events/slug-in-english 52 | - /fr/evenements/slug-en-francais 53 | 54 | **Pages:** 55 | 56 | - /en/parent-pages-slug-en/subpage-slug-en/page-slug-en 57 | - /fr/parent-pages-slug-fr/subpage-slug-fr/page-slug-fr 58 | 59 | ## Requirements 60 | 61 | - PHP >= 7.2 62 | - MySQL 5.7.8 63 | - BCMath PHP Extension 64 | - Ctype PHP Extension 65 | - JSON PHP Extension 66 | - Mbstring PHP Extension 67 | - OpenSSL PHP Extension 68 | - PDO PHP Extension 69 | - Tokenizer PHP Extension 70 | - XML PHP Extension 71 | 72 | ## Installation 73 | 74 | First install [Composer](https://getcomposer.org) 75 | 76 | 1. Create a new project 77 | 78 | ``` 79 | composer create-project typicms/base mywebsite 80 | ``` 81 | 82 | 2. Enter the newly created folder 83 | 84 | ``` 85 | cd mywebsite 86 | ``` 87 | 88 | 3. Migration of the database, seeding, user creation, npm installation and directory rights 89 | 90 | ``` 91 | php artisan typicms:install 92 | ``` 93 | 94 | Note: if you use MariaDB, set 'mariadb' to true in config/typicms.php 95 | 96 | Go to http://mywebsite.test/admin and log in. 97 | 98 | ### Assets 99 | 100 | Assets are managed with [Laravel Mix](https://github.com/JeffreyWay/laravel-mix). 101 | In order to work on assets, you need to install [Node.js](http://nodejs.org), then go to your website folder and run these commands: 102 | 103 | 1. Install npm packages (in directory **node_modules**) 104 | 105 | ``` 106 | npm install 107 | ``` 108 | 109 | 2. Compile admin and public assets 110 | 111 | ``` 112 | npm run dev 113 | ``` 114 | 115 | ### Locales configuration 116 | 117 | 1. Set the locales in config/typicms.php, the first key of this array is the main locale and should be the same as the locale defined in config/app.php. 118 | 2. Set main_locale_in_url in config/typicms.php to true or false. 119 | 120 | ### Installation of a module 121 | 122 | This example is for the News module. After these steps, the module will appear in the sidebar of the back office. 123 | If you need to customize it, you can [publish it](#publish-a-module)! 124 | 125 | 1. Install a module with Composer 126 | 127 | ``` 128 | composer require typicms/news 129 | ``` 130 | 131 | 2. Add `TypiCMS\Modules\News\Providers\ModuleServiceProvider::class,` to **config/app.php**, before `TypiCMS\Modules\Core\Providers\ModuleServiceProvider::class,` 132 | 3. Publish the views and migrations 133 | 134 | ``` 135 | php artisan vendor:publish 136 | ``` 137 | 138 | 4. Migrate the database 139 | 140 | ``` 141 | php artisan migrate 142 | ``` 143 | 144 | ### Module scaffolding 145 | 146 | Let’s create a module called Cats. 147 | 148 | 1. Create the module with artisan: 149 | 150 | ``` 151 | php artisan typicms:create cats 152 | ``` 153 | 154 | 2. The module is in **/Modules/Cats**, you can customize it 155 | 3. Add `TypiCMS\Modules\Cats\Providers\ModuleServiceProvider::class,` to **config/app.php**, before `TypiCMS\Modules\Core\Providers\ModuleServiceProvider::class,` 156 | 4. Migrate the database 157 | 158 | ``` 159 | php artisan migrate 160 | ``` 161 | 162 | ## Available modules 163 | 164 | Each module can be [published](#publish-a-module). 165 | 166 | ### Pages 167 | 168 | Pages are nestable with a drag and drop, on drop, URIs are generated and saved in the database. 169 | Each translation of a page has its own route. 170 | A page can be linked to a module. 171 | A page can have multiple sections. 172 | 173 | ### Menus 174 | 175 | Each menu has nestable entries. One entry can be linked to a page or URL. 176 | You can return a HTML formated menu with `Menus::render('menuname')` or `@menu('menuname')`. 177 | 178 | ### Projects 179 | 180 | Projects have categories, projects URLs follows this pattern: /en/projects/category-slug/project-slug 181 | 182 | ### Tags 183 | 184 | Tags are linked to projects and use the [Selectize](https://brianreavis.github.io/selectize.js/) plugin. 185 | The tags module has many to many polymorphic relations so a tag can be easily linked to any module. 186 | 187 | ### Events 188 | 189 | Events have starting and ending dates. 190 | 191 | ### News 192 | 193 | News module. 194 | 195 | ### Contacts 196 | 197 | Frontend contact form and admin side records management. 198 | 199 | ### Partners 200 | 201 | A partner has a logo, website URL, title and body content. 202 | 203 | ### Files 204 | 205 | The files module allows you to upload and organize images, documents and folders. It works with [DropzoneJS](http://www.dropzonejs.com) for the uploading proccess. 206 | Thumbnails are generated on the fly thanks to [Croppa](https://github.com/BKWLD/croppa). 207 | 208 | If you want to store the original images on a storage service such as Amazon s3 and your cropped images on the local disk, set `FILESYSTEM_DRIVER=s3` in your **.env** file and in **config/croppa.php** set `'src_dir' => 'filesystem.default.driver'` and `'crops_dir' => storage_path('app/public')`. 209 | 210 | ### Users and roles 211 | 212 | User registration can be enabled through the settings panel (/admin/settings). 213 | Roles and Permissions are managed with [spatie/laravel-permission](https://github.com/spatie/laravel-permission). 214 | 215 | ### Blocks 216 | 217 | Blocks are useful to display custom content in your views. 218 | You can display the content of a block with `Blocks::render('blockname')` or `@block('blockname')`. 219 | 220 | ### Translations 221 | 222 | Translations can be stored in the database through the admin panel (/admin/translations). 223 | 224 | You can get a translation from the database with the standard Laravel functions: `__('Key')`, `trans('Key')` or `@lang('Key')`. 225 | 226 | ### Sitemap 227 | 228 | A sitemap is generated by reading all pages available in your project. The URL is /sitemap.xml. 229 | 230 | ### Settings 231 | 232 | Change the website title, logo, and other options in the settings panel. 233 | 234 | ### History 235 | 236 | _created_, _updated_, _deleted_, _online_ and _offline_ actions are logged in database. 237 | Latest records are displayed in the back office’s dashboard. 238 | 239 | ## Facades 240 | 241 | Each module has a facade that gives you access to the repository, you can call for example `News::latest(3)` to get the three latest news. 242 | Check available methods in each module’s repository. 243 | 244 | ## Artisan commands 245 | 246 | Commands are located in **/vendor/typicms/core/src/Commands** 247 | 248 | ### Installation of TypiCMS 249 | 250 | ``` 251 | php artisan typicms:install 252 | ``` 253 | 254 | ### Initial migration and seed 255 | 256 | ``` 257 | php artisan typicms:database 258 | ``` 259 | 260 | This command is triggered by `typicms:install` 261 | 262 | ### Publish a module 263 | 264 | If you want to modify a module, for example to add some fields or a relation, you have to publish it by running: 265 | 266 | ``` 267 | php artisan typicms:publish 268 | ``` 269 | 270 | The module is now located in the **/Modules** directory. 271 | 272 | These steps will be executed: 273 | 274 | 1. Publishing of views and migrations for Pages module. 275 | 2. Copying of everything excepted views and migrations from **/vendor/typicms/pages/src** to **/Modules/Pages**. 276 | 3. Running `composer remove typicms/pages`. 277 | 278 | When a module is published, it will be tracked by git and you will be able to make changes in **/Modules/Modulename** directory without loosing changes when running `composer update`. 279 | 280 | ## Changelog 281 | 282 | Please see [CHANGELOG](https://github.com/TypiCMS/Base/blob/master/CHANGELOG.md) for more information on what has changed. 283 | 284 | ## Contributing 285 | 286 | Please see [CONTRIBUTING](https://github.com/TypiCMS/Base/blob/master/CONTRIBUTING.md) for details. 287 | 288 | ## Credits 289 | 290 | - [Samuel De Backer](https://github.com/sdebacker) 291 | - [All contributors](https://github.com/TypiCMS/Base/graphs/contributors) 292 | 293 | ## License 294 | 295 | TypiCMS is an open-source software licensed under the [MIT license](http://opensource.org/licenses/MIT). 296 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | -## Reporting a Vulnerability 2 | 3 | If you discover any security related issues, please email sdebacker@gmail.com instead of using the issue tracker. 4 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | getLocale(); 26 | } 27 | 28 | return url($uri); 29 | } 30 | } 31 | 32 | if (!function_exists('column')) { 33 | function column(string $column): string 34 | { 35 | return $column . '->' . app()->getLocale(); 36 | } 37 | } 38 | 39 | if (!function_exists('locales')) { 40 | function locales(): array 41 | { 42 | return array_keys(config('typicms.locales', [])); 43 | } 44 | } 45 | 46 | if (!function_exists('enabledLocales')) { 47 | function enabledLocales(): array 48 | { 49 | $locales = []; 50 | foreach (locales() as $locale) { 51 | if (config('typicms.' . $locale . '.status') || request('preview')) { 52 | $locales[] = $locale; 53 | } 54 | } 55 | 56 | return $locales; 57 | } 58 | } 59 | 60 | if (!function_exists('localeAndRegion')) { 61 | function localeAndRegion(?string $separator = null, ?string $locale = null): ?string 62 | { 63 | $localeAndRegion = Arr::get(config('typicms.locales'), app()->getLocale()); 64 | if (!is_null($separator)) { 65 | return str_replace('_', $separator, $localeAndRegion); 66 | } 67 | 68 | return $localeAndRegion; 69 | } 70 | } 71 | 72 | if (!function_exists('mainLocale')) { 73 | function mainLocale(): string 74 | { 75 | return Arr::first(locales()); 76 | } 77 | } 78 | 79 | if (!function_exists('isLocaleEnabled')) { 80 | function isLocaleEnabled(string $locale): bool 81 | { 82 | return in_array($locale, enabledLocales()); 83 | } 84 | } 85 | 86 | if (!function_exists('getBrowserLocaleOrMainLocale')) { 87 | function getBrowserLocaleOrMainLocale(): string 88 | { 89 | if ($locale = mb_substr(getenv('HTTP_ACCEPT_LANGUAGE'), 0, 2)) { 90 | if (in_array($locale, enabledLocales())) { 91 | return $locale; 92 | } 93 | } 94 | 95 | return mainLocale(); 96 | } 97 | } 98 | 99 | if (!function_exists('modules')) { 100 | function modules(): array 101 | { 102 | $modules = config('typicms.modules'); 103 | ksort($modules); 104 | 105 | return $modules; 106 | } 107 | } 108 | 109 | if (!function_exists('getModulesForSelect')) { 110 | function getModulesForSelect(): array 111 | { 112 | $modules = config('typicms.modules'); 113 | $options = ['' => '']; 114 | foreach ($modules as $module => $properties) { 115 | if (isset($properties['linkable_to_page']) && $properties['linkable_to_page'] === true) { 116 | $options[$module] = __(ucfirst($module)); 117 | } 118 | } 119 | asort($options); 120 | 121 | return $options; 122 | } 123 | } 124 | 125 | if (!function_exists('permissions')) { 126 | function permissions(): array 127 | { 128 | $permissions = []; 129 | foreach (config('typicms.modules') as $module => $data) { 130 | if (isset($data['permissions']) && is_array($data['permissions'])) { 131 | $key = __(ucfirst($module)); 132 | $permissions[$key] = $data['permissions']; 133 | } 134 | } 135 | ksort($permissions, SORT_LOCALE_STRING); 136 | 137 | return $permissions; 138 | } 139 | } 140 | 141 | if (!function_exists('websiteTitle')) { 142 | function websiteTitle(?string $locale = null): ?string 143 | { 144 | return config('typicms.' . ($locale ?: app()->getLocale()) . '.website_title'); 145 | } 146 | } 147 | 148 | if (!function_exists('appBaseline')) { 149 | function appBaseline(?string $locale = null): ?string 150 | { 151 | return config('typicms.' . ($locale ?: app()->getLocale()) . '.website_baseline'); 152 | } 153 | } 154 | 155 | if (!function_exists('getMigrationFileName')) { 156 | function getMigrationFileName(string $name, int $count = 0): string 157 | { 158 | $directory = database_path(DIRECTORY_SEPARATOR . 'migrations' . DIRECTORY_SEPARATOR); 159 | $migrations = File::glob($directory . '*_' . $name . '.php'); 160 | 161 | return $migrations[0] ?? $directory . date('Y_m_d_His', time() + $count) . '_' . $name . '.php'; 162 | } 163 | } 164 | 165 | if (!function_exists('getPagesLinkedToModule')) { 166 | function getPagesLinkedToModule($module = null): array 167 | { 168 | $module = mb_strtolower($module); 169 | $routes = app('typicms.routes'); 170 | 171 | $pages = []; 172 | foreach ($routes as $page) { 173 | if ($page->module === $module) { 174 | $pages[] = $page; 175 | } 176 | } 177 | 178 | return $pages; 179 | } 180 | } 181 | 182 | if (!function_exists('getPageLinkedToModule')) { 183 | function getPageLinkedToModule($module = null): ?Page 184 | { 185 | $pages = getPagesLinkedToModule($module); 186 | 187 | return Arr::first($pages); 188 | } 189 | } 190 | 191 | if (!function_exists('feeds')) { 192 | function feeds(): Collection 193 | { 194 | $locale = config('app.locale'); 195 | $feeds = collect(config('typicms.modules')) 196 | ->transform(function ($properties, $module) use ($locale) { 197 | $routeName = $locale . '::' . $module . '-feed'; 198 | if (isset($properties['has_feed']) && $properties['has_feed'] === true && Route::has($routeName)) { 199 | return ['url' => route($routeName, $module), 'title' => __(ucfirst($module) . ' feed') . ' – ' . websiteTitle()]; 200 | } 201 | })->reject(function ($value) { 202 | return empty($value); 203 | }); 204 | 205 | return $feeds; 206 | } 207 | } 208 | 209 | if (!function_exists('pageTemplates')) { 210 | function pageTemplates(): array 211 | { 212 | try { 213 | $directory = getTemplateDir(); 214 | $files = File::files($directory); 215 | } catch (Exception $e) { 216 | $files = File::files(base_path('vendor/typicms/pages/src/resources/views/public')); 217 | } 218 | $templates = []; 219 | foreach ($files as $file) { 220 | $filename = File::name($file); 221 | if ($filename === 'default.blade') { 222 | continue; 223 | } 224 | $name = str_replace('.blade', '', $filename); 225 | if ($name[0] != '_' && $name != 'master') { 226 | $templates[$name] = ucfirst($name); 227 | } 228 | } 229 | 230 | return ['' => 'Default'] + $templates; 231 | } 232 | } 233 | 234 | if (!function_exists('pageSectionTemplates')) { 235 | function pageSectionTemplates(): array 236 | { 237 | try { 238 | $directory = getTemplateDir(); 239 | $files = File::files($directory); 240 | } catch (Exception $e) { 241 | $files = File::files(base_path('vendor/typicms/pages/src/resources/views/public')); 242 | } 243 | $templates = []; 244 | foreach ($files as $file) { 245 | $filename = File::name($file); 246 | if ($filename === '_section-default.blade') { 247 | continue; 248 | } 249 | if (str_starts_with($filename, '_section-')) { 250 | $name = str_replace(['_section-', '.blade'], '', $filename); 251 | $templates[$name] = ucfirst($name); 252 | } 253 | } 254 | 255 | return ['default' => 'Default'] + $templates; 256 | } 257 | } 258 | 259 | if (!function_exists('getTemplateDir')) { 260 | function getTemplateDir(): string 261 | { 262 | $templateDir = config('typicms.template_dir', 'public'); 263 | $viewPath = app()['view']->getFinder()->getHints()['pages'][0]; 264 | 265 | return mb_rtrim($viewPath . DIRECTORY_SEPARATOR . $templateDir, DIRECTORY_SEPARATOR); 266 | } 267 | } 268 | -------------------------------------------------------------------------------- /artisan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | handleCommand(new ArgvInput); 17 | 18 | exit($status); 19 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | withRouting( 32 | web: __DIR__ . '/../routes/web.php', 33 | commands: __DIR__ . '/../routes/console.php', 34 | health: '/up', 35 | then: function (Application $app) { 36 | $app->booted(function ($app) { 37 | $app->register(PagesRoutesServiceProvider::class); 38 | }); 39 | } 40 | ) 41 | ->withMiddleware(function (Middleware $middleware) { 42 | $middleware->api([ 43 | SetLocaleFromUser::class, 44 | ]); 45 | $middleware->appendToGroup('public', [ 46 | EncryptCookies::class, 47 | AddQueuedCookiesToResponse::class, 48 | StartSession::class, 49 | ShareErrorsFromSession::class, 50 | ValidateCsrfToken::class, 51 | SubstituteBindings::class, 52 | PoweredByHeader::class, 53 | Impersonate::class, 54 | SetNavbarLocale::class, 55 | SetLocaleFromUrl::class, 56 | VerifyLocalizedUrl::class, 57 | PublicAccess::class, 58 | ]); 59 | $middleware->appendToGroup('admin', [ 60 | EncryptCookies::class, 61 | AddQueuedCookiesToResponse::class, 62 | StartSession::class, 63 | ShareErrorsFromSession::class, 64 | ValidateCsrfToken::class, 65 | SubstituteBindings::class, 66 | 67 | Authenticate::class, 68 | 69 | SetTranslatableFallbackLocaleToNull::class, 70 | SetLocaleFromUser::class, 71 | SetContentLocale::class, 72 | 73 | Impersonate::class, 74 | SetNavbarLocale::class, 75 | 76 | JavaScriptData::class, 77 | UserPrefs::class, 78 | ]); 79 | $middleware->redirectGuestsTo(fn (Request $request) => route(getBrowserLocaleOrMainLocale() . '::login')); 80 | }) 81 | ->withExceptions(function (Exceptions $exceptions) { 82 | $exceptions->dontReport([]); 83 | 84 | $exceptions->render(function (HttpException $e, Request $request) { 85 | $statusCode = $e->getStatusCode(); 86 | if ($request->is('admin/*') && view()->exists('errors.admin.' . $statusCode)) { 87 | return response()->view('errors.admin.' . $statusCode, [], $statusCode); 88 | } 89 | }); 90 | 91 | if (app()->bound('sentry')) { 92 | if (auth()->check()) { 93 | $guard = null; 94 | $userInfo = []; 95 | foreach (array_keys(config('auth.guards')) as $guard) { 96 | if (auth($guard)->check()) { 97 | return $guard; 98 | } 99 | } 100 | if ($user = auth($guard)->user()) { 101 | $userInfo = [ 102 | 'id' => $guard . '-with-id-' . $user->id, 103 | 'email' => $user->email, 104 | ]; 105 | } 106 | \Sentry\configureScope(function (Scope $scope) use ($userInfo): void { 107 | $scope->setUser($userInfo, true); 108 | }); 109 | } 110 | Integration::handles($exceptions); 111 | } 112 | }) 113 | ->create(); 114 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /bootstrap/providers.php: -------------------------------------------------------------------------------- 1 | =3.0.0" }, "optionalPeers": ["@uppy/dashboard", "@uppy/drag-drop", "@uppy/file-input", "@uppy/progress-bar", "@uppy/status-bar"] }, "sha512-4jsZQEl49lbb1pei19RroYLqIR6H9b1mAwRnoSrmoJ6ol4B2btyknQunrUKNM58vKFQqVDcn1fxM4QPZPQ4yNA=="], 302 | 303 | "@uppy/xhr-upload": ["@uppy/xhr-upload@4.3.3", "", { "dependencies": { "@uppy/companion-client": "^4.4.1", "@uppy/utils": "^6.1.2" }, "peerDependencies": { "@uppy/core": "^4.4.2" } }, "sha512-I7RVppwTvLRlVfoW5piMxcZKzWF42E6CwYFQ42d2LzizrkG4tVLQkQrTZlw85za3nhcSrX3o/d1eNx3pzLmsdw=="], 304 | 305 | "@vitejs/plugin-vue": ["@vitejs/plugin-vue@5.2.4", "", { "peerDependencies": { "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA=="], 306 | 307 | "@vue/compiler-core": ["@vue/compiler-core@3.5.16", "", { "dependencies": { "@babel/parser": "^7.27.2", "@vue/shared": "3.5.16", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ=="], 308 | 309 | "@vue/compiler-dom": ["@vue/compiler-dom@3.5.16", "", { "dependencies": { "@vue/compiler-core": "3.5.16", "@vue/shared": "3.5.16" } }, "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ=="], 310 | 311 | "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.16", "", { "dependencies": { "@babel/parser": "^7.27.2", "@vue/compiler-core": "3.5.16", "@vue/compiler-dom": "3.5.16", "@vue/compiler-ssr": "3.5.16", "@vue/shared": "3.5.16", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.3", "source-map-js": "^1.2.1" } }, "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw=="], 312 | 313 | "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.16", "", { "dependencies": { "@vue/compiler-dom": "3.5.16", "@vue/shared": "3.5.16" } }, "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A=="], 314 | 315 | "@vue/devtools-api": ["@vue/devtools-api@6.6.4", "", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="], 316 | 317 | "@vue/reactivity": ["@vue/reactivity@3.5.16", "", { "dependencies": { "@vue/shared": "3.5.16" } }, "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA=="], 318 | 319 | "@vue/runtime-core": ["@vue/runtime-core@3.5.16", "", { "dependencies": { "@vue/reactivity": "3.5.16", "@vue/shared": "3.5.16" } }, "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ=="], 320 | 321 | "@vue/runtime-dom": ["@vue/runtime-dom@3.5.16", "", { "dependencies": { "@vue/reactivity": "3.5.16", "@vue/runtime-core": "3.5.16", "@vue/shared": "3.5.16", "csstype": "^3.1.3" } }, "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww=="], 322 | 323 | "@vue/server-renderer": ["@vue/server-renderer@3.5.16", "", { "dependencies": { "@vue/compiler-ssr": "3.5.16", "@vue/shared": "3.5.16" }, "peerDependencies": { "vue": "3.5.16" } }, "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg=="], 324 | 325 | "@vue/shared": ["@vue/shared@3.5.16", "", {}, "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg=="], 326 | 327 | "abbrev": ["abbrev@2.0.0", "", {}, "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ=="], 328 | 329 | "aigle": ["aigle@1.14.1", "", { "dependencies": { "aigle-core": "^1.0.0" } }, "sha512-bCmQ65CEebspmpbWFs6ab3S27TNyVH1b5MledX8KoiGxUhsJmPUUGpaoSijhwawNnq5Lt8jbcq7Z7gUAD0nuTw=="], 330 | 331 | "aigle-core": ["aigle-core@1.0.0", "", {}, "sha512-uGFWPumk5DLvYnUphNnff+kWC8VeAnjPbbU8ovsSHflKXGX77SD7cAN/aSBCLX3xnoJAM9KdtRgxUygRnSSu7A=="], 332 | 333 | "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], 334 | 335 | "alertify.js": ["alertify.js@1.0.12", "", { "dependencies": { "snyk": "^1.14.3" } }, "sha512-RXLsrDPo64gn+KRf11LibErPor8PUusyWUYANdlQBjxS2G7GfxwuIZGVksoOHzFy4kCx7iGwFxBIs9SJ//iSxQ=="], 336 | 337 | "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 338 | 339 | "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], 340 | 341 | "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], 342 | 343 | "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], 344 | 345 | "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], 346 | 347 | "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], 348 | 349 | "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], 350 | 351 | "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], 352 | 353 | "blade-formatter": ["blade-formatter@1.42.2", "", { "dependencies": { "@prettier/plugin-php": "^0.22.4", "@shufo/tailwindcss-class-sorter": "3.0.1", "aigle": "^1.14.1", "ajv": "^8.9.0", "chalk": "^4.1.0", "concat-stream": "^2.0.0", "detect-indent": "^6.0.0", "find-config": "^1.0.0", "glob": "^10.0.0", "html-attribute-sorter": "^0.4.3", "ignore": "^6.0.0", "js-beautify": "^1.14.8", "lodash": "^4.17.19", "php-parser": "3.2.2", "prettier": "^3.2.5", "string-replace-async": "^2.0.0", "tailwindcss": "^3.1.8", "vscode-oniguruma": "1.7.0", "vscode-textmate": "^7.0.1", "xregexp": "^5.0.1", "yargs": "^17.3.1" }, "bin": { "blade-formatter": "bin/blade-formatter.cjs" } }, "sha512-mbjnget+vJ8fcKiEn0Et1IepMdiKoDGxSROt6qFKF3UW+tmRuvr/v/CK8GECJL+RE6jsJo8x3mFXrDZk+RgjDQ=="], 354 | 355 | "boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="], 356 | 357 | "bootstrap": ["bootstrap@5.3.6", "", { "peerDependencies": { "@popperjs/core": "^2.11.8" } }, "sha512-jX0GAcRzvdwISuvArXn3m7KZscWWFAf1MKBcnzaN02qWMb3jpMoUX4/qgeiGzqyIb4ojulRzs89UCUmGcFSzTA=="], 358 | 359 | "bootstrap-icons": ["bootstrap-icons@1.13.1", "", {}, "sha512-ijombt4v6bv5CLeXvRWKy7CuM3TRTuPEuGaGKvTV5cz65rQSY8RQ2JcHt6b90cBBAC7s8fsf2EkQDldzCoXUjw=="], 360 | 361 | "brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], 362 | 363 | "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], 364 | 365 | "browserslist": ["browserslist@4.24.5", "", { "dependencies": { "caniuse-lite": "^1.0.30001716", "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw=="], 366 | 367 | "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], 368 | 369 | "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], 370 | 371 | "caniuse-lite": ["caniuse-lite@1.0.30001718", "", {}, "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw=="], 372 | 373 | "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], 374 | 375 | "chokidar": ["chokidar@3.6.0", "", { "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" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], 376 | 377 | "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], 378 | 379 | "ckeditor4": ["ckeditor4@4.21.0", "", {}, "sha512-OAMw68puJcrKFtsPZwIWVB/upYLgJpFw1yTuBBIhoreY+g/f0SttjQY0I/fUwxevVUHvgmRVNeJwNl8qkJPvyw=="], 380 | 381 | "classnames": ["classnames@2.5.1", "", {}, "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="], 382 | 383 | "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], 384 | 385 | "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], 386 | 387 | "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], 388 | 389 | "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], 390 | 391 | "commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], 392 | 393 | "concat-stream": ["concat-stream@2.0.0", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A=="], 394 | 395 | "concurrently": ["concurrently@9.1.2", "", { "dependencies": { "chalk": "^4.1.2", "lodash": "^4.17.21", "rxjs": "^7.8.1", "shell-quote": "^1.8.1", "supports-color": "^8.1.1", "tree-kill": "^1.2.2", "yargs": "^17.7.2" }, "bin": { "concurrently": "dist/bin/concurrently.js", "conc": "dist/bin/concurrently.js" } }, "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ=="], 396 | 397 | "config-chain": ["config-chain@1.1.13", "", { "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ=="], 398 | 399 | "core-js-pure": ["core-js-pure@3.42.0", "", {}, "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ=="], 400 | 401 | "cropperjs": ["cropperjs@1.6.2", "", {}, "sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA=="], 402 | 403 | "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], 404 | 405 | "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], 406 | 407 | "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], 408 | 409 | "de-indent": ["de-indent@1.0.2", "", {}, "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="], 410 | 411 | "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], 412 | 413 | "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], 414 | 415 | "detect-indent": ["detect-indent@6.1.0", "", {}, "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA=="], 416 | 417 | "detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], 418 | 419 | "detect-node": ["detect-node@2.1.0", "", {}, "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="], 420 | 421 | "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], 422 | 423 | "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], 424 | 425 | "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], 426 | 427 | "editorconfig": ["editorconfig@1.0.4", "", { "dependencies": { "@one-ini/wasm": "0.1.1", "commander": "^10.0.0", "minimatch": "9.0.1", "semver": "^7.5.3" }, "bin": { "editorconfig": "bin/editorconfig" } }, "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q=="], 428 | 429 | "electron-to-chromium": ["electron-to-chromium@1.5.159", "", {}, "sha512-CEvHptWAMV5p6GJ0Lq8aheyvVbfzVrv5mmidu1D3pidoVNkB3tTBsTMVtPJ+rzRK5oV229mCLz9Zj/hNvU8GBA=="], 430 | 431 | "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], 432 | 433 | "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], 434 | 435 | "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], 436 | 437 | "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], 438 | 439 | "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], 440 | 441 | "es6-error": ["es6-error@4.1.1", "", {}, "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="], 442 | 443 | "esbuild": ["esbuild@0.25.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.5", "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", "@esbuild/darwin-x64": "0.25.5", "@esbuild/freebsd-arm64": "0.25.5", "@esbuild/freebsd-x64": "0.25.5", "@esbuild/linux-arm": "0.25.5", "@esbuild/linux-arm64": "0.25.5", "@esbuild/linux-ia32": "0.25.5", "@esbuild/linux-loong64": "0.25.5", "@esbuild/linux-mips64el": "0.25.5", "@esbuild/linux-ppc64": "0.25.5", "@esbuild/linux-riscv64": "0.25.5", "@esbuild/linux-s390x": "0.25.5", "@esbuild/linux-x64": "0.25.5", "@esbuild/netbsd-arm64": "0.25.5", "@esbuild/netbsd-x64": "0.25.5", "@esbuild/openbsd-arm64": "0.25.5", "@esbuild/openbsd-x64": "0.25.5", "@esbuild/sunos-x64": "0.25.5", "@esbuild/win32-arm64": "0.25.5", "@esbuild/win32-ia32": "0.25.5", "@esbuild/win32-x64": "0.25.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ=="], 444 | 445 | "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], 446 | 447 | "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], 448 | 449 | "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], 450 | 451 | "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], 452 | 453 | "exifr": ["exifr@7.1.3", "", {}, "sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw=="], 454 | 455 | "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], 456 | 457 | "fast-glob": ["fast-glob@3.3.3", "", { "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.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], 458 | 459 | "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], 460 | 461 | "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], 462 | 463 | "fdir": ["fdir@6.4.5", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw=="], 464 | 465 | "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], 466 | 467 | "find-config": ["find-config@1.0.0", "", { "dependencies": { "user-home": "^2.0.0" } }, "sha512-Z+suHH+7LSE40WfUeZPIxSxypCWvrzdVc60xAjUShZeT5eMWM0/FQUduq3HjluyfAHWvC/aOBkT1pTZktyF/jg=="], 468 | 469 | "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], 470 | 471 | "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], 472 | 473 | "fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], 474 | 475 | "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 476 | 477 | "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], 478 | 479 | "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], 480 | 481 | "glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], 482 | 483 | "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], 484 | 485 | "global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="], 486 | 487 | "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], 488 | 489 | "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], 490 | 491 | "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], 492 | 493 | "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], 494 | 495 | "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], 496 | 497 | "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], 498 | 499 | "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], 500 | 501 | "html-attribute-sorter": ["html-attribute-sorter@0.4.3", "", {}, "sha512-HWSvaXJki44tg0uR1t+j5pRdUVpNiZcJaoB/PFhss/YoAw9cxUDLCpIBbLWQmKjBQfWk91P6LaRnredEyabrDw=="], 502 | 503 | "ignore": ["ignore@6.0.2", "", {}, "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A=="], 504 | 505 | "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], 506 | 507 | "immutable": ["immutable@4.3.7", "", {}, "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw=="], 508 | 509 | "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], 510 | 511 | "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], 512 | 513 | "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], 514 | 515 | "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], 516 | 517 | "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], 518 | 519 | "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], 520 | 521 | "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], 522 | 523 | "is-network-error": ["is-network-error@1.1.0", "", {}, "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g=="], 524 | 525 | "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], 526 | 527 | "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], 528 | 529 | "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], 530 | 531 | "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], 532 | 533 | "js-beautify": ["js-beautify@1.15.4", "", { "dependencies": { "config-chain": "^1.1.13", "editorconfig": "^1.0.4", "glob": "^10.4.2", "js-cookie": "^3.0.5", "nopt": "^7.2.1" }, "bin": { "css-beautify": "js/bin/css-beautify.js", "html-beautify": "js/bin/html-beautify.js", "js-beautify": "js/bin/js-beautify.js" } }, "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA=="], 534 | 535 | "js-cookie": ["js-cookie@3.0.5", "", {}, "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="], 536 | 537 | "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], 538 | 539 | "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], 540 | 541 | "jsonfile": ["jsonfile@6.1.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="], 542 | 543 | "laravel-vite-plugin": ["laravel-vite-plugin@1.3.0", "", { "dependencies": { "picocolors": "^1.0.0", "vite-plugin-full-reload": "^1.1.0" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0" }, "bin": { "clean-orphaned-assets": "bin/clean.js" } }, "sha512-P5qyG56YbYxM8OuYmK2OkhcKe0AksNVJUjq9LUZ5tOekU9fBn9LujYyctI4t9XoLjuMvHJXXpCoPntY1oKltuA=="], 544 | 545 | "lie": ["lie@3.1.1", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw=="], 546 | 547 | "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="], 548 | 549 | "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="], 550 | 551 | "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA=="], 552 | 553 | "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig=="], 554 | 555 | "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.1", "", { "os": "linux", "cpu": "arm" }, "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q=="], 556 | 557 | "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw=="], 558 | 559 | "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ=="], 560 | 561 | "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw=="], 562 | 563 | "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ=="], 564 | 565 | "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA=="], 566 | 567 | "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="], 568 | 569 | "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], 570 | 571 | "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], 572 | 573 | "linguist-languages": ["linguist-languages@7.30.0", "", {}, "sha512-/mR2Ip16dSeYlYm9ekRLIQWy2b9IiTYuwsBbqZX7FF0Vkmg5myT8ALwHHxt5kTadHziegAAda+i4zEJxR5NdNw=="], 574 | 575 | "localforage": ["localforage@1.10.0", "", { "dependencies": { "lie": "3.1.1" } }, "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg=="], 576 | 577 | "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], 578 | 579 | "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], 580 | 581 | "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], 582 | 583 | "matcher": ["matcher@3.0.0", "", { "dependencies": { "escape-string-regexp": "^4.0.0" } }, "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng=="], 584 | 585 | "memoize-one": ["memoize-one@6.0.0", "", {}, "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="], 586 | 587 | "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], 588 | 589 | "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], 590 | 591 | "mime-match": ["mime-match@1.0.2", "", { "dependencies": { "wildcard": "^1.1.0" } }, "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg=="], 592 | 593 | "minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], 594 | 595 | "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], 596 | 597 | "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], 598 | 599 | "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], 600 | 601 | "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], 602 | 603 | "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], 604 | 605 | "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], 606 | 607 | "namespace-emitter": ["namespace-emitter@2.0.1", "", {}, "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g=="], 608 | 609 | "nanoid": ["nanoid@5.1.5", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw=="], 610 | 611 | "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], 612 | 613 | "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], 614 | 615 | "nopt": ["nopt@7.2.1", "", { "dependencies": { "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w=="], 616 | 617 | "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], 618 | 619 | "normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], 620 | 621 | "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], 622 | 623 | "object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], 624 | 625 | "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], 626 | 627 | "os-homedir": ["os-homedir@1.0.2", "", {}, "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ=="], 628 | 629 | "p-map": ["p-map@7.0.3", "", {}, "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA=="], 630 | 631 | "p-queue": ["p-queue@8.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw=="], 632 | 633 | "p-retry": ["p-retry@6.2.1", "", { "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", "retry": "^0.13.1" } }, "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ=="], 634 | 635 | "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], 636 | 637 | "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], 638 | 639 | "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], 640 | 641 | "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], 642 | 643 | "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], 644 | 645 | "photoswipe": ["photoswipe@5.4.4", "", {}, "sha512-WNFHoKrkZNnvFFhbHL93WDkW3ifwVOXSW3w1UuZZelSmgXpIGiZSNlZJq37rR8YejqME2rHs9EhH9ZvlvFH2NA=="], 646 | 647 | "php-parser": ["php-parser@3.2.2", "", {}, "sha512-voj3rzCJmEbwHwH3QteON28wA6K+JbcaJEofyUZkUXmcViiXofjbSbcE5PtqtjX6nstnnAEYCFoRq0mkjP5/cg=="], 648 | 649 | "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], 650 | 651 | "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], 652 | 653 | "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], 654 | 655 | "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], 656 | 657 | "postcss": ["postcss@8.5.4", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w=="], 658 | 659 | "postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], 660 | 661 | "postcss-js": ["postcss-js@4.0.1", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw=="], 662 | 663 | "postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], 664 | 665 | "postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="], 666 | 667 | "postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], 668 | 669 | "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], 670 | 671 | "preact": ["preact@10.26.7", "", {}, "sha512-43xS+QYc1X1IPbw03faSgY6I6OYWcLrJRv3hU0+qMOfh/XCHcP0MX2CVjNARYR2cC/guu975sta4OcjlczxD7g=="], 672 | 673 | "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], 674 | 675 | "pretty-bytes": ["pretty-bytes@6.1.1", "", {}, "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ=="], 676 | 677 | "proto-list": ["proto-list@1.2.4", "", {}, "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="], 678 | 679 | "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], 680 | 681 | "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], 682 | 683 | "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], 684 | 685 | "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], 686 | 687 | "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], 688 | 689 | "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], 690 | 691 | "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], 692 | 693 | "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], 694 | 695 | "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], 696 | 697 | "roarr": ["roarr@2.15.4", "", { "dependencies": { "boolean": "^3.0.1", "detect-node": "^2.0.4", "globalthis": "^1.0.1", "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" } }, "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A=="], 698 | 699 | "rollup": ["rollup@4.41.1", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.41.1", "@rollup/rollup-android-arm64": "4.41.1", "@rollup/rollup-darwin-arm64": "4.41.1", "@rollup/rollup-darwin-x64": "4.41.1", "@rollup/rollup-freebsd-arm64": "4.41.1", "@rollup/rollup-freebsd-x64": "4.41.1", "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", "@rollup/rollup-linux-arm-musleabihf": "4.41.1", "@rollup/rollup-linux-arm64-gnu": "4.41.1", "@rollup/rollup-linux-arm64-musl": "4.41.1", "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-musl": "4.41.1", "@rollup/rollup-linux-s390x-gnu": "4.41.1", "@rollup/rollup-linux-x64-gnu": "4.41.1", "@rollup/rollup-linux-x64-musl": "4.41.1", "@rollup/rollup-win32-arm64-msvc": "4.41.1", "@rollup/rollup-win32-ia32-msvc": "4.41.1", "@rollup/rollup-win32-x64-msvc": "4.41.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw=="], 700 | 701 | "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], 702 | 703 | "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], 704 | 705 | "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 706 | 707 | "sass": ["sass@1.77.6", "", { "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { "sass": "sass.js" } }, "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q=="], 708 | 709 | "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], 710 | 711 | "semver-compare": ["semver-compare@1.0.0", "", {}, "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="], 712 | 713 | "serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="], 714 | 715 | "shallow-equal": ["shallow-equal@3.1.0", "", {}, "sha512-pfVOw8QZIXpMbhBWvzBISicvToTiM5WBF1EeAUZDDSb5Dt29yl4AYbyywbJFSEsRUMr7gJaxqCdr4L3tQf9wVg=="], 716 | 717 | "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], 718 | 719 | "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], 720 | 721 | "shell-quote": ["shell-quote@1.8.2", "", {}, "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA=="], 722 | 723 | "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], 724 | 725 | "sl-vue-tree-next": ["sl-vue-tree-next@0.0.14", "", {}, "sha512-kPK/jZAPUfQStbcFxyXntBFRUglkPG4y1nAMI1lKPdTnuFM/9GG6Y+nrTLEiOuTMoDjZW40pDGuD24cDqXM/jA=="], 726 | 727 | "snyk": ["snyk@1.1297.1", "", { "dependencies": { "@sentry/node": "^7.36.0", "global-agent": "^3.0.0" }, "bin": { "snyk": "bin/snyk" } }, "sha512-l4bQPu90DvIKHs5h4aCo6ie4WwFq5pEB9IrLHONJzRwCY7ukT/z7rj0abYxR+aot/tnsQXcM/LgGIzIyy+3DVw=="], 728 | 729 | "sortablejs": ["sortablejs@1.14.0", "", {}, "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w=="], 730 | 731 | "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], 732 | 733 | "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], 734 | 735 | "string-replace-async": ["string-replace-async@2.0.0", "", {}, "sha512-AHMupZscUiDh07F1QziX7PLoB1DQ/pzu19vc8Xa8LwZcgnOXaw7yCgBuSYrxVEfaM2d8scc3Gtp+i+QJZV+spw=="], 736 | 737 | "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], 738 | 739 | "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], 740 | 741 | "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], 742 | 743 | "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 744 | 745 | "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 746 | 747 | "sucrase": ["sucrase@3.35.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA=="], 748 | 749 | "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], 750 | 751 | "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], 752 | 753 | "swiper": ["swiper@11.2.8", "", {}, "sha512-S5FVf6zWynPWooi7pJ7lZhSUe2snTzqLuUzbd5h5PHUOhzgvW0bLKBd2wv0ixn6/5o9vwc/IkQT74CRcLJQzeg=="], 754 | 755 | "tailwindcss": ["tailwindcss@3.4.17", "", { "dependencies": { "@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.6", "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", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og=="], 756 | 757 | "tapable": ["tapable@2.2.2", "", {}, "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg=="], 758 | 759 | "tar": ["tar@7.4.3", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="], 760 | 761 | "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], 762 | 763 | "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], 764 | 765 | "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], 766 | 767 | "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], 768 | 769 | "tom-select": ["tom-select@2.4.3", "", { "dependencies": { "@orchidjs/sifter": "^1.1.0", "@orchidjs/unicode-variants": "^1.1.2" } }, "sha512-MFFrMxP1bpnAMPbdvPCZk0KwYxLqhYZso39torcdoefeV/NThNyDu8dV96/INJ5XQVTL3O55+GqQ78Pkj5oCfw=="], 770 | 771 | "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], 772 | 773 | "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], 774 | 775 | "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 776 | 777 | "type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="], 778 | 779 | "typedarray": ["typedarray@0.0.6", "", {}, "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="], 780 | 781 | "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], 782 | 783 | "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], 784 | 785 | "user-home": ["user-home@2.0.0", "", { "dependencies": { "os-homedir": "^1.0.0" } }, "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ=="], 786 | 787 | "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], 788 | 789 | "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@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.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], 790 | 791 | "vite-plugin-full-reload": ["vite-plugin-full-reload@1.2.0", "", { "dependencies": { "picocolors": "^1.0.0", "picomatch": "^2.3.1" } }, "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA=="], 792 | 793 | "vite-plugin-static-copy": ["vite-plugin-static-copy@3.0.0", "", { "dependencies": { "chokidar": "^3.5.3", "fs-extra": "^11.3.0", "p-map": "^7.0.3", "picocolors": "^1.1.1", "tinyglobby": "^0.2.13" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0" } }, "sha512-Uki9pPUQ4ZnoMEdIFabvoh9h6Bh9Q1m3iF7BrZvoiF30reREpJh2gZb4jOnW1/uYFzyRiLCmFSkM+8hwiq1vWQ=="], 794 | 795 | "vscode-oniguruma": ["vscode-oniguruma@1.7.0", "", {}, "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA=="], 796 | 797 | "vscode-textmate": ["vscode-textmate@7.0.4", "", {}, "sha512-9hJp0xL7HW1Q5OgGe03NACo7yiCTMEk3WU/rtKXUbncLtdg6rVVNJnHwD88UhbIYU2KoxY0Dih0x+kIsmUKn2A=="], 798 | 799 | "vue": ["vue@3.5.16", "", { "dependencies": { "@vue/compiler-dom": "3.5.16", "@vue/compiler-sfc": "3.5.16", "@vue/runtime-dom": "3.5.16", "@vue/server-renderer": "3.5.16", "@vue/shared": "3.5.16" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w=="], 800 | 801 | "vue-i18n": ["vue-i18n@11.1.5", "", { "dependencies": { "@intlify/core-base": "11.1.5", "@intlify/shared": "11.1.5", "@vue/devtools-api": "^6.5.0" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-XCwuaEA5AF97g1frvH/EI1zI9uo1XKTf2/OCFgts7NvUWRsjlgeHPrkJV+a3gpzai2pC4quZ4AnOHFO8QK9hsg=="], 802 | 803 | "vue-template-compiler": ["vue-template-compiler@2.7.16", "", { "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ=="], 804 | 805 | "vuedraggable": ["vuedraggable@4.1.0", "", { "dependencies": { "sortablejs": "1.14.0" }, "peerDependencies": { "vue": "^3.0.1" } }, "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww=="], 806 | 807 | "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], 808 | 809 | "wildcard": ["wildcard@1.1.2", "", {}, "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng=="], 810 | 811 | "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], 812 | 813 | "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], 814 | 815 | "xregexp": ["xregexp@5.1.2", "", { "dependencies": { "@babel/runtime-corejs3": "^7.26.9" } }, "sha512-6hGgEMCGhqCTFEJbqmWrNIPqfpdirdGWkqshu7fFZddmTSfgv5Sn9D2SaKloR79s5VUiUlpwzg3CM3G6D3VIlw=="], 816 | 817 | "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], 818 | 819 | "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], 820 | 821 | "yaml": ["yaml@2.8.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ=="], 822 | 823 | "yargs": ["yargs@17.7.2", "", { "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" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], 824 | 825 | "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], 826 | 827 | "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], 828 | 829 | "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], 830 | 831 | "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], 832 | 833 | "@shufo/prettier-plugin-blade/prettier": ["prettier@3.4.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ=="], 834 | 835 | "@tailwindcss/cli/tailwindcss": ["tailwindcss@4.1.8", "", {}, "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og=="], 836 | 837 | "@tailwindcss/node/jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], 838 | 839 | "@tailwindcss/node/tailwindcss": ["tailwindcss@4.1.8", "", {}, "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og=="], 840 | 841 | "@tailwindcss/oxide/detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], 842 | 843 | "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="], 844 | 845 | "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="], 846 | 847 | "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="], 848 | 849 | "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.10", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.9.0" }, "bundled": true }, "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ=="], 850 | 851 | "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="], 852 | 853 | "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 854 | 855 | "@uppy/companion-client/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 856 | 857 | "@uppy/components/tailwindcss": ["tailwindcss@4.1.8", "", {}, "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og=="], 858 | 859 | "@uppy/dashboard/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 860 | 861 | "@uppy/drag-drop/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 862 | 863 | "@uppy/drop-target/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 864 | 865 | "@uppy/file-input/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 866 | 867 | "@uppy/image-editor/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 868 | 869 | "@uppy/informer/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 870 | 871 | "@uppy/progress-bar/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 872 | 873 | "@uppy/provider-views/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 874 | 875 | "@uppy/status-bar/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 876 | 877 | "@uppy/thumbnail-generator/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 878 | 879 | "@uppy/xhr-upload/@uppy/utils": ["@uppy/utils@6.1.4", "", { "dependencies": { "lodash": "^4.17.21", "preact": "^10.5.13" } }, "sha512-VMad3BA8QwYu9GYwkOa7MkmgnUET0Q582/htjLAAcH2QXCFZsX7l59qRs/wW6nyR1tUJYU1XSAFlCTjjwTPecA=="], 880 | 881 | "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 882 | 883 | "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], 884 | 885 | "editorconfig/minimatch": ["minimatch@9.0.1", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w=="], 886 | 887 | "lightningcss/detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], 888 | 889 | "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 890 | 891 | "postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], 892 | 893 | "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 894 | 895 | "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], 896 | 897 | "tailwindcss/glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], 898 | 899 | "tailwindcss/postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], 900 | 901 | "vite/postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], 902 | 903 | "vite-plugin-full-reload/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 904 | 905 | "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], 906 | 907 | "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], 908 | 909 | "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], 910 | 911 | "tailwindcss/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], 912 | 913 | "vite/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], 914 | } 915 | } 916 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://getcomposer.org/schema.json", 3 | "name": "typicms/base", 4 | "type": "project", 5 | "description": "A multilingual CMS built with Laravel", 6 | "keywords": [ 7 | "cms", 8 | "multilingual", 9 | "laravel", 10 | "typi" 11 | ], 12 | "license": "MIT", 13 | "authors": [ 14 | { 15 | "name": "Samuel De Backer", 16 | "email": "samuel@typidesign.be", 17 | "role": "Developer" 18 | } 19 | ], 20 | "repositories": [ 21 | { 22 | "type": "vcs", 23 | "url": "https://github.com/TypiCMS/Laravel-Sidebar.git" 24 | } 25 | ], 26 | "require": { 27 | "php": "^8.2", 28 | "bkwld/croppa": "^7.0", 29 | "eluceo/ical": "^2.13", 30 | "genealabs/laravel-model-caching": "^12.0", 31 | "laracasts/presenter": "^0.2.8", 32 | "laracasts/utilities": "^3.2", 33 | "laravel/framework": "^12.0", 34 | "laravel/prompts": "^0.3", 35 | "laravel/tinker": "^2.9", 36 | "laravel/ui": "^4.6", 37 | "maatwebsite/excel": "^3.1", 38 | "maatwebsite/laravel-sidebar": "^1.2.3", 39 | "msurguy/honeypot": "^1.4", 40 | "spatie/eloquent-sortable": "^4.4", 41 | "spatie/laravel-feed": "^4.4", 42 | "spatie/laravel-permission": "^6.16", 43 | "spatie/laravel-query-builder": "^6.3", 44 | "spatie/laravel-translatable": "^6.11", 45 | "symfony/http-client": "^7.2", 46 | "symfony/mailgun-mailer": "^7.2", 47 | "typicms/core": "^14.0", 48 | "typicms/laravel-translatable-bootforms": "^8.0.1", 49 | "typicms/nestablecollection": "^5.0", 50 | "typicms/things": "^14.0", 51 | "typidesign/laravel-artisan-translations": "^3.1", 52 | "ultrono/laravel-sitemap": "^9.5" 53 | }, 54 | "require-dev": { 55 | "barryvdh/laravel-debugbar": "^3.13", 56 | "fakerphp/faker": "^1.23", 57 | "laravel/pail": "^1.2.2", 58 | "laravel/pint": "^1.13", 59 | "laravel/sail": "^1.41", 60 | "mockery/mockery": "^1.6", 61 | "nunomaduro/collision": "^8.6", 62 | "spatie/laravel-ignition": "^2.9" 63 | }, 64 | "autoload": { 65 | "psr-4": { 66 | "App\\": "app/", 67 | "Database\\Factories\\": "database/factories/", 68 | "Database\\Seeders\\": "database/seeders/", 69 | "TypiCMS\\Modules\\": "Modules/" 70 | }, 71 | "files": [ 72 | "app/helpers.php" 73 | ] 74 | }, 75 | "autoload-dev": { 76 | "psr-4": { 77 | "Tests\\": "tests/" 78 | } 79 | }, 80 | "scripts": { 81 | "post-autoload-dump": [ 82 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", 83 | "@php artisan package:discover --ansi" 84 | ], 85 | "post-update-cmd": [ 86 | "@php artisan vendor:publish --tag=laravel-assets --ansi --force" 87 | ], 88 | "post-root-package-install": [ 89 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 90 | ], 91 | "post-create-project-cmd": [ 92 | "@php artisan key:generate --ansi", 93 | "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", 94 | "@php artisan migrate --graceful --ansi", 95 | "@php artisan storage:link" 96 | ], 97 | "dev": [ 98 | "Composer\\Config::disableProcessTimeout", 99 | "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite" 100 | ] 101 | }, 102 | "extra": { 103 | "laravel": { 104 | "dont-discover": [] 105 | } 106 | }, 107 | "config": { 108 | "optimize-autoloader": true, 109 | "preferred-install": "dist", 110 | "sort-packages": true, 111 | "allow-plugins": { 112 | "pestphp/pest-plugin": true, 113 | "php-http/discovery": true 114 | } 115 | }, 116 | "minimum-stability": "stable", 117 | "prefer-stable": true 118 | } 119 | -------------------------------------------------------------------------------- /config/app.php: -------------------------------------------------------------------------------- 1 | env('APP_NAME', 'Laravel'), 16 | 17 | /* 18 | |-------------------------------------------------------------------------- 19 | | Application Environment 20 | |-------------------------------------------------------------------------- 21 | | 22 | | This value determines the "environment" your application is currently 23 | | running in. This may determine how you prefer to configure various 24 | | services the application utilizes. Set this in your ".env" file. 25 | | 26 | */ 27 | 28 | 'env' => env('APP_ENV', 'production'), 29 | 30 | /* 31 | |-------------------------------------------------------------------------- 32 | | Application Debug Mode 33 | |-------------------------------------------------------------------------- 34 | | 35 | | When your application is in debug mode, detailed error messages with 36 | | stack traces will be shown on every error that occurs within your 37 | | application. If disabled, a simple generic error page is shown. 38 | | 39 | */ 40 | 41 | 'debug' => (bool) env('APP_DEBUG', false), 42 | 43 | /* 44 | |-------------------------------------------------------------------------- 45 | | Application URL 46 | |-------------------------------------------------------------------------- 47 | | 48 | | This URL is used by the console to properly generate URLs when using 49 | | the Artisan command line tool. You should set this to the root of 50 | | the application so that it's available within Artisan commands. 51 | | 52 | */ 53 | 54 | 'url' => env('APP_URL', 'http://localhost'), 55 | 56 | /* 57 | |-------------------------------------------------------------------------- 58 | | Application Timezone 59 | |-------------------------------------------------------------------------- 60 | | 61 | | Here you may specify the default timezone for your application, which 62 | | will be used by the PHP date and date-time functions. The timezone 63 | | is set to "UTC" by default as it is suitable for most use cases. 64 | | 65 | */ 66 | 67 | 'timezone' => 'UTC', 68 | 69 | /* 70 | |-------------------------------------------------------------------------- 71 | | Application Locale Configuration 72 | |-------------------------------------------------------------------------- 73 | | 74 | | The application locale determines the default locale that will be used 75 | | by Laravel's translation / localization methods. This option can be 76 | | set to any locale for which you plan to have translation strings. 77 | | 78 | */ 79 | 80 | 'locale' => env('APP_LOCALE', 'en'), 81 | 82 | 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), 83 | 84 | 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), 85 | 86 | /* 87 | |-------------------------------------------------------------------------- 88 | | Encryption Key 89 | |-------------------------------------------------------------------------- 90 | | 91 | | This key is utilized by Laravel's encryption services and should be set 92 | | to a random, 32 character string to ensure that all encrypted values 93 | | are secure. You should do this prior to deploying the application. 94 | | 95 | */ 96 | 97 | 'cipher' => 'AES-256-CBC', 98 | 99 | 'key' => env('APP_KEY'), 100 | 101 | 'previous_keys' => [ 102 | ...array_filter( 103 | explode(',', env('APP_PREVIOUS_KEYS', '')) 104 | ), 105 | ], 106 | 107 | /* 108 | |-------------------------------------------------------------------------- 109 | | Maintenance Mode Driver 110 | |-------------------------------------------------------------------------- 111 | | 112 | | These configuration options determine the driver used to determine and 113 | | manage Laravel's "maintenance mode" status. The "cache" driver will 114 | | allow maintenance mode to be controlled across multiple machines. 115 | | 116 | | Supported drivers: "file", "cache" 117 | | 118 | */ 119 | 120 | 'maintenance' => [ 121 | 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), 122 | 'store' => env('APP_MAINTENANCE_STORE', 'database'), 123 | ], 124 | ]; 125 | -------------------------------------------------------------------------------- /config/auth.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'guard' => env('AUTH_GUARD', 'web'), 18 | 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), 19 | ], 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Authentication Guards 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Next, you may define every authentication guard for your application. 27 | | Of course, a great default configuration has been defined for you 28 | | which utilizes session storage plus the Eloquent user provider. 29 | | 30 | | All authentication guards have a user provider, which defines how the 31 | | users are actually retrieved out of your database or other storage 32 | | system used by the application. Typically, Eloquent is utilized. 33 | | 34 | | Supported: "session" 35 | | 36 | */ 37 | 38 | 'guards' => [ 39 | 'web' => [ 40 | 'driver' => 'session', 41 | 'provider' => 'users', 42 | ], 43 | 'api' => [ 44 | 'driver' => 'token', 45 | 'provider' => 'users', 46 | 'hash' => false, 47 | ], 48 | ], 49 | 50 | /* 51 | |-------------------------------------------------------------------------- 52 | | User Providers 53 | |-------------------------------------------------------------------------- 54 | | 55 | | All authentication guards have a user provider, which defines how the 56 | | users are actually retrieved out of your database or other storage 57 | | system used by the application. Typically, Eloquent is utilized. 58 | | 59 | | If you have multiple user tables or models you may configure multiple 60 | | providers to represent the model / table. These providers may then 61 | | be assigned to any extra authentication guards you have defined. 62 | | 63 | | Supported: "database", "eloquent" 64 | | 65 | */ 66 | 67 | 'providers' => [ 68 | 'users' => [ 69 | 'driver' => 'eloquent', 70 | 'model' => env('AUTH_MODEL', App\Models\User::class), 71 | ], 72 | 73 | // 'users' => [ 74 | // 'driver' => 'database', 75 | // 'table' => 'users', 76 | // ], 77 | ], 78 | 79 | /* 80 | |-------------------------------------------------------------------------- 81 | | Resetting Passwords 82 | |-------------------------------------------------------------------------- 83 | | 84 | | These configuration options specify the behavior of Laravel's password 85 | | reset functionality, including the table utilized for token storage 86 | | and the user provider that is invoked to actually retrieve users. 87 | | 88 | | The expiry time is the number of minutes that each reset token will be 89 | | considered valid. This security feature keeps tokens short-lived so 90 | | they have less time to be guessed. You may change this as needed. 91 | | 92 | | The throttle setting is the number of seconds a user must wait before 93 | | generating more password reset tokens. This prevents the user from 94 | | quickly generating a very large amount of password reset tokens. 95 | | 96 | */ 97 | 98 | 'passwords' => [ 99 | 'users' => [ 100 | 'provider' => 'users', 101 | 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), 102 | 'expire' => 60, 103 | 'throttle' => 60, 104 | ], 105 | ], 106 | 107 | /* 108 | |-------------------------------------------------------------------------- 109 | | Password Confirmation Timeout 110 | |-------------------------------------------------------------------------- 111 | | 112 | | Here you may define the amount of seconds before a password confirmation 113 | | window expires and users are asked to re-enter their password via the 114 | | confirmation screen. By default, the timeout lasts for three hours. 115 | | 116 | */ 117 | 118 | 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), 119 | 120 | ]; 121 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_STORE', 'database'), 18 | 19 | /* 20 | |-------------------------------------------------------------------------- 21 | | Cache Stores 22 | |-------------------------------------------------------------------------- 23 | | 24 | | Here you may define all of the cache "stores" for your application as 25 | | well as their drivers. You may even define multiple stores for the 26 | | same cache driver to group types of items stored in your caches. 27 | | 28 | | Supported drivers: "array", "database", "file", "memcached", 29 | | "redis", "dynamodb", "octane", "null" 30 | | 31 | */ 32 | 33 | 'stores' => [ 34 | 'array' => [ 35 | 'driver' => 'array', 36 | 'serialize' => false, 37 | ], 38 | 39 | 'database' => [ 40 | 'driver' => 'database', 41 | 'connection' => env('DB_CACHE_CONNECTION'), 42 | 'table' => env('DB_CACHE_TABLE', 'cache'), 43 | 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), 44 | 'lock_table' => env('DB_CACHE_LOCK_TABLE'), 45 | ], 46 | 47 | 'file' => [ 48 | 'driver' => 'file', 49 | 'path' => storage_path('framework/cache/data'), 50 | 'lock_path' => storage_path('framework/cache/data'), 51 | ], 52 | 53 | 'memcached' => [ 54 | 'driver' => 'memcached', 55 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 56 | 'sasl' => [ 57 | env('MEMCACHED_USERNAME'), 58 | env('MEMCACHED_PASSWORD'), 59 | ], 60 | 'options' => [ 61 | // Memcached::OPT_CONNECT_TIMEOUT => 2000, 62 | ], 63 | 'servers' => [ 64 | [ 65 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 66 | 'port' => env('MEMCACHED_PORT', 11211), 67 | 'weight' => 100, 68 | ], 69 | ], 70 | ], 71 | 72 | 'redis' => [ 73 | 'driver' => 'redis', 74 | 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), 75 | 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), 76 | ], 77 | 78 | 'dynamodb' => [ 79 | 'driver' => 'dynamodb', 80 | 'key' => env('AWS_ACCESS_KEY_ID'), 81 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 82 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 83 | 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), 84 | 'endpoint' => env('DYNAMODB_ENDPOINT'), 85 | ], 86 | 87 | 'octane' => [ 88 | 'driver' => 'octane', 89 | ], 90 | ], 91 | 92 | /* 93 | |-------------------------------------------------------------------------- 94 | | Cache Key Prefix 95 | |-------------------------------------------------------------------------- 96 | | 97 | | When utilizing the APC, database, memcached, Redis, and DynamoDB cache 98 | | stores, there might be other applications using the same cache. For 99 | | that reason, you may prefix every cache key to avoid collisions. 100 | | 101 | */ 102 | 103 | 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache_'), 104 | ]; 105 | -------------------------------------------------------------------------------- /config/croppa.php: -------------------------------------------------------------------------------- 1 | 'public', 22 | 23 | /* 24 | * The disk where cropped images will be saved. 25 | */ 26 | 'crops_disk' => 'public', 27 | 28 | /* 29 | * Maximum number of sizes to allow for a particular source file. This is to 30 | * limit scripts from filling up your hard drive with images. Set to false or 31 | * comment out to have no limit. This is disabled by default because the 32 | * `signing_key` is a better prevention of malicious usage. 33 | * 34 | * @var integer | boolean 35 | */ 36 | 'max_crops' => false, 37 | 38 | /* 39 | |----------------------------------------------------------------------------- 40 | | URL parsing and generation 41 | |----------------------------------------------------------------------------- 42 | */ 43 | 44 | /* 45 | * A regex pattern that is applied to both the src url passed to 46 | * `Croppa::url()` as well as the crop path received when handling a crop 47 | * request to find the path to the src image relative to both the src_disk 48 | * and crops_disks. This path will be used to find the source image in the 49 | * src_disk. The path component of the regex must exist in the first captured 50 | * subpattern. In other words, in the `preg_match` $matches[1]. 51 | * 52 | * @var string 53 | */ 54 | 'path' => 'storage/(.*)$', 55 | 56 | /* 57 | * A regex pattern that works like `path` except it is only used by the 58 | * `Croppa::url($url)` generator function. If the $path url matches, it is 59 | * passed through with no Croppa URL suffixes added. Thus, it will not be 60 | * cropped. This is designed, in particular, for animated gifs which lose 61 | * animation when cropped. 62 | * 63 | * @var string 64 | */ 65 | 'ignore' => '\.(gif|GIF)$', 66 | 67 | /* 68 | * Reject attempts to maliciously create images by signing the generated 69 | * request with a hash based on the request parameters and this signing key. 70 | * Set to 'app.key' to use Laravel's `app.key` config, any other string to use 71 | * THAT as the key, or false to disable. 72 | * 73 | * If you are generating URLs outside of `Croppa::url()`, like the croppa.js 74 | * module, you can disable this feature by setting the `signing_key` config 75 | * to false. 76 | * 77 | * @var string | boolean 78 | */ 79 | 'signing_key' => 'app.key', 80 | 81 | /* 82 | * The PHP memory limit used by the script to generate thumbnails. Some 83 | * images require a lot of memory to perform the resize, so you may increase 84 | * this memory limit. 85 | */ 86 | 'memory_limit' => '128M', 87 | 88 | /* 89 | |----------------------------------------------------------------------------- 90 | | Image settings 91 | |----------------------------------------------------------------------------- 92 | */ 93 | 94 | /* 95 | * The jpeg quality of generated images. The difference between 100 and 95 96 | * usually cuts the file size in half. Going down to 70 looks ok on photos 97 | * and will reduce filesize by more than another half but on vector files 98 | * there is noticeable aliasing. 99 | * 100 | * @var integer 101 | */ 102 | 'quality' => 75, 103 | 104 | /* 105 | * Turn on interlacing to make progessive jpegs. 106 | * 107 | * @var boolean 108 | */ 109 | 'interlace' => true, 110 | 111 | /* 112 | * If the source image is smaller than the requested size, allow Croppa to 113 | * scale up the image. This will reduce in quality loss. 114 | * 115 | * @var boolean 116 | */ 117 | 'upsize' => true, 118 | 119 | /* 120 | * Filters for adding additional GD effects to an image and using them as parameter 121 | * in the croppa image slug. 122 | * 123 | * @var array 124 | */ 125 | 'filters' => [ 126 | 'gray' => BlackWhite::class, 127 | 'darkgray' => Darkgray::class, 128 | 'blur' => Blur::class, 129 | 'negative' => Negative::class, 130 | 'orange' => OrangeWarhol::class, 131 | 'turquoise' => TurquoiseWarhol::class, 132 | ], 133 | ]; 134 | -------------------------------------------------------------------------------- /config/database.php: -------------------------------------------------------------------------------- 1 | env('DB_CONNECTION', 'sqlite'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Database Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Below are all of the database connections defined for your application. 26 | | An example configuration is provided for each database system which 27 | | is supported by Laravel. You're free to add / remove connections. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 'sqlite' => [ 33 | 'driver' => 'sqlite', 34 | 'url' => env('DB_URL'), 35 | 'database' => env('DB_DATABASE', database_path('database.sqlite')), 36 | 'prefix' => 'typicms_', 37 | 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), 38 | ], 39 | 40 | 'mysql' => [ 41 | 'driver' => 'mysql', 42 | 'url' => env('DB_URL'), 43 | 'host' => env('DB_HOST', '127.0.0.1'), 44 | 'port' => env('DB_PORT', '3306'), 45 | 'database' => env('DB_DATABASE', 'laravel'), 46 | 'username' => env('DB_USERNAME', 'root'), 47 | 'password' => env('DB_PASSWORD', ''), 48 | 'unix_socket' => env('DB_SOCKET', ''), 49 | 'charset' => env('DB_CHARSET', 'utf8mb4'), 50 | 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 51 | 'prefix' => 'typicms_', 52 | 'prefix_indexes' => true, 53 | 'strict' => true, 54 | 'engine' => null, 55 | 'options' => extension_loaded('pdo_mysql') ? array_filter([ 56 | PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), 57 | ]) : [], 58 | ], 59 | 60 | 'mariadb' => [ 61 | 'driver' => 'mariadb', 62 | 'url' => env('DB_URL'), 63 | 'host' => env('DB_HOST', '127.0.0.1'), 64 | 'port' => env('DB_PORT', '3306'), 65 | 'database' => env('DB_DATABASE', 'laravel'), 66 | 'username' => env('DB_USERNAME', 'root'), 67 | 'password' => env('DB_PASSWORD', ''), 68 | 'unix_socket' => env('DB_SOCKET', ''), 69 | 'charset' => env('DB_CHARSET', 'utf8mb4'), 70 | 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 71 | 'prefix' => 'typicms_', 72 | 'prefix_indexes' => true, 73 | 'strict' => true, 74 | 'engine' => null, 75 | 'options' => extension_loaded('pdo_mysql') ? array_filter([ 76 | PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), 77 | ]) : [], 78 | ], 79 | 80 | 'pgsql' => [ 81 | 'driver' => 'pgsql', 82 | 'url' => env('DB_URL'), 83 | 'host' => env('DB_HOST', '127.0.0.1'), 84 | 'port' => env('DB_PORT', '5432'), 85 | 'database' => env('DB_DATABASE', 'laravel'), 86 | 'username' => env('DB_USERNAME', 'root'), 87 | 'password' => env('DB_PASSWORD', ''), 88 | 'charset' => env('DB_CHARSET', 'utf8'), 89 | 'prefix' => 'typicms_', 90 | 'prefix_indexes' => true, 91 | 'search_path' => 'public', 92 | 'sslmode' => 'prefer', 93 | ], 94 | 95 | 'sqlsrv' => [ 96 | 'driver' => 'sqlsrv', 97 | 'url' => env('DB_URL'), 98 | 'host' => env('DB_HOST', 'localhost'), 99 | 'port' => env('DB_PORT', '1433'), 100 | 'database' => env('DB_DATABASE', 'laravel'), 101 | 'username' => env('DB_USERNAME', 'root'), 102 | 'password' => env('DB_PASSWORD', ''), 103 | 'charset' => env('DB_CHARSET', 'utf8'), 104 | 'prefix' => 'typicms_', 105 | 'prefix_indexes' => true, 106 | // 'encrypt' => env('DB_ENCRYPT', 'yes'), 107 | // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), 108 | ], 109 | ], 110 | 111 | /* 112 | |-------------------------------------------------------------------------- 113 | | Migration Repository Table 114 | |-------------------------------------------------------------------------- 115 | | 116 | | This table keeps track of all the migrations that have already run for 117 | | your application. Using this information, we can determine which of 118 | | the migrations on disk haven't actually been run on the database. 119 | | 120 | */ 121 | 122 | 'migrations' => [ 123 | 'table' => 'migrations', 124 | 'update_date_on_publish' => true, 125 | ], 126 | 127 | /* 128 | |-------------------------------------------------------------------------- 129 | | Redis Databases 130 | |-------------------------------------------------------------------------- 131 | | 132 | | Redis is an open source, fast, and advanced key-value store that also 133 | | provides a richer body of commands than a typical key-value system 134 | | such as Memcached. You may define your connection settings here. 135 | | 136 | */ 137 | 138 | 'redis' => [ 139 | 'client' => env('REDIS_CLIENT', 'phpredis'), 140 | 141 | 'options' => [ 142 | 'cluster' => env('REDIS_CLUSTER', 'redis'), 143 | 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), 144 | ], 145 | 146 | 'default' => [ 147 | 'url' => env('REDIS_URL'), 148 | 'host' => env('REDIS_HOST', '127.0.0.1'), 149 | 'username' => env('REDIS_USERNAME'), 150 | 'password' => env('REDIS_PASSWORD'), 151 | 'port' => env('REDIS_PORT', '6379'), 152 | 'database' => env('REDIS_DB', '0'), 153 | ], 154 | 155 | 'cache' => [ 156 | 'url' => env('REDIS_URL'), 157 | 'host' => env('REDIS_HOST', '127.0.0.1'), 158 | 'username' => env('REDIS_USERNAME'), 159 | 'password' => env('REDIS_PASSWORD'), 160 | 'port' => env('REDIS_PORT', '6379'), 161 | 'database' => env('REDIS_CACHE_DB', '1'), 162 | ], 163 | ], 164 | ]; 165 | -------------------------------------------------------------------------------- /config/eloquent-sortable.php: -------------------------------------------------------------------------------- 1 | 'position', 8 | 9 | /* 10 | * Define if the models should sort when creating. 11 | * When true, the package will automatically assign the highest order number to a new mode 12 | */ 13 | 'sort_when_creating' => true, 14 | ]; 15 | -------------------------------------------------------------------------------- /config/file.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'mp3' => 'a', 6 | 'wav' => 'a', 7 | 'aif' => 'a', 8 | 'aiff' => 'a', 9 | 'aac' => 'a', 10 | 'mp4' => 'a', 11 | 'wma' => 'a', 12 | 'ogg' => 'a', 13 | 'm4v' => 'v', 14 | 'mkv' => 'v', 15 | 'flv' => 'v', 16 | 'mov' => 'v', 17 | 'm4a' => 'v', 18 | 'webm' => 'v', 19 | 'ogv' => 'v', 20 | 'xls' => 'd', 21 | 'xlsx' => 'd', 22 | 'doc' => 'd', 23 | 'docx' => 'd', 24 | 'pdf' => 'd', 25 | 'txt' => 'd', 26 | 'rtf' => 'd', 27 | 'odt' => 'd', 28 | 'ods' => 'd', 29 | 'odp' => 'd', 30 | 'odg' => 'd', 31 | 'odc' => 'd', 32 | 'odf' => 'd', 33 | 'odb' => 'd', 34 | 'odi' => 'd', 35 | 'odm' => 'd', 36 | 'zip' => 'd', 37 | 'jpg' => 'i', 38 | 'jpe' => 'i', 39 | 'jpeg' => 'i', 40 | 'png' => 'i', 41 | 'gif' => 'i', 42 | 'svg' => 'i', 43 | ], 44 | ]; 45 | -------------------------------------------------------------------------------- /config/filesystems.php: -------------------------------------------------------------------------------- 1 | env('FILESYSTEM_DISK', 'local'), 16 | 17 | /* 18 | |-------------------------------------------------------------------------- 19 | | Filesystem Disks 20 | |-------------------------------------------------------------------------- 21 | | 22 | | Below you may configure as many filesystem disks as necessary, and you 23 | | may even configure multiple disks for the same driver. Examples for 24 | | most supported storage drivers are configured here for reference. 25 | | 26 | | Supported drivers: "local", "ftp", "sftp", "s3" 27 | | 28 | */ 29 | 30 | 'disks' => [ 31 | 'local' => [ 32 | 'driver' => 'local', 33 | 'root' => storage_path('app/private'), 34 | 'serve' => true, 35 | 'throw' => false, 36 | 'report' => false, 37 | ], 38 | 39 | 'public' => [ 40 | 'driver' => 'local', 41 | 'root' => storage_path('app/public'), 42 | 'url' => env('APP_URL') . '/storage', 43 | 'visibility' => 'public', 44 | 'throw' => false, 45 | 'report' => false, 46 | ], 47 | 48 | 's3' => [ 49 | 'driver' => 's3', 50 | 'key' => env('AWS_ACCESS_KEY_ID'), 51 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 52 | 'region' => env('AWS_DEFAULT_REGION'), 53 | 'bucket' => env('AWS_BUCKET'), 54 | 'url' => env('AWS_URL'), 55 | 'endpoint' => env('AWS_ENDPOINT'), 56 | 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 57 | 'throw' => false, 58 | 'report' => false, 59 | ], 60 | ], 61 | 62 | /* 63 | |-------------------------------------------------------------------------- 64 | | Symbolic Links 65 | |-------------------------------------------------------------------------- 66 | | 67 | | Here you may configure the symbolic links that will be created when the 68 | | `storage:link` Artisan command is executed. The array keys should be 69 | | the locations of the links and the values should be their targets. 70 | | 71 | */ 72 | 73 | 'links' => [ 74 | public_path('storage') => storage_path('app/public'), 75 | ], 76 | ]; 77 | -------------------------------------------------------------------------------- /config/javascript.php: -------------------------------------------------------------------------------- 1 | 'core::admin._javascript', 16 | 17 | /* 18 | |-------------------------------------------------------------------------- 19 | | JavaScript Namespace 20 | |-------------------------------------------------------------------------- 21 | | 22 | | By default, we'll add variables to the global window object. However, 23 | | it's recommended that you change this to some namespace - anything. 24 | | That way, you can access vars, like "SomeNamespace.someVariable." 25 | | 26 | */ 27 | 'js_namespace' => 'TypiCMS', 28 | ]; 29 | -------------------------------------------------------------------------------- /config/logging.php: -------------------------------------------------------------------------------- 1 | env('LOG_CHANNEL', 'stack'), 21 | 22 | /* 23 | |-------------------------------------------------------------------------- 24 | | Deprecations Log Channel 25 | |-------------------------------------------------------------------------- 26 | | 27 | | This option controls the log channel that should be used to log warnings 28 | | regarding deprecated PHP and library features. This allows you to get 29 | | your application ready for upcoming major versions of dependencies. 30 | | 31 | */ 32 | 33 | 'deprecations' => [ 34 | 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), 35 | 'trace' => env('LOG_DEPRECATIONS_TRACE', false), 36 | ], 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | Log Channels 41 | |-------------------------------------------------------------------------- 42 | | 43 | | Here you may configure the log channels for your application. Laravel 44 | | utilizes the Monolog PHP logging library, which includes a variety 45 | | of powerful log handlers and formatters that you're free to use. 46 | | 47 | | Available drivers: "single", "daily", "slack", "syslog", 48 | | "errorlog", "monolog", "custom", "stack" 49 | | 50 | */ 51 | 52 | 'channels' => [ 53 | 'stack' => [ 54 | 'driver' => 'stack', 55 | 'channels' => explode(',', env('LOG_STACK', 'single')), 56 | 'ignore_exceptions' => false, 57 | ], 58 | 59 | 'single' => [ 60 | 'driver' => 'single', 61 | 'path' => storage_path('logs/laravel.log'), 62 | 'level' => env('LOG_LEVEL', 'debug'), 63 | 'replace_placeholders' => true, 64 | ], 65 | 66 | 'daily' => [ 67 | 'driver' => 'daily', 68 | 'path' => storage_path('logs/laravel.log'), 69 | 'level' => env('LOG_LEVEL', 'debug'), 70 | 'days' => env('LOG_DAILY_DAYS', 14), 71 | 'replace_placeholders' => true, 72 | ], 73 | 74 | 'slack' => [ 75 | 'driver' => 'slack', 76 | 'url' => env('LOG_SLACK_WEBHOOK_URL'), 77 | 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), 78 | 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), 79 | 'level' => env('LOG_LEVEL', 'critical'), 80 | 'replace_placeholders' => true, 81 | ], 82 | 83 | 'papertrail' => [ 84 | 'driver' => 'monolog', 85 | 'level' => env('LOG_LEVEL', 'debug'), 86 | 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), 87 | 'handler_with' => [ 88 | 'host' => env('PAPERTRAIL_URL'), 89 | 'port' => env('PAPERTRAIL_PORT'), 90 | 'connectionString' => 'tls://' . env('PAPERTRAIL_URL') . ':' . env('PAPERTRAIL_PORT'), 91 | ], 92 | 'processors' => [PsrLogMessageProcessor::class], 93 | ], 94 | 95 | 'stderr' => [ 96 | 'driver' => 'monolog', 97 | 'level' => env('LOG_LEVEL', 'debug'), 98 | 'handler' => StreamHandler::class, 99 | 'formatter' => env('LOG_STDERR_FORMATTER'), 100 | 'with' => [ 101 | 'stream' => 'php://stderr', 102 | ], 103 | 'processors' => [PsrLogMessageProcessor::class], 104 | ], 105 | 106 | 'syslog' => [ 107 | 'driver' => 'syslog', 108 | 'level' => env('LOG_LEVEL', 'debug'), 109 | 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), 110 | 'replace_placeholders' => true, 111 | ], 112 | 113 | 'errorlog' => [ 114 | 'driver' => 'errorlog', 115 | 'level' => env('LOG_LEVEL', 'debug'), 116 | 'replace_placeholders' => true, 117 | ], 118 | 119 | 'null' => [ 120 | 'driver' => 'monolog', 121 | 'handler' => NullHandler::class, 122 | ], 123 | 124 | 'emergency' => [ 125 | 'path' => storage_path('logs/laravel.log'), 126 | ], 127 | ], 128 | ]; 129 | -------------------------------------------------------------------------------- /config/mail.php: -------------------------------------------------------------------------------- 1 | env('MAIL_MAILER', 'log'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Mailer Configurations 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may configure all of the mailers used by your application plus 24 | | their respective settings. Several examples have been configured for 25 | | you and you are free to add your own as your application requires. 26 | | 27 | | Laravel supports a variety of mail "transport" drivers that can be used 28 | | when delivering an email. You may specify which one you're using for 29 | | your mailers below. You may also add additional mailers if needed. 30 | | 31 | | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", 32 | | "postmark", "resend", "log", "array", 33 | | "failover", "roundrobin" 34 | | 35 | */ 36 | 37 | 'mailers' => [ 38 | 'smtp' => [ 39 | 'transport' => 'smtp', 40 | 'scheme' => env('MAIL_SCHEME'), 41 | 'url' => env('MAIL_URL'), 42 | 'host' => env('MAIL_HOST', '127.0.0.1'), 43 | 'port' => env('MAIL_PORT', 2525), 44 | 'username' => env('MAIL_USERNAME'), 45 | 'password' => env('MAIL_PASSWORD'), 46 | 'timeout' => null, 47 | 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)), 48 | ], 49 | 50 | 'mailgun' => [ 51 | 'transport' => 'mailgun', 52 | // 'client' => [ 53 | // 'timeout' => 5, 54 | // ], 55 | ], 56 | 57 | 'ses' => [ 58 | 'transport' => 'ses', 59 | ], 60 | 61 | 'postmark' => [ 62 | 'transport' => 'postmark', 63 | // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), 64 | // 'client' => [ 65 | // 'timeout' => 5, 66 | // ], 67 | ], 68 | 69 | 'resend' => [ 70 | 'transport' => 'resend', 71 | ], 72 | 73 | 'sendmail' => [ 74 | 'transport' => 'sendmail', 75 | 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), 76 | ], 77 | 78 | 'log' => [ 79 | 'transport' => 'log', 80 | 'channel' => env('MAIL_LOG_CHANNEL'), 81 | ], 82 | 83 | 'array' => [ 84 | 'transport' => 'array', 85 | ], 86 | 87 | 'failover' => [ 88 | 'transport' => 'failover', 89 | 'mailers' => [ 90 | 'smtp', 91 | 'log', 92 | ], 93 | ], 94 | 95 | 'roundrobin' => [ 96 | 'transport' => 'roundrobin', 97 | 'mailers' => [ 98 | 'ses', 99 | 'postmark', 100 | ], 101 | ], 102 | ], 103 | 104 | /* 105 | |-------------------------------------------------------------------------- 106 | | Global "From" Address 107 | |-------------------------------------------------------------------------- 108 | | 109 | | You may wish for all emails sent by your application to be sent from 110 | | the same address. Here you may specify a name and address that is 111 | | used globally for all emails that are sent by your application. 112 | | 113 | */ 114 | 115 | 'from' => [ 116 | 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 117 | 'name' => env('MAIL_FROM_NAME', 'Example'), 118 | ], 119 | ]; 120 | -------------------------------------------------------------------------------- /config/permission.php: -------------------------------------------------------------------------------- 1 | [ 8 | /* 9 | * When using the "HasPermissions" trait from this package, we need to know which 10 | * Eloquent model should be used to retrieve your permissions. Of course, it 11 | * is often just the "Permission" model but you may use whatever you like. 12 | * 13 | * The model you want to use as a Permission model needs to implement the 14 | * `Spatie\Permission\Contracts\Permission` contract. 15 | */ 16 | 17 | 'permission' => Permission::class, 18 | 19 | /* 20 | * When using the "HasRoles" trait from this package, we need to know which 21 | * Eloquent model should be used to retrieve your roles. Of course, it 22 | * is often just the "Role" model but you may use whatever you like. 23 | * 24 | * The model you want to use as a Role model needs to implement the 25 | * `Spatie\Permission\Contracts\Role` contract. 26 | */ 27 | 28 | 'role' => Role::class, 29 | ], 30 | 31 | 'table_names' => [ 32 | /* 33 | * When using the "HasRoles" trait from this package, we need to know which 34 | * table should be used to retrieve your roles. We have chosen a basic 35 | * default value but you may easily change it to any table you like. 36 | */ 37 | 38 | 'roles' => 'roles', 39 | 40 | /* 41 | * When using the "HasPermissions" trait from this package, we need to know which 42 | * table should be used to retrieve your permissions. We have chosen a basic 43 | * default value but you may easily change it to any table you like. 44 | */ 45 | 46 | 'permissions' => 'permissions', 47 | 48 | /* 49 | * When using the "HasPermissions" trait from this package, we need to know which 50 | * table should be used to retrieve your models permissions. We have chosen a 51 | * basic default value but you may easily change it to any table you like. 52 | */ 53 | 54 | 'model_has_permissions' => 'model_has_permissions', 55 | 56 | /* 57 | * When using the "HasRoles" trait from this package, we need to know which 58 | * table should be used to retrieve your models roles. We have chosen a 59 | * basic default value but you may easily change it to any table you like. 60 | */ 61 | 62 | 'model_has_roles' => 'model_has_roles', 63 | 64 | /* 65 | * When using the "HasRoles" trait from this package, we need to know which 66 | * table should be used to retrieve your roles permissions. We have chosen a 67 | * basic default value but you may easily change it to any table you like. 68 | */ 69 | 70 | 'role_has_permissions' => 'role_has_permissions', 71 | ], 72 | 73 | 'column_names' => [ 74 | /* 75 | * Change this if you want to name the related pivots other than defaults 76 | */ 77 | 'role_pivot_key' => null, // default 'role_id', 78 | 'permission_pivot_key' => null, // default 'permission_id', 79 | 80 | /* 81 | * Change this if you want to name the related model primary key other than 82 | * `model_id`. 83 | * 84 | * For example, this would be nice if your primary keys are all UUIDs. In 85 | * that case, name this `model_uuid`. 86 | */ 87 | 88 | 'model_morph_key' => 'model_id', 89 | 90 | /* 91 | * Change this if you want to use the teams feature and your related model's 92 | * foreign key is other than `team_id`. 93 | */ 94 | 95 | 'team_foreign_key' => 'team_id', 96 | ], 97 | 98 | /* 99 | * When set to true, the method for checking permissions will be registered on the gate. 100 | * Set this to false if you want to implement custom logic for checking permissions. 101 | */ 102 | 103 | 'register_permission_check_method' => true, 104 | 105 | /* 106 | * When set to true, Laravel\Octane\Events\OperationTerminated event listener will be registered 107 | * this will refresh permissions on every TickTerminated, TaskTerminated and RequestTerminated 108 | * NOTE: This should not be needed in most cases, but an Octane/Vapor combination benefited from it. 109 | */ 110 | 'register_octane_reset_listener' => false, 111 | 112 | /* 113 | * Teams Feature. 114 | * When set to true the package implements teams using the 'team_foreign_key'. 115 | * If you want the migrations to register the 'team_foreign_key', you must 116 | * set this to true before doing the migration. 117 | * If you already did the migration then you must make a new migration to also 118 | * add 'team_foreign_key' to 'roles', 'model_has_roles', and 'model_has_permissions' 119 | * (view the latest version of this package's migration file) 120 | */ 121 | 122 | 'teams' => false, 123 | 124 | /* 125 | * Passport Client Credentials Grant 126 | * When set to true the package will use Passports Client to check permissions 127 | */ 128 | 129 | 'use_passport_client_credentials' => false, 130 | 131 | /* 132 | * When set to true, the required permission names are added to exception messages. 133 | * This could be considered an information leak in some contexts, so the default 134 | * setting is false here for optimum safety. 135 | */ 136 | 137 | 'display_permission_in_exception' => false, 138 | 139 | /* 140 | * When set to true, the required role names are added to exception messages. 141 | * This could be considered an information leak in some contexts, so the default 142 | * setting is false here for optimum safety. 143 | */ 144 | 145 | 'display_role_in_exception' => false, 146 | 147 | /* 148 | * By default wildcard permission lookups are disabled. 149 | * See documentation to understand supported syntax. 150 | */ 151 | 152 | 'enable_wildcard_permission' => false, 153 | 154 | /* 155 | * The class to use for interpreting wildcard permissions. 156 | * If you need to modify delimiters, override the class and specify its name here. 157 | */ 158 | // 'permission.wildcard_permission' => Spatie\Permission\WildcardPermission::class, 159 | 160 | /* Cache-specific settings */ 161 | 162 | 'cache' => [ 163 | /* 164 | * By default all permissions are cached for 24 hours to speed up performance. 165 | * When permissions or roles are updated the cache is flushed automatically. 166 | */ 167 | 168 | 'expiration_time' => DateInterval::createFromDateString('24 hours'), 169 | 170 | /* 171 | * The cache key used to store all permissions. 172 | */ 173 | 174 | 'key' => 'spatie.permission.cache', 175 | 176 | /* 177 | * You may optionally indicate a specific cache driver to use for permission and 178 | * role caching using any of the `store` drivers listed in the cache.php config 179 | * file. Using 'default' here means to use the `default` set in cache.php. 180 | */ 181 | 182 | 'store' => 'default', 183 | ], 184 | ]; 185 | -------------------------------------------------------------------------------- /config/queue.php: -------------------------------------------------------------------------------- 1 | env('QUEUE_CONNECTION', 'database'), 16 | 17 | /* 18 | |-------------------------------------------------------------------------- 19 | | Queue Connections 20 | |-------------------------------------------------------------------------- 21 | | 22 | | Here you may configure the connection options for every queue backend 23 | | used by your application. An example configuration is provided for 24 | | each backend supported by Laravel. You're also free to add more. 25 | | 26 | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" 27 | | 28 | */ 29 | 30 | 'connections' => [ 31 | 'sync' => [ 32 | 'driver' => 'sync', 33 | ], 34 | 35 | 'database' => [ 36 | 'driver' => 'database', 37 | 'connection' => env('DB_QUEUE_CONNECTION'), 38 | 'table' => env('DB_QUEUE_TABLE', 'jobs'), 39 | 'queue' => env('DB_QUEUE', 'default'), 40 | 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), 41 | 'after_commit' => false, 42 | ], 43 | 44 | 'beanstalkd' => [ 45 | 'driver' => 'beanstalkd', 46 | 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), 47 | 'queue' => env('BEANSTALKD_QUEUE', 'default'), 48 | 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), 49 | 'block_for' => 0, 50 | 'after_commit' => false, 51 | ], 52 | 53 | 'sqs' => [ 54 | 'driver' => 'sqs', 55 | 'key' => env('AWS_ACCESS_KEY_ID'), 56 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 57 | 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 58 | 'queue' => env('SQS_QUEUE', 'default'), 59 | 'suffix' => env('SQS_SUFFIX'), 60 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 61 | 'after_commit' => false, 62 | ], 63 | 64 | 'redis' => [ 65 | 'driver' => 'redis', 66 | 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 67 | 'queue' => env('REDIS_QUEUE', 'default'), 68 | 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), 69 | 'block_for' => null, 70 | 'after_commit' => false, 71 | ], 72 | ], 73 | 74 | /* 75 | |-------------------------------------------------------------------------- 76 | | Job Batching 77 | |-------------------------------------------------------------------------- 78 | | 79 | | The following options configure the database and table that store job 80 | | batching information. These options can be updated to any database 81 | | connection and table which has been defined by your application. 82 | | 83 | */ 84 | 85 | 'batching' => [ 86 | 'database' => env('DB_CONNECTION', 'sqlite'), 87 | 'table' => 'job_batches', 88 | ], 89 | 90 | /* 91 | |-------------------------------------------------------------------------- 92 | | Failed Queue Jobs 93 | |-------------------------------------------------------------------------- 94 | | 95 | | These options configure the behavior of failed queue job logging so you 96 | | can control how and where failed jobs are stored. Laravel ships with 97 | | support for storing failed jobs in a simple file or in a database. 98 | | 99 | | Supported drivers: "database-uuids", "dynamodb", "file", "null" 100 | | 101 | */ 102 | 103 | 'failed' => [ 104 | 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), 105 | 'database' => env('DB_CONNECTION', 'sqlite'), 106 | 'table' => 'failed_jobs', 107 | ], 108 | ]; 109 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'domain' => env('MAILGUN_DOMAIN'), 18 | 'secret' => env('MAILGUN_SECRET'), 19 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 20 | 'scheme' => 'https', 21 | ], 22 | 23 | 'postmark' => [ 24 | 'token' => env('POSTMARK_TOKEN'), 25 | ], 26 | 27 | 'ses' => [ 28 | 'key' => env('AWS_ACCESS_KEY_ID'), 29 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 30 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 31 | ], 32 | 33 | 'resend' => [ 34 | 'key' => env('RESEND_KEY'), 35 | ], 36 | 37 | 'gmaps' => [ 38 | 'key' => env('GMAPS_API_KEY'), 39 | ], 40 | 41 | 'slack' => [ 42 | 'notifications' => [ 43 | 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), 44 | 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), 45 | ], 46 | ], 47 | ]; 48 | -------------------------------------------------------------------------------- /config/session.php: -------------------------------------------------------------------------------- 1 | env('SESSION_DRIVER', 'database'), 21 | 22 | /* 23 | |-------------------------------------------------------------------------- 24 | | Session Lifetime 25 | |-------------------------------------------------------------------------- 26 | | 27 | | Here you may specify the number of minutes that you wish the session 28 | | to be allowed to remain idle before it expires. If you want them 29 | | to expire immediately when the browser is closed then you may 30 | | indicate that via the expire_on_close configuration option. 31 | | 32 | */ 33 | 34 | 'lifetime' => (int) env('SESSION_LIFETIME', 120), 35 | 36 | 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | Session Encryption 41 | |-------------------------------------------------------------------------- 42 | | 43 | | This option allows you to easily specify that all of your session data 44 | | should be encrypted before it's stored. All encryption is performed 45 | | automatically by Laravel and you may use the session like normal. 46 | | 47 | */ 48 | 49 | 'encrypt' => env('SESSION_ENCRYPT', false), 50 | 51 | /* 52 | |-------------------------------------------------------------------------- 53 | | Session File Location 54 | |-------------------------------------------------------------------------- 55 | | 56 | | When utilizing the "file" session driver, the session files are placed 57 | | on disk. The default storage location is defined here; however, you 58 | | are free to provide another location where they should be stored. 59 | | 60 | */ 61 | 62 | 'files' => storage_path('framework/sessions'), 63 | 64 | /* 65 | |-------------------------------------------------------------------------- 66 | | Session Database Connection 67 | |-------------------------------------------------------------------------- 68 | | 69 | | When using the "database" or "redis" session drivers, you may specify a 70 | | connection that should be used to manage these sessions. This should 71 | | correspond to a connection in your database configuration options. 72 | | 73 | */ 74 | 75 | 'connection' => env('SESSION_CONNECTION'), 76 | 77 | /* 78 | |-------------------------------------------------------------------------- 79 | | Session Database Table 80 | |-------------------------------------------------------------------------- 81 | | 82 | | When using the "database" session driver, you may specify the table to 83 | | be used to store sessions. Of course, a sensible default is defined 84 | | for you; however, you're welcome to change this to another table. 85 | | 86 | */ 87 | 88 | 'table' => env('SESSION_TABLE', 'sessions'), 89 | 90 | /* 91 | |-------------------------------------------------------------------------- 92 | | Session Cache Store 93 | |-------------------------------------------------------------------------- 94 | | 95 | | When using one of the framework's cache driven session backends, you may 96 | | define the cache store which should be used to store the session data 97 | | between requests. This must match one of your defined cache stores. 98 | | 99 | | Affects: "apc", "dynamodb", "memcached", "redis" 100 | | 101 | */ 102 | 103 | 'store' => env('SESSION_STORE'), 104 | 105 | /* 106 | |-------------------------------------------------------------------------- 107 | | Session Sweeping Lottery 108 | |-------------------------------------------------------------------------- 109 | | 110 | | Some session drivers must manually sweep their storage location to get 111 | | rid of old sessions from storage. Here are the chances that it will 112 | | happen on a given request. By default, the odds are 2 out of 100. 113 | | 114 | */ 115 | 116 | 'lottery' => [2, 100], 117 | 118 | /* 119 | |-------------------------------------------------------------------------- 120 | | Session Cookie Name 121 | |-------------------------------------------------------------------------- 122 | | 123 | | Here you may change the name of the session cookie that is created by 124 | | the framework. Typically, you should not need to change this value 125 | | since doing so does not grant a meaningful security improvement. 126 | | 127 | */ 128 | 129 | 'cookie' => env( 130 | 'SESSION_COOKIE', 131 | Str::slug(env('APP_NAME', 'laravel'), '_') . '_session' 132 | ), 133 | 134 | /* 135 | |-------------------------------------------------------------------------- 136 | | Session Cookie Path 137 | |-------------------------------------------------------------------------- 138 | | 139 | | The session cookie path determines the path for which the cookie will 140 | | be regarded as available. Typically, this will be the root path of 141 | | your application, but you're free to change this when necessary. 142 | | 143 | */ 144 | 145 | 'path' => env('SESSION_PATH', '/'), 146 | 147 | /* 148 | |-------------------------------------------------------------------------- 149 | | Session Cookie Domain 150 | |-------------------------------------------------------------------------- 151 | | 152 | | This value determines the domain and subdomains the session cookie is 153 | | available to. By default, the cookie will be available to the root 154 | | domain and all subdomains. Typically, this shouldn't be changed. 155 | | 156 | */ 157 | 158 | 'domain' => env('SESSION_DOMAIN'), 159 | 160 | /* 161 | |-------------------------------------------------------------------------- 162 | | HTTPS Only Cookies 163 | |-------------------------------------------------------------------------- 164 | | 165 | | By setting this option to true, session cookies will only be sent back 166 | | to the server if the browser has a HTTPS connection. This will keep 167 | | the cookie from being sent to you when it can't be done securely. 168 | | 169 | */ 170 | 171 | 'secure' => env('SESSION_SECURE_COOKIE'), 172 | 173 | /* 174 | |-------------------------------------------------------------------------- 175 | | HTTP Access Only 176 | |-------------------------------------------------------------------------- 177 | | 178 | | Setting this value to true will prevent JavaScript from accessing the 179 | | value of the cookie and the cookie will only be accessible through 180 | | the HTTP protocol. It's unlikely you should disable this option. 181 | | 182 | */ 183 | 184 | 'http_only' => env('SESSION_HTTP_ONLY', true), 185 | 186 | /* 187 | |-------------------------------------------------------------------------- 188 | | Same-Site Cookies 189 | |-------------------------------------------------------------------------- 190 | | 191 | | This option determines how your cookies behave when cross-site requests 192 | | take place, and can be used to mitigate CSRF attacks. By default, we 193 | | will set this value to "lax" to permit secure cross-site requests. 194 | | 195 | | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value 196 | | 197 | | Supported: "lax", "strict", "none", null 198 | | 199 | */ 200 | 201 | 'same_site' => env('SESSION_SAME_SITE', 'lax'), 202 | 203 | /* 204 | |-------------------------------------------------------------------------- 205 | | Partitioned Cookies 206 | |-------------------------------------------------------------------------- 207 | | 208 | | Setting this value to true will tie the cookie to the top-level site for 209 | | a cross-site context. Partitioned cookies are accepted by the browser 210 | | when flagged "secure" and the Same-Site attribute is set to "none". 211 | | 212 | */ 213 | 214 | 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), 215 | ]; 216 | -------------------------------------------------------------------------------- /config/translatable-bootforms.php: -------------------------------------------------------------------------------- 1 | Name (en) 20 | | 21 | | 22 | */ 23 | 24 | 'label-locale-indicator' => '%label (%locale)', 25 | 26 | /* 27 | |-------------------------------------------------------------------------- 28 | | Form Group class 29 | |-------------------------------------------------------------------------- 30 | | 31 | | The class to apply to the form group of localized form elements. 32 | | Useful for showing/hiding only form inputs of a certain language. 33 | | By styling this class to be hidden by default and then have Javascript show/hide 34 | | the form group based on the language that it contains, flickering of form elements 35 | | can be prevented. 36 | | 37 | | Available placeholders: 38 | | %locale The locale (e.g. 'en') 39 | | 40 | | E.g. for 'form-group-translation': 41 | |
42 | | ... 43 | |
44 | */ 45 | 46 | 'form-group-class' => 'form-group-translation', 47 | 48 | /* 49 | |-------------------------------------------------------------------------- 50 | | Input locale attribute 51 | |-------------------------------------------------------------------------- 52 | | 53 | | The attribute to use when attaching the corresponding locale to a localized form element. 54 | | Useful for showing/hiding only form inputs of a certain language. 55 | | 56 | | E.g. for 'data-language': 57 | | 58 | | 59 | */ 60 | 61 | 'input-locale-attribute' => 'data-language', 62 | ]; 63 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite* 2 | -------------------------------------------------------------------------------- /database/factories/UserFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class UserFactory extends Factory 13 | { 14 | /** 15 | * The current password being used by the factory. 16 | */ 17 | protected static ?string $password; 18 | 19 | /** 20 | * Define the model's default state. 21 | * 22 | * @return array 23 | */ 24 | public function definition(): array 25 | { 26 | return [ 27 | 'name' => fake()->name(), 28 | 'email' => fake()->unique()->safeEmail(), 29 | 'email_verified_at' => now(), 30 | 'password' => static::$password ??= Hash::make('password'), 31 | 'remember_token' => Str::random(10), 32 | ]; 33 | } 34 | 35 | /** 36 | * Indicate that the model's email address should be unverified. 37 | */ 38 | public function unverified(): static 39 | { 40 | return $this->state(fn (array $attributes) => [ 41 | 'email_verified_at' => null, 42 | ]); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lang/.gitignore: -------------------------------------------------------------------------------- 1 | !.gitignore 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "type": "module", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vite build", 7 | "development": "vite", 8 | "watch": "vite", 9 | "prod": "vite build", 10 | "production": "vite build", 11 | "format": "npx prettier --write resources/" 12 | }, 13 | "devDependencies": { 14 | "@popperjs/core": "^2.11.8", 15 | "@shufo/prettier-plugin-blade": "^1.15.3", 16 | "@simplewebauthn/browser": "^13.1.0", 17 | "@uppy/core": "^4.4.6", 18 | "@uppy/dashboard": "^4.3.4", 19 | "@uppy/drag-drop": "^4.1.3", 20 | "@uppy/drop-target": "^3.1.1", 21 | "@uppy/file-input": "^4.1.3", 22 | "@uppy/image-editor": "^3.3.3", 23 | "@uppy/locales": "^4.5.3", 24 | "@uppy/progress-bar": "^4.2.1", 25 | "@uppy/vue": "^2.2.0", 26 | "@uppy/xhr-upload": "^4.3.3", 27 | "@vitejs/plugin-vue": "^5.2.4", 28 | "alertify.js": "^1.0.12", 29 | "autoprefixer": "^10.4.21", 30 | "bootstrap": "^5.3.6", 31 | "bootstrap-icons": "^1.13.1", 32 | "ckeditor4": "4.21.0", 33 | "concurrently": "^9.1.2", 34 | "laravel-vite-plugin": "^1.3.0", 35 | "mitt": "^3.0.1", 36 | "photoswipe": "^5.4.4", 37 | "postcss": "^8.5.4", 38 | "prettier": "^3.5.3", 39 | "sass": "1.77.6", 40 | "sl-vue-tree-next": "^0.0.14", 41 | "swiper": "^11.2.8", 42 | "tom-select": "^2.4.3", 43 | "vite": "^6.3.5", 44 | "vite-plugin-static-copy": "^3.0.0", 45 | "vue": "^3.5.16", 46 | "vue-i18n": "^11.1.5", 47 | "vue-template-compiler": "^2.7.16", 48 | "vuedraggable": "^4.1.0" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /phpstan.neon: -------------------------------------------------------------------------------- 1 | includes: 2 | - vendor/larastan/larastan/extension.neon 3 | - vendor/nesbot/carbon/extension.neon 4 | 5 | parameters: 6 | 7 | paths: 8 | - app/ 9 | - Modules/ 10 | 11 | # Level 10 is the highest level 12 | level: 5 13 | 14 | # ignoreErrors: 15 | # - '#PHPDoc tag @var#' 16 | # 17 | # excludePaths: 18 | # - ./*/*/FileToBeExcluded.php 19 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | tests/Unit 10 | 11 | 12 | tests/Feature 13 | 14 | 15 | 16 | 17 | app 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /pint.json: -------------------------------------------------------------------------------- 1 | { 2 | "preset": "laravel", 3 | "rules": { 4 | "mb_str_functions": true, 5 | "modernize_types_casting": true, 6 | "modernize_strpos": true, 7 | "fully_qualified_strict_types": { 8 | "import_symbols": false 9 | }, 10 | "not_operator_with_successor_space": false, 11 | "phpdoc_align": { 12 | "align": "left" 13 | }, 14 | "new_with_parentheses": { 15 | "anonymous_class": false, 16 | "named_class": true 17 | }, 18 | "concat_space": { 19 | "spacing": "one" 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews -Indexes 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Handle Authorization Header 9 | RewriteCond %{HTTP:Authorization} . 10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 11 | 12 | # Handle X-XSRF-Token Header 13 | RewriteCond %{HTTP:x-xsrf-token} . 14 | RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] 15 | 16 | # Redirect Trailing Slashes If Not A Folder... 17 | RewriteCond %{REQUEST_FILENAME} !-d 18 | RewriteCond %{REQUEST_URI} (.+)/$ 19 | RewriteRule ^ %1 [L,R=301] 20 | 21 | # Send Requests To Front Controller... 22 | RewriteCond %{REQUEST_FILENAME} !-d 23 | RewriteCond %{REQUEST_FILENAME} !-f 24 | RewriteRule ^ index.php [L] 25 | 26 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypiCMS/Base/737eff8e7e8f53e66af0ff9117d9204d3c46b168/public/favicon.ico -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | handleRequest(Request::capture()); 21 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 8 | })->purpose('Display an inspiring quote'); 9 | -------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 |