diff --git a/.env.example b/.env.example index 8acf7b0..39fe963 100644 --- a/.env.example +++ b/.env.example @@ -47,13 +47,13 @@ REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 -MAIL_MAILER=log -MAIL_SCHEME=null +MAIL_MAILER=smtp MAIL_HOST=127.0.0.1 -MAIL_PORT=2525 +MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null -MAIL_FROM_ADDRESS="hello@example.com" +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="dev@patchbook.test" MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= diff --git a/app/Models/Setting.php b/app/Models/Setting.php new file mode 100644 index 0000000..472b02c --- /dev/null +++ b/app/Models/Setting.php @@ -0,0 +1,20 @@ +belongsTo('App\Models\User'); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 749c7b7..a7098c9 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -4,6 +4,8 @@ namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; @@ -45,4 +47,18 @@ class User extends Authenticatable 'password' => 'hashed', ]; } + + public function crews(): BelongsToMany + { + return $this->belongsToMany( + Crew::class, + 'crew_members', + 'user_id', + 'crew_id' + )->withTimestamps(); + } + public function settings(): HasMany + { + return $this->hasMany(Setting::class); + } } diff --git a/composer.json b/composer.json index 8812afa..3e6c012 100644 --- a/composer.json +++ b/composer.json @@ -12,8 +12,10 @@ "php": "^8.2", "blade-ui-kit/blade-icons": "^1.8", "brunocfalcao/blade-feather-icons": "^6.0", + "codeat3/blade-phosphor-icons": "^2.3", "codeat3/blade-solar-icons": "^1.3", "davidhsianturi/blade-bootstrap-icons": "^2.1", + "devrabiul/laravel-toaster-magic": "^2.0", "laravel/fortify": "^1.34", "laravel/framework": "^12.0", "laravel/tinker": "^2.10.1", diff --git a/composer.lock b/composer.lock index 2dee73d..0a92d05 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "12ebee837f2c603afb84fe95d6258bf2", + "content-hash": "e8ac2a3d2d0647f711ada077e6de914d", "packages": [ { "name": "bacon/bacon-qr-code", @@ -333,6 +333,77 @@ ], "time": "2024-02-09T16:56:22+00:00" }, + { + "name": "codeat3/blade-phosphor-icons", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/codeat3/blade-phosphor-icons.git", + "reference": "2812a27ec642359344429d344c7f7bbdfad489ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/codeat3/blade-phosphor-icons/zipball/2812a27ec642359344429d344c7f7bbdfad489ce", + "reference": "2812a27ec642359344429d344c7f7bbdfad489ce", + "shasum": "" + }, + "require": { + "blade-ui-kit/blade-icons": "^1.1", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "codeat3/blade-icon-generation-helpers": "^0.10", + "codeat3/phpcs-styles": "^1.0", + "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0|^10.0", + "phpunit/phpunit": "^9.0|^10.5|^11.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Codeat3\\BladePhosphorIcons\\BladePhosphorIconsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Codeat3\\BladePhosphorIcons\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Swapnil Sarwe", + "homepage": "https://swapnilsarwe.com" + }, + { + "name": "Dries Vints", + "homepage": "https://driesvints.com" + } + ], + "description": "A package to easily make use of \"Phosphor Icons\" in your Laravel Blade views.", + "homepage": "https://github.com/codeat3/blade-phosphor-icons", + "keywords": [ + "blade", + "laravel", + "phosphor-icons" + ], + "support": { + "issues": "https://github.com/codeat3/blade-phosphor-icons/issues", + "source": "https://github.com/codeat3/blade-phosphor-icons/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/swapnilsarwe", + "type": "github" + } + ], + "time": "2025-02-25T06:29:09+00:00" + }, { "name": "codeat3/blade-solar-icons", "version": "1.3.1", @@ -517,6 +588,69 @@ }, "time": "2025-06-18T12:39:09+00:00" }, + { + "name": "devrabiul/laravel-toaster-magic", + "version": "v2.0", + "source": { + "type": "git", + "url": "https://github.com/devrabiul/laravel-toaster-magic.git", + "reference": "6255bdbf6e8f9331e51e72af52c1a158dac86e71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/devrabiul/laravel-toaster-magic/zipball/6255bdbf6e8f9331e51e72af52c1a158dac86e71", + "reference": "6255bdbf6e8f9331e51e72af52c1a158dac86e71", + "shasum": "" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "ToastMagic": "Devrabiul\\ToastMagic\\Facades\\ToastMagic" + }, + "providers": [ + "Devrabiul\\ToastMagic\\ToastMagicServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Devrabiul\\ToastMagic\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Muhammad Rabiul", + "email": "devrabiul@gmail.com", + "homepage": "https://rixetbd.com", + "role": "Software Engineer" + } + ], + "description": "Laravel Toaster Magic is a lightweight, flexible toast library for Laravel projects, with no jQuery, Bootstrap, or Tailwind dependency.", + "homepage": "https://github.com/devrabiul/laravel-toaster-magic", + "keywords": [ + "dynamic-notifications", + "flash-notifications", + "laravel", + "laravel-toastr", + "livewire", + "livewire-toaster", + "magic", + "notifications", + "php", + "toaster", + "toastr" + ], + "support": { + "issues": "https://github.com/devrabiul/laravel-toaster-magic/issues", + "source": "https://github.com/devrabiul/laravel-toaster-magic/tree/v2.0" + }, + "time": "2026-01-19T07:31:44+00:00" + }, { "name": "dflydev/dot-access-data", "version": "v3.0.3", diff --git a/config/laravel-toaster-magic.php b/config/laravel-toaster-magic.php new file mode 100644 index 0000000..fa9be77 --- /dev/null +++ b/config/laravel-toaster-magic.php @@ -0,0 +1,16 @@ + [ + "closeButton" => true, + "positionClass" => "toast-top-end", + "preventDuplicates" => false, + "showDuration" => "300", + "timeOut" => "5000", + "theme" => "default", // Available themes: default, material, ios, glassmorphism, neon, minimal, neumorphism + "gradient_enable" => false, // Available for: default, material, ios, glassmorphism, neon themes + "color_mode" => false // Color mode (true or false) + ], + 'livewire_enabled' => true, + 'livewire_version' => 'v4' +]; diff --git a/database/migrations/2026_02_21_201415_create_settings_table.php b/database/migrations/2026_02_21_201415_create_settings_table.php new file mode 100644 index 0000000..ae48a15 --- /dev/null +++ b/database/migrations/2026_02_21_201415_create_settings_table.php @@ -0,0 +1,30 @@ +id(); + $table->foreignid('user_id')->constrained()->cascadeOnDelete(); + $table->string('key'); + $table->string('value'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('settings'); + } +}; diff --git a/public/packages/devrabiul/laravel-toaster-magic/css/laravel-toaster-magic.css b/public/packages/devrabiul/laravel-toaster-magic/css/laravel-toaster-magic.css new file mode 100644 index 0000000..599a3b8 --- /dev/null +++ b/public/packages/devrabiul/laravel-toaster-magic/css/laravel-toaster-magic.css @@ -0,0 +1,981 @@ +:root { + --toast-magic-success: #04bb7b; + --toast-magic-success-rgb: 4, 187, 123; + --toast-magic-danger: #dc3545; + --toast-magic-danger-rgb: 220, 53, 69; + --toast-magic-info: #0dcaf0; + --toast-magic-info-rgb: 13, 202, 240; + --toast-magic-warning: #ffc107; + --toast-magic-warning-rgb: 255, 193, 7; + --toast-item-bg: #fff; + --toast-item-color: #000; + --toast-magic-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1); + --toast-close-btn-color: #000; + --toast-custom-btn-color: #000; + --toast-color-mode-progress-bg: 0, 0, 0; +} + +body[theme="dark"] { + --toast-item-bg: #000; + --toast-item-color: #FFF; + --toast-magic-box-shadow: -5px 0px 30px 0px rgba(255, 255, 255, 0.1); + --toast-close-btn-color: #FFF; + --toast-custom-btn-color: rgba(255, 255, 255, .8); + --toast-color-mode-progress-bg: 255, 255, 255; +} + +.toast-text-success { + color: var(--toast-magic-success); +} + +.toast-text-danger { + color: var(--toast-magic-danger); +} + +.toast-text-info { + color: var(--toast-magic-info); +} + +.toast-text-warning { + color: var(--toast-magic-warning); +} + +.position-relative { + position: relative; +} + +.toast-container { + --tm-toast-z-index: 99990; + --toast-progress-start: 0%; + --toast-progress-end: 100%; + --toast-item-before-opacity: 0.4; + --toast-item-after-opacity: 1; + position: fixed; + inset-block-start: 30px; + inset-inline-end: 20px; + display: flex; + flex-direction: column; + gap: 0.5rem; + z-index: var(--tm-toast-z-index, 1050); + width: max-content; + max-width: 100%; + pointer-events: none; +} + +.toast-container.toast-top-end { + inset-block-start: 30px; + inset-inline-end: 20px; + inset-block-end: auto; + inset-inline-start: auto; +} + +.toast-container.toast-top-start { + inset-block-start: 30px; + inset-inline-start: 20px; + inset-block-end: auto; + inset-inline-end: auto; + --toast-progress-start: 100%; + --toast-progress-end: 0%; + --toast-item-before-opacity: 1; + --toast-item-after-opacity: 0.4; +} + +.toast-container.toast-top-center { + inset-block-start: 30px; + inset-block-end: auto; + inset-inline-end: auto; + left: 50%; + transform: translateX(-50%); + align-items: center; +} + +.toast-container.toast-bottom-end { + inset-block-end: 30px; + inset-inline-end: 20px; + inset-block-start: auto; + inset-inline-start: auto; +} + +.toast-container.toast-bottom-start { + inset-block-end: 30px; + inset-inline-start: 20px; + inset-block-start: auto; + inset-inline-end: auto; + --toast-progress-start: 100%; + --toast-progress-end: 0%; + --toast-item-before-opacity: 1; + --toast-item-after-opacity: 0.4; +} + +.toast-container.toast-bottom-center { + inset-block-end: 30px; + inset-block-start: auto; + inset-inline-end: auto; + left: 50%; + transform: translateX(-50%); + align-items: center; +} + +.toast-container .toast-item { + --tm-toast-max-width: 370px; + position: relative; + overflow: hidden; + opacity: 0; + transform: translateX(110%); + transition: transform .5s ease-in-out, opacity 0.5s ease-in-out; + width: var(--tm-toast-max-width); + max-width: 100%; + font-size: 0.875rem; + color: var(--toast-item-color); + pointer-events: auto; + background-color: var(--toast-item-bg); + background-clip: padding-box; + border: 1px solid transparent; + box-shadow: var(--toast-magic-box-shadow); + border-radius: .5rem; + padding: 1.25rem !important; + align-items: center !important; +} + + +.toast-item.toast-success::before { + content: ""; + position: absolute; + inset-block-start: 0; + inset-inline-start: 0; + width: 100%; + height: 4px; + background-color: rgba(var(--toast-magic-success-rgb), var(--toast-item-before-opacity, 0.4)); + animation: toastProgressReverse 3s linear forwards; +} + +.toast-item.toast-success::after { + content: ""; + position: absolute; + inset-block-start: 0; + inset-inline-end: 0; + width: 0%; + height: 4px; + background-color: rgba(var(--toast-magic-success-rgb), var(--toast-item-after-opacity, 1)); + transform-origin: right; + animation: toastProgress 3s linear forwards; +} + +.toast-item.toast-danger::before { + content: ""; + position: absolute; + inset-block-start: 0; + inset-inline-start: 0; + width: 100%; + height: 4px; + background-color: rgba(var(--toast-magic-danger-rgb), var(--toast-item-before-opacity, 0.4)); + animation: toastProgressReverse 3s linear forwards; +} + +.toast-item.toast-danger::after { + content: ""; + position: absolute; + inset-block-start: 0; + inset-inline-end: 0; + width: 0%; + height: 4px; + background-color: rgba(var(--toast-magic-danger-rgb), var(--toast-item-after-opacity, 1)); + transform-origin: right; + animation: toastProgress 3s linear forwards; +} + +.toast-item.toast-warning::before { + content: ""; + position: absolute; + inset-block-start: 0; + inset-inline-start: 0; + width: 100%; + height: 4px; + background-color: rgba(var(--toast-magic-warning-rgb), var(--toast-item-before-opacity, 0.4)); + animation: toastProgressReverse 3s linear forwards; +} + +.toast-item.toast-warning::after { + content: ""; + position: absolute; + inset-block-start: 0; + inset-inline-end: 0; + width: 0%; + height: 4px; + background-color: rgba(var(--toast-magic-warning-rgb), var(--toast-item-after-opacity, 1)); + transform-origin: right; + animation: toastProgress 3s linear forwards; +} + +.toast-item.toast-info::before { + content: ""; + position: absolute; + inset-block-start: 0; + inset-inline-start: 0; + width: 100%; + height: 4px; + background-color: rgba(var(--toast-magic-info-rgb), var(--toast-item-before-opacity, 0.4)); + animation: toastProgressReverse 3s linear forwards; +} + +.toast-item.toast-info::after { + content: ""; + position: absolute; + inset-block-start: 0; + inset-inline-end: 0; + width: 0%; + height: 4px; + background-color: rgba(var(--toast-magic-info-rgb), var(--toast-item-after-opacity, 1)); + transform-origin: right; + animation: toastProgress 3s linear forwards; +} + +.toast-container.toast-top-start .toast-item, +.toast-container.toast-bottom-start .toast-item { + transform: translateX(-110%); +} + +.toast-container.toast-top-center .toast-item { + transform: translateY(-110%); +} + +.toast-container.toast-bottom-center .toast-item { + transform: translateY(110%); +} + +.toast-container.theme-default.toast-gradient-enable .toast-item { + --toast-item-gradient-opacity: .1; +} + +.toast-container.theme-default.toast-gradient-enable .toast-item.toast-success { + background-image: linear-gradient(to bottom, rgba(var(--toast-magic-success-rgb), var(--toast-item-gradient-opacity, .1)), #fff); +} + +.toast-container.theme-default.toast-gradient-enable .toast-item.toast-info { + background-image: linear-gradient(to bottom, rgba(var(--toast-magic-info-rgb), var(--toast-item-gradient-opacity, .1)), #fff); +} + +.toast-container.theme-default.toast-gradient-enable .toast-item.toast-warning { + background-image: linear-gradient(to bottom, rgba(var(--toast-magic-warning-rgb), var(--toast-item-gradient-opacity, .1)), #fff); +} + +.toast-container.theme-default.toast-gradient-enable .toast-item.toast-danger { + background-image: linear-gradient(to bottom, rgba(var(--toast-magic-danger-rgb), var(--toast-item-gradient-opacity, .1)), #fff); +} + +.toast-container.theme-material .toast-item { + border-radius: 0; + --toast-magic-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1); +} + +.toast-container.theme-material.toast-gradient-enable .toast-item { + --toast-item-gradient-opacity: .1; +} + +.toast-container.theme-material.toast-gradient-enable .toast-item.toast-success { + background-image: linear-gradient(to bottom, rgba(var(--toast-magic-success-rgb), var(--toast-item-gradient-opacity, .1)), #fff); +} + +.toast-container.theme-material.toast-gradient-enable .toast-item.toast-info { + background-image: linear-gradient(to bottom, rgba(var(--toast-magic-info-rgb), var(--toast-item-gradient-opacity, .1)), #fff); +} + +.toast-container.theme-material.toast-gradient-enable .toast-item.toast-warning { + background-image: linear-gradient(to bottom, rgba(var(--toast-magic-warning-rgb), var(--toast-item-gradient-opacity, .1)), #fff); +} + +.toast-container.theme-material.toast-gradient-enable .toast-item.toast-danger { + background-image: linear-gradient(to bottom, rgba(var(--toast-magic-danger-rgb), var(--toast-item-gradient-opacity, .1)), #fff); +} + +.toast-container.theme-material .toast-custom-btn { + border-radius: 0; +} + +.toast-container.theme-ios { + gap: 10px; +} + +.toast-container.theme-ios .toast-item { + background: rgba(255, 255, 255, 0.75); + backdrop-filter: blur(50px) saturate(180%); + -webkit-backdrop-filter: blur(50px) saturate(180%); + border: 1px solid rgba(255, 255, 255, 0.4); + box-shadow: 0 4px 24px -1px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.02); + border-radius: 22px; + padding: 14px 18px !important; + color: #1d1d1f; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +} + +body[theme="dark"] .toast-container.theme-ios .toast-item { + background: rgba(28, 28, 30, 0.75); + border: 1px solid rgba(255, 255, 255, 0.1); + color: #f5f5f7; + box-shadow: 0 10px 40px -10px rgba(0, 0, 0, 0.5); +} + +.toast-container.theme-ios .toast-item.show { + transform: translateX(0) scale(1); + animation: iosBounce .4s cubic-bezier(0.175, 0.885, 0.32, 1.275); +} + +.toast-container.theme-ios .toast-item:active { + transform: scale(0.98); +} + +.toast-container.theme-ios .toast-item.toast-success, +.toast-container.theme-ios .toast-item.toast-danger, +.toast-container.theme-ios .toast-item.toast-warning, +.toast-container.theme-ios .toast-item.toast-info { + border-left: none; +} + +.toast-container.theme-ios .toast-item::before, +.toast-container.theme-ios .toast-item::after { + display: none; +} + +.toast-container.theme-ios .toast-item-content-center { + gap: 12px !important; + align-items: center; +} + +.toast-container.theme-ios .toast-body-icon-container { + width: 38px; + height: 38px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + font-size: 20px; + flex-shrink: 0; +} + +.toast-container.theme-ios .toast-body-icon-container { + width: 38px; + height: 38px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + font-size: 20px; + flex-shrink: 0; +} + +body[theme="dark"] .toast-container.theme-ios .toast-body-icon-container { + background-color: rgba(235, 235, 245, 0.1); +} + +.toast-container.theme-ios .toast-item.toast-success .toast-body-icon-container { + color: var(--toast-magic-success); +} + +.toast-container.theme-ios .toast-item.toast-danger .toast-body-icon-container { + color: var(--toast-magic-danger); +} + +.toast-container.theme-ios .toast-item.toast-warning .toast-body-icon-container { + color: var(--toast-magic-warning); +} + +.toast-container.theme-ios .toast-item.toast-info .toast-body-icon-container { + color: var(--toast-magic-info); +} + +.toast-container.theme-ios .toast-body h4 { + font-size: 15px; + font-weight: 600; + margin-bottom: 2px; + letter-spacing: -0.01em; +} + +.toast-container.theme-ios .toast-body p { + font-size: 13px; + color: inherit; + opacity: 0.8; + line-height: 1.4; +} + +.toast-container.theme-ios .toast-custom-btn { + border-radius: 16px; + font-weight: 600; + font-size: 13px; + padding: 6px 14px; + transition: all 0.2s ease; + background: rgba(120, 120, 128, 0.12); + color: inherit; + border: none; +} + +.toast-container.theme-ios .toast-custom-btn:hover { + background: rgba(120, 120, 128, 0.2); + transform: none; + box-shadow: none; +} + +.toast-container.theme-ios .toast-close-btn { + background: rgba(60, 60, 67, 0.1); + color: inherit; + width: 20px; + height: 20px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + opacity: 0.6; + font-size: 12px; +} + +body[theme="dark"] .toast-container.theme-ios .toast-close-btn { + background: rgba(235, 235, 245, 0.1); +} + +.toast-container.theme-ios .toast-close-btn:hover { + opacity: 1; + background: rgba(60, 60, 67, 0.2); +} + +@keyframes iosBounce { + 0% { + transform: scale(0.9); + opacity: 0; + } + + 50% { + transform: scale(1.02); + opacity: 1; + } + + 100% { + transform: scale(1); + opacity: 1; + } +} + +.toast-container.theme-glassmorphism .toast-item { + background: rgba(255, 255, 255, 0.08); + backdrop-filter: blur(50px) saturate(180%); + -webkit-backdrop-filter: blur(50px) saturate(180%); + border: 1.5px solid rgba(255, 255, 255, 0.18); + box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.1), inset 0 1px 1px 0 rgba(255, 255, 255, 0.3); + border-radius: 1rem; +} + +.toast-container.theme-glassmorphism .toast-item.toast-success { + background: linear-gradient(135deg, rgba(var(--toast-magic-success-rgb), 0.15), rgba(255, 255, 255, 0.05)); + border: 1.5px solid rgba(var(--toast-magic-success-rgb), 0.5); + box-shadow: 0 8px 32px 0 rgba(var(--toast-magic-success-rgb), 0.25), inset 0 1px 1px 0 rgba(255, 255, 255, 0.4), inset 0 0 20px 0 rgba(var(--toast-magic-success-rgb), 0.1); +} + +.toast-container.theme-glassmorphism .toast-item.toast-success::before { + background-color: rgba(var(--toast-magic-success-rgb), 0.4); +} + +.toast-container.theme-glassmorphism .toast-item.toast-success::after { + background-color: rgba(var(--toast-magic-success-rgb), 0.9); +} + +.toast-container.theme-glassmorphism .toast-item.toast-danger { + background: linear-gradient(135deg, rgba(var(--toast-magic-danger-rgb), 0.15), rgba(255, 255, 255, 0.05)); + border: 1.5px solid rgba(var(--toast-magic-danger-rgb), 0.5); + box-shadow: 0 8px 32px 0 rgba(var(--toast-magic-danger-rgb), 0.25), inset 0 1px 1px 0 rgba(255, 255, 255, 0.4), inset 0 0 20px 0 rgba(var(--toast-magic-danger-rgb), 0.1); +} + +.toast-container.theme-glassmorphism .toast-item.toast-danger::before { + background-color: rgba(var(--toast-magic-danger-rgb), 0.4); +} + +.toast-container.theme-glassmorphism .toast-item.toast-danger::after { + background-color: rgba(var(--toast-magic-danger-rgb), 0.9); +} + +.toast-container.theme-glassmorphism .toast-item.toast-warning { + background: linear-gradient(135deg, rgba(var(--toast-magic-warning-rgb), 0.15), rgba(255, 255, 255, 0.05)); + border: 1.5px solid rgba(var(--toast-magic-warning-rgb), 0.5); + box-shadow: 0 8px 32px 0 rgba(var(--toast-magic-warning-rgb), 0.25), inset 0 1px 1px 0 rgba(255, 255, 255, 0.4), inset 0 0 20px 0 rgba(var(--toast-magic-warning-rgb), 0.1); +} + +.toast-container.theme-glassmorphism .toast-item.toast-warning::before { + background-color: rgba(var(--toast-magic-warning-rgb), 0.4); +} + +.toast-container.theme-glassmorphism .toast-item.toast-warning::after { + background-color: rgba(var(--toast-magic-warning-rgb), 0.9); +} + +.toast-container.theme-glassmorphism .toast-item.toast-info { + background: linear-gradient(135deg, rgba(var(--toast-magic-info-rgb), 0.15), rgba(255, 255, 255, 0.05)); + border: 1.5px solid rgba(var(--toast-magic-info-rgb), 0.5); + box-shadow: 0 2px 5px 0 rgba(var(--toast-magic-info-rgb), 0.25), inset 0 1px 1px 0 rgba(255, 255, 255, 0.4), inset 0 0 20px 0 rgba(var(--toast-magic-info-rgb), 0.1); +} + +.toast-container.theme-glassmorphism .toast-item.toast-info::before { + background-color: rgba(var(--toast-magic-info-rgb), 0.4); +} + +.toast-container.theme-glassmorphism .toast-item.toast-info::after { + background-color: rgba(var(--toast-magic-info-rgb), 0.9); +} + +.toast-container.theme-glassmorphism.toast-gradient-enable .toast-item.toast-success { + background: linear-gradient(135deg, rgba(var(--toast-magic-success-rgb), 0.2), rgba(255, 255, 255, 0.1)); +} + +.toast-container.theme-glassmorphism.toast-gradient-enable .toast-item.toast-info { + background: linear-gradient(135deg, rgba(var(--toast-magic-info-rgb), 0.2), rgba(255, 255, 255, 0.1)); +} + +.toast-container.theme-glassmorphism.toast-gradient-enable .toast-item.toast-warning { + background: linear-gradient(135deg, rgba(var(--toast-magic-warning-rgb), 0.2), rgba(255, 255, 255, 0.1)); +} + +.toast-container.theme-glassmorphism.toast-gradient-enable .toast-item.toast-danger { + background: linear-gradient(135deg, rgba(var(--toast-magic-danger-rgb), 0.2), rgba(255, 255, 255, 0.1)); +} + +.toast-container.theme-glassmorphism .toast-custom-btn { + background: rgba(255, 255, 255, 0.2); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.3); + border-radius: 0.625rem; + box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.4); +} + +.toast-container.theme-glassmorphism .toast-custom-btn:hover { + background: rgba(255, 255, 255, 0.3); + box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.5), 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.toast-container.theme-neon { + gap: 12px; +} + +.toast-container.theme-neon .toast-item { + background: linear-gradient(135deg, #09090b 0%, #16161a 100%); + border-radius: 4px; + border: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 10px 30px -10px rgba(0, 0, 0, 0.5); + color: #e4e4e7; + position: relative; + overflow: visible; +} + +.toast-container.theme-neon .toast-item.toast-success { + border-color: var(--toast-magic-success); + box-shadow: 0 0 10px rgba(var(--toast-magic-success-rgb), 0.2), inset 0 0 20px rgba(var(--toast-magic-success-rgb), 0.05); +} + +.toast-container.theme-neon .toast-item.toast-danger { + border-color: var(--toast-magic-danger); + box-shadow: 0 0 10px rgba(var(--toast-magic-danger-rgb), 0.2), inset 0 0 20px rgba(var(--toast-magic-danger-rgb), 0.05); +} + +.toast-container.theme-neon .toast-item.toast-warning { + border-color: var(--toast-magic-warning); + box-shadow: 0 0 10px rgba(var(--toast-magic-warning-rgb), 0.2), inset 0 0 20px rgba(var(--toast-magic-warning-rgb), 0.05); +} + +.toast-container.theme-neon .toast-item.toast-info { + border-color: var(--toast-magic-info); + box-shadow: 0 0 10px rgba(var(--toast-magic-info-rgb), 0.2), inset 0 0 20px rgba(var(--toast-magic-info-rgb), 0.05); +} + +.toast-container.theme-neon.toast-gradient-enable .toast-item.toast-success { + background: radial-gradient(circle at top left, rgba(var(--toast-magic-success-rgb), 0.15), transparent 60%), linear-gradient(135deg, #09090b 0%, #121214 100%); +} + +.toast-container.theme-neon.toast-gradient-enable .toast-item.toast-info { + background: radial-gradient(circle at top left, rgba(var(--toast-magic-info-rgb), 0.15), transparent 60%), linear-gradient(135deg, #09090b 0%, #121214 100%); +} + +.toast-container.theme-neon.toast-gradient-enable .toast-item.toast-warning { + background: radial-gradient(circle at top left, rgba(var(--toast-magic-warning-rgb), 0.15), transparent 60%), linear-gradient(135deg, #09090b 0%, #121214 100%); +} + +.toast-container.theme-neon.toast-gradient-enable .toast-item.toast-danger { + background: radial-gradient(circle at top left, rgba(var(--toast-magic-danger-rgb), 0.15), transparent 60%), linear-gradient(135deg, #09090b 0%, #121214 100%); +} + +.toast-container.theme-neon .toast-body h4 { + font-size: 14px; + margin-bottom: 4px; +} + +.toast-container.theme-neon .toast-body p { + color: #a1a1aa; + font-size: 12px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + letter-spacing: 0.5px; +} + +.toast-container.theme-neon .toast-body-icon-container { + background: transparent; +} + +.toast-container.theme-neon .toast-item.toast-success .toast-body-icon-container { + color: var(--toast-magic-success); +} + +.toast-container.theme-neon .toast-item.toast-danger .toast-body-icon-container { + color: var(--toast-magic-danger); +} + +.toast-container.theme-neon .toast-item.toast-warning .toast-body-icon-container { + color: var(--toast-magic-warning); +} + +.toast-container.theme-neon .toast-item.toast-info .toast-body-icon-container { + color: var(--toast-magic-info); +} + +.toast-container.theme-neon .toast-custom-btn { + background: transparent; + border: 1px solid currentColor; + border-radius: 2px; + font-size: 11px; + padding: 6px 12px; + transition: all 0.2s ease; + box-shadow: 0 0 5px rgba(0, 0, 0, 0); +} + +.toast-container.theme-neon .toast-item.toast-success .toast-custom-btn { + color: var(--toast-magic-success); +} + +.toast-container.theme-neon .toast-item.toast-danger .toast-custom-btn { + color: var(--toast-magic-danger); +} + +.toast-container.theme-neon .toast-item.toast-warning .toast-custom-btn { + color: var(--toast-magic-warning); +} + +.toast-container.theme-neon .toast-item.toast-info .toast-custom-btn { + color: var(--toast-magic-info); +} + +.toast-container.theme-neon .toast-custom-btn:hover { + box-shadow: 0 0 15px currentColor; +} + +.toast-container.theme-neon .toast-close-btn { + color: #ffffff; + transition: color 0.2s; +} + +.toast-container.theme-neon .toast-close-btn:hover { + color: #fff; + text-shadow: 0 0 8px #fff; +} + +.toast-container.theme-neon .toast-item::before, +.toast-container.theme-neon .toast-item::after { + display: none; +} + +.toast-container.theme-minimal .toast-item { + border-radius: 0.375rem; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); + padding: 1rem !important; +} + +.toast-container.theme-minimal .toast-item.toast-success { + border-left: 4px solid var(--toast-magic-success); +} + +.toast-container.theme-minimal .toast-item.toast-danger { + border-left: 4px solid var(--toast-magic-danger); +} + +.toast-container.theme-minimal .toast-item.toast-warning { + border-left: 4px solid var(--toast-magic-warning); +} + +.toast-container.theme-minimal .toast-item.toast-info { + border-left: 4px solid var(--toast-magic-info); +} + +.toast-container.theme-minimal .toast-item::before, +.toast-container.theme-minimal .toast-item::after { + display: none; +} + +.toast-container.theme-minimal .toast-custom-btn { + border-radius: 0.25rem; + font-weight: 500; +} + +.toast-container.theme-neumorphism .toast-item { + background: #e0e5ec; + border-radius: 1rem; + border: none; +} + +.toast-container.theme-neumorphism .toast-item.toast-success::after { + background-color: var(--toast-magic-success); + box-shadow: 0 1px 2px rgba(var(--toast-magic-success-rgb), 0.1); +} + +.toast-container.theme-neumorphism .toast-item.toast-danger::after { + background-color: var(--toast-magic-danger); + box-shadow: 0 1px 2px rgba(var(--toast-magic-danger-rgb), 0.1); +} + +.toast-container.theme-neumorphism .toast-item.toast-warning::after { + background-color: var(--toast-magic-warning); + box-shadow: 0 1px 2px rgba(var(--toast-magic-warning-rgb), 0.1); +} + +.toast-container.theme-neumorphism .toast-item.toast-info::after { + background-color: var(--toast-magic-info); + box-shadow: 0 1px 2px rgba(var(--toast-magic-info-rgb), 0.1); +} + +.toast-container.theme-neumorphism .toast-custom-btn { + background: #e0e5ec; + border: 1px solid transparent; + border-radius: 0.5rem; + box-shadow: 4px 4px 8px rgba(163, 177, 198, 0.6), -4px -4px 8px rgba(255, 255, 255, 0.5); +} + +.toast-container.theme-neumorphism .toast-custom-btn:hover { + box-shadow: 2px 2px 4px rgba(163, 177, 198, 0.6), -2px -2px 4px rgba(255, 255, 255, 0.5); +} + +.toast-container.toast-color-true .toast-item.toast-success { + background-color: rgba(var(--toast-magic-success-rgb), var(--toast-item-after-opacity, 1)); +} + +.toast-container.toast-color-true .toast-item.toast-info { + background-color: rgba(var(--toast-magic-info-rgb), var(--toast-item-after-opacity, 1)); +} + +.toast-container.toast-color-true .toast-item.toast-warning { + background-color: rgba(var(--toast-magic-warning-rgb), var(--toast-item-after-opacity, 1)); +} + +.toast-container.toast-color-true .toast-item.toast-danger { + background-color: rgba(var(--toast-magic-danger-rgb), var(--toast-item-after-opacity, 1)); +} + +.toast-container.toast-color-true .toast-item.toast-success::before, +.toast-container.toast-color-true .toast-item.toast-info::before, +.toast-container.toast-color-true .toast-item.toast-warning::before, +.toast-container.toast-color-true .toast-item.toast-danger::before { + background-color: rgba(var(--toast-color-mode-progress-bg), var(--toast-item-before-opacity, 0.4)); +} + +.toast-container.toast-color-true .toast-item.toast-success::after, +.toast-container.toast-color-true .toast-item.toast-info::after, +.toast-container.toast-color-true .toast-item.toast-warning::after, +.toast-container.toast-color-true .toast-item.toast-danger::after { + background-color: rgba(var(--toast-color-mode-progress-bg), var(--toast-item-after-opacity, 1)); +} + +.toast-container.toast-color-true .toast-body-icon-container, +.toast-container.toast-color-true .toast-close-btn, +.toast-container.toast-color-true .toast-item { + --toast-item-color: #FFFFFF; + --toast-close-btn-color: #FFFFFF; + color: var(--toast-item-color); +} + +.toast-container.toast-color-true .toast-custom-btn { + background-color: #FFF; + color: #000; +} + +.toast-container.toast-color-true .toast-custom-btn:hover { + border: 1px solid rgba(var(--toast-color-mode-progress-bg), var(--toast-item-before-opacity, 0.4)); +} + +.toast-container.toast-color-true .toast-item-content-center .toast-body h4, +.toast-container.toast-color-true .toast-item-content-center .toast-body p { + letter-spacing: 1px; +} + +.toast-item-content-center { + display: flex; + align-items: start; + justify-content: space-between; + gap: .5rem !important; +} + +.toast-item-content-center .toast-body { + padding: 0; + word-wrap: break-word; + display: flex; + gap: .5rem !important; +} + +.toast-item-content-center .toast-body .toast-body-container { + display: flex; + flex-direction: column; + gap: .25rem; +} + +.toast-item-content-center .toast-body-icon-container { + inline-size: 25px; + block-size: 25px; + padding: 2px; + font-size: 18px; + border-radius: 0.3125rem; + line-height: 1; + display: flex; + justify-content: center; + align-items: center; +} + +.toast-item-content-center .toast-body-title { + display: flex; + justify-content: start; + align-items: center; + min-height: 22px; + line-height: 1; +} + +.toast-item-content-center .toast-body h4 { + font-size: 0.875rem; + font-weight: 500; + margin: 0; + line-height: 1.15rem; +} + +.toast-item-content-center .toast-body p { + font-size: 0.75rem; + font-weight: 400; + margin: 0; + padding: 0; + white-space: pre-line; +} + +.toast-item-content-center .toast-body-end { + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-around; + align-items: flex-end; + gap: .65rem; +} + +.toast-item-content-center .fi { + line-height: 1; +} + +.toast-close-btn { + background: transparent; + border: 0; + font-size: 1rem; + color: var(--toast-close-btn-color); + width: 1.25rem; + cursor: pointer; + z-index: 99999; + display: flex; + align-items: start; + opacity: .65; + transition: opacity .25s ease-in-out; + padding: 0; + margin: 0; +} + +.toast-close-btn:hover { + opacity: 1; +} + +.toast-container .toast-custom-btn { + --toast-custom-btn-bg-rgb: var(--toast-magic-success-rgb); + font-size: 0.75rem; + white-space: nowrap; + background-color: rgba(var(--toast-custom-btn-bg-rgb), 0.2); + color: var(--toast-custom-btn-color); + transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; + padding: 0.35rem 0.675rem; + max-width: 100px; + display: block; + overflow: hidden; + text-overflow: ellipsis; + text-decoration: none; + border-radius: .275rem; + font-weight: 600; + border: 1px solid transparent; +} + +.toast-container .toast-custom-btn:hover { + border: 1px solid rgba(var(--toast-custom-btn-bg-rgb), 1); +} + +.toast-container .toast-custom-btn.toast-btn-bg-success { + --toast-custom-btn-bg-rgb: var(--toast-magic-success-rgb); +} + +.toast-container .toast-custom-btn.toast-btn-bg-info { + --toast-custom-btn-bg-rgb: var(--toast-magic-info-rgb); +} + +.toast-container .toast-custom-btn.toast-btn-bg-danger { + --toast-custom-btn-bg-rgb: var(--toast-magic-danger-rgb); +} + +.toast-container .toast-custom-btn.toast-btn-bg-warning { + --toast-custom-btn-bg-rgb: var(--toast-magic-warning-rgb); +} + +[dir=rtl] .toast-item.hide { + transform: translateX(-100%); +} + +[dir=rtl] .toast-item .end-0 { + right: unset !important; + left: 0 !important; +} + +[dir="rtl"] .toast-container.toast-top-start .toast-item, +[dir="rtl"] .toast-container.toast-bottom-start .toast-item { + transform: translateX(110%); +} + +[dir="rtl"] .toast-container.toast-top-end .toast-item, +[dir="rtl"] .toast-container.toast-bottom-end .toast-item { + transform: translateX(-110%); +} + +@media (max-width: 575px) { + .toast-container { + inset-inline-end: 12px; + } +} + +@keyframes toastProgress { + from { + width: var(--toast-progress-start, 0%); + } + + to { + width: var(--toast-progress-end, 100%); + } +} + +.toast-container .toast-item.show, +[dir="rtl"] .toast-container .toast-item.show { + transform: translate(0, 0); + opacity: 1; +} + +.toast-container .toast-item.hide, +[dir="rtl"] .toast-container .toast-item.hide { + transform: translateX(100%); + opacity: 0; +} + +@keyframes toastProgressReverse { + from { + width: var(--toast-progress-end, 100%); + } + + to { + width: var(--toast-progress-start, 0%); + } +} \ No newline at end of file diff --git a/public/packages/devrabiul/laravel-toaster-magic/css/laravel-toaster-magic.min.css b/public/packages/devrabiul/laravel-toaster-magic/css/laravel-toaster-magic.min.css new file mode 100644 index 0000000..a845d05 --- /dev/null +++ b/public/packages/devrabiul/laravel-toaster-magic/css/laravel-toaster-magic.min.css @@ -0,0 +1 @@ +:root{--toast-magic-success:#04bb7b;--toast-magic-success-rgb:4,187,123;--toast-magic-danger:#dc3545;--toast-magic-danger-rgb:220,53,69;--toast-magic-info:#0dcaf0;--toast-magic-info-rgb:13,202,240;--toast-magic-warning:#ffc107;--toast-magic-warning-rgb:255,193,7;--toast-item-bg:#fff;--toast-item-color:#000;--toast-magic-box-shadow:0px 0px 10px 0px rgba(0,0,0,0.1);--toast-close-btn-color:#000;--toast-custom-btn-color:#000;--toast-color-mode-progress-bg:0,0,0} body[theme="dark"]{--toast-item-bg:#000;--toast-item-color:#FFF;--toast-magic-box-shadow:-5px 0px 30px 0px rgba(255,255,255,0.1);--toast-close-btn-color:#FFF;--toast-custom-btn-color:rgba(255,255,255,.8);--toast-color-mode-progress-bg:255,255,255} .toast-text-success{color:var(--toast-magic-success)} .toast-text-danger{color:var(--toast-magic-danger)} .toast-text-info{color:var(--toast-magic-info)} .toast-text-warning{color:var(--toast-magic-warning)} .position-relative{position:relative} .toast-container{--tm-toast-z-index:99990;--toast-progress-start:0%;--toast-progress-end:100%;--toast-item-before-opacity:0.4;--toast-item-after-opacity:1;position:fixed;inset-block-start:30px;inset-inline-end:20px;display:flex;flex-direction:column;gap:0.5rem;z-index:var(--tm-toast-z-index,1050);width:max-content;max-width:100%;pointer-events:none} .toast-container.toast-top-end{inset-block-start:30px;inset-inline-end:20px;inset-block-end:auto;inset-inline-start:auto} .toast-container.toast-top-start{inset-block-start:30px;inset-inline-start:20px;inset-block-end:auto;inset-inline-end:auto;--toast-progress-start:100%;--toast-progress-end:0%;--toast-item-before-opacity:1;--toast-item-after-opacity:0.4} .toast-container.toast-top-center{inset-block-start:30px;inset-block-end:auto;inset-inline-end:auto;left:50%;transform:translateX(-50%);align-items:center} .toast-container.toast-bottom-end{inset-block-end:30px;inset-inline-end:20px;inset-block-start:auto;inset-inline-start:auto} .toast-container.toast-bottom-start{inset-block-end:30px;inset-inline-start:20px;inset-block-start:auto;inset-inline-end:auto;--toast-progress-start:100%;--toast-progress-end:0%;--toast-item-before-opacity:1;--toast-item-after-opacity:0.4} .toast-container.toast-bottom-center{inset-block-end:30px;inset-block-start:auto;inset-inline-end:auto;left:50%;transform:translateX(-50%);align-items:center} .toast-container .toast-item{--tm-toast-max-width:370px;position:relative;overflow:hidden;opacity:0;transform:translateX(110%);transition:transform .5s ease-in-out,opacity 0.5s ease-in-out;width:var(--tm-toast-max-width);max-width:100%;font-size:0.875rem;color:var(--toast-item-color);pointer-events:auto;background-color:var(--toast-item-bg);background-clip:padding-box;border:1px solid transparent;box-shadow:var(--toast-magic-box-shadow);border-radius:.5rem;padding:1.25rem !important;align-items:center !important} .toast-item.toast-success::before{content:"";position:absolute;inset-block-start:0;inset-inline-start:0;width:100%;height:4px;background-color:rgba(var(--toast-magic-success-rgb),var(--toast-item-before-opacity,0.4));animation:toastProgressReverse 3s linear forwards} .toast-item.toast-success::after{content:"";position:absolute;inset-block-start:0;inset-inline-end:0;width:0%;height:4px;background-color:rgba(var(--toast-magic-success-rgb),var(--toast-item-after-opacity,1));transform-origin:right;animation:toastProgress 3s linear forwards} .toast-item.toast-danger::before{content:"";position:absolute;inset-block-start:0;inset-inline-start:0;width:100%;height:4px;background-color:rgba(var(--toast-magic-danger-rgb),var(--toast-item-before-opacity,0.4));animation:toastProgressReverse 3s linear forwards} .toast-item.toast-danger::after{content:"";position:absolute;inset-block-start:0;inset-inline-end:0;width:0%;height:4px;background-color:rgba(var(--toast-magic-danger-rgb),var(--toast-item-after-opacity,1));transform-origin:right;animation:toastProgress 3s linear forwards} .toast-item.toast-warning::before{content:"";position:absolute;inset-block-start:0;inset-inline-start:0;width:100%;height:4px;background-color:rgba(var(--toast-magic-warning-rgb),var(--toast-item-before-opacity,0.4));animation:toastProgressReverse 3s linear forwards} .toast-item.toast-warning::after{content:"";position:absolute;inset-block-start:0;inset-inline-end:0;width:0%;height:4px;background-color:rgba(var(--toast-magic-warning-rgb),var(--toast-item-after-opacity,1));transform-origin:right;animation:toastProgress 3s linear forwards} .toast-item.toast-info::before{content:"";position:absolute;inset-block-start:0;inset-inline-start:0;width:100%;height:4px;background-color:rgba(var(--toast-magic-info-rgb),var(--toast-item-before-opacity,0.4));animation:toastProgressReverse 3s linear forwards} .toast-item.toast-info::after{content:"";position:absolute;inset-block-start:0;inset-inline-end:0;width:0%;height:4px;background-color:rgba(var(--toast-magic-info-rgb),var(--toast-item-after-opacity,1));transform-origin:right;animation:toastProgress 3s linear forwards} .toast-container.toast-top-start .toast-item,.toast-container.toast-bottom-start .toast-item{transform:translateX(-110%)} .toast-container.toast-top-center .toast-item{transform:translateY(-110%)} .toast-container.toast-bottom-center .toast-item{transform:translateY(110%)} .toast-container.theme-default.toast-gradient-enable .toast-item{--toast-item-gradient-opacity:.1} .toast-container.theme-default.toast-gradient-enable .toast-item.toast-success{background-image:linear-gradient(to bottom,rgba(var(--toast-magic-success-rgb),var(--toast-item-gradient-opacity,.1)),#fff)} .toast-container.theme-default.toast-gradient-enable .toast-item.toast-info{background-image:linear-gradient(to bottom,rgba(var(--toast-magic-info-rgb),var(--toast-item-gradient-opacity,.1)),#fff)} .toast-container.theme-default.toast-gradient-enable .toast-item.toast-warning{background-image:linear-gradient(to bottom,rgba(var(--toast-magic-warning-rgb),var(--toast-item-gradient-opacity,.1)),#fff)} .toast-container.theme-default.toast-gradient-enable .toast-item.toast-danger{background-image:linear-gradient(to bottom,rgba(var(--toast-magic-danger-rgb),var(--toast-item-gradient-opacity,.1)),#fff)} .toast-container.theme-material .toast-item{border-radius:0;--toast-magic-box-shadow:0px 0px 10px 0px rgba(0,0,0,0.1)} .toast-container.theme-material.toast-gradient-enable .toast-item{--toast-item-gradient-opacity:.1} .toast-container.theme-material.toast-gradient-enable .toast-item.toast-success{background-image:linear-gradient(to bottom,rgba(var(--toast-magic-success-rgb),var(--toast-item-gradient-opacity,.1)),#fff)} .toast-container.theme-material.toast-gradient-enable .toast-item.toast-info{background-image:linear-gradient(to bottom,rgba(var(--toast-magic-info-rgb),var(--toast-item-gradient-opacity,.1)),#fff)} .toast-container.theme-material.toast-gradient-enable .toast-item.toast-warning{background-image:linear-gradient(to bottom,rgba(var(--toast-magic-warning-rgb),var(--toast-item-gradient-opacity,.1)),#fff)} .toast-container.theme-material.toast-gradient-enable .toast-item.toast-danger{background-image:linear-gradient(to bottom,rgba(var(--toast-magic-danger-rgb),var(--toast-item-gradient-opacity,.1)),#fff)} .toast-container.theme-material .toast-custom-btn{border-radius:0} .toast-container.theme-ios{gap:10px} .toast-container.theme-ios .toast-item{background:rgba(255,255,255,0.75);backdrop-filter:blur(50px) saturate(180%);-webkit-backdrop-filter:blur(50px) saturate(180%);border:1px solid rgba(255,255,255,0.4);box-shadow:0 4px 24px -1px rgba(0,0,0,0.1),0 0 0 1px rgba(0,0,0,0.02);border-radius:22px;padding:14px 18px !important;color:#1d1d1f;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"} body[theme="dark"] .toast-container.theme-ios .toast-item{background:rgba(28,28,30,0.75);border:1px solid rgba(255,255,255,0.1);color:#f5f5f7;box-shadow:0 10px 40px -10px rgba(0,0,0,0.5)} .toast-container.theme-ios .toast-item.show{transform:translateX(0) scale(1);animation:iosBounce .4s cubic-bezier(0.175,0.885,0.32,1.275)} .toast-container.theme-ios .toast-item:active{transform:scale(0.98)} .toast-container.theme-ios .toast-item.toast-success,.toast-container.theme-ios .toast-item.toast-danger,.toast-container.theme-ios .toast-item.toast-warning,.toast-container.theme-ios .toast-item.toast-info{border-left:none} .toast-container.theme-ios .toast-item::before,.toast-container.theme-ios .toast-item::after{display:none} .toast-container.theme-ios .toast-item-content-center{gap:12px !important;align-items:center} .toast-container.theme-ios .toast-body-icon-container{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0} .toast-container.theme-ios .toast-body-icon-container{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0} body[theme="dark"] .toast-container.theme-ios .toast-body-icon-container{background-color:rgba(235,235,245,0.1)} .toast-container.theme-ios .toast-item.toast-success .toast-body-icon-container{color:var(--toast-magic-success)} .toast-container.theme-ios .toast-item.toast-danger .toast-body-icon-container{color:var(--toast-magic-danger)} .toast-container.theme-ios .toast-item.toast-warning .toast-body-icon-container{color:var(--toast-magic-warning)} .toast-container.theme-ios .toast-item.toast-info .toast-body-icon-container{color:var(--toast-magic-info)} .toast-container.theme-ios .toast-body h4{font-size:15px;font-weight:600;margin-bottom:2px;letter-spacing:-0.01em} .toast-container.theme-ios .toast-body p{font-size:13px;color:inherit;opacity:0.8;line-height:1.4} .toast-container.theme-ios .toast-custom-btn{border-radius:16px;font-weight:600;font-size:13px;padding:6px 14px;transition:all 0.2s ease;background:rgba(120,120,128,0.12);color:inherit;border:none} .toast-container.theme-ios .toast-custom-btn:hover{background:rgba(120,120,128,0.2);transform:none;box-shadow:none} .toast-container.theme-ios .toast-close-btn{background:rgba(60,60,67,0.1);color:inherit;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;opacity:0.6;font-size:12px} body[theme="dark"] .toast-container.theme-ios .toast-close-btn{background:rgba(235,235,245,0.1)} .toast-container.theme-ios .toast-close-btn:hover{opacity:1;background:rgba(60,60,67,0.2)} @keyframes iosBounce{0%{transform:scale(0.9);opacity:0} 50%{transform:scale(1.02);opacity:1} 100%{transform:scale(1);opacity:1} } .toast-container.theme-glassmorphism .toast-item{background:rgba(255,255,255,0.08);backdrop-filter:blur(50px) saturate(180%);-webkit-backdrop-filter:blur(50px) saturate(180%);border:1.5px solid rgba(255,255,255,0.18);box-shadow:0 8px 32px 0 rgba(0,0,0,0.1),inset 0 1px 1px 0 rgba(255,255,255,0.3);border-radius:1rem} .toast-container.theme-glassmorphism .toast-item.toast-success{background:linear-gradient(135deg,rgba(var(--toast-magic-success-rgb),0.15),rgba(255,255,255,0.05));border:1.5px solid rgba(var(--toast-magic-success-rgb),0.5);box-shadow:0 8px 32px 0 rgba(var(--toast-magic-success-rgb),0.25),inset 0 1px 1px 0 rgba(255,255,255,0.4),inset 0 0 20px 0 rgba(var(--toast-magic-success-rgb),0.1)} .toast-container.theme-glassmorphism .toast-item.toast-success::before{background-color:rgba(var(--toast-magic-success-rgb),0.4)} .toast-container.theme-glassmorphism .toast-item.toast-success::after{background-color:rgba(var(--toast-magic-success-rgb),0.9)} .toast-container.theme-glassmorphism .toast-item.toast-danger{background:linear-gradient(135deg,rgba(var(--toast-magic-danger-rgb),0.15),rgba(255,255,255,0.05));border:1.5px solid rgba(var(--toast-magic-danger-rgb),0.5);box-shadow:0 8px 32px 0 rgba(var(--toast-magic-danger-rgb),0.25),inset 0 1px 1px 0 rgba(255,255,255,0.4),inset 0 0 20px 0 rgba(var(--toast-magic-danger-rgb),0.1)} .toast-container.theme-glassmorphism .toast-item.toast-danger::before{background-color:rgba(var(--toast-magic-danger-rgb),0.4)} .toast-container.theme-glassmorphism .toast-item.toast-danger::after{background-color:rgba(var(--toast-magic-danger-rgb),0.9)} .toast-container.theme-glassmorphism .toast-item.toast-warning{background:linear-gradient(135deg,rgba(var(--toast-magic-warning-rgb),0.15),rgba(255,255,255,0.05));border:1.5px solid rgba(var(--toast-magic-warning-rgb),0.5);box-shadow:0 8px 32px 0 rgba(var(--toast-magic-warning-rgb),0.25),inset 0 1px 1px 0 rgba(255,255,255,0.4),inset 0 0 20px 0 rgba(var(--toast-magic-warning-rgb),0.1)} .toast-container.theme-glassmorphism .toast-item.toast-warning::before{background-color:rgba(var(--toast-magic-warning-rgb),0.4)} .toast-container.theme-glassmorphism .toast-item.toast-warning::after{background-color:rgba(var(--toast-magic-warning-rgb),0.9)} .toast-container.theme-glassmorphism .toast-item.toast-info{background:linear-gradient(135deg,rgba(var(--toast-magic-info-rgb),0.15),rgba(255,255,255,0.05));border:1.5px solid rgba(var(--toast-magic-info-rgb),0.5);box-shadow:0 2px 5px 0 rgba(var(--toast-magic-info-rgb),0.25),inset 0 1px 1px 0 rgba(255,255,255,0.4),inset 0 0 20px 0 rgba(var(--toast-magic-info-rgb),0.1)} .toast-container.theme-glassmorphism .toast-item.toast-info::before{background-color:rgba(var(--toast-magic-info-rgb),0.4)} .toast-container.theme-glassmorphism .toast-item.toast-info::after{background-color:rgba(var(--toast-magic-info-rgb),0.9)} .toast-container.theme-glassmorphism.toast-gradient-enable .toast-item.toast-success{background:linear-gradient(135deg,rgba(var(--toast-magic-success-rgb),0.2),rgba(255,255,255,0.1))} .toast-container.theme-glassmorphism.toast-gradient-enable .toast-item.toast-info{background:linear-gradient(135deg,rgba(var(--toast-magic-info-rgb),0.2),rgba(255,255,255,0.1))} .toast-container.theme-glassmorphism.toast-gradient-enable .toast-item.toast-warning{background:linear-gradient(135deg,rgba(var(--toast-magic-warning-rgb),0.2),rgba(255,255,255,0.1))} .toast-container.theme-glassmorphism.toast-gradient-enable .toast-item.toast-danger{background:linear-gradient(135deg,rgba(var(--toast-magic-danger-rgb),0.2),rgba(255,255,255,0.1))} .toast-container.theme-glassmorphism .toast-custom-btn{background:rgba(255,255,255,0.2);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,0.3);border-radius:0.625rem;box-shadow:inset 0 1px 0 0 rgba(255,255,255,0.4)} .toast-container.theme-glassmorphism .toast-custom-btn:hover{background:rgba(255,255,255,0.3);box-shadow:inset 0 1px 0 0 rgba(255,255,255,0.5),0 4px 12px rgba(0,0,0,0.1)} .toast-container.theme-neon{gap:12px} .toast-container.theme-neon .toast-item{background:linear-gradient(135deg,#09090b 0%,#16161a 100%);border-radius:4px;border:1px solid rgba(255,255,255,0.1);box-shadow:0 0 0 1px rgba(0,0,0,0.5),0 10px 30px -10px rgba(0,0,0,0.5);color:#e4e4e7;position:relative;overflow:visible} .toast-container.theme-neon .toast-item.toast-success{border-color:var(--toast-magic-success);box-shadow:0 0 10px rgba(var(--toast-magic-success-rgb),0.2),inset 0 0 20px rgba(var(--toast-magic-success-rgb),0.05)} .toast-container.theme-neon .toast-item.toast-danger{border-color:var(--toast-magic-danger);box-shadow:0 0 10px rgba(var(--toast-magic-danger-rgb),0.2),inset 0 0 20px rgba(var(--toast-magic-danger-rgb),0.05)} .toast-container.theme-neon .toast-item.toast-warning{border-color:var(--toast-magic-warning);box-shadow:0 0 10px rgba(var(--toast-magic-warning-rgb),0.2),inset 0 0 20px rgba(var(--toast-magic-warning-rgb),0.05)} .toast-container.theme-neon .toast-item.toast-info{border-color:var(--toast-magic-info);box-shadow:0 0 10px rgba(var(--toast-magic-info-rgb),0.2),inset 0 0 20px rgba(var(--toast-magic-info-rgb),0.05)} .toast-container.theme-neon.toast-gradient-enable .toast-item.toast-success{background:radial-gradient(circle at top left,rgba(var(--toast-magic-success-rgb),0.15),transparent 60%),linear-gradient(135deg,#09090b 0%,#121214 100%)} .toast-container.theme-neon.toast-gradient-enable .toast-item.toast-info{background:radial-gradient(circle at top left,rgba(var(--toast-magic-info-rgb),0.15),transparent 60%),linear-gradient(135deg,#09090b 0%,#121214 100%)} .toast-container.theme-neon.toast-gradient-enable .toast-item.toast-warning{background:radial-gradient(circle at top left,rgba(var(--toast-magic-warning-rgb),0.15),transparent 60%),linear-gradient(135deg,#09090b 0%,#121214 100%)} .toast-container.theme-neon.toast-gradient-enable .toast-item.toast-danger{background:radial-gradient(circle at top left,rgba(var(--toast-magic-danger-rgb),0.15),transparent 60%),linear-gradient(135deg,#09090b 0%,#121214 100%)} .toast-container.theme-neon .toast-body h4{font-size:14px;margin-bottom:4px} .toast-container.theme-neon .toast-body p{color:#a1a1aa;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;letter-spacing:0.5px} .toast-container.theme-neon .toast-body-icon-container{background:transparent} .toast-container.theme-neon .toast-item.toast-success .toast-body-icon-container{color:var(--toast-magic-success)} .toast-container.theme-neon .toast-item.toast-danger .toast-body-icon-container{color:var(--toast-magic-danger)} .toast-container.theme-neon .toast-item.toast-warning .toast-body-icon-container{color:var(--toast-magic-warning)} .toast-container.theme-neon .toast-item.toast-info .toast-body-icon-container{color:var(--toast-magic-info)} .toast-container.theme-neon .toast-custom-btn{background:transparent;border:1px solid currentColor;border-radius:2px;font-size:11px;padding:6px 12px;transition:all 0.2s ease;box-shadow:0 0 5px rgba(0,0,0,0)} .toast-container.theme-neon .toast-item.toast-success .toast-custom-btn{color:var(--toast-magic-success)} .toast-container.theme-neon .toast-item.toast-danger .toast-custom-btn{color:var(--toast-magic-danger)} .toast-container.theme-neon .toast-item.toast-warning .toast-custom-btn{color:var(--toast-magic-warning)} .toast-container.theme-neon .toast-item.toast-info .toast-custom-btn{color:var(--toast-magic-info)} .toast-container.theme-neon .toast-custom-btn:hover{box-shadow:0 0 15px currentColor} .toast-container.theme-neon .toast-close-btn{color:#ffffff;transition:color 0.2s} .toast-container.theme-neon .toast-close-btn:hover{color:#fff;text-shadow:0 0 8px #fff} .toast-container.theme-neon .toast-item::before,.toast-container.theme-neon .toast-item::after{display:none} .toast-container.theme-minimal .toast-item{border-radius:0.375rem;border:1px solid rgba(0,0,0,0.1);box-shadow:0 2px 8px rgba(0,0,0,0.08);padding:1rem !important} .toast-container.theme-minimal .toast-item.toast-success{border-left:4px solid var(--toast-magic-success)} .toast-container.theme-minimal .toast-item.toast-danger{border-left:4px solid var(--toast-magic-danger)} .toast-container.theme-minimal .toast-item.toast-warning{border-left:4px solid var(--toast-magic-warning)} .toast-container.theme-minimal .toast-item.toast-info{border-left:4px solid var(--toast-magic-info)} .toast-container.theme-minimal .toast-item::before,.toast-container.theme-minimal .toast-item::after{display:none} .toast-container.theme-minimal .toast-custom-btn{border-radius:0.25rem;font-weight:500} .toast-container.theme-neumorphism .toast-item{background:#e0e5ec;border-radius:1rem;border:none} .toast-container.theme-neumorphism .toast-item.toast-success::after{background-color:var(--toast-magic-success);box-shadow:0 1px 2px rgba(var(--toast-magic-success-rgb),0.1)} .toast-container.theme-neumorphism .toast-item.toast-danger::after{background-color:var(--toast-magic-danger);box-shadow:0 1px 2px rgba(var(--toast-magic-danger-rgb),0.1)} .toast-container.theme-neumorphism .toast-item.toast-warning::after{background-color:var(--toast-magic-warning);box-shadow:0 1px 2px rgba(var(--toast-magic-warning-rgb),0.1)} .toast-container.theme-neumorphism .toast-item.toast-info::after{background-color:var(--toast-magic-info);box-shadow:0 1px 2px rgba(var(--toast-magic-info-rgb),0.1)} .toast-container.theme-neumorphism .toast-custom-btn{background:#e0e5ec;border:1px solid transparent;border-radius:0.5rem;box-shadow:4px 4px 8px rgba(163,177,198,0.6),-4px -4px 8px rgba(255,255,255,0.5)} .toast-container.theme-neumorphism .toast-custom-btn:hover{box-shadow:2px 2px 4px rgba(163,177,198,0.6),-2px -2px 4px rgba(255,255,255,0.5)} .toast-container.toast-color-true .toast-item.toast-success{background-color:rgba(var(--toast-magic-success-rgb),var(--toast-item-after-opacity,1))} .toast-container.toast-color-true .toast-item.toast-info{background-color:rgba(var(--toast-magic-info-rgb),var(--toast-item-after-opacity,1))} .toast-container.toast-color-true .toast-item.toast-warning{background-color:rgba(var(--toast-magic-warning-rgb),var(--toast-item-after-opacity,1))} .toast-container.toast-color-true .toast-item.toast-danger{background-color:rgba(var(--toast-magic-danger-rgb),var(--toast-item-after-opacity,1))} .toast-container.toast-color-true .toast-item.toast-success::before,.toast-container.toast-color-true .toast-item.toast-info::before,.toast-container.toast-color-true .toast-item.toast-warning::before,.toast-container.toast-color-true .toast-item.toast-danger::before{background-color:rgba(var(--toast-color-mode-progress-bg),var(--toast-item-before-opacity,0.4))} .toast-container.toast-color-true .toast-item.toast-success::after,.toast-container.toast-color-true .toast-item.toast-info::after,.toast-container.toast-color-true .toast-item.toast-warning::after,.toast-container.toast-color-true .toast-item.toast-danger::after{background-color:rgba(var(--toast-color-mode-progress-bg),var(--toast-item-after-opacity,1))} .toast-container.toast-color-true .toast-body-icon-container,.toast-container.toast-color-true .toast-close-btn,.toast-container.toast-color-true .toast-item{--toast-item-color:#FFFFFF;--toast-close-btn-color:#FFFFFF;color:var(--toast-item-color)} .toast-container.toast-color-true .toast-custom-btn{background-color:#FFF;color:#000} .toast-container.toast-color-true .toast-custom-btn:hover{border:1px solid rgba(var(--toast-color-mode-progress-bg),var(--toast-item-before-opacity,0.4))} .toast-container.toast-color-true .toast-item-content-center .toast-body h4,.toast-container.toast-color-true .toast-item-content-center .toast-body p{letter-spacing:1px} .toast-item-content-center{display:flex;align-items:start;justify-content:space-between;gap:.5rem !important} .toast-item-content-center .toast-body{padding:0;word-wrap:break-word;display:flex;gap:.5rem !important} .toast-item-content-center .toast-body .toast-body-container{display:flex;flex-direction:column;gap:.25rem} .toast-item-content-center .toast-body-icon-container{inline-size:25px;block-size:25px;padding:2px;font-size:18px;border-radius:0.3125rem;line-height:1;display:flex;justify-content:center;align-items:center} .toast-item-content-center .toast-body-title{display:flex;justify-content:start;align-items:center;min-height:22px;line-height:1} .toast-item-content-center .toast-body h4{font-size:0.875rem;font-weight:500;margin:0;line-height:1.15rem} .toast-item-content-center .toast-body p{font-size:0.75rem;font-weight:400;margin:0;padding:0;white-space:pre-line} .toast-item-content-center .toast-body-end{height:100%;display:flex;flex-direction:column;justify-content:space-around;align-items:flex-end;gap:.65rem} .toast-item-content-center .fi{line-height:1} .toast-close-btn{background:transparent;border:0;font-size:1rem;color:var(--toast-close-btn-color);width:1.25rem;cursor:pointer;z-index:99999;display:flex;align-items:start;opacity:.65;transition:opacity .25s ease-in-out;padding:0;margin:0} .toast-close-btn:hover{opacity:1} .toast-container .toast-custom-btn{--toast-custom-btn-bg-rgb:var(--toast-magic-success-rgb);font-size:0.75rem;white-space:nowrap;background-color:rgba(var(--toast-custom-btn-bg-rgb),0.2);color:var(--toast-custom-btn-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;padding:0.35rem 0.675rem;max-width:100px;display:block;overflow:hidden;text-overflow:ellipsis;text-decoration:none;border-radius:.275rem;font-weight:600;border:1px solid transparent} .toast-container .toast-custom-btn:hover{border:1px solid rgba(var(--toast-custom-btn-bg-rgb),1)} .toast-container .toast-custom-btn.toast-btn-bg-success{--toast-custom-btn-bg-rgb:var(--toast-magic-success-rgb)} .toast-container .toast-custom-btn.toast-btn-bg-info{--toast-custom-btn-bg-rgb:var(--toast-magic-info-rgb)} .toast-container .toast-custom-btn.toast-btn-bg-danger{--toast-custom-btn-bg-rgb:var(--toast-magic-danger-rgb)} .toast-container .toast-custom-btn.toast-btn-bg-warning{--toast-custom-btn-bg-rgb:var(--toast-magic-warning-rgb)} [dir=rtl] .toast-item.hide{transform:translateX(-100%)} [dir=rtl] .toast-item .end-0{right:unset !important;left:0 !important} [dir="rtl"] .toast-container.toast-top-start .toast-item,[dir="rtl"] .toast-container.toast-bottom-start .toast-item{transform:translateX(110%)} [dir="rtl"] .toast-container.toast-top-end .toast-item,[dir="rtl"] .toast-container.toast-bottom-end .toast-item{transform:translateX(-110%)} @media (max-width:575px){.toast-container{inset-inline-end:12px} } @keyframes toastProgress{from{width:var(--toast-progress-start,0%)} to{width:var(--toast-progress-end,100%)} } .toast-container .toast-item.show,[dir="rtl"] .toast-container .toast-item.show{transform:translate(0,0);opacity:1} .toast-container .toast-item.hide,[dir="rtl"] .toast-container .toast-item.hide{transform:translateX(100%);opacity:0} @keyframes toastProgressReverse{from{width:var(--toast-progress-end,100%)} to{width:var(--toast-progress-start,0%)} } \ No newline at end of file diff --git a/public/packages/devrabiul/laravel-toaster-magic/images/release-v2.0.jpeg b/public/packages/devrabiul/laravel-toaster-magic/images/release-v2.0.jpeg new file mode 100644 index 0000000..fc6567a Binary files /dev/null and b/public/packages/devrabiul/laravel-toaster-magic/images/release-v2.0.jpeg differ diff --git a/public/packages/devrabiul/laravel-toaster-magic/images/v2.0.png b/public/packages/devrabiul/laravel-toaster-magic/images/v2.0.png new file mode 100644 index 0000000..b2eff32 Binary files /dev/null and b/public/packages/devrabiul/laravel-toaster-magic/images/v2.0.png differ diff --git a/public/packages/devrabiul/laravel-toaster-magic/js/laravel-toaster-magic.js b/public/packages/devrabiul/laravel-toaster-magic/js/laravel-toaster-magic.js new file mode 100644 index 0000000..2f6a93c --- /dev/null +++ b/public/packages/devrabiul/laravel-toaster-magic/js/laravel-toaster-magic.js @@ -0,0 +1,199 @@ +(function () { + // =============================== + // Utility: Close toast function + // =============================== + function closeToastMagicItem(toast) { + toast.classList.remove("show"); + setTimeout(() => { + toast.remove(); + }, 500); + } + + // =============================== + // Utility: Icon generator + // =============================== + function getToasterIcon(key = null) { + if (key?.toString() === 'success') { + return ` + + `; + } else if (key?.toString() === 'error') { + return ``; + } else if (key?.toString() === 'info') { + return ``; + } else if (key?.toString() === 'warning') { + return ``; + } else if (key?.toString() === 'close') { + return ``; + } else { + return ``; + } + } + + // =============================== + // ToastMagic Class Definition + // =============================== + if (typeof window.ToastMagic === "undefined") { + window.ToastMagic = class ToastMagic { + constructor() { + const config = window.toastMagicConfig || {}; + this.toastMagicPosition = config.positionClass || "toast-top-end"; + this.toastMagicCloseButton = config.closeButton || false; + this.toastMagicTheme = config.theme || 'default'; + + this.toastContainer = document.querySelector(".toast-container"); + if (!this.toastContainer) { + this.toastContainer = document.createElement("div"); + this.toastContainer.classList.add("toast-container"); + document.body.appendChild(this.toastContainer); + } + + this.toastContainer.className = "toast-container " + this.toastMagicPosition + " theme-" + this.toastMagicTheme; + } + + show({ + type, + heading, + description = "", + showCloseBtn = this.toastMagicCloseButton, + customBtnText = "", + customBtnLink = "" + }) { + let toastClass, toastClassBasic; + switch (type) { + case "success": + toastClass = "toast-success"; + toastClassBasic = "success"; + break; + case "error": + toastClass = "toast-danger"; + toastClassBasic = "danger"; + break; + case "warning": + toastClass = "toast-warning"; + toastClassBasic = "warning"; + break; + case "info": + default: + toastClass = "toast-info"; + toastClassBasic = "info"; + } + + const toast = document.createElement("div"); + toast.classList.add("toast-item", toastClass); + toast.setAttribute("role", "alert"); + toast.setAttribute("aria-live", "assertive"); + toast.setAttribute("aria-atomic", "true"); + + toast.innerHTML = ` +
+${description}
` : ''} +${description}
` : ''} +Update your display name.
+