Initial commit

This commit is contained in:
Ronald Huynen
2026-03-23 21:37:59 +01:00
commit 2547717edb
2193 changed files with 972171 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
use PhpCsFixer\Config;
use PhpCsFixer\Finder;
use PhpCsFixer\Runner\Parallel\ParallelConfigFactory;
return (new Config())
->setParallelConfig(ParallelConfigFactory::detect()) // @TODO 4.0 no need to call this manually
->setRiskyAllowed(false)
->setRules([
'@auto' => true
])
// 💡 by default, Fixer looks for `*.php` files excluding `./vendor/` - here, you can groom this config
->setFinder(
(new Finder())
// 💡 root folder to check
->in(__DIR__)
// 💡 additional files, eg bin entry file
// ->append([__DIR__.'/bin-entry-file'])
// 💡 folders to exclude, if any
// ->exclude([/* ... */])
// 💡 path patterns to exclude, if any
// ->notPath([/* ... */])
// 💡 extra configs
// ->ignoreDotFiles(false) // true by default in v3, false in v4 or future mode
// ->ignoreVCS(true) // true by default
)
;

52
config/activitylog.php Normal file
View File

@@ -0,0 +1,52 @@
<?php
return [
/*
* If set to false, no activities will be saved to the database.
*/
'enabled' => env('ACTIVITY_LOGGER_ENABLED', true),
/*
* When the clean-command is executed, all recording activities older than
* the number of days specified here will be deleted.
*/
'delete_records_older_than_days' => timebank_config('admin_settings.activity_log_delete_records_older_than_days', 365),
/*
* If no log name is passed to the activity() helper
* we use this default log name.
*/
'default_log_name' => 'default',
/*
* You can specify an auth driver here that gets user models.
* If this is null we'll use the current Laravel auth driver.
*/
'default_auth_driver' => null,
/*
* If set to true, the subject returns soft deleted models.
*/
'subject_returns_soft_deleted_models' => false,
/*
* This model will be used to log activity.
* It should implement the Spatie\Activitylog\Contracts\Activity interface
* and extend Illuminate\Database\Eloquent\Model.
*/
'activity_model' => \Spatie\Activitylog\Models\Activity::class,
/*
* This is the name of the table that will be created by the migration and
* used by the Activity model shipped with this package.
*/
'table_name' => 'activity_log',
/*
* This is the database connection that will be used by the migration and
* the Activity model shipped with this package. In case it's not set
* Laravel's database.default will be used instead.
*/
'database_connection' => env('ACTIVITY_LOGGER_DB_CONNECTION'),
];

83
config/ai-translator.php Normal file
View File

@@ -0,0 +1,83 @@
<?php
return [
// Language file directory. 'lang' for Laravel.
'source_directory' => 'resources/lang',
// Source language for translations. Default is 'en' for English.
'source_locale' => 'en',
'ai' => [
// claude-3-haiku (using this because it's working)
'provider' => 'anthropic',
'model' => 'claude-3-haiku-20240307', // Recommend to use for testing purpose. It's better than gpt-3.5
'api_key' => env('ANTHROPIC_API_KEY'),
// claude-3-5-sonnet
// 'provider' => 'anthropic',
// 'model' => 'claude-3-5-sonnet-latest', // Best result. Recommend for production.
// 'api_key' => env('ANTHROPIC_API_KEY'),
// gpt-4o
// 'provider' => 'openai',
// 'model' => 'gpt-4o', // Balanced. Normal price, normal accuracy. Recommend for production.
// 'api_key' => env('OPENAI_API_KEY'),
// gpt-4o-mini
// 'provider' => 'openai',
// 'model' => 'gpt-4o-mini', // Recommend to use for testing purpose. It sometimes doesn't translate.
// 'api_key' => env('OPENAI_API_KEY'),
// gemini-2.5-pro-preview-05-06
// 'provider' => 'gemini',
// 'model' => 'gemini-2.5-pro-preview-05-06',
// 'api_key' => env('GEMINI_API_KEY'),
// Additional options
// 'retries' => 5,
// 'max_tokens' => 4096,
// 'use_extended_thinking' => false, // Extended Thinking 기능 사용 여부 (claude-3-7-sonnet-latest 모델만 지원)
// 'disable_stream' => true, // Disable streaming mode for better error messages
// 'prompt_custom_system_file_path' => null, // Full path to your own custom prompt-system.txt - i.e. resource_path('prompt-system.txt')
// 'prompt_custom_user_file_path' => null, // Full path to your own custom prompt-user.txt - i.e. resource_path('prompt-user.txt')
],
// 'disable_plural' => true,
'skip_locales' => ['vendor'],
// 'skip_files' => [],
// If set to true, translations will be saved as flat arrays using dot notation keys. If set to false, translations will be saved as multi-dimensional arrays.
'dot_notation' => true,
// You can add additional custom locale names here.
// Example: 'en_us', 'en-us', 'en_US', 'en-US'
'locale_names' => [
'en_reddit' => 'English (Reddit)',
],
// Fallback
// - 'default' is fallback rules for all languages which don't have specific rules. If you added custom rules for a language, 'default' will not be used.
// Combining the language and regional rules:
// - In the situation that you defined rules for 'en' and 'en_us'
// - If you translate into 'en_us', both 'en' and 'en_us' will be applied.
// - If you translate into 'en', only 'en' will be applied.
// - If you translate into 'en_uk', only 'en' will be applied.
'additional_rules' => [
'default' => [
"Use a friendly, intuitive, and informal tone of voice. Simple vocabulary is preferred over advanced vocabulary.",
"Use informal addressing: 'je' in Dutch, 'tu' in French, 'du' in German, 'tú' in Spanish (not formal 'u', 'vous', 'Sie', 'usted').",
],
'ko' => [
"- 한국의 인터넷 서비스 '토스'의 서비스 말투 처럼, 유저에게 친근하고 직관적인 말투로 설명하고 존댓말로 설명하세요.",
],
'en_reddit' => [
"- Use a sarcastic and informal tone of voice, like the users in 'Reddit'.",
'- Tell the AI to use heavy sarcasm and exaggeration, often employing phrases like "Obviously," "Clearly," or "Wow, who would have thought?" to emphasize the obviousness of a point in a mocking way.',
"- Instruct the AI to liberally use internet slang, memes, and pop culture references, particularly those popular on Reddit, such as \"Nice try, FBI,\" \"This guy reddits,\" or \"I also choose this guy's dead wife.\"",
'- Direct the AI to be skeptical of everything, encouraging it to question sources, point out logical fallacies, and respond with "Source?" even for trivial claims.',
'- Ask the AI to incorporate self-deprecating humor and cynicism, often making jokes about depression, social anxiety, or being forever alone, which are common themes in Reddit humor.',
"- Instruct the AI to use puns, wordplay, and intentionally bad jokes, followed by expressions like \"\/s\" to denote sarcasm, or \"I'll see myself out\" after particularly groan-worthy puns, mimicking common Reddit comment patterns.",
],
],
];

291
config/app.php Normal file
View File

@@ -0,0 +1,291 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Application Name
|--------------------------------------------------------------------------
|
| This value is the name of your application. This value is used when the
| framework needs to place the application's name in a notification or
| any other location as required by the application or its packages.
|
*/
'name' => env('APP_NAME', 'Laravel'),
// Version follows CalVer: YY.M.patch (e.g. 26.3.0 = year 2026, March, patch 0)
'version' => env('APP_VERSION', '26.3.0'),
// Release date of the current version (YYYY-MM-DD)
'release_date' => env('APP_RELEASE_DATE', '2026-03-29'),
// URL to the changelog
'changelog_url' => env('APP_CHANGELOG_URL', ''),
/*
|--------------------------------------------------------------------------
| Application Environment
|--------------------------------------------------------------------------
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
| services the application utilizes. Set this in your ".env" file.
|
*/
'env' => env('APP_ENV', 'production'),
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => (bool) env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
| Bounce Email Processing
|--------------------------------------------------------------------------
|
| This value determines whether bounce email processing is enabled.
| Requires valid IMAP configuration. Should be disabled on local and
| staging environments without IMAP access.
|
*/
'bounce_processing_enabled' => (bool) env('BOUNCE_PROCESSING_ENABLED', false),
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => env('APP_URL', 'http://localhost'),
'asset_url' => env('ASSET_URL', null),
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'Europe/Paris',
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
| IMPORTANT: location names (locales tables) without the fallback_locale
| will not be ignored. Make sure that all location names have at least
| their local (country) locale and this fallback_locale.
*/
'fallback_locale' => 'en',
/*
|--------------------------------------------------------------------------
| Supported Locales
|--------------------------------------------------------------------------
|
| This array lists all of the locales supported by the application. If a
| translation key is not found for the current locale, the fallback locale
| will be used instead. You are free to add additional locales to this
| array as needed.
|
*/
'locales' => [
'en',
'nl',
'de',
'fr',
'es',
],
/*
|--------------------------------------------------------------------------
| Faker Locale
|--------------------------------------------------------------------------
|
| This locale will be used by the Faker PHP library when generating fake
| data for your database seeds. For example, this will be used to get
| localized telephone numbers, street address information and more.
|
*/
'faker_locale' => 'nl',
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is used by the Illuminate encrypter service and should be set
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Package Service Providers...
*/
Stevebauman\Location\LocationServiceProvider::class,
Matchish\ScoutElasticSearch\ElasticSearchServiceProvider::class,
Laravel\Scout\ScoutServiceProvider::class,
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\FortifyServiceProvider::class,
App\Providers\JetstreamServiceProvider::class,
App\Providers\ScoutObserverServiceProvider::class,
App\Providers\ThemeServiceProvider::class,
App\Providers\MailBounceServiceProvider::class,
],
/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| This array of class aliases will be registered when this application
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Arr' => Illuminate\Support\Arr::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
'Bus' => Illuminate\Support\Facades\Bus::class,
'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'Date' => Illuminate\Support\Facades\Date::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Http' => Illuminate\Support\Facades\Http::class,
'IpLocation' => Stevebauman\Location\Facades\Location::class,
'Js' => Illuminate\Support\Js::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
'Notification' => Illuminate\Support\Facades\Notification::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
// 'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Share' => Enflow\SocialShare\SocialShareFacade::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'Str' => Illuminate\Support\Str::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
],
];

150
config/auth.php Normal file
View File

@@ -0,0 +1,150 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| Supported: "session"
|
*/
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'organization' => [
'driver' => 'session',
'provider' => 'organizations',
],
'bank' => [
'driver' => 'session',
'provider' => 'banks',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'organizations' => [
'driver' => 'eloquent',
'model' => App\Models\Organization::class,
],
'banks' => [
'driver' => 'eloquent',
'model' => App\Models\Bank::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin::class,
],
],
/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| You may specify multiple password reset configurations if you have more
| than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types.
|
| The expire time is the number of minutes that each reset token will be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
*/
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60, // Token expiration time in minutes
'throttle' => 60, // Throttle time for reset requests
],
'organizations' => [
'provider' => 'organizations',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
'banks' => [
'provider' => 'banks',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
/*
|--------------------------------------------------------------------------
| Password Confirmation Timeout
|--------------------------------------------------------------------------
|
| Here you may define the amount of seconds before a password confirmation
| times out and the user is prompted to re-enter their password via the
| confirmation screen. By default, the timeout lasts for three hours.
|
*/
'password_timeout' => 10800,
];

84
config/broadcasting.php Normal file
View File

@@ -0,0 +1,84 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Broadcaster
|--------------------------------------------------------------------------
|
| This option controls the default broadcaster that will be used by the
| framework when an event needs to be broadcast. You may set this to
| any of the connections defined in the "connections" array below.
|
| Supported: "pusher", "ably", "redis", "log", "null"
|
*/
'default' => env('BROADCAST_DRIVER', 'null'),
/*
|--------------------------------------------------------------------------
| Broadcast Connections
|--------------------------------------------------------------------------
|
| Here you may define all of the broadcast connections that will be used
| to broadcast events to other systems or over websockets. Samples of
| each available type of connection are provided inside this array.
|
*/
'connections' => [
'reverb' => [
'driver' => 'reverb',
'key' => env('REVERB_APP_KEY'),
'secret' => env('REVERB_APP_SECRET'),
'app_id' => env('REVERB_APP_ID'),
'options' => [
'host' => env('REVERB_HOST'),
'port' => env('REVERB_PORT', 443),
'scheme' => env('REVERB_SCHEME', 'https'),
'useTLS' => env('REVERB_SCHEME', 'https') === 'https',
],
'client_options' => [
// Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
],
],
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'encrypted' => true,
'useTLS' => true,
'host' => env('PUSHER_HOST', '127.0.0.1'),
'port' => env('PUSHER_PORT', 6001),
'scheme' => env('PUSHER_SCHEME'),
],
],
'ably' => [
'driver' => 'ably',
'key' => env('ABLY_KEY'),
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];

110
config/cache.php Normal file
View File

@@ -0,0 +1,110 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Cache Store
|--------------------------------------------------------------------------
|
| This option controls the default cache connection that gets used while
| using this caching library. This connection is used when another is
| not explicitly specified when executing a given caching function.
|
*/
'default' => env('CACHE_DRIVER', 'redis'),
/*
|--------------------------------------------------------------------------
| Cache Stores
|--------------------------------------------------------------------------
|
| Here you may define all of the cache "stores" for your application as
| well as their drivers. You may even define multiple stores for the
| same cache driver to group types of items stored in your caches.
|
| Supported drivers: "apc", "array", "database", "file",
| "memcached", "redis", "dynamodb", "octane", "null"
|
*/
'stores' => [
'apc' => [
'driver' => 'apc',
],
'array' => [
'driver' => 'array',
'serialize' => false,
],
'database' => [
'driver' => 'database',
'table' => 'cache',
'connection' => null,
'lock_connection' => null,
],
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
],
'memcached' => [
'driver' => 'memcached',
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
'sasl' => [
env('MEMCACHED_USERNAME'),
env('MEMCACHED_PASSWORD'),
],
'options' => [
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
],
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
'lock_connection' => 'default',
],
'dynamodb' => [
'driver' => 'dynamodb',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
'endpoint' => env('DYNAMODB_ENDPOINT'),
],
'octane' => [
'driver' => 'octane',
],
],
/*
|--------------------------------------------------------------------------
| Cache Key Prefix
|--------------------------------------------------------------------------
|
| When utilizing a RAM based store such as APC or Memcached, there might
| be other applications utilizing the same cache. So, we'll specify a
| value to get prefixed to all our keys so we can avoid collisions.
|
*/
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),
];

34
config/cors.php Normal file
View File

@@ -0,0 +1,34 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Cross-Origin Resource Sharing (CORS) Configuration
|--------------------------------------------------------------------------
|
| Here you may configure your settings for cross-origin resource sharing
| or "CORS". This determines what cross-origin operations may execute
| in web browsers. You are free to adjust these settings as needed.
|
| To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
|
*/
'paths' => ['api/*', 'sanctum/csrf-cookie', 'broadcasting/auth'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
];

155
config/database.php Normal file
View File

@@ -0,0 +1,155 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for all database work. Of course
| you may use many connections at once using the Database library.
|
*/
'default' => env('DB_CONNECTION', 'mysql'),
/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Here are each of the database connections setup for your application.
| Of course, examples of configuring each database platform that is
| supported by Laravel is shown below to make development simple.
|
|
| All database work in Laravel is done through the PHP PDO facilities
| so make sure you have the driver for your particular database of
| choice installed on your machine before you begin development.
|
*/
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
'schema' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
],
],
/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/
'migrations' => 'migrations',
/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
'session' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => '2',
],
],
];

281
config/debugbar.php Normal file
View File

@@ -0,0 +1,281 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Debugbar Settings
|--------------------------------------------------------------------------
|
| Debugbar is enabled by default, when debug is set to true in app.php.
| You can override the value by setting enable to true or false instead of null.
|
| You can provide an array of URI's that must be ignored (eg. 'api/*')
|
*/
'enabled' => env('DEBUGBAR_ENABLED', null),
'except' => [
'telescope*',
'horizon*',
],
/*
|--------------------------------------------------------------------------
| Storage settings
|--------------------------------------------------------------------------
|
| DebugBar stores data for session/ajax requests.
| You can disable this, so the debugbar stores data in headers/session,
| but this can cause problems with large data collectors.
| By default, file storage (in the storage folder) is used. Redis and PDO
| can also be used. For PDO, run the package migrations first.
|
| Warning: Enabling storage.open will allow everyone to access previous
| request, do not enable open storage in publicly available environments!
| Specify a callback if you want to limit based on IP or authentication.
*/
'storage' => [
'enabled' => true,
'open' => env('DEBUGBAR_OPEN_STORAGE', false), // bool/callback.
'driver' => 'file', // redis, file, pdo, socket, custom
'path' => storage_path('debugbar'), // For file driver
'connection' => null, // Leave null for default connection (Redis/PDO)
'provider' => '', // Instance of StorageInterface for custom driver
'hostname' => '127.0.0.1', // Hostname to use with the "socket" driver
'port' => 2304, // Port to use with the "socket" driver
],
/*
|--------------------------------------------------------------------------
| Editor
|--------------------------------------------------------------------------
|
| Choose your preferred editor to use when clicking file name.
|
| Supported: "phpstorm", "vscode", "vscode-insiders", "vscode-remote",
| "vscode-insiders-remote", "vscodium", "textmate", "emacs",
| "sublime", "atom", "nova", "macvim", "idea", "netbeans",
| "xdebug", "espresso"
|
*/
'editor' => env('DEBUGBAR_EDITOR', 'phpstorm'),
/*
|--------------------------------------------------------------------------
| Remote Path Mapping
|--------------------------------------------------------------------------
|
| If you are using a remote dev server, like Laravel Homestead, Docker, or
| even a remote VPS, it will be necessary to specify your path mapping.
|
| Leaving one, or both of these, empty or null will not trigger the remote
| URL changes and Debugbar will treat your editor links as local files.
|
| "remote_sites_path" is an absolute base path for your sites or projects
| in Homestead, Vagrant, Docker, or another remote development server.
|
| Example value: "/home/vagrant/Code"
|
| "local_sites_path" is an absolute base path for your sites or projects
| on your local computer where your IDE or code editor is running on.
|
| Example values: "/Users/<name>/Code", "C:\Users\<name>\Documents\Code"
|
*/
'remote_sites_path' => env('DEBUGBAR_REMOTE_SITES_PATH', ''),
'local_sites_path' => env('DEBUGBAR_LOCAL_SITES_PATH', ''),
/*
|--------------------------------------------------------------------------
| Vendors
|--------------------------------------------------------------------------
|
| Vendor files are included by default, but can be set to false.
| This can also be set to 'js' or 'css', to only include javascript or css vendor files.
| Vendor files are for css: font-awesome (including fonts) and highlight.js (css files)
| and for js: jquery and highlight.js
| So if you want syntax highlighting, set it to true.
| jQuery is set to not conflict with existing jQuery scripts.
|
*/
'include_vendors' => true,
/*
|--------------------------------------------------------------------------
| Capture Ajax Requests
|--------------------------------------------------------------------------
|
| The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors),
| you can use this option to disable sending the data through the headers.
|
| Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools.
|
| Note for your request to be identified as ajax requests they must either send the header
| X-Requested-With with the value XMLHttpRequest (most JS libraries send this), or have application/json as a Accept header.
*/
'capture_ajax' => true,
'add_ajax_timing' => false,
/*
|--------------------------------------------------------------------------
| Custom Error Handler for Deprecated warnings
|--------------------------------------------------------------------------
|
| When enabled, the Debugbar shows deprecated warnings for Symfony components
| in the Messages tab.
|
*/
'error_handler' => false,
/*
|--------------------------------------------------------------------------
| Clockwork integration
|--------------------------------------------------------------------------
|
| The Debugbar can emulate the Clockwork headers, so you can use the Chrome
| Extension, without the server-side code. It uses Debugbar collectors instead.
|
*/
'clockwork' => false,
/*
|--------------------------------------------------------------------------
| DataCollectors
|--------------------------------------------------------------------------
|
| Enable/disable DataCollectors
|
*/
'collectors' => [
'phpinfo' => true, // Php version
'messages' => true, // Messages
'time' => true, // Time Datalogger
'memory' => true, // Memory usage
'exceptions' => true, // Exception displayer
'log' => true, // Logs from Monolog (merged in messages if enabled)
'db' => true, // Show database (PDO) queries and bindings
'views' => true, // Views with their data
'route' => true, // Current route information
'auth' => false, // Display Laravel authentication status
'gate' => true, // Display Laravel Gate checks
'session' => true, // Display session data
'symfony_request' => true, // Only one can be enabled..
'mail' => true, // Catch mail messages
'laravel' => false, // Laravel version and environment
'events' => false, // All events fired
'default_request' => false, // Regular or special Symfony request logger
'logs' => false, // Add the latest log messages
'files' => false, // Show the included files
'config' => false, // Display config settings
'cache' => false, // Display cache events
'models' => true, // Display models
'livewire' => true, // Display Livewire (when available)
],
/*
|--------------------------------------------------------------------------
| Extra options
|--------------------------------------------------------------------------
|
| Configure some DataCollectors
|
*/
'options' => [
'auth' => [
'show_name' => true, // Also show the users name/email in the debugbar
],
'db' => [
'with_params' => true, // Render SQL with the parameters substituted
'backtrace' => true, // Use a backtrace to find the origin of the query in your files.
'backtrace_exclude_paths' => [], // Paths to exclude from backtrace. (in addition to defaults)
'timeline' => false, // Add the queries to the timeline
'duration_background' => true, // Show shaded background on each query relative to how long it took to execute.
'explain' => [ // Show EXPLAIN output on queries
'enabled' => false,
'types' => ['SELECT'], // Deprecated setting, is always only SELECT
],
'hints' => false, // Show hints for common mistakes
'show_copy' => false, // Show copy button next to the query,
'slow_threshold' => false, // Only track queries that last longer than this time in ms
],
'mail' => [
'full_log' => false,
],
'views' => [
'timeline' => false, // Add the views to the timeline (Experimental)
'data' => false, //Note: Can slow down the application, because the data can be quite large..
'exclude_paths' => [], // Add the paths which you don't want to appear in the views
],
'route' => [
'label' => true, // show complete route on bar
],
'logs' => [
'file' => null,
],
'cache' => [
'values' => true, // collect cache values
],
],
/*
|--------------------------------------------------------------------------
| Inject Debugbar in Response
|--------------------------------------------------------------------------
|
| Usually, the debugbar is added just before </body>, by listening to the
| Response after the App is done. If you disable this, you have to add them
| in your template yourself. See http://phpdebugbar.com/docs/rendering.html
|
*/
'inject' => true,
/*
|--------------------------------------------------------------------------
| DebugBar route prefix
|--------------------------------------------------------------------------
|
| Sometimes you want to set route prefix to be used by DebugBar to load
| its resources from. Usually the need comes from misconfigured web server or
| from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97
|
*/
'route_prefix' => '_debugbar',
/*
|--------------------------------------------------------------------------
| DebugBar route domain
|--------------------------------------------------------------------------
|
| By default DebugBar route served from the same domain that request served.
| To override default domain, specify it as a non-empty value.
*/
'route_domain' => null,
/*
|--------------------------------------------------------------------------
| DebugBar theme
|--------------------------------------------------------------------------
|
| Switches between light and dark theme. If set to auto it will respect system preferences
| Possible values: auto, light, dark
*/
'theme' => env('DEBUGBAR_THEME', 'auto'),
/*
|--------------------------------------------------------------------------
| Backtrace stack limit
|--------------------------------------------------------------------------
|
| By default, the DebugBar limits the number of frames returned by the 'debug_backtrace()' function.
| If you need larger stacktraces, you can increase this number. Setting it to 0 will result in no limit.
*/
'debug_backtrace_limit' => 50,
];

878
config/elasticsearch.php Normal file
View File

@@ -0,0 +1,878 @@
<?php
return [
'host' => env('ELASTICSEARCH_HOST'),
'user' => env('ELASTICSEARCH_USER'),
'password' => env('ELASTICSEARCH_PASSWORD'),
'cloud_id' => env('ELASTICSEARCH_CLOUD_ID'),
'api_key' => env('ELASTICSEARCH_API_KEY'),
'queue' => [
'timeout' => env('SCOUT_QUEUE_TIMEOUT'),
],
'indices' => [
'mappings' => [
'default' => [
'properties' => [
'id' => [
'type' => 'keyword',
],
'__class_name' => [
'type' => 'keyword',
],
'created_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'updated_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
],
],
'posts_index' => [
'properties' => [
'id' => ['type' => 'keyword'],
'__class_name' => ['type' => 'keyword'],
'category_id' => ['type' => 'integer'],
'user_id' => ['type' => 'integer'],
'status' => ['type' => 'keyword'],
'featured' => ['type' => 'boolean'],
'created_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'postable' => [
'properties' => [
'id' => ['type' => 'integer'],
'name' => ['type' => 'text', 'analyzer' => 'name_analyzer'],
],
],
'post_translations' => [
'properties' => [
// Title fields
'title_nl' => [
'type' => 'text',
'analyzer' => 'analyzer_nl',
'fields' => [
'keyword' => ['type' => 'keyword'],
'suggest' => ['type' => 'completion'],
]
],
'title_en' => [
'type' => 'text',
'analyzer' => 'analyzer_en',
'fields' => [
'keyword' => ['type' => 'keyword'],
'suggest' => ['type' => 'completion'],
]
],
'title_fr' => [
'type' => 'text',
'analyzer' => 'analyzer_fr',
'fields' => [
'keyword' => ['type' => 'keyword'],
'suggest' => ['type' => 'completion'],
]
],
'title_de' => [
'type' => 'text',
'analyzer' => 'analyzer_de',
'fields' => [
'keyword' => ['type' => 'keyword'],
'suggest' => ['type' => 'completion'],
]
],
'title_es' => [
'type' => 'text',
'analyzer' => 'analyzer_es',
'fields' => [
'keyword' => ['type' => 'keyword'],
'suggest' => ['type' => 'completion'],
]
],
// Excerpt fields
'excerpt_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'excerpt_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'excerpt_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'excerpt_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'excerpt_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
// Content fields
'content_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'content_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'content_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'content_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'content_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
// Publication date fields (FIXED FORMAT)
'from_nl' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'from_en' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'from_fr' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'from_de' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'from_es' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
// Publication end date fields (FIXED FORMAT)
'till_nl' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'till_en' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'till_fr' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'till_de' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'till_es' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
// Scheduled deletion date fields (FIXED FORMAT)
'deleted_at_nl' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'deleted_at_en' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'deleted_at_fr' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'deleted_at_de' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'deleted_at_es' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
// Status fields
'status_nl' => ['type' => 'keyword'],
'status_en' => ['type' => 'keyword'],
'status_fr' => ['type' => 'keyword'],
'status_de' => ['type' => 'keyword'],
'status_es' => ['type' => 'keyword'],
],
],
'post_category' => [
'properties' => [
'id' => ['type' => 'integer'],
'names' => [
'properties' => [
'name_nl' => [
'type' => 'text',
'analyzer' => 'analyzer_nl',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_en' => [
'type' => 'text',
'analyzer' => 'analyzer_en',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_fr' => [
'type' => 'text',
'analyzer' => 'analyzer_fr',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_de' => [
'type' => 'text',
'analyzer' => 'analyzer_de',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_es' => [
'type' => 'text',
'analyzer' => 'analyzer_es',
'fields' => ['keyword' => ['type' => 'keyword']]
],
],
],
],
],
],
],
'calls_index' => [
'properties' => [
'id' => ['type' => 'keyword'],
'__class_name' => ['type' => 'keyword'],
'callable' => [
'properties' => [
'id' => ['type' => 'integer'],
'name' => ['type' => 'text', 'analyzer' => 'name_analyzer'],
],
],
'tag' => [
'properties' => [
'tag_id' => ['type' => 'integer'],
'color' => ['type' => 'keyword'],
'name_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'name_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'name_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'name_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'name_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
],
],
'location' => [
'properties' => [
'city' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'division' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'country' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
],
],
'from' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis',
],
'till' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis',
],
'call_translations' => [
'properties' => [
'content_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'content_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'content_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'content_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'content_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
],
],
],
],
'users_index' => [
'properties' => [
'id' => ['type' => 'keyword'],
'__class_name' => ['type' => 'keyword'],
'name' => [
'type' => 'text',
'analyzer' => 'name_analyzer',
'fields' => [
'keyword' => ['type' => 'keyword'],
'suggest' => ['type' => 'completion'],
]
],
'email_verified_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'inactive_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'deleted_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'profile_completeness_score' => ['type' => 'float'],
'about_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'about_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'about_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'about_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'about_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
'about_short_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'about_short_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'about_short_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'about_short_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'about_short_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
'motivation_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'motivation_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'motivation_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'motivation_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'motivation_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
'cyclos_skills' => ['type' => 'text', 'analyzer' => 'analyzer_general'],
'website' => ['type' => 'keyword'],
'locations' => [
'properties' => [
'district' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'city' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'division' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'country' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
],
],
'tags' => [
'properties' => [
'contexts' => [
'properties' => [
'categories' => [
'properties' => [
'name_nl' => [
'type' => 'text',
'analyzer' => 'analyzer_nl',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_en' => [
'type' => 'text',
'analyzer' => 'analyzer_en',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_fr' => [
'type' => 'text',
'analyzer' => 'analyzer_fr',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_de' => [
'type' => 'text',
'analyzer' => 'analyzer_de',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_es' => [
'type' => 'text',
'analyzer' => 'analyzer_es',
'fields' => ['keyword' => ['type' => 'keyword']]
],
],
],
'tags' => [
'properties' => [
'name_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'name_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'name_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'name_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'name_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
],
],
],
],
],
],
],
],
'organizations_index' => [
'properties' => [
'id' => ['type' => 'keyword'],
'__class_name' => ['type' => 'keyword'],
'name' => [
'type' => 'text',
'analyzer' => 'name_analyzer',
'fields' => [
'keyword' => ['type' => 'keyword'],
'suggest' => ['type' => 'completion'],
]
],
'email_verified_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'inactive_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'deleted_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'organization_type' => ['type' => 'keyword'],
'verified' => ['type' => 'boolean'],
'about_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'about_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'about_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'about_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'about_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
'about_short_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'about_short_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'about_short_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'about_short_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'about_short_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
'motivation_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'motivation_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'motivation_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'motivation_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'motivation_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
'cyclos_skills' => ['type' => 'text', 'analyzer' => 'analyzer_general'],
'website' => ['type' => 'keyword'],
'locations' => [
'properties' => [
'district' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'city' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'division' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'country' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
],
],
'tags' => [
'properties' => [
'contexts' => [
'properties' => [
'categories' => [
'properties' => [
'name_nl' => [
'type' => 'text',
'analyzer' => 'analyzer_nl',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_en' => [
'type' => 'text',
'analyzer' => 'analyzer_en',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_fr' => [
'type' => 'text',
'analyzer' => 'analyzer_fr',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_de' => [
'type' => 'text',
'analyzer' => 'analyzer_de',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_es' => [
'type' => 'text',
'analyzer' => 'analyzer_es',
'fields' => ['keyword' => ['type' => 'keyword']]
],
],
],
'tags' => [
'properties' => [
'name_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'name_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'name_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'name_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'name_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
],
],
],
],
],
],
],
],
'banks_index' => [
'properties' => [
'id' => ['type' => 'keyword'],
'__class_name' => ['type' => 'keyword'],
'name' => [
'type' => 'text',
'analyzer' => 'name_analyzer',
'fields' => [
'keyword' => ['type' => 'keyword'],
'suggest' => ['type' => 'completion'],
]
],
'email_verified_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'inactive_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'deleted_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
'bank_type' => ['type' => 'keyword'],
'verified' => ['type' => 'boolean'],
'about_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'about_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'about_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'about_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'about_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
'about_short_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'about_short_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'about_short_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'about_short_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'about_short_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
'motivation_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'motivation_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'motivation_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'motivation_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'motivation_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
'website' => ['type' => 'keyword'],
'locations' => [
'properties' => [
'district' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'city' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'division' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
'country' => ['type' => 'text', 'analyzer' => 'locations_analyzer'],
],
],
'tags' => [
'properties' => [
'contexts' => [
'properties' => [
'categories' => [
'properties' => [
'name_nl' => [
'type' => 'text',
'analyzer' => 'analyzer_nl',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_en' => [
'type' => 'text',
'analyzer' => 'analyzer_en',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_fr' => [
'type' => 'text',
'analyzer' => 'analyzer_fr',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_de' => [
'type' => 'text',
'analyzer' => 'analyzer_de',
'fields' => ['keyword' => ['type' => 'keyword']]
],
'name_es' => [
'type' => 'text',
'analyzer' => 'analyzer_es',
'fields' => ['keyword' => ['type' => 'keyword']]
],
],
],
'tags' => [
'properties' => [
'name_nl' => ['type' => 'text', 'analyzer' => 'analyzer_nl'],
'name_en' => ['type' => 'text', 'analyzer' => 'analyzer_en'],
'name_fr' => ['type' => 'text', 'analyzer' => 'analyzer_fr'],
'name_de' => ['type' => 'text', 'analyzer' => 'analyzer_de'],
'name_es' => ['type' => 'text', 'analyzer' => 'analyzer_es'],
],
],
],
],
],
],
],
],
'transactions_index' => [
'properties' => [
'id' => ['type' => 'keyword'],
'__class_name' => ['type' => 'keyword'],
'description' => ['type' => 'text', 'analyzer' => 'analyzer_general'],
'relation_from' => ['type' => 'text', 'analyzer' => 'analyzer_general'],
'relation_to' => ['type' => 'text', 'analyzer' => 'analyzer_general'],
'from_account_id' => ['type' => 'integer'],
'to_account_id' => ['type' => 'integer'],
'amount' => ['type' => 'long'],
'currency' => ['type' => 'keyword'],
'status' => ['type' => 'keyword'],
'created_at' => [
'type' => 'date',
'format' => 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||strict_date_optional_time||epoch_millis'
],
],
],
],
'settings' => [
'default' => [
'number_of_shards' => 1,
'number_of_replicas' => 0,
'max_result_window' => 10000,
'analysis' => [
'filter' => [
'custom_keyword_marker' => [
'type' => 'keyword_marker',
'keywords' => ["Den Haag", "The Hague", "La Haye", "Den Haag", "La Haya"],
],
'locations_stop' => [
'type' => 'stop',
'stopwords' => [
// Dutch
"den",
"de",
"het",
"een",
"en",
"van",
"op",
"aan",
"in",
"voor",
"met",
"door",
"onder",
"boven",
"te",
"uit",
"bij",
"naar",
"om",
"tot",
"over",
"tussen",
"achter",
"voor",
"tegen",
"door",
"naast",
"langs",
"binnen",
"buiten",
"rond",
"sinds",
"onder",
"boven",
"langs",
"af",
// English
"the",
"and",
"of",
"a",
"an",
"in",
"on",
"at",
"by",
"for",
"with",
"from",
"to",
"into",
"through",
"over",
"under",
"behind",
"beside",
"between",
"around",
"near",
"throughout",
"since",
"above",
"below",
"up",
"down",
"before",
"after",
"during",
"while",
"among",
// French
"le",
"la",
"les",
"l'",
"de",
"du",
"des",
"un",
"une",
"d'",
"et",
"en",
"au",
"aux",
"Ã ",
"avec",
"par",
"pour",
"sur",
"sous",
"entre",
"vers",
"pendant",
"depuis",
"devant",
"derrière",
"chez",
// German
"der",
"die",
"das",
"des",
"dem",
"den",
"ein",
"eine",
"einem",
"einen",
"und",
"in",
"auf",
"an",
"mit",
"bei",
"nach",
"vor",
"über",
"unter",
"zwischen",
"neben",
"hinter",
"vorbei",
"durch",
// Spanish
"el",
"la",
"los",
"las",
"un",
"una",
"unos",
"unas",
"de",
"del",
"al",
"a",
"con",
"en",
"por",
"para",
"sobre",
"bajo",
"ante",
"desde",
"hacia",
"entre",
"tras",
"durante",
"según",
"sin",
"hasta",
],
],
'dutch_stop' => ['type' => 'stop', 'stopwords' => '_dutch_'],
'english_stop' => ['type' => 'stop', 'stopwords' => '_english_'],
'french_stop' => ['type' => 'stop', 'stopwords' => '_french_'],
'german_stop' => ['type' => 'stop', 'stopwords' => '_german_'],
'spanish_stop' => ['type' => 'stop', 'stopwords' => '_spanish_'],
'dutch_stemmer' => ['type' => 'stemmer', 'language' => 'dutch'],
'english_stemmer' => ['type' => 'stemmer', 'language' => 'english'],
'french_stemmer' => ['type' => 'stemmer', 'language' => 'french'],
'german_stemmer' => ['type' => 'stemmer', 'language' => 'german'],
'spanish_stemmer' => ['type' => 'stemmer', 'language' => 'spanish'],
'edge_ngram_filter' => [
'type' => 'edge_ngram',
'min_gram' => 2,
'max_gram' => 20,
],
],
'tokenizer' => [
'edge_ngram_tokenizer' => [
'type' => 'edge_ngram',
'min_gram' => 2,
'max_gram' => 20,
'token_chars' => ['letter', 'digit'],
],
],
'analyzer' => [
'locations_analyzer' => [
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'custom_keyword_marker',
'locations_stop',
'edge_ngram_filter',
],
],
'name_analyzer' => [
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'edge_ngram_filter',
],
],
'analyzer_nl' => [
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'custom_keyword_marker',
'dutch_stop',
'dutch_stemmer',
],
],
'analyzer_en' => [
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'custom_keyword_marker',
'english_stop',
'english_stemmer',
],
],
'analyzer_fr' => [
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'custom_keyword_marker',
'french_stop',
'french_stemmer',
],
],
'analyzer_de' => [
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'custom_keyword_marker',
'german_stop',
'german_stemmer',
],
],
'analyzer_es' => [
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'custom_keyword_marker',
'spanish_stop',
'spanish_stemmer',
],
],
'analyzer_general' => [
'type' => 'custom',
'tokenizer' => 'standard',
'filter' => ['lowercase'],
],
'search_analyzer' => [
'tokenizer' => 'standard',
'filter' => ['lowercase'],
],
'autocomplete_analyzer' => [
'tokenizer' => 'edge_ngram_tokenizer',
'filter' => ['lowercase'],
],
],
],
],
],
],
];

333
config/excel.php Normal file
View File

@@ -0,0 +1,333 @@
<?php
use Maatwebsite\Excel\Excel;
return [
'exports' => [
/*
|--------------------------------------------------------------------------
| Chunk size
|--------------------------------------------------------------------------
|
| When using FromQuery, the query is automatically chunked.
| Here you can specify how big the chunk should be.
|
*/
'chunk_size' => 1000,
/*
|--------------------------------------------------------------------------
| Pre-calculate formulas during export
|--------------------------------------------------------------------------
*/
'pre_calculate_formulas' => false,
/*
|--------------------------------------------------------------------------
| Enable strict null comparison
|--------------------------------------------------------------------------
|
| When enabling strict null comparison empty cells ('') will
| be added to the sheet.
*/
'strict_null_comparison' => false,
/*
|--------------------------------------------------------------------------
| CSV Settings
|--------------------------------------------------------------------------
|
| Configure e.g. delimiter, enclosure and line ending for CSV exports.
|
*/
'csv' => [
'delimiter' => ',',
'enclosure' => '"',
'line_ending' => PHP_EOL,
'use_bom' => false,
'include_separator_line' => false,
'excel_compatibility' => false,
'output_encoding' => '',
'test_auto_detect' => true,
],
/*
|--------------------------------------------------------------------------
| Worksheet properties
|--------------------------------------------------------------------------
|
| Configure e.g. default title, creator, subject,...
|
*/
'properties' => [
'creator' => '',
'lastModifiedBy' => '',
'title' => '',
'description' => '',
'subject' => '',
'keywords' => '',
'category' => '',
'manager' => '',
'company' => '',
],
],
'imports' => [
/*
|--------------------------------------------------------------------------
| Read Only
|--------------------------------------------------------------------------
|
| When dealing with imports, you might only be interested in the
| data that the sheet exists. By default we ignore all styles,
| however if you want to do some logic based on style data
| you can enable it by setting read_only to false.
|
*/
'read_only' => true,
/*
|--------------------------------------------------------------------------
| Ignore Empty
|--------------------------------------------------------------------------
|
| When dealing with imports, you might be interested in ignoring
| rows that have null values or empty strings. By default rows
| containing empty strings or empty values are not ignored but can be
| ignored by enabling the setting ignore_empty to true.
|
*/
'ignore_empty' => false,
/*
|--------------------------------------------------------------------------
| Heading Row Formatter
|--------------------------------------------------------------------------
|
| Configure the heading row formatter.
| Available options: none|slug|custom
|
*/
'heading_row' => [
'formatter' => 'slug',
],
/*
|--------------------------------------------------------------------------
| CSV Settings
|--------------------------------------------------------------------------
|
| Configure e.g. delimiter, enclosure and line ending for CSV imports.
|
*/
'csv' => [
'delimiter' => null,
'enclosure' => '"',
'escape_character' => '\\',
'contiguous' => false,
'input_encoding' => 'UTF-8',
],
/*
|--------------------------------------------------------------------------
| Worksheet properties
|--------------------------------------------------------------------------
|
| Configure e.g. default title, creator, subject,...
|
*/
'properties' => [
'creator' => '',
'lastModifiedBy' => '',
'title' => '',
'description' => '',
'subject' => '',
'keywords' => '',
'category' => '',
'manager' => '',
'company' => '',
],
],
/*
|--------------------------------------------------------------------------
| Extension detector
|--------------------------------------------------------------------------
|
| Configure here which writer/reader type should be used when the package
| needs to guess the correct type based on the extension alone.
|
*/
'extension_detector' => [
'xlsx' => Excel::XLSX,
'xlsm' => Excel::XLSX,
'xltx' => Excel::XLSX,
'xltm' => Excel::XLSX,
'xls' => Excel::XLS,
'xlt' => Excel::XLS,
'ods' => Excel::ODS,
'ots' => Excel::ODS,
'slk' => Excel::SLK,
'xml' => Excel::XML,
'gnumeric' => Excel::GNUMERIC,
'htm' => Excel::HTML,
'html' => Excel::HTML,
'csv' => Excel::CSV,
'tsv' => Excel::TSV,
/*
|--------------------------------------------------------------------------
| PDF Extension
|--------------------------------------------------------------------------
|
| Configure here which Pdf driver should be used by default.
| Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF
|
*/
'pdf' => Excel::DOMPDF,
],
/*
|--------------------------------------------------------------------------
| Value Binder
|--------------------------------------------------------------------------
|
| PhpSpreadsheet offers a way to hook into the process of a value being
| written to a cell. In there some assumptions are made on how the
| value should be formatted. If you want to change those defaults,
| you can implement your own default value binder.
|
| Possible value binders:
|
| [x] Maatwebsite\Excel\DefaultValueBinder::class
| [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class
| [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class
|
*/
'value_binder' => [
'default' => Maatwebsite\Excel\DefaultValueBinder::class,
],
'cache' => [
/*
|--------------------------------------------------------------------------
| Default cell caching driver
|--------------------------------------------------------------------------
|
| By default PhpSpreadsheet keeps all cell values in memory, however when
| dealing with large files, this might result into memory issues. If you
| want to mitigate that, you can configure a cell caching driver here.
| When using the illuminate driver, it will store each value in the
| cache store. This can slow down the process, because it needs to
| store each value. You can use the "batch" store if you want to
| only persist to the store when the memory limit is reached.
|
| Drivers: memory|illuminate|batch
|
*/
'driver' => 'memory',
/*
|--------------------------------------------------------------------------
| Batch memory caching
|--------------------------------------------------------------------------
|
| When dealing with the "batch" caching driver, it will only
| persist to the store when the memory limit is reached.
| Here you can tweak the memory limit to your liking.
|
*/
'batch' => [
'memory_limit' => 60000,
],
/*
|--------------------------------------------------------------------------
| Illuminate cache
|--------------------------------------------------------------------------
|
| When using the "illuminate" caching driver, it will automatically use
| your default cache store. However if you prefer to have the cell
| cache on a separate store, you can configure the store name here.
| You can use any store defined in your cache config. When leaving
| at "null" it will use the default store.
|
*/
'illuminate' => [
'store' => null,
],
],
/*
|--------------------------------------------------------------------------
| Transaction Handler
|--------------------------------------------------------------------------
|
| By default the import is wrapped in a transaction. This is useful
| for when an import may fail and you want to retry it. With the
| transactions, the previous import gets rolled-back.
|
| You can disable the transaction handler by setting this to null.
| Or you can choose a custom made transaction handler here.
|
| Supported handlers: null|db
|
*/
'transactions' => [
'handler' => 'db',
'db' => [
'connection' => null,
],
],
'temporary_files' => [
/*
|--------------------------------------------------------------------------
| Local Temporary Path
|--------------------------------------------------------------------------
|
| When exporting and importing files, we use a temporary file, before
| storing reading or downloading. Here you can customize that path.
|
*/
'local_path' => storage_path('framework/cache/laravel-excel'),
/*
|--------------------------------------------------------------------------
| Remote Temporary Disk
|--------------------------------------------------------------------------
|
| When dealing with a multi server setup with queues in which you
| cannot rely on having a shared local temporary path, you might
| want to store the temporary file on a shared disk. During the
| queue executing, we'll retrieve the temporary file from that
| location instead. When left to null, it will always use
| the local path. This setting only has effect when using
| in conjunction with queued imports and exports.
|
*/
'remote_disk' => null,
'remote_prefix' => null,
/*
|--------------------------------------------------------------------------
| Force Resync
|--------------------------------------------------------------------------
|
| When dealing with a multi server setup as above, it's possible
| for the clean up that occurs after entire queue has been run to only
| cleanup the server that the last AfterImportJob runs on. The rest of the server
| would still have the local temporary file stored on it. In this case your
| local storage limits can be exceeded and future imports won't be processed.
| To mitigate this you can set this config value to be true, so that after every
| queued chunk is processed the local temporary file is deleted on the server that
| processed it.
|
*/
'force_resync_remote' => null,
],
];

99
config/filesystems.php Normal file
View File

@@ -0,0 +1,99 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
|--------------------------------------------------------------------------
|
| Here you may specify the default filesystem disk that should be used
| by the framework. The "local" disk, as well as a variety of cloud
| based disks are available to your application. Just store away!
|
*/
'default' => env('FILESYSTEM_DRIVER', 'local'),
/*
|--------------------------------------------------------------------------
| Filesystem Disks
|--------------------------------------------------------------------------
|
| Here you may configure as many filesystem "disks" as you wish, and you
| may even configure multiple disks of the same driver. Defaults have
| been setup for each driver as an example of the required options.
|
| Supported Drivers: "local", "ftp", "sftp", "s3"
|
*/
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'permissions' => [
'file' => [
'public' => 0775,
'private' => 0600,
],
'dir' => [
'public' => 0775,
'private' => 0700,
],
],
],
'media' => [
'driver' => 'local',
'root' => storage_path('app/public/media'),
'url' => env('APP_URL') . '/storage/media',
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'permissions' => [
'file' => [
'public' => 0775,
'private' => 0600,
],
'dir' => [
'public' => 0775,
'private' => 0700,
],
],
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
],
],
/*
|--------------------------------------------------------------------------
| Symbolic Links
|--------------------------------------------------------------------------
|
| Here you may configure the symbolic links that will be created when the
| `storage:link` Artisan command is executed. The array keys should be
| the locations of the links and the values should be their targets.
|
*/
'links' => [
public_path('storage') => storage_path('app/public'),
],
];

28
config/flatpickr.php Normal file
View File

@@ -0,0 +1,28 @@
<?php
return [
/**
* The url to be used to serve css file.
* If null, it will use the one shipped with package.
*/
'css_url' => env('FLATPICKR_CSS_URL', '/vendor/flatpickr/css/flatpickr.css'),
/**
* The url to be used to serve js file.
* If null, it will use the one shipped with package.
*/
'js_url' => env('FLATPICKR_JS_URL', '/vendor/flatpickr/js/flatpickr.js'),
/**
* Determines if the styles shipped with the package should be used.
* Setting it to false will remove the styling for the component.
* The flatpickr css will be untouched.
*/
'use_style' => env('FLATPICKR_USE_STYLE', true),
/**
* The language that flatpickr will use.
* If no value is passed, it will be English.
*/
'locale' => env('FLATPICKR_LOCALE', null),
];

380
config/form-components.php Normal file
View File

@@ -0,0 +1,380 @@
<?php
use Rawilk\FormComponents\Components;
return [
/*
|--------------------------------------------------------------------------
| Component Defaults
|--------------------------------------------------------------------------
|
| We've added some common options you may want to globally edit to avoid
| having to change them everytime you call a component or having to
| override a component definition.
|
*/
'defaults' => [
// Global defaults will be applied to all components.
'global' => [
// Show error states by default.
'show_errors' => true,
// Set the fields to use by default for properties on options in select components.
'value_field' => 'id',
'label_field' => 'name',
// Will default to label field if null - only applies to custom selects
'selected_label_field' => null,
'disabled_field' => 'disabled',
'children_field' => 'children',
],
// Input defaults will be applied to all input types (email, password, etc.).
'input' => [
// Supported: 'sm', 'md', 'lg'
// Applies to all input types except for checkbox/radios.
'size' => 'md',
// Classes applied by default to input parent div.
// Will also apply to select.
'container_class' => null,
// Base input classes applied by default.
'input_class' => null,
],
'password' => [
// Show the password reveal button by default.
'show_toggle' => true,
// Icon shown when password is hidden.
'show_icon' => 'heroicon-m-eye',
// Icon shown when password is revealed.
'hide_icon' => 'heroicon-m-eye-slash',
],
'textarea' => [
// How many rows should the textarea have by default.
'rows' => 3,
// Automatically resize the textarea based on content length.
'auto_resize' => true,
],
'select' => [
// Automatically apply a CSS class to each select.
'input_class' => null,
],
// Defaults for checkbox/radios.
'choice' => [
// Automatically apply a CSS class to each checkbox/radio container.
'container_class' => null,
// Automatically apply a CSS class to each checkbox/radio input.
'input_class' => null,
// Supported: 'sm', 'md', 'lg' (defaults to 'sm')
'size' => null,
// Show the description inline with the label by default.
'inline_description' => false,
// Render the label on the left side of the checkbox/radio by default.
'label_left' => false,
],
// Defaults for the switch toggle component.
'switch_toggle' => [
// Apply a CSS class to the label that contains the switch toggle globally.
'container_class' => null,
// Apply a CSS class to the switch toggle (not the actual input element) globally.
'input_class' => null,
// Set the default size of the switch toggle.
// Supported: 'sm', 'md', 'lg', (default is 'md')
'size' => null,
// Set the default color of the switch toggle. (e.g. "blue", "red", "green", etc.)
'color' => null,
// Set the default icon to show when the switch is in an "on" state.
'on_icon' => null,
// Set the default icon to show when the switch is in an "off" state.
'off_icon' => null,
],
// Defaults for the date picker component.
'date_picker' => [
// Allow date picker to open from clicking on the input by default.
'click_opens' => false,
// Allow user to modify the text of the input by default.
'allow_input' => true,
// Enable the time picker by default.
'enable_time' => false,
// Set the default date format. (defaults to y-m-d)
'format' => null,
// Set an icon to show on the date picker for an "open" button by default.
// Set to null to hide it.
'toggle_icon' => 'heroicon-m-calendar',
// Allow date pickers to be cleared by a clear button by default.
'clearable' => true,
// Set an icon to show on the date picker's clear button by default.
'clear_icon' => 'heroicon-m-x-mark',
// Set the default placeholder text for the date picker.
// For best results, use a translation key as it will be translated automatically by the component.
'placeholder' => 'form-components::messages.date_picker_placeholder',
],
// Defaults for custom and tree select.
'custom_select' => [
// Apply a CSS class by default to the root element of the custom select.
// Note: this will also apply to tree-select as well.
'container_class' => null,
// Apply a CSS class by default to the custom select button.
'input_class' => null,
// Apply a CSS class by default to the custom select menu.
'menu_class' => null,
// Make custom selects searchable by default.
'searchable' => true,
// Make custom selects clearable by default.
// Will not show the clear button if the select is not optional.
'clearable' => true,
// Make custom selects optional by default. When marked as optional, custom select
// will allow you to clear out its value, unless it has a minimum amount of options
// required in a multi-select.
'optional' => false,
// Set the default icon to use to show that an option is selected.
// Set to null to disable it.
'option_selected_icon' => 'heroicon-m-check',
// Define the name of the icon to show on the custom select button by default.
// Set to null to hide it.
'button_icon' => 'heroicon-m-chevron-down',
// Define the default clear icon that will show on the custom select button and
// multi-select selected options. Set to null to hide it.
'clear_icon' => 'heroicon-m-x-mark',
// In a multi-select, this is the minimum amount of options that must be selected.
// Set to null or 0 to disable it.
'min_selected' => null,
// In a multi-select, this is the maximum amount of options that can be selected.
// Set to null to disable it.
'max_selected' => null,
],
// Defaults for the tree select.
'tree_select' => [
// Set the default icon to use to show that an option has children.
// Icon will be rotated to indicate when the option is expanded.
'has_child_icon' => 'heroicon-m-chevron-right',
],
// Defaults for the timezone select.
'timezone_select' => [
// Use the custom select component by default for the timezone select.
'use_custom_select' => true,
],
// Defaults for the form groups.
'form_group' => [
// Apply a CSS class to the root form group element globally.
'class' => null,
// Apply a margin bottom by default to form groups (except for last child).
'margin_bottom' => true,
// Render a border on top of each form group by default.
// Does not render on first of type form groups in a container.
// This option only applies to inline form groups as well.
'border' => true,
// Make all form groups show the label inline with the input by default.
'inline' => false,
// Apply a CSS class to the form group label container globally.
'label_container_class' => null,
// Apply a CSS class to the form group content globally.
'content_class' => null,
],
// Defaults for the file upload component.
'file_upload' => [
// Display a file upload progress bar by default.
// Only shows if a "wire:model" is present.
'display_upload_progress' => true,
// Use the native HTML5 progress bar by default.
// Not recommended if you need consistent styling across browsers.
'use_native_progress_bar' => false,
// Globally apply a CSS class to each file upload container.
'container_class' => null,
// Globally apply a CSS class to each file upload input.
'input_class' => null,
],
// Defaults for the file pond component.
'file_pond' => [
// Allow drag and drop file uploads by default.
'allow_drop' => true,
// Limit multiple file uploads to a certain number of files by default.
// Set to null to allow unlimited files.
'max_files' => 5,
// Configure FilePond options by default.
'options' => [],
],
// Defaults for quill.
'quill' => [
// Automatically focus the editor on page load by default.
'auto_focus' => false,
],
// Defaults for form errors.
'form_error' => [
// Define which HTML tag to use for the error message by default.
'tag' => 'p',
],
],
/*
|--------------------------------------------------------------------------
| Component Aliases
|--------------------------------------------------------------------------
|
| Here you may define aliases for components this package provides.
| For example, instead of rendering an input with <x-form-components::inputs.input>,
| you may register an alias of 'input' and render it with <x-jetstream.input>
| instead.
|
*/
'components' => [
// Base
'form' => Components\Form::class,
'form-error' => Components\FormError::class,
'form-group' => Components\FormGroup::class,
'label' => Components\Label::class,
// Choice
'checkbox-group' => Components\Choice\CheckboxGroup::class,
'checkbox' => Components\Choice\Checkbox::class,
'radio' => Components\Choice\Radio::class,
'switch-toggle' => Components\Choice\SwitchToggle::class,
// Inputs
'input' => Components\Inputs\Input::class,
'email' => Components\Inputs\Email::class,
'password' => Components\Inputs\Password::class,
'select' => Components\Inputs\Select::class,
'textarea' => Components\Inputs\Textarea::class,
'date-picker' => Components\Inputs\DatePicker::class,
'custom-select' => Components\Inputs\CustomSelect::class,
'custom-select-option' => Components\Inputs\CustomSelectOption::class,
'timezone-select' => Components\Inputs\TimezoneSelect::class,
'tree-select' => Components\Inputs\TreeSelect::class,
'tree-select-option' => Components\Inputs\TreeSelectOption::class,
// Files
'file-upload' => Components\Files\FileUpload::class,
'file-pond' => Components\Files\FilePond::class,
// Rich Text
'quill' => Components\RichText\Quill::class,
],
/*
|--------------------------------------------------------------------------
| Prefix
|--------------------------------------------------------------------------
|
| This value will be a prefix for all component aliases under the
| `components` key. This is useful if you want to avoid collisions
| with components from other libraries.
|
| If you set it to "tw", for example, you can reference it like this:
|
| <x-tw-input />
|
*/
'prefix' => '',
/*
|--------------------------------------------------------------------------
| Enable Timezone Select
|--------------------------------------------------------------------------
|
| If you don't plan on using a timezone select in your app, you can disable
| it here. This will prevent the use of app('fc-timezone'). You should also
| remove the "timezone-select" from the registered components in the config
| as well.
|
*/
'enable_timezone' => true,
/*
|--------------------------------------------------------------------------
| Default Timezone Subset
|--------------------------------------------------------------------------
|
| You may not always need the full list of timezones to choose from,
| so you may define a subset of regions to pull from instead. Set
| the value to `false` to use all regions.
|
| Example: [\Rawilk\FormComponents\Support\TimezoneRegionEnum::America->value]
|
*/
'timezone_subset' => false,
/*
|--------------------------------------------------------------------------
| Global Optional Hint
|--------------------------------------------------------------------------
|
| You may set a global "optional" hint text for all optional form inputs
| when you set the `optional` attribute on `<x-form-group>` components
| to `true`. Set to `null` to disable showing it. The default provided
| by the package is a translation key which will be translated
| automatically for you.
|
*/
'optional_hint_text' => 'form-components::messages.optional',
/*
|--------------------------------------------------------------------------
| FormComponents Assets URL
|--------------------------------------------------------------------------
|
| This value sets the path to the FormComponents JavaScript assets, for cases
| where your app's domain root is not the correct path. By default,
| FormComponents will load its JavaScript assets from the app's
| "relative root".
|
| Examples: "/assets", "myapp.com/app",
|
*/
'asset_url' => null,
];

147
config/fortify.php Normal file
View File

@@ -0,0 +1,147 @@
<?php
use App\Providers\RouteServiceProvider;
use Laravel\Fortify\Features;
return [
/*
|--------------------------------------------------------------------------
| Fortify Guard
|--------------------------------------------------------------------------
|
| Here you may specify which authentication guard Fortify will use while
| authenticating users. This value should correspond with one of your
| guards that is already present in your "auth" configuration file.
|
*/
'guard' => 'web',
/*
|--------------------------------------------------------------------------
| Fortify Password Broker
|--------------------------------------------------------------------------
|
| Here you may specify which password broker Fortify can use when a user
| is resetting their password. This configured value should match one
| of your password brokers setup in your "auth" configuration file.
|
*/
'passwords' => 'users',
/*
|--------------------------------------------------------------------------
| Username / Email
|--------------------------------------------------------------------------
|
| This value defines which model attribute should be considered as your
| application's "username" field. Typically, this might be the email
| address of the users but you are free to change this value here.
|
| Out of the box, Fortify expects forgot password and reset password
| requests to have a field named 'email'. If the application uses
| another name for the field you may define it below as needed.
|
*/
'username' => 'name',
'email' => 'email',
/*
|--------------------------------------------------------------------------
| Home Path
|--------------------------------------------------------------------------
|
| Here you may configure the path where users will get redirected during
| authentication or password reset when the operations are successful
| and the user is authenticated. You are free to change this value.
|
*/
'home' => RouteServiceProvider::HOME,
/*
|--------------------------------------------------------------------------
| Fortify Routes Prefix / Subdomain
|--------------------------------------------------------------------------
|
| Here you may specify which prefix Fortify will assign to all the routes
| that it registers with the application. If necessary, you may change
| subdomain under which all of the Fortify routes will be available.
|
*/
'prefix' => '',
'domain' => null,
/*
|--------------------------------------------------------------------------
| Fortify Routes Middleware
|--------------------------------------------------------------------------
|
| Here you may specify which middleware Fortify will assign to the routes
| that it registers with the application. If necessary, you may change
| these middleware but typically this provided default is preferred.
|
*/
'middleware' => ['web'],
/*
|--------------------------------------------------------------------------
| Rate Limiting
|--------------------------------------------------------------------------
|
| By default, Fortify will throttle logins to five requests per minute for
| every email and IP address combination. However, if you would like to
| specify a custom rate limiter to call then you may specify it here.
|
*/
'limiters' => [
'login' => 'login',
'two-factor' => 'two-factor',
],
/*
|--------------------------------------------------------------------------
| Register View Routes
|--------------------------------------------------------------------------
|
| Here you may specify if the routes returning views should be disabled as
| you may not need them when building your own application. This may be
| especially true if you're writing a custom single-page application.
|
*/
'views' => false, // disable default Jetstream Fortify route registration. All routes are now located in web.php
/*
|--------------------------------------------------------------------------
| Features
|--------------------------------------------------------------------------
|
| Some of the Fortify features are optional. You may disable the features
| by removing them from this array. You're free to only remove some of
| these features or you can even remove all of these if you need to.
|
*/
'features' => [
Features::registration(),
Features::resetPasswords(),
Features::emailVerification(),
Features::updateProfileInformation(),
Features::updatePasswords(),
Features::twoFactorAuthentication([
'confirm' => true,
'confirmPassword' => true,
// 'window' => 0,
]),
],
];

52
config/hashing.php Normal file
View File

@@ -0,0 +1,52 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Hash Driver
|--------------------------------------------------------------------------
|
| This option controls the default hash driver that will be used to hash
| passwords for your application. By default, the bcrypt algorithm is
| used; however, you remain free to modify this option if you wish.
|
| Supported: "bcrypt", "argon", "argon2id"
|
*/
'driver' => 'bcrypt',
/*
|--------------------------------------------------------------------------
| Bcrypt Options
|--------------------------------------------------------------------------
|
| Here you may specify the configuration options that should be used when
| passwords are hashed using the Bcrypt algorithm. This will allow you
| to control the amount of time it takes to hash the given password.
|
*/
'bcrypt' => [
'rounds' => env('BCRYPT_ROUNDS', 10),
],
/*
|--------------------------------------------------------------------------
| Argon Options
|--------------------------------------------------------------------------
|
| Here you may specify the configuration options that should be used when
| passwords are hashed using the Argon algorithm. These will allow you
| to control the amount of time it takes to hash the given password.
|
*/
'argon' => [
'memory' => 65536,
'threads' => 1,
'time' => 4,
],
];

View File

@@ -0,0 +1,8 @@
<?php
// Default submit times, can be overruled by
// $rules = ['captcha' => 'hiddencaptcha:5,2400'];
// min 5 sec, max 2400 sec
return [
'min_submit_time' => 5,
'max_submit_time' => 1200,
];

81
config/jetstream.php Normal file
View File

@@ -0,0 +1,81 @@
<?php
use Laravel\Jetstream\Features;
use Laravel\Jetstream\Http\Middleware\AuthenticateSession;
return [
/*
|--------------------------------------------------------------------------
| Jetstream Stack
|--------------------------------------------------------------------------
|
| This configuration value informs Jetstream which "stack" you will be
| using for your application. In general, this value is set for you
| during installation and will not need to be changed after that.
|
*/
'stack' => 'livewire',
/*
|--------------------------------------------------------------------------
| Jetstream Route Middleware
|--------------------------------------------------------------------------
|
| Here you may specify which middleware Jetstream will assign to the routes
| that it registers with the application. When necessary, you may modify
| these middleware; however, this default value is usually sufficient.
|
*/
'middleware' => ['web'],
'auth_session' => AuthenticateSession::class,
/*
|--------------------------------------------------------------------------
| Jetstream Guard
|--------------------------------------------------------------------------
|
| Here you may specify the authentication guard Jetstream will use while
| authenticating users. This value should correspond with one of your
| guards that is already present in your "auth" configuration file.
|
*/
'guard' => 'web',
/*
|--------------------------------------------------------------------------
| Features
|--------------------------------------------------------------------------
|
| Some of Jetstream's features are optional. You may disable the features
| by removing them from this array. You're free to only remove some of
| these features or you can even remove all of these if you need to.
|
*/
'features' => [
Features::termsAndPrivacyPolicy(),
Features::profilePhotos(),
// Features::api(),
// Features::teams(['invitations' => true]),
Features::accountDeletion(),
],
/*
|--------------------------------------------------------------------------
| Profile Photo Disk
|--------------------------------------------------------------------------
|
| This configuration value determines the default disk that will be used
| when storing profile photos for your application's users. Typically
| this will be the "public" disk but you may adjust this if needed.
|
*/
'profile_photo_disk' => 'public',
];

68
config/lang-publisher.php Normal file
View File

@@ -0,0 +1,68 @@
<?php
/*
* This file is part of the "laravel-lang/publisher" project.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @author Andrey Helldar <helldar@ai-rus.com>
*
* @copyright 2021 Andrey Helldar
*
* @license MIT
*
* @see https://github.com/Laravel-Lang/publisher
*/
declare(strict_types=1);
return [
/*
* Determines what type of files to use when updating language files.
*
* `true` means inline files will be used.
* `false` means that default files will be used.
*
* The difference between them can be seen here:
* @see https://github.com/Laravel-Lang/lang/blob/master/source/validation.php
* @see https://github.com/Laravel-Lang/lang/blob/master/source/validation-inline.php
*
* By default, `false`.
*/
'inline' => false,
/*
* Do arrays need to be aligned by keys before processing arrays?
*
* By default, true
*/
'alignment' => true,
// Key exclusion when combining.
'excludes' => [
// 'auth' => ['throttle'],
// 'pagination' => ['previous'],
// 'passwords' => ['reset', 'throttled', 'user'],
// '{locale}' => ['Confirm Password'],
],
/*
* Change key case.
*
* Available values:
*
* 0 - Case does not change
* 1 - camelCase
* 2 - snake_case
* 3 - kebab-case
* 4 - PascalCase
*
* By default, 0
*/
'case' => 0,
];

View File

@@ -0,0 +1,348 @@
<?php
return [
// Uncomment the languages that your site supports - or add new ones.
// These are sorted by the native name, which is the order you might show them in a language selector.
// Regional languages are sorted by their base language, so "British English" sorts as "English, British"
'supportedLocales' => [
//'ace' => ['name' => 'Achinese', 'script' => 'Latn', 'native' => 'Aceh', 'regional' => ''],
//'af' => ['name' => 'Afrikaans', 'script' => 'Latn', 'native' => 'Afrikaans', 'regional' => 'af_ZA'],
//'agq' => ['name' => 'Aghem', 'script' => 'Latn', 'native' => 'Aghem', 'regional' => ''],
//'ak' => ['name' => 'Akan', 'script' => 'Latn', 'native' => 'Akan', 'regional' => 'ak_GH'],
//'an' => ['name' => 'Aragonese', 'script' => 'Latn', 'native' => 'aragonés', 'regional' => 'an_ES'],
//'cch' => ['name' => 'Atsam', 'script' => 'Latn', 'native' => 'Atsam', 'regional' => ''],
//'gn' => ['name' => 'Guaraní', 'script' => 'Latn', 'native' => 'Avañeẽ', 'regional' => ''],
//'ae' => ['name' => 'Avestan', 'script' => 'Latn', 'native' => 'avesta', 'regional' => ''],
//'ay' => ['name' => 'Aymara', 'script' => 'Latn', 'native' => 'aymar aru', 'regional' => 'ay_PE'],
//'az' => ['name' => 'Azerbaijani (Latin)', 'script' => 'Latn', 'native' => 'azərbaycanca', 'regional' => 'az_AZ'],
//'id' => ['name' => 'Indonesian', 'script' => 'Latn', 'native' => 'Bahasa Indonesia', 'regional' => 'id_ID'],
//'ms' => ['name' => 'Malay', 'script' => 'Latn', 'native' => 'Bahasa Melayu', 'regional' => 'ms_MY'],
//'bm' => ['name' => 'Bambara', 'script' => 'Latn', 'native' => 'bamanakan', 'regional' => ''],
//'jv' => ['name' => 'Javanese (Latin)', 'script' => 'Latn', 'native' => 'Basa Jawa', 'regional' => ''],
//'su' => ['name' => 'Sundanese', 'script' => 'Latn', 'native' => 'Basa Sunda', 'regional' => ''],
//'bh' => ['name' => 'Bihari', 'script' => 'Latn', 'native' => 'Bihari', 'regional' => ''],
//'bi' => ['name' => 'Bislama', 'script' => 'Latn', 'native' => 'Bislama', 'regional' => ''],
//'nb' => ['name' => 'Norwegian Bokmål', 'script' => 'Latn', 'native' => 'Bokmål', 'regional' => 'nb_NO'],
//'bs' => ['name' => 'Bosnian', 'script' => 'Latn', 'native' => 'bosanski', 'regional' => 'bs_BA'],
//'br' => ['name' => 'Breton', 'script' => 'Latn', 'native' => 'brezhoneg', 'regional' => 'br_FR'],
//'ca' => ['name' => 'Catalan', 'script' => 'Latn', 'native' => 'català', 'regional' => 'ca_ES'],
//'ch' => ['name' => 'Chamorro', 'script' => 'Latn', 'native' => 'Chamoru', 'regional' => ''],
//'ny' => ['name' => 'Chewa', 'script' => 'Latn', 'native' => 'chiCheŵa', 'regional' => ''],
//'kde' => ['name' => 'Makonde', 'script' => 'Latn', 'native' => 'Chimakonde', 'regional' => ''],
//'sn' => ['name' => 'Shona', 'script' => 'Latn', 'native' => 'chiShona', 'regional' => ''],
//'co' => ['name' => 'Corsican', 'script' => 'Latn', 'native' => 'corsu', 'regional' => ''],
//'cy' => ['name' => 'Welsh', 'script' => 'Latn', 'native' => 'Cymraeg', 'regional' => 'cy_GB'],
//'da' => ['name' => 'Danish', 'script' => 'Latn', 'native' => 'dansk', 'regional' => 'da_DK'],
//'se' => ['name' => 'Northern Sami', 'script' => 'Latn', 'native' => 'davvisámegiella', 'regional' => 'se_NO'],
'de' => ['name' => 'German', 'script' => 'Latn', 'native' => 'Deutsch', 'regional' => 'de_DE'],
//'luo' => ['name' => 'Luo', 'script' => 'Latn', 'native' => 'Dholuo', 'regional' => ''],
//'nv' => ['name' => 'Navajo', 'script' => 'Latn', 'native' => 'Diné bizaad', 'regional' => ''],
//'dua' => ['name' => 'Duala', 'script' => 'Latn', 'native' => 'duálá', 'regional' => ''],
//'et' => ['name' => 'Estonian', 'script' => 'Latn', 'native' => 'eesti', 'regional' => 'et_EE'],
//'na' => ['name' => 'Nauru', 'script' => 'Latn', 'native' => 'Ekakairũ Naoero', 'regional' => ''],
//'guz' => ['name' => 'Ekegusii', 'script' => 'Latn', 'native' => 'Ekegusii', 'regional' => ''],
'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'],
//'en-AU' => ['name' => 'Australian English', 'script' => 'Latn', 'native' => 'Australian English', 'regional' => 'en_AU'],
//'en-GB' => ['name' => 'British English', 'script' => 'Latn', 'native' => 'British English', 'regional' => 'en_GB'],
//'en-CA' => ['name' => 'Canadian English', 'script' => 'Latn', 'native' => 'Canadian English', 'regional' => 'en_CA'],
//'en-US' => ['name' => 'U.S. English', 'script' => 'Latn', 'native' => 'U.S. English', 'regional' => 'en_US'],
'es' => ['name' => 'Spanish', 'script' => 'Latn', 'native' => 'español', 'regional' => 'es_ES'],
//'eo' => ['name' => 'Esperanto', 'script' => 'Latn', 'native' => 'esperanto', 'regional' => ''],
//'eu' => ['name' => 'Basque', 'script' => 'Latn', 'native' => 'euskara', 'regional' => 'eu_ES'],
//'ewo' => ['name' => 'Ewondo', 'script' => 'Latn', 'native' => 'ewondo', 'regional' => ''],
//'ee' => ['name' => 'Ewe', 'script' => 'Latn', 'native' => 'eʋegbe', 'regional' => ''],
//'fil' => ['name' => 'Filipino', 'script' => 'Latn', 'native' => 'Filipino', 'regional' => 'fil_PH'],
'fr' => ['name' => 'French', 'script' => 'Latn', 'native' => 'français', 'regional' => 'fr_FR'],
//'fr-CA' => ['name' => 'Canadian French', 'script' => 'Latn', 'native' => 'français canadien', 'regional' => 'fr_CA'],
//'fy' => ['name' => 'Western Frisian', 'script' => 'Latn', 'native' => 'frysk', 'regional' => 'fy_DE'],
//'fur' => ['name' => 'Friulian', 'script' => 'Latn', 'native' => 'furlan', 'regional' => 'fur_IT'],
//'fo' => ['name' => 'Faroese', 'script' => 'Latn', 'native' => 'føroyskt', 'regional' => 'fo_FO'],
//'gaa' => ['name' => 'Ga', 'script' => 'Latn', 'native' => 'Ga', 'regional' => ''],
//'ga' => ['name' => 'Irish', 'script' => 'Latn', 'native' => 'Gaeilge', 'regional' => 'ga_IE'],
//'gv' => ['name' => 'Manx', 'script' => 'Latn', 'native' => 'Gaelg', 'regional' => 'gv_GB'],
//'sm' => ['name' => 'Samoan', 'script' => 'Latn', 'native' => 'Gagana faa Sāmoa', 'regional' => ''],
//'gl' => ['name' => 'Galician', 'script' => 'Latn', 'native' => 'galego', 'regional' => 'gl_ES'],
//'ki' => ['name' => 'Kikuyu', 'script' => 'Latn', 'native' => 'Gikuyu', 'regional' => ''],
//'gd' => ['name' => 'Scottish Gaelic', 'script' => 'Latn', 'native' => 'Gàidhlig', 'regional' => 'gd_GB'],
//'ha' => ['name' => 'Hausa', 'script' => 'Latn', 'native' => 'Hausa', 'regional' => 'ha_NG'],
//'bez' => ['name' => 'Bena', 'script' => 'Latn', 'native' => 'Hibena', 'regional' => ''],
//'ho' => ['name' => 'Hiri Motu', 'script' => 'Latn', 'native' => 'Hiri Motu', 'regional' => ''],
//'hr' => ['name' => 'Croatian', 'script' => 'Latn', 'native' => 'hrvatski', 'regional' => 'hr_HR'],
//'bem' => ['name' => 'Bemba', 'script' => 'Latn', 'native' => 'Ichibemba', 'regional' => 'bem_ZM'],
//'io' => ['name' => 'Ido', 'script' => 'Latn', 'native' => 'Ido', 'regional' => ''],
//'ig' => ['name' => 'Igbo', 'script' => 'Latn', 'native' => 'Igbo', 'regional' => 'ig_NG'],
//'rn' => ['name' => 'Rundi', 'script' => 'Latn', 'native' => 'Ikirundi', 'regional' => ''],
//'ia' => ['name' => 'Interlingua', 'script' => 'Latn', 'native' => 'interlingua', 'regional' => 'ia_FR'],
//'iu-Latn' => ['name' => 'Inuktitut (Latin)', 'script' => 'Latn', 'native' => 'Inuktitut', 'regional' => 'iu_CA'],
//'sbp' => ['name' => 'Sileibi', 'script' => 'Latn', 'native' => 'Ishisangu', 'regional' => ''],
//'nd' => ['name' => 'North Ndebele', 'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => ''],
//'nr' => ['name' => 'South Ndebele', 'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => 'nr_ZA'],
//'xh' => ['name' => 'Xhosa', 'script' => 'Latn', 'native' => 'isiXhosa', 'regional' => 'xh_ZA'],
//'zu' => ['name' => 'Zulu', 'script' => 'Latn', 'native' => 'isiZulu', 'regional' => 'zu_ZA'],
//'it' => ['name' => 'Italian', 'script' => 'Latn', 'native' => 'italiano', 'regional' => 'it_IT'],
//'ik' => ['name' => 'Inupiaq', 'script' => 'Latn', 'native' => 'Iñupiaq', 'regional' => 'ik_CA'],
//'dyo' => ['name' => 'Jola-Fonyi', 'script' => 'Latn', 'native' => 'joola', 'regional' => ''],
//'kea' => ['name' => 'Kabuverdianu', 'script' => 'Latn', 'native' => 'kabuverdianu', 'regional' => ''],
//'kaj' => ['name' => 'Jju', 'script' => 'Latn', 'native' => 'Kaje', 'regional' => ''],
//'mh' => ['name' => 'Marshallese', 'script' => 'Latn', 'native' => 'Kajin M̧ajeļ', 'regional' => 'mh_MH'],
//'kl' => ['name' => 'Kalaallisut', 'script' => 'Latn', 'native' => 'kalaallisut', 'regional' => 'kl_GL'],
//'kln' => ['name' => 'Kalenjin', 'script' => 'Latn', 'native' => 'Kalenjin', 'regional' => ''],
//'kr' => ['name' => 'Kanuri', 'script' => 'Latn', 'native' => 'Kanuri', 'regional' => ''],
//'kcg' => ['name' => 'Tyap', 'script' => 'Latn', 'native' => 'Katab', 'regional' => ''],
//'kw' => ['name' => 'Cornish', 'script' => 'Latn', 'native' => 'kernewek', 'regional' => 'kw_GB'],
//'naq' => ['name' => 'Nama', 'script' => 'Latn', 'native' => 'Khoekhoegowab', 'regional' => ''],
//'rof' => ['name' => 'Rombo', 'script' => 'Latn', 'native' => 'Kihorombo', 'regional' => ''],
//'kam' => ['name' => 'Kamba', 'script' => 'Latn', 'native' => 'Kikamba', 'regional' => ''],
//'kg' => ['name' => 'Kongo', 'script' => 'Latn', 'native' => 'Kikongo', 'regional' => ''],
//'jmc' => ['name' => 'Machame', 'script' => 'Latn', 'native' => 'Kimachame', 'regional' => ''],
//'rw' => ['name' => 'Kinyarwanda', 'script' => 'Latn', 'native' => 'Kinyarwanda', 'regional' => 'rw_RW'],
//'asa' => ['name' => 'Kipare', 'script' => 'Latn', 'native' => 'Kipare', 'regional' => ''],
//'rwk' => ['name' => 'Rwa', 'script' => 'Latn', 'native' => 'Kiruwa', 'regional' => ''],
//'saq' => ['name' => 'Samburu', 'script' => 'Latn', 'native' => 'Kisampur', 'regional' => ''],
//'ksb' => ['name' => 'Shambala', 'script' => 'Latn', 'native' => 'Kishambaa', 'regional' => ''],
//'swc' => ['name' => 'Congo Swahili', 'script' => 'Latn', 'native' => 'Kiswahili ya Kongo', 'regional' => ''],
//'sw' => ['name' => 'Swahili', 'script' => 'Latn', 'native' => 'Kiswahili', 'regional' => 'sw_KE'],
//'dav' => ['name' => 'Dawida', 'script' => 'Latn', 'native' => 'Kitaita', 'regional' => ''],
//'teo' => ['name' => 'Teso', 'script' => 'Latn', 'native' => 'Kiteso', 'regional' => ''],
//'khq' => ['name' => 'Koyra Chiini', 'script' => 'Latn', 'native' => 'Koyra ciini', 'regional' => ''],
//'ses' => ['name' => 'Songhay', 'script' => 'Latn', 'native' => 'Koyraboro senni', 'regional' => ''],
//'mfe' => ['name' => 'Morisyen', 'script' => 'Latn', 'native' => 'kreol morisien', 'regional' => ''],
//'ht' => ['name' => 'Haitian', 'script' => 'Latn', 'native' => 'Kreyòl ayisyen', 'regional' => 'ht_HT'],
//'kj' => ['name' => 'Kuanyama', 'script' => 'Latn', 'native' => 'Kwanyama', 'regional' => ''],
//'ksh' => ['name' => 'Kölsch', 'script' => 'Latn', 'native' => 'Kölsch', 'regional' => ''],
//'ebu' => ['name' => 'Kiembu', 'script' => 'Latn', 'native' => 'Kĩembu', 'regional' => ''],
//'mer' => ['name' => 'Kimîîru', 'script' => 'Latn', 'native' => 'Kĩmĩrũ', 'regional' => ''],
//'lag' => ['name' => 'Langi', 'script' => 'Latn', 'native' => 'Kɨlaangi', 'regional' => ''],
//'lah' => ['name' => 'Lahnda', 'script' => 'Latn', 'native' => 'Lahnda', 'regional' => ''],
//'la' => ['name' => 'Latin', 'script' => 'Latn', 'native' => 'latine', 'regional' => ''],
//'lv' => ['name' => 'Latvian', 'script' => 'Latn', 'native' => 'latviešu', 'regional' => 'lv_LV'],
//'to' => ['name' => 'Tongan', 'script' => 'Latn', 'native' => 'lea fakatonga', 'regional' => ''],
//'lt' => ['name' => 'Lithuanian', 'script' => 'Latn', 'native' => 'lietuvių', 'regional' => 'lt_LT'],
//'li' => ['name' => 'Limburgish', 'script' => 'Latn', 'native' => 'Limburgs', 'regional' => 'li_BE'],
//'ln' => ['name' => 'Lingala', 'script' => 'Latn', 'native' => 'lingála', 'regional' => ''],
//'lg' => ['name' => 'Ganda', 'script' => 'Latn', 'native' => 'Luganda', 'regional' => 'lg_UG'],
//'luy' => ['name' => 'Oluluyia', 'script' => 'Latn', 'native' => 'Luluhia', 'regional' => ''],
//'lb' => ['name' => 'Luxembourgish', 'script' => 'Latn', 'native' => 'Lëtzebuergesch', 'regional' => 'lb_LU'],
//'hu' => ['name' => 'Hungarian', 'script' => 'Latn', 'native' => 'magyar', 'regional' => 'hu_HU'],
//'mgh' => ['name' => 'Makhuwa-Meetto', 'script' => 'Latn', 'native' => 'Makua', 'regional' => ''],
//'mg' => ['name' => 'Malagasy', 'script' => 'Latn', 'native' => 'Malagasy', 'regional' => 'mg_MG'],
//'mt' => ['name' => 'Maltese', 'script' => 'Latn', 'native' => 'Malti', 'regional' => 'mt_MT'],
//'mtr' => ['name' => 'Mewari', 'script' => 'Latn', 'native' => 'Mewari', 'regional' => ''],
//'mua' => ['name' => 'Mundang', 'script' => 'Latn', 'native' => 'Mundang', 'regional' => ''],
//'mi' => ['name' => 'Māori', 'script' => 'Latn', 'native' => 'Māori', 'regional' => 'mi_NZ'],
'nl' => ['name' => 'Dutch', 'script' => 'Latn', 'native' => 'Nederlands', 'regional' => 'nl_NL'],
//'nmg' => ['name' => 'Kwasio', 'script' => 'Latn', 'native' => 'ngumba', 'regional' => ''],
//'yav' => ['name' => 'Yangben', 'script' => 'Latn', 'native' => 'nuasue', 'regional' => ''],
//'nn' => ['name' => 'Norwegian Nynorsk', 'script' => 'Latn', 'native' => 'nynorsk', 'regional' => 'nn_NO'],
//'oc' => ['name' => 'Occitan', 'script' => 'Latn', 'native' => 'occitan', 'regional' => 'oc_FR'],
//'ang' => ['name' => 'Old English', 'script' => 'Runr', 'native' => 'Old English', 'regional' => ''],
//'xog' => ['name' => 'Soga', 'script' => 'Latn', 'native' => 'Olusoga', 'regional' => ''],
//'om' => ['name' => 'Oromo', 'script' => 'Latn', 'native' => 'Oromoo', 'regional' => 'om_ET'],
//'ng' => ['name' => 'Ndonga', 'script' => 'Latn', 'native' => 'OshiNdonga', 'regional' => ''],
//'hz' => ['name' => 'Herero', 'script' => 'Latn', 'native' => 'Otjiherero', 'regional' => ''],
//'uz-Latn' => ['name' => 'Uzbek (Latin)', 'script' => 'Latn', 'native' => 'oʼzbekcha', 'regional' => 'uz_UZ'],
//'nds' => ['name' => 'Low German', 'script' => 'Latn', 'native' => 'Plattdüütsch', 'regional' => 'nds_DE'],
//'pl' => ['name' => 'Polish', 'script' => 'Latn', 'native' => 'polski', 'regional' => 'pl_PL'],
//'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'português', 'regional' => 'pt_PT'],
//'pt-BR' => ['name' => 'Brazilian Portuguese', 'script' => 'Latn', 'native' => 'português do Brasil', 'regional' => 'pt_BR'],
//'ff' => ['name' => 'Fulah', 'script' => 'Latn', 'native' => 'Pulaar', 'regional' => 'ff_SN'],
//'pi' => ['name' => 'Pahari-Potwari', 'script' => 'Latn', 'native' => 'Pāli', 'regional' => ''],
//'aa' => ['name' => 'Afar', 'script' => 'Latn', 'native' => 'Qafar', 'regional' => 'aa_ER'],
//'ty' => ['name' => 'Tahitian', 'script' => 'Latn', 'native' => 'Reo Māohi', 'regional' => ''],
//'ksf' => ['name' => 'Bafia', 'script' => 'Latn', 'native' => 'rikpa', 'regional' => ''],
//'ro' => ['name' => 'Romanian', 'script' => 'Latn', 'native' => 'română', 'regional' => 'ro_RO'],
//'cgg' => ['name' => 'Chiga', 'script' => 'Latn', 'native' => 'Rukiga', 'regional' => ''],
//'rm' => ['name' => 'Romansh', 'script' => 'Latn', 'native' => 'rumantsch', 'regional' => ''],
//'qu' => ['name' => 'Quechua', 'script' => 'Latn', 'native' => 'Runa Simi', 'regional' => ''],
//'nyn' => ['name' => 'Nyankole', 'script' => 'Latn', 'native' => 'Runyankore', 'regional' => ''],
//'ssy' => ['name' => 'Saho', 'script' => 'Latn', 'native' => 'Saho', 'regional' => ''],
//'sc' => ['name' => 'Sardinian', 'script' => 'Latn', 'native' => 'sardu', 'regional' => 'sc_IT'],
//'de-CH' => ['name' => 'Swiss High German', 'script' => 'Latn', 'native' => 'Schweizer Hochdeutsch', 'regional' => 'de_CH'],
//'gsw' => ['name' => 'Swiss German', 'script' => 'Latn', 'native' => 'Schwiizertüütsch', 'regional' => ''],
//'trv' => ['name' => 'Taroko', 'script' => 'Latn', 'native' => 'Seediq', 'regional' => ''],
//'seh' => ['name' => 'Sena', 'script' => 'Latn', 'native' => 'sena', 'regional' => ''],
//'nso' => ['name' => 'Northern Sotho', 'script' => 'Latn', 'native' => 'Sesotho sa Leboa', 'regional' => 'nso_ZA'],
//'st' => ['name' => 'Southern Sotho', 'script' => 'Latn', 'native' => 'Sesotho', 'regional' => 'st_ZA'],
//'tn' => ['name' => 'Tswana', 'script' => 'Latn', 'native' => 'Setswana', 'regional' => 'tn_ZA'],
//'sq' => ['name' => 'Albanian', 'script' => 'Latn', 'native' => 'shqip', 'regional' => 'sq_AL'],
//'sid' => ['name' => 'Sidamo', 'script' => 'Latn', 'native' => 'Sidaamu Afo', 'regional' => 'sid_ET'],
//'ss' => ['name' => 'Swati', 'script' => 'Latn', 'native' => 'Siswati', 'regional' => 'ss_ZA'],
//'sk' => ['name' => 'Slovak', 'script' => 'Latn', 'native' => 'slovenčina', 'regional' => 'sk_SK'],
//'sl' => ['name' => 'Slovene', 'script' => 'Latn', 'native' => 'slovenščina', 'regional' => 'sl_SI'],
//'so' => ['name' => 'Somali', 'script' => 'Latn', 'native' => 'Soomaali', 'regional' => 'so_SO'],
//'sr-Latn' => ['name' => 'Serbian (Latin)', 'script' => 'Latn', 'native' => 'Srpski', 'regional' => 'sr_RS'],
//'sh' => ['name' => 'Serbo-Croatian', 'script' => 'Latn', 'native' => 'srpskohrvatski', 'regional' => ''],
//'fi' => ['name' => 'Finnish', 'script' => 'Latn', 'native' => 'suomi', 'regional' => 'fi_FI'],
//'sv' => ['name' => 'Swedish', 'script' => 'Latn', 'native' => 'svenska', 'regional' => 'sv_SE'],
//'sg' => ['name' => 'Sango', 'script' => 'Latn', 'native' => 'Sängö', 'regional' => ''],
//'tl' => ['name' => 'Tagalog', 'script' => 'Latn', 'native' => 'Tagalog', 'regional' => 'tl_PH'],
//'tzm-Latn' => ['name' => 'Central Atlas Tamazight (Latin)', 'script' => 'Latn', 'native' => 'Tamazight', 'regional' => ''],
//'kab' => ['name' => 'Kabyle', 'script' => 'Latn', 'native' => 'Taqbaylit', 'regional' => 'kab_DZ'],
//'twq' => ['name' => 'Tasawaq', 'script' => 'Latn', 'native' => 'Tasawaq senni', 'regional' => ''],
//'shi' => ['name' => 'Tachelhit (Latin)', 'script' => 'Latn', 'native' => 'Tashelhit', 'regional' => ''],
//'nus' => ['name' => 'Nuer', 'script' => 'Latn', 'native' => 'Thok Nath', 'regional' => ''],
//'vi' => ['name' => 'Vietnamese', 'script' => 'Latn', 'native' => 'Tiếng Việt', 'regional' => 'vi_VN'],
//'tg-Latn' => ['name' => 'Tajik (Latin)', 'script' => 'Latn', 'native' => 'tojikī', 'regional' => 'tg_TJ'],
//'lu' => ['name' => 'Luba-Katanga', 'script' => 'Latn', 'native' => 'Tshiluba', 'regional' => 've_ZA'],
//'ve' => ['name' => 'Venda', 'script' => 'Latn', 'native' => 'Tshivenḓa', 'regional' => ''],
//'tw' => ['name' => 'Twi', 'script' => 'Latn', 'native' => 'Twi', 'regional' => ''],
//'tr' => ['name' => 'Turkish', 'script' => 'Latn', 'native' => 'Türkçe', 'regional' => 'tr_TR'],
//'ale' => ['name' => 'Aleut', 'script' => 'Latn', 'native' => 'Unangax tunuu', 'regional' => ''],
//'ca-valencia' => ['name' => 'Valencian', 'script' => 'Latn', 'native' => 'valencià', 'regional' => ''],
//'vai-Latn' => ['name' => 'Vai (Latin)', 'script' => 'Latn', 'native' => 'Viyamíĩ', 'regional' => ''],
//'vo' => ['name' => 'Volapük', 'script' => 'Latn', 'native' => 'Volapük', 'regional' => ''],
//'fj' => ['name' => 'Fijian', 'script' => 'Latn', 'native' => 'vosa Vakaviti', 'regional' => ''],
//'wa' => ['name' => 'Walloon', 'script' => 'Latn', 'native' => 'Walon', 'regional' => 'wa_BE'],
//'wae' => ['name' => 'Walser', 'script' => 'Latn', 'native' => 'Walser', 'regional' => 'wae_CH'],
//'wen' => ['name' => 'Sorbian', 'script' => 'Latn', 'native' => 'Wendic', 'regional' => ''],
//'wo' => ['name' => 'Wolof', 'script' => 'Latn', 'native' => 'Wolof', 'regional' => 'wo_SN'],
//'ts' => ['name' => 'Tsonga', 'script' => 'Latn', 'native' => 'Xitsonga', 'regional' => 'ts_ZA'],
//'dje' => ['name' => 'Zarma', 'script' => 'Latn', 'native' => 'Zarmaciine', 'regional' => ''],
//'yo' => ['name' => 'Yoruba', 'script' => 'Latn', 'native' => 'Èdè Yorùbá', 'regional' => 'yo_NG'],
// 'de-AT' => ['name' => 'Austrian German', 'script' => 'Latn', 'native' => 'Österreichisches Deutsch', 'regional' => 'de_AT'],
//'is' => ['name' => 'Icelandic', 'script' => 'Latn', 'native' => 'íslenska', 'regional' => 'is_IS'],
//'cs' => ['name' => 'Czech', 'script' => 'Latn', 'native' => 'čeština', 'regional' => 'cs_CZ'],
//'bas' => ['name' => 'Basa', 'script' => 'Latn', 'native' => 'Ɓàsàa', 'regional' => ''],
//'mas' => ['name' => 'Masai', 'script' => 'Latn', 'native' => 'ɔl-Maa', 'regional' => ''],
//'haw' => ['name' => 'Hawaiian', 'script' => 'Latn', 'native' => 'ʻŌlelo Hawaiʻi', 'regional' => ''],
//'el' => ['name' => 'Greek', 'script' => 'Grek', 'native' => 'Ελληνικά', 'regional' => 'el_GR'],
//'uz' => ['name' => 'Uzbek (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Ўзбек', 'regional' => 'uz_UZ'],
//'az-Cyrl' => ['name' => 'Azerbaijani (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Азәрбајҹан', 'regional' => 'uz_UZ'],
//'ab' => ['name' => 'Abkhazian', 'script' => 'Cyrl', 'native' => 'Аҧсуа', 'regional' => ''],
//'os' => ['name' => 'Ossetic', 'script' => 'Cyrl', 'native' => 'Ирон', 'regional' => 'os_RU'],
//'ky' => ['name' => 'Kyrgyz', 'script' => 'Cyrl', 'native' => 'Кыргыз', 'regional' => 'ky_KG'],
//'sr' => ['name' => 'Serbian (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Српски', 'regional' => 'sr_RS'],
//'av' => ['name' => 'Avaric', 'script' => 'Cyrl', 'native' => 'авар мацӀ', 'regional' => ''],
//'ady' => ['name' => 'Adyghe', 'script' => 'Cyrl', 'native' => 'адыгэбзэ', 'regional' => ''],
//'ba' => ['name' => 'Bashkir', 'script' => 'Cyrl', 'native' => 'башҡорт теле', 'regional' => ''],
//'be' => ['name' => 'Belarusian', 'script' => 'Cyrl', 'native' => 'беларуская', 'regional' => 'be_BY'],
//'bg' => ['name' => 'Bulgarian', 'script' => 'Cyrl', 'native' => 'български', 'regional' => 'bg_BG'],
//'kv' => ['name' => 'Komi', 'script' => 'Cyrl', 'native' => 'коми кыв', 'regional' => ''],
//'mk' => ['name' => 'Macedonian', 'script' => 'Cyrl', 'native' => 'македонски', 'regional' => 'mk_MK'],
//'mn' => ['name' => 'Mongolian (Cyrillic)', 'script' => 'Cyrl', 'native' => 'монгол', 'regional' => 'mn_MN'],
//'ce' => ['name' => 'Chechen', 'script' => 'Cyrl', 'native' => 'нохчийн мотт', 'regional' => 'ce_RU'],
//'ru' => ['name' => 'Russian', 'script' => 'Cyrl', 'native' => 'русский', 'regional' => 'ru_RU'],
//'sah' => ['name' => 'Yakut', 'script' => 'Cyrl', 'native' => 'саха тыла', 'regional' => ''],
//'tt' => ['name' => 'Tatar', 'script' => 'Cyrl', 'native' => 'татар теле', 'regional' => 'tt_RU'],
//'tg' => ['name' => 'Tajik (Cyrillic)', 'script' => 'Cyrl', 'native' => 'тоҷикӣ', 'regional' => 'tg_TJ'],
//'tk' => ['name' => 'Turkmen', 'script' => 'Cyrl', 'native' => 'түркменче', 'regional' => 'tk_TM'],
//'uk' => ['name' => 'Ukrainian', 'script' => 'Cyrl', 'native' => 'українська', 'regional' => 'uk_UA'],
//'cv' => ['name' => 'Chuvash', 'script' => 'Cyrl', 'native' => 'чӑваш чӗлхи', 'regional' => 'cv_RU'],
//'cu' => ['name' => 'Church Slavic', 'script' => 'Cyrl', 'native' => 'ѩзыкъ словѣньскъ', 'regional' => ''],
//'kk' => ['name' => 'Kazakh', 'script' => 'Cyrl', 'native' => 'қазақ тілі', 'regional' => 'kk_KZ'],
//'hy' => ['name' => 'Armenian', 'script' => 'Armn', 'native' => 'Հայերեն', 'regional' => 'hy_AM'],
//'yi' => ['name' => 'Yiddish', 'script' => 'Hebr', 'native' => 'ייִדיש', 'regional' => 'yi_US'],
//'he' => ['name' => 'Hebrew', 'script' => 'Hebr', 'native' => 'עברית', 'regional' => 'he_IL'],
//'ug' => ['name' => 'Uyghur', 'script' => 'Arab', 'native' => 'ئۇيغۇرچە', 'regional' => 'ug_CN'],
//'ur' => ['name' => 'Urdu', 'script' => 'Arab', 'native' => 'اردو', 'regional' => 'ur_PK'],
//'ar' => ['name' => 'Arabic', 'script' => 'Arab', 'native' => 'العربية', 'regional' => 'ar_AE'],
//'uz-Arab' => ['name' => 'Uzbek (Arabic)', 'script' => 'Arab', 'native' => 'اۉزبېک', 'regional' => ''],
//'tg-Arab' => ['name' => 'Tajik (Arabic)', 'script' => 'Arab', 'native' => 'تاجیکی', 'regional' => 'tg_TJ'],
//'sd' => ['name' => 'Sindhi', 'script' => 'Arab', 'native' => 'سنڌي', 'regional' => 'sd_IN'],
//'fa' => ['name' => 'Persian', 'script' => 'Arab', 'native' => 'فارسی', 'regional' => 'fa_IR'],
//'pa-Arab' => ['name' => 'Punjabi (Arabic)', 'script' => 'Arab', 'native' => 'پنجاب', 'regional' => 'pa_IN'],
//'ps' => ['name' => 'Pashto', 'script' => 'Arab', 'native' => 'پښتو', 'regional' => 'ps_AF'],
//'ks' => ['name' => 'Kashmiri (Arabic)', 'script' => 'Arab', 'native' => 'کأشُر', 'regional' => 'ks_IN'],
//'ku' => ['name' => 'Kurdish', 'script' => 'Arab', 'native' => 'کوردی', 'regional' => 'ku_TR'],
//'dv' => ['name' => 'Divehi', 'script' => 'Thaa', 'native' => 'ދިވެހިބަސް', 'regional' => 'dv_MV'],
//'ks-Deva' => ['name' => 'Kashmiri (Devaganari)', 'script' => 'Deva', 'native' => 'कॉशुर', 'regional' => 'ks_IN'],
//'kok' => ['name' => 'Konkani', 'script' => 'Deva', 'native' => 'कोंकणी', 'regional' => 'kok_IN'],
//'doi' => ['name' => 'Dogri', 'script' => 'Deva', 'native' => 'डोगरी', 'regional' => 'doi_IN'],
//'ne' => ['name' => 'Nepali', 'script' => 'Deva', 'native' => 'नेपाली', 'regional' => ''],
//'pra' => ['name' => 'Prakrit', 'script' => 'Deva', 'native' => 'प्राकृत', 'regional' => ''],
//'brx' => ['name' => 'Bodo', 'script' => 'Deva', 'native' => 'बड़ो', 'regional' => 'brx_IN'],
//'bra' => ['name' => 'Braj', 'script' => 'Deva', 'native' => 'ब्रज भाषा', 'regional' => ''],
//'mr' => ['name' => 'Marathi', 'script' => 'Deva', 'native' => 'मराठी', 'regional' => 'mr_IN'],
//'mai' => ['name' => 'Maithili', 'script' => 'Tirh', 'native' => 'मैथिली', 'regional' => 'mai_IN'],
//'raj' => ['name' => 'Rajasthani', 'script' => 'Deva', 'native' => 'राजस्थानी', 'regional' => ''],
//'sa' => ['name' => 'Sanskrit', 'script' => 'Deva', 'native' => 'संस्कृतम्', 'regional' => 'sa_IN'],
//'hi' => ['name' => 'Hindi', 'script' => 'Deva', 'native' => 'हिन्दी', 'regional' => 'hi_IN'],
//'as' => ['name' => 'Assamese', 'script' => 'Beng', 'native' => 'অসমীয়া', 'regional' => 'as_IN'],
//'bn' => ['name' => 'Bengali', 'script' => 'Beng', 'native' => 'বাংলা', 'regional' => 'bn_BD'],
//'mni' => ['name' => 'Manipuri', 'script' => 'Beng', 'native' => 'মৈতৈ', 'regional' => 'mni_IN'],
//'pa' => ['name' => 'Punjabi (Gurmukhi)', 'script' => 'Guru', 'native' => 'ਪੰਜਾਬੀ', 'regional' => 'pa_IN'],
//'gu' => ['name' => 'Gujarati', 'script' => 'Gujr', 'native' => 'ગુજરાતી', 'regional' => 'gu_IN'],
//'or' => ['name' => 'Oriya', 'script' => 'Orya', 'native' => 'ଓଡ଼ିଆ', 'regional' => 'or_IN'],
//'ta' => ['name' => 'Tamil', 'script' => 'Taml', 'native' => 'தமிழ்', 'regional' => 'ta_IN'],
//'te' => ['name' => 'Telugu', 'script' => 'Telu', 'native' => 'తెలుగు', 'regional' => 'te_IN'],
//'kn' => ['name' => 'Kannada', 'script' => 'Knda', 'native' => 'ಕನ್ನಡ', 'regional' => 'kn_IN'],
//'ml' => ['name' => 'Malayalam', 'script' => 'Mlym', 'native' => 'മലയാളം', 'regional' => 'ml_IN'],
//'si' => ['name' => 'Sinhala', 'script' => 'Sinh', 'native' => 'සිංහල', 'regional' => 'si_LK'],
//'th' => ['name' => 'Thai', 'script' => 'Thai', 'native' => 'ไทย', 'regional' => 'th_TH'],
//'lo' => ['name' => 'Lao', 'script' => 'Laoo', 'native' => 'ລາວ', 'regional' => 'lo_LA'],
//'bo' => ['name' => 'Tibetan', 'script' => 'Tibt', 'native' => 'པོད་སྐད་', 'regional' => 'bo_IN'],
//'dz' => ['name' => 'Dzongkha', 'script' => 'Tibt', 'native' => 'རྫོང་ཁ', 'regional' => 'dz_BT'],
//'my' => ['name' => 'Burmese', 'script' => 'Mymr', 'native' => 'မြန်မာဘာသာ', 'regional' => 'my_MM'],
//'ka' => ['name' => 'Georgian', 'script' => 'Geor', 'native' => 'ქართული', 'regional' => 'ka_GE'],
//'byn' => ['name' => 'Blin', 'script' => 'Ethi', 'native' => 'ብሊን', 'regional' => 'byn_ER'],
//'tig' => ['name' => 'Tigre', 'script' => 'Ethi', 'native' => 'ትግረ', 'regional' => 'tig_ER'],
//'ti' => ['name' => 'Tigrinya', 'script' => 'Ethi', 'native' => 'ትግርኛ', 'regional' => 'ti_ET'],
//'am' => ['name' => 'Amharic', 'script' => 'Ethi', 'native' => 'አማርኛ', 'regional' => 'am_ET'],
//'wal' => ['name' => 'Wolaytta', 'script' => 'Ethi', 'native' => 'ወላይታቱ', 'regional' => 'wal_ET'],
//'chr' => ['name' => 'Cherokee', 'script' => 'Cher', 'native' => 'ᏣᎳᎩ', 'regional' => ''],
//'iu' => ['name' => 'Inuktitut (Canadian Aboriginal Syllabics)', 'script' => 'Cans', 'native' => 'ᐃᓄᒃᑎᑐᑦ', 'regional' => 'iu_CA'],
//'oj' => ['name' => 'Ojibwa', 'script' => 'Cans', 'native' => 'ᐊᓂᔑᓈᐯᒧᐎᓐ', 'regional' => ''],
//'cr' => ['name' => 'Cree', 'script' => 'Cans', 'native' => 'ᓀᐦᐃᔭᐍᐏᐣ', 'regional' => ''],
//'km' => ['name' => 'Khmer', 'script' => 'Khmr', 'native' => 'ភាសាខ្មែរ', 'regional' => 'km_KH'],
//'mn-Mong' => ['name' => 'Mongolian (Mongolian)', 'script' => 'Mong', 'native' => 'ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ', 'regional' => 'mn_MN'],
//'shi-Tfng' => ['name' => 'Tachelhit (Tifinagh)', 'script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''],
//'tzm' => ['name' => 'Central Atlas Tamazight (Tifinagh)','script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''],
//'yue' => ['name' => 'Yue', 'script' => 'Hant', 'native' => '廣州話', 'regional' => 'yue_HK'],
//'ja' => ['name' => 'Japanese', 'script' => 'Jpan', 'native' => '日本語', 'regional' => 'ja_JP'],
//'zh' => ['name' => 'Chinese (Simplified)', 'script' => 'Hans', 'native' => '简体中文', 'regional' => 'zh_CN'],
//'zh-Hant' => ['name' => 'Chinese (Traditional)', 'script' => 'Hant', 'native' => '繁體中文', 'regional' => 'zh_CN'],
//'ii' => ['name' => 'Sichuan Yi', 'script' => 'Yiii', 'native' => 'ꆈꌠꉙ', 'regional' => ''],
//'vai' => ['name' => 'Vai (Vai)', 'script' => 'Vaii', 'native' => 'ꕙꔤ', 'regional' => ''],
//'jv-Java' => ['name' => 'Javanese (Javanese)', 'script' => 'Java', 'native' => 'ꦧꦱꦗꦮ', 'regional' => ''],
//'ko' => ['name' => 'Korean', 'script' => 'Hang', 'native' => '한국어', 'regional' => 'ko_KR'],
],
// Requires middleware `LaravelSessionRedirect.php`.
//
// Automatically determine locale from browser (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language)
// on first call if it's not defined in the URL. Redirect user to computed localized url.
// For example, if users browser language is `de`, and `de` is active in the array `supportedLocales`,
// the `/about` would be redirected to `/de/about`.
//
// The locale will be stored in session and only be computed from browser
// again if the session expires.
//
// If false, system will take app.php locale attribute
'useAcceptLanguageHeader' => true,
// If `hideDefaultLocaleInURL` is true, then a url without locale
// is identical with the same url with default locale.
// For example, if `en` is default locale, then `/en/about` and `/about`
// would be identical.
//
// If in addition the middleware `LaravelLocalizationRedirectFilter` is active, then
// every url with default locale is redirected to url without locale.
// For example, `/en/about` would be redirected to `/about`.
// It is recommended to use `hideDefaultLocaleInURL` only in
// combination with the middleware `LaravelLocalizationRedirectFilter`
// to avoid duplicate content (SEO).
//
// If `useAcceptLanguageHeader` is true, then the first time
// the locale will be determined from browser and redirect to that language.
// After that, `hideDefaultLocaleInURL` behaves as usual.
'hideDefaultLocaleInURL' => false,
// If you want to display the locales in particular order in the language selector you should write the order here.
//CAUTION: Please consider using the appropriate locale code otherwise it will not work
//Example: 'localesOrder' => ['es','en'],
'localesOrder' => ['nl', 'en', 'fr', 'es', 'de'],
// If you want to use custom lang url segments like 'at' instead of 'de-AT', you can use the mapping to tallow the LanguageNegotiator to assign the descired locales based on HTTP Accept Language Header. For example you want ot use 'at', so map HTTP Accept Language Header 'de-AT' to 'at' (['de-AT' => 'at']).
'localesMapping' => [],
// Locale suffix for LC_TIME and LC_MONETARY
// Defaults to most common ".UTF-8". Set to blank on Windows systems, change to ".utf8" on CentOS and similar.
'utf8suffix' => env('LARAVELLOCALIZATION_UTF8SUFFIX', '.UTF-8'),
// URLs which should not be processed, e.g. '/nova', '/nova/*', '/nova-api/*' or specific application URLs
// Defaults to []
'urlsIgnored' => ['/skipped'],
'httpMethodsIgnored' => ['POST', 'PUT', 'PATCH', 'DELETE'],
];

View File

@@ -0,0 +1,77 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Carbon Formats
|--------------------------------------------------------------------------
| The default formats that are used for TimeColumn & DateColumn.
| You can use the formatting characters from the PHP DateTime class.
| More info: https://www.php.net/manual/en/datetime.format.php
|
*/
'default_time_format' => 'H:i',
'default_date_format' => 'd/m/Y',
/*
|--------------------------------------------------------------------------
| Surpress Search Highlights
|--------------------------------------------------------------------------
| When enabled, matching text won't be highlighted in the search results
| while searching.
|
*/
'suppress_search_highlights' => false,
/*
|--------------------------------------------------------------------------
| Per Page Options
|--------------------------------------------------------------------------
| Sets the options to choose from in the `Per Page`dropdown.
|
*/
'per_page_options' => [10, 25, 50, 100],
/*
|--------------------------------------------------------------------------
| Default Per Page
|--------------------------------------------------------------------------
| Sets the default amount of rows to display per page.
|
*/
'default_per_page' => 10,
/*
|--------------------------------------------------------------------------
| Model Namespace
|--------------------------------------------------------------------------
| Sets the default namespace to be used when generating a new Datatables
| component.
|
*/
'model_namespace' => 'App\Models',
/*
|--------------------------------------------------------------------------
| Default CSS classes
|--------------------------------------------------------------------------
|
| Sets the default classes that will be applied to each row and class
| if the rowClasses() and cellClasses() functions are not overrided.
|
*/
'default_classes' => [
'row' => [
'even' => 'divide-x divide-gray-100 text-sm text-gray-900 bg-white hover:bg-gray-100',
'odd' => 'divide-x divide-gray-100 text-sm text-gray-900 bg-white hover:bg-gray-100',
'selected' => 'divide-x divide-gray-100 text-sm text-gray-900 bg-yellow-100',
],
'cell' => 'text-sm text-gray-700',
],
];

19
config/livewire-quill.php Normal file
View File

@@ -0,0 +1,19 @@
<?php
return [
/*
* The base folder to store the images in
*/
'storage_folder' => env('LIVEWIRE_QUILL_STORAGE_FOLDER', 'quill-images'),
/*
* Should the images be stored publically or not
*/
'store_publically' => env('LIVEWIRE_QUILL_STORE_PUBLICALLY', true),
/*
* Should the images be deleted from the server once deleted in the editor
* or retained for future use (note: the package will never re-use the same image)
*/
'clean_up_deleted_images' => env('LIVEWIRE_QUILL_CLEAN_UP_DELETED_IMAGES', true),
];

166
config/livewire.php Normal file
View File

@@ -0,0 +1,166 @@
<?php
return [
/*
|---------------------------------------------------------------------------
| Class Namespace
|---------------------------------------------------------------------------
|
| This value sets the root class namespace for Livewire component classes in
| your application. This value will change where component auto-discovery
| finds components. It's also referenced by the file creation commands.
|
*/
'class_namespace' => 'App\\Http\\Livewire',
/*
|---------------------------------------------------------------------------
| View Path
|---------------------------------------------------------------------------
|
| This value is used to specify where Livewire component Blade templates are
| stored when running file creation commands like `artisan make:livewire`.
| It is also used if you choose to omit a component's render() method.
|
*/
'view_path' => resource_path('views/livewire'),
/*
|---------------------------------------------------------------------------
| Layout
|---------------------------------------------------------------------------
| The view that will be used as the layout when rendering a single component
| as an entire page via `Route::get('/post/create', CreatePost::class);`.
| In this case, the view returned by CreatePost will render into $slot.
|
*/
'layout' => 'components.layouts.app',
/*
|---------------------------------------------------------------------------
| Lazy Loading Placeholder
|---------------------------------------------------------------------------
| Livewire allows you to lazy load components that would otherwise slow down
| the initial page load. Every component can have a custom placeholder or
| you can define the default placeholder view for all components below.
|
*/
'lazy_placeholder' => null,
/*
|---------------------------------------------------------------------------
| Temporary File Uploads
|---------------------------------------------------------------------------
|
| Livewire handles file uploads by storing uploads in a temporary directory
| before the file is stored permanently. All file uploads are directed to
| a global endpoint for temporary storage. You may configure this below:
|
*/
'temporary_file_upload' => [
'disk' => null, // Example: 'local', 's3' | Default: 'default'
'rules' => null, // Example: ['required', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB)
'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp'
'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1'
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs...
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
'mov', 'avi', 'wmv', 'mp3', 'm4a',
'jpg', 'jpeg', 'mpga', 'webp', 'wma',
],
'max_upload_time' => 15, // Max duration (in minutes) before an upload is invalidated...
'cleanup' => true, // Should cleanup temporary uploads older than 24 hrs...
],
/*
|---------------------------------------------------------------------------
| Render On Redirect
|---------------------------------------------------------------------------
|
| This value determines if Livewire will run a component's `render()` method
| after a redirect has been triggered using something like `redirect(...)`
| Setting this to true will render the view once more before redirecting
|
*/
'render_on_redirect' => false,
/*
|---------------------------------------------------------------------------
| Eloquent Model Binding
|---------------------------------------------------------------------------
|
| Previous versions of Livewire supported binding directly to eloquent model
| properties using wire:model by default. However, this behavior has been
| deemed too "magical" and has therefore been put under a feature flag.
|
*/
'legacy_model_binding' => false,
/*
|---------------------------------------------------------------------------
| Auto-inject Frontend Assets
|---------------------------------------------------------------------------
|
| By default, Livewire automatically injects its JavaScript and CSS into the
| <head> and <body> of pages containing Livewire components. By disabling
| this behavior, you need to use @livewireStyles and @livewireScripts.
|
*/
'inject_assets' => false,
/*
* Override the Livewire JS asset URL to serve from public/ directly
* (bypasses PHP serving which causes Firefox beta parser issues)
*/
'asset_url' => env('APP_DEBUG') ? '/livewire-dev.js' : null,
/*
|---------------------------------------------------------------------------
| Navigate (SPA mode)
|---------------------------------------------------------------------------
|
| By adding `wire:navigate` to links in your Livewire application, Livewire
| will prevent the default link handling and instead request those pages
| via AJAX, creating an SPA-like effect. Configure this behavior here.
|
*/
'navigate' => [
'show_progress_bar' => true,
'progress_bar_color' => '#2299dd',
],
/*
|---------------------------------------------------------------------------
| HTML Morph Markers
|---------------------------------------------------------------------------
|
| Livewire intelligently "morphs" existing HTML into the newly rendered HTML
| after each update. To make this process more reliable, Livewire injects
| "markers" into the rendered Blade surrounding @if, @class & @foreach.
|
*/
'inject_morph_markers' => true,
/*
|---------------------------------------------------------------------------
| Pagination Theme
|---------------------------------------------------------------------------
|
| When enabling Livewire's pagination feature by using the `WithPagination`
| trait, Livewire will use Tailwind templates to render pagination views
| on the page. If you want Bootstrap CSS, you can specify: "bootstrap"
|
*/
'pagination_theme' => 'tailwind',
];

175
config/location.php Normal file
View File

@@ -0,0 +1,175 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Driver
|--------------------------------------------------------------------------
|
| The default driver you would like to use for location retrieval.
|
*/
'driver' => Stevebauman\Location\Drivers\IpApi::class,
/*
|--------------------------------------------------------------------------
| Driver Fallbacks
|--------------------------------------------------------------------------
|
| The drivers you want to use to retrieve the users location
| if the above selected driver is unavailable.
|
| These will be called upon in order (first to last).
|
*/
'fallbacks' => [
Stevebauman\Location\Drivers\IpInfo::class,
Stevebauman\Location\Drivers\GeoPlugin::class,
Stevebauman\Location\Drivers\MaxMind::class,
],
/*
|--------------------------------------------------------------------------
| Position
|--------------------------------------------------------------------------
|
| Here you may configure the position instance that is created
| and returned from the above drivers. The instance you
| create must extend the built-in Position class.
|
*/
'position' => Stevebauman\Location\Position::class,
/*
|--------------------------------------------------------------------------
| MaxMind Configuration
|--------------------------------------------------------------------------
|
| The configuration for the MaxMind driver.
|
| If web service is enabled, you must fill in your user ID and license key.
|
| If web service is disabled, it will try and retrieve the users location
| from the MaxMind database file located in the local path below.
|
| The MaxMind database file can be either City (default) or Country (smaller).
|
*/
'maxmind' => [
'web' => [
'enabled' => false,
'user_id' => '',
'license_key' => '',
'options' => [
'host' => 'geoip.maxmind.com',
],
],
'local' => [
'type' => 'city',
'path' => database_path('maxmind/GeoLite2-City.mmdb'),
],
],
/*
|--------------------------------------------------------------------------
| IP API Pro Configuration
|--------------------------------------------------------------------------
|
| The configuration for the IP API Pro driver.
|
*/
'ip_api' => [
'token' => env('IP_API_TOKEN'),
],
/*
|--------------------------------------------------------------------------
| IPInfo Configuration
|--------------------------------------------------------------------------
|
| The configuration for the IPInfo driver.
|
*/
'ipinfo' => [
'token' => env('IPINFO_TOKEN'),
],
/*
|--------------------------------------------------------------------------
| IPData Configuration
|--------------------------------------------------------------------------
|
| The configuration for the IPData driver.
|
*/
'ipdata' => [
'token' => env('IPDATA_TOKEN'),
],
/*
|--------------------------------------------------------------------------
| Kloudend ~ ipapi.co Configuration
|--------------------------------------------------------------------------
|
| The configuration for the Kloudend driver.
|
*/
'kloudend' => [
'token' => env('KLOUDEND_TOKEN'),
],
/*
|--------------------------------------------------------------------------
| Localhost Testing
|--------------------------------------------------------------------------
|
| If your running your website locally and want to test different
| IP addresses to see location detection, set 'enabled' to true.
|
| The testing IP address is a Google host in the United-States.
|
*/
'testing' => [
'enabled' => env('LOCATION_TESTING', true),
'ip' => '66.102.0.0',
],
];

118
config/logging.php Normal file
View File

@@ -0,0 +1,118 @@
<?php
use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;
return [
/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this option should match
| one of the channels defined in the "channels" configuration array.
|
*/
'default' => env('LOG_CHANNEL', 'stack'),
/*
|--------------------------------------------------------------------------
| Deprecations Log Channel
|--------------------------------------------------------------------------
|
| This option controls the log channel that should be used to log warnings
| regarding deprecated PHP and library features. This allows you to get
| your application ready for upcoming major versions of dependencies.
|
*/
'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog",
| "custom", "stack"
|
*/
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => timebank_config('logging.daily_retention_days', 14),
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => env('LOG_LEVEL', 'critical'),
],
'papertrail' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => SyslogUdpHandler::class,
'handler_with' => [
'host' => env('PAPERTRAIL_URL'),
'port' => env('PAPERTRAIL_PORT'),
],
],
'stderr' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => StreamHandler::class,
'formatter' => env('LOG_STDERR_FORMATTER'),
'with' => [
'stream' => 'php://stderr',
],
],
'syslog' => [
'driver' => 'syslog',
'level' => env('LOG_LEVEL', 'debug'),
],
'errorlog' => [
'driver' => 'errorlog',
'level' => env('LOG_LEVEL', 'debug'),
],
'null' => [
'driver' => 'monolog',
'handler' => NullHandler::class,
],
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
],
];

150
config/mail.php Normal file
View File

@@ -0,0 +1,150 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Mailer
|--------------------------------------------------------------------------
|
| This option controls the default mailer that is used to send any email
| messages sent by your application. Alternative mailers may be setup
| and used as needed; however, this mailer will be used by default.
|
*/
'default' => env('MAIL_MAILER', 'mailgun'),
/*
|--------------------------------------------------------------------------
| Mailer Configurations
|--------------------------------------------------------------------------
|
| Here you may configure all of the mailers used by your application plus
| their respective settings. Several examples have been configured for
| you and you are free to add your own as your application requires.
|
| Laravel supports a variety of mail "transport" drivers to be used while
| sending an e-mail. You will specify which one you are using for your
| mailers below. You are free to add additional mailers as required.
|
| Supported: "smtp", "sendmail", "mailgun", "ses",
| "postmark", "log", "array", "failover"
|
*/
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'auth_mode' => null,
],
'ses' => [
'transport' => 'ses',
],
'mailgun' => [
'transport' => 'mailgun',
],
'postmark' => [
'transport' => 'postmark',
],
'sendmail' => [
'transport' => 'sendmail',
'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'),
],
'log' => [
'transport' => 'log',
'channel' => env('MAIL_LOG_CHANNEL'),
],
'array' => [
'transport' => 'array',
],
'mailpit' => [
'transport' => 'smtp',
'host' => env('MAILPIT_HOST', 'localhost'),
'port' => env('MAILPIT_PORT', 1025),
'encryption' => null,
'username' => null,
'password' => null,
'timeout' => null,
],
'failover' => [
'transport' => 'failover',
'mailers' => [
'smtp',
'log',
],
],
],
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all e-mails sent by your application to be sent from
| the same address. Here, you may specify a name and address that is
| used globally for all e-mails that are sent by your application.
|
*/
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
/*
|--------------------------------------------------------------------------
| Bounce Processing Configuration
|--------------------------------------------------------------------------
|
| Configuration for processing bounce emails. Set up a dedicated email
| address (e.g. bounces@yourdomain.org) to receive bounce notifications.
|
*/
'bounce_processing' => [
'bounce_address' => env('MAIL_BOUNCE_ADDRESS', env('MAIL_FROM_ADDRESS')),
'mailbox' => env('BOUNCE_MAILBOX', 'bounces@yourdomain.org'),
'host' => env('BOUNCE_HOST', 'imap.yourdomain.org'),
'port' => env('BOUNCE_PORT', 993),
'protocol' => env('BOUNCE_PROTOCOL', 'imap'), // imap or pop3
'username' => env('BOUNCE_USERNAME'),
'password' => env('BOUNCE_PASSWORD'),
'ssl' => env('BOUNCE_SSL', true),
],
/*
|--------------------------------------------------------------------------
| Markdown Mail Settings
|--------------------------------------------------------------------------
|
| If you are using Markdown based email rendering, you may configure your
| theme and component paths here, allowing you to customize the design
| of the emails. Or, you may simply stick with the Laravel defaults!
|
*/
'markdown' => [
'theme' => 'timebank',
'paths' => [
resource_path('views/mail'),
resource_path('views/vendor/mail'),
],
],
];

156
config/markdown.php Normal file
View File

@@ -0,0 +1,156 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel Markdown.
*
* (c) Graham Campbell <hello@gjcampbell.co.uk>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Enable View Integration
|--------------------------------------------------------------------------
|
| This option specifies if the view integration is enabled so you can write
| markdown views and have them rendered as html. The following extensions
| are currently supported: ".md", ".md.php", and ".md.blade.php". You may
| disable this integration if it is conflicting with another package.
|
| Default: true
|
*/
'views' => true,
/*
|--------------------------------------------------------------------------
| CommonMark Extensions
|--------------------------------------------------------------------------
|
| This option specifies what extensions will be automatically enabled.
| Simply provide your extension class names here.
|
| Default: [
| League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension::class,
| League\CommonMark\Extension\Table\TableExtension::class,
| ]
|
*/
'extensions' => [
League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension::class,
League\CommonMark\Extension\Table\TableExtension::class,
],
/*
|--------------------------------------------------------------------------
| Renderer Configuration
|--------------------------------------------------------------------------
|
| This option specifies an array of options for rendering HTML.
|
| Default: [
| 'block_separator' => "\n",
| 'inner_separator' => "\n",
| 'soft_break' => "\n",
| ]
|
*/
'renderer' => [
'block_separator' => "\n",
'inner_separator' => "\n",
'soft_break' => "\n",
],
/*
|--------------------------------------------------------------------------
| Commonmark Configuration
|--------------------------------------------------------------------------
|
| This option specifies an array of options for commonmark.
|
| Default: [
| 'enable_em' => true,
| 'enable_strong' => true,
| 'use_asterisk' => true,
| 'use_underscore' => true,
| 'unordered_list_markers' => ['-', '+', '*'],
| ]
|
*/
'commonmark' => [
'enable_em' => true,
'enable_strong' => true,
'use_asterisk' => true,
'use_underscore' => true,
'unordered_list_markers' => ['-', '+', '*'],
],
/*
|--------------------------------------------------------------------------
| HTML Input
|--------------------------------------------------------------------------
|
| This option specifies how to handle untrusted HTML input.
|
| Default: 'strip'
|
*/
'html_input' => 'strip',
/*
|--------------------------------------------------------------------------
| Allow Unsafe Links
|--------------------------------------------------------------------------
|
| This option specifies whether to allow risky image URLs and links.
|
| Default: true
|
*/
'allow_unsafe_links' => true,
/*
|--------------------------------------------------------------------------
| Maximum Nesting Level
|--------------------------------------------------------------------------
|
| This option specifies the maximum permitted block nesting level.
|
| Default: PHP_INT_MAX
|
*/
'max_nesting_level' => PHP_INT_MAX,
/*
|--------------------------------------------------------------------------
| Slug Normalizer
|--------------------------------------------------------------------------
|
| This option specifies an array of options for slug normalization.
|
| Default: [
| 'max_length' => 255,
| 'unique' => 'document',
| ]
|
*/
'slug_normalizer' => [
'max_length' => 255,
'unique' => 'document',
],
];

45
config/mary.php Normal file
View File

@@ -0,0 +1,45 @@
<?php
return [
/**
* Default component prefix.
*
* Make sure to clear view cache after renaming with `php artisan view:clear`
*
* prefix => ''
* <x-button />
* <x-card />
*
* prefix => 'mary-'
* <x-mary-button />
* <x-mary-card />
*
*/
'prefix' => 'mary-',
/**
* Default route prefix.
*
* Some maryUI components make network request to its internal routes.
*
* route_prefix => ''
* - Spotlight: '/mary/spotlight'
* - Editor: '/mary/upload'
* - ...
*
* route_prefix => 'my-components'
* - Spotlight: '/my-components/mary/spotlight'
* - Editor: '/my-components/mary/upload'
* - ...
*/
'route_prefix' => '',
/**
* Components settings
*/
'components' => [
'spotlight' => [
'class' => 'App\Support\Spotlight',
]
]
];

238
config/media-library.php Normal file
View File

@@ -0,0 +1,238 @@
<?php
return [
/*
* The disk on which to store added files and derived images by default. Choose
* one or more of the disks you've configured in config/filesystems.php.
*/
'disk_name' => env('MEDIA_DISK', 'media'),
/*
* The maximum file size of an item in bytes.
* Adding a larger file will result in an exception.
*/
'max_file_size' => 1024 * 1024 * 12, // 12MB - matches timebank config posts.image_rule
/*
* This queue connection will be used to generate derived and responsive images.
* Leave empty to use the default queue connection.
*/
'queue_connection_name' => env('QUEUE_CONNECTION', 'sync'),
/*
* This queue will be used to generate derived and responsive images.
* Leave empty to use the default queue.
*/
'queue_name' => '',
/*
* By default all conversions will be performed on a queue.
*/
'queue_conversions_by_default' => env('QUEUE_CONVERSIONS_BY_DEFAULT', true),
/*
* The fully qualified class name of the media model.
*/
'media_model' => Spatie\MediaLibrary\MediaCollections\Models\Media::class,
/*
* The fully qualified class name of the model used for temporary uploads.
*
* This model is only used in Media Library Pro (https://medialibrary.pro)
*/
'temporary_upload_model' => Spatie\MediaLibraryPro\Models\TemporaryUpload::class,
/*
* When enabled, Media Library Pro will only process temporary uploads that were uploaded
* in the same session. You can opt to disable this for stateless usage of
* the pro components.
*/
'enable_temporary_uploads_session_affinity' => true,
/*
* When enabled, Media Library pro will generate thumbnails for uploaded file.
*/
'generate_thumbnails_for_temporary_uploads' => true,
/*
* This is the class that is responsible for naming generated files.
*/
'file_namer' => Spatie\MediaLibrary\Support\FileNamer\DefaultFileNamer::class,
/*
* The class that contains the strategy for determining a media file's path.
*/
'path_generator' => Spatie\MediaLibrary\Support\PathGenerator\DefaultPathGenerator::class,
/*
* Here you can specify which path generator should be used for the given class.
*/
'custom_path_generators' => [
// Model::class => PathGenerator::class
// or
// 'model_morph_alias' => PathGenerator::class
],
/*
* When urls to files get generated, this class will be called. Use the default
* if your files are stored locally above the site root or on s3.
*/
'url_generator' => Spatie\MediaLibrary\Support\UrlGenerator\DefaultUrlGenerator::class,
/*
* Moves media on updating to keep path consistent. Enable it only with a custom
* PathGenerator that uses, for example, the media UUID.
*/
'moves_media_on_update' => false,
/*
* Whether to activate versioning when urls to files get generated.
* When activated, this attaches a ?v=xx query string to the URL.
*/
'version_urls' => false,
/*
* The media library will try to optimize all converted images by removing
* metadata and applying a little bit of compression. These are
* the optimizers that will be used by default.
*/
'image_optimizers' => [
Spatie\ImageOptimizer\Optimizers\Jpegoptim::class => [
'-m85', // set maximum quality to 85%
'--force', // ensure that progressive generation is always done also if a little bigger
'--strip-all', // this strips out all text information such as comments and EXIF data
'--all-progressive', // this will make sure the resulting image is a progressive one
],
Spatie\ImageOptimizer\Optimizers\Pngquant::class => [
'--force', // required parameter for this package
],
Spatie\ImageOptimizer\Optimizers\Optipng::class => [
'-i0', // this will result in a non-interlaced, progressive scanned image
'-o2', // this set the optimization level to two (multiple IDAT compression trials)
'-quiet', // required parameter for this package
],
Spatie\ImageOptimizer\Optimizers\Svgo::class => [
'--disable=cleanupIDs', // disabling because it is known to cause troubles
],
Spatie\ImageOptimizer\Optimizers\Gifsicle::class => [
'-b', // required parameter for this package
'-O3', // this produces the slowest but best results
],
Spatie\ImageOptimizer\Optimizers\Cwebp::class => [
'-m 6', // for the slowest compression method in order to get the best compression.
'-pass 10', // for maximizing the amount of analysis pass.
'-mt', // multithreading for some speed improvements.
'-q 90', //quality factor that brings the least noticeable changes.
],
],
/*
* These generators will be used to create an image of media files.
*/
'image_generators' => [
Spatie\MediaLibrary\Conversions\ImageGenerators\Image::class,
Spatie\MediaLibrary\Conversions\ImageGenerators\Webp::class,
Spatie\MediaLibrary\Conversions\ImageGenerators\Pdf::class,
Spatie\MediaLibrary\Conversions\ImageGenerators\Svg::class,
Spatie\MediaLibrary\Conversions\ImageGenerators\Video::class,
],
/*
* The path where to store temporary files while performing image conversions.
* If set to null, storage_path('media-library/temp') will be used.
*/
'temporary_directory_path' => null,
/*
* The engine that should perform the image conversions.
* Should be either `gd` or `imagick`.
*/
'image_driver' => env('IMAGE_DRIVER', 'gd'),
/*
* FFMPEG & FFProbe binaries paths, only used if you try to generate video
* thumbnails and have installed the php-ffmpeg/php-ffmpeg composer
* dependency.
*/
'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'),
'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'),
/*
* Here you can override the class names of the jobs used by this package. Make sure
* your custom jobs extend the ones provided by the package.
*/
'jobs' => [
'perform_conversions' => Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob::class,
'generate_responsive_images' => Spatie\MediaLibrary\ResponsiveImages\Jobs\GenerateResponsiveImagesJob::class,
],
/*
* When using the addMediaFromUrl method you may want to replace the default downloader.
* This is particularly useful when the url of the image is behind a firewall and
* need to add additional flags, possibly using curl.
*/
'media_downloader' => Spatie\MediaLibrary\Downloaders\DefaultDownloader::class,
'remote' => [
/*
* Any extra headers that should be included when uploading media to
* a remote disk. Even though supported headers may vary between
* different drivers, a sensible default has been provided.
*
* Supported by S3: CacheControl, Expires, StorageClass,
* ServerSideEncryption, Metadata, ACL, ContentEncoding
*/
'extra_headers' => [
'CacheControl' => 'max-age=604800',
],
],
'responsive_images' => [
/*
* This class is responsible for calculating the target widths of the responsive
* images. By default we optimize for filesize and create variations that each are 30%
* smaller than the previous one. More info in the documentation.
*
* https://docs.spatie.be/laravel-medialibrary/v9/advanced-usage/generating-responsive-images
*/
'width_calculator' => Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator::class,
/*
* By default rendering media to a responsive image will add some javascript and a tiny placeholder.
* This ensures that the browser can already determine the correct layout.
*/
'use_tiny_placeholders' => true,
/*
* This class will generate the tiny placeholder used for progressive image loading. By default
* the media library will use a tiny blurred jpg image.
*/
'tiny_placeholder_generator' => Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred::class,
],
/*
* When enabling this option, a route will be registered that will enable
* the Media Library Pro Vue and React components to move uploaded files
* in a S3 bucket to their right place.
*/
'enable_vapor_uploads' => env('ENABLE_MEDIA_LIBRARY_VAPOR_UPLOADS', false),
/*
* When converting Media instances to response the media library will add
* a `loading` attribute to the `img` tag. Here you can set the default
* value of that attribute.
*
* Possible values: 'lazy', 'eager', 'auto' or null if you don't want to set any loading instruction.
*
* More info: https://css-tricks.com/native-lazy-loading/
*/
'default_loading_attribute_value' => null,
/*
* You can specify a prefix for that is used for storing all media.
* If you set this to `/my-subdir`, all your media will be stored in a `/my-subdir` directory.
*/
'prefix' => env('MEDIA_PREFIX', ''),
];

161
config/permission.php Normal file
View File

@@ -0,0 +1,161 @@
<?php
return [
'models' => [
/*
* When using the "HasPermissions" trait from this package, we need to know which
* Eloquent model should be used to retrieve your permissions. Of course, it
* is often just the "Permission" model but you may use whatever you like.
*
* The model you want to use as a Permission model needs to implement the
* `Spatie\Permission\Contracts\Permission` contract.
*/
'permission' => Spatie\Permission\Models\Permission::class,
/*
* When using the "HasRoles" trait from this package, we need to know which
* Eloquent model should be used to retrieve your roles. Of course, it
* is often just the "Role" model but you may use whatever you like.
*
* The model you want to use as a Role model needs to implement the
* `Spatie\Permission\Contracts\Role` contract.
*/
'role' => Spatie\Permission\Models\Role::class,
],
'table_names' => [
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'roles' => 'roles',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your permissions. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'permissions' => 'permissions',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your models permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_permissions' => 'model_has_permissions',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your models roles. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_roles' => 'model_has_roles',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'role_has_permissions' => 'role_has_permissions',
],
'column_names' => [
/*
* Change this if you want to name the related pivots other than defaults
*/
'role_pivot_key' => null, //default 'role_id',
'permission_pivot_key' => null, //default 'permission_id',
/*
* Change this if you want to name the related model primary key other than
* `model_id`.
*
* For example, this would be nice if your primary keys are all UUIDs. In
* that case, name this `model_uuid`.
*/
'model_morph_key' => 'model_id',
/*
* Change this if you want to use the teams feature and your related model's
* foreign key is other than `team_id`.
*/
'team_foreign_key' => 'team_id',
],
/*
* When set to true, the method for checking permissions will be registered on the gate.
* Set this to false, if you want to implement custom logic for checking permissions.
*/
'register_permission_check_method' => true,
/*
* When set to true the package implements teams using the 'team_foreign_key'. If you want
* the migrations to register the 'team_foreign_key', you must set this to true
* before doing the migration. If you already did the migration then you must make a new
* migration to also add 'team_foreign_key' to 'roles', 'model_has_roles', and
* 'model_has_permissions'(view the latest version of package's migration file)
*/
'teams' => false,
/*
* When set to true, the required permission names are added to the exception
* message. This could be considered an information leak in some contexts, so
* the default setting is false here for optimum safety.
*/
'display_permission_in_exception' => true,
/*
* When set to true, the required role names are added to the exception
* message. This could be considered an information leak in some contexts, so
* the default setting is false here for optimum safety.
*/
'display_role_in_exception' => true,
/*
* By default wildcard permission lookups are disabled.
*/
'enable_wildcard_permission' => false,
'cache' => [
/*
* By default all permissions are cached for 24 hours to speed up performance.
* When permissions or roles are updated the cache is flushed automatically.
*/
'expiration_time' => \DateInterval::createFromDateString('24 hours'),
/*
* The cache key used to store all permissions.
*/
'key' => 'spatie.permission.cache',
/*
* You may optionally indicate a specific cache driver to use for permission and
* role caching using any of the `store` drivers listed in the cache.php config
* file. Using 'default' here means to use the `default` set in cache.php.
*/
'store' => 'default',
],
];

93
config/queue.php Normal file
View File

@@ -0,0 +1,93 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Queue Connection Name
|--------------------------------------------------------------------------
|
| Laravel's queue API supports an assortment of back-ends via a single
| API, giving you convenient access to each back-end using the same
| syntax for every one. Here you may define a default connection.
|
*/
'default' => env('QUEUE_CONNECTION', 'sync'),
/*
|--------------------------------------------------------------------------
| Queue Connections
|--------------------------------------------------------------------------
|
| Here you may configure the connection information for each server that
| is used by your application. A default configuration has been added
| for each back-end shipped with Laravel. You are free to add more.
|
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
|
*/
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
'after_commit' => false,
],
'beanstalkd' => [
'driver' => 'beanstalkd',
'host' => 'localhost',
'queue' => 'default',
'retry_after' => 90,
'block_for' => 0,
'after_commit' => false,
],
'sqs' => [
'driver' => 'sqs',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'default'),
'suffix' => env('SQS_SUFFIX'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'after_commit' => false,
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => null,
'after_commit' => false,
],
],
/*
|--------------------------------------------------------------------------
| Failed Queue Jobs
|--------------------------------------------------------------------------
|
| These options configure the behavior of failed queue job logging so you
| can control which database and table are used to store the jobs that
| have failed. You may change them to any database / table you wish.
|
*/
'failed' => [
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],
];

91
config/reverb.php Normal file
View File

@@ -0,0 +1,91 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Reverb Server
|--------------------------------------------------------------------------
|
| This option controls the default server used by Reverb to handle
| incoming messages as well as broadcasting message to all your
| connected clients. At this time only "reverb" is supported.
|
*/
'default' => env('REVERB_SERVER', 'reverb'),
/*
|--------------------------------------------------------------------------
| Reverb Servers
|--------------------------------------------------------------------------
|
| Here you may define details for each of the supported Reverb servers.
| Each server has its own configuration options that are defined in
| the array below. You should ensure all the options are present.
|
*/
'servers' => [
'reverb' => [
'host' => env('REVERB_SERVER_HOST', '0.0.0.0'),
'port' => env('REVERB_SERVER_PORT', 8080),
'hostname' => env('REVERB_HOST'),
'options' => [
'tls' => [],
],
'max_request_size' => env('REVERB_MAX_REQUEST_SIZE', 10_000),
'scaling' => [
'enabled' => env('REVERB_SCALING_ENABLED', false),
'channel' => env('REVERB_SCALING_CHANNEL', 'reverb'),
'server' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'port' => env('REDIS_PORT', '6379'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'database' => env('REDIS_DB', '0'),
],
],
'pulse_ingest_interval' => env('REVERB_PULSE_INGEST_INTERVAL', 15),
'telescope_ingest_interval' => env('REVERB_TELESCOPE_INGEST_INTERVAL', 15),
],
],
/*
|--------------------------------------------------------------------------
| Reverb Applications
|--------------------------------------------------------------------------
|
| Here you may define how Reverb applications are managed. If you choose
| to use the "config" provider, you may define an array of apps which
| your server will support, including their connection credentials.
|
*/
'apps' => [
'provider' => 'config',
'apps' => [
[
'key' => env('REVERB_APP_KEY'),
'secret' => env('REVERB_APP_SECRET'),
'app_id' => env('REVERB_APP_ID'),
'options' => [
'host' => env('REVERB_HOST'),
'port' => env('REVERB_PORT', 443),
'scheme' => env('REVERB_SCHEME', 'https'),
'useTLS' => env('REVERB_SCHEME', 'https') === 'https',
],
'allowed_origins' => ['*'],
'ping_interval' => env('REVERB_APP_PING_INTERVAL', 60),
'max_message_size' => env('REVERB_APP_MAX_MESSAGE_SIZE', 10_000),
],
],
],
];

67
config/sanctum.php Normal file
View File

@@ -0,0 +1,67 @@
<?php
use Laravel\Sanctum\Sanctum;
return [
/*
|--------------------------------------------------------------------------
| Stateful Domains
|--------------------------------------------------------------------------
|
| Requests from the following domains / hosts will receive stateful API
| authentication cookies. Typically, these should include your local
| and production domains which access your API via a frontend SPA.
|
*/
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
Sanctum::currentApplicationUrlWithPort()
))),
/*
|--------------------------------------------------------------------------
| Sanctum Guards
|--------------------------------------------------------------------------
|
| This array contains the authentication guards that will be checked when
| Sanctum is trying to authenticate a request. If none of these guards
| are able to authenticate the request, Sanctum will use the bearer
| token that's present on an incoming request for authentication.
|
*/
'guard' => ['web'],
/*
|--------------------------------------------------------------------------
| Expiration Minutes
|--------------------------------------------------------------------------
|
| This value controls the number of minutes until an issued token will be
| considered expired. If this value is null, personal access tokens do
| not expire. This won't tweak the lifetime of first-party sessions.
|
*/
'expiration' => null,
/*
|--------------------------------------------------------------------------
| Sanctum Middleware
|--------------------------------------------------------------------------
|
| When authenticating your first-party SPA with Sanctum you may need to
| customize some of the middleware Sanctum uses while processing the
| request. You may change the middleware listed below as required.
|
*/
'middleware' => [
'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
],
];

141
config/scout.php Normal file
View File

@@ -0,0 +1,141 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Search Engine
|--------------------------------------------------------------------------
|
| This option controls the default search connection that gets used while
| using Laravel Scout. This connection is used when syncing all models
| to the search service. You should adjust this based on your needs.
|
| Supported: "algolia", "meilisearch", "database", "collection", "null"
|
*/
'driver' => env('SCOUT_DRIVER', 'matchish-elasticsearch'),
/*
|--------------------------------------------------------------------------
| Index Prefix
|--------------------------------------------------------------------------
|
| Here you may specify a prefix that will be applied to all search index
| names used by Scout. This prefix may be useful if you have multiple
| "tenants" or applications sharing the same search infrastructure.
|
*/
'prefix' => env('SCOUT_PREFIX', ''),
/*
|--------------------------------------------------------------------------
| Queue Data Syncing
|--------------------------------------------------------------------------
|
| This option allows you to control if the operations that sync your data
| with your search engines are queued. When this is set to "true" then
| all automatic data syncing will get queued for better performance.
|
*/
'queue' => env('SCOUT_QUEUE', true),
/*
|--------------------------------------------------------------------------
| Database Transactions
|--------------------------------------------------------------------------
|
| This configuration option determines if your data will only be synced
| with your search indexes after every open database transaction has
| been committed, thus preventing any discarded data from syncing.
|
*/
'after_commit' => false,
/*
|--------------------------------------------------------------------------
| Chunk Sizes
|--------------------------------------------------------------------------
|
| These options allow you to control the maximum chunk size when you are
| mass importing data into the search engine. This allows you to fine
| tune each of these chunk sizes based on the power of the servers.
|
*/
'chunk' => [
'searchable' => 500,
'unsearchable' => 500,
],
/*
|--------------------------------------------------------------------------
| Soft Deletes
|--------------------------------------------------------------------------
|
| This option allows to control whether to keep soft deleted records in
| the search indexes. Maintaining soft deleted records can be useful
| if your application still needs to search for the records later.
|
*/
'soft_delete' => false,
/*
|--------------------------------------------------------------------------
| Identify User
|--------------------------------------------------------------------------
|
| This option allows you to control whether to notify the search engine
| of the user performing the search. This is sometimes useful if the
| engine supports any analytics based on this application's users.
|
| Supported engines: "algolia"
|
*/
'identify' => env('SCOUT_IDENTIFY', false),
/*
|--------------------------------------------------------------------------
| Algolia Configuration
|--------------------------------------------------------------------------
|
| Here you may configure your Algolia settings. Algolia is a cloud hosted
| search engine which works great with Scout out of the box. Just plug
| in your application ID and admin API key to get started searching.
|
*/
'algolia' => [
'id' => env('ALGOLIA_APP_ID', ''),
'secret' => env('ALGOLIA_SECRET', ''),
],
/*
|--------------------------------------------------------------------------
| Meilisearch Configuration
|--------------------------------------------------------------------------
|
| Here you may configure your Meilisearch settings. Meilisearch is an open
| source search engine with minimal configuration. Below, you can state
| the host and key information for your own Meilisearch installation.
|
| See: https://www.meilisearch.com/docs/learn/configuration/instance_options#all-instance-options
|
*/
'meilisearch' => [
'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'),
'key' => env('MEILISEARCH_KEY'),
'index-settings' => [
// 'users' => [
// 'filterableAttributes'=> ['id', 'name', 'email'],
// ],
],
],
];

22
config/security.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
// filepath: config/security.php
return [
// TODO: Fix this, currently it is not implemented yet!
/*
|--------------------------------------------------------------------------
| Development Route Prefix
|--------------------------------------------------------------------------
|
| This value is used in the RouteServiceProvider to prefix all routes
| on development environments, preventing unauthorized access.
| It is loaded from the .env file.
|
*/
'route_prefix_key' => env('ROUTE_PREFIX_KEY'),
];

33
config/services.php Normal file
View File

@@ -0,0 +1,33 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Third Party Services
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
| as Mailgun, Postmark, AWS and more. This file provides the de facto
| location for this type of information, allowing packages to have
| a conventional file to locate the various service credentials.
|
*/
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
],
'postmark' => [
'token' => env('POSTMARK_TOKEN'),
],
'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
];

205
config/session.php Normal file
View File

@@ -0,0 +1,205 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Session Driver
|--------------------------------------------------------------------------
|
| This option controls the default session "driver" that will be used on
| requests. By default, we will use the lightweight native driver but
| you may specify any of the other wonderful drivers provided here.
|
| Supported: "file", "cookie", "database", "apc",
| "memcached", "redis", "dynamodb", "array"
|
*/
'driver' => 'database',
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
| NOTE: This is overridden by profile_timeouts in platform config.
| See config/timebank_cc.php -> 'profile_timeouts' for actual timeouts.
| This value serves as a fallback only.
|
*/
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
/*
|--------------------------------------------------------------------------
| Session Encryption
|--------------------------------------------------------------------------
|
| This option allows you to easily specify that all of your session data
| should be encrypted before it is stored. All encryption will be run
| automatically by Laravel and you can use the Session like normal.
|
*/
'encrypt' => env('SESSION_ENCRYPT', true),
/*
|--------------------------------------------------------------------------
| Session File Location
|--------------------------------------------------------------------------
|
| When using the native session driver, we need a location where session
| files may be stored. A default has been set for you but a different
| location may be specified. This is only needed for file sessions.
|
*/
'files' => storage_path('framework/sessions'),
/*
|--------------------------------------------------------------------------
| Session Database Connection
|--------------------------------------------------------------------------
|
| When using the "database" or "redis" session drivers, you may specify a
| connection that should be used to manage these sessions. This should
| correspond to a connection in your database configuration options.
|
*/
'connection' => env('SESSION_CONNECTION', null),
/*
|--------------------------------------------------------------------------
| Session Database Table
|--------------------------------------------------------------------------
|
| When using the "database" session driver, you may specify the table we
| should use to manage the sessions. Of course, a sensible default is
| provided for you; however, you are free to change this as needed.
|
*/
'table' => 'sessions',
/*
|--------------------------------------------------------------------------
| Session Cache Store
|--------------------------------------------------------------------------
|
| While using one of the framework's cache driven session backends you may
| list a cache store that should be used for these sessions. This value
| must match with one of the application's configured cache "stores".
|
| Affects: "apc", "dynamodb", "memcached", "redis"
|
*/
'store' => env('SESSION_STORE', null),
/*
|--------------------------------------------------------------------------
| Session Sweeping Lottery
|--------------------------------------------------------------------------
|
| Some session drivers must manually sweep their storage location to get
| rid of old sessions from storage. Here are the chances that it will
| happen on a given request. By default, the odds are 2 out of 100.
|
*/
'lottery' => [2, 100],
/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the cookie used to identify a session
| instance by ID. The name specified here will get used every time a
| new session cookie is created by the framework for every driver.
|
*/
'cookie' => env(
'SESSION_COOKIE',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
/*
|--------------------------------------------------------------------------
| Session Cookie Path
|--------------------------------------------------------------------------
|
| The session cookie path determines the path for which the cookie will
| be regarded as available. Typically, this will be the root path of
| your application but you are free to change this when necessary.
|
*/
'path' => '/',
/*
|--------------------------------------------------------------------------
| Session Cookie Domain
|--------------------------------------------------------------------------
|
| Here you may change the domain of the cookie used to identify a session
| in your application. This will determine which domains the cookie is
| available to in your application. A sensible default has been set.
|
*/
'domain' => env('SESSION_DOMAIN'),
/*
|--------------------------------------------------------------------------
| HTTPS Only Cookies
|--------------------------------------------------------------------------
|
| By setting this option to true, session cookies will only be sent back
| to the server if the browser has a HTTPS connection. This will keep
| the cookie from being sent to you when it can't be done securely.
|
*/
'secure' => env('SESSION_SECURE_COOKIE'),
/*
|--------------------------------------------------------------------------
| HTTP Access Only
|--------------------------------------------------------------------------
|
| Setting this value to true will prevent JavaScript from accessing the
| value of the cookie and the cookie will only be accessible through
| the HTTP protocol. You are free to modify this option if needed.
|
*/
'http_only' => true,
/*
|--------------------------------------------------------------------------
| Same-Site Cookies
|--------------------------------------------------------------------------
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
| will set this value to "lax" since this is a secure default value.
|
| Supported: "lax", "strict", "none", null
|
*/
'same_site' => env('SESSION_SAME_SITE', 'lax'),
];

8
config/simple-select.php Normal file
View File

@@ -0,0 +1,8 @@
<?php
/*
* You can place your custom package configuration in here.
*/
return [
'component-name' => 'simple-select'
];

158
config/sluggable.php Normal file
View File

@@ -0,0 +1,158 @@
<?php
return [
/**
* What attributes do we use to build the slug?
* This can be a single field, like "name" which will build a slug from:
*
* $model->name;
*
* Or it can be an array of fields, like ["name", "company"], which builds a slug from:
*
* $model->name . ' ' . $model->company;
*
* If you've defined custom getters in your model, you can use those too,
* since Eloquent will call them when you request a custom attribute.
*
* Defaults to null, which uses the toString() method on your model.
*/
'source' => null,
/**
* The maximum length of a generated slug. Defaults to "null", which means
* no length restrictions are enforced. Set it to a positive integer if you
* want to make sure your slugs aren't too long.
*/
'maxLength' => null,
/**
* If you are setting a maximum length on your slugs, you may not want the
* truncated string to split a word in half. The default setting of "true"
* will ensure this, e.g. with a maxLength of 12:
*
* "my source string" -> "my-source"
*
* Setting it to "false" will simply truncate the generated slug at the
* desired length, e.g.:
*
* "my source string" -> "my-source-st"
*/
'maxLengthKeepWords' => true,
/**
* If left to "null", then use the cocur/slugify package to generate the slug
* (with the separator defined below).
*
* Set this to a closure that accepts two parameters (string and separator)
* to define a custom slugger. e.g.:
*
* 'method' => function( $string, $sep ) {
* return preg_replace('/[^a-z]+/i', $sep, $string);
* },
*
* Otherwise, this will be treated as a callable to be used. e.g.:
*
* 'method' => array('Str','slug'),
*/
'method' => null,
/**
* Separator to use when generating slugs. Defaults to a hyphen.
*/
'separator' => '-',
/**
* Enforce uniqueness of slugs? Defaults to true.
* If a generated slug already exists, an incremental numeric
* value will be appended to the end until a unique slug is found. e.g.:
*
* my-slug
* my-slug-1
* my-slug-2
*/
'unique' => true,
/**
* If you are enforcing unique slugs, the default is to add an
* incremental value to the end of the base slug. Alternatively, you
* can change this value to a closure that accepts three parameters:
* the base slug, the separator, and a Collection of the other
* "similar" slugs. The closure should return the new unique
* suffix to append to the slug.
*/
'uniqueSuffix' => null,
/**
* What is the first suffix to add to a slug to make it unique?
* For the default method of adding incremental integers, we start
* counting at 2, so the list of slugs would be, e.g.:
*
* - my-post
* - my-post-2
* - my-post-3
*/
'firstUniqueSuffix' => 2,
/**
* Should we include the trashed items when generating a unique slug?
* This only applies if the softDelete property is set for the Eloquent model.
* If set to "false", then a new slug could duplicate one that exists on a trashed model.
* If set to "true", then uniqueness is enforced across trashed and existing models.
*/
'includeTrashed' => false,
/**
* An array of slug names that can never be used for this model,
* e.g. to prevent collisions with existing routes or controller methods, etc..
* Defaults to null (i.e. no reserved names).
* Can be a static array, e.g.:
*
* 'reserved' => array('add', 'delete'),
*
* or a closure that returns an array of reserved names.
* If using a closure, it will accept one parameter: the model itself, and should
* return an array of reserved names, or null. e.g.
*
* 'reserved' => function( Model $model) {
* return $model->some_method_that_returns_an_array();
* }
*
* In the case of a slug that gets generated with one of these reserved names,
* we will do:
*
* $slug .= $separator + "1"
*
* and continue from there.
*/
'reserved' => null,
/**
* Whether to update the slug value when a model is being
* re-saved (i.e. already exists). Defaults to false, which
* means slugs are not updated.
*
* Be careful! If you are using slugs to generate URLs, then
* updating your slug automatically might change your URLs which
* is probably not a good idea from an SEO point of view.
* Only set this to true if you understand the possible consequences.
*/
'onUpdate' => false,
/**
* If the default slug engine of cocur/slugify is used, this array of
* configuration options will be used when instantiating the engine.
*/
'slugEngineOptions' => [],
];

73
config/social-share.php Normal file
View File

@@ -0,0 +1,73 @@
<?php
return [
'services' => [
'facebook' => [
'label' => 'Facebook',
'url' => 'https://www.facebook.com/sharer/sharer.php?u=#url#&text=#text#',
'color' => '#1777f2',
],
// @DEPRECATED. Is replaced with `x`. The values of `x` are the same.
'twitter' => [
'name' => 'x',
'label' => 'X',
'url' => 'https://x.com/intent/tweet?url=#url#',
'color' => '#000000',
],
'x' => [
'label' => 'X',
'url' => 'https://x.com/intent/tweet?url=#url#', // @TODO: replace with actual URL if `tweet` get's renamed.
'color' => '#000000',
],
'linkedin' => [
'label' => 'LinkedIn',
'url' => 'https://www.linkedin.com/sharing/share-offsite/?url=#url#&summary=#text#',
'color' => '#0077b5',
],
'whatsapp' => [
'label' => 'WhatsApp',
'url' => 'https://wa.me/?text=#textWithUrl#',
'color' => '#4dc247',
],
'pinterest' => [
'label' => 'Pinterest',
'url' => 'https://pinterest.com/pin/create/button/?url=#url#',
'color' => '#cb2027',
],
'reddit' => [
'label' => 'Reddit',
'url' => 'https://www.reddit.com/submit?url=#url#&title=#text#',
'color' => '#ff5700',
],
'telegram' => [
'label' => 'Telegram',
'url' => 'https://telegram.me/share/url?url=#url#&text=#text#',
'color' => '#0088cc',
],
'email' => [
'label' => 'Email',
'url' => 'mailto:?body=#textWithUrl#',
'color' => '#848484',
],
'mastodon' => [
'label' => 'Mastodon',
'url' => 'https://mastodonshare.com/?url=#url#&text=#text#',
'color' => '#6364FF',
],
'bluesky' => [
'label' => 'Bluesky',
'url' => 'https://bsky.app/intent/compose?text=#textWithUrl#',
'color' => '#1185FE',
],
'signal' => [
'label' => 'Signal',
'url' => 'sgnl://send?text=#textWithUrl#',
'color' => '#3A76F0',
],
'instagram' => [
'label' => 'Instagram',
'url' => 'https://www.instagram.com/',
'color' => '#E4405F',
],
],
];

78
config/taggable.php Normal file
View File

@@ -0,0 +1,78 @@
<?php
return [
/**
* List of characters that can delimit the tags passed to the
* tag() / untag() / etc. functions.
*/
'delimiters' => ',;',
/**
* Character used to delimit tag lists returned in the
* tagList, tagListNormalized, etc. attributes.
*/
'glue' => ',',
/**
* Method used to "normalize" tag names. Can either be a global function name,
* a closure function, or a callable, e.g. ['Classname', 'method'].
*/
'normalizer' => 'mb_strtolower',
/**
* The database connection to use for the Tag model and associated tables.
* By default, we use the default database connection, but this can be defined
* so that all the tag-related tables are stored in a different connection.
*/
'connection' => null,
/**
* How to handle passing empty values to the scope queries. When set to false,
* the scope queries will return no models. When set to true, passing an empty
* value to the scope queries will throw an exception instead.
*/
'throwEmptyExceptions' => false,
/**
* If you want to be able to find all the models that share a tag, you will need
* to define the inverse relations here. The array keys are the relation names
* you would use to access them (e.g. "posts") and the values are the qualified
* class names of the models that are taggable (e.g. "\App\Post). e.g. with
* the following configuration:
*
* 'taggedModels' => [
* 'posts' => \App\Post::class
* ]
*
* You will be able to do:
*
* $posts = Tag::findByName('Apple')->posts;
*
* to get a collection of all the Posts that are tagged "Apple".
*/
'taggedModels' => [
'users' => \App\Models\User::class,
'organizations' => App\Models\Organization::class,
'banks' => App\Models\Bank::class,
],
/**
* The model used to store the tags in the database. You can
* create your own class that extends the package's Tag model,
* then update the configuration below.
*/
// 'model' => \Cviebrock\EloquentTaggable\Models\Tag::class,
'model' => \App\Models\Tag::class,
/**
* The tables used to store the tags in the database. You can
* publish the package's migrations and use custom names.
*/
'tables' => [
'taggable_tags' => 'taggable_tags',
'taggable_taggables' => 'taggable_taggables',
]
];

187
config/telescope.php Normal file
View File

@@ -0,0 +1,187 @@
<?php
use Laravel\Telescope\Http\Middleware\Authorize;
use Laravel\Telescope\Watchers;
return [
/*
|--------------------------------------------------------------------------
| Telescope Domain
|--------------------------------------------------------------------------
|
| This is the subdomain where Telescope will be accessible from. If the
| setting is null, Telescope will reside under the same domain as the
| application. Otherwise, this value will be used as the subdomain.
|
*/
'domain' => env('TELESCOPE_DOMAIN'),
/*
|--------------------------------------------------------------------------
| Telescope Path
|--------------------------------------------------------------------------
|
| This is the URI path where Telescope will be accessible from. Feel free
| to change this path to anything you like. Note that the URI will not
| affect the paths of its internal API that aren't exposed to users.
|
*/
'path' => env('TELESCOPE_PATH', 'telescope'),
/*
|--------------------------------------------------------------------------
| Telescope Storage Driver
|--------------------------------------------------------------------------
|
| This configuration options determines the storage driver that will
| be used to store Telescope's data. In addition, you may set any
| custom options as needed by the particular driver you choose.
|
*/
'driver' => env('TELESCOPE_DRIVER', 'database'),
'storage' => [
'database' => [
'connection' => env('DB_CONNECTION', 'mysql'),
'chunk' => 1000,
],
],
/*
|--------------------------------------------------------------------------
| Telescope Master Switch
|--------------------------------------------------------------------------
|
| This option may be used to disable all Telescope watchers regardless
| of their individual configuration, which simply provides a single
| and convenient way to enable or disable Telescope data storage.
|
*/
'enabled' => env('TELESCOPE_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Telescope Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will be assigned to every Telescope route, giving you
| the chance to add your own middleware to this list or change any of
| the existing middleware. Or, you can simply stick with this list.
|
*/
'middleware' => [
'web',
Authorize::class,
],
/*
|--------------------------------------------------------------------------
| Allowed / Ignored Paths & Commands
|--------------------------------------------------------------------------
|
| The following array lists the URI paths and Artisan commands that will
| not be watched by Telescope. In addition to this list, some Laravel
| commands, like migrations and queue commands, are always ignored.
|
*/
'only_paths' => [
// 'api/*'
],
'ignore_paths' => [
'nova-api*',
],
'ignore_commands' => [
//
],
/*
|--------------------------------------------------------------------------
| Telescope Watchers
|--------------------------------------------------------------------------
|
| The following array lists the "watchers" that will be registered with
| Telescope. The watchers gather the application's profile data when
| a request or task is executed. Feel free to customize this list.
|
*/
'watchers' => [
Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true),
Watchers\CacheWatcher::class => [
'enabled' => env('TELESCOPE_CACHE_WATCHER', true),
'hidden' => [],
],
Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true),
Watchers\CommandWatcher::class => [
'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
'ignore' => [],
],
Watchers\DumpWatcher::class => [
'enabled' => env('TELESCOPE_DUMP_WATCHER', true),
'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false),
],
Watchers\EventWatcher::class => [
'enabled' => env('TELESCOPE_EVENT_WATCHER', true),
'ignore' => [],
],
Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true),
Watchers\GateWatcher::class => [
'enabled' => env('TELESCOPE_GATE_WATCHER', true),
'ignore_abilities' => [],
'ignore_packages' => true,
'ignore_paths' => [],
],
Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true),
Watchers\LogWatcher::class => [
'enabled' => env('TELESCOPE_LOG_WATCHER', true),
'level' => 'error',
],
Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true),
Watchers\ModelWatcher::class => [
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
'events' => ['eloquent.*'],
'hydrations' => true,
],
Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true),
Watchers\QueryWatcher::class => [
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
'ignore_packages' => true,
'ignore_paths' => [],
'slow' => 100,
],
Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true),
Watchers\RequestWatcher::class => [
'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
'ignore_http_methods' => [],
'ignore_status_codes' => [],
],
Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true),
Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true),
],
];

288
config/themes.php.example Normal file
View File

@@ -0,0 +1,288 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Theme Settings
|--------------------------------------------------------------------------
|
| Configuration for installation-level theming. Each installation can
| set a different theme via the TIMEBANK_THEME environment variable.
| Themes define color palettes, typography, and visual identity.
|
*/
'active' => env('TIMEBANK_THEME', 'timebank_cc'),
'themes' => [
'timebank_cc' => [
'name' => 'Timebank.cc',
'description' => 'Default gray, black and white theme',
'logos' => [
'svg_inline' => 'logos.timebank_cc',
'email_logo' => 'app-images/timebank_cc_mail_logo.png',
],
'colors' => [
'primary' => [
50 => '#F6F8F9',
100 => '#EBEDEE',
200 => '#DCDEDF',
300 => '#CDCFD0',
400 => '#B8BABB',
500 => '#999B9C',
600 => '#6E6F70',
700 => '#434343',
800 => '#242424',
900 => '#1A1A1A',
],
'secondary' => '#EBEDEE', // gray-100
'accent' => '#434343', // primary-700
'brand' => '#000000', // pure black for strong brand elements
'background' => '#FFFFFF',
'border' => '#CDCFD0',
'surface' => '#F9FAFB', // gray-50 (original)
'danger-dark' => '#b91c1c', // red-700
'danger' => '#ef4444', // red-500
'danger-light' => '#fecaca', // red- 200
'reaction' => '#eab308', // yellow-500 for active reaction state
'reaction-hover' => '#ca8a04', // yellow-600 for hover state
'text' => [
'primary' => '#111827', // gray-900
'secondary' => '#6E6F70', // gray-600
'light' => '#9CA3AF', // gray-400
'surface' => '#F9FAFB', // gray-50 (original)
'background' => '#FFFFFF',
],
'logo' => '#000000',
],
'typography' => [
'font_family_body' => 'Roboto, sans-serif',
'font_family_heading' => 'Oswald, sans-serif',
'font_size_base' => '16px',
'line_height_base' => '1.7',
'heading_transform' => 'uppercase',
'heading_sizes' => [
'h1' => '30px',
'h2' => '24px',
'h3' => '20px',
'h4' => '16px',
],
'links' => [
'text_decoration' => 'underline',
'text_decoration_hover' => 'underline',
'font_weight' => '600', // semibold
],
],
],
'uuro' => [
'name' => 'Uuro',
'description' => 'Black, white and cyan theme inspired by buuro.net',
'logos' => [
'svg_inline' => 'logos.uuro',
'email_logo' => 'app-images/uuro_mail_logo.png',
],
'colors' => [
'primary' => [
50 => "#F2F3FA",
100 => "#E3E4F5",
200 => "#C7CAEB",
300 => "#ABB0E1",
400 => "#9097D7",
500 => "#7880CE",
600 => "#5C68C1",
700 => "#4552A8",
800 => "#343E83",
900 => "#1A2049",
950 => "#0E1331"
],
'secondary' => '#EBEDEE', // light gray
'accent' => '#F78DA7', // pale pink
'success' => '#00D084', // vivid green cyan
'warning' => '#FF6900', // luminous vivid orange
'danger-dark' => '#9C1F1F', // dark red
'danger' => '#CF2E2E', // vivid red
'danger-light' => '#F8B4B4', // light red
'info' => '#0693E3', // vivid cyan blue
'brand' => '#1A2049', // bank's main background color (should be dark for readability)
'background' => '#FFFFFF',
'border' => '#ABB8C3',
'surface' => '#F8FAFC',
'reaction' => '#F78DA7', // pale pink for active reaction state
'reaction-hover' => '#E76B91', // darker pink for hover state
'text' => [
'primary' => '#000000',
'secondary' => '#475569',
'light' => '#ABB8C3',
'surface' => '#F8FAFC',
'background' => '#FFFFFF',
],
'logo' => '#190236', // black for strong contrast
],
'typography' => [
'font_family_body' => 'system-ui, -apple-system, sans-serif',
'font_family_heading' => 'system-ui, -apple-system, sans-serif',
'font_size_base' => '16px',
'line_height_base' => '1.6',
'heading_transform' => 'none',
'font_sizes' => [
'small' => '13px',
'medium' => '20px',
'large' => '36px',
'x-large' => '42px',
],
'heading_sizes' => [
'h1' => '42px',
'h2' => '36px',
'h3' => '28px',
'h4' => '20px',
],
'links' => [
'text_decoration' => 'underline',
'text_decoration_hover' => 'underline',
'font_weight' => '600', // semibold
],
],
],
'vegetable' => [
'name' => 'Vegetable',
'description' => 'Green, natural theme inspired by lekkernassuh.org',
'logos' => [
'svg_inline' => 'logos.vegetable',
'email_logo' => 'app-images/vegetable_mail_logo.png',
],
'colors' => [
'primary' => [
50 => '#F0F9F4',
100 => '#DCFCE7',
200 => '#BBF7D0',
300 => '#93AF6E', // soft green
400 => '#558C76', // muted green
500 => '#397017', // main green
600 => '#16A34A',
700 => '#15803D',
800 => '#166534',
900 => '#14532D',
],
'secondary' => '#097236', // dark green
'accent' => '#E59112', // orange/yellow
'success' => '#16604F', // dark green text
'danger-dark' => '#991B1B', // dark red
'danger' => '#DC2626', // red
'danger-light' => '#FCA5A5', // light red
'brand' => '#14532D', // very dark green for brand elements
'background' => '#FFFFFF',
'border' => '#93AF6E',
'surface' => '#EDEDC7', // light yellow background
'surface_alt' => '#E2E2C7', // light beige
'reaction' => '#E59112', // orange/yellow for active reaction state
'reaction-hover' => '#C77A0E', // darker orange for hover state
'text' => [
'primary' => '#16604F', // dark green text
'secondary' => '#4C4C4C', // gray text
'light' => '#6B7280',
'surface' => '#EDEDC7',
'background' => '#FFFFFF',
],
'logo' => '#16604F', // dark green for logo consistency
],
'typography' => [
'font_family_body' => 'system-ui, Helvetica, Arial, sans-serif',
'font_family_heading' => 'system-ui, Helvetica, Arial, sans-serif',
'font_size_base' => '16px',
'line_height_base' => '1.8', // larger line height for readability
'line_height_heading' => '1.4',
'heading_transform' => 'none',
'heading_sizes' => [
'h1' => '23px',
'h2' => '36px',
'h3' => '18px',
'h4' => '17px',
],
'links' => [
'text_decoration' => 'underline',
'text_decoration_hover' => 'underline',
'font_weight' => '600', // semibold
],
],
],
'yellow' => [
'name' => 'Yellow',
'description' => 'High-contrast yellow and black theme inspired by yellowbrick.nl',
'logos' => [
'svg_inline' => 'logos.yellow',
'email_logo' => 'app-images/yellow_mail_logo.png',
],
'colors' => [
'primary' => [
50 => '#FFFBEB',
100 => '#FEF3C7',
200 => '#FDE68A',
300 => '#FCD34D',
400 => '#FBBF24',
500 => '#FDD61E', // primary yellow
600 => '#D97706',
700 => '#B45309',
800 => '#92400E',
900 => '#78350F',
],
'secondary' => '#000000',
'accent' => '#009FE3', // blue
'accent_dark' => '#001B2F', // dark blue
'danger-dark' => '#991B1B', // dark red
'danger' => '#DC2626', // red
'danger-light' => '#FCA5A5', // light red
'brand' => '#000000', // bank's main background color (should be dark for readability)
'neutral' => [
'dark' => '#2F2E2E', // dark gray
'light' => '#EFEFEF', // light gray
'medium' => '#5D5B5B', // medium gray
],
'background' => '#FFFFFF',
'border' => '#FCD34D',
'surface' => '#EFEFEF', // light gray
'surface_dark' => '#000000',
'reaction' => '#FDD61E', // primary yellow for active reaction state
'reaction-hover' => '#FBBF24', // darker yellow for hover state
'text' => [
'primary' => '#000000',
'secondary' => '#2F2E2E', // dark gray
'light' => '#5D5B5B', // medium gray
'inverse' => '#FFFFFF',
'surface' => '#EFEFEF',
'background' => '#FFFFFF',
],
'logo' => '#000000', // black for strong contrast
],
'typography' => [
'font_family_body' => 'Poppins, Nunito Sans, system-ui, sans-serif',
'font_family_heading' => 'Poppins, system-ui, sans-serif',
'font_family_quote' => 'Georgia, serif',
'font_size_base' => '16px',
'line_height_base' => '1.6',
'heading_transform' => 'none',
'font_weights' => [
'regular' => '400',
'medium' => '500',
'semibold' => '600',
'bold' => '700',
'extrabold' => '800',
],
'heading_sizes' => [
'h1' => '40px',
'h2' => '32px',
'h3' => '26px',
'h4' => '22px',
],
'links' => [
'text_decoration' => 'underline',
'text_decoration_hover' => 'underline',
'font_weight' => '600', // semibold
],
],
],
],
];

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

36
config/view.php Normal file
View File

@@ -0,0 +1,36 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| View Storage Paths
|--------------------------------------------------------------------------
|
| Most templating systems load templates from disk. Here you may specify
| an array of paths that should be checked for your views. Of course
| the usual Laravel view path has already been registered for you.
|
*/
'paths' => [
resource_path('views'),
],
/*
|--------------------------------------------------------------------------
| Compiled View Path
|--------------------------------------------------------------------------
|
| This option determines where all the compiled Blade templates will be
| stored for your application. Typically, this is within the storage
| directory. However, as usual, you are free to change this value.
|
*/
'compiled' => env(
'VIEW_COMPILED_PATH',
realpath(storage_path('framework/views'))
),
];

43
config/web-tinker.php Normal file
View File

@@ -0,0 +1,43 @@
<?php
return [
/*
* The web tinker page will be available on this path.
*/
'path' => '/test/tinker',
/*
* Possible values are 'auto', 'light' and 'dark'.
*/
'theme' => 'auto',
/*
* By default this package will only run in local development.
* Do not change this, unless you know what you are doing.
*/
'enabled' => in_array(env('APP_ENV'), ['local', 'development', 'test']),
/*
* This class can modify the output returned by Tinker. You can replace this with
* any class that implements \Spatie\WebTinker\OutputModifiers\OutputModifier.
*/
'output_modifier' => \Spatie\WebTinker\OutputModifiers\PrefixDateTime::class,
/*
* These middleware will be assigned to every WebTinker route, giving you the chance
* to add your own middlewares to this list or change any of the existing middleware.
*/
'middleware' => [
Illuminate\Cookie\Middleware\EncryptCookies::class,
Illuminate\Session\Middleware\StartSession::class,
Spatie\WebTinker\Http\Middleware\Authorize::class,
],
/*
* If you want to fine-tune PsySH configuration specify
* configuration file name, relative to the root of your
* application directory.
*/
'config_file' => env('PSYSH_CONFIG', null),
];

177
config/wirechat.php Normal file
View File

@@ -0,0 +1,177 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Use UUIDs for Conversations
|--------------------------------------------------------------------------
|
| Determines the primary key type for the conversations table and related
| relationships. When enabled, UUIDs (version 7 if supported, otherwise
| version 4) will be used during initial migrations.
|
| ⚠️ This setting is intended for **new applications only** and does not
| affect how new conversations are created at runtime. It controls whether
| migrations generate UUID-based keys or unsigned big integers.
|
*/
'uuids' => false,
/*
|--------------------------------------------------------------------------
| Table Prefix
|--------------------------------------------------------------------------
|
| This value will be prefixed to all Wirechat-related database tables.
| Useful if you're sharing a database with other apps or packages.
|
*/
'table_prefix' => 'wirechat_',
/*
|--------------------------------------------------------------------------
| User Model
|--------------------------------------------------------------------------
|
| Specify the fully qualified class name of the Default model used for user search
| within Wirechat. This is used when searching for users (e.g., to
| start a new conversation)
|
*/
'user_model' => \App\Models\User::class,
/*
|--------------------------------------------------------------------------
| Broadcasting
|--------------------------------------------------------------------------
|
| Configure the queues used for broadcasting messages and notifications.
| 'messages_queue' is used for real-time chat events.
| 'notifications_queue' handles alert or notification broadcasts.
|
*/
'broadcasting' => [
'messages_queue' => 'messages',
'notifications_queue' => 'default',
],
/*
|--------------------------------------------------------------------------
| Theme Color
|--------------------------------------------------------------------------
|
| Define the primary UI color used in the chat interface.
| This will be used to highlight buttons and elements.
|
*/
'color' => '#6b7280',
/*
|--------------------------------------------------------------------------
| Home Route
|--------------------------------------------------------------------------
|
| The route where users are redirected when they leave or close the chat UI.
| This can be any valid route or URL in your application.
|
*/
'home_route' => '/main-page',
/*
|--------------------------------------------------------------------------
| Routes Configuration
|--------------------------------------------------------------------------
|
| Customize the URL prefix, middleware stack, and guards for all Wirechat
| routes. This gives you control over route access and grouping.
|
*/
'routes' => [
'prefix' => 'chats',
'middleware' => ['auth.any:admin,bank,organization,web'],
'guards' => ['admin', 'bank', 'organization', 'web'],
'register_routes' => false, // Customization: set to false, to disable vendor routes. Localized Routes are defined in routes/web.php
],
/*
|--------------------------------------------------------------------------
| Layout View
|--------------------------------------------------------------------------
|
| This is the layout that will be used when rendering Wirechat components
| via built-in routes like /chats or /chats/{id}. The $slot will contain
| the dynamic chat content.
|
*/
'layout' => 'wirechat::layouts.app',
/*
|--------------------------------------------------------------------------
| Feature Toggles
|--------------------------------------------------------------------------
|
| Enable or disable specific frontend features of Wirechat.
|
*/
'show_new_chat_modal_button' => true,
'show_new_group_modal_button' => true,
'allow_chats_search' => true,
'allow_media_attachments' => true,
'allow_file_attachments' => true,
/*
|--------------------------------------------------------------------------
| Notifications
|--------------------------------------------------------------------------
|
| Enable and configure notifications for incoming messages or events.
| 'main_sw_script' should point to your service worker JS file.
|
*/
'notifications' => [
'enabled' => true,
'main_sw_script' => 'sw.js', // Relative to public path
],
/*
|--------------------------------------------------------------------------
| User Searchable Fields
|--------------------------------------------------------------------------
|
| Define which columns to search when users are looking for other users
| to chat with. These fields should exist on your User model.
|
*/
'user_searchable_fields' => ['name', 'full_name'],
/*
|--------------------------------------------------------------------------
| Attachments
|--------------------------------------------------------------------------
|
| Configure media and file uploads within conversations. Control disk usage,
| visibility, allowed MIME types, and maximum upload sizes.
|
| These settings are referenced from the platform-specific timebank config.
| Customize in config/timebank-{platform}.php under 'wirechat.attachments'
|
*/
'attachments' => [
'storage_folder' => timebank_config('wirechat.attachments.storage_folder', 'attachments'),
'storage_disk' => timebank_config('wirechat.attachments.storage_disk', 'public'),
'disk_visibility' => timebank_config('wirechat.attachments.disk_visibility', 'public'),
'max_uploads' => timebank_config('wirechat.attachments.max_uploads', 10),
// Media Upload Settings
'media_mimes' => timebank_config('wirechat.attachments.media_mimes', ['png', 'jpg', 'jpeg', 'gif']),
'media_max_upload_size' => timebank_config('wirechat.attachments.media_max_upload_size', 12288),
// File Upload Settings
'file_mimes' => timebank_config('wirechat.attachments.file_mimes', ['zip', 'rar', 'txt', 'pdf']),
'file_max_upload_size' => timebank_config('wirechat.attachments.file_max_upload_size', 12288),
],
];

View File

@@ -0,0 +1,203 @@
<?php
use WireUi\View\Components;
return [
/*
|--------------------------------------------------------------------------
| Icons
|--------------------------------------------------------------------------
|
| The icons config will be used in icon component as default
| https://heroicons.com
|
*/
'icons' => [
'style' => env('WIREUI_ICONS_STYLE', 'outline'),
],
/*
|--------------------------------------------------------------------------
| Modal
|--------------------------------------------------------------------------
|
| The default modal preferences
|
*/
'modal' => [
'zIndex' => env('WIREUI_MODAL_Z_INDEX', 'z-100'),
'maxWidth' => env('WIREUI_MODAL_MAX_WIDTH', '2xl'),
'spacing' => env('WIREUI_MODAL_SPACING', 'p-4'),
'align' => env('WIREUI_MODAL_ALIGN', 'start'),
'blur' => env('WIREUI_MODAL_BLUR', false),
],
/*
|--------------------------------------------------------------------------
| Card
|--------------------------------------------------------------------------
|
| The default card preferences
|
*/
'card' => [
'padding' => env('WIREUI_CARD_PADDING', 'px-2 py-5 md:px-4'),
'shadow' => env('WIREUI_CARD_SHADOW', 'shadow-md'),
'rounded' => env('WIREUI_CARD_ROUNDED', 'rounded-lg'),
'color' => env('WIREUI_CARD_COLOR', 'bg-white dark:bg-secondary-800'),
],
/*
|--------------------------------------------------------------------------
| Components
|--------------------------------------------------------------------------
|
| List with WireUI components.
| Change the alias to call the component with a different name.
| Extend the component and replace your changes in this file.
| Remove the component from this file if you don't want to use.
|
*/
'components' => [
'avatar' => [
'class' => Components\Avatar::class,
'alias' => 'avatar',
],
'icon' => [
'class' => Components\Icon::class,
'alias' => 'icon',
],
'icon.spinner' => [
'class' => Components\Icons\Spinner::class,
'alias' => 'icon.spinner',
],
'color-picker' => [
'class' => Components\ColorPicker::class,
'alias' => 'color-picker',
],
'input' => [
'class' => Components\Input::class,
'alias' => 'input',
],
'textarea' => [
'class' => Components\Textarea::class,
'alias' => 'textarea',
],
'label' => [
'class' => Components\Label::class,
'alias' => 'label',
],
'error' => [
'class' => Components\Error::class,
'alias' => 'error',
],
'errors' => [
'class' => Components\Errors::class,
'alias' => 'errors',
],
'inputs.maskable' => [
'class' => Components\Inputs\MaskableInput::class,
'alias' => 'inputs.maskable',
],
'inputs.phone' => [
'class' => Components\Inputs\PhoneInput::class,
'alias' => 'inputs.phone',
],
'inputs.currency' => [
'class' => Components\Inputs\CurrencyInput::class,
'alias' => 'inputs.currency',
],
'inputs.number' => [
'class' => Components\Inputs\NumberInput::class,
'alias' => 'inputs.number',
],
'inputs.password' => [
'class' => Components\Inputs\PasswordInput::class,
'alias' => 'inputs.password',
],
'badge' => [
'class' => Components\Badge::class,
'alias' => 'badge',
],
'badge.circle' => [
'class' => Components\CircleBadge::class,
'alias' => 'badge.circle',
],
'button' => [
'class' => Components\Button::class,
'alias' => 'button',
],
'button.circle' => [
'class' => Components\CircleButton::class,
'alias' => 'button.circle',
],
'dropdown' => [
'class' => Components\Dropdown::class,
'alias' => 'dropdown',
],
'dropdown.item' => [
'class' => Components\Dropdown\DropdownItem::class,
'alias' => 'dropdown.item',
],
'dropdown.header' => [
'class' => Components\Dropdown\DropdownHeader::class,
'alias' => 'dropdown.header',
],
'notifications' => [
'class' => Components\Notifications::class,
'alias' => 'notifications',
],
'datetime-picker' => [
'class' => Components\DatetimePicker::class,
'alias' => 'datetime-picker',
],
'time-picker' => [
'class' => Components\TimePicker::class,
'alias' => 'time-picker',
],
'card' => [
'class' => Components\Card::class,
'alias' => 'card',
],
'native-select' => [
'class' => Components\NativeSelect::class,
'alias' => 'native-select',
],
'select' => [
'class' => Components\Select::class,
'alias' => 'select',
],
'select.option' => [
'class' => Components\Select\Option::class,
'alias' => 'select.option',
],
'select.user-option' => [
'class' => Components\Select\UserOption::class,
'alias' => 'select.user-option',
],
'toggle' => [
'class' => Components\Toggle::class,
'alias' => 'toggle',
],
'checkbox' => [
'class' => Components\Checkbox::class,
'alias' => 'checkbox',
],
'radio' => [
'class' => Components\Radio::class,
'alias' => 'radio',
],
'modal' => [
'class' => Components\Modal::class,
'alias' => 'modal',
],
'modal.card' => [
'class' => Components\ModalCard::class,
'alias' => 'modal.card',
],
'dialog' => [
'class' => Components\Dialog::class,
'alias' => 'dialog',
],
],
];

126
config/wireui.php Normal file
View File

@@ -0,0 +1,126 @@
<?php
use WireUi\Components;
use WireUi\Enum\Packs;
use WireUi\WireUiConfig as Config;
return [
/*
|--------------------------------------------------------------------------
| Prefix
|--------------------------------------------------------------------------
|
| This option controls the prefix for WireUI components. Examples:
|
| 'wireui-' => 'x-wireui-button'
| 'wireui:' => 'x-wireui:button'
|
*/
'prefix' => null,
/*
|--------------------------------------------------------------------------
| Global Styles
|--------------------------------------------------------------------------
|
| This option controls the global styles for WireUI components.
|
*/
'style' => [
'shadow' => Packs\Shadow::BASE,
'rounded' => Packs\Rounded::MD,
'color' => Packs\Color::PRIMARY,
],
/*
|--------------------------------------------------------------------------
| Default Configuration
|--------------------------------------------------------------------------
|
| This option controls the default configuration for WireUI components.
|
*/
'alert' => Config::alert(),
'avatar' => Config::avatar(),
'badge' => Config::badge(),
'mini-badge' => Config::miniBadge(),
'button' => Config::button(),
'mini-button' => Config::miniButton(),
'card' => Config::card(),
'checkbox' => Config::checkbox(),
'color-picker' => Config::wrapper(),
'datetime-picker' => Config::dateTimePicker(),
'dialog' => Config::dialog(),
'dropdown' => Config::dropdown(),
'icon' => Config::icon(),
'input' => Config::wrapper(),
'currency' => Config::wrapper(),
'maskable' => Config::wrapper(),
'number' => Config::wrapper(),
'password' => Config::wrapper(),
'phone' => Config::wrapper(),
'link' => Config::link(),
'modal' => Config::modal(),
'modal-card' => Config::modal(),
'native-select' => Config::wrapper(),
'notifications' => Config::notifications(),
'radio' => Config::radio(),
'select' => Config::wrapper(),
'textarea' => Config::wrapper(),
'time-picker' => Config::timePicker(),
'time-selector' => Config::timeSelector(),
'toggle' => Config::toggle(),
/*
|--------------------------------------------------------------------------
| WireUI Components
|--------------------------------------------------------------------------
|
| Change the alias to call the component with a different name.
| Extend the component and replace your changes in this file.
|
*/
'components' => Config::defaultComponents([
// 'button' => [
// 'alias' => 'new-button',
// ],
// 'mini-button' => [
// 'class' => Components\Button\Mini::class,
// 'alias' => 'new-mini-button',
// ],
]),
];