diff --git a/app/Http/Middleware/AddContentSecurityPolicyHeaders.php b/app/Http/Middleware/AddContentSecurityPolicyHeaders.php
new file mode 100644
index 0000000..fb684bd
--- /dev/null
+++ b/app/Http/Middleware/AddContentSecurityPolicyHeaders.php
@@ -0,0 +1,16 @@
+withHeaders([
+ 'Content-Security-Policy' => "script-src 'nonce-".Vite::cspNonce()."'",
+ ]);
+ }
+}
diff --git a/app/Security/Generator/LaravelViteNonceGenerator.php b/app/Security/Generator/LaravelViteNonceGenerator.php
new file mode 100644
index 0000000..bbff412
--- /dev/null
+++ b/app/Security/Generator/LaravelViteNonceGenerator.php
@@ -0,0 +1,14 @@
+add(Directive::BASE, Keyword::SELF);
+
+ $policy->add(Directive::CONNECT, Keyword::SELF);
+ $policy->add(Directive::DEFAULT, Keyword::SELF);
+ $policy->add(Directive::FONT, Keyword::SELF);
+ $policy->add(Directive::FORM_ACTION, Keyword::SELF);
+ $policy->add(Directive::IMG, [
+ Keyword::SELF,
+ 'data:',
+ ]);
+ $policy->add(Directive::MEDIA, Keyword::SELF);
+ $policy->add(Directive::OBJECT, Keyword::NONE);
+
+ $policy->add(Directive::SCRIPT, Keyword::SELF);
+
+ $policy->add(Directive::STYLE, [
+ Keyword::SELF,
+ Keyword::UNSAFE_INLINE,
+ ]);
+
+ // Fathom Analytics
+ $policy->add(Directive::SCRIPT, 'cdn.usefathom.com');
+ $policy->add(Directive::CONNECT, 'cdn.usefathom.com');
+ $policy->add(Directive::SCRIPT, 'cdn-eu.usefathom.com');
+ $policy->add(Directive::CONNECT, 'cdn-eu.usefathom.com');
+ }
+}
diff --git a/app/Security/SecurityPolicyBasic.php b/app/Security/SecurityPolicyBasic.php
deleted file mode 100644
index ad87b03..0000000
--- a/app/Security/SecurityPolicyBasic.php
+++ /dev/null
@@ -1,27 +0,0 @@
-addDirective(Directive::BASE, Keyword::SELF)
- ->addDirective(Directive::CONNECT, Config::array('default.security_headers.connect'))
- ->addDirective(Directive::DEFAULT, Config::array('default.security_headers.default'))
- ->addDirective(Directive::FORM_ACTION, Config::array('default.security_headers.form_action'))
- ->addDirective(Directive::IMG, Config::array('default.security_headers.img'))
- ->addDirective(Directive::MEDIA, Config::array('default.security_headers.media'))
- ->addDirective(Directive::OBJECT, Config::array('default.security_headers.object'))
- ->addDirective(Directive::FONT, Config::array('default.security_headers.font'))
- ->addDirective(Directive::SCRIPT, Config::array('default.security_headers.script'))
- ->addDirective(Directive::STYLE_ELEM, Config::array('default.security_headers.style_elem'))
- ->addDirective(Directive::STYLE, Config::array('default.security_headers.style'));
- }
-}
diff --git a/bootstrap/app.php b/bootstrap/app.php
index e25cb89..ebd98a3 100644
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -1,5 +1,6 @@
withMiddleware(function (Middleware $middleware) {
$middleware->web(append: [
AddCspHeaders::class,
+ // AddContentSecurityPolicyHeaders::class,
AddFeaturePolicyHeaders::class,
SetLanguage::class,
CacheResponse::class,
diff --git a/composer.json b/composer.json
index 363e6df..8754fb3 100644
--- a/composer.json
+++ b/composer.json
@@ -9,8 +9,6 @@
"license": "MIT",
"require": {
"php": "^8.4",
- "blade-ui-kit/blade-heroicons": "^2.3",
- "blade-ui-kit/blade-icons": "^1.6",
"codebar-ag/laravel-flysystem-cloudinary": "^v12.0.1",
"filament/filament": "^3.3",
"laravel/framework": "^v12.1.1",
@@ -18,9 +16,8 @@
"league/flysystem-aws-s3-v3": "^3.28",
"livewire/livewire": "^3.5",
"mazedlx/laravel-feature-policy": "^2.2",
- "owenvoke/blade-fontawesome": "^2.6",
"sammyjo20/lasso": "3.4.0",
- "spatie/laravel-csp": "^2.9",
+ "spatie/laravel-csp": "^3.8",
"spatie/laravel-flash": "^1.10",
"spatie/laravel-health": "^1.27",
"spatie/laravel-honeypot": "^4.5",
diff --git a/composer.lock b/composer.lock
index a057e2c..02fa828 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": "2100039e11d59b6ee310f1a8c000256f",
+ "content-hash": "67b779edfcfcb2ca0a28f93bea867955",
"packages": [
{
"name": "anourvalar/eloquent-serialize",
@@ -4476,66 +4476,6 @@
],
"time": "2025-03-11T14:40:46+00:00"
},
- {
- "name": "owenvoke/blade-fontawesome",
- "version": "v2.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/owenvoke/blade-fontawesome.git",
- "reference": "94dcd0c78f43f8234b0d9c76c903ecd288b8b0d1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/owenvoke/blade-fontawesome/zipball/94dcd0c78f43f8234b0d9c76c903ecd288b8b0d1",
- "reference": "94dcd0c78f43f8234b0d9c76c903ecd288b8b0d1",
- "shasum": ""
- },
- "require": {
- "blade-ui-kit/blade-icons": "^1.5",
- "illuminate/support": "^10.34|^11.0|^12.0",
- "php": "^8.1"
- },
- "require-dev": {
- "laravel/pint": "^1.13",
- "orchestra/testbench": "^8.12|^9.0|^10.0",
- "pestphp/pest": "^2.26|^3.7",
- "phpstan/phpstan": "^1.10|^2.1",
- "symfony/var-dumper": "^6.3|^7.2"
- },
- "type": "library",
- "extra": {
- "laravel": {
- "providers": [
- "OwenVoke\\BladeFontAwesome\\BladeFontAwesomeServiceProvider"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "OwenVoke\\BladeFontAwesome\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A package to easily make use of Font Awesome in your Laravel Blade views",
- "support": {
- "issues": "https://github.com/owenvoke/blade-fontawesome/issues",
- "source": "https://github.com/owenvoke/blade-fontawesome/tree/v2.9.1"
- },
- "funding": [
- {
- "url": "https://ecologi.com/owenvoke?gift-trees",
- "type": "custom"
- },
- {
- "url": "https://github.com/owenvoke",
- "type": "github"
- }
- ],
- "time": "2025-03-28T16:03:42+00:00"
- },
{
"name": "phpoption/phpoption",
"version": "1.9.3",
@@ -6132,28 +6072,28 @@
},
{
"name": "spatie/laravel-csp",
- "version": "2.10.3",
+ "version": "3.8.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-csp.git",
- "reference": "15e40c28d46076b3d5a4268b63040b3900cc05d3"
+ "reference": "395ec40d2e7aa9713af1d45096b73a3a57c7b2c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-csp/zipball/15e40c28d46076b3d5a4268b63040b3900cc05d3",
- "reference": "15e40c28d46076b3d5a4268b63040b3900cc05d3",
+ "url": "https://api.github.com/repos/spatie/laravel-csp/zipball/395ec40d2e7aa9713af1d45096b73a3a57c7b2c4",
+ "reference": "395ec40d2e7aa9713af1d45096b73a3a57c7b2c4",
"shasum": ""
},
"require": {
- "illuminate/http": "^9.0|^10.0|^11.36.1|^12",
- "illuminate/support": "^9.0|^10.0|^11.36.1|^12",
- "php": "^8.1",
+ "illuminate/http": "^11.36.1|^12.0",
+ "illuminate/support": "^11.36.1|^12.0",
+ "php": "^8.3",
"spatie/laravel-package-tools": "^1.17"
},
"require-dev": {
- "mockery/mockery": "^1.6.12",
- "orchestra/testbench": "^7.0|^8.0|^9.9|^10",
- "pestphp/pest": "^1.23.0|^2.36.0|^3",
+ "mockery/mockery": "^1.6",
+ "orchestra/testbench": "^9.9|^10.0",
+ "pestphp/pest": "^3.0",
"roave/security-advisories": "dev-master"
},
"type": "library",
@@ -6165,9 +6105,6 @@
}
},
"autoload": {
- "files": [
- "src/helpers.php"
- ],
"psr-4": {
"Spatie\\Csp\\": "src"
}
@@ -6188,6 +6125,12 @@
"email": "freek@spatie.be",
"homepage": "https://spatie.be",
"role": "Developer"
+ },
+ {
+ "name": "Sebastian De Deyne",
+ "email": "sebastian@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
}
],
"description": "Add CSP headers to the responses of a Laravel app",
@@ -6202,7 +6145,7 @@
"spatie"
],
"support": {
- "source": "https://github.com/spatie/laravel-csp/tree/2.10.3"
+ "source": "https://github.com/spatie/laravel-csp/tree/3.8.0"
},
"funding": [
{
@@ -6210,7 +6153,7 @@
"type": "custom"
}
],
- "time": "2025-02-14T13:23:32+00:00"
+ "time": "2025-04-08T13:13:05+00:00"
},
{
"name": "spatie/laravel-flash",
diff --git a/config/blade-icons.php b/config/blade-icons.php
deleted file mode 100644
index c892ef5..0000000
--- a/config/blade-icons.php
+++ /dev/null
@@ -1,183 +0,0 @@
- [
-
- // 'default' => [
- //
- // /*
- // |-----------------------------------------------------------------
- // | Icons Path
- // |-----------------------------------------------------------------
- // |
- // | Provide the relative path from your app root to your SVG icons
- // | directory. Icons are loaded recursively so there's no need to
- // | list every sub-directory.
- // |
- // | Relative to the disk root when the disk option is set.
- // |
- // */
- //
- // 'path' => 'resources/svg',
- //
- // /*
- // |-----------------------------------------------------------------
- // | Filesystem Disk
- // |-----------------------------------------------------------------
- // |
- // | Optionally, provide a specific filesystem disk to read
- // | icons from. When defining a disk, the "path" option
- // | starts relatively from the disk root.
- // |
- // */
- //
- // 'disk' => '',
- //
- // /*
- // |-----------------------------------------------------------------
- // | Default Prefix
- // |-----------------------------------------------------------------
- // |
- // | This config option allows you to define a default prefix for
- // | your icons. The dash separator will be applied automatically
- // | to every icon name. It's required and needs to be unique.
- // |
- // */
- //
- // 'prefix' => 'icon',
- //
- // /*
- // |-----------------------------------------------------------------
- // | Fallback Icon
- // |-----------------------------------------------------------------
- // |
- // | This config option allows you to define a fallback
- // | icon when an icon in this set cannot be found.
- // |
- // */
- //
- // 'fallback' => 'far-dot-circle',
- //
- // /*
- // |-----------------------------------------------------------------
- // | Default Set Classes
- // |-----------------------------------------------------------------
- // |
- // | This config option allows you to define some classes which
- // | will be applied by default to all icons within this set.
- // |
- // */
- //
- // 'class' => '',
- //
- // /*
- // |-----------------------------------------------------------------
- // | Default Set Attributes
- // |-----------------------------------------------------------------
- // |
- // | This config option allows you to define some attributes which
- // | will be applied by default to all icons within this set.
- // |
- // */
- //
- // 'attributes' => [
- // // 'width' => 50,
- // // 'height' => 50,
- // ],
- //
- // ],
-
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Global Default Classes
- |--------------------------------------------------------------------------
- |
- | This config option allows you to define some classes which
- | will be applied by default to all icons.
- |
- */
-
- 'class' => '',
-
- /*
- |--------------------------------------------------------------------------
- | Global Default Attributes
- |--------------------------------------------------------------------------
- |
- | This config option allows you to define some attributes which
- | will be applied by default to all icons.
- |
- */
-
- 'attributes' => [
- // 'width' => 50,
- // 'height' => 50,
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Global Fallback Icon
- |--------------------------------------------------------------------------
- |
- | This config option allows you to define a global fallback
- | icon when an icon in any set cannot be found. It can
- | reference any icon from any configured set.
- |
- */
-
- 'fallback' => 'far-dot-circle',
-
- /*
- |--------------------------------------------------------------------------
- | Components
- |--------------------------------------------------------------------------
- |
- | These config options allow you to define some
- | settings related to Blade Components.
- |
- */
-
- 'components' => [
-
- /*
- |----------------------------------------------------------------------
- | Disable Components
- |----------------------------------------------------------------------
- |
- | This config option allows you to disable Blade components
- | completely. It's useful to avoid performance problems
- | when working with large icon libraries.
- |
- */
-
- 'disabled' => false,
-
- /*
- |----------------------------------------------------------------------
- | Default Icon Component Name
- |----------------------------------------------------------------------
- |
- | This config option allows you to define the name
- | for the default Icon class component.
- |
- */
-
- 'default' => 'icon',
-
- ],
-
-];
diff --git a/config/csp.php b/config/csp.php
index 2cd44e8..392267b 100644
--- a/config/csp.php
+++ b/config/csp.php
@@ -1,36 +1,60 @@
SecurityPolicyBasic::class,
+ 'presets' => [
+ MyCspPreset::class,
+ ],
+
+ /**
+ * Register additional global CSP directives here.
+ */
+ 'directives' => [
+ ],
/*
- * This policy which will be put in report only mode. This is great for testing out
- * a new policy or changes to existing csp policy without breaking anything.
+ * These presets which will be put in a report-only policy. This is great for testing out
+ * a new policy or changes to existing CSP policy without breaking anything.
+ */
+ 'report_only_presets' => [
+ //
+ ],
+
+ /**
+ * Register additional global report-only CSP directives here.
*/
- 'report_only_policy' => '',
+ 'report_only_directives' => [
+ // Directive::SCRIPT => [Keyword::UNSAFE_EVAL, Keyword::UNSAFE_INLINE],
+ ],
/*
- * All violations against the policy will be reported to this url.
+ * All violations against a policy will be reported to this url.
* A great service you could use for this is https://report-uri.com/
- *
- * You can override this setting by calling `reportTo` on your policy.
*/
'report_uri' => env('CSP_REPORT_URI', ''),
/*
* Headers will only be added if this setting is set to true.
*/
- 'enabled' => env('CSP_ENABLED', true),
+ 'enabled' => env('CSP_ENABLED', false),
/*
* The class responsible for generating the nonces used in inline tags and headers.
*/
- 'nonce_generator' => Spatie\Csp\Nonce\RandomString::class,
+ 'nonce_generator' => LaravelViteNonceGenerator::class,
+
+ /*
+ * Set false to disable automatic nonce generation and handling.
+ * This is useful when you want to use 'unsafe-inline' for scripts/styles
+ * and cannot add inline nonces.
+ * Note that this will make your CSP policy less secure.
+ */
+ 'nonce_enabled' => env('CSP_NONCE_ENABLED', true),
];
diff --git a/config/default.php b/config/default.php
index ad25605..a4679ea 100644
--- a/config/default.php
+++ b/config/default.php
@@ -2,16 +2,9 @@
use App\Enums\EnvironmentEnum;
use Mazedlx\FeaturePolicy\Value;
-use Spatie\Csp\Keyword;
return [
- 'cache' => [
- 'production' => 604800, // 1 week
- 'staging' => 86400, // 1 day
- 'default' => 1, // 1 second
- ],
-
'services' => [
'userback' => [
'url' => env('USERBACK_URL', 'https://static.userback.io/widget/v1.js'),
@@ -29,12 +22,6 @@
],
],
- 'auth' => [
- 'providers' => [
-
- ],
- ],
-
'feature_policy' => [
'camera' => [
Value::SELF,
@@ -43,98 +30,4 @@
Value::SELF,
],
],
- 'security_headers' => [
- 'connect' => [
- Keyword::SELF,
- 'wss:',
- 'api.userback.io/',
- 'ka-p.fontawesome.com/',
- 'res.cloudinary.com/codebar/',
- 'prod-s3-public.s3-website-bc01.gos3.io/',
- 'unpkg.com/',
- env('APP_URL'),
- 'srv-dev-space-fra-001.fra1.digitaloceanspaces.com/',
- 'srv-dev-space-fra-001.fra1.cdn.digitaloceanspaces.com/',
- 'srv-stage-space-fra-001.fra1.digitaloceanspaces.com/',
- 'srv-stage-space-fra-001.fra1.cdn.digitaloceanspaces.com/',
- 'srv-prod-space-fra-001.fra1.digitaloceanspaces.com/',
- 'srv-prod-space-fra-001.fra1.cdn.digitaloceanspaces.com/',
- ],
- 'default' => [
- Keyword::SELF,
- ],
- 'form_action' => [
- Keyword::SELF,
- ],
- 'img' => [
- Keyword::SELF, 'data:',
- 'blob:', 'localhost/',
- 'prod-s3-public.s3-website-bc01.gos3.io/',
- 'cdn.usefathom.com/',
- 'cdn-eu.usefathom.com/',
- 'www.gravatar.com/avatar/',
- 'secure.gravatar.com/avatar/',
- 'res.cloudinary.com/codebar/',
- env('APP_URL'),
- 'srv-dev-space-fra-001.fra1.digitaloceanspaces.com/',
- 'srv-dev-space-fra-001.fra1.cdn.digitaloceanspaces.com/',
- 'srv-stage-space-fra-001.fra1.digitaloceanspaces.com/',
- 'srv-stage-space-fra-001.fra1.cdn.digitaloceanspaces.com/',
- 'srv-prod-space-fra-001.fra1.digitaloceanspaces.com/',
- 'srv-prod-space-fra-001.fra1.cdn.digitaloceanspaces.com/',
- ],
- 'media' => [
- Keyword::SELF,
- env('APP_URL'),
- 'srv-dev-space-fra-001.fra1.digitaloceanspaces.com/',
- 'srv-dev-space-fra-001.fra1.cdn.digitaloceanspaces.com/',
- 'srv-stage-space-fra-001.fra1.digitaloceanspaces.com/',
- 'srv-stage-space-fra-001.fra1.cdn.digitaloceanspaces.com/',
- 'srv-prod-space-fra-001.fra1.digitaloceanspaces.com/',
- 'srv-prod-space-fra-001.fra1.cdn.digitaloceanspaces.com/',
- ],
- 'object' => [
- Keyword::NONE,
- ],
- 'font' => [
- Keyword::SELF,
- 'data:',
- 'use.typekit.net/',
- 'fonts.gstatic.com/',
- 'fonts.googleapis.com/'.
- 'ka-p.fontawesome.com/',
- 'static.userback.io/',
- 'rsms.me/inter/font-files/',
- 'prod-s3-public.s3-website-bc01.gos3.io/portal-vanta-ch/production',
- ],
- 'script' => [
- Keyword::SELF,
- Keyword::UNSAFE_INLINE,
- Keyword::UNSAFE_EVAL,
- 'cdn.usefathom.com/',
- 'cdn-eu.usefathom.com/',
- 'static.userback.io/',
- 'kit.fontawesome.com/',
- 'cdnjs.cloudflare.com/ajax/libs/dragula/',
- 'prod-s3-public.s3-website-bc01.gos3.io/',
- 'unpkg.com/',
- ],
- 'style_elem' => [
- Keyword::SELF,
- Keyword::UNSAFE_INLINE,
- 'static.userback.io/',
- 'fonts.googleapis.com/',
- 'fonts.sandbox.google.com/',
- 'rsms.me/inter/',
- ],
- 'style' => [
- Keyword::SELF,
- Keyword::UNSAFE_INLINE,
- 'static.userback.io/',
- 'fonts.sandbox.google.com/',
- 'fonts.googleapis.com/'.
- 'rsms.me/inter/',
- ],
-
- ],
];
diff --git a/config/responsecache.php b/config/responsecache.php
index a3cd9e7..4078784 100644
--- a/config/responsecache.php
+++ b/config/responsecache.php
@@ -4,7 +4,7 @@
/*
* Determine if the response cache middleware should be enabled.
*/
- 'enabled' => env('RESPONSE_CACHE_ENABLED', true),
+ 'enabled' => env('RESPONSE_CACHE_ENABLED', false),
/*
* The given class will determinate if a request should be cached. The
diff --git a/package-lock.json b/package-lock.json
index 2b962a7..c32b1ed 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,12 +5,11 @@
"packages": {
"": {
"dependencies": {
- "@alpinejs/focus": "^3.14.9",
+ "@alpinejs/csp": "^3.14.9",
"@tailwindcss/forms": "^0.5.10",
"@tailwindcss/postcss": "^4.1.2",
"@tailwindcss/typography": "^0.5.16",
"@tailwindcss/vite": "^4.0.7",
- "alpinejs": "^3.14.9",
"autoprefixer": "^10.4.21",
"axios": "^1.7.4",
"concurrently": "^9.0.1",
@@ -30,13 +29,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@alpinejs/focus": {
+ "node_modules/@alpinejs/csp": {
"version": "3.14.9",
- "resolved": "https://registry.npmjs.org/@alpinejs/focus/-/focus-3.14.9.tgz",
- "integrity": "sha512-+OMOcdkyEUr3gYWD0ZVqojLotI9D67F5BxGesDfZcPaGtNifXMoq0vt0UVDivGnXQXosOfNpO++GF4NzGrWE9Q==",
+ "resolved": "https://registry.npmjs.org/@alpinejs/csp/-/csp-3.14.9.tgz",
+ "integrity": "sha512-Z/aeDo4Wn4bA4+u77kw9h+nGGW+QzbR2ULTQ1pwOFWk3j2SZtTTI1ZM6FrYOqkFUcwo44e12pY+Y/Va6GTIlFQ==",
"dependencies": {
- "focus-trap": "^6.9.4",
- "tabbable": "^5.3.3"
+ "@vue/reactivity": "~3.1.1"
}
},
"node_modules/@esbuild/aix-ppc64": {
@@ -594,6 +592,18 @@
"linux"
]
},
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz",
+ "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.39.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz",
@@ -654,41 +664,41 @@
}
},
"node_modules/@tailwindcss/node": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.2.tgz",
- "integrity": "sha512-ZwFnxH+1z8Ehh8bNTMX3YFrYdzAv7JLY5X5X7XSFY+G9QGJVce/P9xb2mh+j5hKt8NceuHmdtllJvAHWKtsNrQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.3.tgz",
+ "integrity": "sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA==",
"dependencies": {
"enhanced-resolve": "^5.18.1",
"jiti": "^2.4.2",
"lightningcss": "1.29.2",
- "tailwindcss": "4.1.2"
+ "tailwindcss": "4.1.3"
}
},
"node_modules/@tailwindcss/oxide": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.2.tgz",
- "integrity": "sha512-Zwz//1QKo6+KqnCKMT7lA4bspGfwEgcPAHlSthmahtgrpKDfwRGk8PKQrW8Zg/ofCDIlg6EtjSTKSxxSufC+CQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.3.tgz",
+ "integrity": "sha512-t16lpHCU7LBxDe/8dCj9ntyNpXaSTAgxWm1u2XQP5NiIu4KGSyrDJJRlK9hJ4U9yJxx0UKCVI67MJWFNll5mOQ==",
"engines": {
"node": ">= 10"
},
"optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.1.2",
- "@tailwindcss/oxide-darwin-arm64": "4.1.2",
- "@tailwindcss/oxide-darwin-x64": "4.1.2",
- "@tailwindcss/oxide-freebsd-x64": "4.1.2",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.2",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.1.2",
- "@tailwindcss/oxide-linux-arm64-musl": "4.1.2",
- "@tailwindcss/oxide-linux-x64-gnu": "4.1.2",
- "@tailwindcss/oxide-linux-x64-musl": "4.1.2",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.1.2",
- "@tailwindcss/oxide-win32-x64-msvc": "4.1.2"
+ "@tailwindcss/oxide-android-arm64": "4.1.3",
+ "@tailwindcss/oxide-darwin-arm64": "4.1.3",
+ "@tailwindcss/oxide-darwin-x64": "4.1.3",
+ "@tailwindcss/oxide-freebsd-x64": "4.1.3",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.3",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.3",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.3",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.3",
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.3",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.3",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.3"
}
},
"node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.2.tgz",
- "integrity": "sha512-IxkXbntHX8lwGmwURUj4xTr6nezHhLYqeiJeqa179eihGv99pRlKV1W69WByPJDQgSf4qfmwx904H6MkQqTA8w==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.3.tgz",
+ "integrity": "sha512-cxklKjtNLwFl3mDYw4XpEfBY+G8ssSg9ADL4Wm6//5woi3XGqlxFsnV5Zb6v07dxw1NvEX2uoqsxO/zWQsgR+g==",
"cpu": [
"arm64"
],
@@ -701,9 +711,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.2.tgz",
- "integrity": "sha512-ZRtiHSnFYHb4jHKIdzxlFm6EDfijTCOT4qwUhJ3GWxfDoW2yT3z/y8xg0nE7e72unsmSj6dtfZ9Y5r75FIrlpA==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.3.tgz",
+ "integrity": "sha512-mqkf2tLR5VCrjBvuRDwzKNShRu99gCAVMkVsaEOFvv6cCjlEKXRecPu9DEnxp6STk5z+Vlbh1M5zY3nQCXMXhw==",
"cpu": [
"arm64"
],
@@ -716,9 +726,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.2.tgz",
- "integrity": "sha512-BiKUNZf1A0pBNzndBvnPnBxonCY49mgbOsPfILhcCE5RM7pQlRoOgN7QnwNhY284bDbfQSEOWnFR0zbPo6IDTw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.3.tgz",
+ "integrity": "sha512-7sGraGaWzXvCLyxrc7d+CCpUN3fYnkkcso3rCzwUmo/LteAl2ZGCDlGvDD8Y/1D3ngxT8KgDj1DSwOnNewKhmg==",
"cpu": [
"x64"
],
@@ -731,9 +741,9 @@
}
},
"node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.2.tgz",
- "integrity": "sha512-Z30VcpUfRGkiddj4l5NRCpzbSGjhmmklVoqkVQdkEC0MOelpY+fJrVhzSaXHmWrmSvnX8yiaEqAbdDScjVujYQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.3.tgz",
+ "integrity": "sha512-E2+PbcbzIReaAYZe997wb9rId246yDkCwAakllAWSGqe6VTg9hHle67hfH6ExjpV2LSK/siRzBUs5wVff3RW9w==",
"cpu": [
"x64"
],
@@ -746,9 +756,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.2.tgz",
- "integrity": "sha512-w3wsK1ChOLeQ3gFOiwabtWU5e8fY3P1Ss8jR3IFIn/V0va3ir//hZ8AwURveS4oK1Pu6b8i+yxesT4qWnLVUow==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.3.tgz",
+ "integrity": "sha512-GvfbJ8wjSSjbLFFE3UYz4Eh8i4L6GiEYqCtA8j2Zd2oXriPuom/Ah/64pg/szWycQpzRnbDiJozoxFU2oJZyfg==",
"cpu": [
"arm"
],
@@ -761,9 +771,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.2.tgz",
- "integrity": "sha512-oY/u+xJHpndTj7B5XwtmXGk8mQ1KALMfhjWMMpE8pdVAznjJsF5KkCceJ4Fmn5lS1nHMCwZum5M3/KzdmwDMdw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.3.tgz",
+ "integrity": "sha512-35UkuCWQTeG9BHcBQXndDOrpsnt3Pj9NVIB4CgNiKmpG8GnCNXeMczkUpOoqcOhO6Cc/mM2W7kaQ/MTEENDDXg==",
"cpu": [
"arm64"
],
@@ -776,9 +786,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.2.tgz",
- "integrity": "sha512-k7G6vcRK/D+JOWqnKzKN/yQq1q4dCkI49fMoLcfs2pVcaUAXEqCP9NmA8Jv+XahBv5DtDjSAY3HJbjosEdKczg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.3.tgz",
+ "integrity": "sha512-dm18aQiML5QCj9DQo7wMbt1Z2tl3Giht54uVR87a84X8qRtuXxUqnKQkRDK5B4bCOmcZ580lF9YcoMkbDYTXHQ==",
"cpu": [
"arm64"
],
@@ -791,9 +801,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.2.tgz",
- "integrity": "sha512-fLL+c678TkYKgkDLLNxSjPPK/SzTec7q/E5pTwvpTqrth867dftV4ezRyhPM5PaiCqX651Y8Yk0wRQMcWUGnmQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.3.tgz",
+ "integrity": "sha512-LMdTmGe/NPtGOaOfV2HuO7w07jI3cflPrVq5CXl+2O93DCewADK0uW1ORNAcfu2YxDUS035eY2W38TxrsqngxA==",
"cpu": [
"x64"
],
@@ -806,9 +816,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.2.tgz",
- "integrity": "sha512-0tU1Vjd1WucZ2ooq6y4nI9xyTSaH2g338bhrqk+2yzkMHskBm+pMsOCfY7nEIvALkA1PKPOycR4YVdlV7Czo+A==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.3.tgz",
+ "integrity": "sha512-aalNWwIi54bbFEizwl1/XpmdDrOaCjRFQRgtbv9slWjmNPuJJTIKPHf5/XXDARc9CneW9FkSTqTbyvNecYAEGw==",
"cpu": [
"x64"
],
@@ -821,9 +831,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.2.tgz",
- "integrity": "sha512-r8QaMo3QKiHqUcn+vXYCypCEha+R0sfYxmaZSgZshx9NfkY+CHz91aS2xwNV/E4dmUDkTPUag7sSdiCHPzFVTg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.3.tgz",
+ "integrity": "sha512-PEj7XR4OGTGoboTIAdXicKuWl4EQIjKHKuR+bFy9oYN7CFZo0eu74+70O4XuERX4yjqVZGAkCdglBODlgqcCXg==",
"cpu": [
"arm64"
],
@@ -836,9 +846,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.2.tgz",
- "integrity": "sha512-lYCdkPxh9JRHXoBsPE8Pu/mppUsC2xihYArNAESub41PKhHTnvn6++5RpmFM+GLSt3ewyS8fwCVvht7ulWm6cw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.3.tgz",
+ "integrity": "sha512-T8gfxECWDBENotpw3HR9SmNiHC9AOJdxs+woasRZ8Q/J4VHN0OMs7F+4yVNZ9EVN26Wv6mZbK0jv7eHYuLJLwA==",
"cpu": [
"x64"
],
@@ -851,15 +861,15 @@
}
},
"node_modules/@tailwindcss/postcss": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.2.tgz",
- "integrity": "sha512-vgkMo6QRhG6uv97im6Y4ExDdq71y9v2IGZc+0wn7lauQFYJM/1KdUVhrOkexbUso8tUsMOWALxyHVkQEbsM7gw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.3.tgz",
+ "integrity": "sha512-6s5nJODm98F++QT49qn8xJKHQRamhYHfMi3X7/ltxiSQ9dyRsaFSfFkfaMsanWzf+TMYQtbk8mt5f6cCVXJwfg==",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
- "@tailwindcss/node": "4.1.2",
- "@tailwindcss/oxide": "4.1.2",
+ "@tailwindcss/node": "4.1.3",
+ "@tailwindcss/oxide": "4.1.3",
"postcss": "^8.4.41",
- "tailwindcss": "4.1.2"
+ "tailwindcss": "4.1.3"
}
},
"node_modules/@tailwindcss/typography": {
@@ -877,13 +887,13 @@
}
},
"node_modules/@tailwindcss/vite": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.2.tgz",
- "integrity": "sha512-3r/ZdMW0gxY8uOx1To0lpYa4coq4CzINcCX4laM1rS340Kcn0ac4A/MMFfHN8qba51aorZMYwMcOxYk4wJ9FYg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.3.tgz",
+ "integrity": "sha512-lUI/QaDxLtlV52Lho6pu07CG9pSnRYLOPmKGIQjyHdTBagemc6HmgZxyjGAQ/5HMPrNeWBfTVIpQl0/jLXvWHQ==",
"dependencies": {
- "@tailwindcss/node": "4.1.2",
- "@tailwindcss/oxide": "4.1.2",
- "tailwindcss": "4.1.2"
+ "@tailwindcss/node": "4.1.3",
+ "@tailwindcss/oxide": "4.1.3",
+ "tailwindcss": "4.1.3"
},
"peerDependencies": {
"vite": "^5.2.0 || ^6"
@@ -907,14 +917,6 @@
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
"integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA=="
},
- "node_modules/alpinejs": {
- "version": "3.14.9",
- "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.14.9.tgz",
- "integrity": "sha512-gqSOhTEyryU9FhviNqiHBHzgjkvtukq9tevew29fTj+ofZtfsYriw4zPirHHOAy9bw8QoL3WGhyk7QqCh5AYlw==",
- "dependencies": {
- "@vue/reactivity": "~3.1.1"
- }
- },
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -1032,9 +1034,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001710",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001710.tgz",
- "integrity": "sha512-B5C0I0UmaGqHgo5FuqJ7hBd4L57A4dDD+Xi+XX1nXOoxGeDdY4Ko38qJYOyqznBVJEqON5p8P1x5zRR3+rsnxA==",
+ "version": "1.0.30001713",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz",
+ "integrity": "sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==",
"funding": [
{
"type": "opencollective",
@@ -1181,9 +1183,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.132",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.132.tgz",
- "integrity": "sha512-QgX9EBvWGmvSRa74zqfnG7+Eno0Ak0vftBll0Pt2/z5b3bEGYL6OUXLgKPtvx73dn3dvwrlyVkjPKRRlhLYTEg=="
+ "version": "1.5.135",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.135.tgz",
+ "integrity": "sha512-8gXUdEmvb+WCaYUhA0Svr08uSeRjM2w3x5uHOc1QbaEVzJXB8rgm5eptieXzyKoVEtinLvW6MtTcurA65PeS1Q=="
},
"node_modules/emoji-regex": {
"version": "8.0.0",
@@ -1290,14 +1292,6 @@
"node": ">=6"
}
},
- "node_modules/focus-trap": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-6.9.4.tgz",
- "integrity": "sha512-v2NTsZe2FF59Y+sDykKY+XjqZ0cPfhq/hikWVL88BqLivnNiEffAsac6rP6H45ff9wG9LL5ToiDqrLEP9GX9mw==",
- "dependencies": {
- "tabbable": "^5.3.3"
- }
- },
"node_modules/follow-redirects": {
"version": "1.15.9",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
@@ -1642,10 +1636,10 @@
"url": "https://opencollective.com/parcel"
}
},
- "node_modules/lightningcss-linux-x64-musl": {
+ "node_modules/lightningcss-linux-x64-gnu": {
"version": "1.29.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz",
- "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz",
+ "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==",
"cpu": [
"x64"
],
@@ -1661,16 +1655,16 @@
"url": "https://opencollective.com/parcel"
}
},
- "node_modules/lightningcss-win32-arm64-msvc": {
+ "node_modules/lightningcss-linux-x64-musl": {
"version": "1.29.2",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz",
- "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz",
+ "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==",
"cpu": [
- "arm64"
+ "x64"
],
"optional": true,
"os": [
- "win32"
+ "linux"
],
"engines": {
"node": ">= 12.0.0"
@@ -1680,12 +1674,12 @@
"url": "https://opencollective.com/parcel"
}
},
- "node_modules/lightningcss-win32-x64-msvc": {
+ "node_modules/lightningcss-win32-arm64-msvc": {
"version": "1.29.2",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz",
- "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz",
+ "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==",
"cpu": [
- "x64"
+ "arm64"
],
"optional": true,
"os": [
@@ -1699,16 +1693,16 @@
"url": "https://opencollective.com/parcel"
}
},
- "node_modules/lightningcss/node_modules/lightningcss-linux-x64-gnu": {
+ "node_modules/lightningcss-win32-x64-msvc": {
"version": "1.29.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz",
- "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz",
+ "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==",
"cpu": [
"x64"
],
"optional": true,
"os": [
- "linux"
+ "win32"
],
"engines": {
"node": ">= 12.0.0"
@@ -1914,18 +1908,6 @@
"fsevents": "~2.3.2"
}
},
- "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.39.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz",
- "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ]
- },
"node_modules/rxjs": {
"version": "7.8.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
@@ -1991,15 +1973,10 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/tabbable": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz",
- "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA=="
- },
"node_modules/tailwindcss": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.2.tgz",
- "integrity": "sha512-VCsK+fitIbQF7JlxXaibFhxrPq4E2hDcG8apzHUdWFMCQWD8uLdlHg4iSkZ53cgLCCcZ+FZK7vG8VjvLcnBgKw=="
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.3.tgz",
+ "integrity": "sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g=="
},
"node_modules/tapable": {
"version": "2.2.1",
@@ -2057,9 +2034,9 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"node_modules/vite": {
- "version": "6.2.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz",
- "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==",
+ "version": "6.2.6",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz",
+ "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==",
"dependencies": {
"esbuild": "^0.25.0",
"postcss": "^8.5.3",
diff --git a/package.json b/package.json
index 73f5c16..5abfb37 100644
--- a/package.json
+++ b/package.json
@@ -6,18 +6,16 @@
"build": "vite build"
},
"dependencies": {
- "axios": "^1.7.4",
- "concurrently": "^9.0.1",
- "@alpinejs/focus": "^3.14.9",
+ "@alpinejs/csp": "^3.14.9",
"@tailwindcss/forms": "^0.5.10",
"@tailwindcss/postcss": "^4.1.2",
"@tailwindcss/typography": "^0.5.16",
"@tailwindcss/vite": "^4.0.7",
- "alpinejs": "^3.14.9",
"autoprefixer": "^10.4.21",
+ "axios": "^1.7.4",
+ "concurrently": "^9.0.1",
"laravel-vite-plugin": "^1.2.0",
"tailwindcss": "^4.1.2",
"vite": "^6.2.5"
- },
- "optionalDependencies": {}
+ }
}
diff --git a/resources/css/app.css b/resources/css/app.css
index b4f2e80..ee1f43c 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -14,18 +14,10 @@
font-style: normal;
font-weight: 400;
font-display: swap;
- src: url('/fonts/poppins/poppins-regular.woff2') format('woff2');
-}
-
-@theme {
- --font-sans: 'Poppins', ui-sans-serif, system-ui, sans-serif;
-}
-
-@defaults fontFamily {
- sans: var(--font-sans);
+ src: url('../fonts/poppins/poppins-regular.woff2') format('woff2');
}
body {
+ font-family: 'Poppins', ui-sans-serif, system-ui, sans-serif;
@apply text-gray-800;
}
-
diff --git a/resources/fonts/poppins/poppins-regular.woff2 b/resources/fonts/poppins/poppins-regular.woff2
new file mode 100644
index 0000000..b69e009
Binary files /dev/null and b/resources/fonts/poppins/poppins-regular.woff2 differ
diff --git a/resources/js/app.js b/resources/js/app.js
index 93a90f0..2b1e019 100644
--- a/resources/js/app.js
+++ b/resources/js/app.js
@@ -1,6 +1,18 @@
import '../css/app.css'
-import Alpine from 'alpinejs';
+import Alpine from '@alpinejs/csp'
-window.Alpine = Alpine;
-Alpine.start();
+window.Alpine = Alpine
+
+Alpine.data('navigation', () => ({
+ open: false,
+ toggle() {
+ this.open = !this.open
+ },
+
+ get icon_rotate() {
+ return this.open ? 'rotate-180' : 'rotate-0'
+ },
+}))
+
+Alpine.start()
\ No newline at end of file
diff --git a/resources/views/layouts/_partials/_fathom.blade.php b/resources/views/layouts/_partials/_fathom.blade.php
index 5e44216..dd10c80 100644
--- a/resources/views/layouts/_partials/_fathom.blade.php
+++ b/resources/views/layouts/_partials/_fathom.blade.php
@@ -6,5 +6,5 @@
@endphp
@if (in_array(app()->environment(), $environments) && $siteId)
-
-@endif
+
+@endif
\ No newline at end of file
diff --git a/resources/views/layouts/_partials/_navigation.blade.php b/resources/views/layouts/_partials/_navigation.blade.php
index 979c6c1..4aa0cb3 100644
--- a/resources/views/layouts/_partials/_navigation.blade.php
+++ b/resources/views/layouts/_partials/_navigation.blade.php
@@ -1,4 +1,4 @@
-