diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php
index 5263579a..de04906b 100644
--- a/app/Http/Middleware/HandleInertiaRequests.php
+++ b/app/Http/Middleware/HandleInertiaRequests.php
@@ -3,7 +3,7 @@
 namespace App\Http\Middleware;
 
 use App\Http\Resources\UserResource;
-use App\Module\ModuleSettings;
+use Modules\Module\ModuleSettings;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Session;
 use Inertia\Middleware;
diff --git a/app/Providers/BaseServiceProvider.php b/app/Providers/BaseServiceProvider.php
index 65d77dd9..4ffd4b12 100644
--- a/app/Providers/BaseServiceProvider.php
+++ b/app/Providers/BaseServiceProvider.php
@@ -23,6 +23,7 @@ class BaseServiceProvider extends ServiceProvider
     {
         Blade::componentNamespace('App\\View\\Ui', 'ui');
         Blade::componentNamespace('App\\View\\Page', 'page');
+        Blade::componentNamespace('App\\View\\Form', 'form');
 
         app(DashboardFactory::class)->register(AgeGroupCountBlock::class);
         app(DashboardFactory::class)->register(MemberPaymentBlock::class);
diff --git a/app/Setting/Actions/StoreAction.php b/app/Setting/Actions/StoreAction.php
index b7e66600..d867d839 100644
--- a/app/Setting/Actions/StoreAction.php
+++ b/app/Setting/Actions/StoreAction.php
@@ -7,6 +7,7 @@ use Illuminate\Http\RedirectResponse;
 use Lorisleiva\Actions\ActionRequest;
 use Lorisleiva\Actions\Concerns\AsAction;
 
+/** @deprecated */
 class StoreAction
 {
     use AsAction;
diff --git a/app/Setting/Actions/ViewAction.php b/app/Setting/Actions/ViewAction.php
index 459723b6..30aaae34 100644
--- a/app/Setting/Actions/ViewAction.php
+++ b/app/Setting/Actions/ViewAction.php
@@ -8,6 +8,7 @@ use Inertia\Inertia;
 use Inertia\Response;
 use Lorisleiva\Actions\Concerns\AsAction;
 
+/** @deprecated */
 class ViewAction
 {
     use AsAction;
diff --git a/app/Setting/LocalSettings.php b/app/Setting/LocalSettings.php
index 46618f37..daaf1b46 100644
--- a/app/Setting/LocalSettings.php
+++ b/app/Setting/LocalSettings.php
@@ -10,7 +10,7 @@ abstract class LocalSettings extends Settings
 
     public function url(): string
     {
-        return route('setting.view', ['settingGroup' => $this->group()]);
+        return url('setting/' . $this->group());
     }
 
     /**
diff --git a/app/Setting/SettingFactory.php b/app/Setting/SettingFactory.php
index 35424065..3008212a 100644
--- a/app/Setting/SettingFactory.php
+++ b/app/Setting/SettingFactory.php
@@ -2,9 +2,8 @@
 
 namespace App\Setting;
 
-use App\Invoice\InvoiceSettings;
-use App\Setting\Contracts\Storeable;
 use Illuminate\Routing\Router;
+use Illuminate\Support\Collection;
 
 class SettingFactory
 {
@@ -26,16 +25,11 @@ class SettingFactory
     }
 
     /**
-     * @return array<int, array{url: string, is_active: bool}>
+     * @return Collection<int, LocalSettings>
      */
-    public function getShare(): array
+    public function all(): Collection
     {
-        return collect($this->settings)->map(fn ($setting) => [
-            'url' => (new $setting)->url(),
-            'is_active' => url(request()->path()) === (new $setting)->url(),
-            'title' => $setting::title(),
-        ])
-            ->toArray();
+        return collect($this->settings)->map(fn ($setting) => new $setting);
     }
 
     public function resolveGroupName(string $name): LocalSettings
diff --git a/app/Setting/SettingServiceProvider.php b/app/Setting/SettingServiceProvider.php
index bd297cb2..b20a889a 100644
--- a/app/Setting/SettingServiceProvider.php
+++ b/app/Setting/SettingServiceProvider.php
@@ -6,10 +6,8 @@ use App\Fileshare\FileshareSettings;
 use App\Form\FormSettings;
 use App\Invoice\InvoiceSettings;
 use App\Mailgateway\MailgatewaySettings;
-use App\Module\ModuleSettings;
+use Modules\Module\ModuleSettings;
 use App\Prevention\PreventionSettings;
-use App\Setting\Actions\StoreAction;
-use App\Setting\Actions\ViewAction;
 use Illuminate\Routing\Router;
 use Illuminate\Support\ServiceProvider;
 
@@ -24,9 +22,6 @@ class SettingServiceProvider extends ServiceProvider
     {
         app()->singleton(SettingFactory::class, fn () => new SettingFactory());
         app(Router::class)->bind('settingGroup', fn ($param) => app(SettingFactory::class)->resolveGroupName($param));
-        app(Router::class)->middleware(['web', 'auth:web'])->name('setting.view')->get('/setting/{settingGroup}', ViewAction::class);
-        app(Router::class)->middleware(['web', 'auth:web'])->name('setting.data')->get('/setting/{settingGroup}/data', ViewAction::class);
-        app(Router::class)->middleware(['web', 'auth:web'])->name('setting.store')->post('/setting/{settingGroup}', StoreAction::class);
     }
 
     /**
diff --git a/app/View/Form/Hint.php b/app/View/Form/Hint.php
new file mode 100644
index 00000000..91e46b5e
--- /dev/null
+++ b/app/View/Form/Hint.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace App\View\Form;
+
+use App\View\Traits\HasFormDimensions;
+use Illuminate\View\Component;
+
+class Hint extends Component
+{
+
+    use HasFormDimensions;
+
+    public function __construct(
+        public bool $required = false,
+    ) {
+    }
+
+    public function render()
+    {
+        return <<<'HTML'
+            <div class="h-full items-center flex absolute top-0 right-0">
+                <div x-tooltip.raw="{{$slot}}" class="mr-2">
+                    <x-ui::sprite src="info-button" class="w-5 h-5 text-primary-700"></x-ui::sprite>
+                </div>
+            </div>
+        HTML;
+    }
+}
diff --git a/app/View/Form/Label.php b/app/View/Form/Label.php
new file mode 100644
index 00000000..39864086
--- /dev/null
+++ b/app/View/Form/Label.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\View\Form;
+
+use App\View\Traits\HasFormDimensions;
+use Illuminate\View\Component;
+
+class Label extends Component
+{
+
+    use HasFormDimensions;
+
+    public function __construct(
+        public bool $required = false,
+    ) {
+    }
+
+    public function render()
+    {
+        return <<<'HTML'
+            <span class="font-semibold leading-none text-gray-400 group-[.size-default]:text-sm group-[.size-sm]:text-xs">
+                {{ $slot }}
+                @if ($required)
+                <span x-if="required" class="text-red-800">&nbsp;*</span>
+                @endif
+            </span>
+        HTML;
+    }
+}
diff --git a/app/View/Form/Lever.php b/app/View/Form/Lever.php
new file mode 100644
index 00000000..7c0a3ed0
--- /dev/null
+++ b/app/View/Form/Lever.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace App\View\Form;
+
+use App\View\Traits\HasFormDimensions;
+use Illuminate\View\Component;
+
+class Lever extends Component
+{
+
+    use HasFormDimensions;
+
+    public string $id;
+
+    public function __construct(
+        public string $name,
+        public string $size = 'default',
+        public $value = null,
+        public ?string $hint = null,
+        public bool $disabled = false,
+        public bool $required = false,
+        public string $label = '',
+    ) {
+        $this->id = str()->uuid()->toString();
+    }
+
+    public function render()
+    {
+        return <<<'HTML'
+            <label class="flex flex-col items-start group {{$heightClass}} " for="{{$id}}" style="{{$heightVars}}">
+                @if ($label)
+                <x-form::label :required="$required">{{$label}}</x-form::label>
+                @endif
+                <span class="relative flex-none flex h-[var(--height)] @if($hint) pr-8 @endif">
+                    <input id="{{$id}}" type="checkbox" name="{{$name}}" value="{{$value}}" @if($disabled) disabled="disabled" @endif class="absolute peer opacity-0" {{ $attributes }} />
+                    <span class="relative cursor-pointer h-full w-[calc(var(--height)*2)] rounded peer-focus:bg-red-500 duration-300 bg-gray-700 peer-checked:bg-primary-700"></span>
+                    <span class="absolute h-full top-0 left-0 flex-none flex justify-center items-center aspect-square">
+                        <x-ui::sprite
+                            class="relative text-gray-400 flex-none text-white duration-300 group-[.size-default]:size-3 group-[.size-sm]:size-2"
+                            src="check"
+                        ></x-ui::sprite>
+                    </span>
+                    <span class="absolute h-full top-0 left-[var(--height)] flex-none flex justify-center items-center aspect-square">
+                        <x-ui::sprite
+                            class="relative text-gray-400 flex-none text-white duration-300 group-[.size-default]:size-3 group-[.size-sm]:size-2"
+                            src="close"
+                        ></x-ui::sprite>
+                    </span>
+                    <var class="absolute duration-300 bg-gray-400 rounded
+                        top-[var(--padding)] left-[var(--padding)]
+                        size-[calc(var(--height)-var(--padding)*2)] peer-checked:left-[calc(var(--height)+var(--padding))]"
+                    ></var>
+                    @if($hint)
+                    <x-form::hint>{{$hint}}</x-form::hint>
+                    @endif
+                </span>
+            </label>
+        HTML;
+    }
+}
diff --git a/app/View/Form/SaveButton.php b/app/View/Form/SaveButton.php
new file mode 100644
index 00000000..06d0d141
--- /dev/null
+++ b/app/View/Form/SaveButton.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace App\View\Form;
+
+use Illuminate\View\Component;
+
+class SaveButton extends Component
+{
+
+    public function __construct(public string $form = '')
+    {
+    }
+
+    public function render()
+    {
+        return <<<'HTML'
+            <button @if($form) form="{{$form}}" @endif type="submit" class="flex items-center transition-all justify-center w-8 h-8 bg-primary-700 hover:bg-primary-600 rounded" x-tooltip="`speichern`">
+                <x-ui::sprite class="w-4 h-4 text-white" src="save"></x-ui::sprite>
+            </button>
+        HTML;
+    }
+}
diff --git a/app/View/Page/SettingLayout.php b/app/View/Page/SettingLayout.php
new file mode 100644
index 00000000..a26a0da1
--- /dev/null
+++ b/app/View/Page/SettingLayout.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace App\View\Page;
+
+use App\Setting\SettingFactory;
+use Illuminate\View\Component;
+
+class SettingLayout extends Component
+{
+
+    public array $entries;
+
+    public function __construct(public string $active)
+    {
+        $this->entries = app(SettingFactory::class)->all()
+            ->map(fn ($setting) => [
+                'url' => $setting->url(),
+                'is_active' => get_class($setting) === $active,
+                'title' => $setting->title(),
+            ])->toArray();
+    }
+
+    public function render()
+    {
+        return <<<'HTML'
+            <x-page::layout>
+                <x-slot:right>
+                    {{ $right }}
+                </x-slot:right>
+                <div class="flex grow relative">
+                    <x-ui::menulist :entries="$entries"></x-ui::menulist>
+                    {{ $slot }}
+                </div>
+            </x-page::layout>
+        HTML;
+    }
+}
diff --git a/app/View/Traits/HasFormDimensions.php b/app/View/Traits/HasFormDimensions.php
new file mode 100644
index 00000000..9cdaec4e
--- /dev/null
+++ b/app/View/Traits/HasFormDimensions.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace App\View\Traits;
+
+trait HasFormDimensions
+{
+
+    public function heightVars(): string
+    {
+        return data_get([
+            'default' => '--height: 35px; --padding: 3px;',
+            'sm' => '--height: 23px; --padding: 2px;',
+        ], $this->size);
+    }
+
+    public function heightClass(): string
+    {
+        return data_get([
+            'default' => 'size-default',
+            'sm' => 'size-sm',
+        ], $this->size);
+    }
+}
diff --git a/app/View/Ui/Menulist.php b/app/View/Ui/Menulist.php
new file mode 100644
index 00000000..ca01b6e8
--- /dev/null
+++ b/app/View/Ui/Menulist.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace App\View\Ui;
+
+use Illuminate\View\Component;
+
+class Menulist extends Component
+{
+
+    public function __construct(public array $entries)
+    {
+    }
+
+    public function activeClass($entry): string
+    {
+        return $entry['is_active'] ? 'bg-gray-600' : '';
+    }
+
+    public function render()
+    {
+        return <<<'HTML'
+            <div class="p-6 bg-gray-700 border-r border-gray-600 flex-none w-maxc flex flex-col justify-between">
+                <div class="grid gap-1">
+                    @foreach($entries as $entry)
+                    <a href="{{$entry['url']}}" class="rounded py-1 px-3 text-gray-400 duration-200 hover:bg-gray-600 {{$activeClass($entry)}}" @if($entry['is_active']) data-active @endif>
+                        {{$entry['title']}}
+                    </a>
+                    @endforeach
+                </div>
+                <slot name="bottom"></slot>
+            </div>
+        HTML;
+    }
+}
diff --git a/config/app.php b/config/app.php
index 6330d6d8..585fa599 100644
--- a/config/app.php
+++ b/config/app.php
@@ -178,6 +178,7 @@ return [
         // App\Dashboard\DashboardServiceProvider::class,
         App\Providers\PluginServiceProvider::class,
         Modules\Dashboard\DashboardServiceProvider::class,
+        Modules\Module\ModuleServiceProvider::class,
         App\Providers\BaseServiceProvider::class,
     ],
 
diff --git a/modules/Module/Components/SettingView.php b/modules/Module/Components/SettingView.php
new file mode 100644
index 00000000..48fa0b86
--- /dev/null
+++ b/modules/Module/Components/SettingView.php
@@ -0,0 +1,57 @@
+<?php
+
+namespace Modules\Module\Components;
+
+use App\Module\Module;
+use Illuminate\Validation\Rule;
+use Livewire\Component;
+use Modules\Module\ModuleSettings;
+
+class SettingView extends Component
+{
+
+    public array $modules;
+    public array $all;
+    public $settingClass = ModuleSettings::class;
+
+    public function rules(): array
+    {
+        return [
+            'modules' => 'present|array',
+            'modules.*' => ['string', Rule::in(Module::values())],
+        ];
+    }
+
+    public function mount(): void
+    {
+        $this->modules = app(ModuleSettings::class)->modules;
+        $this->all = Module::forSelect();
+    }
+
+    public function save(): void
+    {
+        app(ModuleSettings::class)->fill($this->validate())->save();
+        $this->dispatch('success', 'Einstellungen gespeichert.');
+    }
+
+    public function render()
+    {
+        return <<<'HTML'
+            <x-page::setting-layout :active="$settingClass">
+                <x-slot:right>
+                    <x-form::save-button form="modulesettingform"></x-form::save-button>
+                </x-slot:right>
+                <form id="modulesettingform" class="grow p-6 grid grid-cols-2 gap-3 items-start content-start"
+                    wire:submit.prevent="save">
+                    <div class="col-span-full text-gray-100 mb-3">
+                        <p class="text-sm">Hier kannst du Funktionen innerhalb von Adrema (Module) aktivieren oder deaktivieren
+                            und so den Funktionsumfang auf deine Bedürfnisse anpassen.</p>
+                    </div>
+                    @foreach ($all as $module)
+                    <x-form::lever wire:model="modules" hint="lala" :value="$module['id']" name="modules" size="sm" :label="$module['name']"></x-form::lever>
+                    @endforeach
+                </form>
+            </x-page::setting-layout>
+        HTML;
+    }
+}
diff --git a/modules/Module/ModuleServiceProvider.php b/modules/Module/ModuleServiceProvider.php
new file mode 100644
index 00000000..61623459
--- /dev/null
+++ b/modules/Module/ModuleServiceProvider.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Modules\Module;
+
+use Illuminate\Routing\Router;
+use Illuminate\Support\ServiceProvider;
+use Modules\Module\Components\SettingView;
+
+class ModuleServiceProvider extends ServiceProvider
+{
+    /**
+     * Register services.
+     *
+     * @return void
+     */
+    public function register()
+    {
+    }
+
+    /**
+     * Bootstrap services.
+     *
+     * @return void
+     */
+    public function boot()
+    {
+        app(Router::class)->middleware(['web', 'auth:web'])->group(function ($router) {
+            $router->get('/setting/module', SettingView::class)->name('setting.module');
+        });
+    }
+}
diff --git a/modules/Module/ModuleSettingTest.php b/modules/Module/ModuleSettingTest.php
new file mode 100644
index 00000000..912daa22
--- /dev/null
+++ b/modules/Module/ModuleSettingTest.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Modules\Module;
+
+use App\View\Setting;
+use Illuminate\Foundation\Testing\DatabaseTransactions;
+use Livewire\Livewire;
+use Modules\Module\Components\SettingView;
+use Tests\TestCase;
+
+uses(TestCase::class);
+uses(DatabaseTransactions::class);
+
+it('it renders page', function () {
+    test()->withoutExceptionHandling()->login()->loginNami();
+
+    test()->get('/setting/module')->assertSeeLivewire(SettingView::class);
+});
+
+it('it displays acive modules', function () {
+    test()->withoutExceptionHandling()->login()->loginNami();
+    app(ModuleSettings::class)->fill(['modules' => ['bill']])->save();
+
+    Livewire::test(SettingView::class)
+        ->assertSee('Module')
+        ->assertSee('Ausbildung')
+        ->assertSet('modules', fn ($modules) => $modules === ['bill'])
+        ->assertSeeHtml('data-active');
+});
+
+it('it saves modules', function () {
+    test()->withoutExceptionHandling()->login()->loginNami();
+    app(ModuleSettings::class)->fill(['modules' => ['bill']])->save();
+
+    Livewire::test(SettingView::class)
+        ->set('modules', ['bill', 'course'])
+        ->call('save')
+        ->assertDispatched('success', 'Einstellungen gespeichert.');
+
+    test()->assertEquals(['bill', 'course'], app(ModuleSettings::class)->modules);
+});
+
+it('test module must exist', function () {
+    test()->withoutExceptionHandling()->login()->loginNami();
+    app(ModuleSettings::class)->fill(['modules' => ['bill']])->save();
+
+    Livewire::test(SettingView::class)
+        ->set('modules', ['bill', 'lala'])
+        ->call('save')
+        ->assertHasErrors('modules.1');
+});
diff --git a/app/Module/ModuleSettings.php b/modules/Module/ModuleSettings.php
similarity index 97%
rename from app/Module/ModuleSettings.php
rename to modules/Module/ModuleSettings.php
index 45556149..75abff0f 100644
--- a/app/Module/ModuleSettings.php
+++ b/modules/Module/ModuleSettings.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Module;
+namespace Modules\Module;
 
 use App\Setting\Contracts\Storeable;
 use App\Setting\LocalSettings;
diff --git a/package-lock.json b/package-lock.json
index dfa325ea..94bcd631 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,21 +10,26 @@
                 "@editorjs/nested-list": "^1.4.2",
                 "@editorjs/paragraph": "^2.11.3",
                 "@inertiajs/vue3": "^1.0.14",
+                "@ryangjchandler/alpine-tooltip": "^2.0.1",
                 "@tailwindcss/forms": "^0.5.7",
                 "@tailwindcss/typography": "^0.5.10",
                 "@vitejs/plugin-vue": "^4.6.2",
                 "change-case": "^4.1.2",
                 "editorjs-alert": "^1.1.3",
                 "floating-vue": "^2.0.0",
+                "install": "^0.13.0",
                 "laravel-echo": "^1.15.3",
                 "laravel-vite-plugin": "^0.7.8",
                 "lodash": "^4.17.21",
                 "merge": "^2.1.1",
+                "npm": "^10.9.0",
                 "pinia": "^2.1.7",
                 "postcss-import": "^14.1.0",
                 "prettier": "^2.8.8",
                 "pusher-js": "^8.3.0",
                 "svg-sprite": "^2.0.2",
+                "tippy.js": "^6.3.7",
+                "toastify-js": "^1.12.0",
                 "vite": "^4.5.2",
                 "vue": "^3.3.4",
                 "vue-toastification": "^2.0.0-rc.5",
@@ -802,6 +807,15 @@
                 "node": ">=14"
             }
         },
+        "node_modules/@popperjs/core": {
+            "version": "2.11.8",
+            "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+            "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/popperjs"
+            }
+        },
         "node_modules/@resvg/resvg-js": {
             "version": "2.6.2",
             "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz",
@@ -1004,6 +1018,14 @@
                 "node": ">= 10"
             }
         },
+        "node_modules/@ryangjchandler/alpine-tooltip": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/@ryangjchandler/alpine-tooltip/-/alpine-tooltip-2.0.1.tgz",
+            "integrity": "sha512-Hv9C02bUE4JSewZhfceYSHw+oiBuUF3ITCMKqmiFWJ3bvjhHZzM8YEPpNQVMfEVRR4K4JJYJD16re4stGIjoyg==",
+            "dependencies": {
+                "tippy.js": "^6.3.1"
+            }
+        },
         "node_modules/@tailwindcss/forms": {
             "version": "0.5.10",
             "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz",
@@ -2689,6 +2711,14 @@
             "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
             "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
         },
+        "node_modules/install": {
+            "version": "0.13.0",
+            "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz",
+            "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==",
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
         "node_modules/is-arrayish": {
             "version": "0.3.2",
             "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
@@ -3151,6 +3181,2897 @@
                 "node": ">=0.10.0"
             }
         },
+        "node_modules/npm": {
+            "version": "10.9.0",
+            "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.0.tgz",
+            "integrity": "sha512-ZanDioFylI9helNhl2LNd+ErmVD+H5I53ry41ixlLyCBgkuYb+58CvbAp99hW+zr5L9W4X7CchSoeqKdngOLSw==",
+            "bundleDependencies": [
+                "@isaacs/string-locale-compare",
+                "@npmcli/arborist",
+                "@npmcli/config",
+                "@npmcli/fs",
+                "@npmcli/map-workspaces",
+                "@npmcli/package-json",
+                "@npmcli/promise-spawn",
+                "@npmcli/redact",
+                "@npmcli/run-script",
+                "@sigstore/tuf",
+                "abbrev",
+                "archy",
+                "cacache",
+                "chalk",
+                "ci-info",
+                "cli-columns",
+                "fastest-levenshtein",
+                "fs-minipass",
+                "glob",
+                "graceful-fs",
+                "hosted-git-info",
+                "ini",
+                "init-package-json",
+                "is-cidr",
+                "json-parse-even-better-errors",
+                "libnpmaccess",
+                "libnpmdiff",
+                "libnpmexec",
+                "libnpmfund",
+                "libnpmhook",
+                "libnpmorg",
+                "libnpmpack",
+                "libnpmpublish",
+                "libnpmsearch",
+                "libnpmteam",
+                "libnpmversion",
+                "make-fetch-happen",
+                "minimatch",
+                "minipass",
+                "minipass-pipeline",
+                "ms",
+                "node-gyp",
+                "nopt",
+                "normalize-package-data",
+                "npm-audit-report",
+                "npm-install-checks",
+                "npm-package-arg",
+                "npm-pick-manifest",
+                "npm-profile",
+                "npm-registry-fetch",
+                "npm-user-validate",
+                "p-map",
+                "pacote",
+                "parse-conflict-json",
+                "proc-log",
+                "qrcode-terminal",
+                "read",
+                "semver",
+                "spdx-expression-parse",
+                "ssri",
+                "supports-color",
+                "tar",
+                "text-table",
+                "tiny-relative-date",
+                "treeverse",
+                "validate-npm-package-name",
+                "which",
+                "write-file-atomic"
+            ],
+            "workspaces": [
+                "docs",
+                "smoke-tests",
+                "mock-globals",
+                "mock-registry",
+                "workspaces/*"
+            ],
+            "dependencies": {
+                "@isaacs/string-locale-compare": "^1.1.0",
+                "@npmcli/arborist": "^8.0.0",
+                "@npmcli/config": "^9.0.0",
+                "@npmcli/fs": "^4.0.0",
+                "@npmcli/map-workspaces": "^4.0.1",
+                "@npmcli/package-json": "^6.0.1",
+                "@npmcli/promise-spawn": "^8.0.1",
+                "@npmcli/redact": "^3.0.0",
+                "@npmcli/run-script": "^9.0.1",
+                "@sigstore/tuf": "^2.3.4",
+                "abbrev": "^3.0.0",
+                "archy": "~1.0.0",
+                "cacache": "^19.0.1",
+                "chalk": "^5.3.0",
+                "ci-info": "^4.0.0",
+                "cli-columns": "^4.0.0",
+                "fastest-levenshtein": "^1.0.16",
+                "fs-minipass": "^3.0.3",
+                "glob": "^10.4.5",
+                "graceful-fs": "^4.2.11",
+                "hosted-git-info": "^8.0.0",
+                "ini": "^5.0.0",
+                "init-package-json": "^7.0.1",
+                "is-cidr": "^5.1.0",
+                "json-parse-even-better-errors": "^4.0.0",
+                "libnpmaccess": "^9.0.0",
+                "libnpmdiff": "^7.0.0",
+                "libnpmexec": "^9.0.0",
+                "libnpmfund": "^6.0.0",
+                "libnpmhook": "^11.0.0",
+                "libnpmorg": "^7.0.0",
+                "libnpmpack": "^8.0.0",
+                "libnpmpublish": "^10.0.0",
+                "libnpmsearch": "^8.0.0",
+                "libnpmteam": "^7.0.0",
+                "libnpmversion": "^7.0.0",
+                "make-fetch-happen": "^14.0.1",
+                "minimatch": "^9.0.5",
+                "minipass": "^7.1.1",
+                "minipass-pipeline": "^1.2.4",
+                "ms": "^2.1.2",
+                "node-gyp": "^10.2.0",
+                "nopt": "^8.0.0",
+                "normalize-package-data": "^7.0.0",
+                "npm-audit-report": "^6.0.0",
+                "npm-install-checks": "^7.1.0",
+                "npm-package-arg": "^12.0.0",
+                "npm-pick-manifest": "^10.0.0",
+                "npm-profile": "^11.0.1",
+                "npm-registry-fetch": "^18.0.1",
+                "npm-user-validate": "^3.0.0",
+                "p-map": "^4.0.0",
+                "pacote": "^19.0.0",
+                "parse-conflict-json": "^4.0.0",
+                "proc-log": "^5.0.0",
+                "qrcode-terminal": "^0.12.0",
+                "read": "^4.0.0",
+                "semver": "^7.6.3",
+                "spdx-expression-parse": "^4.0.0",
+                "ssri": "^12.0.0",
+                "supports-color": "^9.4.0",
+                "tar": "^6.2.1",
+                "text-table": "~0.2.0",
+                "tiny-relative-date": "^1.3.0",
+                "treeverse": "^3.0.0",
+                "validate-npm-package-name": "^6.0.0",
+                "which": "^5.0.0",
+                "write-file-atomic": "^6.0.0"
+            },
+            "bin": {
+                "npm": "bin/npm-cli.js",
+                "npx": "bin/npx-cli.js"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@isaacs/cliui": {
+            "version": "8.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "string-width": "^5.1.2",
+                "string-width-cjs": "npm:string-width@^4.2.0",
+                "strip-ansi": "^7.0.1",
+                "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+                "wrap-ansi": "^8.1.0",
+                "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+            },
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+            "version": "9.2.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": {
+            "version": "5.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "eastasianwidth": "^0.2.0",
+                "emoji-regex": "^9.2.2",
+                "strip-ansi": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+            "version": "7.1.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-regex": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/@isaacs/fs-minipass": {
+            "version": "4.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^7.0.4"
+            },
+            "engines": {
+                "node": ">=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@isaacs/string-locale-compare": {
+            "version": "1.1.0",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/@npmcli/agent": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "agent-base": "^7.1.0",
+                "http-proxy-agent": "^7.0.0",
+                "https-proxy-agent": "^7.0.1",
+                "lru-cache": "^10.0.1",
+                "socks-proxy-agent": "^8.0.3"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/arborist": {
+            "version": "8.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@isaacs/string-locale-compare": "^1.1.0",
+                "@npmcli/fs": "^4.0.0",
+                "@npmcli/installed-package-contents": "^3.0.0",
+                "@npmcli/map-workspaces": "^4.0.1",
+                "@npmcli/metavuln-calculator": "^8.0.0",
+                "@npmcli/name-from-folder": "^3.0.0",
+                "@npmcli/node-gyp": "^4.0.0",
+                "@npmcli/package-json": "^6.0.1",
+                "@npmcli/query": "^4.0.0",
+                "@npmcli/redact": "^3.0.0",
+                "@npmcli/run-script": "^9.0.1",
+                "bin-links": "^5.0.0",
+                "cacache": "^19.0.1",
+                "common-ancestor-path": "^1.0.1",
+                "hosted-git-info": "^8.0.0",
+                "json-parse-even-better-errors": "^4.0.0",
+                "json-stringify-nice": "^1.1.4",
+                "lru-cache": "^10.2.2",
+                "minimatch": "^9.0.4",
+                "nopt": "^8.0.0",
+                "npm-install-checks": "^7.1.0",
+                "npm-package-arg": "^12.0.0",
+                "npm-pick-manifest": "^10.0.0",
+                "npm-registry-fetch": "^18.0.1",
+                "pacote": "^19.0.0",
+                "parse-conflict-json": "^4.0.0",
+                "proc-log": "^5.0.0",
+                "proggy": "^3.0.0",
+                "promise-all-reject-late": "^1.0.0",
+                "promise-call-limit": "^3.0.1",
+                "read-package-json-fast": "^4.0.0",
+                "semver": "^7.3.7",
+                "ssri": "^12.0.0",
+                "treeverse": "^3.0.0",
+                "walk-up-path": "^3.0.1"
+            },
+            "bin": {
+                "arborist": "bin/index.js"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/config": {
+            "version": "9.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/map-workspaces": "^4.0.1",
+                "@npmcli/package-json": "^6.0.1",
+                "ci-info": "^4.0.0",
+                "ini": "^5.0.0",
+                "nopt": "^8.0.0",
+                "proc-log": "^5.0.0",
+                "semver": "^7.3.5",
+                "walk-up-path": "^3.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/fs": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "semver": "^7.3.5"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/git": {
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/promise-spawn": "^8.0.0",
+                "ini": "^5.0.0",
+                "lru-cache": "^10.0.1",
+                "npm-pick-manifest": "^10.0.0",
+                "proc-log": "^5.0.0",
+                "promise-inflight": "^1.0.1",
+                "promise-retry": "^2.0.1",
+                "semver": "^7.3.5",
+                "which": "^5.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/installed-package-contents": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-bundled": "^4.0.0",
+                "npm-normalize-package-bin": "^4.0.0"
+            },
+            "bin": {
+                "installed-package-contents": "bin/index.js"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/map-workspaces": {
+            "version": "4.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/name-from-folder": "^3.0.0",
+                "@npmcli/package-json": "^6.0.0",
+                "glob": "^10.2.2",
+                "minimatch": "^9.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
+            "version": "8.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "cacache": "^19.0.0",
+                "json-parse-even-better-errors": "^4.0.0",
+                "pacote": "^19.0.0",
+                "proc-log": "^5.0.0",
+                "semver": "^7.3.5"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/name-from-folder": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/node-gyp": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/package-json": {
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/git": "^6.0.0",
+                "glob": "^10.2.2",
+                "hosted-git-info": "^8.0.0",
+                "json-parse-even-better-errors": "^4.0.0",
+                "normalize-package-data": "^7.0.0",
+                "proc-log": "^5.0.0",
+                "semver": "^7.5.3"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/promise-spawn": {
+            "version": "8.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "which": "^5.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/query": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "postcss-selector-parser": "^6.1.2"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/redact": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@npmcli/run-script": {
+            "version": "9.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/node-gyp": "^4.0.0",
+                "@npmcli/package-json": "^6.0.0",
+                "@npmcli/promise-spawn": "^8.0.0",
+                "node-gyp": "^10.0.0",
+                "proc-log": "^5.0.0",
+                "which": "^5.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/@pkgjs/parseargs": {
+            "version": "0.11.0",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true,
+            "engines": {
+                "node": ">=14"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/bundle": {
+            "version": "2.3.2",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/protobuf-specs": "^0.3.2"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/core": {
+            "version": "1.1.0",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/protobuf-specs": {
+            "version": "0.3.2",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign": {
+            "version": "2.3.2",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/bundle": "^2.3.2",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "make-fetch-happen": "^13.0.1",
+                "proc-log": "^4.2.0",
+                "promise-retry": "^2.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent": {
+            "version": "2.2.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "agent-base": "^7.1.0",
+                "http-proxy-agent": "^7.0.0",
+                "https-proxy-agent": "^7.0.1",
+                "lru-cache": "^10.0.1",
+                "socks-proxy-agent": "^8.0.3"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs": {
+            "version": "3.1.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "semver": "^7.3.5"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign/node_modules/cacache": {
+            "version": "18.0.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/fs": "^3.1.0",
+                "fs-minipass": "^3.0.0",
+                "glob": "^10.2.2",
+                "lru-cache": "^10.0.1",
+                "minipass": "^7.0.3",
+                "minipass-collect": "^2.0.1",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "p-map": "^4.0.0",
+                "ssri": "^10.0.0",
+                "tar": "^6.1.11",
+                "unique-filename": "^3.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen": {
+            "version": "13.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/agent": "^2.0.0",
+                "cacache": "^18.0.0",
+                "http-cache-semantics": "^4.1.1",
+                "is-lambda": "^1.0.1",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^3.0.0",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "negotiator": "^0.6.3",
+                "proc-log": "^4.2.0",
+                "promise-retry": "^2.0.1",
+                "ssri": "^10.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch": {
+            "version": "3.0.5",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^7.0.3",
+                "minipass-sized": "^1.0.3",
+                "minizlib": "^2.1.2"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            },
+            "optionalDependencies": {
+                "encoding": "^0.1.13"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign/node_modules/proc-log": {
+            "version": "4.2.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign/node_modules/ssri": {
+            "version": "10.0.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign/node_modules/unique-filename": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "unique-slug": "^4.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/sign/node_modules/unique-slug": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "imurmurhash": "^0.1.4"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/tuf": {
+            "version": "2.3.4",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "tuf-js": "^2.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@sigstore/verify": {
+            "version": "1.2.1",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/bundle": "^2.3.2",
+                "@sigstore/core": "^1.1.0",
+                "@sigstore/protobuf-specs": "^0.3.2"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@tufjs/canonical-json": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/@tufjs/models": {
+            "version": "2.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "@tufjs/canonical-json": "2.0.0",
+                "minimatch": "^9.0.4"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/abbrev": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/agent-base": {
+            "version": "7.1.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "debug": "^4.3.4"
+            },
+            "engines": {
+                "node": ">= 14"
+            }
+        },
+        "node_modules/npm/node_modules/aggregate-error": {
+            "version": "3.1.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "clean-stack": "^2.0.0",
+                "indent-string": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/ansi-regex": {
+            "version": "5.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/ansi-styles": {
+            "version": "6.2.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/aproba": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/archy": {
+            "version": "1.0.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/balanced-match": {
+            "version": "1.0.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/bin-links": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "cmd-shim": "^7.0.0",
+                "npm-normalize-package-bin": "^4.0.0",
+                "proc-log": "^5.0.0",
+                "read-cmd-shim": "^5.0.0",
+                "write-file-atomic": "^6.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/binary-extensions": {
+            "version": "2.3.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/npm/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/cacache": {
+            "version": "19.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/fs": "^4.0.0",
+                "fs-minipass": "^3.0.0",
+                "glob": "^10.2.2",
+                "lru-cache": "^10.0.1",
+                "minipass": "^7.0.3",
+                "minipass-collect": "^2.0.1",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "p-map": "^7.0.2",
+                "ssri": "^12.0.0",
+                "tar": "^7.4.3",
+                "unique-filename": "^4.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/chownr": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "BlueOak-1.0.0",
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/minizlib": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^7.0.4",
+                "rimraf": "^5.0.5"
+            },
+            "engines": {
+                "node": ">= 18"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/mkdirp": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "bin": {
+                "mkdirp": "dist/cjs/src/bin.js"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/p-map": {
+            "version": "7.0.2",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/tar": {
+            "version": "7.4.3",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@isaacs/fs-minipass": "^4.0.0",
+                "chownr": "^3.0.0",
+                "minipass": "^7.1.2",
+                "minizlib": "^3.0.1",
+                "mkdirp": "^3.0.1",
+                "yallist": "^5.0.0"
+            },
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/yallist": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "BlueOak-1.0.0",
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/npm/node_modules/chalk": {
+            "version": "5.3.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^12.17.0 || ^14.13 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/chalk?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/chownr": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/npm/node_modules/ci-info": {
+            "version": "4.0.0",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/sibiraj-s"
+                }
+            ],
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/cidr-regex": {
+            "version": "4.1.1",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "ip-regex": "^5.0.0"
+            },
+            "engines": {
+                "node": ">=14"
+            }
+        },
+        "node_modules/npm/node_modules/clean-stack": {
+            "version": "2.2.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/npm/node_modules/cli-columns": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "string-width": "^4.2.3",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/npm/node_modules/cmd-shim": {
+            "version": "7.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/color-convert": {
+            "version": "2.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "color-name": "~1.1.4"
+            },
+            "engines": {
+                "node": ">=7.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/color-name": {
+            "version": "1.1.4",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/common-ancestor-path": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/cross-spawn": {
+            "version": "7.0.3",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "path-key": "^3.1.0",
+                "shebang-command": "^2.0.0",
+                "which": "^2.0.1"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/cross-spawn/node_modules/which": {
+            "version": "2.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "node-which": "bin/node-which"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/cssesc": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "bin": {
+                "cssesc": "bin/cssesc"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/npm/node_modules/debug": {
+            "version": "4.3.6",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ms": "2.1.2"
+            },
+            "engines": {
+                "node": ">=6.0"
+            },
+            "peerDependenciesMeta": {
+                "supports-color": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/npm/node_modules/debug/node_modules/ms": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/diff": {
+            "version": "5.2.0",
+            "inBundle": true,
+            "license": "BSD-3-Clause",
+            "engines": {
+                "node": ">=0.3.1"
+            }
+        },
+        "node_modules/npm/node_modules/eastasianwidth": {
+            "version": "0.2.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/emoji-regex": {
+            "version": "8.0.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/encoding": {
+            "version": "0.1.13",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true,
+            "dependencies": {
+                "iconv-lite": "^0.6.2"
+            }
+        },
+        "node_modules/npm/node_modules/env-paths": {
+            "version": "2.2.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/npm/node_modules/err-code": {
+            "version": "2.0.3",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/exponential-backoff": {
+            "version": "3.1.1",
+            "inBundle": true,
+            "license": "Apache-2.0"
+        },
+        "node_modules/npm/node_modules/fastest-levenshtein": {
+            "version": "1.0.16",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 4.9.1"
+            }
+        },
+        "node_modules/npm/node_modules/foreground-child": {
+            "version": "3.3.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "cross-spawn": "^7.0.0",
+                "signal-exit": "^4.0.1"
+            },
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/fs-minipass": {
+            "version": "3.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/glob": {
+            "version": "10.4.5",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "foreground-child": "^3.1.0",
+                "jackspeak": "^3.1.2",
+                "minimatch": "^9.0.4",
+                "minipass": "^7.1.2",
+                "package-json-from-dist": "^1.0.0",
+                "path-scurry": "^1.11.1"
+            },
+            "bin": {
+                "glob": "dist/esm/bin.mjs"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/graceful-fs": {
+            "version": "4.2.11",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/hosted-git-info": {
+            "version": "8.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "lru-cache": "^10.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/http-cache-semantics": {
+            "version": "4.1.1",
+            "inBundle": true,
+            "license": "BSD-2-Clause"
+        },
+        "node_modules/npm/node_modules/http-proxy-agent": {
+            "version": "7.0.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "agent-base": "^7.1.0",
+                "debug": "^4.3.4"
+            },
+            "engines": {
+                "node": ">= 14"
+            }
+        },
+        "node_modules/npm/node_modules/https-proxy-agent": {
+            "version": "7.0.5",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "agent-base": "^7.0.2",
+                "debug": "4"
+            },
+            "engines": {
+                "node": ">= 14"
+            }
+        },
+        "node_modules/npm/node_modules/iconv-lite": {
+            "version": "0.6.3",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true,
+            "dependencies": {
+                "safer-buffer": ">= 2.1.2 < 3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/npm/node_modules/ignore-walk": {
+            "version": "7.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minimatch": "^9.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/imurmurhash": {
+            "version": "0.1.4",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.8.19"
+            }
+        },
+        "node_modules/npm/node_modules/indent-string": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/ini": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/init-package-json": {
+            "version": "7.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/package-json": "^6.0.0",
+                "npm-package-arg": "^12.0.0",
+                "promzard": "^2.0.0",
+                "read": "^4.0.0",
+                "semver": "^7.3.5",
+                "validate-npm-package-license": "^3.0.4",
+                "validate-npm-package-name": "^6.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/ip-address": {
+            "version": "9.0.5",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "jsbn": "1.1.0",
+                "sprintf-js": "^1.1.3"
+            },
+            "engines": {
+                "node": ">= 12"
+            }
+        },
+        "node_modules/npm/node_modules/ip-regex": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/npm/node_modules/is-cidr": {
+            "version": "5.1.0",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "cidr-regex": "^4.1.1"
+            },
+            "engines": {
+                "node": ">=14"
+            }
+        },
+        "node_modules/npm/node_modules/is-fullwidth-code-point": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/is-lambda": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/isexe": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/jackspeak": {
+            "version": "3.4.3",
+            "inBundle": true,
+            "license": "BlueOak-1.0.0",
+            "dependencies": {
+                "@isaacs/cliui": "^8.0.2"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            },
+            "optionalDependencies": {
+                "@pkgjs/parseargs": "^0.11.0"
+            }
+        },
+        "node_modules/npm/node_modules/jsbn": {
+            "version": "1.1.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/json-parse-even-better-errors": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/json-stringify-nice": {
+            "version": "1.1.4",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/jsonparse": {
+            "version": "1.3.1",
+            "engines": [
+                "node >= 0.2.0"
+            ],
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/just-diff": {
+            "version": "6.0.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/just-diff-apply": {
+            "version": "5.5.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/libnpmaccess": {
+            "version": "9.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-package-arg": "^12.0.0",
+                "npm-registry-fetch": "^18.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff": {
+            "version": "7.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/arborist": "^8.0.0",
+                "@npmcli/installed-package-contents": "^3.0.0",
+                "binary-extensions": "^2.3.0",
+                "diff": "^5.1.0",
+                "minimatch": "^9.0.4",
+                "npm-package-arg": "^12.0.0",
+                "pacote": "^19.0.0",
+                "tar": "^6.2.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec": {
+            "version": "9.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/arborist": "^8.0.0",
+                "@npmcli/run-script": "^9.0.1",
+                "ci-info": "^4.0.0",
+                "npm-package-arg": "^12.0.0",
+                "pacote": "^19.0.0",
+                "proc-log": "^5.0.0",
+                "read": "^4.0.0",
+                "read-package-json-fast": "^4.0.0",
+                "semver": "^7.3.7",
+                "walk-up-path": "^3.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund": {
+            "version": "6.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/arborist": "^8.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmhook": {
+            "version": "11.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^18.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmorg": {
+            "version": "7.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^18.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack": {
+            "version": "8.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/arborist": "^8.0.0",
+                "@npmcli/run-script": "^9.0.1",
+                "npm-package-arg": "^12.0.0",
+                "pacote": "^19.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpublish": {
+            "version": "10.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "ci-info": "^4.0.0",
+                "normalize-package-data": "^7.0.0",
+                "npm-package-arg": "^12.0.0",
+                "npm-registry-fetch": "^18.0.1",
+                "proc-log": "^5.0.0",
+                "semver": "^7.3.7",
+                "sigstore": "^2.2.0",
+                "ssri": "^12.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmsearch": {
+            "version": "8.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-registry-fetch": "^18.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmteam": {
+            "version": "7.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^18.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmversion": {
+            "version": "7.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/git": "^6.0.1",
+                "@npmcli/run-script": "^9.0.1",
+                "json-parse-even-better-errors": "^4.0.0",
+                "proc-log": "^5.0.0",
+                "semver": "^7.3.7"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/lru-cache": {
+            "version": "10.4.3",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/make-fetch-happen": {
+            "version": "14.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/agent": "^3.0.0",
+                "cacache": "^19.0.1",
+                "http-cache-semantics": "^4.1.1",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^4.0.0",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "negotiator": "^0.6.3",
+                "proc-log": "^5.0.0",
+                "promise-retry": "^2.0.1",
+                "ssri": "^12.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/minimatch": {
+            "version": "9.0.5",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/minipass": {
+            "version": "7.1.2",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-collect": {
+            "version": "2.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-fetch": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^7.0.3",
+                "minipass-sized": "^1.0.3",
+                "minizlib": "^3.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            },
+            "optionalDependencies": {
+                "encoding": "^0.1.13"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^7.0.4",
+                "rimraf": "^5.0.5"
+            },
+            "engines": {
+                "node": ">= 18"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-flush": {
+            "version": "1.0.5",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-pipeline": {
+            "version": "1.2.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-sized": {
+            "version": "1.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/minizlib": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^3.0.0",
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/minizlib/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/mkdirp": {
+            "version": "1.0.4",
+            "inBundle": true,
+            "license": "MIT",
+            "bin": {
+                "mkdirp": "bin/cmd.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/npm/node_modules/ms": {
+            "version": "2.1.3",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/mute-stream": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/negotiator": {
+            "version": "0.6.3",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp": {
+            "version": "10.2.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "env-paths": "^2.2.0",
+                "exponential-backoff": "^3.1.1",
+                "glob": "^10.3.10",
+                "graceful-fs": "^4.2.6",
+                "make-fetch-happen": "^13.0.0",
+                "nopt": "^7.0.0",
+                "proc-log": "^4.1.0",
+                "semver": "^7.3.5",
+                "tar": "^6.2.1",
+                "which": "^4.0.0"
+            },
+            "bin": {
+                "node-gyp": "bin/node-gyp.js"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/agent": {
+            "version": "2.2.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "agent-base": "^7.1.0",
+                "http-proxy-agent": "^7.0.0",
+                "https-proxy-agent": "^7.0.1",
+                "lru-cache": "^10.0.1",
+                "socks-proxy-agent": "^8.0.3"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/fs": {
+            "version": "3.1.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "semver": "^7.3.5"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/abbrev": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/cacache": {
+            "version": "18.0.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/fs": "^3.1.0",
+                "fs-minipass": "^3.0.0",
+                "glob": "^10.2.2",
+                "lru-cache": "^10.0.1",
+                "minipass": "^7.0.3",
+                "minipass-collect": "^2.0.1",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "p-map": "^4.0.0",
+                "ssri": "^10.0.0",
+                "tar": "^6.1.11",
+                "unique-filename": "^3.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/isexe": {
+            "version": "3.1.1",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=16"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": {
+            "version": "13.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/agent": "^2.0.0",
+                "cacache": "^18.0.0",
+                "http-cache-semantics": "^4.1.1",
+                "is-lambda": "^1.0.1",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^3.0.0",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "negotiator": "^0.6.3",
+                "proc-log": "^4.2.0",
+                "promise-retry": "^2.0.1",
+                "ssri": "^10.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/minipass-fetch": {
+            "version": "3.0.5",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^7.0.3",
+                "minipass-sized": "^1.0.3",
+                "minizlib": "^2.1.2"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            },
+            "optionalDependencies": {
+                "encoding": "^0.1.13"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/nopt": {
+            "version": "7.2.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "abbrev": "^2.0.0"
+            },
+            "bin": {
+                "nopt": "bin/nopt.js"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": {
+            "version": "4.2.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/ssri": {
+            "version": "10.0.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/unique-filename": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "unique-slug": "^4.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/unique-slug": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "imurmurhash": "^0.1.4"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/which": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "isexe": "^3.1.1"
+            },
+            "bin": {
+                "node-which": "bin/which.js"
+            },
+            "engines": {
+                "node": "^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/nopt": {
+            "version": "8.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "abbrev": "^2.0.0"
+            },
+            "bin": {
+                "nopt": "bin/nopt.js"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/nopt/node_modules/abbrev": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/normalize-package-data": {
+            "version": "7.0.0",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "hosted-git-info": "^8.0.0",
+                "semver": "^7.3.5",
+                "validate-npm-package-license": "^3.0.4"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-audit-report": {
+            "version": "6.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-bundled": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-normalize-package-bin": "^4.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-install-checks": {
+            "version": "7.1.0",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "semver": "^7.1.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-normalize-package-bin": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-package-arg": {
+            "version": "12.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "hosted-git-info": "^8.0.0",
+                "proc-log": "^5.0.0",
+                "semver": "^7.3.5",
+                "validate-npm-package-name": "^6.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-packlist": {
+            "version": "9.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "ignore-walk": "^7.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-pick-manifest": {
+            "version": "10.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-install-checks": "^7.1.0",
+                "npm-normalize-package-bin": "^4.0.0",
+                "npm-package-arg": "^12.0.0",
+                "semver": "^7.3.5"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-profile": {
+            "version": "11.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-registry-fetch": "^18.0.0",
+                "proc-log": "^5.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch": {
+            "version": "18.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/redact": "^3.0.0",
+                "jsonparse": "^1.3.1",
+                "make-fetch-happen": "^14.0.0",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^4.0.0",
+                "minizlib": "^3.0.1",
+                "npm-package-arg": "^12.0.0",
+                "proc-log": "^5.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^7.0.4",
+                "rimraf": "^5.0.5"
+            },
+            "engines": {
+                "node": ">= 18"
+            }
+        },
+        "node_modules/npm/node_modules/npm-user-validate": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/p-map": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "aggregate-error": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/npm/node_modules/package-json-from-dist": {
+            "version": "1.0.0",
+            "inBundle": true,
+            "license": "BlueOak-1.0.0"
+        },
+        "node_modules/npm/node_modules/pacote": {
+            "version": "19.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/git": "^6.0.0",
+                "@npmcli/installed-package-contents": "^3.0.0",
+                "@npmcli/package-json": "^6.0.0",
+                "@npmcli/promise-spawn": "^8.0.0",
+                "@npmcli/run-script": "^9.0.0",
+                "cacache": "^19.0.0",
+                "fs-minipass": "^3.0.0",
+                "minipass": "^7.0.2",
+                "npm-package-arg": "^12.0.0",
+                "npm-packlist": "^9.0.0",
+                "npm-pick-manifest": "^10.0.0",
+                "npm-registry-fetch": "^18.0.0",
+                "proc-log": "^5.0.0",
+                "promise-retry": "^2.0.1",
+                "sigstore": "^2.2.0",
+                "ssri": "^12.0.0",
+                "tar": "^6.1.11"
+            },
+            "bin": {
+                "pacote": "bin/index.js"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/parse-conflict-json": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "json-parse-even-better-errors": "^4.0.0",
+                "just-diff": "^6.0.0",
+                "just-diff-apply": "^5.2.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/path-key": {
+            "version": "3.1.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/path-scurry": {
+            "version": "1.11.1",
+            "inBundle": true,
+            "license": "BlueOak-1.0.0",
+            "dependencies": {
+                "lru-cache": "^10.2.0",
+                "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/postcss-selector-parser": {
+            "version": "6.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "cssesc": "^3.0.0",
+                "util-deprecate": "^1.0.2"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/npm/node_modules/proc-log": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/proggy": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/promise-all-reject-late": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/promise-call-limit": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/promise-inflight": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/promise-retry": {
+            "version": "2.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "err-code": "^2.0.2",
+                "retry": "^0.12.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/npm/node_modules/promzard": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "read": "^4.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/qrcode-terminal": {
+            "version": "0.12.0",
+            "inBundle": true,
+            "bin": {
+                "qrcode-terminal": "bin/qrcode-terminal.js"
+            }
+        },
+        "node_modules/npm/node_modules/read": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "mute-stream": "^2.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/read-cmd-shim": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/read-package-json-fast": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "json-parse-even-better-errors": "^4.0.0",
+                "npm-normalize-package-bin": "^4.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/retry": {
+            "version": "0.12.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 4"
+            }
+        },
+        "node_modules/npm/node_modules/rimraf": {
+            "version": "5.0.10",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "glob": "^10.3.7"
+            },
+            "bin": {
+                "rimraf": "dist/esm/bin.mjs"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/safer-buffer": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true
+        },
+        "node_modules/npm/node_modules/semver": {
+            "version": "7.6.3",
+            "inBundle": true,
+            "license": "ISC",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/npm/node_modules/shebang-command": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "shebang-regex": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/shebang-regex": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/signal-exit": {
+            "version": "4.1.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/sigstore": {
+            "version": "2.3.1",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/bundle": "^2.3.2",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "@sigstore/sign": "^2.3.2",
+                "@sigstore/tuf": "^2.3.4",
+                "@sigstore/verify": "^1.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/smart-buffer": {
+            "version": "4.2.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 6.0.0",
+                "npm": ">= 3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/socks": {
+            "version": "2.8.3",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ip-address": "^9.0.5",
+                "smart-buffer": "^4.2.0"
+            },
+            "engines": {
+                "node": ">= 10.0.0",
+                "npm": ">= 3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/socks-proxy-agent": {
+            "version": "8.0.4",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "agent-base": "^7.1.1",
+                "debug": "^4.3.4",
+                "socks": "^2.8.3"
+            },
+            "engines": {
+                "node": ">= 14"
+            }
+        },
+        "node_modules/npm/node_modules/spdx-correct": {
+            "version": "3.2.0",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-expression-parse": "^3.0.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/spdx-exceptions": {
+            "version": "2.5.0",
+            "inBundle": true,
+            "license": "CC-BY-3.0"
+        },
+        "node_modules/npm/node_modules/spdx-expression-parse": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/spdx-license-ids": {
+            "version": "3.0.18",
+            "inBundle": true,
+            "license": "CC0-1.0"
+        },
+        "node_modules/npm/node_modules/sprintf-js": {
+            "version": "1.1.3",
+            "inBundle": true,
+            "license": "BSD-3-Clause"
+        },
+        "node_modules/npm/node_modules/ssri": {
+            "version": "12.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/string-width": {
+            "version": "4.2.3",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/string-width-cjs": {
+            "name": "string-width",
+            "version": "4.2.3",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/strip-ansi": {
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/strip-ansi-cjs": {
+            "name": "strip-ansi",
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/supports-color": {
+            "version": "9.4.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/supports-color?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/tar": {
+            "version": "6.2.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "chownr": "^2.0.0",
+                "fs-minipass": "^2.0.0",
+                "minipass": "^5.0.0",
+                "minizlib": "^2.1.1",
+                "mkdirp": "^1.0.3",
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/npm/node_modules/tar/node_modules/fs-minipass": {
+            "version": "2.1.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/tar/node_modules/minipass": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/text-table": {
+            "version": "0.2.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/tiny-relative-date": {
+            "version": "1.3.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/treeverse": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js": {
+            "version": "2.2.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "@tufjs/models": "2.0.1",
+                "debug": "^4.3.4",
+                "make-fetch-happen": "^13.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js/node_modules/@npmcli/agent": {
+            "version": "2.2.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "agent-base": "^7.1.0",
+                "http-proxy-agent": "^7.0.0",
+                "https-proxy-agent": "^7.0.1",
+                "lru-cache": "^10.0.1",
+                "socks-proxy-agent": "^8.0.3"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js/node_modules/@npmcli/fs": {
+            "version": "3.1.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "semver": "^7.3.5"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js/node_modules/cacache": {
+            "version": "18.0.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/fs": "^3.1.0",
+                "fs-minipass": "^3.0.0",
+                "glob": "^10.2.2",
+                "lru-cache": "^10.0.1",
+                "minipass": "^7.0.3",
+                "minipass-collect": "^2.0.1",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "p-map": "^4.0.0",
+                "ssri": "^10.0.0",
+                "tar": "^6.1.11",
+                "unique-filename": "^3.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js/node_modules/make-fetch-happen": {
+            "version": "13.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/agent": "^2.0.0",
+                "cacache": "^18.0.0",
+                "http-cache-semantics": "^4.1.1",
+                "is-lambda": "^1.0.1",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^3.0.0",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "negotiator": "^0.6.3",
+                "proc-log": "^4.2.0",
+                "promise-retry": "^2.0.1",
+                "ssri": "^10.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js/node_modules/minipass-fetch": {
+            "version": "3.0.5",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^7.0.3",
+                "minipass-sized": "^1.0.3",
+                "minizlib": "^2.1.2"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            },
+            "optionalDependencies": {
+                "encoding": "^0.1.13"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js/node_modules/proc-log": {
+            "version": "4.2.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js/node_modules/ssri": {
+            "version": "10.0.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js/node_modules/unique-filename": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "unique-slug": "^4.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js/node_modules/unique-slug": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "imurmurhash": "^0.1.4"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/unique-filename": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "unique-slug": "^5.0.0"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/unique-slug": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "imurmurhash": "^0.1.4"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/util-deprecate": {
+            "version": "1.0.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/validate-npm-package-license": {
+            "version": "3.0.4",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-correct": "^3.0.0",
+                "spdx-expression-parse": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/validate-npm-package-name": {
+            "version": "6.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/walk-up-path": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/which": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "isexe": "^3.1.1"
+            },
+            "bin": {
+                "node-which": "bin/which.js"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/which/node_modules/isexe": {
+            "version": "3.1.1",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=16"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi": {
+            "version": "8.1.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-styles": "^6.1.0",
+                "string-width": "^5.0.1",
+                "strip-ansi": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi-cjs": {
+            "name": "wrap-ansi",
+            "version": "7.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-styles": "^4.0.0",
+                "string-width": "^4.1.0",
+                "strip-ansi": "^6.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+            "version": "4.3.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "color-convert": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": {
+            "version": "9.2.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
+            "version": "5.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "eastasianwidth": "^0.2.0",
+                "emoji-regex": "^9.2.2",
+                "strip-ansi": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
+            "version": "7.1.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-regex": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/write-file-atomic": {
+            "version": "6.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "imurmurhash": "^0.1.4",
+                "signal-exit": "^4.0.1"
+            },
+            "engines": {
+                "node": "^18.17.0 || >=20.5.0"
+            }
+        },
+        "node_modules/npm/node_modules/yallist": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC"
+        },
         "node_modules/nprogress": {
             "version": "0.2.0",
             "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz",
@@ -4271,6 +7192,14 @@
                 "node": ">=0.8"
             }
         },
+        "node_modules/tippy.js": {
+            "version": "6.3.7",
+            "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz",
+            "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==",
+            "dependencies": {
+                "@popperjs/core": "^2.9.0"
+            }
+        },
         "node_modules/to-regex-range": {
             "version": "5.0.1",
             "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -4282,6 +7211,11 @@
                 "node": ">=8.0"
             }
         },
+        "node_modules/toastify-js": {
+            "version": "1.12.0",
+            "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz",
+            "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ=="
+        },
         "node_modules/triple-beam": {
             "version": "1.4.1",
             "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz",
diff --git a/package.json b/package.json
index 5afa16e1..ef318bb1 100644
--- a/package.json
+++ b/package.json
@@ -29,21 +29,26 @@
         "@editorjs/nested-list": "^1.4.2",
         "@editorjs/paragraph": "^2.11.3",
         "@inertiajs/vue3": "^1.0.14",
+        "@ryangjchandler/alpine-tooltip": "^2.0.1",
         "@tailwindcss/forms": "^0.5.7",
         "@tailwindcss/typography": "^0.5.10",
         "@vitejs/plugin-vue": "^4.6.2",
         "change-case": "^4.1.2",
         "editorjs-alert": "^1.1.3",
         "floating-vue": "^2.0.0",
+        "install": "^0.13.0",
         "laravel-echo": "^1.15.3",
         "laravel-vite-plugin": "^0.7.8",
         "lodash": "^4.17.21",
         "merge": "^2.1.1",
+        "npm": "^10.9.0",
         "pinia": "^2.1.7",
         "postcss-import": "^14.1.0",
         "prettier": "^2.8.8",
         "pusher-js": "^8.3.0",
         "svg-sprite": "^2.0.2",
+        "tippy.js": "^6.3.7",
+        "toastify-js": "^1.12.0",
         "vite": "^4.5.2",
         "vue": "^3.3.4",
         "vue-toastification": "^2.0.0-rc.5",
diff --git a/resources/css/tooltip.css b/resources/css/tooltip.css
index 3d2cbe38..be901d50 100644
--- a/resources/css/tooltip.css
+++ b/resources/css/tooltip.css
@@ -1,6 +1,21 @@
-.v-popper--theme-tooltip .v-popper__inner {
-    @apply bg-primary-400 text-primary-800 px-3 py-1 text-sm;
+.tippy-box[data-theme~='primary'] {
+    @apply bg-primary-800 text-primary-100 shadow-lg;
 }
-.v-popper--theme-tooltip .v-popper__arrow-outer {
-    @apply border-primary-400;
+.tippy-box[data-theme~='primary'][data-placement^='top'] > .tippy-arrow:before {
+    border-top-color: theme('colors.primary.800');
+}
+.tippy-box[data-theme~='primary'][data-placement^='bottom'] > .tippy-arrow:before {
+    border-bottom-color: theme('colors.primary.800');
+}
+.tippy-box[data-theme~='primary'][data-placement^='left'] > .tippy-arrow:before {
+    border-left-color: theme('colors.primary.800');
+}
+.tippy-box[data-theme~='primary'][data-placement^='right'] > .tippy-arrow:before {
+    border-right-color: theme('colors.primary.800');
+}
+.tippy-box[data-theme~='primary'] > .tippy-backdrop {
+    background-color: theme('colors.primary.800');
+}
+.tippy-box[data-theme~='primary'] > .tippy-svg-arrow {
+    fill: theme('colors.primary.800');
 }
diff --git a/resources/js/components/form/Hint.vue b/resources/js/components/form/Hint.vue
deleted file mode 100644
index b23cbe02..00000000
--- a/resources/js/components/form/Hint.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-<template>
-    <div class="h-full items-center flex absolute top-0 right-0">
-        <div v-tooltip="value" class="mr-2">
-            <ui-sprite src="info-button" class="w-5 h-5 text-primary-700"></ui-sprite>
-        </div>
-    </div>
-</template>
-
-<script setup>
-const props = defineProps({
-    value: {
-        type: String,
-        required: true,
-    },
-});
-</script>
diff --git a/resources/js/components/form/Label.vue b/resources/js/components/form/Label.vue
deleted file mode 100644
index c146a3d4..00000000
--- a/resources/js/components/form/Label.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-<template>
-    <span class="font-semibold leading-none text-gray-400 group-[.field-base]:text-sm group-[.field-sm]:text-xs">
-        {{ value }}
-        <span v-show="required" class="text-red-800">&nbsp;*</span>
-    </span>
-</template>
-
-<script setup>
-const props = defineProps({
-    value: {
-        type: String,
-        required: true,
-    },
-    required: {
-        type: Boolean,
-        required: true,
-    },
-});
-</script>
diff --git a/resources/js/components/form/Switch.vue b/resources/js/components/form/Switch.vue
deleted file mode 100644
index 46f557bb..00000000
--- a/resources/js/components/form/Switch.vue
+++ /dev/null
@@ -1,102 +0,0 @@
-<template>
-    <label class="flex flex-col items-start group" :for="id" :class="sizeClass(size)">
-        <f-label v-if="label" :required="false" :value="label"></f-label>
-        <span class="relative flex-none flex" :class="{'pr-8': hint, [fieldHeight]: true}">
-            <input :id="id" v-model="v" type="checkbox" :name="name" :value="value" :disabled="disabled" class="absolute peer opacity-0" @keypress="$emit('keypress', $event)" />
-            <span
-                class="relative cursor-pointer h-full rounded peer-focus:bg-red-500 transition-all duration-300 group-[.field-base]:w-[70px] group-[.field-sm]:w-[46px] bg-gray-700 peer-checked:bg-primary-700"
-            ></span>
-            <span class="absolute h-full top-0 left-0 flex-none flex justify-center items-center aspect-square">
-                <ui-sprite
-                    class="relative text-gray-400 flex-none text-white duration-300 group-[.field-base]:w-3 group-[.field-base]:h-3 group-[.field-sm]:w-2 group-[.field-sm]:h-2"
-                    src="check"
-                ></ui-sprite
-            ></span>
-            <span class="absolute h-full top-0 group-[.field-base]:left-[35px] group-[.field-sm]:left-[23px] flex-none flex justify-center items-center aspect-square">
-                <ui-sprite
-                    class="relative text-gray-400 flex-none text-white duration-300 group-[.field-base]:w-3 group-[.field-base]:h-3 group-[.field-sm]:w-2 group-[.field-sm]:h-2"
-                    src="close"
-                ></ui-sprite
-            ></span>
-            <var
-                class="absolute transition-all duration-300 bg-gray-400 rounded group-[.field-base]:top-[3px] group-[.field-base]:left-[3px] group-[.field-sm]:top-[2px] group-[.field-sm]:left-[2px] group-[.field-base]:w-[29px] group-[.field-sm]:w-[19px] group-[.field-base]:h-[29px] group-[.field-sm]:h-[19px] group-[.field-base]:peer-checked:left-[37px] group-[.field-sm]:peer-checked:left-[25px]"
-            ></var>
-            <f-hint v-if="hint" :value="hint"></f-hint>
-        </span>
-    </label>
-</template>
-
-<script setup>
-import {computed} from 'vue';
-import useFieldSize from '../../composables/useFieldSize.js';
-
-const {sizeClass, fieldHeight} = useFieldSize();
-
-const emit = defineEmits(['update:modelValue', 'keypress']);
-
-const props = defineProps({
-    hint: {
-        type: String,
-        default: () => '',
-    },
-    size: {
-        type: String,
-        default: () => 'base',
-    },
-    id: {
-        type: String,
-        required: true,
-    },
-    name: {
-        required: true,
-        type: String,
-    },
-    disabled: {
-        type: Boolean,
-        default: () => false,
-    },
-    value: {
-        validator: (v) => true,
-        default: () => undefined,
-    },
-    label: {
-        type: String,
-        default: () => '',
-    },
-    modelValue: {
-        validator: (v) => true,
-        default: () => undefined,
-    },
-});
-
-const v = computed({
-    set: (v) => {
-        if (props.disabled === true) {
-            return;
-        }
-
-        if (typeof props.modelValue === 'boolean') {
-            emit('update:modelValue', v);
-            return;
-        }
-
-        var a = props.modelValue.filter((i) => i !== props.value);
-        if (v) {
-            a.push(props.value);
-        }
-
-        emit('update:modelValue', a);
-    },
-    get() {
-        if (typeof props.modelValue === 'boolean') {
-            return props.modelValue;
-        }
-
-        if (typeof props.modelValue === 'undefined') {
-            return emit('update:modelValue', false);
-        }
-
-        return props.modelValue.indexOf(props.value) !== -1;
-    },
-});
-</script>
diff --git a/resources/js/components/ui/Menulist.vue b/resources/js/components/ui/Menulist.vue
deleted file mode 100644
index d4cadd6e..00000000
--- a/resources/js/components/ui/Menulist.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-<template>
-    <div class="p-6 bg-gray-700 border-r border-gray-600 flex-none w-maxc flex flex-col justify-between">
-        <div class="grid gap-1">
-            <a v-for="(item, index) in entries" :key="index" href="#" class="rounded py-1 px-3 text-gray-400"
-                :class="index === modelValue ? `bg-gray-600` : ''" @click.prevent="openMenu(index)" v-text="item.title"></a>
-        </div>
-        <slot name="bottom"></slot>
-    </div>
-</template>
-
-<script>
-export default {
-    props: {
-        modelValue: {},
-        entries: {},
-    },
-    methods: {
-        openMenu(index) {
-            this.$emit('update:modelValue', index);
-        },
-    },
-};
-</script>
diff --git a/resources/js/views/setting/Layout.vue b/resources/js/views/setting/Layout.vue
deleted file mode 100644
index b816ac9d..00000000
--- a/resources/js/views/setting/Layout.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-<template>
-    <div class="flex grow relative">
-        <ui-menulist v-model="active" :entries="$page.props.setting_menu"></ui-menulist>
-        <slot></slot>
-    </div>
-</template>
-
-<script>
-export default {
-    data: function () {
-        return {
-            innerActive: this.$page.props.setting_menu.findIndex((menu) => menu.is_active),
-        };
-    },
-    computed: {
-        active: {
-            get() {
-                return this.innerActive;
-            },
-            set(v) {
-                var _self = this;
-                this.$inertia.visit(this.$page.props.setting_menu[v].url, {
-                    onSuccess() {
-                        _self.innerActive = v;
-                    },
-                });
-            },
-        },
-    },
-};
-</script>
diff --git a/resources/livewire-js/app.js b/resources/livewire-js/app.js
index f65cc9bd..b39ec7ec 100644
--- a/resources/livewire-js/app.js
+++ b/resources/livewire-js/app.js
@@ -1 +1,19 @@
+import {Livewire, Alpine} from '../../vendor/livewire/livewire/dist/livewire.esm';
+import Tooltip from '@ryangjchandler/alpine-tooltip';
+
 import '../css/app.css';
+import 'tippy.js/dist/tippy.css';
+import 'tippy.js/animations/shift-toward.css';
+import '../css/tooltip.css';
+import {error, success} from './toastify.js';
+
+Alpine.plugin(
+    Tooltip.defaultProps({
+        theme: 'primary',
+        animation: 'shift-toward',
+    })
+);
+
+window.addEventListener('success', (event) => success(event.detail[0]));
+
+Livewire.start();
diff --git a/resources/livewire-js/toastify.js b/resources/livewire-js/toastify.js
new file mode 100644
index 00000000..f5c0327c
--- /dev/null
+++ b/resources/livewire-js/toastify.js
@@ -0,0 +1,27 @@
+import Toastify from 'toastify-js';
+import 'toastify-js/src/toastify.css';
+
+const defaultToast = {
+    duration: 3000,
+    gravity: 'bottom', // `top` or `bottom`
+    position: 'right', // `left`, `center` or `right`
+    style: {
+        background: 'none',
+    },
+};
+
+export function success(message) {
+    Toastify({
+        ...defaultToast,
+        text: message,
+        className: '!bg-green-700 !text-green-100',
+    }).showToast();
+}
+
+export function error(message) {
+    Toastify({
+        ...defaultToast,
+        text: message,
+        className: '!bg-red-700 !text-red-100',
+    }).showToast();
+}
diff --git a/resources/views/components/layouts/app.blade.php b/resources/views/components/layouts/app.blade.php
index 846ac352..01ecae35 100644
--- a/resources/views/components/layouts/app.blade.php
+++ b/resources/views/components/layouts/app.blade.php
@@ -16,5 +16,6 @@
         <livewire:page.sidebar />
         {{ $slot }}
         <page-search-modal v-if="searchVisible" @close="searchVisible = false"></page-search-modal>
+        @livewireScriptConfig
     </body>
 </html>
diff --git a/tailwind.config.js b/tailwind.config.js
index b38b5aca..4ab5adc1 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,7 +1,7 @@
 const {colors} = require('tailwindcss/defaultTheme');
 
 module.exports = {
-    content: ['app/View/**/*.php', 'resources/views/**/*.blade.php', 'modules/**/*.php'],
+    content: ['app/View/**/*.php', 'resources/views/**/*.blade.php', 'modules/**/*.php', './resources/livewire-js/**/*.js'],
     theme: {
         extend: {
             colors: {
diff --git a/tests/Feature/ModuleTest.php b/tests/Feature/ModuleTest.php
deleted file mode 100644
index eb5423f2..00000000
--- a/tests/Feature/ModuleTest.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-namespace Tests\Feature;
-
-use App\Module\Module;
-use App\Module\ModuleSettings;
-use Illuminate\Foundation\Testing\DatabaseTransactions;
-use Tests\TestCase;
-
-class ModuleTest extends TestCase
-{
-
-    use DatabaseTransactions;
-
-    public function testItGetsModuleSettings(): void
-    {
-        $this->login()->loginNami();
-        ModuleSettings::fake(['modules' => ['bill']]);
-
-        $response = $this->get('/setting/module');
-
-        $response->assertOk();
-        $this->assertCount(count(Module::cases()), $this->inertia($response, 'data.meta.modules'));
-        $this->assertInertiaHas([
-            'name' => 'Zahlungs-Management',
-            'id' => 'bill',
-        ], $response, 'data.meta.modules.0');
-        $this->assertEquals(['bill'], $this->inertia($response, 'data.data.modules'));
-    }
-
-    public function testItSavesSettings(): void
-    {
-        $this->login()->loginNami();
-
-        $response = $this->from('/setting/module')->post('/setting/module', [
-            'modules' => ['bill'],
-        ]);
-
-        $response->assertRedirect('/setting/module');
-        $this->assertEquals(['bill'], app(ModuleSettings::class)->modules);
-    }
-
-    public function testModuleMustExists(): void
-    {
-        $this->login()->loginNami();
-
-        $response = $this->from('/setting/module')->post('/setting/module', [
-            'modules' => ['lalala'],
-        ]);
-
-        $response->assertSessionHasErrors('modules.0');
-    }
-
-    public function testItReturnsModulesOnEveryPage(): void
-    {
-        $this->login()->loginNami();
-        ModuleSettings::fake(['modules' => ['bill']]);
-
-        $response = $this->get('/');
-
-        $this->assertEquals(['bill'], $this->inertia($response, 'settings.modules'));
-    }
-}