add shimmer animation in deal modal

This commit is contained in:
kusowl 2026-01-23 09:45:07 +05:30
parent 45196cba56
commit a5f2f43fb1
10 changed files with 129 additions and 107 deletions

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Controllers\auth; namespace App\Http\Controllers\Auth;
use App\Enums\UserStatus; use App\Enums\UserStatus;
use App\Enums\UserTypes; use App\Enums\UserTypes;

161
composer.lock generated
View File

@ -77,16 +77,16 @@
}, },
{ {
"name": "blade-ui-kit/blade-icons", "name": "blade-ui-kit/blade-icons",
"version": "1.8.0", "version": "1.8.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/driesvints/blade-icons.git", "url": "https://github.com/driesvints/blade-icons.git",
"reference": "7b743f27476acb2ed04cb518213d78abe096e814" "reference": "47e7b6f43250e6404e4224db8229219cd42b543c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/driesvints/blade-icons/zipball/7b743f27476acb2ed04cb518213d78abe096e814", "url": "https://api.github.com/repos/driesvints/blade-icons/zipball/47e7b6f43250e6404e4224db8229219cd42b543c",
"reference": "7b743f27476acb2ed04cb518213d78abe096e814", "reference": "47e7b6f43250e6404e4224db8229219cd42b543c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -133,7 +133,7 @@
} }
], ],
"description": "A package to easily make use of icons in your Laravel Blade views.", "description": "A package to easily make use of icons in your Laravel Blade views.",
"homepage": "https://github.com/blade-ui-kit/blade-icons", "homepage": "https://github.com/driesvints/blade-icons",
"keywords": [ "keywords": [
"blade", "blade",
"icons", "icons",
@ -141,8 +141,8 @@
"svg" "svg"
], ],
"support": { "support": {
"issues": "https://github.com/blade-ui-kit/blade-icons/issues", "issues": "https://github.com/driesvints/blade-icons/issues",
"source": "https://github.com/blade-ui-kit/blade-icons" "source": "https://github.com/driesvints/blade-icons"
}, },
"funding": [ "funding": [
{ {
@ -154,7 +154,7 @@
"type": "paypal" "type": "paypal"
} }
], ],
"time": "2025-02-13T20:35:06+00:00" "time": "2026-01-20T09:46:32+00:00"
}, },
{ {
"name": "brick/math", "name": "brick/math",
@ -1204,16 +1204,16 @@
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v12.46.0", "version": "v12.48.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "9dcff48d25a632c1fadb713024c952fec489c4ae" "reference": "0f0974a9769378ccd9c9935c09b9927f3a606830"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/9dcff48d25a632c1fadb713024c952fec489c4ae", "url": "https://api.github.com/repos/laravel/framework/zipball/0f0974a9769378ccd9c9935c09b9927f3a606830",
"reference": "9dcff48d25a632c1fadb713024c952fec489c4ae", "reference": "0f0974a9769378ccd9c9935c09b9927f3a606830",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1326,7 +1326,7 @@
"league/flysystem-sftp-v3": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1",
"mockery/mockery": "^1.6.10", "mockery/mockery": "^1.6.10",
"opis/json-schema": "^2.4.1", "opis/json-schema": "^2.4.1",
"orchestra/testbench-core": "^10.8.1", "orchestra/testbench-core": "^10.9.0",
"pda/pheanstalk": "^5.0.6|^7.0.0", "pda/pheanstalk": "^5.0.6|^7.0.0",
"php-http/discovery": "^1.15", "php-http/discovery": "^1.15",
"phpstan/phpstan": "^2.0", "phpstan/phpstan": "^2.0",
@ -1422,20 +1422,20 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2026-01-07T23:26:53+00:00" "time": "2026-01-20T16:12:36+00:00"
}, },
{ {
"name": "laravel/prompts", "name": "laravel/prompts",
"version": "v0.3.8", "version": "v0.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/prompts.git", "url": "https://github.com/laravel/prompts.git",
"reference": "096748cdfb81988f60090bbb839ce3205ace0d35" "reference": "360ba095ef9f51017473505191fbd4ab73e1cab3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/prompts/zipball/096748cdfb81988f60090bbb839ce3205ace0d35", "url": "https://api.github.com/repos/laravel/prompts/zipball/360ba095ef9f51017473505191fbd4ab73e1cab3",
"reference": "096748cdfb81988f60090bbb839ce3205ace0d35", "reference": "360ba095ef9f51017473505191fbd4ab73e1cab3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1479,22 +1479,22 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.", "description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": { "support": {
"issues": "https://github.com/laravel/prompts/issues", "issues": "https://github.com/laravel/prompts/issues",
"source": "https://github.com/laravel/prompts/tree/v0.3.8" "source": "https://github.com/laravel/prompts/tree/v0.3.10"
}, },
"time": "2025-11-21T20:52:52+00:00" "time": "2026-01-13T20:29:29+00:00"
}, },
{ {
"name": "laravel/serializable-closure", "name": "laravel/serializable-closure",
"version": "v2.0.7", "version": "v2.0.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/serializable-closure.git", "url": "https://github.com/laravel/serializable-closure.git",
"reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd" "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/cb291e4c998ac50637c7eeb58189c14f5de5b9dd", "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/7581a4407012f5f53365e11bafc520fd7f36bc9b",
"reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd", "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1542,7 +1542,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues", "issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure" "source": "https://github.com/laravel/serializable-closure"
}, },
"time": "2025-11-21T20:52:36+00:00" "time": "2026-01-08T16:22:46+00:00"
}, },
{ {
"name": "laravel/tinker", "name": "laravel/tinker",
@ -1989,20 +1989,20 @@
}, },
{ {
"name": "league/uri", "name": "league/uri",
"version": "7.7.0", "version": "7.8.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/thephpleague/uri.git", "url": "https://github.com/thephpleague/uri.git",
"reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807" "reference": "4436c6ec8d458e4244448b069cc572d088230b76"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/uri/zipball/8d587cddee53490f9b82bf203d3a9aa7ea4f9807", "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76",
"reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807", "reference": "4436c6ec8d458e4244448b069cc572d088230b76",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"league/uri-interfaces": "^7.7", "league/uri-interfaces": "^7.8",
"php": "^8.1", "php": "^8.1",
"psr/http-factory": "^1" "psr/http-factory": "^1"
}, },
@ -2016,11 +2016,11 @@
"ext-gmp": "to improve IPV4 host parsing", "ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance", "ext-intl": "to handle IDN host with the best performance",
"ext-uri": "to use the PHP native URI class", "ext-uri": "to use the PHP native URI class",
"jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain",
"league/uri-components": "Needed to easily manipulate URI objects components", "league/uri-components": "to provide additional tools to manipulate URI objects components",
"league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP", "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP",
"php-64bit": "to improve IPV4 host parsing", "php-64bit": "to improve IPV4 host parsing",
"rowbot/url": "to handle WHATWG URL", "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
}, },
"type": "library", "type": "library",
@ -2075,7 +2075,7 @@
"docs": "https://uri.thephpleague.com", "docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com", "forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues", "issues": "https://github.com/thephpleague/uri-src/issues",
"source": "https://github.com/thephpleague/uri/tree/7.7.0" "source": "https://github.com/thephpleague/uri/tree/7.8.0"
}, },
"funding": [ "funding": [
{ {
@ -2083,20 +2083,20 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-12-07T16:02:06+00:00" "time": "2026-01-14T17:24:56+00:00"
}, },
{ {
"name": "league/uri-interfaces", "name": "league/uri-interfaces",
"version": "7.7.0", "version": "7.8.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git", "url": "https://github.com/thephpleague/uri-interfaces.git",
"reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c" "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/62ccc1a0435e1c54e10ee6022df28d6c04c2946c", "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
"reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c", "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2109,7 +2109,7 @@
"ext-gmp": "to improve IPV4 host parsing", "ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance", "ext-intl": "to handle IDN host with the best performance",
"php-64bit": "to improve IPV4 host parsing", "php-64bit": "to improve IPV4 host parsing",
"rowbot/url": "to handle WHATWG URL", "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
}, },
"type": "library", "type": "library",
@ -2159,7 +2159,7 @@
"docs": "https://uri.thephpleague.com", "docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com", "forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues", "issues": "https://github.com/thephpleague/uri-src/issues",
"source": "https://github.com/thephpleague/uri-interfaces/tree/7.7.0" "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0"
}, },
"funding": [ "funding": [
{ {
@ -2167,7 +2167,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-12-07T16:03:21+00:00" "time": "2026-01-15T06:54:53+00:00"
}, },
{ {
"name": "monolog/monolog", "name": "monolog/monolog",
@ -6149,16 +6149,16 @@
"packages-dev": [ "packages-dev": [
{ {
"name": "brianium/paratest", "name": "brianium/paratest",
"version": "v7.16.0", "version": "v7.16.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/paratestphp/paratest.git", "url": "https://github.com/paratestphp/paratest.git",
"reference": "a10878ed0fe0bbc2f57c980f7a08065338b970b6" "reference": "f0fdfd8e654e0d38bc2ba756a6cabe7be287390b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/paratestphp/paratest/zipball/a10878ed0fe0bbc2f57c980f7a08065338b970b6", "url": "https://api.github.com/repos/paratestphp/paratest/zipball/f0fdfd8e654e0d38bc2ba756a6cabe7be287390b",
"reference": "a10878ed0fe0bbc2f57c980f7a08065338b970b6", "reference": "f0fdfd8e654e0d38bc2ba756a6cabe7be287390b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -6169,10 +6169,10 @@
"fidry/cpu-core-counter": "^1.3.0", "fidry/cpu-core-counter": "^1.3.0",
"jean85/pretty-package-versions": "^2.1.1", "jean85/pretty-package-versions": "^2.1.1",
"php": "~8.3.0 || ~8.4.0 || ~8.5.0", "php": "~8.3.0 || ~8.4.0 || ~8.5.0",
"phpunit/php-code-coverage": "^12.5.1", "phpunit/php-code-coverage": "^12.5.2",
"phpunit/php-file-iterator": "^6", "phpunit/php-file-iterator": "^6",
"phpunit/php-timer": "^8", "phpunit/php-timer": "^8",
"phpunit/phpunit": "^12.5.2", "phpunit/phpunit": "^12.5.4",
"sebastian/environment": "^8.0.3", "sebastian/environment": "^8.0.3",
"symfony/console": "^7.3.4 || ^8.0.0", "symfony/console": "^7.3.4 || ^8.0.0",
"symfony/process": "^7.3.4 || ^8.0.0" "symfony/process": "^7.3.4 || ^8.0.0"
@ -6184,7 +6184,7 @@
"ext-posix": "*", "ext-posix": "*",
"phpstan/phpstan": "^2.1.33", "phpstan/phpstan": "^2.1.33",
"phpstan/phpstan-deprecation-rules": "^2.0.3", "phpstan/phpstan-deprecation-rules": "^2.0.3",
"phpstan/phpstan-phpunit": "^2.0.10", "phpstan/phpstan-phpunit": "^2.0.11",
"phpstan/phpstan-strict-rules": "^2.0.7", "phpstan/phpstan-strict-rules": "^2.0.7",
"symfony/filesystem": "^7.3.2 || ^8.0.0" "symfony/filesystem": "^7.3.2 || ^8.0.0"
}, },
@ -6226,7 +6226,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/paratestphp/paratest/issues", "issues": "https://github.com/paratestphp/paratest/issues",
"source": "https://github.com/paratestphp/paratest/tree/v7.16.0" "source": "https://github.com/paratestphp/paratest/tree/v7.16.1"
}, },
"funding": [ "funding": [
{ {
@ -6238,7 +6238,7 @@
"type": "paypal" "type": "paypal"
} }
], ],
"time": "2025-12-09T20:03:26+00:00" "time": "2026-01-08T07:23:06+00:00"
}, },
{ {
"name": "doctrine/deprecations", "name": "doctrine/deprecations",
@ -6596,23 +6596,22 @@
}, },
{ {
"name": "laradumps/laradumps", "name": "laradumps/laradumps",
"version": "v5.0.0", "version": "v5.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laradumps/laradumps.git", "url": "https://github.com/laradumps/laradumps.git",
"reference": "7bfb9b888ce351ca151e29cacf2e2e74c7b62f72" "reference": "e7b3119b50124942cb1062fcbbd0036a27312d6e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laradumps/laradumps/zipball/7bfb9b888ce351ca151e29cacf2e2e74c7b62f72", "url": "https://api.github.com/repos/laradumps/laradumps/zipball/e7b3119b50124942cb1062fcbbd0036a27312d6e",
"reference": "7bfb9b888ce351ca151e29cacf2e2e74c7b62f72", "reference": "e7b3119b50124942cb1062fcbbd0036a27312d6e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"illuminate/mail": "^11.0|^12.0", "illuminate/mail": "^11.0|^12.0",
"illuminate/support": "^11.0|^12.0", "illuminate/support": "^11.0|^12.0",
"laradumps/laradumps-core": "^4.0.0", "laradumps/laradumps-core": "^4.0.1",
"nunomaduro/termwind": "^2.3.3",
"php": "^8.2" "php": "^8.2"
}, },
"require-dev": { "require-dev": {
@ -6656,7 +6655,7 @@
"homepage": "https://github.com/laradumps/laradumps", "homepage": "https://github.com/laradumps/laradumps",
"support": { "support": {
"issues": "https://github.com/laradumps/laradumps/issues", "issues": "https://github.com/laradumps/laradumps/issues",
"source": "https://github.com/laradumps/laradumps/tree/v5.0.0" "source": "https://github.com/laradumps/laradumps/tree/v5.0.1"
}, },
"funding": [ "funding": [
{ {
@ -6664,25 +6663,24 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-12-13T12:44:16+00:00" "time": "2026-01-15T18:01:57+00:00"
}, },
{ {
"name": "laradumps/laradumps-core", "name": "laradumps/laradumps-core",
"version": "v4.0.0", "version": "v4.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laradumps/laradumps-core.git", "url": "https://github.com/laradumps/laradumps-core.git",
"reference": "bb57c8fccb785777020b85592d718e8ff0c9a23a" "reference": "162ceebac8e7253332270421b74a12a94a6f28b8"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laradumps/laradumps-core/zipball/bb57c8fccb785777020b85592d718e8ff0c9a23a", "url": "https://api.github.com/repos/laradumps/laradumps-core/zipball/162ceebac8e7253332270421b74a12a94a6f28b8",
"reference": "bb57c8fccb785777020b85592d718e8ff0c9a23a", "reference": "162ceebac8e7253332270421b74a12a94a6f28b8",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-curl": "*", "ext-curl": "*",
"nunomaduro/termwind": "^2.0",
"php": "^8.2", "php": "^8.2",
"ramsey/uuid": "^4.9.1", "ramsey/uuid": "^4.9.1",
"spatie/backtrace": "^1.5", "spatie/backtrace": "^1.5",
@ -6693,11 +6691,14 @@
"symfony/yaml": "^6.4|^7.0|^8.0" "symfony/yaml": "^6.4|^7.0|^8.0"
}, },
"require-dev": { "require-dev": {
"illuminate/support": "^10.46", "illuminate/support": "^12",
"laravel/pint": "^1.26.0", "laravel/pint": "^1.26.0",
"pestphp/pest": "^3.0|^4.0", "pestphp/pest": "^3.0|^4.0",
"phpstan/phpstan": "^1.10.50" "phpstan/phpstan": "^1.10.50"
}, },
"suggest": {
"nunomaduro/termwind": "For a better terminal experience"
},
"bin": [ "bin": [
"bin/laradumps" "bin/laradumps"
], ],
@ -6725,7 +6726,7 @@
"homepage": "https://github.com/laradumps/laradumps-core", "homepage": "https://github.com/laradumps/laradumps-core",
"support": { "support": {
"issues": "https://github.com/laradumps/laradumps-core/issues", "issues": "https://github.com/laradumps/laradumps-core/issues",
"source": "https://github.com/laradumps/laradumps-core/tree/v4.0.0" "source": "https://github.com/laradumps/laradumps-core/tree/v4.0.1"
}, },
"funding": [ "funding": [
{ {
@ -6733,7 +6734,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-12-12T22:10:38+00:00" "time": "2026-01-15T17:33:27+00:00"
}, },
{ {
"name": "laravel/pail", "name": "laravel/pail",
@ -7943,16 +7944,16 @@
}, },
{ {
"name": "phpstan/phpdoc-parser", "name": "phpstan/phpdoc-parser",
"version": "2.3.0", "version": "2.3.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git", "url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/16dbf9937da8d4528ceb2145c9c7c0bd29e26374",
"reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -7984,9 +7985,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types", "description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": { "support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues", "issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.1"
}, },
"time": "2025-08-30T15:50:23+00:00" "time": "2026-01-12T11:33:04+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
@ -9627,16 +9628,16 @@
}, },
{ {
"name": "webmozart/assert", "name": "webmozart/assert",
"version": "2.1.1", "version": "2.1.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/webmozarts/assert.git", "url": "https://github.com/webmozarts/assert.git",
"reference": "bdbabc199a7ba9965484e4725d66170e5711323b" "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/bdbabc199a7ba9965484e4725d66170e5711323b", "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649",
"reference": "bdbabc199a7ba9965484e4725d66170e5711323b", "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -9683,9 +9684,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/webmozarts/assert/issues", "issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/2.1.1" "source": "https://github.com/webmozarts/assert/tree/2.1.2"
}, },
"time": "2026-01-08T11:28:40+00:00" "time": "2026-01-13T14:02:24+00:00"
} }
], ],
"aliases": [], "aliases": [],

View File

@ -22,6 +22,14 @@ @layer components {
} }
[data-is-loading="true"] {
@apply animate-pulse bg-slate-200! text-transparent! rounded select-none pointer-events-none min-h-4;
position: relative;
}
[data-is-loading="true"] * {
@apply opacity-0!;
}
} }
@layer base { @layer base {
@ -33,6 +41,7 @@ @layer base {
.preload * { .preload * {
transition: none !important; transition: none !important;
} }
@keyframes appear { @keyframes appear {
from { from {
opacity: 0; opacity: 0;
@ -41,6 +50,7 @@ @keyframes appear {
opacity: 1; opacity: 1;
} }
} }
@keyframes disappear { @keyframes disappear {
from { from {
display: block; display: block;
@ -51,9 +61,11 @@ @keyframes disappear {
opacity: 0; opacity: 0;
} }
} }
dialog{
dialog {
animation: disappear 300ms ease-in-out; animation: disappear 300ms ease-in-out;
} }
dialog[open]{
dialog[open] {
animation: appear 300ms ease-in-out; animation: appear 300ms ease-in-out;
} }

View File

@ -1,30 +1,31 @@
import {showToast} from "@/toast.js"; import {showToast} from "@/toast.js";
import {closeModal, showModal} from "@/modal.js"; import {closeModal, showModal} from "@/modal.js";
import {redirect} from "./interaction.js"; import {redirect} from "./interaction.js";
import {toggleShimmer} from "./shimmer.js";
async function showDealModal(dealId) { async function showDealModal(dealId) {
if (dealId === null || dealId === "") { if (!dealId) {
showToast('Something went wrong!'); showToast('Something went wrong!');
return; return;
} }
// Open the deal modal and show a loading state const dealModal = document.getElementById('deal-modal');
showModal('deal-modal')
showModal('deal-modal');
toggleShimmer(true, dealModal);
try { try {
const response = await axios.get('/api/deals/' + dealId); const response = await axios.get('/api/deals/' + dealId);
setDealDetails(response.data); setDealDetails(response.data);
const dealModal = document.getElementById('deal-modal'); toggleShimmer(false, dealModal);
// Add the id so that action buttons can identify the route
dealModal.dataset.dealId = dealId; dealModal.dataset.dealId = dealId;
// Increment the view count
await axios.post(`/api/view/${dealId}`); await axios.post(`/api/view/${dealId}`);
} catch (e) { } catch (e) {
console.error(e) console.error(e);
closeModal('deal-modal') closeModal('deal-modal');
showToast('Something went wrong!'); showToast('Something went wrong!');
} }
} }
@ -46,7 +47,7 @@ function setDealDetails(dealDetails) {
dealModal.querySelector('.deal-image').src = image; dealModal.querySelector('.deal-image').src = image;
dealModal.querySelector('.deal-title').innerText = title; dealModal.querySelector('.deal-title').innerText = title;
dealModal.querySelector('.deal-description').innerText = description; dealModal.querySelector('.deal-description').innerText = description;
dealModal.querySelector('.deal-category').innerText = category.name; dealModal.querySelector('.deal-category').querySelector('p').innerText = category.name;
dealModal.querySelector('.broker-name').innerText = broker.name; dealModal.querySelector('.broker-name').innerText = broker.name;
dealModal.querySelector('.broker-email').innerText = broker.email; dealModal.querySelector('.broker-email').innerText = broker.email;
dealModal.querySelector('.broker-phone').innerText = broker.role.phone; dealModal.querySelector('.broker-phone').innerText = broker.role.phone;

7
resources/js/shimmer.js Normal file
View File

@ -0,0 +1,7 @@
export function toggleShimmer(isLoading, parentElement) {
const dataElements = parentElement.querySelectorAll('[data-is-loading]');
dataElements.forEach(el => {
el.dataset.isLoading = isLoading ? 'true' : 'false';
});
}

View File

@ -2,9 +2,9 @@
<div class="p-4 text-sm bg-gray-100 border-gray-200 border rounded-xl"> <div class="p-4 text-sm bg-gray-100 border-gray-200 border rounded-xl">
<p class="font-bold mb-2">Broker Contact</p> <p class="font-bold mb-2">Broker Contact</p>
<div class="text-accent-600 space-y-1"> <div class="text-accent-600 space-y-1">
<p class="broker-name">{{$broker->name ?? ''}}</p> <p data-is-loading="true" class="broker-name">{{$broker->name ?? ''}}</p>
<p class="broker-email">{{$broker->email ?? ''}}</p> <p data-is-loading="true" class="broker-email">{{$broker->email ?? ''}}</p>
<p class="broker-phone">{{$broker->role->phone ?? ''}}</p> <p data-is-loading="true" class="broker-phone">{{$broker->role->phone ?? ''}}</p>
</div> </div>
</div> </div>

View File

@ -6,24 +6,24 @@
</button> </button>
</form> </form>
<div class="grid md:grid-cols-12 gap-4 items-stretch"> <div class="grid md:grid-cols-12 gap-4 items-stretch">
<div class="md:col-span-8 h-0 min-h-full"> <div data-is-loading="true" class="md:col-span-8 h-0 min-h-full data-[is-loading=true]:h-60">
<div class="rounded-lg bg-gray-200 h-full"> <div class="rounded-lg bg-gray-200 h-full">
<img src="" alt="Image of the deal" <img src="" alt=" "
class="deal-image h-full w-full object-cover rounded-lg border-none"> class="deal-image h-full w-full object-cover rounded-lg border-none">
</div> </div>
</div> </div>
<div class="md:col-span-4 flex flex-col gap-y-4"> <div class="md:col-span-4 flex flex-col gap-y-4">
<x-ui.button-sm class="w-fit deal-category" variant="neutral"/> <x-ui.button-sm data-is-loading="true" class="w-fit deal-category data-[is-loading=true]:h-6 data-[is-loading=true]:w-15" variant="neutral"/>
<p class="deal-title font-bold text-lg "></p> <p data-is-loading="true" class="deal-title font-bold text-lg data-[is-loading=true]:h-3 "></p>
<p class="deal-description text-sm text-accent-600 wrap-break-word"></p> <p data-is-loading="true" class="deal-description text-sm text-accent-600 wrap-break-word"></p>
<div class="flex justify-between"> <div class="flex justify-between">
<div> <div >
<x-dashboard.user.action-toolbar.like-button :is-interactive="false"/> <x-dashboard.user.action-toolbar.like-button data-is-loading="true" :is-interactive="false"/>
<x-dashboard.user.action-toolbar.favorite-button :is-interactive="false"/> <x-dashboard.user.action-toolbar.favorite-button data-is-loading="true" :is-interactive="false"/>
</div> </div>
<x-dashboard.user.deal-stats/> <x-dashboard.user.deal-stats/>
</div> </div>
<x-ui.button variant="neutral" class="hidden deal-link space-x-2 items-center justify-center"> <x-ui.button variant="neutral" data-is-loading="false" class="hidden deal-link space-x-2 items-center justify-center">
<div class="flex space-x-2"> <div class="flex space-x-2">
<p>View Deal</p> <p>View Deal</p>
<x-heroicon-o-arrow-top-right-on-square class="w-5 ml-1"/> <x-heroicon-o-arrow-top-right-on-square class="w-5 ml-1"/>

View File

@ -1,5 +1,5 @@
@props(['likeCount' => 0, 'clickCount' => 0]) @props(['likeCount' => 0, 'clickCount' => 0])
<div class="flex space-x-3"> <div class="flex space-x-3" data-is-loading="false">
<x-dashboard.user.stat-badge class="likeCount" :count="$likeCount"> <x-dashboard.user.stat-badge class="likeCount" :count="$likeCount">
<x-heroicon-o-heart class="w-4"/> <x-heroicon-o-heart class="w-4"/>
</x-dashboard.user.stat-badge> </x-dashboard.user.stat-badge>

View File

@ -13,6 +13,6 @@
</a> </a>
@else @else
<button {{$attributes->merge(['class' => "px-2 py-1 text-xs rounded-md font-medium hover:opacity-80 hover:scale-110 active:scale-80 transition-all duration-300 ease-in-out $variantClass"])}}> <button {{$attributes->merge(['class' => "px-2 py-1 text-xs rounded-md font-medium hover:opacity-80 hover:scale-110 active:scale-80 transition-all duration-300 ease-in-out $variantClass"])}}>
{{$slot}} <p>{{$slot}}</p>
</button> </button>
@endif @endif

View File

@ -5,6 +5,7 @@
use App\Queries\ExplorePageDealsQuery; use App\Queries\ExplorePageDealsQuery;
Route::get('/deals/{deal}', function (Deal $deal) { Route::get('/deals/{deal}', function (Deal $deal) {
sleep(2);
return new DealResource( return new DealResource(
(new ExplorePageDealsQuery) (new ExplorePageDealsQuery)
->builder() ->builder()