diff --git a/.trae/rules/01model.md b/.trae/rules/01model.md new file mode 100644 index 000000000..f94c92273 --- /dev/null +++ b/.trae/rules/01model.md @@ -0,0 +1,126 @@ +--- +alwaysApply: false +description: +--- +# Laravel Search Scope Standard + +## Rule +Untuk semua fitur pencarian (search) yang melibatkan beberapa kolom dengan OR, WAJIB dibungkus `where(function ($query) use (...) { ... })` +agar seluruh OR-terikat dalam satu grup dan tidak merusak kondisi lain (mis. tenant_id, is_active, date range). + +Kolom `date`, `datetime`, `timestamp`, dan field waktu sejenis pada Model TIDAK BOLEH dimasukkan ke `scopeSearch()` secara default, +kecuali memang ada kebutuhan bisnis yang jelas dan eksplisit bahwa user harus bisa mencari berdasarkan tanggal dari input search bebas. +Untuk search umum, prioritaskan hanya field yang benar-benar relevan secara tekstual seperti `code`, `name`, `reference`, `notes`, atau `remarks`. + +## Why +Tanpa grouping closure, `orWhere` dapat “membocorkan” logika sehingga mengabaikan filter lain di query utama. + +Kolom tanggal biasanya tidak relevan untuk keyword search umum, memperbesar noise hasil pencarian, dan lebih tepat ditangani oleh filter terpisah +seperti `start_date`, `end_date`, atau parameter range tanggal. + +## Example (Correct) +```php +public function scopeSearch($query, string $search) +{ + return $query->where(function ($query) use ($search) { + $query->where('cash_accounts.code', 'like', '%'.$search.'%') + ->orWhere('cash_accounts.name', 'like', '%'.$search.'%') + ->orWhere('cash_accounts.remarks', 'like', '%'.$search.'%'); + }); +} +``` + +## Example (Incorrect) +```php +public function scopeSearch($query, string $search) +{ + return $query->where(function ($query) use ($search) { + $query->where('capital_openings.code', 'like', '%'.$search.'%') + ->orWhere('capital_openings.date', 'like', '%'.$search.'%') + ->orWhere('capital_openings.remarks', 'like', '%'.$search.'%'); + }); +} +``` + +# BelongsTo Relationship Standard + +## Rule +Setiap relasi `belongsTo` WAJIB menggunakan `withTrashed()` jika model yang direlasikan mendukung SoftDeletes. + +## Why +Agar data tidak hilang saat parent (referensi) di-soft delete, sehingga integritas data historis tetap terjaga saat ditampilkan. + +## Example (Correct) +```php +public function company() +{ + return $this->belongsTo(Company::class)->withTrashed(); +} +``` + +# Field Order Consistency Standard + +## Rule +Urutan field pada Model dan layer terkait WAJIB mengikuti urutan definisi kolom di migration utama tabel tersebut. + +Aturan ini berlaku untuk: +- `$fillable` +- assignment field di Action `create()` dan `update()` +- urutan output field di Resource +- urutan field di FormRequest `rules()`, `attributes()`, dan `prepareForValidation()` +- array atau mapping lain yang merepresentasikan field yang sama + +Jika tidak semua field dipakai pada sebuah method, pertahankan urutan relatif berdasarkan migration dan cukup lewati field yang memang tidak relevan. + +## Why +Urutan yang konsisten membuat review lebih cepat, meminimalkan salah mapping antar layer, dan memudahkan pengecekan apakah implementasi sudah sesuai struktur database. + +## Example +Jika migration mendefinisikan urutan: +```php +$table->foreignId('company_id'); +$table->foreignId('branch_id'); +$table->string('code'); +$table->dateTime('date'); +$table->foreignId('investor_id'); +$table->foreignId('cash_account_id'); +$table->decimal('amount', 30, 8)->default(0); +$table->string('remarks')->nullable(); +``` + +Maka urutan field di Model, Action, Resource, dan Request harus mengikuti susunan yang sama: +```php +'company_id', +'branch_id', +'code', +'date', +'investor_id', +'cash_account_id', +'amount', +'remarks', +``` + +# Scopeable Traits Standard + +## Rule +1. **Gunakan Trait Standar**: + * `App\Traits\ScopeableByCompany`: Untuk model yang memiliki `company_id`. + * `App\Traits\ScopeableByBranch`: Untuk model yang memiliki `branch_id`. + * `App\Traits\ScopeableByStatus`: Untuk model yang memiliki `status`. +2. **Mandatory Trait**: Jika Action Class atau Controller menggunakan helper `whereCompanyId($id)` atau `whereBranchId($id)`, Model **WAJIB** menggunakan trait terkait secara eksplisit (`use Scopeable...`). Jangan berasumsi helper tersedia secara global. + +## Example +```php +use App\Traits\ScopeableByCompany; +use App\Traits\ScopeableByBranch; + +class Order extends Model +{ + // WAJIB use Trait agar method scope tersedia + use ScopeableByCompany, ScopeableByBranch; + // ... +} + +// Usage in Action/Controller +$query->whereCompanyId($companyId)->whereBranchId($branchId); +``` diff --git a/.trae/rules/02factory.md b/.trae/rules/02factory.md new file mode 100644 index 000000000..fba419a3a --- /dev/null +++ b/.trae/rules/02factory.md @@ -0,0 +1,31 @@ +--- +alwaysApply: false +description: +--- +# PROMPT RULE FACTORY (Laravel) + +Saat membuat/mengedit `database/factories/*.php`: + +- Wajib: Hanya field internal (tanpa foreign key). +- State helper: method `public` deskriptif, return `$this->state(...)` (mis. `setStatusActive()`), hanya override field relevan. + +Field: +- `code`: uppercase + pola rapi (mis. `SUP-####` via lexify/numerify); jangan `word/uuid` mentah. +- `name`: realistis (Indonesia; “PT/CV …” bila cocok). Jika menambahkan suffix random (misal `Str::random`), wajib tambahkan spasi sebagai pemisah (contoh: `$name . ' ' . Str::random(3)`). +- `remarks`: kalimat pendek wajar (boleh `sentence`, bukan lorem noise). + +Lokal Indonesia (jika ada): `city` kota Indo; `address` gaya “Jl.”; `phone/mobile` format `+62/08`; `tax_id` angka masuk akal (mis. `##.###.###.#-###.###`). + +Relasi/FK: +- **STRICT FORBIDDEN**: Jangan pernah mendefinisikan `*_id` (Foreign Key) di dalam method `definition()`. +- **Why**: + 1. Menghindari inkonsistensi data (misal: Child Model dibuatkan Company baru yang beda dengan Parent Model). + 2. Mencegah spam database (membuat ratusan Company baru yang tidak perlu). + 3. Memudahkan testing dengan skenario fleksibel. +- **Solution**: Set relasi di pemanggil (Seeder/Test) menggunakan `->for($model)` atau `->for(Model::factory())`. + +Enum/boolean: +- Enum cast: pakai enum; boolean: `fake()->boolean()` atau default logis + state variasi. + +Gaya: +- Konsisten; `fake()` / `fake('id_ID')`; 1 field per baris; tanpa logika bisnis berat. diff --git a/.trae/rules/03seeder.md b/.trae/rules/03seeder.md new file mode 100644 index 000000000..fef3e7315 --- /dev/null +++ b/.trae/rules/03seeder.md @@ -0,0 +1,277 @@ +--- +alwaysApply: false +description: +--- +## PROMPT RULE SEEDER + +Saat membuat atau mengubah seeder di project ini (`database/seeders/*.php`), gunakan standar berikut: + +1. **Struktur dasar seeder** + +- Namespace dan import: + + - Namespace selalu `Database\Seeders;`. + - Import hanya model dan class yang benar‑benar dipakai (`use App\Models\X;`, `use Illuminate\Database\Seeder;`). + - Class selalu `extends Seeder`. + +- Signature method `run`: + - Untuk seeder yang bekerja **per user**: + + ```php + public function run(?int $entitiesPerUser = null, ?int $userId = null) + ``` + + Contoh: `CompanySeeder::run(?int $companiesPerUser = null, ?int $userId = null)`. + + - Untuk seeder yang bekerja **per company**: + + ```php + public function run(?int $entitiesPerCompany = null, ?int $companyId = null) + ``` + + Contoh: `BranchSeeder`, `WarehouseSeeder`, `InvestorSeeder`, `CustomerSeeder`, `CustomerGroupSeeder`, `ProductCategorySeeder`, `BrandSeeder`, `CashAccountSeeder`, `UnitSeeder`. + + - Di awal method tetapkan default jika parameter `null`: + + ```php + $entitiesPerCompany = $entitiesPerCompany ?? 5; // atau angka default lain + ``` + +2. **Pattern pemilihan parent (User / Company)** + +- Untuk seeder per user (`CompanySeeder`): + + ```php + $companiesPerUser = $companiesPerUser ?? 1; + + $users = $userId ? User::where('id', $userId)->get() : User::all(); + ``` + +- Untuk seeder per company: + + Boleh pakai salah satu pola berikut (pilih satu dan konsisten dalam seeder itu): + + - Ternary sederhana (dipakai banyak seeder): + + ```php + $companies = $companyId ? Company::where('id', $companyId)->get() : Company::all(); + ``` + + - Atau query builder eksplisit (seperti `CustomerSeeder`): + + ```php + $query = Company::query(); + if ($companyId) { + $query->where('id', $companyId); + } + $companies = $query->get(); + ``` + +- Selalu loop: + + ```php + foreach ($companies as $company) { + // isi per company + } + ``` + +3. **Cara memakai factory di seeder** + +- Jangan set field detail di seeder; gunakan factory untuk mengisi data, dan seeder hanya: + - Mengatur parent (`->for($company)`, `->for($branch)`). + - Menghubungkan relasi khusus (`->hasAttached($user)`). + - Menggunakan state (status, default, dsb). + +- Contoh pola umum per company: + + ```php + for ($i = 0; $i < $entitiesPerCompany; $i++) { + ModelX::factory() + ->for($company) + ->create(); + } + ``` + +- Untuk model yang butuh **company + branch** (Warehouse, CashAccount): + - Ambil branch untuk company dulu: + + ```php + $branch = Branch::where('company_id', $company->id)->inRandomOrder()->first(); + if (! $branch) { + continue; // atau lewati company ini + } + ``` + + - Baru gunakan: + + ```php + ModelX::factory() + ->for($company) + ->for($branch) + ->create(); + ``` + +4. **Pola khusus seeder “utama”** + +- **CompanySeeder**: + - Per user, selalu buat minimal satu company default & aktif: + + ```php + Company::factory() + ->hasAttached($user) + ->setIsDefault() + ->setStatusActive() + ->create(); + ``` + + - Jika `companiesPerUser > 1`, buat sisa company dengan status random active/inactive: + + ```php + $remaining = max(0, $companiesPerUser - 1); + + for ($i = 0; $i < $remaining; $i++) { + $company = Company::factory()->hasAttached($user); + + random_int(0, 1) ? $company->setStatusActive() : $company->setStatusInactive(); + + $company->create(); + } + ``` + +- **BranchSeeder**: + - Per company, selalu buat satu branch **main & active**: + + ```php + Branch::factory() + ->for($company) + ->setIsMainBranch() + ->setStatusActive() + ->create(); + ``` + + - Branch sisanya: status random active/inactive, tapi tetap `for($company)`: + + ```php + $remaining = max(0, $branchesPerCompany - 1); + + for ($i = 0; $i < $remaining; $i++) { + $branch = Branch::factory()->for($company); + + random_int(0, 1) ? $branch->setStatusActive() : $branch->setStatusInactive(); + + $branch->create(); + } + ``` + +- **WarehouseSeeder**: + - Per company, pilih satu branch random: + + ```php + $branch = Branch::where('company_id', $company->id)->inRandomOrder()->first(); + ``` + + - Untuk tiap warehouse: + - `->for($company)` + - `->for($branch)` + - Status random active/inactive via state: + + ```php + $warehouse = Warehouse::factory() + ->for($company) + ->for($branch); + + random_int(0, 1) ? $warehouse->setStatusActive() : $warehouse->setStatusInactive(); + + $warehouse->create(); + ``` + +- **CashAccountSeeder**: + - Mirip WarehouseSeeder, tapi untuk CashAccount: + - Param `run(?int $cashAccountsPerCompany = null, ?int $companyId = null, ?int $branchId = null)`. + - Ambil branch dengan filter company, dan opsional `branchId`: + + ```php + $branchQuery = Branch::where('company_id', $company->id); + + if ($branchId) { + $branchQuery->where('id', $branchId); + } + $branch = $branchQuery->inRandomOrder()->first(); + + if (! $branch) { + continue; + } + ``` + + - Loop buat CashAccount dengan `->for($company)->for($branch)`. + +- **Seeder “simple master per company”** (`InvestorSeeder`, `CustomerGroupSeeder`, `CustomerSeeder`, `ProductCategorySeeder`, `BrandSeeder`): + - Pola standar: + + ```php + $entitiesPerCompany = $entitiesPerCompany ?? 5; + + $companies = $companyId ? Company::where('id', $companyId)->get() : Company::all(); + + foreach ($companies as $company) { + for ($i = 0; $i < $entitiesPerCompany; $i++) { + ModelX::factory() + ->for($company) + ->create(); + } + } + ``` + +- **UnitSeeder (master dengan “required set”)**: + - Jika ada daftar unit wajib, gunakan pola: + - Daftar array `requiredUnits`. + - Untuk setiap nama, cek dulu apakah sudah ada: + + ```php + $exists = Unit::where('company_id', $company->id) + ->where('name', $unitName) + ->exists(); + if (! $exists) { + Unit::factory() + ->for($company) + ->create([ + 'name' => $unitName, + 'code' => $unitName, + ]); + } + ``` + + - Setelah itu hitung total dan top‑up sampai `unitsPerCompany` tercapai: + + ```php + $currentCount = Unit::where('company_id', $company->id)->count(); + + if ($currentCount < $unitsPerCompany) { + Unit::factory() + ->count($unitsPerCompany - $currentCount) + ->for($company) + ->create(); + } + ``` + +5. **Pemanggilan seeder (di AppSeed / AppInstall)** + +- Saat memanggil seeder dari command lain, gunakan **named arguments** seperti di `AppSeed` / `AppInstall`: + + ```php + (new CompanySeeder())->run(companiesPerUser: 1, userId: null); + (new BranchSeeder())->run(branchesPerCompany: 5, companyId: null); + (new WarehouseSeeder())->run(warehousesPerCompany: 5, companyId: null); + (new InvestorSeeder())->run(investorsPerCompany: 5, companyId: null); + (new CashAccountSeeder())->run(cashAccountsPerCompany: 5, companyId: null); + // dst. + ``` + +- Jangan lupa pertahankan urutan seeding yang logis: + - `User` → `Company` → `Branch` → `Warehouse` → master lainnya (ProductCategory, Brand, Unit, CustomerGroup, Customer, Investor, CashAccount, dll). + +6. **Gaya coding di seeder** + +- Tidak perlu komentar ekstra di dalam seeder kecuali benar‑benar diperlukan. +- Gunakan `random_int(0, 1)` untuk variasi sederhana status, bukan logic rumit. +- Hindari query berat di dalam loop kecil jika bisa disederhanakan dengan satu query di awal (seperti pattern di `UnitSeeder`). \ No newline at end of file diff --git a/.trae/rules/04actionclasspattern.md b/.trae/rules/04actionclasspattern.md new file mode 100644 index 000000000..8b82a8aa6 --- /dev/null +++ b/.trae/rules/04actionclasspattern.md @@ -0,0 +1,210 @@ +--- +alwaysApply: false +description: +--- +Berikut adalah analisa pola standar yang ditemukan pada semua *Class Actions* di bawah menu **Master Data**. Analisa ini disusun dalam format yang siap Anda salin ke dalam file rules untuk standarisasi proyek. + +Analisa ini mencakup struktur dasar, pola method CRUD, penanganan *caching*, *logging*, dan *unique code generation*. + +*** + +# Standardisasi Action Class (Master Data) + +Pola ini berlaku untuk *Action Classes* yang mengelola entitas Master Data (contoh: `CompanyActions`, `BrandActions`, `CustomerActions`, dll). + +## 1. Struktur Dasar Class +Setiap Action class harus memiliki struktur berikut: +* **Namespace**: `App\Actions\{EntityName}` +* **Class Name**: `{EntityName}Actions` +* **Traits Wajib**: + * `use App\Traits\CacheHelper;` (Untuk manajemen cache otomatis) + * `use App\Traits\LoggerHelper;` (Untuk logging error dan performa) +* **Constructor**: Umumnya kosong `public function __construct() {}`. +* **Database Transaction**: **TIDAK PERLU** menggunakan `DB::beginTransaction()`, `DB::commit()`, atau `DB::rollBack()`. + * Transaction akan ditangani di layer yang lebih tinggi (Controller/Service) atau tidak diperlukan untuk operasi single-model sederhana. + * Cukup gunakan blok `try-catch` untuk menangkap exception dan melakukan logging. + +## 2. Pola Method CRUD +Setiap Action class umumnya mengimplementasikan 5 method utama dengan *signature* dan alur logika yang konsisten. + +### 2.1 Urutan Method Public +Untuk konsistensi navigasi dan kemudahan membaca, urutan method public di setiap Action class harus mengikuti pola berikut: + +1. `readAny` +2. `read` +3. `create` +4. `update` +5. `delete` + +### A. Method `create` +* **Signature**: `public function create(array $data): Model` + * *Catatan*: Untuk entitas kompleks (seperti Product), parameter dapat berupa **DTO**. +* **Alur Logika**: + 1. Start timer: `$timer_start = microtime(true);` + 2. Block `try-catch-finally`. + 3. Instansiasi Model baru. + 4. **Auto-generate Code**: `$model->code = $this->generateUniqueCode(...)`. + 5. Assign attributes dari `$data`. + * **Null Safety**: Jangan gunakan operator `?? null` atau `?? default` di sini. Null safety dan validasi data harus sudah ditangani di Controller/Request. Action class berasumsi data yang diterima sudah valid dan lengkap (sesuai struktur tabel). + 6. Simpan Model: `$model->save()`. + 7. **Flush Cache**: `$this->flushCache()`. + 8. Return Model. +* **Error Handling**: Log error di `catch` menggunakan `$this->loggerDebug(__METHOD__, $e)`. +* **Performance**: Log waktu eksekusi di `finally` menggunakan `$this->loggerPerformance(__METHOD__, $execution_time)`. + +### B. Method `readAny` +* **Signature**: `public function readAny(bool $withTrashed, int $companyId, ?int $branchId, ..., ?ExecuteDTO $execute)` +* **Grouping Parameter (Wajib 3 Blok Visual untuk Non-Outlier)**: +* Untuk semua Action class non-legacy yang memakai `?ExecuteDTO $execute`, signature `readAny` wajib dibagi menjadi 3 blok dengan linebreak: +* 1. Blok basis/konteks: parameter scope utama seperti `withTrashed`, `companyId`, `branchId`, `search`, atau parameter konteks lain seperti `referableType` dan `referableId` bila modul tidak memakai company scope +* 2. Blok filter: seluruh filter spesifik modul seperti `includeId`, `categoryId`, `brandId`, `warehouseId`, `cashAccountId`, `productId`, `productUnitId`, `serial`, `withRemainingStock`, dan filter bisnis lain +* 3. Blok eksekusi: `execute` +* Urutan umum yang harus diutamakan adalah scope/konteks dulu, lalu filter, lalu `execute` terakhir. +* Untuk action yang memakai `companyId`, letakkan `companyId` sebelum `search`. +* `includeId` dianggap bagian dari blok filter, bukan blok eksekusi. +* Urutan dan grouping ini wajib konsisten pada: +* * signature method `readAny` +* * daftar variable di closure `use (...)` +* * urutan filter `if (...)` di query +* * array `$cacheParams` +* Action legacy/outlier berikut tidak boleh dirapikan ke pola ini kecuali diminta eksplisit: +* * `UserActions` +* * `RoleActions` +* * `PurchaseOrderProductUnitActions` +* * `PurchaseOrderDownPaymentApplyActions` +* * `PurchaseOrderDownPaymentActions` +* **Alur Logika**: + 1. **Build Query (Mandatory Filters)**: + * Inisialisasi query dengan filter wajib di level utama (bukan di dalam closure). + * Gunakan Scope/Trait helper jika tersedia (`whereCompanyId`, `whereBranchId`). + * **WithTrashed Pattern**: Gunakan pola deklaratif (withoutTrashed by default, override jika perlu). Gunakan *one-liner* `if` tanpa kurung kurawal agar ringkas. + ```php + // Correct (One-liner preferred) + $query->withoutTrashed(); + if ($withTrashed) $query->withTrashed(); + ``` + * **Joins**: Lakukan `join` eksplisit jika perlu melakukan filtering atau sorting berdasarkan kolom di tabel relasi (misal: `stock_adjustments.date`). + 2. **Apply Conditional/Complex Filters**: + * Gunakan `where(function($q) { ... })` untuk search, filter spesifik, atau kondisi OR yang kompleks. + 3. **Apply Sorting**: + * Gunakan `orderBy` yang relevan. + * **Deterministic Sorting**: SELALU tambahkan `orderBy('id', 'asc')` (atau desc) sebagai sorting terakhir untuk memastikan urutan data konsisten saat pagination, terutama jika sorting utama memiliki nilai yang sama. + * Contoh: + ```php + $query->orderBy('companies.name', 'asc') + ->orderBy('stock_adjustments.date', 'desc') + ->orderBy('stock_adjustment_in_products.id', 'asc'); // Final tie-breaker + ``` + 4. **Execute Check**: + * Jika `$execute` adalah `null`, return `$query` (Query Builder) segera. + 5. **Caching Logic** (Inside `if ($execute)`): + * Generate `$cacheKey` menggunakan `implode` array parameter eksplisit (HINDARI `json_encode` object/DTO). + ```php + $cacheParams = [ + $withTrashed ? 'true' : 'false', + $companyId, + $branchId ?? '[null]', + ... + ]; + $cacheKey = 'read_any_...'.implode('_', $cacheParams); + ``` + * **Check Cache**: Gunakan method `readFromCache` (dari `CacheHelper`). + * **Cache Hit Validation**: Bandingkan hasil dengan `Config::get('dcslab.ERROR_RETURN_VALUE')` untuk memastikan validitas cache (bukan sekadar `!is_null`). + ```php + if ($execute->useCache) { + $cacheResult = $this->readFromCache($cacheKey); + if ($cacheResult !== Config::get('dcslab.ERROR_RETURN_VALUE')) { + return $cacheResult; + } + } + ``` + 6. **Pagination/Limit**: + * Handle `pagination` atau `limit` berdasarkan property di `ExecuteDTO`. + * **PENTING**: Properti `limit` berada di dalam objek `$execute->get`, BUKAN langsung di `$execute`. + ```php + if ($execute->pagination) { + // ... paginate logic + } else { + if ($execute->get?->limit) { + $query->limit($execute->get->limit); + } + $result = $query->get(); + } + ``` + 7. **Performance Logging**: + * Hitung `$recordsCount` dari hasil. + * Log performance dengan jumlah record: `$this->loggerPerformance(__METHOD__, $execution_time, $recordsCount);`. + +### C. Method `read` +* **Signature**: `public function read(Model $model): Model` +* **Alur Logika**: + * Load relasi yang dibutuhkan: `return $model->load('relation1', 'relation2');`. + * Untuk modul transaksi stok yang menampilkan detail produk di frontend, relasi produk dan gambar wajib ikut di-load (contoh jalur: `productUnit.product.images`). + +### F. Aturan Relasi `with` untuk Transaksi Stok +* Pada method `readAny`: + * Relasi utama (`belongsTo`) yang sering dipakai UI harus selalu di-`with` (contoh: `stockAdjustment`, `productUnit`, `productUnit.unit`, `productUnit.product`, `productUnit.product.images`). + * Relasi `hasMany` yang berat hanya di-`with` saat pagination (`$execute?->pagination`) untuk efisiensi query. + * Pola ini wajib dipakai pada action transaksi stok seperti `StockAdjustmentActions`, `StockAdjustmentInProductActions`, `StockAdjustmentOutProductActions`, `StockAdjustmentInProductSerialActions`, dan `StockAdjustmentOutProductSerialActions`. +* Pada method `read`: + * Gunakan `load([...])` yang lengkap untuk seluruh relasi yang dibutuhkan halaman detail, termasuk nested relation ke produk dan gambar. + +### D. Method `update` +* **Signature**: `public function update(Model $model, array $data): Model` + * *Catatan*: Gunakan **DTO** jika entitas kompleks. +* **Alur Logika**: + 1. Start timer & Try-Catch-Finally. + 2. **Regenerate Code**: `$this->generateUniqueCode(..., $model->id)` (pastikan kirim ID untuk pengecualian unik). + 3. **Assign Attributes**: Assign properti satu per satu (Style Property Assignment), BUKAN `update([...])`. Ini lebih eksplisit dan konsisten dengan method `create`. + ```php + $model->field1 = $data['field1']; + $model->field2 = $data['field2']; + // ... + $model->save(); + ``` + 4. **Jangan Ubah Foreign Key Konteks yang Immutable**: + * Jika `company_id`, `branch_id`, atau foreign key konteks lain ditetapkan saat create dan secara bisnis tidak boleh berpindah konteks, maka field tersebut **tidak boleh** di-assign ulang pada method `update`. + * Untuk kebutuhan seperti generate unique code saat update, gunakan nilai yang sudah ada di model (contoh: `$model->company_id`), bukan dari payload update. + * Contoh yang benar: + ```php + $model->code = $this->generateUniqueCode($model->company_id, $data['code'], $model->id); + $model->date = $data['date']; + $model->remarks = $data['remarks']; + $model->save(); + ``` + 5. **Style Kondisional Singkat**: + * Jika conditional hanya berisi satu statement pendek, utamakan *one-line if* tanpa kurung kurawal agar konsisten dengan style project pada action class. + * Cocok dipakai untuk sinkronisasi atau delete relasi internal yang sederhana. + * Contoh: + ```php + $cashTransaction = $model->cashTransaction; + if ($cashTransaction) $this->cashTransactionActions->delete($cashTransaction); + ``` + 6. `$this->flushCache()`. + 7. Return `$model->refresh()`. + +### E. Method `delete` +* **Signature**: `public function delete(Model $model): bool` +* **Alur Logika**: + 1. Start timer & Try-Catch-Finally. + 2. `$model->delete()`. + 3. `$this->flushCache()`. + 4. Return `true` (atau hasil delete). + +## 3. Helper Methods (Wajib Ada) +Untuk menjaga konsistensi data unik (Code & Name), method berikut wajib ada: + +### A. `generateUniqueCode` +* **Signature**: `public function generateUniqueCode(int $companyId, string $code, ?int $exceptId): string` +* **Logika**: + * Cek jika input adalah keyword AUTO (misal: `config('dcslab.KEYWORDS.AUTO')`). + * Looping `do-while` untuk generate kode (Prefix + Counter + Pad). + * Validasi keunikan menggunakan `isUniqueCode`. + +### B. `isUniqueCode` +* **Signature**: `public function isUniqueCode(int $companyId, string $code, ?int $exceptId): bool` +* **Logika**: Cek database apakah kode sudah ada (exclude `$exceptId` jika update). + +### C. `isUniqueName` +* **Signature**: `public function isUniqueName(int $companyId, string $name, ?int $exceptId): bool` +* **Logika**: Validasi keunikan nama (sering digunakan untuk validasi input). diff --git a/.trae/rules/05resource.md b/.trae/rules/05resource.md new file mode 100644 index 000000000..8940e3836 --- /dev/null +++ b/.trae/rules/05resource.md @@ -0,0 +1,106 @@ +--- +alwaysApply: false +description: +--- +# Standardisasi Resource API + +Aturan ini mengatur standar penulisan API Resource (`app/Http/Resources`) untuk menjaga konsistensi format response dan performa aplikasi. + +## 1. Struktur Dasar +- Class harus extends `Illuminate\Http\Resources\Json\JsonResource`. +- Method utama adalah `toArray($request)`. + +## 2. ID Encoding +Semua field `id` (primary key) **WAJIB** di-encode menggunakan `Hashids`. +```php +use Vinkla\Hashids\Facades\Hashids; + +'id' => Hashids::encode($this->id), +``` + +## 3. Handling Status (Soft Deletes) +Jika model menggunakan Soft Deletes, resource harus menangani status `DELETED` secara eksplisit. Gunakan helper method private `setStatus` di dalam class resource. + +```php +use App\Enums\RecordStatusEnum; + +public function toArray($request) +{ + return [ + // ... field lainnya + 'status' => $this->setStatus($this->status, $this->deleted_at), + ]; +} + +private function setStatus($status, $deleted_at) +{ + if (! is_null($deleted_at)) { + return RecordStatusEnum::DELETED->name; + } else { + return $status->name; + } +} +``` + +## 4. Handling Relationships (Eager Loading) +Untuk mencegah N+1 Query problem, **WAJIB**: +- Tidak mengakses relationship secara langsung (`$this->company`, `$this->warehouse`, dll). +- Selalu menggunakan `whenLoaded` untuk semua relasi pada Resource. + +### Single Relation (BelongsTo/HasOne) +Gunakan `new Resource(...)` dengan `whenLoaded` dan opsional `mergeWhen`. +```php +'company' => new CompanyResource($this->whenLoaded('company')), +// Atau jika ingin di-merge ke root level: +$this->mergeWhen($this->relationLoaded('company'), [ + 'company' => new CompanyResource($this->whenLoaded('company')), +]), +``` + +### Collection Relation (HasMany) +Gunakan `Resource::collection(...)`. +```php +'branches' => BranchResource::collection($this->whenLoaded('branches')), +``` + +## 5. Format Data Lainnya +- **ULID**: Sertakan jika ada kolom `ulid`. +- **Enum**: Return `->name` atau `->value` sesuai kebutuhan (biasanya `->name` untuk status). +- **Boolean**: Pastikan return tipe boolean asli (`true`/`false`) atau `1`/`0` sesuai konvensi database project (Project ini tampaknya menggunakan boolean asli di response JSON). + +## Contoh Lengkap +```php +namespace App\Http\Resources; + +use App\Enums\RecordStatusEnum; +use Illuminate\Http\Resources\Json\JsonResource; +use Vinkla\Hashids\Facades\Hashids; + +class BranchResource extends JsonResource +{ + public function toArray($request) + { + return [ + 'id' => Hashids::encode($this->id), + 'ulid' => $this->ulid, + 'code' => $this->code, + 'name' => $this->name, + + // Relationship handling + 'company' => new CompanyResource($this->whenLoaded('company')), + + // Status handling + 'status' => $this->setStatus($this->status, $this->deleted_at), + ]; + } + + private function setStatus($status, $deleted_at) + { + if (! is_null($deleted_at)) { + return RecordStatusEnum::DELETED->name; + } else { + return $status->name; + } + } +} +``` diff --git a/.trae/rules/06controller.md b/.trae/rules/06controller.md new file mode 100644 index 000000000..3830f208b --- /dev/null +++ b/.trae/rules/06controller.md @@ -0,0 +1,226 @@ +--- +alwaysApply: false +description: Standarisasi penulisan Controller untuk modul Master Data, mencakup struktur method, handling request, cache strategy, dan exception handling. +--- +# Controller Standardization Rules (Master Data) + +Aturan ini berlaku untuk semua Controller di bawah menu Master Data (e.g., Company, Branch, Warehouse, Investor, dll). + +## 1. General Structure & Dependencies +- **Inheritance**: Semua controller wajib mewarisi `App\Http\Controllers\BaseController`. +- **Dependency Injection**: Gunakan Constructor Injection untuk memanggil Action Class. +- **Penamaan Properti DI**: Nama properti mengikuti nama class Action dalam camelCase, contoh: + - `StockAdjustmentActions` → `$stockAdjustmentActions` + - `StockAdjustmentInProductActions` → `$stockAdjustmentInProductActions` + - `StockAdjustmentOutProductActions` → `$stockAdjustmentOutProductActions` +- **Common Imports**: + - `App\DTOs\ExecuteDTO`, `ExecuteGetDTO`, `ExecutePaginationDTO` + - `App\Helpers\HashidsHelper` + - `App\Http\Resources\Resource` + - `Illuminate\Support\Facades\Auth` + - `Illuminate\Support\Facades\DB` + - `Exception` + +## 2. CRUD Methods Standard + +### 2.1 Urutan Method Public +Untuk semua controller CRUD di bawah menu Master Data, urutan method public utama harus menggunakan pola berikut: + +1. `readAny` +2. `read` +3. `store` +4. `update` +5. `delete` + +### A. Method `store(StoreRequest $request)` +1. **Validation**: Gunakan dedicated FormRequest class (e.g., `StoreSupplierRequest` atau `SupplierStoreRequest`). + - **Pemisahan Request**: Wajib memisahkan Request untuk Store dan Update untuk menjaga *Single Responsibility*. + - Ambil data dengan `$request->validated()`. +2. **Transaction**: Bungkus logika dalam `try-catch` block dengan `DB::beginTransaction()`, `DB::commit()`, dan `DB::rollBack()`. +3. **Unique Validation**: Lakukan validasi unik manual (Code/Name) memanggil method Action (`isUniqueCode`/`isUniqueName`). + - **Guard Clause**: Gunakan *One-line Guard Clause* untuk pengecekan validasi. + - *Syntax*: `if (! $isUnique) return response()->error(['field' => [trans('rules.unique_...')]], 422);` +4. **Action Execution**: Panggil method `create` pada Action Class. + - *Input*: Kirimkan `array` data (Default). + - Jika Action menerima DTO, gunakan named argument pada pemanggilan Action dan constructor DTO agar mapping field eksplisit dan mudah dibaca. + ```php + $result = $this->entityActions->create( + data: new EntityCreateDTO( + companyId: $validatedRequest['company_id'], + branchId: $validatedRequest['branch_id'], + ) + ); + ``` +5. **Response**: + - Success: `response()->success()` + - Failure: `response()->error($errorMsg)` + - **Formatting**: Gunakan ternary operator untuk return response. + `return is_null($result) ? response()->error($errorMsg) : response()->success();` + +### B. Method `readAny(Request $request)` +1. **Auth & Authorization**: + - **Guard Clause**: Wajib cek `Auth::check()` dengan *One-line Guard Clause*. + `if (! Auth::check()) return response()->error(trans('auth.unauthenticated'), 401);` + - Lanjutkan dengan `$this->authorize('viewAny', Model::class);`. +2. **Input Handling**: + - Gunakan `Illuminate\Http\Request` biasa, bukan FormRequest khusus. + - Decode Hashids (e.g., `company_id`, `include_id`) sebelum validasi. + - Validasi inline menggunakan `$request->validate([...])`. + - **Urutan Parameter Validasi Wajib**: + 1. `with_trashed` (boolean) + 2. `company_id` (integer) + 3. `search` (string) + 4. ... (Filter spesifik lainnya) + 5. `refresh` (boolean) + 6. `paginate` (array) + 7. `get` (array) +3. **Cache Strategy**: + - Logic: `useCache` harus bernilai kebalikan dari request `refresh`. + - Syntax: `useCache: ! $validatedRequest['refresh']`. +4. **Pagination/Get Logic**: + - Gunakan *Immediately Invoked Function Expression (IIFE)* atau closure untuk memisahkan logika `ExecutePaginationDTO` dan `ExecuteGetDTO`. +5. **Grouping Named Argument `readAny` (Wajib 3 Blok untuk Non-Outlier)**: + - Pada pemanggilan Action `readAny`, susun named argument menjadi 3 blok dengan linebreak: + 1. Blok basis/konteks: parameter seperti `withTrashed`, `companyId`, `branchId`, `search`, atau konteks utama lain seperti `referableType` dan `referableId` + 2. Blok filter: semua filter spesifik modul seperti `includeId`, `categoryId`, `brandId`, `warehouseId`, `cashAccountId`, `productId`, `productUnitId`, `serial`, `withRemainingStock`, dan filter bisnis lain + 3. Blok eksekusi: `execute` + - Untuk controller yang memakai `companyId`, urutan basis yang diutamakan adalah `withTrashed`, `companyId`, `branchId` (jika ada), lalu `search`. + - `includeId` tetap masuk ke blok filter. + - Named argument wajib mengikuti urutan pada signature Action agar mapping tetap mudah dibaca saat review. + - Aturan ini berlaku untuk seluruh controller non-legacy yang memanggil `readAny(..., execute: new ExecuteDTO(...))`, termasuk controller master data dan transaksi. + - Controller legacy/outlier berikut dikecualikan dan tidak boleh dipaksa ke pola ini kecuali diminta eksplisit: + - `UserController` + - `RoleController` + - `PurchaseOrderProductUnitController` + - `PurchaseOrderDownPaymentApplyController` + - `PurchaseOrderDownPaymentController` + - Controller Stock Adjustment Product tetap wajib mengikuti pola ini secara ketat: + - `StockAdjustmentInProductController` + - `StockAdjustmentOutProductController` + - `StockAdjustmentInProductSerialController` + - `StockAdjustmentOutProductSerialController` +6. **Response**: `Resource::collection($result)`. + - Gunakan *Early Return* jika hasil null. + ```php + if (is_null($result)) { + return response()->error($errorMsg); + } + return Resource::collection($result); + ``` + +### C. Method `read(Model $model)` +1. **Auth & Authorization**: + - **Guard Clause**: Wajib cek `Auth::check()` dengan *One-line Guard Clause* (sama seperti `readAny`). + - Lanjutkan dengan `$this->authorize('view', $model);`. +2. **Execution**: Panggil method `read` pada Action Class. +3. **Response**: `new Resource($result)`. + - Gunakan *Early Return* jika hasil null (sama seperti `readAny`). + +### D. Method `update(Model $model, UpdateRequest $request)` +1. **Validation**: Gunakan dedicated FormRequest class (e.g., `UpdateSupplierRequest` atau `SupplierUpdateRequest`). +2. **Flow**: Mirip dengan `store`. +3. **Unique Validation**: Sertakan ID model saat ini untuk pengecualian (`ignore current id`). + - Gunakan *One-line Guard Clause* untuk pengecekan validasi. +4. **Action Execution**: Panggil method `update` pada Action Class. + - Jika Action menerima DTO, gunakan named argument baik untuk entity utama maupun `data`. + ```php + $result = $this->entityActions->update( + entity: $entity, + data: new EntityUpdateDTO( + code: $validatedRequest['code'], + remarks: $validatedRequest['remarks'], + ) + ); + ``` +5. **Response**: + - Gunakan ternary operator untuk return response (sama seperti `store`). + +### E. Method `delete(Model $model)` +1. **Auth & Authorization**: + - **Guard Clause**: Wajib cek `Auth::check()` dengan *One-line Guard Clause*. + - Lanjutkan dengan `$this->authorize('delete', $model);`. +2. **Transaction**: Wajib menggunakan DB Transaction. +3. **Business Rules**: Cek validasi bisnis sebelum delete (e.g., `isDefault`). +4. **Response**: + - Gunakan ternary operator untuk return response. + `return ! $result ? response()->error($errorMsg) : response()->success();` + +## 3. Exceptions & Special Cases + +### A. Data Transfer Object (DTO) vs Array +- **Default**: Gunakan **Array** (`$validatedRequest`) untuk mengirim data ke Action Class. +- **DTO Usage Criteria**: Gunakan **DTO** hanya jika: + 1. Struktur data/kolom sangat rumit (complex columns). + 2. Data object tersebut digunakan kembali di banyak tempat (reusability). +- **Contoh**: `ProductController` menggunakan `ProductPhysicalCreateDTO` karena kompleksitas atribut produk fisik. + +### B. Method Naming +- Jika Controller menangani multiple tipe entitas (seperti **Product** yang memisahkan Physical dan Service), penamaan method boleh spesifik: + - `storePhysical`, `storeService` + - `updatePhysical` + +### C. Helper Methods +- Method tambahan seperti `getTypes()` diperbolehkan untuk mengembalikan Enum/Konstanta ke frontend. + +## 4. Form Request Standard + +### A. Prepare For Validation +1. **Use `filled()` over `has()`**: + - Saat melakukan merge input di `prepareForValidation`, gunakan method `$this->filled('key')` daripada `$this->has('key')`. + - **Alasan**: `filled()` memastikan nilai tidak hanya *exist* tapi juga tidak kosong/null string. Ini mencegah error decoding pada Hashids dan memastikan sanitasi data (string kosong menjadi null). + - **Contoh**: + ```php + protected function prepareForValidation() + { + $this->merge([ + // Decode Hashids hanya jika terisi + 'company_id' => $this->filled('company_id') ? HashidsHelper::decodeId($this->company_id) : null, + // Sanitasi string kosong menjadi null + 'address' => $this->filled('address') ? $this['address'] : null, + ]); + } + ``` + +### B. Transaksional Dengan Child (Parent + Detail) + +- Untuk modul transaksional yang saat simpan/update juga menyimpan child/detail (misal: StockAdjustment dengan in_products/out_products): + - Wajib menggunakan FormRequest terpisah untuk `store` dan `update` khusus transaksi tersebut. + - Struktur rules untuk child harus dipusatkan di class khusus di namespace `App\Validation\\`, lalu dipetakan ke nested field di FormRequest. + - Contoh format di FormRequest: + ```php + $rules['in_products'] = ['nullable', 'array']; + $rules += StockAdjustmentInProductRules::mapToFieldNames($this->company_id ?? 0, + 'in_products.*.qty', + 'in_products.*.product_unit_id', + 'in_products.*.product_unit_conversion_value', + 'in_products.*.product_unit_cogs', + 'in_products.*.remarks', + ); + + $rules['out_products'] = ['nullable', 'array']; + $rules += StockAdjustmentOutProductRules::mapToFieldNames($this->company_id ?? 0, + 'out_products.*.qty', + 'out_products.*.product_unit_id', + 'out_products.*.product_unit_conversion_value', + 'out_products.*.remarks', + ); + ``` + - Pola di atas memastikan: + - Satu sumber kebenaran untuk rules child. + - Jika aturan field child berubah, FormRequest akan ikut terdampak (mencegah duplikasi rules tersebar di banyak tempat). + +### B. Authorization +1. **Check Auth First**: Selalu cek `Auth::check()` terlebih dahulu. +2. **Gate Policy**: Gunakan `$user->can()` untuk memanggil Policy yang sesuai. + - **Contoh**: + ```php + public function authorize() + { + if (! Auth::check()) { + return false; + } + /** @var \App\User */ + $user = Auth::user(); + return $user->can('create', Supplier::class); + } + ``` diff --git a/.trae/rules/07apitest.md b/.trae/rules/07apitest.md new file mode 100644 index 000000000..9ec6a7203 --- /dev/null +++ b/.trae/rules/07apitest.md @@ -0,0 +1,121 @@ +--- +alwaysApply: false +description: +--- +# Standarisasi API Test (Master Data) + +Aturan ini berlaku untuk pembuatan dan pemeliharaan tes API pada modul Master Data (dan turunannya) yang terletak di `tests/Feature/API`. + +## 1. Struktur File dan Namespace + +Setiap modul memiliki direktori sendiri di dalam `tests/Feature/API/` dengan format nama `{Module}API`. +Tes dipecah berdasarkan aksi (CRUD) menjadi file terpisah: + +- `Create`: `{Module}API/{Module}APICreateTest.php` +- `Read`: `{Module}API/{Module}APIReadTest.php` +- `Edit`: `{Module}API/{Module}APIEditTest.php` +- `Delete`: `{Module}API/{Module}APIDeleteTest.php` + +**Namespace:** `Tests\Feature\API\{Module}API;` +**Inheritance:** Semua class test harus meng-extend `Tests\APITestCase`. + +## 2. Penamaan Method Test + +Format penamaan method harus konsisten: +`test_{module}_api_call_{action}_{condition}_expect_{result}` + +Contoh: +- `test_branch_api_call_store_without_authorization_expect_unauthorized_message` +- `test_branch_api_call_update_expect_successful` +- `test_branch_api_call_delete_of_nonexistance_ulid_expect_not_found` + +## 3. Standar Test Case + +Setiap file test harus mencakup skenario berikut (jika relevan): + +### Common Scenarios (Create, Edit, Delete, Read) +1. **Unauthorized Access**: Memastikan user tanpa login mendapatkan respon 401. + - Method: `..._without_authorization_expect_unauthorized_message` + - Assert: `$api->assertUnauthorized()` +2. **Forbidden Access**: Memastikan user login tanpa hak akses mendapatkan respon 403. + - Method: `..._without_access_right_expect_forbidden_message` + - Assert: `$api->assertForbidden()` + +### Create & Edit Scenarios (`save`, `edit`) +1. **Successful Operation**: Test flow normal dengan data valid. + - Gunakan `Hashids::encode($id)` untuk referensi ID dalam payload. + - Assert: `$api->assertSuccessful()` dan `$this->assertDatabaseHas(...)`. +2. **XSS Protection**: Memastikan script tag di-strip atau di-encode. + - `..._with_script_tags_in_payload_expect_stripped` + - `..._with_script_tags_in_payload_expect_encoded` (header `X-Sanitizer-Mode: encode`) +3. **Validation Errors**: Test field wajib kosong atau format salah. + - Assert: `$api->assertJsonValidationErrors(['field_name'])`. +4. **Unique Code Validation**: + - `..._with_existing_code_in_same_company_expect_failed` (422 Unprocessable). + - `..._with_existing_code_in_different_company_expect_successful` (Harus boleh duplikat beda company). +5. **Auto Code**: Jika fitur mendukung `AUTO` generate code. + - `..._with_auto_code_expect_successful`. + +### Delete Scenarios (`delete`) +1. **Successful Delete**: + - Assert: `$api->assertSuccessful()` dan `$this->assertSoftDeleted(...)` (jika soft delete). +2. **Not Found**: Menghapus resource dengan ULID random/tidak ada. + - Assert: `$api->assertStatus(404)`. +3. **Logic Constraints**: Menghapus data yang tidak boleh dihapus (misal: Main Branch). + - Assert: `$api->assertUnprocessable()` atau status 422. + +### Read Scenarios (`read`) +1. **Successful Read**: + - Assert: `$api->assertSuccessful()`. + - Cek struktur JSON respon (pagination, data). +2. **Pagination & Filtering**: + - Pastikan parameter seperti `page`, `per_page`, `search`, `company_id` berfungsi. + - Ikuti urutan parameter sesuai `rules/05controller.md` untuk request. + +## 4. Setup dan Data Factory + +- Gunakan `User::factory()` dengan role `DEVELOPER` untuk user yang memiliki akses penuh dalam test positif. +- Gunakan `setUp(): void` yang memanggil `parent::setUp()`. +- Hindari hardcode ID, gunakan factory relationship. + +```php +$user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); +``` + +## 5. Routing + +Gunakan helper `route()` dengan nama route yang standar: +- Create: `api.post.{module}.save` +- Read: `api.get.{module}.read` +- Edit: `api.post.{module}.edit` (parameter ULID) +- Delete: `api.post.{module}.delete` (parameter ULID) + +## 6. Contoh Implementasi (Template Singkat) + +```php +public function test_module_api_call_store_expect_successful() +{ + // 1. Setup User & Data + $user = User::factory()->...->create(); + $this->actingAs($user); + + // 2. Prepare Payload + $company = $user->companies->first(); + $payload = Model::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + // 3. Call API + $api = $this->json('POST', route('api.post.module.save'), $payload); + + // 4. Assertions + $api->assertSuccessful(); + $this->assertDatabaseHas('table_name', [ + 'company_id' => $company->id, + 'name' => $payload['name'], + ]); +} +``` diff --git a/.trae/rules/08requestts.md b/.trae/rules/08requestts.md new file mode 100644 index 000000000..a07c24a5d --- /dev/null +++ b/.trae/rules/08requestts.md @@ -0,0 +1,116 @@ +--- +alwaysApply: false +description: +--- +# Standarisasi Request.ts (Frontend Type Definitions) + +Aturan ini mengatur standar penulisan file definisi tipe TypeScript (`Request.ts`) untuk layanan frontend di direktori `web/src/types/services`. + +## 1. Penamaan File dan Lokasi +- **Lokasi**: `web/src/types/services/{module}/{Module}Request.ts` +- **Penamaan File**: `{Module}Request.ts` (PascalCase). +- **Contoh**: `web/src/types/services/branch/BranchRequest.ts` + +## 2. Struktur Interface +Setiap file `Request.ts` umumnya harus memiliki interface berikut: + +### 2.1. ReadAnyPaginateRequest +Digunakan untuk request daftar data dengan paginasi. + +**Format Penamaan**: `export interface {Module}ReadAnyPaginateRequest` + +**Urutan Property (Wajib Dipatuhi):** +1. `with_trashed: boolean;` (Wajib, paling atas) +2. `company_id: string;` (Jika modul scope company) +3. `branch_id?: string | null;` (Jika modul scope branch) +4. `search?: string | null;` (Pencarian umum) +5. `...filters` (Filter spesifik lain, misal `branch_id`, `status`, `type`, `include_id`, dll) + - **Catatan**: Urutan filter harus sesuai dengan urutan `$fillable` pada Model terkait di backend. +6. `refresh: boolean;` (Wajib) +8. `page: number;` (Wajib) +9. `per_page: number;` (Wajib) + +**Contoh:** +```typescript +export interface BranchReadAnyPaginateRequest { + with_trashed: boolean; + company_id: string; + search?: string | null; + is_main?: boolean; + status?: string | number; + include_id?: string; + refresh: boolean; + page: number; + per_page: number; +} +``` + +### 2.2. ReadAnyGetRequest +Digunakan untuk request daftar data tanpa paginasi penuh (biasanya dengan limit). + +**Format Penamaan**: `export interface {Module}ReadAnyGetRequest` + +**Urutan Property:** +Mirip dengan `PaginateRequest`, namun mengganti `page` dan `per_page` dengan `limit`. + +1. `with_trashed: boolean;` +2. `company_id: string;` +3. `search?: string | null;` + +4. `...` (Property scope & filter sama seperti Paginate) + - **Catatan**: Urutan filter wajib mengikuti urutan `$fillable` pada Model terkait di backend. +5. `refresh: boolean;` +6. `limit: number;` + +**Contoh:** +```typescript +export interface BranchReadAnyGetRequest { + with_trashed: boolean; + company_id: string; + search?: string | null; + is_main?: boolean; + status?: string | number; + include_id?: string; + refresh: boolean; + limit: number; +} +``` + +### 2.3. StoreRequest & UpdateRequest +Digunakan untuk payload Create dan Edit. + +**Format Penamaan**: +- `export interface {Module}StoreRequest` +- `export interface {Module}UpdateRequest` + +**Aturan:** +- Sesuaikan dengan field yang dibutuhkan API. +- Gunakan tipe yang tepat (`string`, `number`, `boolean`). +- Property opsional ditandai dengan `?`. + +## 3. Konvensi Tipe Data +- **Search**: `search?: string | null;` +- **Status**: `status?: string | number;` (Mengakomodasi status berupa kode string atau angka enum) +- **ID Fields**: `string` (Karena menggunakan Hashids) +- **Boolean Flags**: `boolean` (bukan number 0/1) + +## 4. Urutan Filter (Wajib) +Semua filter tambahan (selain `company_id`, `branch_id`, dan `search`) **WAJIB** diurutkan berdasarkan urutan properti `$fillable` pada Model Eloquent terkait di backend. Hal ini untuk memastikan konsistensi antara Frontend dan Backend validation logic. + +## 5. Referensi +Selalu pastikan interface ini sinkron dengan parameter yang diharapkan oleh Controller API di sisi backend (lihat `06controller.md` untuk urutan parameter di backend, meskipun di frontend kita mengirim object JSON/Query param, menjaga konsistensi penamaan sangat penting). + +## 6. Aturan Khusus Stock Adjustment Product `readAny` +- Untuk request type: + - `StockAdjustmentInProductReadAnyPaginateRequest` + - `StockAdjustmentInProductReadAnyGetRequest` + - `StockAdjustmentOutProductReadAnyPaginateRequest` + - `StockAdjustmentOutProductReadAnyGetRequest` + - `StockAdjustmentInProductSerialReadAnyPaginateRequest` + - `StockAdjustmentInProductSerialReadAnyGetRequest` + - `StockAdjustmentOutProductSerialReadAnyPaginateRequest` + - `StockAdjustmentOutProductSerialReadAnyGetRequest` +- Urutan property wajib mengikuti 3 blok: + 1. `with_trashed`, `company_id`, `branch_id`, `search` + 2. `stock_adjustment_id`, `start_date`, `end_date`, `category_id`, `in_warehouse_id`, `out_warehouse_id`, `product_unit_code`, `product_name`, `product_category_id`, `product_brand_id` + 3. `refresh` lalu `page/per_page` atau `limit` diff --git a/.trae/rules/09service.md b/.trae/rules/09service.md new file mode 100644 index 000000000..392df13f8 --- /dev/null +++ b/.trae/rules/09service.md @@ -0,0 +1,221 @@ +--- +alwaysApply: false +description: +--- +# Standarisasi Service Frontend (Service.ts) + +Dokumen ini menjelaskan standar penulisan file Service di frontend (`web/src/services/`) untuk menjaga konsistensi, type safety, dan kemudahan maintenance. + +## 1. Struktur Dasar Class +Setiap Service class harus: +- Di-export sebagai `default`. +- Menginjeksi `ZiggyRouteStore` untuk manajemen route. +- Menginjeksi `ErrorHandlerService` untuk penanganan error yang seragam. +- Memiliki properti `ziggyRoute` dan `errorHandlerService`. + +```typescript +import axios from "../axios"; +import { useZiggyRouteStore } from "../stores/ziggy-route"; +import { route, Config } from "ziggy-js"; +import { ServiceResponse } from "../types/services/ServiceResponse"; +import ErrorHandlerService from "./ErrorHandlerService"; +// ... imports lainnya + +export default class ExampleService { + private ziggyRoute: Config; + private ziggyRouteStore = useZiggyRouteStore(); + private errorHandlerService; + + constructor() { + this.ziggyRoute = this.ziggyRouteStore.getZiggy; + this.errorHandlerService = new ErrorHandlerService(); + } + // ... methods +} +``` + +## 2. Penamaan Method (Naming Convention) +Gunakan nama method berikut untuk operasi standar CRUD: + +| Operasi | Nama Method | Signature | +|---------|-------------|-----------| +| Read Paginated | `readAnyPaginate` | `(args: RequestType): Promise> \| null>>` | +| Read List (No Pagination) | `readAnyGet` | `(args: RequestType): Promise> \| null>>` | +| Read Single | `read` | `(ulid: string): Promise>` | +| Delete | `delete` | `(ulid: string): Promise>` | +| Form Create | `use[Entity]CreateForm` | `(): Form<...>` | +| Form Edit | `use[Entity]EditForm` | `(ulid: string): Form<...>` | + +## 2.1. Urutan Method dalam Class Service +Setelah `constructor()`, urutan method di dalam class service wajib konsisten seperti berikut: + +1. `readAnyPaginate` +2. `readAnyGet` +3. `read` +4. `use[Entity]CreateForm` +5. `use[Entity]EditForm` +6. `delete` + +Contoh urutan yang benar: + +```typescript +export default class ExampleService { + constructor() { + // ... + } + + public async readAnyPaginate(...) { + // ... + } + + public async readAnyGet(...) { + // ... + } + + public async read(...) { + // ... + } + + public useExampleCreateForm() { + // ... + } + + public useExampleEditForm(ulid: string) { + // ... + } + + public async delete(ulid: string) { + // ... + } +} +``` + +Urutan ini dipakai agar service mudah dipindai: method baca data ditempatkan lebih dulu, form builder di tengah, dan aksi destruktif `delete` diletakkan paling akhir. + +## 3. Penanganan Parameter Request (Query Params) +Pastikan parameter diproses dengan benar sebelum dikirim ke API: + +### a. Boolean +Jangan mengonversi boolean ke `1` atau `0` secara manual. Kirimkan nilai boolean asli jika API mendukungnya, atau biarkan handling di backend. +**JANGAN:** `queryParams["active"] = args.active ? 1 : 0;` +**LAKUKAN:** +```typescript +if (args.active !== undefined) queryParams['active'] = args.active; +``` + +### b. Search & Optional Strings +Jangan mengirim string kosong (`""`) untuk parameter opsional seperti `search`. Cek keberadaan nilai terlebih dahulu. +**JANGAN:** `queryParams["search"] = args.search ? args.search : "";` +**LAKUKAN:** +```typescript +if (args.search) queryParams['search'] = args.search; +``` + +### c. Conditional Parameters +Hanya masukkan parameter ke `queryParams` jika nilainya ada (tidak `undefined` atau `null`). +```typescript +if (args.status) queryParams['status'] = args.status; +if (args.company_id) queryParams['company_id'] = args.company_id; +``` + +### d. Konsistensi Urutan Query `readAny` untuk Stock Adjustment Product +Untuk service berikut: +- `StockAdjustmentInProductService` +- `StockAdjustmentOutProductService` +- `StockAdjustmentInProductSerialService` +- `StockAdjustmentOutProductSerialService` + +Urutan pengisian `queryParams` pada `readAnyPaginate` dan `readAnyGet` wajib mengikuti 3 blok: +1. Basis: `with_trashed`, `company_id`, `branch_id`, `search` +2. Filter: `stock_adjustment_id`, `start_date`, `end_date`, `category_id`, `in_warehouse_id`, `out_warehouse_id`, `product_unit_code`, `product_name`, `product_category_id`, `product_brand_id` +3. Eksekusi: `refresh`, lalu `paginate` atau `get` + +## 4. Return Types & Response Handling +Selalu gunakan tipe data yang eksplisit. + +### Delete Method +Method `delete` harus mengembalikan `ServiceResponse`, bukan `any` atau `void`. + +```typescript +public async delete(ulid: string): Promise> { + const result: ServiceResponse = { success: false }; + try { + // ... request + if (response.status == StatusCode.OK) { + result.success = true; + } + return result; + } catch (e: unknown) { + // error handling + } +} +``` + +## 5. Error Handling +Gunakan pola `try-catch` standar dengan `ErrorHandlerService`. + +```typescript +try { + // ... axios call +} catch (e: unknown) { + if (e instanceof Error && e.message.includes('Ziggy error')) { + return this.errorHandlerService.generateZiggyUrlErrorServiceResponse(e.message); + } else if (isAxiosError(e)) { + return this.errorHandlerService.generateAxiosErrorServiceResponse(e as AxiosError); + } else { + return result; + } +} +``` + +## 6. Form Handling (Laravel Precognition) +Untuk form Create dan Edit, gunakan helper `client` dan `useForm` dari `laravel-precognition-vue`. Pastikan credentials dan CSRF token di-set. + +```typescript +public useExampleCreateForm() { + const url = route('api.post.example.save', undefined, true, this.ziggyRoute); + + client.axios().defaults.withCredentials = true; + client.axios().defaults.withXSRFToken = true; + + const form = useForm('post', url, { + code: '_AUTO_', + name: '', + status: 'ACTIVE', + // ... fields lainnya + }); + + return form; +} +``` + +### a. Typing `useForm` (Penting) +Pada beberapa versi type definition `laravel-precognition-vue`, parameter `data` pada `useForm(...)` dibatasi ke `Record`. Akibatnya, menambahkan generic seperti `useForm(...)` atau mengirim object yang ditipkan langsung ke `MyRequestType` bisa memunculkan error: +`Index signature for type 'string' is missing in type 'MyRequestType'`. + +**LAKUKAN:** +- Panggil `useForm('post', url, { ... })` tanpa generic. +- Jika ada field array yang butuh typing, gunakan assertion pada field tersebut saja. + +```typescript +import type { MyStoreRequest } from "../types/services/my-entity/MyEntityRequest"; + +const form = useForm("post", url, { + company_id: "", + code: "_AUTO_", + items: [] as NonNullable, +}); +``` + +**JANGAN:** +```typescript +const initialData: MyStoreRequest = { /* ... */ }; +const form = useForm("post", url, initialData); +``` + +## 7. Import Order +Urutkan import untuk keterbacaan: +1. Library eksternal (`axios`, `ziggy-js`, `laravel-precognition-vue`) +2. Stores (`pinia` stores) +3. Types (`models`, `resources`, `services`, `enums`) +4. Internal Services (`ErrorHandlerService`, `CacheService`) diff --git a/.trae/rules/10createvue.md b/.trae/rules/10createvue.md new file mode 100644 index 000000000..6e8b04eea --- /dev/null +++ b/.trae/rules/10createvue.md @@ -0,0 +1,620 @@ +--- +alwaysApply: false +description: Standarisasi penulisan halaman Create (EntityCreate.vue) di Frontend +--- +# Standarisasi Halaman Create (EntityCreate.vue) + +Dokumen ini menjelaskan standar penulisan halaman `[Entity]Create.vue` di frontend (`web/src/pages/[entity]/[Entity]Create.vue`) untuk menjaga konsistensi UI/UX, performa, dan error handling. + +## 1. Imports + +### Axios +Jangan mengimpor `axios` secara default. Impor hanya `isAxiosError` dan `AxiosError` untuk keperluan type checking dan error handling. + +**JANGAN:** `import axios from "axios";` +**LAKUKAN:** +```typescript +import { isAxiosError, AxiosError } from "axios"; +``` + +### Components & Services +Pastikan mengimpor komponen UI standar dan Service yang diperlukan. + +```typescript +import { TwoColumnsLayout } from "@/components/Base/Form/FormLayout"; +import { TwoColumnsLayoutCards } from "@/components/Base/Form/FormLayout/TwoColumnsLayout.vue"; +import { CardState } from "@/types/enums/CardState"; +import Button from "@/components/Base/Button"; +import Lucide from "@/components/Base/Lucide"; +import { type AlertPlaceholderProps } from "@/components/AlertPlaceholder/AlertPlaceholder.vue"; +import { + FormInput, + FormLabel, + FormSelect, + FormErrorMessages, + // ... komponen form lainnya +} from "@/components/Base/Form"; +import CacheService from "@/services/CacheService"; +import DashboardService from "@/services/DashboardService"; +// ... Import Service entitas terkait +``` + +## 2. Struktur & Layout + +Gunakan `TwoColumnsLayout` dengan definisi `cards` state. + +```typescript +// Script Setup +const cards = ref>([ + { + title: "views.entity.field_groups.group_1", + state: CardState.Expanded, + id: "group1" + }, + // ... group lainnya + { title: "", state: CardState.Hidden, id: "button" }, +]); + +// Template + +``` + +### Struktur Script Setup (Region) + +Untuk halaman Create dengan `', + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('cash_accounts', [ + 'company_id' => $company->id, + 'name' => 'alert("xss")', + ]); + } + + public function test_cash_account_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'name' => '', + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.save'), $payload, ['X-Sanitizer-Mode' => 'encode']); + + $api->assertSuccessful(); + $this->assertDatabaseHas('cash_accounts', [ + 'company_id' => $company->id, + 'name' => '<script>alert("xss")</script>', + ]); + } + + public function test_cash_account_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('cash_accounts', [ + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_cash_account_api_call_store_with_auto_code_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'code' => Config::get('dcslab.KEYWORDS.AUTO'), + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('cash_accounts', [ + 'company_id' => $company->id, + 'branch_id' => $branch->id, + 'name' => $payload['name'], + ]); + } + + public function test_cash_account_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($company->id + 999), // Invalid Branch ID + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.save'), $payload); + + $api->assertStatus(422); + $api->assertJsonValidationErrors(['branch_id']); + } + + public function test_cash_account_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + CashAccount::factory()->for($company)->create([ + 'code' => 'test1', + 'branch_id' => $branch->id, + ]); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.save'), $payload); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_cash_account_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->has(Company::factory()->setStatusActive()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->whereHas('branches')->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + $branch_1 = $company_1->branches()->inRandomOrder()->first(); + + CashAccount::factory()->for($company_1)->create([ + 'code' => 'test1', + 'branch_id' => $branch_1->id, + ]); + + $branch_2 = $company_2->branches()->inRandomOrder()->first(); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'branch_id' => Hashids::encode($branch_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('cash_accounts', [ + 'company_id' => $company_2->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_cash_account_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $payload = []; + + $api = $this->json('POST', route('api.post.cash_account.save'), $payload); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name', 'is_bank', 'is_active']); + } +} diff --git a/api/tests/Feature/API/CashAccountAPI/CashAccountAPIDeleteTest.php b/api/tests/Feature/API/CashAccountAPI/CashAccountAPIDeleteTest.php new file mode 100644 index 000000000..6271a2273 --- /dev/null +++ b/api/tests/Feature/API/CashAccountAPI/CashAccountAPIDeleteTest.php @@ -0,0 +1,106 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $api = $this->json('POST', route('api.post.cash_account.delete', $cashAccount->ulid)); + + $api->assertUnauthorized(); + } + + public function test_cash_account_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $api = $this->json('POST', route('api.post.cash_account.delete', $cashAccount->ulid)); + + $api->assertForbidden(); + } + + public function test_cash_account_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $api = $this->json('POST', route('api.post.cash_account.delete', $cashAccount->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('cash_accounts', [ + 'id' => $cashAccount->id, + ]); + } + + public function test_cash_account_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.cash_account.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_cash_account_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $this->json('POST', route('api.post.cash_account.delete', null)); + } +} diff --git a/api/tests/Feature/API/CashAccountAPI/CashAccountAPIEditTest.php b/api/tests/Feature/API/CashAccountAPI/CashAccountAPIEditTest.php new file mode 100644 index 000000000..533852a7e --- /dev/null +++ b/api/tests/Feature/API/CashAccountAPI/CashAccountAPIEditTest.php @@ -0,0 +1,225 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.edit', $cashAccount->ulid), $payload); + + $api->assertUnauthorized(); + } + + public function test_cash_account_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.edit', $cashAccount->ulid), $payload); + + $api->assertForbidden(); + } + + public function test_cash_account_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'name' => '', + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.edit', $cashAccount->ulid), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('cash_accounts', [ + 'id' => $cashAccount->id, + 'company_id' => $company->id, + 'name' => 'alert("xss")', + ]); + } + + public function test_cash_account_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'name' => '', + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.edit', $cashAccount->ulid), $payload, ['X-Sanitizer-Mode' => 'encode']); + + $api->assertSuccessful(); + $this->assertDatabaseHas('cash_accounts', [ + 'id' => $cashAccount->id, + 'company_id' => $company->id, + 'name' => '<script>alert("xss")</script>', + ]); + } + + public function test_cash_account_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.edit', $cashAccount->ulid), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('cash_accounts', [ + 'id' => $cashAccount->id, + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_cash_account_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->first(); + $branch = $company->branches()->inRandomOrder()->first(); + CashAccount::factory()->for($company)->count(2)->create([ + 'branch_id' => $branch->id, + ]); + + $cashAccounts = $company->cashAccounts()->inRandomOrder()->take(2)->get(); + $cashAccount_1 = $cashAccounts[0]; + $cashAccount_2 = $cashAccounts[1]; + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'code' => $cashAccount_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.edit', $cashAccount_2->ulid), $payload); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_cash_account_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->has(Company::factory()->setStatusActive()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->whereHas('branches')->inRandomOrder()->get(); + + $company_1 = $companies[0]; + $branch_1 = $company_1->branches()->inRandomOrder()->first(); + CashAccount::factory()->for($company_1)->create([ + 'code' => 'test1', + 'branch_id' => $branch_1->id, + ]); + + $company_2 = $companies[1]; + $branch_2 = $company_2->branches()->inRandomOrder()->first(); + $cashAccount_2 = CashAccount::factory()->for($company_2)->create([ + 'code' => 'test2', + 'branch_id' => $branch_2->id, + ]); + + $payload = CashAccount::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.cash_account.edit', $cashAccount_2->ulid), $payload); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/CashAccountAPI/CashAccountAPIReadTest.php b/api/tests/Feature/API/CashAccountAPI/CashAccountAPIReadTest.php new file mode 100644 index 000000000..30a8cf6ab --- /dev/null +++ b/api/tests/Feature/API/CashAccountAPI/CashAccountAPIReadTest.php @@ -0,0 +1,381 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $api = $this->getJson(route('api.get.cash_account.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(401); + } + + public function test_cash_account_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $api = $this->getJson(route('api.get.cash_account.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(403); + } + + public function test_cash_account_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $ulid = $cashAccount->ulid; + + $api = $this->getJson(route('api.get.cash_account.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_cash_account_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $ulid = $cashAccount->ulid; + + $api = $this->getJson(route('api.get.cash_account.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_cash_account_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + '1 OR SLEEP(5)', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + "admin'--", + "' OR 1=1 --", + ]; + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.cash_account.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.cash_account.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_cash_account_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $api = $this->getJson(route('api.get.cash_account.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.cash_account.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + ]); + } + + public function test_cash_account_api_call_read_any_with_search_expect_filtered() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $cashAccount = CashAccount::factory()->for($company)->create([ + 'name' => 'Searchable Name', + 'branch_id' => $branch->id, + ]); + + CashAccount::factory()->for($company)->create([ + 'name' => 'Other Name', + 'branch_id' => $branch->id, + ]); + + $api = $this->getJson(route('api.get.cash_account.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'Searchable', + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonFragment([ + 'name' => 'Searchable Name', + ]); + $api->assertJsonMissing([ + 'name' => 'Other Name', + ]); + } + + public function test_cash_account_api_call_read_any_with_branch_filter_expect_filtered() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branches = $company->branches()->inRandomOrder()->take(2)->get(); + + if ($branches->count() < 2) { + $branch_1 = $branches->first(); + $branch_2 = Branch::factory()->for($company)->create(); + } else { + $branch_1 = $branches[0]; + $branch_2 = $branches[1]; + } + + CashAccount::factory()->for($company)->create([ + 'name' => 'Account Branch 1', + 'branch_id' => $branch_1->id, + ]); + + CashAccount::factory()->for($company)->create([ + 'name' => 'Account Branch 2', + 'branch_id' => $branch_2->id, + ]); + + $api = $this->getJson(route('api.get.cash_account.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch_1->id), + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonFragment([ + 'name' => 'Account Branch 1', + ]); + $api->assertJsonMissing([ + 'name' => 'Account Branch 2', + ]); + } + + public function test_cash_account_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $cashAccount = CashAccount::factory()->for($company)->create([ + 'branch_id' => $branch->id, + ]); + + $ulid = $cashAccount->ulid; + + $api = $this->getJson(route('api.get.cash_account.read', $ulid)); + + $api->assertSuccessful(); + $api->assertJsonFragment([ + 'name' => $cashAccount->name, + ]); + } + + public function test_cash_account_api_call_read_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.cash_account.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/CompanyAPI/CompanyAPICreateTest.php b/api/tests/Feature/API/CompanyAPI/CompanyAPICreateTest.php index a5b481e82..9d371301b 100644 --- a/api/tests/Feature/API/CompanyAPI/CompanyAPICreateTest.php +++ b/api/tests/Feature/API/CompanyAPI/CompanyAPICreateTest.php @@ -2,7 +2,7 @@ namespace Tests\Feature\API\CompanyAPI; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Company; use App\Models\Role; use App\Models\User; @@ -18,13 +18,13 @@ protected function setUp(): void public function test_company_api_call_store_without_authorization_expect_unauthorized_message() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); - $companyArr = Company::factory()->setStatusActive()->setIsDefault() + $payload = Company::factory()->setStatusActive()->setIsDefault() ->make()->toArray(); - $api = $this->json('POST', route('api.post.db.company.company.save'), $companyArr); + $api = $this->json('POST', route('api.post.company.save'), $payload); $api->assertUnauthorized(); } @@ -36,10 +36,10 @@ public function test_company_api_call_store_without_access_right_expect_unauthor $this->actingAs($user); - $companyArr = Company::factory()->setStatusActive()->setIsDefault() + $payload = Company::factory()->setStatusActive()->setIsDefault() ->make()->toArray(); - $api = $this->json('POST', route('api.post.db.company.company.save'), $companyArr); + $api = $this->json('POST', route('api.post.company.save'), $payload); $api->assertForbidden(); } @@ -57,37 +57,130 @@ public function test_company_api_call_store_with_script_tags_in_payload_expect_e public function test_company_api_call_store_expect_successful() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); - $companyArr = Company::factory()->setStatusActive()->setIsDefault() + $payload = Company::factory()->setStatusActive()->setIsDefault() ->make()->toArray(); - $api = $this->json('POST', route('api.post.db.company.company.save'), $companyArr); + $api = $this->json('POST', route('api.post.company.save'), $payload); $api->assertSuccessful(); $this->assertDatabaseHas('companies', [ - 'code' => $companyArr['code'], - 'name' => $companyArr['name'], - 'address' => $companyArr['address'], - 'default' => $companyArr['default'], - 'status' => $companyArr['status'], + 'code' => $payload['code'], + 'name' => $payload['name'], + 'address' => $payload['address'], + 'default' => $payload['default'], + 'status' => $payload['status'], + ]); + } + + public function test_company_api_call_store_with_existing_code_in_same_user_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->state([ + 'code' => 'CP001', + ])) + ->create(); + + $this->actingAs($user); + + $payload = Company::factory()->setStatusActive()->make([ + 'code' => 'CP001', + ])->toArray(); + + $api = $this->json('POST', route('api.post.company.save'), $payload); + + $api->assertUnprocessable(); + $api->assertJsonValidationErrors(['code']); + } + + public function test_company_api_call_store_with_existing_name_in_same_user_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()->state([ + 'name' => 'Company Sama', + ])) + ->create(); + + $this->actingAs($user); + + $payload = Company::factory()->setStatusActive()->make([ + 'name' => 'Company Sama', + ])->toArray(); + + $api = $this->json('POST', route('api.post.company.save'), $payload); + + $api->assertUnprocessable(); + $api->assertJsonValidationErrors(['name']); + } + + public function test_company_api_call_store_with_existing_code_in_different_user_expect_successful() + { + User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()->state([ + 'code' => 'CP001', + ])) + ->create(); + + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->create(); + + $this->actingAs($user); + + $payload = Company::factory()->setStatusActive()->make([ + 'code' => 'CP001', + ])->toArray(); + + $api = $this->json('POST', route('api.post.company.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('companies', [ + 'code' => 'CP001', + 'name' => $payload['name'], + ]); + } + + public function test_company_api_call_store_with_auto_code_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->create(); + + $this->actingAs($user); + + $payload = Company::factory()->setStatusActive()->make([ + 'code' => config('dcslab.KEYWORDS.AUTO'), + ])->toArray(); + + $api = $this->json('POST', route('api.post.company.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseMissing('companies', [ + 'code' => config('dcslab.KEYWORDS.AUTO'), + 'name' => $payload['name'], + ]); + $this->assertDatabaseHas('companies', [ + 'name' => $payload['name'], ]); } public function test_company_api_call_store_with_empty_string_parameters_expect_validation_error() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); - $companyArr = []; + $payload = []; - $api = $this->json('POST', route('api.post.db.company.company.save'), $companyArr); + $api = $this->json('POST', route('api.post.company.save'), $payload); $api->assertJsonValidationErrors(['code', 'name', 'status']); } diff --git a/api/tests/Feature/API/CompanyAPI/CompanyAPIDeleteTest.php b/api/tests/Feature/API/CompanyAPI/CompanyAPIDeleteTest.php index 22eb80223..62efdcbb7 100644 --- a/api/tests/Feature/API/CompanyAPI/CompanyAPIDeleteTest.php +++ b/api/tests/Feature/API/CompanyAPI/CompanyAPIDeleteTest.php @@ -2,7 +2,7 @@ namespace Tests\Feature\API\CompanyAPI; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Company; use App\Models\Role; use App\Models\User; @@ -24,7 +24,7 @@ public function test_company_api_call_delete_without_authorization_expect_unauth $idxDefaultCompany = random_int(0, $companyCount - 1); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->count($companyCount) ->state(new Sequence( fn (Sequence $sequence) => [ @@ -36,7 +36,7 @@ public function test_company_api_call_delete_without_authorization_expect_unauth $company = $user->companies()->where('default', '=', false)->first(); - $api = $this->json('POST', route('api.post.db.company.company.delete', $company->ulid)); + $api = $this->json('POST', route('api.post.company.delete', $company->ulid)); $api->assertUnauthorized(); } @@ -60,7 +60,7 @@ public function test_company_api_call_delete_without_access_right_expect_unautho $company = $user->companies()->where('default', '=', false)->first(); - $api = $this->json('POST', route('api.post.db.company.company.delete', $company->ulid)); + $api = $this->json('POST', route('api.post.company.delete', $company->ulid)); $api->assertForbidden(); } @@ -71,7 +71,7 @@ public function test_company_api_call_delete_expect_successful() $idxDefaultCompany = random_int(0, $companyCount - 1); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->count($companyCount) ->state(new Sequence( fn (Sequence $sequence) => [ @@ -85,7 +85,7 @@ public function test_company_api_call_delete_expect_successful() $company = $user->companies()->where('default', '=', false)->first(); - $api = $this->json('POST', route('api.post.db.company.company.delete', $company->ulid)); + $api = $this->json('POST', route('api.post.company.delete', $company->ulid)); $api->assertSuccessful(); $this->assertSoftDeleted('companies', [ @@ -101,7 +101,7 @@ public function test_company_api_call_delete_of_nonexistance_ulid_expect_not_fou $ulid = Str::ulid()->generate(); - $api = $this->json('POST', route('api.post.db.company.company.delete', $ulid)); + $api = $this->json('POST', route('api.post.company.delete', $ulid)); $api->assertStatus(404); } @@ -112,6 +112,6 @@ public function test_company_api_call_delete_without_parameters_expect_failed() $user = User::factory()->create(); $this->actingAs($user); - $api = $this->json('POST', route('api.post.db.company.company.delete', null)); + $api = $this->json('POST', route('api.post.company.delete', null)); } } diff --git a/api/tests/Feature/API/CompanyAPI/CompanyAPIEditTest.php b/api/tests/Feature/API/CompanyAPI/CompanyAPIEditTest.php index 6cbd250e8..ca1e409ea 100644 --- a/api/tests/Feature/API/CompanyAPI/CompanyAPIEditTest.php +++ b/api/tests/Feature/API/CompanyAPI/CompanyAPIEditTest.php @@ -2,7 +2,7 @@ namespace Tests\Feature\API\CompanyAPI; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Company; use App\Models\Role; use App\Models\User; @@ -19,15 +19,15 @@ protected function setUp(): void public function test_company_api_call_update_without_authorization_expect_unauthorized_message() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); $company = $user->companies->first(); - $companyArr = Company::factory()->setStatusActive()->make()->toArray(); + $payload = Company::factory()->setStatusActive()->make()->toArray(); - $api = $this->json('POST', route('api.post.db.company.company.edit', $company->ulid), $companyArr); + $api = $this->json('POST', route('api.post.company.edit', $company->ulid), $payload); $api->assertUnauthorized(); } @@ -42,9 +42,9 @@ public function test_company_api_call_update_without_access_right_expect_unautho $company = $user->companies->first(); - $companyArr = Company::factory()->setStatusActive()->make()->toArray(); + $payload = Company::factory()->setStatusActive()->make()->toArray(); - $api = $this->json('POST', route('api.post.db.company.company.edit', $company->ulid), $companyArr); + $api = $this->json('POST', route('api.post.company.edit', $company->ulid), $payload); $api->assertForbidden(); } @@ -62,7 +62,7 @@ public function test_company_api_call_update_with_script_tags_in_payload_expect_ public function test_company_api_call_update_expect_successful() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); @@ -70,18 +70,18 @@ public function test_company_api_call_update_expect_successful() $company = $user->companies->first(); - $companyArr = Company::factory()->setStatusActive()->make()->toArray(); + $payload = Company::factory()->setStatusActive()->setIsDefault()->make()->toArray(); - $api = $this->json('POST', route('api.post.db.company.company.edit', $company->ulid), $companyArr); + $api = $this->json('POST', route('api.post.company.edit', $company->ulid), $payload); $api->assertSuccessful(); $this->assertDatabaseHas('companies', [ 'id' => $company->id, - 'code' => $companyArr['code'], - 'name' => $companyArr['name'], - 'address' => $companyArr['address'], - 'default' => $companyArr['default'], - 'status' => $companyArr['status'], + 'code' => $payload['code'], + 'name' => $payload['name'], + 'address' => $payload['address'], + 'default' => $payload['default'], + 'status' => $payload['status'], ]); } @@ -91,7 +91,7 @@ public function test_company_api_call_update_and_use_existing_code_in_same_user_ $idxDefaultCompany = random_int(0, $companyCount - 1); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->count($companyCount) ->state(new Sequence( fn (Sequence $sequence) => [ @@ -107,15 +107,101 @@ public function test_company_api_call_update_and_use_existing_code_in_same_user_ $company_1 = $companies[0]; $company_2 = $companies[1]; - $companyArr = Company::factory()->make([ + $payload = Company::factory()->make([ 'code' => $company_2->code, ])->toArray(); - $api = $this->json('POST', route('api.post.db.company.company.edit', $company_1->ulid), $companyArr); + $api = $this->json('POST', route('api.post.company.edit', $company_1->ulid), $payload); $api->assertUnprocessable(); $api->assertJsonStructure([ 'errors', ]); } + + public function test_company_api_call_update_and_use_existing_name_in_same_user_expect_failed() + { + $companyCount = 2; + $idxDefaultCompany = random_int(0, $companyCount - 1); + + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->count($companyCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'default' => $sequence->index == $idxDefaultCompany, + ] + )) + ) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->take(2)->get(); + $company_1 = $companies[0]; + $company_2 = $companies[1]; + + $payload = Company::factory()->make([ + 'name' => $company_2->name, + ])->toArray(); + + $api = $this->json('POST', route('api.post.company.edit', $company_1->ulid), $payload); + + $api->assertUnprocessable(); + $api->assertJsonValidationErrors(['name']); + } + + public function test_company_api_call_update_and_use_existing_code_in_different_user_expect_successful() + { + User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()->state([ + 'code' => 'CP001', + ])) + ->create(); + + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->first(); + $payload = Company::factory()->setStatusActive()->make([ + 'code' => 'CP001', + ])->toArray(); + + $api = $this->json('POST', route('api.post.company.edit', $company->ulid), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('companies', [ + 'id' => $company->id, + 'code' => 'CP001', + 'name' => $payload['name'], + ]); + } + + public function test_company_api_call_update_with_auto_code_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->first(); + $payload = Company::factory()->setStatusActive()->make([ + 'code' => config('dcslab.KEYWORDS.AUTO'), + ])->toArray(); + + $api = $this->json('POST', route('api.post.company.edit', $company->ulid), $payload); + + $api->assertSuccessful(); + + $this->assertDatabaseMissing('companies', [ + 'id' => $company->id, + 'code' => config('dcslab.KEYWORDS.AUTO'), + ]); + } } diff --git a/api/tests/Feature/API/CompanyAPI/CompanyAPIReadTest.php b/api/tests/Feature/API/CompanyAPI/CompanyAPIReadTest.php index 9fec9a29a..4cf132242 100644 --- a/api/tests/Feature/API/CompanyAPI/CompanyAPIReadTest.php +++ b/api/tests/Feature/API/CompanyAPI/CompanyAPIReadTest.php @@ -2,7 +2,7 @@ namespace Tests\Feature\API\CompanyAPI; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Company; use App\Models\Role; use App\Models\User; @@ -21,17 +21,18 @@ protected function setUp(): void public function test_company_api_call_read_any_without_authorization_expect_unauthorized_message() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ - 'userId' => $user->id, + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], ])); $api->assertUnauthorized(); @@ -45,13 +46,14 @@ public function test_company_api_call_read_any_without_access_right_expect_unaut $this->actingAs($user); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ - 'userId' => $user->id, + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], ])); $api->assertForbidden(); @@ -60,13 +62,13 @@ public function test_company_api_call_read_any_without_access_right_expect_unaut public function test_company_api_call_read_without_authorization_expect_unauthorized_message() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); $company = $user->companies()->inRandomOrder()->first(); - $api = $this->getJson(route('api.get.db.company.company.read', $company->ulid)); + $api = $this->getJson(route('api.get.company.read', $company->ulid)); $api->assertUnauthorized(); } @@ -81,7 +83,7 @@ public function test_company_api_call_read_without_access_right_expect_unauthori $company = $user->companies()->inRandomOrder()->first(); - $api = $this->getJson(route('api.get.db.company.company.read', $company->ulid)); + $api = $this->getJson(route('api.get.company.read', $company->ulid)); $api->assertForbidden(); } @@ -89,7 +91,7 @@ public function test_company_api_call_read_without_access_right_expect_unauthori public function test_company_api_call_read_with_sql_injection_expect_injection_ignored() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); @@ -100,102 +102,25 @@ public function test_company_api_call_read_with_sql_injection_expect_injection_i '1 UNION SELECT username, password FROM users', '1; DROP TABLE users', "' OR '1'='1' --", - "' OR \'1\'=\'1", '1 OR SLEEP(5)', - '1 AND (SELECT COUNT(*) FROM sysobjects) > 1', - "1 AND (SELECT * FROM users WHERE username = 'admin' AND SLEEP(5))", "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", - "SELECT * FROM users; INSERT INTO logs (message) VALUES ('Injected SQL query')", - "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin' AND password LIKE '%a%')", "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", - '1 OR 1=1; DROP TABLE users; --', - '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns', - '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = database()', - "1; EXEC xp_cmdshell('echo vulnerable'); --", - "' OR EXISTS(SELECT * FROM information_schema.tables WHERE table_schema='public' AND table_name='users' LIMIT 1) --", - "1'; EXEC sp_addrolemember 'db_owner', 'admin'; --", - "1' OR '1'='1'; -- EXEC master..xp_cmdshell 'echo vulnerable' --", - "1' UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(username, ':', password) FROM users --", - '1; SELECT pg_sleep(5); --', - "1 AND SLEEP(5) AND 'abc'='abc", - "1 AND SLEEP(5) AND 'xyz'='xyz", - '1 OR 1=1; SELECT COUNT(*) FROM information_schema.tables;', - "1' UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' --", - '1 AND (SELECT * FROM (SELECT(SLEEP(5)))hOKz)', - "1' AND 1=(SELECT COUNT(*) FROM tabname); --", - "1'; WAITFOR DELAY '0:0:5' --", - "1 OR 1=1; WAITFOR DELAY '0:0:5' --", - "1; DECLARE @v VARCHAR(8000);SET @v = '';SELECT @v = @v + name + ', ' FROM sysobjects WHERE xtype = 'U';SELECT @v --", - "1; SELECT COUNT(*), CONCAT(table_name, ':', column_name) FROM information_schema.columns GROUP BY table_name, column_name HAVING COUNT(*) > 1; --", - '1; SELECT COUNT(*), table_name FROM information_schema.columns GROUP BY table_name HAVING COUNT(*) > 1; --', - "1' OR '1'='1'; SELECT COUNT(*) FROM information_schema.tables; --", - '1 AND (SELECT COUNT(*) FROM users) > 10', - '1 AND (SELECT COUNT(*) FROM users) > 100', - "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin')", - "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR '1'='1", - "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR 'x'='x", - '1 AND (SELECT COUNT(*) FROM users) > 1; SELECT * FROM users;', - '1 OR 1=1; SELECT * FROM users;', - "1' OR 1=1; SELECT * FROM users;", - "1 OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", - "1' OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", - "1 OR 1=1; SELECT * FROM users WHERE username = 'admin' --", - "1' OR 1=1; SELECT * FROM users WHERE username = 'admin' --", - "' OR 1=1 --", "admin'--", - "admin' #", - "' OR 'x'='x", - "' OR 'a'='a'", - "' OR 'a'='a'--", - "' OR 1=1", - "' OR 1=1--", - "' OR 1=1#", - "' OR 1=1 /*", - "' OR '1'='1'--", - "' OR '1'='1'/*", - "' OR '1'='1' #", - "' OR '1'='1' /*", - "' OR '1'='1' or ''='", - "' OR '1'='1' or 'a'='a", - "' OR '1'='1' or 'a'='a'--", - "' OR '1'='1' or 'a'='a'/*", - "' OR '1'='1' or 'a'='a' #", - "' OR '1'='1' or 'a'='a' /*", - '1; SELECT * FROM users WHERE 1=1', - '1; SELECT * FROM users WHERE 1=1--', - '1; SELECT * FROM users WHERE 1=1/*', - "1' OR 1=1; SELECT * FROM users WHERE 1=1", - "1' OR 1=1; SELECT * FROM users WHERE 1=1--", - "1' OR 1=1; SELECT * FROM users WHERE 1=1/*", - "1 OR '1'='1'; SELECT * FROM users WHERE 1=1", - "1 OR '1'='1'; SELECT * FROM users WHERE 1=1--", - "1 OR '1'='1'; SELECT * FROM users WHERE 1=1/*", - "1' OR '1'='1'; SELECT * FROM users WHERE 1=1", - "1' OR '1'='1'; SELECT * FROM users WHERE 1=1--", - "1' OR '1'='1'; SELECT * FROM users WHERE 1=1/*", - "1' OR '1'='1' UNION SELECT username, password FROM users", - "1' OR '1'='1' UNION SELECT username, password FROM users--", - "1' OR '1'='1' UNION SELECT username, password FROM users/*", - "1' OR '1'='1' UNION SELECT username, password FROM users #", - "1' OR '1'='1' UNION SELECT username, password FROM users /*", - "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.tables", - "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema", - "' OR '", - "1' OR '1'='1' UNION SELECT NULL", - "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.columns", - "1' OR '1'='1' UNION SELECT NULL, table_name FROM", - "' OR '1'='1' or", + "' OR 1=1 --", ]; - $testIdx = random_int(0, count($injections)); + $testIdx = random_int(0, count($injections) - 1); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ - 'userId' => $user->id, + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, 'search' => $injections[$testIdx], - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, + 'default' => '', + 'status' => '', 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], ])); $api->assertSuccessful(); @@ -214,15 +139,15 @@ public function test_company_api_call_read_with_sql_injection_expect_injection_i ], ]); - $testIdx = random_int(0, count($injections)); + $testIdx = random_int(0, count($injections) - 1); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ - 'userId' => $user->id, + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, 'search' => $injections[$testIdx], - 'paginate' => false, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], ])); $api->assertSuccessful(); @@ -235,19 +160,20 @@ public function test_company_api_call_read_with_sql_injection_expect_injection_i public function test_company_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); $this->actingAs($user); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ - 'userId' => $user->id, + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], ])); $api->assertSuccessful(); @@ -261,13 +187,13 @@ public function test_company_api_call_read_any_with_or_without_pagination_expect ], ]); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ - 'userId' => $user->id, + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => false, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], ])); $api->assertSuccessful(); @@ -276,18 +202,20 @@ public function test_company_api_call_read_any_with_or_without_pagination_expect public function test_company_api_call_read_any_with_pagination_expect_several_per_page() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); $this->actingAs($user); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => 1, - 'per_page' => 25, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], ])); $api->assertSuccessful(); @@ -316,7 +244,7 @@ public function test_company_api_call_read_any_with_search_expect_filtered_resul $testName = Company::factory()->insertStringInName('testing')->make()->name; $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->count($companyCount) ->state(new Sequence( fn (Sequence $sequence) => [ @@ -329,13 +257,14 @@ public function test_company_api_call_read_any_with_search_expect_filtered_resul $this->actingAs($user); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ - 'userId' => $user->id, + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, 'search' => 'testing', - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], ])); $api->assertSuccessful(); @@ -357,13 +286,15 @@ public function test_company_api_call_read_any_with_search_expect_filtered_resul public function test_company_api_call_read_any_without_search_querystring_expect_failed() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); $this->actingAs($user); - $api = $this->getJson(route('api.get.db.company.company.read_any', [])); + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, + ])); $api->assertUnprocessable(); } @@ -371,19 +302,20 @@ public function test_company_api_call_read_any_without_search_querystring_expect public function test_company_api_call_read_any_with_special_char_in_search_expect_results() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); $this->actingAs($user); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ - 'userId' => $user->id, - 'search' => "!#$%&'()*+,-./:;<=>?@[\]^_`{|}~", - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], ])); $api->assertSuccessful(); @@ -398,40 +330,32 @@ public function test_company_api_call_read_any_with_special_char_in_search_expec ]); } - public function test_company_api_call_read_any_with_negative_value_in_parameters_expect_results() + public function test_company_api_call_read_any_with_negative_value_in_parameters_expect_failed() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); $this->actingAs($user); - $api = $this->getJson(route('api.get.db.company.company.read_any', [ - 'userId' => $user->id, + $api = $this->getJson(route('api.get.company.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => -1, - 'per_page' => -10, 'refresh' => false, + 'paginate' => [ + 'page' => -1, + 'per_page' => -10, + ], ])); - $api->assertSuccessful(); - $api->assertJsonStructure([ - 'data', - 'links' => [ - 'first', 'last', 'prev', 'next', - ], - 'meta' => [ - 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', - ], - ]); + $api->assertStatus(422); } public function test_company_api_call_read_expect_successful() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); @@ -439,7 +363,7 @@ public function test_company_api_call_read_expect_successful() $company = $user->companies()->inRandomOrder()->first(); - $api = $this->getJson(route('api.get.db.company.company.read', $company->ulid)); + $api = $this->getJson(route('api.get.company.read', $company->ulid)); $api->assertSuccessful(); } @@ -448,18 +372,18 @@ public function test_company_api_call_read_without_ulid_expect_exception() { $this->expectException(Exception::class); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); - $this->getJson(route('api.get.db.company.company.read', null)); + $this->getJson(route('api.get.company.read', null)); } public function test_company_api_call_read_with_nonexistance_ulid_expect_not_found() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); @@ -467,7 +391,7 @@ public function test_company_api_call_read_with_nonexistance_ulid_expect_not_fou $ulid = Str::ulid()->generate(); - $api = $this->getJson(route('api.get.db.company.company.read', $ulid)); + $api = $this->getJson(route('api.get.company.read', $ulid)); $api->assertStatus(404); } diff --git a/api/tests/Feature/API/CustomerAPI/CustomerAPICreateTest.php b/api/tests/Feature/API/CustomerAPI/CustomerAPICreateTest.php new file mode 100644 index 000000000..91ddfdd3f --- /dev/null +++ b/api/tests/Feature/API/CustomerAPI/CustomerAPICreateTest.php @@ -0,0 +1,176 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.save'), $customerArr); + + $api->assertUnauthorized(); + } + + public function test_customer_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.save'), $customerArr); + + $api->assertForbidden(); + } + + public function test_customer_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_customer_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.save'), $customerArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('customers', [ + 'company_id' => $company->id, + 'code' => $customerArr['code'], + 'name' => $customerArr['name'], + ]); + } + + public function test_customer_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.save'), $customerArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_customer_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + Customer::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.save'), $customerArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('customers', [ + 'company_id' => $company_2->id, + 'code' => $customerArr['code'], + 'name' => $customerArr['name'], + ]); + } + + public function test_customer_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $customerArr = []; + + $api = $this->json('POST', route('api.post.db.customer.customer.save'), $customerArr); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/CustomerAPI/CustomerAPIDeleteTest.php b/api/tests/Feature/API/CustomerAPI/CustomerAPIDeleteTest.php new file mode 100644 index 000000000..eedea9f01 --- /dev/null +++ b/api/tests/Feature/API/CustomerAPI/CustomerAPIDeleteTest.php @@ -0,0 +1,94 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customer = Customer::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.customer.customer.delete', $customer->ulid)); + + $api->assertUnauthorized(); + } + + public function test_customer_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customer = Customer::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.customer.customer.delete', $customer->ulid)); + + $api->assertForbidden(); + } + + public function test_customer_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customer = Customer::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.customer.customer.delete', $customer->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('customers', [ + 'id' => $customer->id, + ]); + } + + public function test_customer_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.db.customer.customer.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_customer_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + + $this->json('POST', route('api.post.db.customer.customer.delete', null)); + } +} diff --git a/api/tests/Feature/API/CustomerAPI/CustomerAPIEditTest.php b/api/tests/Feature/API/CustomerAPI/CustomerAPIEditTest.php new file mode 100644 index 000000000..59dc8d2de --- /dev/null +++ b/api/tests/Feature/API/CustomerAPI/CustomerAPIEditTest.php @@ -0,0 +1,161 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customer = Customer::factory()->for($company)->create(); + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.edit', $customer->ulid), $customerArr); + + $api->assertStatus(401); + } + + public function test_customer_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customer = Customer::factory()->for($company)->create(); + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.edit', $customer->ulid), $customerArr); + + $api->assertStatus(403); + } + + public function test_customer_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customer = Customer::factory()->for($company)->create(); + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.edit', $customer->ulid), $customerArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('customers', [ + 'id' => $customer->id, + 'company_id' => $company->id, + 'code' => $customerArr['code'], + 'name' => $customerArr['name'], + ]); + } + + public function test_customer_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + Customer::factory()->for($company)->count(2)->create(); + + $customers = $company->customers()->inRandomOrder()->take(2)->get(); + $customer_1 = $customers[0]; + $customer_2 = $customers[1]; + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $customer_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.edit', $customer_2->ulid), $customerArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_customer_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + Customer::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $customer_2 = Customer::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $customerArr = Customer::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer.edit', $customer_2->ulid), $customerArr); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/CustomerAPI/CustomerAPIReadTest.php b/api/tests/Feature/API/CustomerAPI/CustomerAPIReadTest.php new file mode 100644 index 000000000..a26570bec --- /dev/null +++ b/api/tests/Feature/API/CustomerAPI/CustomerAPIReadTest.php @@ -0,0 +1,448 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(401); + } + + public function test_customer_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(403); + } + + public function test_customer_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $customer = Customer::factory()->for($company)->create(); + + $ulid = $customer->ulid; + + $api = $this->getJson(route('api.get.db.customer.customer.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_customer_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customer = Customer::factory()->for($company)->create(); + + $ulid = $customer->ulid; + + $api = $this->getJson(route('api.get.db.customer.customer.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_customer_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + "' OR '1'='1' --", + "' OR 1=1 --", + "admin'--", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + '1 OR SLEEP(5)', + '1; SELECT pg_sleep(5); --', + ]; + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_customer_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_customer_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_customer_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company) + ->count(2)->create(); + + Customer::factory()->for($company) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_customer_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertStatus(422); + } + + public function test_customer_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_customer_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Customer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_customer_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customer = Customer::factory()->for($company)->create(); + + $ulid = $customer->ulid; + + $api = $this->getJson(route('api.get.db.customer.customer.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_customer_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.db.customer.customer.read', null)); + } + + public function test_customer_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.db.customer.customer.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPICreateTest.php b/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPICreateTest.php new file mode 100644 index 000000000..52b05529b --- /dev/null +++ b/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPICreateTest.php @@ -0,0 +1,176 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.save'), $customerAddressArr); + + $api->assertUnauthorized(); + } + + public function test_customer_address_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.save'), $customerAddressArr); + + $api->assertForbidden(); + } + + public function test_customer_address_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_address_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_customer_address_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.save'), $customerAddressArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('customer_addresses', [ + 'company_id' => $company->id, + 'code' => $customerAddressArr['code'], + 'name' => $customerAddressArr['name'], + ]); + } + + public function test_customer_address_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_address_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.save'), $customerAddressArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_customer_address_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + CustomerAddress::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.save'), $customerAddressArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('customer_addresses', [ + 'company_id' => $company_2->id, + 'code' => $customerAddressArr['code'], + 'name' => $customerAddressArr['name'], + ]); + } + + public function test_customer_address_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $customerAddressArr = []; + + $api = $this->json('POST', route('api.post.db.customer.customer_address.save'), $customerAddressArr); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPIDeleteTest.php b/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPIDeleteTest.php new file mode 100644 index 000000000..85ab021ec --- /dev/null +++ b/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPIDeleteTest.php @@ -0,0 +1,95 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customerAddress = CustomerAddress::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.delete', $customerAddress->ulid)); + + $api->assertStatus(401); + } + + public function test_customer_address_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customerAddress = CustomerAddress::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.delete', $customerAddress->ulid)); + + $api->assertStatus(403); + } + + public function test_customer_address_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customerAddress = CustomerAddress::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.delete', $customerAddress->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('customer_addresses', [ + 'id' => $customerAddress->id, + ]); + } + + public function test_customer_address_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_customer_address_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.db.customer.customer_address.delete', null)); + + $api->assertStatus(500); + } +} diff --git a/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPIEditTest.php b/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPIEditTest.php new file mode 100644 index 000000000..006131575 --- /dev/null +++ b/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPIEditTest.php @@ -0,0 +1,161 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customerAddress = CustomerAddress::factory()->for($company)->create(); + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.edit', $customerAddress->ulid), $customerAddressArr); + + $api->assertStatus(401); + } + + public function test_customer_address_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customerAddress = CustomerAddress::factory()->for($company)->create(); + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.edit', $customerAddress->ulid), $customerAddressArr); + + $api->assertStatus(403); + } + + public function test_customer_address_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_address_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_address_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customerAddress = CustomerAddress::factory()->for($company)->create(); + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.edit', $customerAddress->ulid), $customerAddressArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('customer_addresses', [ + 'id' => $customerAddress->id, + 'company_id' => $company->id, + 'code' => $customerAddressArr['code'], + 'name' => $customerAddressArr['name'], + ]); + } + + public function test_customer_address_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_address_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + CustomerAddress::factory()->for($company)->count(2)->create(); + + $customerAddresses = $company->customerAddresses()->inRandomOrder()->take(2)->get(); + $customerAddress_1 = $customerAddresses[0]; + $customerAddress_2 = $customerAddresses[1]; + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $customerAddress_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.edit', $customerAddress_2->ulid), $customerAddressArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_customer_address_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + CustomerAddress::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $customerAddress_2 = CustomerAddress::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $customerAddressArr = CustomerAddress::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.customer.customer_address.edit', $customerAddress_2->ulid), $customerAddressArr); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPIReadTest.php b/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPIReadTest.php new file mode 100644 index 000000000..097941a1e --- /dev/null +++ b/api/tests/Feature/API/CustomerAddressAPI/CustomerAddressAPIReadTest.php @@ -0,0 +1,539 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(401); + } + + public function test_customer_address_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(403); + } + + public function test_customer_address_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerAddress = CustomerAddress::factory()->for($company)->create(); + + $ulid = $customerAddress->ulid; + + $api = $this->getJson(route('api.get.db.customer.customer_address.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_customer_address_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerAddress = CustomerAddress::factory()->for($company)->create(); + + $ulid = $customerAddress->ulid; + + $api = $this->getJson(route('api.get.db.customer.customer_address.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_customer_address_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + "' OR \'1\'=\'1", + '1 OR SLEEP(5)', + '1 AND (SELECT COUNT(*) FROM sysobjects) > 1', + "1 AND (SELECT * FROM users WHERE username = 'admin' AND SLEEP(5))", + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "SELECT * FROM users; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin' AND password LIKE '%a%')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + '1 OR 1=1; DROP TABLE users; --', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = database()', + "1; EXEC xp_cmdshell('echo vulnerable'); --", + "' OR EXISTS(SELECT * FROM information_schema.tables WHERE table_schema='public' AND table_name='users' LIMIT 1) --", + "1'; EXEC sp_addrolemember 'db_owner', 'admin'; --", + "1' OR '1'='1'; -- EXEC master..xp_cmdshell 'echo vulnerable' --", + "1' UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(username, ':', password) FROM users --", + '1; SELECT pg_sleep(5); --', + "1 AND SLEEP(5) AND 'abc'='abc", + "1 AND SLEEP(5) AND 'xyz'='xyz", + '1 OR 1=1; SELECT COUNT(*) FROM information_schema.tables;', + "1' UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' --", + '1 AND (SELECT * FROM (SELECT(SLEEP(5)))hOKz)', + "1' AND 1=(SELECT COUNT(*) FROM tabname); --", + "1'; WAITFOR DELAY '0:0:5' --", + "1 OR 1=1; WAITFOR DELAY '0:0:5' --", + "1; DECLARE @v VARCHAR(8000);SET @v = '';SELECT @v = @v + name + ', ' FROM sysobjects WHERE xtype = 'U';SELECT @v --", + "1; SELECT COUNT(*), CONCAT(table_name, ':', column_name) FROM information_schema.columns GROUP BY table_name, column_name HAVING COUNT(*) > 1; --", + '1; SELECT COUNT(*), table_name FROM information_schema.columns GROUP BY table_name HAVING COUNT(*) > 1; --', + "1' OR '1'='1'; SELECT COUNT(*) FROM information_schema.tables; --", + '1 AND (SELECT COUNT(*) FROM users) > 10', + '1 AND (SELECT COUNT(*) FROM users) > 100', + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin')", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR '1'='1", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR 'x'='x", + '1 AND (SELECT COUNT(*) FROM users) > 1; SELECT * FROM users;', + '1 OR 1=1; SELECT * FROM users;', + "1' OR 1=1; SELECT * FROM users;", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "' OR 1=1 --", + "admin'--", + "admin' #", + "' OR 'x'='x", + "' OR 'a'='a'", + "' OR 'a'='a'--", + "' OR 1=1", + "' OR 1=1--", + "' OR 1=1#", + "' OR 1=1 /*", + "' OR '1'='1'--", + "' OR '1'='1'/*", + "' OR '1'='1' #", + "' OR '1'='1' /*", + "' OR '1'='1' or ''='", + "' OR '1'='1' or 'a'='a", + "' OR '1'='1' or 'a'='a'--", + "' OR '1'='1' or 'a'='a'/*", + "' OR '1'='1' or 'a'='a' #", + "' OR '1'='1' or 'a'='a' /*", + '1; SELECT * FROM users WHERE 1=1', + '1; SELECT * FROM users WHERE 1=1--', + '1; SELECT * FROM users WHERE 1=1/*', + "1' OR 1=1; SELECT * FROM users WHERE 1=1", + "1' OR 1=1; SELECT * FROM users WHERE 1=1--", + "1' OR 1=1; SELECT * FROM users WHERE 1=1/*", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1' UNION SELECT username, password FROM users", + "1' OR '1'='1' UNION SELECT username, password FROM users--", + "1' OR '1'='1' UNION SELECT username, password FROM users/*", + "1' OR '1'='1' UNION SELECT username, password FROM users #", + "1' OR '1'='1' UNION SELECT username, password FROM users /*", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.tables", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema", + "' OR '", + "1' OR '1'='1' UNION SELECT NULL", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.columns", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM", + "' OR '1'='1' or", + ]; + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_customer_address_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_customer_address_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_customer_address_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company) + ->count(2)->create(); + + CustomerAddress::factory()->for($company) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_customer_address_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertStatus(422); + } + + public function test_customer_address_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_customer_address_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerAddress::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_customer_address_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerAddress = CustomerAddress::factory()->for($company)->create(); + + $ulid = $customerAddress->ulid; + + $api = $this->getJson(route('api.get.db.customer.customer_address.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_customer_address_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.db.customer.customer_address.read', null)); + } + + public function test_customer_address_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.db.customer.customer_address.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPICreateTest.php b/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPICreateTest.php new file mode 100644 index 000000000..0f1783cce --- /dev/null +++ b/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPICreateTest.php @@ -0,0 +1,176 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.save'), $customerGroupArr); + + $api->assertUnauthorized(); + } + + public function test_customer_group_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.save'), $customerGroupArr); + + $api->assertForbidden(); + } + + public function test_customer_group_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_group_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_customer_group_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.save'), $customerGroupArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('customer_groups', [ + 'company_id' => $company->id, + 'code' => $customerGroupArr['code'], + 'name' => $customerGroupArr['name'], + ]); + } + + public function test_customer_group_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_group_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.save'), $customerGroupArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_customer_group_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + CustomerGroup::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.save'), $customerGroupArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('customer_groups', [ + 'company_id' => $company_2->id, + 'code' => $customerGroupArr['code'], + 'name' => $customerGroupArr['name'], + ]); + } + + public function test_customer_group_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $customerGroupArr = []; + + $api = $this->json('POST', route('api.post.customer_group.save'), $customerGroupArr); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPIDeleteTest.php b/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPIDeleteTest.php new file mode 100644 index 000000000..72483fcd2 --- /dev/null +++ b/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPIDeleteTest.php @@ -0,0 +1,95 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customerGroup = CustomerGroup::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.customer_group.delete', $customerGroup->ulid)); + + $api->assertStatus(401); + } + + public function test_customer_group_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customerGroup = CustomerGroup::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.customer_group.delete', $customerGroup->ulid)); + + $api->assertStatus(403); + } + + public function test_customer_group_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customerGroup = CustomerGroup::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.customer_group.delete', $customerGroup->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('customer_groups', [ + 'id' => $customerGroup->id, + ]); + } + + public function test_customer_group_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.customer_group.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_customer_group_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.customer_group.delete', null)); + + $api->assertStatus(500); + } +} diff --git a/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPIEditTest.php b/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPIEditTest.php new file mode 100644 index 000000000..89177e913 --- /dev/null +++ b/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPIEditTest.php @@ -0,0 +1,161 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customerGroup = CustomerGroup::factory()->for($company)->create(); + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.edit', $customerGroup->ulid), $customerGroupArr); + + $api->assertStatus(401); + } + + public function test_customer_group_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customerGroup = CustomerGroup::factory()->for($company)->create(); + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.edit', $customerGroup->ulid), $customerGroupArr); + + $api->assertStatus(403); + } + + public function test_customer_group_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_group_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_group_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $customerGroup = CustomerGroup::factory()->for($company)->create(); + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.edit', $customerGroup->ulid), $customerGroupArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('customer_groups', [ + 'id' => $customerGroup->id, + 'company_id' => $company->id, + 'code' => $customerGroupArr['code'], + 'name' => $customerGroupArr['name'], + ]); + } + + public function test_customer_group_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_customer_group_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + CustomerGroup::factory()->for($company)->count(2)->create(); + + $customerGroups = $company->customerGroups()->inRandomOrder()->take(2)->get(); + $customerGroup_1 = $customerGroups[0]; + $customerGroup_2 = $customerGroups[1]; + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $customerGroup_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.edit', $customerGroup_2->ulid), $customerGroupArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_customer_group_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + CustomerGroup::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $customerGroup_2 = CustomerGroup::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $customerGroupArr = CustomerGroup::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.customer_group.edit', $customerGroup_2->ulid), $customerGroupArr); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPIReadTest.php b/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPIReadTest.php new file mode 100644 index 000000000..a4c04b36b --- /dev/null +++ b/api/tests/Feature/API/CustomerGroupAPI/CustomerGroupAPIReadTest.php @@ -0,0 +1,434 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(401); + } + + public function test_customer_group_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(403); + } + + public function test_customer_group_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerGroup = CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read', $customerGroup->ulid)); + + $api->assertStatus(401); + } + + public function test_customer_group_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerGroup = CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read', $customerGroup->ulid)); + + $api->assertStatus(403); + } + + public function test_customer_group_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1 OR SLEEP(5)', + '1; DROP TABLE users', + "admin'--", + "1' OR '1'='1' UNION SELECT username, password FROM users", + ]; + + foreach ($injections as $injection) { + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injection, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injection, + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + } + + public function test_customer_group_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_customer_group_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_customer_group_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company) + ->count(2)->create(); + + CustomerGroup::factory()->for($company) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_customer_group_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + ])); + + $api->assertStatus(422); + } + + public function test_customer_group_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_customer_group_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => false, + 'paginate' => [ + 'page' => -1, + 'per_page' => -25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_customer_group_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $customerGroup = CustomerGroup::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.customer_group.read', $customerGroup->ulid)); + + $api->assertSuccessful(); + } + + public function test_customer_group_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.customer_group.read', null)); + } + + public function test_customer_group_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.customer_group.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/EmployeeAPI/EmployeeAPICreateTest.php b/api/tests/Feature/API/EmployeeAPI/EmployeeAPICreateTest.php new file mode 100644 index 000000000..f3bd0ab27 --- /dev/null +++ b/api/tests/Feature/API/EmployeeAPI/EmployeeAPICreateTest.php @@ -0,0 +1,176 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.save'), $employeeArr); + + $api->assertUnauthorized(); + } + + public function test_employee_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.save'), $employeeArr); + + $api->assertForbidden(); + } + + public function test_employee_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_employee_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_employee_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.save'), $employeeArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('employees', [ + 'company_id' => $company->id, + 'code' => $employeeArr['code'], + 'name' => $employeeArr['name'], + ]); + } + + public function test_employee_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_employee_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.save'), $employeeArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_employee_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + Employee::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.save'), $employeeArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('employees', [ + 'company_id' => $company_2->id, + 'code' => $employeeArr['code'], + 'name' => $employeeArr['name'], + ]); + } + + public function test_employee_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $employeeArr = []; + + $api = $this->json('POST', route('api.post.db.company.employee.save'), $employeeArr); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/EmployeeAPI/EmployeeAPIDeleteTest.php b/api/tests/Feature/API/EmployeeAPI/EmployeeAPIDeleteTest.php new file mode 100644 index 000000000..d8526b85a --- /dev/null +++ b/api/tests/Feature/API/EmployeeAPI/EmployeeAPIDeleteTest.php @@ -0,0 +1,95 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $employee = Employee::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.company.employee.delete', $employee->ulid)); + + $api->assertStatus(401); + } + + public function test_employee_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $employee = Employee::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.company.employee.delete', $employee->ulid)); + + $api->assertStatus(403); + } + + public function test_employee_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $employee = Employee::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.company.employee.delete', $employee->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('employees', [ + 'id' => $employee->id, + ]); + } + + public function test_employee_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.db.company.employee.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_employee_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.db.company.employee.delete', null)); + + $api->assertStatus(500); + } +} diff --git a/api/tests/Feature/API/EmployeeAPI/EmployeeAPIEditTest.php b/api/tests/Feature/API/EmployeeAPI/EmployeeAPIEditTest.php new file mode 100644 index 000000000..ff080872a --- /dev/null +++ b/api/tests/Feature/API/EmployeeAPI/EmployeeAPIEditTest.php @@ -0,0 +1,161 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $employee = Employee::factory()->for($company)->create(); + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.edit', $employee->ulid), $employeeArr); + + $api->assertStatus(401); + } + + public function test_employee_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $employee = Employee::factory()->for($company)->create(); + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.edit', $employee->ulid), $employeeArr); + + $api->assertStatus(403); + } + + public function test_employee_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_employee_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_employee_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $employee = Employee::factory()->for($company)->create(); + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.edit', $employee->ulid), $employeeArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('employees', [ + 'id' => $employee->id, + 'company_id' => $company->id, + 'code' => $employeeArr['code'], + 'name' => $employeeArr['name'], + ]); + } + + public function test_employee_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_employee_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + Employee::factory()->for($company)->count(2)->create(); + + $employees = $company->employees()->inRandomOrder()->take(2)->get(); + $employee_1 = $employees[0]; + $employee_2 = $employees[1]; + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $employee_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.edit', $employee_2->ulid), $employeeArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_employee_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + Employee::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $employee_2 = Employee::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $employeeArr = Employee::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.company.employee.edit', $employee_2->ulid), $employeeArr); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/EmployeeAPI/EmployeeAPIReadTest.php b/api/tests/Feature/API/EmployeeAPI/EmployeeAPIReadTest.php new file mode 100644 index 000000000..60438acab --- /dev/null +++ b/api/tests/Feature/API/EmployeeAPI/EmployeeAPIReadTest.php @@ -0,0 +1,539 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(401); + } + + public function test_employee_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(403); + } + + public function test_employee_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $employee = Employee::factory()->for($company)->create(); + + $ulid = $employee->ulid; + + $api = $this->getJson(route('api.get.db.company.employee.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_employee_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $employee = Employee::factory()->for($company)->create(); + + $ulid = $employee->ulid; + + $api = $this->getJson(route('api.get.db.company.employee.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_employee_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + "' OR \'1\'=\'1", + '1 OR SLEEP(5)', + '1 AND (SELECT COUNT(*) FROM sysobjects) > 1', + "1 AND (SELECT * FROM users WHERE username = 'admin' AND SLEEP(5))", + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "SELECT * FROM users; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin' AND password LIKE '%a%')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + '1 OR 1=1; DROP TABLE users; --', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = database()', + "1; EXEC xp_cmdshell('echo vulnerable'); --", + "' OR EXISTS(SELECT * FROM information_schema.tables WHERE table_schema='public' AND table_name='users' LIMIT 1) --", + "1'; EXEC sp_addrolemember 'db_owner', 'admin'; --", + "1' OR '1'='1'; -- EXEC master..xp_cmdshell 'echo vulnerable' --", + "1' UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(username, ':', password) FROM users --", + '1; SELECT pg_sleep(5); --', + "1 AND SLEEP(5) AND 'abc'='abc", + "1 AND SLEEP(5) AND 'xyz'='xyz", + '1 OR 1=1; SELECT COUNT(*) FROM information_schema.tables;', + "1' UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' --", + '1 AND (SELECT * FROM (SELECT(SLEEP(5)))hOKz)', + "1' AND 1=(SELECT COUNT(*) FROM tabname); --", + "1'; WAITFOR DELAY '0:0:5' --", + "1 OR 1=1; WAITFOR DELAY '0:0:5' --", + "1; DECLARE @v VARCHAR(8000);SET @v = '';SELECT @v = @v + name + ', ' FROM sysobjects WHERE xtype = 'U';SELECT @v --", + "1; SELECT COUNT(*), CONCAT(table_name, ':', column_name) FROM information_schema.columns GROUP BY table_name, column_name HAVING COUNT(*) > 1; --", + '1; SELECT COUNT(*), table_name FROM information_schema.columns GROUP BY table_name HAVING COUNT(*) > 1; --', + "1' OR '1'='1'; SELECT COUNT(*) FROM information_schema.tables; --", + '1 AND (SELECT COUNT(*) FROM users) > 10', + '1 AND (SELECT COUNT(*) FROM users) > 100', + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin')", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR '1'='1", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR 'x'='x", + '1 AND (SELECT COUNT(*) FROM users) > 1; SELECT * FROM users;', + '1 OR 1=1; SELECT * FROM users;', + "1' OR 1=1; SELECT * FROM users;", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "' OR 1=1 --", + "admin'--", + "admin' #", + "' OR 'x'='x", + "' OR 'a'='a'", + "' OR 'a'='a'--", + "' OR 1=1", + "' OR 1=1--", + "' OR 1=1#", + "' OR 1=1 /*", + "' OR '1'='1'--", + "' OR '1'='1'/*", + "' OR '1'='1' #", + "' OR '1'='1' /*", + "' OR '1'='1' or ''='", + "' OR '1'='1' or 'a'='a", + "' OR '1'='1' or 'a'='a'--", + "' OR '1'='1' or 'a'='a'/*", + "' OR '1'='1' or 'a'='a' #", + "' OR '1'='1' or 'a'='a' /*", + '1; SELECT * FROM users WHERE 1=1', + '1; SELECT * FROM users WHERE 1=1--', + '1; SELECT * FROM users WHERE 1=1/*', + "1' OR 1=1; SELECT * FROM users WHERE 1=1", + "1' OR 1=1; SELECT * FROM users WHERE 1=1--", + "1' OR 1=1; SELECT * FROM users WHERE 1=1/*", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1' UNION SELECT username, password FROM users", + "1' OR '1'='1' UNION SELECT username, password FROM users--", + "1' OR '1'='1' UNION SELECT username, password FROM users/*", + "1' OR '1'='1' UNION SELECT username, password FROM users #", + "1' OR '1'='1' UNION SELECT username, password FROM users /*", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.tables", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema", + "' OR '", + "1' OR '1'='1' UNION SELECT NULL", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.columns", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM", + "' OR '1'='1' or", + ]; + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_employee_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_employee_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_employee_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company) + ->count(2)->create(); + + Employee::factory()->for($company) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_employee_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertStatus(422); + } + + public function test_employee_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_employee_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Employee::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.company.employee.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_employee_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $employee = Employee::factory()->for($company)->create(); + + $ulid = $employee->ulid; + + $api = $this->getJson(route('api.get.db.company.employee.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_employee_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.db.company.employee.read', null)); + } + + public function test_employee_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.db.company.employee.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/InvestorAPI/InvestorAPICreateTest.php b/api/tests/Feature/API/InvestorAPI/InvestorAPICreateTest.php new file mode 100644 index 000000000..1c52597b9 --- /dev/null +++ b/api/tests/Feature/API/InvestorAPI/InvestorAPICreateTest.php @@ -0,0 +1,176 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.save'), $payload); + + $api->assertUnauthorized(); + } + + public function test_investor_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.save'), $payload); + + $api->assertForbidden(); + } + + public function test_investor_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_investor_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_investor_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('investors', [ + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_investor_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_investor_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.save'), $payload); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_investor_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + Investor::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('investors', [ + 'company_id' => $company_2->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_investor_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $payload = []; + + $api = $this->json('POST', route('api.post.investor.save'), $payload); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/InvestorAPI/InvestorAPIDeleteTest.php b/api/tests/Feature/API/InvestorAPI/InvestorAPIDeleteTest.php new file mode 100644 index 000000000..b1d107032 --- /dev/null +++ b/api/tests/Feature/API/InvestorAPI/InvestorAPIDeleteTest.php @@ -0,0 +1,95 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $investor = Investor::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.investor.delete', $investor->ulid)); + + $api->assertStatus(401); + } + + public function test_investor_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $investor = Investor::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.investor.delete', $investor->ulid)); + + $api->assertStatus(403); + } + + public function test_investor_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $investor = Investor::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.investor.delete', $investor->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('investors', [ + 'id' => $investor->id, + ]); + } + + public function test_investor_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.investor.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_investor_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.investor.delete', null)); + + $api->assertStatus(500); + } +} diff --git a/api/tests/Feature/API/InvestorAPI/InvestorAPIEditTest.php b/api/tests/Feature/API/InvestorAPI/InvestorAPIEditTest.php new file mode 100644 index 000000000..0505267f1 --- /dev/null +++ b/api/tests/Feature/API/InvestorAPI/InvestorAPIEditTest.php @@ -0,0 +1,161 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $investor = Investor::factory()->for($company)->create(); + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.edit', $investor->ulid), $payload); + + $api->assertStatus(401); + } + + public function test_investor_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $investor = Investor::factory()->for($company)->create(); + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.edit', $investor->ulid), $payload); + + $api->assertStatus(403); + } + + public function test_investor_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_investor_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_investor_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $investor = Investor::factory()->for($company)->create(); + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.edit', $investor->ulid), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('investors', [ + 'id' => $investor->id, + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_investor_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_investor_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + Investor::factory()->for($company)->count(2)->create(); + + $investors = $company->investors()->inRandomOrder()->take(2)->get(); + $investor_1 = $investors[0]; + $investor_2 = $investors[1]; + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $investor_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.edit', $investor_2->ulid), $payload); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_investor_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + Investor::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $investor_2 = Investor::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $payload = Investor::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.investor.edit', $investor_2->ulid), $payload); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/InvestorAPI/InvestorAPIReadTest.php b/api/tests/Feature/API/InvestorAPI/InvestorAPIReadTest.php new file mode 100644 index 000000000..7ad02777f --- /dev/null +++ b/api/tests/Feature/API/InvestorAPI/InvestorAPIReadTest.php @@ -0,0 +1,451 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(401); + } + + public function test_investor_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(403); + } + + public function test_investor_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $investor = Investor::factory()->for($company)->create(); + + $ulid = $investor->ulid; + + $api = $this->getJson(route('api.get.investor.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_investor_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $investor = Investor::factory()->for($company)->create(); + + $ulid = $investor->ulid; + + $api = $this->getJson(route('api.get.investor.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_investor_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + "' OR '1'='1' --", + "' OR 1=1 --", + "admin'--", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + '1 OR SLEEP(5)', + '1; SELECT pg_sleep(5); --', + ]; + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_investor_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_investor_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_investor_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company) + ->count(2)->create(); + + Investor::factory()->for($company) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_investor_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + ])); + + $api->assertStatus(422); + } + + public function test_investor_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_investor_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Investor::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.investor.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => false, + 'paginate' => [ + 'page' => -1, + 'per_page' => -25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_investor_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $investor = Investor::factory()->for($company)->create(); + + $ulid = $investor->ulid; + + $api = $this->getJson(route('api.get.investor.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_investor_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.investor.read', null)); + } + + public function test_investor_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.investor.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/ProductAPI/ProductAPICreateTest.php b/api/tests/Feature/API/ProductAPI/ProductAPICreateTest.php new file mode 100644 index 000000000..5187db8fa --- /dev/null +++ b/api/tests/Feature/API/ProductAPI/ProductAPICreateTest.php @@ -0,0 +1,253 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $productCategory = $company->productCategories()->inRandomOrder()->first(); + $brand = $company->brands()->inRandomOrder()->first(); + + $productArr = Product::factory()->make([ + 'product_category_id' => Hashids::encode($productCategory->id), + 'brand_id' => Hashids::encode($brand->id), + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.save'), $productArr); + + $api->assertUnauthorized(); + } + + public function test_product_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $productCategory = $company->productCategories()->inRandomOrder()->first(); + $brand = $company->brands()->inRandomOrder()->first(); + + $productArr = Product::factory()->make([ + 'product_category_id' => Hashids::encode($productCategory->id), + 'brand_id' => Hashids::encode($brand->id), + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.save'), $productArr); + + $api->assertForbidden(); + } + + public function test_product_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_product_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_product_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $productArr = (new ProductSeeder)->makeProductUnits(encode: true)->toArray(); + + // $company = $user->companies()->inRandomOrder()->first(); + // $productCategory = $company->productCategories()->inRandomOrder()->first(); + // $brand = $company->brands()->inRandomOrder()->first(); + + // $productArr = Product::factory()->make([ + // 'product_category_id' => Hashids::encode($productCategory->id), + // 'brand_id' => Hashids::encode($brand->id), + // 'company_id' => Hashids::encode($company->id), + // ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.save'), $productArr); + + $api->assertSuccessful(); + + $productArr['product_unit_id'] = HashidsHelper::decodeId($api['data']['product_unit']['id']); + + $this->assertDatabaseHas('products', [ + 'product_category_id' => Hashids::decode($productArr['product_category_id'])[0], + 'brand_id' => Hashids::decode($productArr['brand_id'])[0], + 'company_id' => Hashids::decode($productArr['company_id'])[0], + 'code' => $productArr['code'], + 'name' => $productArr['name'], + 'product_type' => $productArr['product_type'], + 'taxable_supply' => $productArr['taxable_supply'], + 'standard_rated_supply' => $productArr['standard_rated_supply'], + 'price_include_vat' => $productArr['price_include_vat'], + 'point' => $productArr['point'], + 'use_serial_number' => $productArr['use_serial_number'], + 'has_expiry_date' => $productArr['has_expiry_date'], + 'status' => $productArr['status'], + 'remarks' => $productArr['remarks'], + ]); + } + + // public function test_product_api_call_store_expect_successful() + // { + // $user = User::factory() + // ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + // ->has(Company::factory()->setStatusActive()->setIsDefault() + // ->has(ProductCategory::factory()->count(3)) + // ->has(Brand::factory()->count(3))) + // ->create(); + + // $this->actingAs($user); + + // $productArr = (new ProductSeeder())->make(encode: true)->toArray(); + + // $api = $this->json('POST', route('api.post.db.product.product.save'), $productArr); + + // $api->assertSuccessful(); + + // $productArr['product_unit_id'] = HashidsHelper::decodeId($api['data']['product_unit']['id']); + + // $this->assertDatabaseHas('products', [ + // 'product_category_id' => Hashids::decode($productArr['product_category_id'])[0], + // 'brand_id' => Hashids::decode($productArr['brand_id'])[0], + // 'company_id' => Hashids::decode($productArr['company_id'])[0], + // 'code' => $productArr['code'], + // 'name' => $productArr['name'], + // 'product_type' => $productArr['product_type'], + // 'taxable_supply' => $productArr['taxable_supply'], + // 'standard_rated_supply' => $productArr['standard_rated_supply'], + // 'price_include_vat' => $productArr['price_include_vat'], + // 'point' => $productArr['point'], + // 'use_serial_number' => $productArr['use_serial_number'], + // 'has_expiry_date' => $productArr['has_expiry_date'], + // 'status' => $productArr['status'], + // 'remarks' => $productArr['remarks'], + // ]); + // } + + public function test_product_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_product_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Product::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $productArr = Product::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.save'), $productArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_product_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + Product::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $productArr = Product::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.save'), $productArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('products', [ + 'company_id' => $company_2->id, + 'code' => $productArr['code'], + 'name' => $productArr['name'], + ]); + } + + public function test_product_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $productArr = []; + + $api = $this->json('POST', route('api.post.db.product.product.save'), $productArr); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/ProductAPI/ProductAPIDeleteTest.php b/api/tests/Feature/API/ProductAPI/ProductAPIDeleteTest.php new file mode 100644 index 000000000..ade327d9f --- /dev/null +++ b/api/tests/Feature/API/ProductAPI/ProductAPIDeleteTest.php @@ -0,0 +1,95 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $product = Product::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.product.product.delete', $product->ulid)); + + $api->assertStatus(401); + } + + public function test_product_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $product = Product::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.product.product.delete', $product->ulid)); + + $api->assertStatus(403); + } + + public function test_product_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $product = Product::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.product.product.delete', $product->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('products', [ + 'id' => $product->id, + ]); + } + + public function test_product_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.db.product.product.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_product_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.db.product.product.delete', null)); + + $api->assertStatus(500); + } +} diff --git a/api/tests/Feature/API/ProductAPI/ProductAPIEditTest.php b/api/tests/Feature/API/ProductAPI/ProductAPIEditTest.php new file mode 100644 index 000000000..573ca37db --- /dev/null +++ b/api/tests/Feature/API/ProductAPI/ProductAPIEditTest.php @@ -0,0 +1,161 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $product = Product::factory()->for($company)->create(); + + $productArr = Product::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.edit', $product->ulid), $productArr); + + $api->assertStatus(401); + } + + public function test_product_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $product = Product::factory()->for($company)->create(); + + $productArr = Product::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.edit', $product->ulid), $productArr); + + $api->assertStatus(403); + } + + public function test_product_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_product_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_product_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $product = Product::factory()->for($company)->create(); + + $productArr = Product::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.edit', $product->ulid), $productArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('products', [ + 'id' => $product->id, + 'company_id' => $company->id, + 'code' => $productArr['code'], + 'name' => $productArr['name'], + ]); + } + + public function test_product_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_product_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + Product::factory()->for($company)->count(2)->create(); + + $products = $company->products()->inRandomOrder()->take(2)->get(); + $product_1 = $products[0]; + $product_2 = $products[1]; + + $productArr = Product::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $product_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.edit', $product_2->ulid), $productArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_product_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + Product::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $product_2 = Product::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $productArr = Product::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.product.product.edit', $product_2->ulid), $productArr); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/ProductAPI/ProductAPIReadTest.php b/api/tests/Feature/API/ProductAPI/ProductAPIReadTest.php new file mode 100644 index 000000000..774e78e79 --- /dev/null +++ b/api/tests/Feature/API/ProductAPI/ProductAPIReadTest.php @@ -0,0 +1,569 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $productCategory = ProductCategory::inRandomOrder()->first(); + $brand = Brand::inRandomOrder()->first(); + + Product::factory()->for($company)->where('product_category_id', '=', $productCategory->id)->where('brand_id', '=', $brand->id)->create(); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(401); + } + + public function test_product_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Product::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(403); + } + + public function test_product_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $product = Product::factory()->for($company)->create(); + + $ulid = $product->ulid; + + $api = $this->getJson(route('api.get.db.product.product.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_product_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $product = Product::factory()->for($company)->create(); + + $ulid = $product->ulid; + + $api = $this->getJson(route('api.get.db.product.product.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_product_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Product::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + "' OR \'1\'=\'1", + '1 OR SLEEP(5)', + '1 AND (SELECT COUNT(*) FROM sysobjects) > 1', + "1 AND (SELECT * FROM users WHERE username = 'admin' AND SLEEP(5))", + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "SELECT * FROM users; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin' AND password LIKE '%a%')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + '1 OR 1=1; DROP TABLE users; --', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = database()', + "1; EXEC xp_cmdshell('echo vulnerable'); --", + "' OR EXISTS(SELECT * FROM information_schema.tables WHERE table_schema='public' AND table_name='users' LIMIT 1) --", + "1'; EXEC sp_addrolemember 'db_owner', 'admin'; --", + "1' OR '1'='1'; -- EXEC master..xp_cmdshell 'echo vulnerable' --", + "1' UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(username, ':', password) FROM users --", + '1; SELECT pg_sleep(5); --', + "1 AND SLEEP(5) AND 'abc'='abc", + "1 AND SLEEP(5) AND 'xyz'='xyz", + '1 OR 1=1; SELECT COUNT(*) FROM information_schema.tables;', + "1' UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' --", + '1 AND (SELECT * FROM (SELECT(SLEEP(5)))hOKz)', + "1' AND 1=(SELECT COUNT(*) FROM tabname); --", + "1'; WAITFOR DELAY '0:0:5' --", + "1 OR 1=1; WAITFOR DELAY '0:0:5' --", + "1; DECLARE @v VARCHAR(8000);SET @v = '';SELECT @v = @v + name + ', ' FROM sysobjects WHERE xtype = 'U';SELECT @v --", + "1; SELECT COUNT(*), CONCAT(table_name, ':', column_name) FROM information_schema.columns GROUP BY table_name, column_name HAVING COUNT(*) > 1; --", + '1; SELECT COUNT(*), table_name FROM information_schema.columns GROUP BY table_name HAVING COUNT(*) > 1; --', + "1' OR '1'='1'; SELECT COUNT(*) FROM information_schema.tables; --", + '1 AND (SELECT COUNT(*) FROM users) > 10', + '1 AND (SELECT COUNT(*) FROM users) > 100', + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin')", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR '1'='1", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR 'x'='x", + '1 AND (SELECT COUNT(*) FROM users) > 1; SELECT * FROM users;', + '1 OR 1=1; SELECT * FROM users;', + "1' OR 1=1; SELECT * FROM users;", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "' OR 1=1 --", + "admin'--", + "admin' #", + "' OR 'x'='x", + "' OR 'a'='a'", + "' OR 'a'='a'--", + "' OR 1=1", + "' OR 1=1--", + "' OR 1=1#", + "' OR 1=1 /*", + "' OR '1'='1'--", + "' OR '1'='1'/*", + "' OR '1'='1' #", + "' OR '1'='1' /*", + "' OR '1'='1' or ''='", + "' OR '1'='1' or 'a'='a", + "' OR '1'='1' or 'a'='a'--", + "' OR '1'='1' or 'a'='a'/*", + "' OR '1'='1' or 'a'='a' #", + "' OR '1'='1' or 'a'='a' /*", + '1; SELECT * FROM users WHERE 1=1', + '1; SELECT * FROM users WHERE 1=1--', + '1; SELECT * FROM users WHERE 1=1/*', + "1' OR 1=1; SELECT * FROM users WHERE 1=1", + "1' OR 1=1; SELECT * FROM users WHERE 1=1--", + "1' OR 1=1; SELECT * FROM users WHERE 1=1/*", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1' UNION SELECT username, password FROM users", + "1' OR '1'='1' UNION SELECT username, password FROM users--", + "1' OR '1'='1' UNION SELECT username, password FROM users/*", + "1' OR '1'='1' UNION SELECT username, password FROM users #", + "1' OR '1'='1' UNION SELECT username, password FROM users /*", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.tables", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema", + "' OR '", + "1' OR '1'='1' UNION SELECT NULL", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.columns", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM", + "' OR '1'='1' or", + ]; + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_product_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Product::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_product_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Product::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_product_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Product::factory()->for($company) + ->count(2)->create(); + + Product::factory()->for($company) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_product_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Product::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertStatus(422); + } + + public function test_product_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Product::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_product_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Product::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.product.product.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_product_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $product = Product::factory()->for($company)->create(); + + $ulid = $product->ulid; + + $api = $this->getJson(route('api.get.db.product.product.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_product_api_call_read_without_ulid_expect_exception() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.db.product.product.read', null)); + } + + public function test_product_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.db.product.product.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPICreateTest.php b/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPICreateTest.php new file mode 100644 index 000000000..39cace3e6 --- /dev/null +++ b/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPICreateTest.php @@ -0,0 +1,180 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = ProductCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.product_category.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('product_categories', [ + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'type' => $payload['type'], + ]); + } + + public function test_product_category_api_call_store_with_auto_code_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = ProductCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => Config::get('dcslab.KEYWORDS.AUTO'), + ])->toArray(); + + $api = $this->json('POST', route('api.post.product_category.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('product_categories', [ + 'company_id' => $company->id, + 'name' => $payload['name'], + 'type' => $payload['type'], + ]); + + $this->assertDatabaseMissing('product_categories', [ + 'company_id' => $company->id, + 'code' => Config::get('dcslab.KEYWORDS.AUTO'), + ]); + } + + public function test_product_category_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + ProductCategory::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $payload = ProductCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.product_category.save'), $payload); + + $api->assertUnprocessable(); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_product_category_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + $company_2 = $companies[1]; + + ProductCategory::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $payload = ProductCategory::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.product_category.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('product_categories', [ + 'company_id' => $company_2->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'type' => $payload['type'], + ]); + } + + public function test_product_category_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $payload = []; + + $api = $this->json('POST', route('api.post.product_category.save'), $payload); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name', 'type']); + } + + public function test_product_category_api_call_store_with_sql_injection_payload_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = ProductCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => "'; DROP TABLE product_categories; --", + 'name' => "'; DROP TABLE product_categories; --", + ])->toArray(); + + $api = $this->json('POST', route('api.post.product_category.save'), $payload); + + $api->assertSuccessful(); + + $this->assertDatabaseHas('product_categories', [ + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } +} diff --git a/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPIDeleteTest.php b/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPIDeleteTest.php new file mode 100644 index 000000000..e89c228d5 --- /dev/null +++ b/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPIDeleteTest.php @@ -0,0 +1,119 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $productCategory = ProductCategory::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.product_category.delete', $productCategory->ulid)); + + $api->assertUnauthorized(); + } + + public function test_product_category_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $productCategory = ProductCategory::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.product_category.delete', $productCategory->ulid)); + + $api->assertForbidden(); + } + + public function test_product_category_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $productCategory = ProductCategory::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.product_category.delete', $productCategory->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('product_categories', [ + 'id' => $productCategory->id, + ]); + } + + public function test_product_category_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.product_category.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_product_category_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.product_category.delete', null)); + } + + public function test_product_category_api_call_delete_with_sql_injection_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + '1 OR SLEEP(5)', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + "admin'--", + "' OR 1=1 --", + ]; + + $testIdx = random_int(0, count($injections) - 1); + $injection = $injections[$testIdx]; + + $api = $this->json('POST', route('api.post.product_category.delete', $injection)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPIEditTest.php b/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPIEditTest.php new file mode 100644 index 000000000..d25916283 --- /dev/null +++ b/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPIEditTest.php @@ -0,0 +1,142 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $productCategory = ProductCategory::factory()->for($company)->create(); + + $payload = ProductCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.product_category.edit', $productCategory->ulid), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('product_categories', [ + 'id' => $productCategory->id, + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'type' => $payload['type'], + ]); + } + + public function test_product_category_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + ProductCategory::factory()->for($company)->count(2)->create(); + + $productCategories = $company->productCategories()->inRandomOrder()->take(2)->get(); + $productCategory_1 = $productCategories[0]; + $productCategory_2 = $productCategories[1]; + + $payload = ProductCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $productCategory_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.product_category.edit', $productCategory_2->ulid), $payload); + + $api->assertUnprocessable(); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_product_category_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + $company_2 = $companies[1]; + + ProductCategory::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $productCategory_2 = ProductCategory::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $payload = ProductCategory::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.product_category.edit', $productCategory_2->ulid), $payload); + + $api->assertSuccessful(); + + $this->assertDatabaseHas('product_categories', [ + 'id' => $productCategory_2->id, + 'company_id' => $company_2->id, + 'code' => 'test1', + ]); + } + + public function test_product_category_api_call_update_with_sql_injection_payload_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $productCategory = ProductCategory::factory()->for($company)->create(); + + $payload = ProductCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => "'; DROP TABLE product_categories; --", + 'name' => "'; DROP TABLE product_categories; --", + ])->toArray(); + + $api = $this->json('POST', route('api.post.product_category.edit', $productCategory->ulid), $payload); + + $api->assertSuccessful(); + + $this->assertDatabaseHas('product_categories', [ + 'id' => $productCategory->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } +} diff --git a/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPIReadTest.php b/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPIReadTest.php new file mode 100644 index 000000000..49b74a2a0 --- /dev/null +++ b/api/tests/Feature/API/ProductCategoryAPI/ProductCategoryAPIReadTest.php @@ -0,0 +1,364 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + ProductCategory::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + '1 OR SLEEP(5)', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + "admin'--", + "' OR 1=1 --", + ]; + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.product_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'type' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.product_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'type' => null, + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_product_category_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + ProductCategory::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.product_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'type' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.product_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'type' => null, + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + ]); + } + + public function test_product_category_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + ProductCategory::factory()->for($company)->count(30)->create(); + + $api = $this->getJson(route('api.get.product_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'type' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_product_category_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + ProductCategory::factory()->for($company)->count(2)->create(); + + ProductCategory::factory()->for($company) + ->create([ + 'name' => 'testing', + ]); + + ProductCategory::factory()->for($company) + ->create([ + 'code' => 'testing_code', + ]); + + $api = $this->getJson(route('api.get.product_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'type' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 2, + ]); + } + + public function test_product_category_api_call_read_any_without_required_parameters_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + ProductCategory::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.product_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertUnprocessable(); + } + + public function test_product_category_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + ProductCategory::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.product_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'type' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_product_category_api_call_read_any_with_type_filter_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + ProductCategory::factory()->for($company) + ->create([ + 'type' => ProductCategoryTypeEnum::PRODUCT, + ]); + + ProductCategory::factory()->for($company) + ->create([ + 'type' => ProductCategoryTypeEnum::SERVICE, + ]); + + $api = $this->getJson(route('api.get.product_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'type' => ProductCategoryTypeEnum::PRODUCT->value, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 1, + ]); + } + + public function test_product_category_api_call_read_single_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $productCategory = ProductCategory::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.product_category.read', $productCategory->ulid)); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + ]); + } +} diff --git a/api/tests/Feature/API/ProfileAPI/ProfileAPITest.php b/api/tests/Feature/API/ProfileAPI/ProfileAPITest.php index 0ad28c4cb..3661ddfcd 100644 --- a/api/tests/Feature/API/ProfileAPI/ProfileAPITest.php +++ b/api/tests/Feature/API/ProfileAPI/ProfileAPITest.php @@ -2,7 +2,7 @@ namespace Tests\Feature\API\ProfileAPI; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Profile; use App\Models\Role; use App\Models\Setting; @@ -25,7 +25,7 @@ public function test_profile_api_call_read_profile_expect_result() public function test_profile_api_call_update_user_profile_expect_successful() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); @@ -45,7 +45,7 @@ public function test_profile_api_call_update_user_profile_expect_successful() public function test_profile_api_call_update_user_profile_other_than_alpha_numeric_expect_unsuccessful() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); @@ -69,7 +69,7 @@ public function test_profile_api_call_update_personal_info_expect_successful() { $user = User::factory() ->has(Profile::factory()) - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Setting::factory()->createDefaultSetting_PREF_THEME()) ->has(Setting::factory()->createDefaultSetting_PREF_DATE_FORMAT()) ->has(Setting::factory()->createDefaultSetting_PREF_TIME_FORMAT()) @@ -100,7 +100,7 @@ public function test_profile_api_call_update_personal_info_expect_successful() public function test_profile_api_call_change_password_expect_successful() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); @@ -126,7 +126,7 @@ public function test_profile_api_call_update_account_settings_expect_successful( $this->markTestSkipped('Test under construction'); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Setting::factory()->createDefaultSetting_PREF_THEME()) ->has(Setting::factory()->createDefaultSetting_PREF_DATE_FORMAT()) ->has(Setting::factory()->createDefaultSetting_PREF_TIME_FORMAT()) @@ -167,7 +167,7 @@ public function test_profile_api_call_update_roles_expect_successful() $this->markTestSkipped('Test under construction'); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Role::factory()->count(3)) ->has(Setting::factory()->createDefaultSetting_PREF_THEME()) ->has(Setting::factory()->createDefaultSetting_PREF_DATE_FORMAT()) diff --git a/api/tests/Feature/API/RoleAPI/RoleAPIReadTest.php b/api/tests/Feature/API/RoleAPI/RoleAPIReadTest.php index 7a528cde2..5b0f14867 100644 --- a/api/tests/Feature/API/RoleAPI/RoleAPIReadTest.php +++ b/api/tests/Feature/API/RoleAPI/RoleAPIReadTest.php @@ -2,7 +2,7 @@ namespace Tests\Feature\API\RoleAPI; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Role; use App\Models\User; use Tests\APITestCase; @@ -17,10 +17,12 @@ protected function setUp(): void public function test_role_api_call_read_any_without_authorization_expect_unauthorized_message() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); - $api = $this->getJson(route('api.get.db.admin.role.read_any', [])); + $api = $this->getJson(route('api.get.db.admin.role.read_any', [ + 'with_trashed' => false, + ])); $api->assertUnauthorized(); } @@ -34,7 +36,9 @@ public function test_role_api_call_read_any_without_access_right_expect_unauthor $this->actingAs($user); - $api = $this->getJson(route('api.get.db.admin.role.read_any', [])); + $api = $this->getJson(route('api.get.db.admin.role.read_any', [ + 'with_trashed' => false, + ])); $api->assertForbidden(); } @@ -42,12 +46,14 @@ public function test_role_api_call_read_any_without_access_right_expect_unauthor public function test_role_api_call_read_any_expect_collection() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); - $api = $this->getJson(route('api.get.db.admin.role.read_any', [])); + $api = $this->getJson(route('api.get.db.admin.role.read_any', [ + 'with_trashed' => false, + ])); $api->assertSuccessful(); } diff --git a/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPICreateTest.php b/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPICreateTest.php new file mode 100644 index 000000000..ff69198ba --- /dev/null +++ b/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPICreateTest.php @@ -0,0 +1,235 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.save'), $payload); + + $api->assertUnauthorized(); + } + + public function test_stock_adjustment_category_api_call_store_without_access_right_expect_forbidden_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.save'), $payload); + + $api->assertForbidden(); + } + + public function test_stock_adjustment_category_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'name' => '', + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_adjustment_categories', [ + 'company_id' => $company->id, + 'name' => 'alert("xss")', + ]); + } + + public function test_stock_adjustment_category_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'name' => '', + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.save'), $payload, ['X-Sanitizer-Mode' => 'encode']); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_adjustment_categories', [ + 'company_id' => $company->id, + 'name' => '<script>alert("xss")</script>', + ]); + } + + public function test_stock_adjustment_category_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_adjustment_categories', [ + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_stock_adjustment_category_api_call_store_with_auto_code_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => Config::get('dcslab.KEYWORDS.AUTO'), + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_adjustment_categories', [ + 'company_id' => $company->id, + 'name' => $payload['name'], + ]); + } + + public function test_stock_adjustment_category_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockAdjustmentCategory::factory()->for($company)->create([ + 'code' => 'TEST1', + ]); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'TEST1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.save'), $payload); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_stock_adjustment_category_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + $company_2 = $companies[1]; + + StockAdjustmentCategory::factory()->for($company_1)->create([ + 'code' => 'TEST1', + ]); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'TEST1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_adjustment_categories', [ + 'company_id' => $company_2->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_stock_adjustment_category_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $payload = []; + + $api = $this->json('POST', route('api.post.stock_adjustment_category.save'), $payload); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPIDeleteTest.php b/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPIDeleteTest.php new file mode 100644 index 000000000..89c0dd22a --- /dev/null +++ b/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPIDeleteTest.php @@ -0,0 +1,98 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $category = StockAdjustmentCategory::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.delete', $category->ulid)); + + $api->assertUnauthorized(); + } + + public function test_stock_adjustment_category_api_call_delete_without_access_right_expect_forbidden_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $category = StockAdjustmentCategory::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.delete', $category->ulid)); + + $api->assertForbidden(); + } + + public function test_stock_adjustment_category_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $category = StockAdjustmentCategory::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.delete', $category->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('stock_adjustment_categories', [ + 'id' => $category->id, + ]); + } + + public function test_stock_adjustment_category_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_stock_adjustment_category_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + + $user = User::factory()->create(); + + $this->actingAs($user); + + $this->json('POST', route('api.post.stock_adjustment_category.delete', null)); + } +} diff --git a/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPIEditTest.php b/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPIEditTest.php new file mode 100644 index 000000000..79e03d4b9 --- /dev/null +++ b/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPIEditTest.php @@ -0,0 +1,150 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockAdjustmentCategory = StockAdjustmentCategory::factory()->for($company)->create(); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.edit', $stockAdjustmentCategory->ulid), $payload); + + $api->assertStatus(401); + } + + public function test_stock_adjustment_category_api_call_update_without_access_right_expect_forbidden_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockAdjustmentCategory = StockAdjustmentCategory::factory()->for($company)->create(); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.edit', $stockAdjustmentCategory->ulid), $payload); + + $api->assertStatus(403); + } + + public function test_stock_adjustment_category_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockAdjustmentCategory = StockAdjustmentCategory::factory()->for($company)->create(); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.edit', $stockAdjustmentCategory->ulid), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_adjustment_categories', [ + 'id' => $stockAdjustmentCategory->id, + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_stock_adjustment_category_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockAdjustmentCategory::factory()->for($company)->count(2)->create(); + + $categories = $company->stockAdjustmentCategories()->inRandomOrder()->take(2)->get(); + $category1 = $categories[0]; + $category2 = $categories[1]; + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $category1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.edit', $category2->ulid), $payload); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_stock_adjustment_category_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company1 = $companies[0]; + StockAdjustmentCategory::factory()->for($company1)->create([ + 'code' => 'TEST1', + ]); + + $company2 = $companies[1]; + $category2 = StockAdjustmentCategory::factory()->for($company2)->create([ + 'code' => 'TEST2', + ]); + + $payload = StockAdjustmentCategory::factory()->make([ + 'company_id' => Hashids::encode($company2->id), + 'code' => 'TEST1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.stock_adjustment_category.edit', $category2->ulid), $payload); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPIReadTest.php b/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPIReadTest.php new file mode 100644 index 000000000..66907efd6 --- /dev/null +++ b/api/tests/Feature/API/StockAdjustmentCategoryAPI/StockAdjustmentCategoryAPIReadTest.php @@ -0,0 +1,307 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + StockAdjustmentCategory::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.stock_adjustment_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(401); + } + + public function test_stock_adjustment_category_api_call_read_any_without_access_right_expect_forbidden_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockAdjustmentCategory::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.stock_adjustment_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertStatus(403); + } + + public function test_stock_adjustment_category_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockAdjustmentCategory = StockAdjustmentCategory::factory()->for($company)->create(); + + $ulid = $stockAdjustmentCategory->ulid; + + $api = $this->getJson(route('api.get.stock_adjustment_category.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_stock_adjustment_category_api_call_read_without_access_right_expect_forbidden_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockAdjustmentCategory = StockAdjustmentCategory::factory()->for($company)->create(); + + $ulid = $stockAdjustmentCategory->ulid; + + $api = $this->getJson(route('api.get.stock_adjustment_category.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_stock_adjustment_category_api_call_read_any_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockAdjustmentCategory::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + '1 OR SLEEP(5)', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + "admin'--", + "' OR 1=1 --", + ]; + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.stock_adjustment_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.stock_adjustment_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_stock_adjustment_category_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockAdjustmentCategory::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.stock_adjustment_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.stock_adjustment_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + ]); + } + + public function test_stock_adjustment_category_api_call_read_any_with_search_expect_filtered() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockAdjustmentCategory::factory()->for($company)->create([ + 'name' => 'Adjustment Category 1', + ]); + + StockAdjustmentCategory::factory()->for($company)->create([ + 'name' => 'Another Category', + ]); + + $api = $this->getJson(route('api.get.stock_adjustment_category.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'Adjustment Category 1', + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonFragment([ + 'name' => 'Adjustment Category 1', + ]); + $api->assertJsonMissing([ + 'name' => 'Another Category', + ]); + } + + public function test_stock_adjustment_category_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockAdjustmentCategory = StockAdjustmentCategory::factory()->for($company)->create(); + + $ulid = $stockAdjustmentCategory->ulid; + + $api = $this->getJson(route('api.get.stock_adjustment_category.read', $ulid)); + + $api->assertSuccessful(); + $api->assertJsonFragment([ + 'name' => $stockAdjustmentCategory->name, + ]); + } + + public function test_stock_adjustment_category_api_call_read_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.stock_adjustment_category.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/StockTransferAPI/StockTransferAPICreateTest.php b/api/tests/Feature/API/StockTransferAPI/StockTransferAPICreateTest.php new file mode 100644 index 000000000..2bc575563 --- /dev/null +++ b/api/tests/Feature/API/StockTransferAPI/StockTransferAPICreateTest.php @@ -0,0 +1,176 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.save'), $stockTransferArr); + + $api->assertUnauthorized(); + } + + public function test_stock_transfer_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.save'), $stockTransferArr); + + $api->assertForbidden(); + } + + public function test_stock_transfer_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_stock_transfer_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.save'), $stockTransferArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_transfers', [ + 'company_id' => $company->id, + 'code' => $stockTransferArr['code'], + 'name' => $stockTransferArr['name'], + ]); + } + + public function test_stock_transfer_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.save'), $stockTransferArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_stock_transfer_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + StockTransfer::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.save'), $stockTransferArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_transfers', [ + 'company_id' => $company_2->id, + 'code' => $stockTransferArr['code'], + 'name' => $stockTransferArr['name'], + ]); + } + + public function test_stock_transfer_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $stockTransferArr = []; + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.save'), $stockTransferArr); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/StockTransferAPI/StockTransferAPIDeleteTest.php b/api/tests/Feature/API/StockTransferAPI/StockTransferAPIDeleteTest.php new file mode 100644 index 000000000..68348b94d --- /dev/null +++ b/api/tests/Feature/API/StockTransferAPI/StockTransferAPIDeleteTest.php @@ -0,0 +1,95 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransfer = StockTransfer::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.delete', $stockTransfer->ulid)); + + $api->assertStatus(401); + } + + public function test_stock_transfer_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransfer = StockTransfer::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.delete', $stockTransfer->ulid)); + + $api->assertStatus(403); + } + + public function test_stock_transfer_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransfer = StockTransfer::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.delete', $stockTransfer->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('stock_transfers', [ + 'id' => $stockTransfer->id, + ]); + } + + public function test_stock_transfer_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_stock_transfer_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.delete', null)); + + $api->assertStatus(500); + } +} diff --git a/api/tests/Feature/API/StockTransferAPI/StockTransferAPIEditTest.php b/api/tests/Feature/API/StockTransferAPI/StockTransferAPIEditTest.php new file mode 100644 index 000000000..2d3f1f160 --- /dev/null +++ b/api/tests/Feature/API/StockTransferAPI/StockTransferAPIEditTest.php @@ -0,0 +1,161 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransfer = StockTransfer::factory()->for($company)->create(); + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.edit', $stockTransfer->ulid), $stockTransferArr); + + $api->assertStatus(401); + } + + public function test_stock_transfer_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransfer = StockTransfer::factory()->for($company)->create(); + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.edit', $stockTransfer->ulid), $stockTransferArr); + + $api->assertStatus(403); + } + + public function test_stock_transfer_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransfer = StockTransfer::factory()->for($company)->create(); + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.edit', $stockTransfer->ulid), $stockTransferArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_transfers', [ + 'id' => $stockTransfer->id, + 'company_id' => $company->id, + 'code' => $stockTransferArr['code'], + 'name' => $stockTransferArr['name'], + ]); + } + + public function test_stock_transfer_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + StockTransfer::factory()->for($company)->count(2)->create(); + + $stockTransfers = $company->stockTransfers()->inRandomOrder()->take(2)->get(); + $stockTransfer_1 = $stockTransfers[0]; + $stockTransfer_2 = $stockTransfers[1]; + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $stockTransfer_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.edit', $stockTransfer_2->ulid), $stockTransferArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_stock_transfer_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + StockTransfer::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $stockTransfer_2 = StockTransfer::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $stockTransferArr = StockTransfer::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer.edit', $stockTransfer_2->ulid), $stockTransferArr); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/StockTransferAPI/StockTransferAPIReadTest.php b/api/tests/Feature/API/StockTransferAPI/StockTransferAPIReadTest.php new file mode 100644 index 000000000..0cef1ace3 --- /dev/null +++ b/api/tests/Feature/API/StockTransferAPI/StockTransferAPIReadTest.php @@ -0,0 +1,539 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(401); + } + + public function test_stock_transfer_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(403); + } + + public function test_stock_transfer_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransfer = StockTransfer::factory()->for($company)->create(); + + $ulid = $stockTransfer->ulid; + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_stock_transfer_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransfer = StockTransfer::factory()->for($company)->create(); + + $ulid = $stockTransfer->ulid; + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_stock_transfer_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + "' OR \'1\'=\'1", + '1 OR SLEEP(5)', + '1 AND (SELECT COUNT(*) FROM sysobjects) > 1', + "1 AND (SELECT * FROM users WHERE username = 'admin' AND SLEEP(5))", + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "SELECT * FROM users; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin' AND password LIKE '%a%')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + '1 OR 1=1; DROP TABLE users; --', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = database()', + "1; EXEC xp_cmdshell('echo vulnerable'); --", + "' OR EXISTS(SELECT * FROM information_schema.tables WHERE table_schema='public' AND table_name='users' LIMIT 1) --", + "1'; EXEC sp_addrolemember 'db_owner', 'admin'; --", + "1' OR '1'='1'; -- EXEC master..xp_cmdshell 'echo vulnerable' --", + "1' UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(username, ':', password) FROM users --", + '1; SELECT pg_sleep(5); --', + "1 AND SLEEP(5) AND 'abc'='abc", + "1 AND SLEEP(5) AND 'xyz'='xyz", + '1 OR 1=1; SELECT COUNT(*) FROM information_schema.tables;', + "1' UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' --", + '1 AND (SELECT * FROM (SELECT(SLEEP(5)))hOKz)', + "1' AND 1=(SELECT COUNT(*) FROM tabname); --", + "1'; WAITFOR DELAY '0:0:5' --", + "1 OR 1=1; WAITFOR DELAY '0:0:5' --", + "1; DECLARE @v VARCHAR(8000);SET @v = '';SELECT @v = @v + name + ', ' FROM sysobjects WHERE xtype = 'U';SELECT @v --", + "1; SELECT COUNT(*), CONCAT(table_name, ':', column_name) FROM information_schema.columns GROUP BY table_name, column_name HAVING COUNT(*) > 1; --", + '1; SELECT COUNT(*), table_name FROM information_schema.columns GROUP BY table_name HAVING COUNT(*) > 1; --', + "1' OR '1'='1'; SELECT COUNT(*) FROM information_schema.tables; --", + '1 AND (SELECT COUNT(*) FROM users) > 10', + '1 AND (SELECT COUNT(*) FROM users) > 100', + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin')", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR '1'='1", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR 'x'='x", + '1 AND (SELECT COUNT(*) FROM users) > 1; SELECT * FROM users;', + '1 OR 1=1; SELECT * FROM users;', + "1' OR 1=1; SELECT * FROM users;", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "' OR 1=1 --", + "admin'--", + "admin' #", + "' OR 'x'='x", + "' OR 'a'='a'", + "' OR 'a'='a'--", + "' OR 1=1", + "' OR 1=1--", + "' OR 1=1#", + "' OR 1=1 /*", + "' OR '1'='1'--", + "' OR '1'='1'/*", + "' OR '1'='1' #", + "' OR '1'='1' /*", + "' OR '1'='1' or ''='", + "' OR '1'='1' or 'a'='a", + "' OR '1'='1' or 'a'='a'--", + "' OR '1'='1' or 'a'='a'/*", + "' OR '1'='1' or 'a'='a' #", + "' OR '1'='1' or 'a'='a' /*", + '1; SELECT * FROM users WHERE 1=1', + '1; SELECT * FROM users WHERE 1=1--', + '1; SELECT * FROM users WHERE 1=1/*', + "1' OR 1=1; SELECT * FROM users WHERE 1=1", + "1' OR 1=1; SELECT * FROM users WHERE 1=1--", + "1' OR 1=1; SELECT * FROM users WHERE 1=1/*", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1' UNION SELECT username, password FROM users", + "1' OR '1'='1' UNION SELECT username, password FROM users--", + "1' OR '1'='1' UNION SELECT username, password FROM users/*", + "1' OR '1'='1' UNION SELECT username, password FROM users #", + "1' OR '1'='1' UNION SELECT username, password FROM users /*", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.tables", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema", + "' OR '", + "1' OR '1'='1' UNION SELECT NULL", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.columns", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM", + "' OR '1'='1' or", + ]; + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_stock_transfer_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_stock_transfer_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_stock_transfer_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company) + ->count(2)->create(); + + StockTransfer::factory()->for($company) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_stock_transfer_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertStatus(422); + } + + public function test_stock_transfer_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_stock_transfer_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransfer::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_stock_transfer_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransfer = StockTransfer::factory()->for($company)->create(); + + $ulid = $stockTransfer->ulid; + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_stock_transfer_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read', null)); + } + + public function test_stock_transfer_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPICreateTest.php b/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPICreateTest.php new file mode 100644 index 000000000..d5e7a7bc0 --- /dev/null +++ b/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPICreateTest.php @@ -0,0 +1,176 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.save'), $stockTransferItemArr); + + $api->assertUnauthorized(); + } + + public function test_stock_transfer_item_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.save'), $stockTransferItemArr); + + $api->assertForbidden(); + } + + public function test_stock_transfer_item_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_stock_transfer_item_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.save'), $stockTransferItemArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_transfer_items', [ + 'company_id' => $company->id, + 'code' => $stockTransferItemArr['code'], + 'name' => $stockTransferItemArr['name'], + ]); + } + + public function test_stock_transfer_item_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.save'), $stockTransferItemArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_stock_transfer_item_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + StockTransferItem::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.save'), $stockTransferItemArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_transfer_items', [ + 'company_id' => $company_2->id, + 'code' => $stockTransferItemArr['code'], + 'name' => $stockTransferItemArr['name'], + ]); + } + + public function test_stock_transfer_item_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $stockTransferItemArr = []; + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.save'), $stockTransferItemArr); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPIDeleteTest.php b/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPIDeleteTest.php new file mode 100644 index 000000000..821b78aca --- /dev/null +++ b/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPIDeleteTest.php @@ -0,0 +1,95 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItem = StockTransferItem::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.delete', $stockTransferItem->ulid)); + + $api->assertStatus(401); + } + + public function test_stock_transfer_item_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItem = StockTransferItem::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.delete', $stockTransferItem->ulid)); + + $api->assertStatus(403); + } + + public function test_stock_transfer_item_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItem = StockTransferItem::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.delete', $stockTransferItem->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('stock_transfer_items', [ + 'id' => $stockTransferItem->id, + ]); + } + + public function test_stock_transfer_item_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_stock_transfer_item_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.delete', null)); + + $api->assertStatus(500); + } +} diff --git a/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPIEditTest.php b/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPIEditTest.php new file mode 100644 index 000000000..75a7df7bc --- /dev/null +++ b/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPIEditTest.php @@ -0,0 +1,161 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItem = StockTransferItem::factory()->for($company)->create(); + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.edit', $stockTransferItem->ulid), $stockTransferItemArr); + + $api->assertStatus(401); + } + + public function test_stock_transfer_item_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItem = StockTransferItem::factory()->for($company)->create(); + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.edit', $stockTransferItem->ulid), $stockTransferItemArr); + + $api->assertStatus(403); + } + + public function test_stock_transfer_item_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItem = StockTransferItem::factory()->for($company)->create(); + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.edit', $stockTransferItem->ulid), $stockTransferItemArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_transfer_items', [ + 'id' => $stockTransferItem->id, + 'company_id' => $company->id, + 'code' => $stockTransferItemArr['code'], + 'name' => $stockTransferItemArr['name'], + ]); + } + + public function test_stock_transfer_item_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + StockTransferItem::factory()->for($company)->count(2)->create(); + + $stockTransferItems = $company->stockTransferItems()->inRandomOrder()->take(2)->get(); + $stockTransferItem_1 = $stockTransferItems[0]; + $stockTransferItem_2 = $stockTransferItems[1]; + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $stockTransferItem_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.edit', $stockTransferItem_2->ulid), $stockTransferItemArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_stock_transfer_item_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + StockTransferItem::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $stockTransferItem_2 = StockTransferItem::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $stockTransferItemArr = StockTransferItem::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item.edit', $stockTransferItem_2->ulid), $stockTransferItemArr); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPIReadTest.php b/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPIReadTest.php new file mode 100644 index 000000000..38577df94 --- /dev/null +++ b/api/tests/Feature/API/StockTransferItemAPI/StockTransferItemAPIReadTest.php @@ -0,0 +1,539 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(401); + } + + public function test_stock_transfer_item_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(403); + } + + public function test_stock_transfer_item_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItem = StockTransferItem::factory()->for($company)->create(); + + $ulid = $stockTransferItem->ulid; + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_stock_transfer_item_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItem = StockTransferItem::factory()->for($company)->create(); + + $ulid = $stockTransferItem->ulid; + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_stock_transfer_item_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + "' OR \'1\'=\'1", + '1 OR SLEEP(5)', + '1 AND (SELECT COUNT(*) FROM sysobjects) > 1', + "1 AND (SELECT * FROM users WHERE username = 'admin' AND SLEEP(5))", + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "SELECT * FROM users; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin' AND password LIKE '%a%')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + '1 OR 1=1; DROP TABLE users; --', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = database()', + "1; EXEC xp_cmdshell('echo vulnerable'); --", + "' OR EXISTS(SELECT * FROM information_schema.tables WHERE table_schema='public' AND table_name='users' LIMIT 1) --", + "1'; EXEC sp_addrolemember 'db_owner', 'admin'; --", + "1' OR '1'='1'; -- EXEC master..xp_cmdshell 'echo vulnerable' --", + "1' UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(username, ':', password) FROM users --", + '1; SELECT pg_sleep(5); --', + "1 AND SLEEP(5) AND 'abc'='abc", + "1 AND SLEEP(5) AND 'xyz'='xyz", + '1 OR 1=1; SELECT COUNT(*) FROM information_schema.tables;', + "1' UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' --", + '1 AND (SELECT * FROM (SELECT(SLEEP(5)))hOKz)', + "1' AND 1=(SELECT COUNT(*) FROM tabname); --", + "1'; WAITFOR DELAY '0:0:5' --", + "1 OR 1=1; WAITFOR DELAY '0:0:5' --", + "1; DECLARE @v VARCHAR(8000);SET @v = '';SELECT @v = @v + name + ', ' FROM sysobjects WHERE xtype = 'U';SELECT @v --", + "1; SELECT COUNT(*), CONCAT(table_name, ':', column_name) FROM information_schema.columns GROUP BY table_name, column_name HAVING COUNT(*) > 1; --", + '1; SELECT COUNT(*), table_name FROM information_schema.columns GROUP BY table_name HAVING COUNT(*) > 1; --', + "1' OR '1'='1'; SELECT COUNT(*) FROM information_schema.tables; --", + '1 AND (SELECT COUNT(*) FROM users) > 10', + '1 AND (SELECT COUNT(*) FROM users) > 100', + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin')", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR '1'='1", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR 'x'='x", + '1 AND (SELECT COUNT(*) FROM users) > 1; SELECT * FROM users;', + '1 OR 1=1; SELECT * FROM users;', + "1' OR 1=1; SELECT * FROM users;", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "' OR 1=1 --", + "admin'--", + "admin' #", + "' OR 'x'='x", + "' OR 'a'='a'", + "' OR 'a'='a'--", + "' OR 1=1", + "' OR 1=1--", + "' OR 1=1#", + "' OR 1=1 /*", + "' OR '1'='1'--", + "' OR '1'='1'/*", + "' OR '1'='1' #", + "' OR '1'='1' /*", + "' OR '1'='1' or ''='", + "' OR '1'='1' or 'a'='a", + "' OR '1'='1' or 'a'='a'--", + "' OR '1'='1' or 'a'='a'/*", + "' OR '1'='1' or 'a'='a' #", + "' OR '1'='1' or 'a'='a' /*", + '1; SELECT * FROM users WHERE 1=1', + '1; SELECT * FROM users WHERE 1=1--', + '1; SELECT * FROM users WHERE 1=1/*', + "1' OR 1=1; SELECT * FROM users WHERE 1=1", + "1' OR 1=1; SELECT * FROM users WHERE 1=1--", + "1' OR 1=1; SELECT * FROM users WHERE 1=1/*", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1' UNION SELECT username, password FROM users", + "1' OR '1'='1' UNION SELECT username, password FROM users--", + "1' OR '1'='1' UNION SELECT username, password FROM users/*", + "1' OR '1'='1' UNION SELECT username, password FROM users #", + "1' OR '1'='1' UNION SELECT username, password FROM users /*", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.tables", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema", + "' OR '", + "1' OR '1'='1' UNION SELECT NULL", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.columns", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM", + "' OR '1'='1' or", + ]; + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_stock_transfer_item_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_stock_transfer_item_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_stock_transfer_item_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company) + ->count(2)->create(); + + StockTransferItem::factory()->for($company) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_stock_transfer_item_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertStatus(422); + } + + public function test_stock_transfer_item_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_stock_transfer_item_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItem::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_stock_transfer_item_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItem = StockTransferItem::factory()->for($company)->create(); + + $ulid = $stockTransferItem->ulid; + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_stock_transfer_item_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read', null)); + } + + public function test_stock_transfer_item_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPICreateTest.php b/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPICreateTest.php new file mode 100644 index 000000000..1095c53e0 --- /dev/null +++ b/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPICreateTest.php @@ -0,0 +1,176 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.save'), $stockTransferItemSerialArr); + + $api->assertUnauthorized(); + } + + public function test_stock_transfer_item_serial_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.save'), $stockTransferItemSerialArr); + + $api->assertForbidden(); + } + + public function test_stock_transfer_item_serial_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_serial_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_stock_transfer_item_serial_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.save'), $stockTransferItemSerialArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_transfer_item_serials', [ + 'company_id' => $company->id, + 'code' => $stockTransferItemSerialArr['code'], + 'name' => $stockTransferItemSerialArr['name'], + ]); + } + + public function test_stock_transfer_item_serial_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_serial_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.save'), $stockTransferItemSerialArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_stock_transfer_item_serial_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + StockTransferItemSerial::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.save'), $stockTransferItemSerialArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_transfer_item_serials', [ + 'company_id' => $company_2->id, + 'code' => $stockTransferItemSerialArr['code'], + 'name' => $stockTransferItemSerialArr['name'], + ]); + } + + public function test_stock_transfer_item_serial_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $stockTransferItemSerialArr = []; + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.save'), $stockTransferItemSerialArr); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPIDeleteTest.php b/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPIDeleteTest.php new file mode 100644 index 000000000..7f6cd93b0 --- /dev/null +++ b/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPIDeleteTest.php @@ -0,0 +1,95 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItemSerial = StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.delete', $stockTransferItemSerial->ulid)); + + $api->assertStatus(401); + } + + public function test_stock_transfer_item_serial_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItemSerial = StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.delete', $stockTransferItemSerial->ulid)); + + $api->assertStatus(403); + } + + public function test_stock_transfer_item_serial_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItemSerial = StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.delete', $stockTransferItemSerial->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('stock_transfer_item_serials', [ + 'id' => $stockTransferItemSerial->id, + ]); + } + + public function test_stock_transfer_item_serial_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_stock_transfer_item_serial_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.delete', null)); + + $api->assertStatus(500); + } +} diff --git a/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPIEditTest.php b/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPIEditTest.php new file mode 100644 index 000000000..42d28b7ea --- /dev/null +++ b/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPIEditTest.php @@ -0,0 +1,161 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItemSerial = StockTransferItemSerial::factory()->for($company)->create(); + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.edit', $stockTransferItemSerial->ulid), $stockTransferItemSerialArr); + + $api->assertStatus(401); + } + + public function test_stock_transfer_item_serial_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItemSerial = StockTransferItemSerial::factory()->for($company)->create(); + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.edit', $stockTransferItemSerial->ulid), $stockTransferItemSerialArr); + + $api->assertStatus(403); + } + + public function test_stock_transfer_item_serial_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_serial_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_serial_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItemSerial = StockTransferItemSerial::factory()->for($company)->create(); + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.edit', $stockTransferItemSerial->ulid), $stockTransferItemSerialArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('stock_transfer_item_serials', [ + 'id' => $stockTransferItemSerial->id, + 'company_id' => $company->id, + 'code' => $stockTransferItemSerialArr['code'], + 'name' => $stockTransferItemSerialArr['name'], + ]); + } + + public function test_stock_transfer_item_serial_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + public function test_stock_transfer_item_serial_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + StockTransferItemSerial::factory()->for($company)->count(2)->create(); + + $stockTransferItemSerials = $company->stockTransferItemSerials()->inRandomOrder()->take(2)->get(); + $stockTransferItemSerial_1 = $stockTransferItemSerials[0]; + $stockTransferItemSerial_2 = $stockTransferItemSerials[1]; + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $stockTransferItemSerial_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.edit', $stockTransferItemSerial_2->ulid), $stockTransferItemSerialArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_stock_transfer_item_serial_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + StockTransferItemSerial::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $stockTransferItemSerial_2 = StockTransferItemSerial::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $stockTransferItemSerialArr = StockTransferItemSerial::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.db.stock_transfer.stock_transfer_item_serial.edit', $stockTransferItemSerial_2->ulid), $stockTransferItemSerialArr); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPIReadTest.php b/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPIReadTest.php new file mode 100644 index 000000000..35e2a5fb0 --- /dev/null +++ b/api/tests/Feature/API/StockTransferItemSerialAPI/StockTransferItemSerialAPIReadTest.php @@ -0,0 +1,539 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(401); + } + + public function test_stock_transfer_item_serial_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(403); + } + + public function test_stock_transfer_item_serial_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItemSerial = StockTransferItemSerial::factory()->for($company)->create(); + + $ulid = $stockTransferItemSerial->ulid; + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_stock_transfer_item_serial_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItemSerial = StockTransferItemSerial::factory()->for($company)->create(); + + $ulid = $stockTransferItemSerial->ulid; + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_stock_transfer_item_serial_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + "' OR \'1\'=\'1", + '1 OR SLEEP(5)', + '1 AND (SELECT COUNT(*) FROM sysobjects) > 1', + "1 AND (SELECT * FROM users WHERE username = 'admin' AND SLEEP(5))", + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "SELECT * FROM users; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin' AND password LIKE '%a%')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + '1 OR 1=1; DROP TABLE users; --', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = database()', + "1; EXEC xp_cmdshell('echo vulnerable'); --", + "' OR EXISTS(SELECT * FROM information_schema.tables WHERE table_schema='public' AND table_name='users' LIMIT 1) --", + "1'; EXEC sp_addrolemember 'db_owner', 'admin'; --", + "1' OR '1'='1'; -- EXEC master..xp_cmdshell 'echo vulnerable' --", + "1' UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(username, ':', password) FROM users --", + '1; SELECT pg_sleep(5); --', + "1 AND SLEEP(5) AND 'abc'='abc", + "1 AND SLEEP(5) AND 'xyz'='xyz", + '1 OR 1=1; SELECT COUNT(*) FROM information_schema.tables;', + "1' UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' --", + '1 AND (SELECT * FROM (SELECT(SLEEP(5)))hOKz)', + "1' AND 1=(SELECT COUNT(*) FROM tabname); --", + "1'; WAITFOR DELAY '0:0:5' --", + "1 OR 1=1; WAITFOR DELAY '0:0:5' --", + "1; DECLARE @v VARCHAR(8000);SET @v = '';SELECT @v = @v + name + ', ' FROM sysobjects WHERE xtype = 'U';SELECT @v --", + "1; SELECT COUNT(*), CONCAT(table_name, ':', column_name) FROM information_schema.columns GROUP BY table_name, column_name HAVING COUNT(*) > 1; --", + '1; SELECT COUNT(*), table_name FROM information_schema.columns GROUP BY table_name HAVING COUNT(*) > 1; --', + "1' OR '1'='1'; SELECT COUNT(*) FROM information_schema.tables; --", + '1 AND (SELECT COUNT(*) FROM users) > 10', + '1 AND (SELECT COUNT(*) FROM users) > 100', + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin')", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR '1'='1", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR 'x'='x", + '1 AND (SELECT COUNT(*) FROM users) > 1; SELECT * FROM users;', + '1 OR 1=1; SELECT * FROM users;', + "1' OR 1=1; SELECT * FROM users;", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "' OR 1=1 --", + "admin'--", + "admin' #", + "' OR 'x'='x", + "' OR 'a'='a'", + "' OR 'a'='a'--", + "' OR 1=1", + "' OR 1=1--", + "' OR 1=1#", + "' OR 1=1 /*", + "' OR '1'='1'--", + "' OR '1'='1'/*", + "' OR '1'='1' #", + "' OR '1'='1' /*", + "' OR '1'='1' or ''='", + "' OR '1'='1' or 'a'='a", + "' OR '1'='1' or 'a'='a'--", + "' OR '1'='1' or 'a'='a'/*", + "' OR '1'='1' or 'a'='a' #", + "' OR '1'='1' or 'a'='a' /*", + '1; SELECT * FROM users WHERE 1=1', + '1; SELECT * FROM users WHERE 1=1--', + '1; SELECT * FROM users WHERE 1=1/*', + "1' OR 1=1; SELECT * FROM users WHERE 1=1", + "1' OR 1=1; SELECT * FROM users WHERE 1=1--", + "1' OR 1=1; SELECT * FROM users WHERE 1=1/*", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1' UNION SELECT username, password FROM users", + "1' OR '1'='1' UNION SELECT username, password FROM users--", + "1' OR '1'='1' UNION SELECT username, password FROM users/*", + "1' OR '1'='1' UNION SELECT username, password FROM users #", + "1' OR '1'='1' UNION SELECT username, password FROM users /*", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.tables", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema", + "' OR '", + "1' OR '1'='1' UNION SELECT NULL", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.columns", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM", + "' OR '1'='1' or", + ]; + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_stock_transfer_item_serial_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_stock_transfer_item_serial_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_stock_transfer_item_serial_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company) + ->count(2)->create(); + + StockTransferItemSerial::factory()->for($company) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_stock_transfer_item_serial_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertStatus(422); + } + + public function test_stock_transfer_item_serial_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_stock_transfer_item_serial_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + StockTransferItemSerial::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_stock_transfer_item_serial_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $stockTransferItemSerial = StockTransferItemSerial::factory()->for($company)->create(); + + $ulid = $stockTransferItemSerial->ulid; + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_stock_transfer_item_serial_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read', null)); + } + + public function test_stock_transfer_item_serial_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.db.stock_transfer.stock_transfer_item_serial.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/SupplierAPI/SupplierAPICreateTest.php b/api/tests/Feature/API/SupplierAPI/SupplierAPICreateTest.php new file mode 100644 index 000000000..521a21f62 --- /dev/null +++ b/api/tests/Feature/API/SupplierAPI/SupplierAPICreateTest.php @@ -0,0 +1,250 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.save'), $supplierArr); + + $api->assertUnauthorized(); + } + + public function test_supplier_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.save'), $supplierArr); + + $api->assertForbidden(); + } + + public function test_supplier_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'name' => ' Test Name', + 'address' => ' Address', + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.save'), $supplierArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('suppliers', [ + 'company_id' => $company->id, + 'name' => 'alert("xss") Test Name', + 'address' => 'alert("xss") Address', + ]); + } + + public function test_supplier_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'name' => ' Test Name', + 'address' => ' Address', + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.save'), $supplierArr, ['X-Sanitizer-Mode' => 'encode']); + + $api->assertSuccessful(); + $this->assertDatabaseHas('suppliers', [ + 'company_id' => $company->id, + 'name' => '<script>alert("xss")</script> Test Name', + 'address' => '<script>alert("xss")</script> Address', + ]); + } + + public function test_supplier_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.save'), $supplierArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('suppliers', [ + 'company_id' => $company->id, + 'code' => $supplierArr['code'], + 'name' => $supplierArr['name'], + 'address' => $supplierArr['address'], + 'city' => $supplierArr['city'], + 'payment_term_type' => $supplierArr['payment_term_type'], + 'payment_term' => $supplierArr['payment_term'], + 'taxable_enterprise' => $supplierArr['taxable_enterprise'], + 'tax_id' => $supplierArr['tax_id'], + 'status' => $supplierArr['status'], + 'remarks' => $supplierArr['remarks'], + ]); + } + + public function test_supplier_api_call_store_with_nonexistance_company_id_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode(99999999), // Non-existent company ID + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.save'), $supplierArr); + + $api->assertStatus(422); + $api->assertJsonValidationErrors(['company_id']); + } + + public function test_supplier_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.save'), $supplierArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_supplier_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + + $company_2 = $companies[1]; + + Supplier::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.save'), $supplierArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('suppliers', [ + 'company_id' => $company_2->id, + 'code' => $supplierArr['code'], + 'name' => $supplierArr['name'], + 'address' => $supplierArr['address'], + 'city' => $supplierArr['city'], + 'payment_term_type' => $supplierArr['payment_term_type'], + 'payment_term' => $supplierArr['payment_term'], + 'taxable_enterprise' => $supplierArr['taxable_enterprise'], + 'tax_id' => $supplierArr['tax_id'], + 'status' => $supplierArr['status'], + 'remarks' => $supplierArr['remarks'], + ]); + } + + public function test_supplier_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $supplierArr = []; + + $api = $this->json('POST', route('api.post.supplier.save'), $supplierArr); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } +} diff --git a/api/tests/Feature/API/SupplierAPI/SupplierAPIDeleteTest.php b/api/tests/Feature/API/SupplierAPI/SupplierAPIDeleteTest.php new file mode 100644 index 000000000..7f5dba01f --- /dev/null +++ b/api/tests/Feature/API/SupplierAPI/SupplierAPIDeleteTest.php @@ -0,0 +1,95 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = Supplier::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.supplier.delete', $supplier->ulid)); + + $api->assertStatus(401); + } + + public function test_supplier_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = Supplier::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.supplier.delete', $supplier->ulid)); + + $api->assertStatus(403); + } + + public function test_supplier_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = Supplier::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.supplier.delete', $supplier->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('suppliers', [ + 'id' => $supplier->id, + ]); + } + + public function test_supplier_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.supplier.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_supplier_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.supplier.delete', null)); + + $api->assertStatus(500); + } +} diff --git a/api/tests/Feature/API/SupplierAPI/SupplierAPIEditTest.php b/api/tests/Feature/API/SupplierAPI/SupplierAPIEditTest.php new file mode 100644 index 000000000..ace2949b9 --- /dev/null +++ b/api/tests/Feature/API/SupplierAPI/SupplierAPIEditTest.php @@ -0,0 +1,234 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = Supplier::factory()->for($company)->create(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.edit', $supplier->ulid), $supplierArr); + + $api->assertStatus(401); + } + + public function test_supplier_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = Supplier::factory()->for($company)->create(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.edit', $supplier->ulid), $supplierArr); + + $api->assertStatus(403); + } + + public function test_supplier_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = Supplier::factory()->for($company)->create(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'name' => ' Test Name', + 'address' => ' Address', + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.edit', $supplier->ulid), $supplierArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('suppliers', [ + 'id' => $supplier->id, + 'company_id' => $company->id, + 'name' => 'alert("xss") Test Name', + 'address' => 'alert("xss") Address', + ]); + } + + public function test_supplier_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = Supplier::factory()->for($company)->create(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'name' => ' Test Name', + 'address' => ' Address', + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.edit', $supplier->ulid), $supplierArr, ['X-Sanitizer-Mode' => 'encode']); + + $api->assertSuccessful(); + $this->assertDatabaseHas('suppliers', [ + 'id' => $supplier->id, + 'company_id' => $company->id, + 'name' => '<script>alert("xss")</script> Test Name', + 'address' => '<script>alert("xss")</script> Address', + ]); + } + + public function test_supplier_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = Supplier::factory()->for($company)->create(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.edit', $supplier->ulid), $supplierArr); + + $api->assertSuccessful(); + $this->assertDatabaseHas('suppliers', [ + 'id' => $supplier->id, + 'company_id' => $company->id, + 'code' => $supplierArr['code'], + 'name' => $supplierArr['name'], + 'address' => $supplierArr['address'], + 'city' => $supplierArr['city'], + 'payment_term_type' => $supplierArr['payment_term_type'], + 'payment_term' => $supplierArr['payment_term'], + 'taxable_enterprise' => $supplierArr['taxable_enterprise'], + 'tax_id' => $supplierArr['tax_id'], + 'status' => $supplierArr['status'], + 'remarks' => $supplierArr['remarks'], + ]); + } + + public function test_supplier_api_call_update_with_nonexistance_company_id_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = Supplier::factory()->for($company)->create(); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode(99999999), // Non-existent company ID + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.edit', $supplier->ulid), $supplierArr); + + $api->assertStatus(422); + $api->assertJsonValidationErrors(['company_id']); + } + + public function test_supplier_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + Supplier::factory()->for($company)->count(2)->create(); + + $suppliers = $company->suppliers()->inRandomOrder()->take(2)->get(); + $supplier_1 = $suppliers[0]; + $supplier_2 = $suppliers[1]; + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $supplier_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.edit', $supplier_2->ulid), $supplierArr); + + $api->assertStatus(422); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_supplier_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + Supplier::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $supplier_2 = Supplier::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $supplierArr = Supplier::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.supplier.edit', $supplier_2->ulid), $supplierArr); + + $api->assertSuccessful(); + } +} diff --git a/api/tests/Feature/API/SupplierAPI/SupplierAPIReadTest.php b/api/tests/Feature/API/SupplierAPI/SupplierAPIReadTest.php new file mode 100644 index 000000000..9e2201540 --- /dev/null +++ b/api/tests/Feature/API/SupplierAPI/SupplierAPIReadTest.php @@ -0,0 +1,545 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(401); + } + + public function test_supplier_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(403); + } + + public function test_supplier_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $supplier = Supplier::factory()->for($company)->create(); + + $ulid = $supplier->ulid; + + $api = $this->getJson(route('api.get.supplier.read', $ulid)); + + $api->assertStatus(401); + } + + public function test_supplier_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $supplier = Supplier::factory()->for($company)->create(); + + $ulid = $supplier->ulid; + + $api = $this->getJson(route('api.get.supplier.read', $ulid)); + + $api->assertStatus(403); + } + + public function test_supplier_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + "' OR \'1\'=\'1", + '1 OR SLEEP(5)', + '1 AND (SELECT COUNT(*) FROM sysobjects) > 1', + "1 AND (SELECT * FROM users WHERE username = 'admin' AND SLEEP(5))", + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "SELECT * FROM users; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin' AND password LIKE '%a%')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + '1 OR 1=1; DROP TABLE users; --', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns', + '1 AND 1=0 UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = database()', + "1; EXEC xp_cmdshell('echo vulnerable'); --", + "' OR EXISTS(SELECT * FROM information_schema.tables WHERE table_schema='public' AND table_name='users' LIMIT 1) --", + "1'; EXEC sp_addrolemember 'db_owner', 'admin'; --", + "1' OR '1'='1'; -- EXEC master..xp_cmdshell 'echo vulnerable' --", + "1' UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(username, ':', password) FROM users --", + '1; SELECT pg_sleep(5); --', + "1 AND SLEEP(5) AND 'abc'='abc", + "1 AND SLEEP(5) AND 'xyz'='xyz", + '1 OR 1=1; SELECT COUNT(*) FROM information_schema.tables;', + "1' UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' --", + '1 AND (SELECT * FROM (SELECT(SLEEP(5)))hOKz)', + "1' AND 1=(SELECT COUNT(*) FROM tabname); --", + "1'; WAITFOR DELAY '0:0:5' --", + "1 OR 1=1; WAITFOR DELAY '0:0:5' --", + "1; DECLARE @v VARCHAR(8000);SET @v = '';SELECT @v = @v + name + ', ' FROM sysobjects WHERE xtype = 'U';SELECT @v --", + "1; SELECT COUNT(*), CONCAT(table_name, ':', column_name) FROM information_schema.columns GROUP BY table_name, column_name HAVING COUNT(*) > 1; --", + '1; SELECT COUNT(*), table_name FROM information_schema.columns GROUP BY table_name HAVING COUNT(*) > 1; --', + "1' OR '1'='1'; SELECT COUNT(*) FROM information_schema.tables; --", + '1 AND (SELECT COUNT(*) FROM users) > 10', + '1 AND (SELECT COUNT(*) FROM users) > 100', + "1 OR EXISTS(SELECT * FROM users WHERE username = 'admin')", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR '1'='1", + "1' OR EXISTS(SELECT * FROM users WHERE username = 'admin') OR 'x'='x", + '1 AND (SELECT COUNT(*) FROM users) > 1; SELECT * FROM users;', + '1 OR 1=1; SELECT * FROM users;', + "1' OR 1=1; SELECT * FROM users;", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin'; --", + "1 OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "1' OR 1=1; SELECT * FROM users WHERE username = 'admin' --", + "' OR 1=1 --", + "admin'--", + "admin' #", + "' OR 'x'='x", + "' OR 'a'='a'", + "' OR 'a'='a'--", + "' OR 1=1", + "' OR 1=1--", + "' OR 1=1#", + "' OR 1=1 /*", + "' OR '1'='1'--", + "' OR '1'='1'/*", + "' OR '1'='1' #", + "' OR '1'='1' /*", + "' OR '1'='1' or ''='", + "' OR '1'='1' or 'a'='a", + "' OR '1'='1' or 'a'='a'--", + "' OR '1'='1' or 'a'='a'/*", + "' OR '1'='1' or 'a'='a' #", + "' OR '1'='1' or 'a'='a' /*", + '1; SELECT * FROM users WHERE 1=1', + '1; SELECT * FROM users WHERE 1=1--', + '1; SELECT * FROM users WHERE 1=1/*', + "1' OR 1=1; SELECT * FROM users WHERE 1=1", + "1' OR 1=1; SELECT * FROM users WHERE 1=1--", + "1' OR 1=1; SELECT * FROM users WHERE 1=1/*", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1 OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1--", + "1' OR '1'='1'; SELECT * FROM users WHERE 1=1/*", + "1' OR '1'='1' UNION SELECT username, password FROM users", + "1' OR '1'='1' UNION SELECT username, password FROM users--", + "1' OR '1'='1' UNION SELECT username, password FROM users/*", + "1' OR '1'='1' UNION SELECT username, password FROM users #", + "1' OR '1'='1' UNION SELECT username, password FROM users /*", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.tables", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema", + "' OR '", + "1' OR '1'='1' UNION SELECT NULL", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM information_schema.columns", + "1' OR '1'='1' UNION SELECT NULL, table_name FROM", + "' OR '1'='1' or", + ]; + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + if ($api->status() === 422) { + dump($api->json()); + } + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections)); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_supplier_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_supplier_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_supplier_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company) + ->count(2)->create(); + + Supplier::factory()->for($company) + ->state(function (array $attributes) { + return ['name' => 'testing '.$attributes['name']]; + }) + ->count(3)->create(); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_supplier_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertStatus(422); + } + + public function test_supplier_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_supplier_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.supplier.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => -1, + 'per_page' => 25, + ], + ])); + + $api->assertStatus(422); + } + + public function test_supplier_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $supplier = Supplier::factory()->for($company)->create(); + + $ulid = $supplier->ulid; + + $api = $this->getJson(route('api.get.supplier.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_supplier_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.supplier.read', null)); + } + + public function test_supplier_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.supplier.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/UnitAPI/UnitAPICreateTest.php b/api/tests/Feature/API/UnitAPI/UnitAPICreateTest.php new file mode 100644 index 000000000..9a8189a16 --- /dev/null +++ b/api/tests/Feature/API/UnitAPI/UnitAPICreateTest.php @@ -0,0 +1,222 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.save'), $payload); + + $api->assertUnauthorized(); + } + + public function test_unit_api_call_store_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.save'), $payload); + + $api->assertForbidden(); + } + + public function test_unit_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('units', [ + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'description' => $payload['description'], + 'type' => $payload['type'], + ]); + } + + public function test_unit_api_call_store_with_auto_code_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => Config::get('dcslab.KEYWORDS.AUTO'), + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('units', [ + 'company_id' => $company->id, + 'name' => $payload['name'], + 'description' => $payload['description'], + 'type' => $payload['type'], + ]); + + $this->assertDatabaseMissing('units', [ + 'company_id' => $company->id, + 'code' => Config::get('dcslab.KEYWORDS.AUTO'), + ]); + } + + public function test_unit_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Unit::factory()->for($company)->create([ + 'code' => 'test1', + ]); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.save'), $payload); + + $api->assertUnprocessable(); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_unit_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + $company_2 = $companies[1]; + + Unit::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('units', [ + 'company_id' => $company_2->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'description' => $payload['description'], + 'type' => $payload['type'], + ]); + } + + public function test_unit_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $payload = []; + + $api = $this->json('POST', route('api.post.unit.save'), $payload); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } + + public function test_unit_api_call_store_with_sql_injection_payload_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => "'; DROP TABLE units; --", + 'name' => "'; DROP TABLE units; --", + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.save'), $payload); + + $api->assertSuccessful(); + + $this->assertDatabaseHas('units', [ + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'description' => $payload['description'], + 'type' => $payload['type'], + ]); + } +} diff --git a/api/tests/Feature/API/UnitAPI/UnitAPIDeleteTest.php b/api/tests/Feature/API/UnitAPI/UnitAPIDeleteTest.php new file mode 100644 index 000000000..48b28743e --- /dev/null +++ b/api/tests/Feature/API/UnitAPI/UnitAPIDeleteTest.php @@ -0,0 +1,119 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $unit = Unit::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.unit.delete', $unit->ulid)); + + $api->assertUnauthorized(); + } + + public function test_unit_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $unit = Unit::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.unit.delete', $unit->ulid)); + + $api->assertForbidden(); + } + + public function test_unit_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $unit = Unit::factory()->for($company)->create(); + + $api = $this->json('POST', route('api.post.unit.delete', $unit->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('units', [ + 'id' => $unit->id, + ]); + } + + public function test_unit_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.unit.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_unit_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.unit.delete', null)); + } + + public function test_unit_api_call_delete_with_sql_injection_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + '1 OR SLEEP(5)', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + "admin'--", + "' OR 1=1 --", + ]; + + $testIdx = random_int(0, count($injections) - 1); + $injection = $injections[$testIdx]; + + $api = $this->json('POST', route('api.post.unit.delete', $injection)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/UnitAPI/UnitAPIEditTest.php b/api/tests/Feature/API/UnitAPI/UnitAPIEditTest.php new file mode 100644 index 000000000..0ff213d84 --- /dev/null +++ b/api/tests/Feature/API/UnitAPI/UnitAPIEditTest.php @@ -0,0 +1,176 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $unit = Unit::factory()->for($company)->create(); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.edit', $unit->ulid), $payload); + + $api->assertUnauthorized(); + } + + public function test_unit_api_call_update_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $unit = Unit::factory()->for($company)->create(); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.edit', $unit->ulid), $payload); + + $api->assertForbidden(); + } + + public function test_unit_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $unit = Unit::factory()->for($company)->create(); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.edit', $unit->ulid), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('units', [ + 'id' => $unit->id, + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'description' => $payload['description'], + 'type' => $payload['type'], + ]); + } + + public function test_unit_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + Unit::factory()->for($company)->count(2)->create(); + + $units = $company->units()->inRandomOrder()->take(2)->get(); + $unit_1 = $units[0]; + $unit_2 = $units[1]; + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => $unit_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.edit', $unit_2->ulid), $payload); + + $api->assertUnprocessable(); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_unit_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + Unit::factory()->for($company_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $unit_2 = Unit::factory()->for($company_2)->create([ + 'code' => 'test2', + ]); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.edit', $unit_2->ulid), $payload); + + $api->assertSuccessful(); + } + + public function test_unit_api_call_update_with_sql_injection_payload_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $unit = Unit::factory()->for($company)->create(); + + $payload = Unit::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'code' => "'; DROP TABLE units; --", + 'name' => "'; DROP TABLE units; --", + ])->toArray(); + + $api = $this->json('POST', route('api.post.unit.edit', $unit->ulid), $payload); + + $api->assertSuccessful(); + + $this->assertDatabaseHas('units', [ + 'id' => $unit->id, + 'company_id' => $company->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'description' => $payload['description'], + 'type' => $payload['type'], + ]); + } +} diff --git a/api/tests/Feature/API/UnitAPI/UnitAPIReadTest.php b/api/tests/Feature/API/UnitAPI/UnitAPIReadTest.php new file mode 100644 index 000000000..ebb327b9c --- /dev/null +++ b/api/tests/Feature/API/UnitAPI/UnitAPIReadTest.php @@ -0,0 +1,422 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + Unit::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertUnauthorized(); + } + + public function test_unit_api_call_read_any_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Unit::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertForbidden(); + } + + public function test_unit_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $unit = Unit::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.unit.read', $unit->ulid)); + + $api->assertUnauthorized(); + } + + public function test_unit_api_call_read_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $unit = Unit::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.unit.read', $unit->ulid)); + + $api->assertForbidden(); + } + + public function test_unit_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Unit::factory()->for($company)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + '1 OR SLEEP(5)', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + "admin'--", + "' OR 1=1 --", + ]; + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_unit_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Unit::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + ]); + } + + public function test_unit_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Unit::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_unit_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Unit::factory()->for($company)->count(2)->create(); + + Unit::factory()->for($company) + ->create([ + 'name' => 'testing', + ]); + + Unit::factory()->for($company) + ->create([ + 'code' => 'testing_code', + ]); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 2, + ]); + } + + public function test_unit_api_call_read_any_without_required_parameters_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Unit::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertUnprocessable(); + } + + public function test_unit_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + Unit::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.unit.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_unit_api_call_read_single_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $unit = Unit::factory()->for($company)->create(); + + $api = $this->getJson(route('api.get.unit.read', $unit->ulid)); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + ]); + } + + public function test_unit_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.unit.read', null)); + } + + public function test_unit_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.unit.read', $ulid)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/UserAPI/UserAPICreateTest.php b/api/tests/Feature/API/UserAPI/UserAPICreateTest.php index 8441ad7cf..52f8db9ec 100644 --- a/api/tests/Feature/API/UserAPI/UserAPICreateTest.php +++ b/api/tests/Feature/API/UserAPI/UserAPICreateTest.php @@ -2,7 +2,7 @@ namespace Tests\Feature\API\UserAPI; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Profile; use App\Models\Role; use App\Models\User; @@ -19,13 +19,13 @@ protected function setUp(): void public function test_user_api_call_store_without_authorization_expect_unauthorized_message() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $userArr = User::factory()->make()->toArray(); $userArr = array_merge($userArr, Profile::factory()->make()->toArray()); - $role = Role::where('name', '=', UserRoles::DEVELOPER->value)->first(); + $role = Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first(); $userArr['roles'][0] = [ 'id' => HashIds::encode($role->id), 'display_name' => $role->display_name, @@ -46,7 +46,7 @@ public function test_user_api_call_store_without_access_right_expect_unauthorize $userArr = User::factory()->make()->toArray(); $userArr = array_merge($userArr, Profile::factory()->make()->toArray()); - $role = Role::where('name', '=', UserRoles::DEVELOPER->value)->first(); + $role = Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first(); $userArr['roles'][0] = [ 'id' => HashIds::encode($role->id), 'display_name' => $role->display_name, @@ -70,7 +70,7 @@ public function test_user_api_call_store_with_script_tags_in_payload_expect_enco public function test_user_api_call_store_expect_successful() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); @@ -78,7 +78,7 @@ public function test_user_api_call_store_expect_successful() $userArr = User::factory()->make()->toArray(); $userArr = array_merge($userArr, Profile::factory()->make()->toArray()); - $role = Role::where('name', '=', UserRoles::DEVELOPER->value)->first(); + $role = Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first(); $userArr['roles'][0] = [ 'id' => HashIds::encode($role->id), 'display_name' => $role->display_name, @@ -92,7 +92,7 @@ public function test_user_api_call_store_expect_successful() public function test_user_api_call_store_with_empty_string_parameters_expect_validation_error() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); diff --git a/api/tests/Feature/API/UserAPI/UserAPIEditTest.php b/api/tests/Feature/API/UserAPI/UserAPIEditTest.php index aee6e465b..06776eb73 100644 --- a/api/tests/Feature/API/UserAPI/UserAPIEditTest.php +++ b/api/tests/Feature/API/UserAPI/UserAPIEditTest.php @@ -2,7 +2,7 @@ namespace Tests\Feature\API\UserAPI; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Profile; use App\Models\Role; use App\Models\Setting; @@ -20,13 +20,13 @@ protected function setUp(): void public function test_user_api_call_update_without_authorization_expect_unauthorized_message() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $user = User::factory() ->setCreatedAt()->setUpdatedAt() ->has(Profile::factory()->setCreatedAt()->setUpdatedAt()) - ->hasAttached(Role::where('name', '=', UserRoles::ADMINISTRATOR->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::ADMINISTRATOR->value)->first()) ->has(Setting::factory()->createDefaultSetting_PREF_THEME()) ->has(Setting::factory()->createDefaultSetting_PREF_DATE_FORMAT()) ->has(Setting::factory()->createDefaultSetting_PREF_TIME_FORMAT()) @@ -35,7 +35,7 @@ public function test_user_api_call_update_without_authorization_expect_unauthori $userArr = User::factory()->make()->toArray(); $userArr = array_merge($userArr, Profile::factory()->make()->toArray()); - $role = Role::where('name', '=', UserRoles::DEVELOPER->value)->first(); + $role = Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first(); $userArr['roles'][0] = [ 'id' => HashIds::encode($role->id), 'display_name' => $role->display_name, @@ -60,7 +60,7 @@ public function test_user_api_call_update_without_access_right_expect_unauthoriz $user = User::factory() ->setCreatedAt()->setUpdatedAt() ->has(Profile::factory()->setCreatedAt()->setUpdatedAt()) - ->hasAttached(Role::where('name', '=', UserRoles::ADMINISTRATOR->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::ADMINISTRATOR->value)->first()) ->has(Setting::factory()->createDefaultSetting_PREF_THEME()) ->has(Setting::factory()->createDefaultSetting_PREF_DATE_FORMAT()) ->has(Setting::factory()->createDefaultSetting_PREF_TIME_FORMAT()) @@ -69,7 +69,7 @@ public function test_user_api_call_update_without_access_right_expect_unauthoriz $userArr = User::factory()->make()->toArray(); $userArr = array_merge($userArr, Profile::factory()->make()->toArray()); - $role = Role::where('name', '=', UserRoles::DEVELOPER->value)->first(); + $role = Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first(); $userArr['roles'][0] = [ 'id' => HashIds::encode($role->id), 'display_name' => $role->display_name, @@ -97,7 +97,7 @@ public function test_user_api_call_update_with_script_tags_in_payload_expect_enc public function test_user_api_call_update_expect_successful() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); @@ -105,7 +105,7 @@ public function test_user_api_call_update_expect_successful() $user = User::factory() ->setCreatedAt()->setUpdatedAt() ->has(Profile::factory()->setCreatedAt()->setUpdatedAt()) - ->hasAttached(Role::where('name', '=', UserRoles::ADMINISTRATOR->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::ADMINISTRATOR->value)->first()) ->has(Setting::factory()->createDefaultSetting_PREF_THEME()) ->has(Setting::factory()->createDefaultSetting_PREF_DATE_FORMAT()) ->has(Setting::factory()->createDefaultSetting_PREF_TIME_FORMAT()) @@ -114,7 +114,7 @@ public function test_user_api_call_update_expect_successful() $userArr = User::factory()->make()->toArray(); $userArr = array_merge($userArr, Profile::factory()->make()->toArray()); - $role = Role::where('name', '=', UserRoles::DEVELOPER->value)->first(); + $role = Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first(); $userArr['roles'][0] = [ 'id' => HashIds::encode($role->id), 'display_name' => $role->display_name, diff --git a/api/tests/Feature/API/UserAPI/UserAPIReadTest.php b/api/tests/Feature/API/UserAPI/UserAPIReadTest.php index fa11e1d0b..cce695afb 100644 --- a/api/tests/Feature/API/UserAPI/UserAPIReadTest.php +++ b/api/tests/Feature/API/UserAPI/UserAPIReadTest.php @@ -2,7 +2,7 @@ namespace Tests\Feature\API\UserAPI; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Role; use App\Models\User; use Exception; @@ -19,15 +19,17 @@ protected function setUp(): void public function test_user_api_call_read_any_without_authorization_expect_unauthorized_message() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $api = $this->getJson(route('api.get.db.admin.user.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], ])); $api->assertUnauthorized(); @@ -41,11 +43,13 @@ public function test_user_api_call_read_any_without_access_right_expect_unauthor $this->actingAs($user); $api = $this->getJson(route('api.get.db.admin.user.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], ])); $api->assertForbidden(); @@ -59,7 +63,7 @@ public function test_user_api_call_read_with_sql_injection_expect_injection_igno public function test_user_api_call_read_without_authorization_expect_unauthorized_message() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $api = $this->getJson(route('api.get.db.admin.user.read', $user->ulid)); @@ -82,17 +86,19 @@ public function test_user_api_call_read_without_access_right_expect_unauthorized public function test_user_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); $api = $this->getJson(route('api.get.db.admin.user.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], ])); $api->assertSuccessful(); @@ -107,11 +113,13 @@ public function test_user_api_call_read_any_with_or_without_pagination_expect_pa ]); $api = $this->getJson(route('api.get.db.admin.user.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => false, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], ])); $api->assertSuccessful(); @@ -120,17 +128,19 @@ public function test_user_api_call_read_any_with_or_without_pagination_expect_pa public function test_user_api_call_read_any_with_pagination_expect_several_per_page() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); $api = $this->getJson(route('api.get.db.admin.user.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => 1, - 'per_page' => 25, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], ])); $api->assertSuccessful(); @@ -153,7 +163,7 @@ public function test_user_api_call_read_any_with_pagination_expect_several_per_p public function test_user_api_call_read_any_with_search_expect_filtered_results() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); @@ -162,11 +172,13 @@ public function test_user_api_call_read_any_with_search_expect_filtered_results( User::factory()->setName('testing2')->create(); $api = $this->getJson(route('api.get.db.admin.user.read_any', [ + 'with_trashed' => false, 'search' => 'testing', - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], ])); $api->assertSuccessful(); @@ -184,12 +196,14 @@ public function test_user_api_call_read_any_with_search_expect_filtered_results( public function test_user_api_call_read_any_without_search_querystring_expect_failed() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); - $api = $this->getJson(route('api.get.db.admin.user.read_any', [])); + $api = $this->getJson(route('api.get.db.admin.user.read_any', [ + 'with_trashed' => false, + ])); $api->assertUnprocessable(); } @@ -197,17 +211,19 @@ public function test_user_api_call_read_any_without_search_querystring_expect_fa public function test_user_api_call_read_any_with_special_char_in_search_expect_results() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); $api = $this->getJson(route('api.get.db.admin.user.read_any', [ - 'search' => "!#$%&'()*+,-./:;<=>?@[\]^_`{|}~", - 'paginate' => true, - 'page' => 1, - 'per_page' => 10, + 'with_trashed' => false, + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], ])); $api->assertSuccessful(); @@ -225,17 +241,19 @@ public function test_user_api_call_read_any_with_special_char_in_search_expect_r public function test_user_api_call_read_any_with_negative_value_in_parameters_expect_results() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); $api = $this->getJson(route('api.get.db.admin.user.read_any', [ + 'with_trashed' => false, 'search' => '', - 'paginate' => true, - 'page' => -1, - 'per_page' => -10, 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], ])); $api->assertSuccessful(); @@ -253,7 +271,7 @@ public function test_user_api_call_read_any_with_negative_value_in_parameters_ex public function test_user_api_call_read_expect_successful() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); @@ -267,7 +285,7 @@ public function test_user_api_call_read_without_ulid_expect_exception() { $this->expectException(Exception::class); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); @@ -278,7 +296,7 @@ public function test_user_api_call_read_without_ulid_expect_exception() public function test_user_api_call_read_with_nonexistance_ulid_expect_not_found() { $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->create(); $this->actingAs($user); diff --git a/api/tests/Feature/API/WarehouseAPI/WarehouseAPICreateTest.php b/api/tests/Feature/API/WarehouseAPI/WarehouseAPICreateTest.php new file mode 100644 index 000000000..61c225ca5 --- /dev/null +++ b/api/tests/Feature/API/WarehouseAPI/WarehouseAPICreateTest.php @@ -0,0 +1,300 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch())) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $branch = $company->branches()->inRandomOrder()->first(); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.save'), $payload); + + $api->assertUnauthorized(); + } + + public function test_warehouse_api_call_store_without_access_right_expect_forbidden_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $branch = $company->branches()->inRandomOrder()->first(); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.save'), $payload); + + $api->assertForbidden(); + } + + public function test_warehouse_api_call_store_with_script_tags_in_payload_expect_stripped() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_warehouse_api_call_store_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_warehouse_api_call_store_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $branch = $company->branches()->inRandomOrder()->first(); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('warehouses', [ + 'company_id' => $company->id, + 'branch_id' => $branch->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'address' => $payload['address'], + 'city' => $payload['city'], + 'contact' => $payload['contact'], + 'remarks' => $payload['remarks'], + 'status' => $payload['status'], + ]); + } + + public function test_warehouse_api_call_store_with_nonexistance_branch_id_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + + $branchId = Branch::max('id') + 1; + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branchId), + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.save'), $payload); + + $api->assertUnprocessable(); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_warehouse_api_call_store_with_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create([ + 'code' => 'test1', + ]); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.save'), $payload); + + $api->assertUnprocessable(); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_warehouse_api_call_store_with_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch())) + ->has(Company::factory()->setStatusActive() + ->has(Branch::factory()->setStatusActive())) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->take(2)->get(); + + $company_1 = $companies[0]; + $branch_1 = $company_1->branches()->inRandomOrder()->first(); + + $company_2 = $companies[1]; + $branch_2 = $company_2->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company_1)->for($branch_1)->create([ + 'code' => 'test1', + ]); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'branch_id' => Hashids::encode($branch_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.save'), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('warehouses', [ + 'company_id' => $company_2->id, + 'branch_id' => $branch_2->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'address' => $payload['address'], + 'city' => $payload['city'], + 'contact' => $payload['contact'], + 'remarks' => $payload['remarks'], + 'status' => $payload['status'], + ]); + } + + public function test_warehouse_api_call_store_with_existing_name_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has( + Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create([ + 'name' => 'Gudang Sama', + ]); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'name' => 'Gudang Sama', + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.save'), $payload); + + $api->assertUnprocessable(); + $api->assertJsonValidationErrors(['name']); + } + + public function test_warehouse_api_call_store_with_empty_string_parameters_expect_validation_error() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch())) + ->create(); + + $this->actingAs($user); + + $payload = []; + + $api = $this->json('POST', route('api.post.warehouse.save'), $payload); + + $api->assertJsonValidationErrors(['company_id', 'code', 'name']); + } + + public function test_warehouse_api_call_store_with_sql_injection_payload_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'code' => "'; DROP TABLE warehouses; --", + 'name' => "'; DROP TABLE warehouses; --", + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.save'), $payload); + + // Should succeed because it's just text, but shouldn't execute SQL. + // If it was vulnerable, the table might be dropped or error out. + // We expect it to be saved as is or handled gracefully. + // Here we just check it is successful (saved as text) or validation error if there are rules against special chars. + // Assuming no strict regex on code/name, it should be saved. + $api->assertSuccessful(); + + $this->assertDatabaseHas('warehouses', [ + 'company_id' => $company->id, + 'branch_id' => $branch->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } +} diff --git a/api/tests/Feature/API/WarehouseAPI/WarehouseAPIDeleteTest.php b/api/tests/Feature/API/WarehouseAPI/WarehouseAPIDeleteTest.php new file mode 100644 index 000000000..9814eb29c --- /dev/null +++ b/api/tests/Feature/API/WarehouseAPI/WarehouseAPIDeleteTest.php @@ -0,0 +1,130 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->json('POST', route('api.post.warehouse.delete', $warehouse->ulid)); + + $api->assertUnauthorized(); + } + + public function test_warehouse_api_call_delete_without_access_right_expect_unauthorized_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->json('POST', route('api.post.warehouse.delete', $warehouse->ulid)); + + $api->assertForbidden(); + } + + public function test_warehouse_api_call_delete_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->json('POST', route('api.post.warehouse.delete', $warehouse->ulid)); + + $api->assertSuccessful(); + $this->assertSoftDeleted('warehouses', [ + 'id' => $warehouse->id, + ]); + } + + public function test_warehouse_api_call_delete_of_nonexistance_ulid_expect_not_found() + { + $user = User::factory()->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->json('POST', route('api.post.warehouse.delete', $ulid)); + + $api->assertStatus(404); + } + + public function test_warehouse_api_call_delete_without_parameters_expect_failed() + { + $this->expectException(Exception::class); + $user = User::factory()->create(); + + $this->actingAs($user); + $api = $this->json('POST', route('api.post.warehouse.delete', null)); + } + + public function test_warehouse_api_call_delete_with_sql_injection_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + '1 OR SLEEP(5)', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + "admin'--", + "' OR 1=1 --", + ]; + + $testIdx = random_int(0, count($injections) - 1); + $injection = $injections[$testIdx]; + + $api = $this->json('POST', route('api.post.warehouse.delete', $injection)); + + $api->assertStatus(404); + } +} diff --git a/api/tests/Feature/API/WarehouseAPI/WarehouseAPIEditTest.php b/api/tests/Feature/API/WarehouseAPI/WarehouseAPIEditTest.php new file mode 100644 index 000000000..09c055df0 --- /dev/null +++ b/api/tests/Feature/API/WarehouseAPI/WarehouseAPIEditTest.php @@ -0,0 +1,270 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.edit', $warehouse->ulid), $payload); + + $api->assertUnauthorized(); + } + + public function test_warehouse_api_call_update_without_access_right_expect_forbidden_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.edit', $warehouse->ulid), $payload); + + $api->assertForbidden(); + } + + public function test_warehouse_api_call_update_with_script_tags_in_payload_expect_stripped() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_warehouse_api_call_update_with_script_tags_in_payload_expect_encoded() + { + $this->markTestSkipped('Test under construction'); + } + + public function test_warehouse_api_call_update_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.edit', $warehouse->ulid), $payload); + + $api->assertSuccessful(); + $this->assertDatabaseHas('warehouses', [ + 'id' => $warehouse->id, + 'company_id' => $company->id, + 'branch_id' => $branch->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'address' => $payload['address'], + 'city' => $payload['city'], + 'contact' => $payload['contact'], + 'remarks' => $payload['remarks'], + 'status' => $payload['status'], + ]); + } + + public function test_warehouse_api_call_update_with_nonexistance_branch_id_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $newBranchId = Branch::max('id') + 1; + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($newBranchId), + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.edit', $warehouse->ulid), $payload); + + $api->assertUnprocessable(); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_warehouse_api_call_update_and_use_existing_code_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + $branch = $company->branches()->inRandomOrder()->first(); + Warehouse::factory()->for($company)->for($branch)->count(2)->create(); + + $warehouses = $company->warehouses()->inRandomOrder()->take(2)->get(); + $warehouse_1 = $warehouses[0]; + $warehouse_2 = $warehouses[1]; + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'code' => $warehouse_1->code, + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.edit', $warehouse_2->ulid), $payload); + + $api->assertUnprocessable(); + $api->assertJsonStructure([ + 'errors', + ]); + } + + public function test_warehouse_api_call_update_and_use_existing_code_in_different_company_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch())) + ->has(Company::factory()->setStatusActive() + ->has(Branch::factory()->setStatusActive())) + ->create(); + + $this->actingAs($user); + + $companies = $user->companies()->inRandomOrder()->get(); + + $company_1 = $companies[0]; + $branch_1 = $company_1->branches()->first(); + Warehouse::factory()->for($company_1)->for($branch_1)->create([ + 'code' => 'test1', + ]); + + $company_2 = $companies[1]; + $branch_2 = $company_2->branches()->first(); + $warehouse_2 = Warehouse::factory()->for($company_2)->for($branch_2)->create([ + 'code' => 'test2', + ]); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company_2->id), + 'branch_id' => Hashids::encode($branch_2->id), + 'code' => 'test1', + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.edit', $warehouse_2->ulid), $payload); + + $api->assertSuccessful(); + } + + public function test_warehouse_api_call_update_and_use_existing_name_in_same_company_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies->first(); + $branch = $company->branches()->inRandomOrder()->first(); + Warehouse::factory()->for($company)->for($branch)->count(2)->create(); + + $warehouses = $company->warehouses()->inRandomOrder()->take(2)->get(); + $warehouse_1 = $warehouses[0]; + $warehouse_2 = $warehouses[1]; + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'name' => $warehouse_1->name, + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.edit', $warehouse_2->ulid), $payload); + + $api->assertUnprocessable(); + $api->assertJsonValidationErrors(['name']); + } + + public function test_warehouse_api_call_update_with_sql_injection_payload_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch())) + ->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $payload = Warehouse::factory()->make([ + 'company_id' => Hashids::encode($company->id), + 'branch_id' => Hashids::encode($branch->id), + 'code' => "'; DROP TABLE warehouses; --", + 'name' => "'; DROP TABLE warehouses; --", + ])->toArray(); + + $api = $this->json('POST', route('api.post.warehouse.edit', $warehouse->ulid), $payload); + + $api->assertSuccessful(); + + $this->assertDatabaseHas('warehouses', [ + 'id' => $warehouse->id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } +} diff --git a/api/tests/Feature/API/WarehouseAPI/WarehouseAPIReadTest.php b/api/tests/Feature/API/WarehouseAPI/WarehouseAPIReadTest.php new file mode 100644 index 000000000..f95829fee --- /dev/null +++ b/api/tests/Feature/API/WarehouseAPI/WarehouseAPIReadTest.php @@ -0,0 +1,542 @@ +hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertUnauthorized(); + } + + public function test_warehouse_api_call_read_any_without_access_right_expect_forbidden_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertForbidden(); + } + + public function test_warehouse_api_call_read_without_authorization_expect_unauthorized_message() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $ulid = $warehouse->ulid; + + $api = $this->getJson(route('api.get.warehouse.read', $ulid)); + + $api->assertUnauthorized(); + } + + public function test_warehouse_api_call_read_without_access_right_expect_forbidden_message() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $ulid = $warehouse->ulid; + + $api = $this->getJson(route('api.get.warehouse.read', $ulid)); + + $api->assertForbidden(); + } + + public function test_warehouse_api_call_read_with_sql_injection_expect_injection_ignored() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create(); + + $injections = [ + "' OR '1'='1", + '1 UNION SELECT username, password FROM users', + '1; DROP TABLE users', + "' OR '1'='1' --", + '1 OR SLEEP(5)', + "1; INSERT INTO logs (message) VALUES ('Injected SQL query')", + "1; UPDATE users SET password = 'hacked' WHERE id = 1; --", + "admin'--", + "' OR 1=1 --", + ]; + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'branch_id' => Hashids::encode($branch->id), + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'total' => 0, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $testIdx = random_int(0, count($injections) - 1); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => $injections[$testIdx], + 'branch_id' => Hashids::encode($branch->id), + 'status' => null, + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'data' => [], + ]); + } + + public function test_warehouse_api_call_read_any_with_or_without_pagination_expect_paginator_or_collection() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'branch_id' => null, + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 10, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'branch_id' => null, + 'status' => null, + 'refresh' => true, + 'get' => [ + 'limit' => 10, + ], + ])); + + $api->assertSuccessful(); + } + + public function test_warehouse_api_call_read_any_with_pagination_expect_several_per_page() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'branch_id' => null, + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + + $api->assertJsonFragment([ + 'per_page' => 25, + ]); + + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_warehouse_api_call_read_any_with_search_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setIsDefault() + ->has(Branch::factory()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch) + ->count(2)->create(); + + Warehouse::factory()->for($company)->for($branch) + ->insertStringInName('testing') + ->count(3)->create(); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => 'testing', + 'branch_id' => null, + 'status' => null, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 3, + ]); + } + + public function test_warehouse_api_call_read_any_without_search_querystring_expect_failed() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + ])); + + $api->assertUnprocessable(); + } + + public function test_warehouse_api_call_read_any_with_special_char_in_search_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => " !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + 'branch_id' => null, + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + } + + public function test_warehouse_api_call_read_any_with_negative_value_in_parameters_expect_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch)->create(); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'branch_id' => null, + 'status' => null, + 'refresh' => false, + 'paginate' => [ + 'page' => -1, + 'per_page' => -25, + ], + ])); + + $api->assertUnprocessable(); + } + + public function test_warehouse_api_call_read_expect_successful() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $ulid = $warehouse->ulid; + + $api = $this->getJson(route('api.get.warehouse.read', $ulid)); + + $api->assertSuccessful(); + } + + public function test_warehouse_api_call_read_without_ulid_expect_exception() + { + $this->expectException(Exception::class); + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $this->getJson(route('api.get.warehouse.read', null)); + } + + public function test_warehouse_api_call_read_with_nonexistance_ulid_expect_not_found() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $ulid = Str::ulid()->generate(); + + $api = $this->getJson(route('api.get.warehouse.read', $ulid)); + + $api->assertStatus(404); + } + + public function test_warehouse_api_call_read_any_with_status_filter_expect_filtered_results() + { + $user = User::factory() + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + )->create(); + + $this->actingAs($user); + + $company = $user->companies()->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + Warehouse::factory()->for($company)->for($branch) + ->count(2)->create(); + + Warehouse::factory()->for($company)->for($branch) + ->setStatusInactive() + ->count(3)->create(); + + $api = $this->getJson(route('api.get.warehouse.read_any', [ + 'with_trashed' => false, + 'company_id' => Hashids::encode($company->id), + 'search' => '', + 'branch_id' => null, + 'status' => RecordStatusEnum::ACTIVE->value, + 'refresh' => true, + 'paginate' => [ + 'page' => 1, + 'per_page' => 25, + ], + ])); + + $api->assertSuccessful(); + $api->assertJsonStructure([ + 'data', + 'links' => [ + 'first', 'last', 'prev', 'next', + ], + 'meta' => [ + 'current_page', 'from', 'last_page', 'links', 'path', 'per_page', 'to', 'total', + ], + ]); + + $api->assertJsonFragment([ + 'total' => 2, + ]); + } +} diff --git a/api/tests/Unit/Actions/BranchActions/BranchActionsCreateTest.php b/api/tests/Unit/Actions/BranchActions/BranchActionsCreateTest.php index feef785c0..41a5611b4 100644 --- a/api/tests/Unit/Actions/BranchActions/BranchActionsCreateTest.php +++ b/api/tests/Unit/Actions/BranchActions/BranchActionsCreateTest.php @@ -3,10 +3,11 @@ namespace Tests\Unit\Actions\BranchActions; use App\Actions\Branch\BranchActions; +use App\DTOs\BranchCreateDTO; use App\Models\Branch; use App\Models\Company; use App\Models\User; -use Exception; +use ArgumentCountError; use Tests\ActionsTestCase; class BranchActionsCreateTest extends ActionsTestCase @@ -28,23 +29,72 @@ public function test_branch_actions_call_create_expect_db_has_record() $company = $user->companies()->inRandomOrder()->first(); - $branchArr = Branch::factory()->for($company) + $payload = Branch::factory()->for($company) ->setStatusActive()->setIsMainBranch() ->make()->toArray(); - $result = $this->branchActions->create($branchArr); + $dto = new BranchCreateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + city: $payload['city'], + contact: $payload['contact'], + isMain: $payload['is_main'], + remarks: $payload['remarks'], + status: $payload['status'] + ); + $result = $this->branchActions->create($dto); $this->assertDatabaseHas('branches', [ 'id' => $result->id, - 'company_id' => $branchArr['company_id'], - 'code' => $branchArr['code'], - 'name' => $branchArr['name'], + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_branch_actions_call_create_with_is_main_expect_other_branches_reset() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->state(['is_main' => true])) + ) + ->create(); + + $company = $user->companies()->first(); + $previousMainBranch = $company->branches()->first(); + $payload = Branch::factory()->for($company) + ->setStatusActive() + ->setIsMainBranch() + ->make() + ->toArray(); + + $dto = new BranchCreateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + city: $payload['city'], + contact: $payload['contact'], + isMain: true, + remarks: $payload['remarks'], + status: $payload['status'], + ); + + $result = $this->branchActions->create($dto); + $this->assertTrue((bool) $result->is_main); + $this->assertDatabaseHas('branches', [ + 'id' => $previousMainBranch->id, + 'is_main' => false, ]); } public function test_branch_actions_call_create_with_empty_array_parameters_expect_exception() { - $this->expectException(Exception::class); - $this->branchActions->create([]); + $this->expectException(ArgumentCountError::class); + $dto = new BranchCreateDTO(...[]); + + $this->branchActions->create($dto); } } diff --git a/api/tests/Unit/Actions/BranchActions/BranchActionsEditTest.php b/api/tests/Unit/Actions/BranchActions/BranchActionsEditTest.php index 26c5bfb6e..43ebe1343 100644 --- a/api/tests/Unit/Actions/BranchActions/BranchActionsEditTest.php +++ b/api/tests/Unit/Actions/BranchActions/BranchActionsEditTest.php @@ -3,10 +3,11 @@ namespace Tests\Unit\Actions\BranchActions; use App\Actions\Branch\BranchActions; +use App\DTOs\BranchUpdateDTO; use App\Models\Branch; use App\Models\Company; use App\Models\User; -use Exception; +use ArgumentCountError; use Tests\ActionsTestCase; class BranchActionsEditTest extends ActionsTestCase @@ -30,22 +31,68 @@ public function test_branch_actions_call_update_expect_db_updated() $company = $user->companies()->inRandomOrder()->first(); $branch = $company->branches()->inRandomOrder()->first(); - $branchArr = Branch::factory()->make()->toArray(); + $payload = Branch::factory()->make()->toArray(); - $result = $this->branchActions->update($branch, $branchArr); + $dto = new BranchUpdateDTO( + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + city: $payload['city'], + contact: $payload['contact'], + isMain: $payload['is_main'], + remarks: $payload['remarks'], + status: $payload['status'] + ); + $result = $this->branchActions->update($branch, $dto); $this->assertInstanceOf(Branch::class, $result); $this->assertDatabaseHas('branches', [ 'id' => $branch->id, 'company_id' => $branch->company_id, - 'code' => $branchArr['code'], - 'name' => $branchArr['name'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_branch_actions_call_update_with_is_main_expect_other_branches_reset() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->count(2)->state([ + 'is_main' => false, + ])) + ) + ->create(); + + $company = $user->companies()->first(); + $branches = $company->branches()->orderBy('id')->take(2)->get(); + $previousMainBranch = $branches[0]; + $previousMainBranch->update(['is_main' => true]); + $targetBranch = $branches[1]; + $payload = Branch::factory()->setStatusActive()->setIsMainBranch()->make()->toArray(); + + $dto = new BranchUpdateDTO( + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + city: $payload['city'], + contact: $payload['contact'], + isMain: true, + remarks: $payload['remarks'], + status: $payload['status'], + ); + + $result = $this->branchActions->update($targetBranch, $dto); + $this->assertTrue((bool) $result->is_main); + $this->assertDatabaseHas('branches', [ + 'id' => $previousMainBranch->id, + 'is_main' => false, ]); } public function test_branch_actions_call_update_with_empty_array_parameters_expect_exception() { - $this->expectException(Exception::class); + $this->expectException(ArgumentCountError::class); $user = User::factory() ->has(Company::factory()->setStatusActive()->setIsDefault() @@ -55,8 +102,8 @@ public function test_branch_actions_call_update_with_empty_array_parameters_expe $branch = $user->companies()->inRandomOrder()->first() ->branches()->inRandomOrder()->first(); - $branchArr = []; + $dto = new BranchUpdateDTO(...[]); - $this->branchActions->update($branch, $branchArr); + $this->branchActions->update($branch, $dto); } } diff --git a/api/tests/Unit/Actions/BranchActions/BranchActionsReadTest.php b/api/tests/Unit/Actions/BranchActions/BranchActionsReadTest.php index b0dd5039d..1acfa5149 100644 --- a/api/tests/Unit/Actions/BranchActions/BranchActionsReadTest.php +++ b/api/tests/Unit/Actions/BranchActions/BranchActionsReadTest.php @@ -3,7 +3,9 @@ namespace Tests\Unit\Actions\BranchActions; use App\Actions\Branch\BranchActions; -use App\Enums\UserRoles; +use App\DTOs\ExecuteDTO; +use App\DTOs\ExecutePaginationDTO; +use App\Enums\UserRolesEnum; use App\Models\Branch; use App\Models\Company; use App\Models\Role; @@ -34,11 +36,20 @@ public function test_branch_actions_call_read_any_with_paginate_true_expect_pagi $company = $user->companies()->inRandomOrder()->first(); $result = $this->branchActions->readAny( + withTrashed: false, companyId: $company->id, search: '', - paginate: true, - page: 1, - perPage: 10 + isMain: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: 10 + ), + get: null + ) ); $this->assertInstanceOf(Paginator::class, $result); @@ -54,9 +65,17 @@ public function test_branch_actions_call_read_any_with_paginate_false_expect_col $company = $user->companies()->inRandomOrder()->first(); $result = $this->branchActions->readAny( + withTrashed: false, companyId: $company->id, search: '', - paginate: false + isMain: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: null + ) ); $this->assertInstanceOf(Collection::class, $result); @@ -66,9 +85,17 @@ public function test_branch_actions_call_read_any_with_nonexistance_companyId_ex { $maxId = Company::max('id') + 1; $result = $this->branchActions->readAny( + withTrashed: false, companyId: $maxId, search: '', - paginate: false + isMain: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: null + ) ); $this->assertInstanceOf(Collection::class, $result); @@ -99,11 +126,20 @@ public function test_branch_actions_call_read_any_with_search_parameter_expect_f $company = $user->companies()->inRandomOrder()->first(); $result = $this->branchActions->readAny( + withTrashed: false, companyId: $company->id, search: 'testing', - paginate: true, - page: 1, - perPage: 10 + isMain: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: 10 + ), + get: null + ) ); $this->assertInstanceOf(Paginator::class, $result); @@ -116,7 +152,7 @@ public function test_branch_actions_call_read_any_with_page_parameter_negative_e $idxMainBranch = random_int(0, $branchCount - 1); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive() ->has(Branch::factory()->setStatusActive()->count($branchCount) ->state(new Sequence( @@ -130,42 +166,20 @@ public function test_branch_actions_call_read_any_with_page_parameter_negative_e $company = $user->companies()->inRandomOrder()->first(); $result = $this->branchActions->readAny( + withTrashed: false, companyId: $company->id, search: '', - paginate: true, - page: -1, - perPage: 10 - ); - - $this->assertInstanceOf(Paginator::class, $result); - $this->assertTrue($result->total() == 3); - } - - public function test_branch_actions_call_read_any_with_perpage_parameter_negative_expect_results() - { - $branchCount = 3; - $idxMainBranch = random_int(0, $branchCount - 1); - - $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) - ->has(Company::factory()->setStatusActive() - ->has(Branch::factory()->setStatusActive()->count($branchCount) - ->state(new Sequence( - fn (Sequence $sequence) => [ - 'is_main' => $sequence->index == $idxMainBranch ? true : false, - ] - )) - )) - ->create(); - - $company = $user->companies()->inRandomOrder()->first(); - - $result = $this->branchActions->readAny( - companyId: $company->id, - search: '', - paginate: true, - page: 1, - perPage: -10 + isMain: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: -1, + perPage: 10 + ), + get: null + ) ); $this->assertInstanceOf(Paginator::class, $result); diff --git a/api/tests/Unit/Actions/BrandActions/BrandActionsCreateTest.php b/api/tests/Unit/Actions/BrandActions/BrandActionsCreateTest.php new file mode 100644 index 000000000..fa6a7eac9 --- /dev/null +++ b/api/tests/Unit/Actions/BrandActions/BrandActionsCreateTest.php @@ -0,0 +1,54 @@ +brandActions = new BrandActions(); + } + + public function test_brand_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Brand::factory()->for($company)->make()->toArray(); + + $dto = new \App\DTOs\BrandCreateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'] + ); + + $result = $this->brandActions->create($dto); + $this->assertDatabaseHas('brands', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_brand_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\BrandCreateDTO(); + + $this->brandActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/BrandActions/BrandActionsDeleteTest.php b/api/tests/Unit/Actions/BrandActions/BrandActionsDeleteTest.php new file mode 100644 index 000000000..289c6d194 --- /dev/null +++ b/api/tests/Unit/Actions/BrandActions/BrandActionsDeleteTest.php @@ -0,0 +1,39 @@ +brandActions = new BrandActions(); + } + + public function test_brand_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Brand::factory()) + )->create(); + + $brand = $user->companies()->inRandomOrder()->first() + ->brands()->inRandomOrder()->first(); + $result = $this->brandActions->delete($brand); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('brands', [ + 'id' => $brand->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/BrandActions/BrandActionsEditTest.php b/api/tests/Unit/Actions/BrandActions/BrandActionsEditTest.php new file mode 100644 index 000000000..d841ee5a2 --- /dev/null +++ b/api/tests/Unit/Actions/BrandActions/BrandActionsEditTest.php @@ -0,0 +1,68 @@ +brandActions = new BrandActions(); + } + + public function test_brand_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Brand::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $brand = $company->brands()->inRandomOrder()->first(); + + $payload = Brand::factory()->make()->toArray(); + + $dto = new \App\DTOs\BrandUpdateDTO( + code: $payload['code'], + name: $payload['name'] + ); + + $result = $this->brandActions->update($brand, $dto); + $this->assertInstanceOf(Brand::class, $result); + $this->assertDatabaseHas('brands', [ + 'id' => $brand->id, + 'company_id' => $brand->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_brand_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Brand::factory()) + )->create(); + + $brand = $user->companies()->inRandomOrder()->first() + ->brands()->inRandomOrder()->first(); + + $payload = []; + + $dto = new \App\DTOs\BrandUpdateDTO(); + + $this->brandActions->update($brand, $dto); + } +} diff --git a/api/tests/Unit/Actions/BrandActions/BrandActionsReadTest.php b/api/tests/Unit/Actions/BrandActions/BrandActionsReadTest.php new file mode 100644 index 000000000..42c9f3b57 --- /dev/null +++ b/api/tests/Unit/Actions/BrandActions/BrandActionsReadTest.php @@ -0,0 +1,158 @@ +brandActions = new BrandActions(); + } + + public function test_brand_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Brand::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->brandActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_brand_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Brand::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->brandActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_brand_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->brandActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_brand_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $brandCount = 4; + $idxTest = random_int(0, $brandCount - 1); + $defaultName = Brand::factory()->make()->name; + $testname = Brand::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Brand::factory()->count($brandCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->brandActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_brand_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_brand_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_brand_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Brand::factory()) + )->create(); + + $brand = $user->companies()->inRandomOrder()->first() + ->brands()->inRandomOrder()->first(); + + $result = $this->brandActions->read($brand); + + $this->assertInstanceOf(Brand::class, $result); + } +} diff --git a/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsCreateTest.php b/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsCreateTest.php new file mode 100644 index 000000000..d807d3485 --- /dev/null +++ b/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsCreateTest.php @@ -0,0 +1,62 @@ +cashAccountActions = new CashAccountActions(); + } + + public function test_cash_account_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()->has(Branch::factory())) + ->create(); + + $company = $user->companies()->whereHas('branches')->inRandomOrder()->first(); + $branch = $company->branches()->inRandomOrder()->first(); + + $payload = CashAccount::factory()->for($company) + ->make()->toArray(); + $payload['branch_id'] = $branch->id; + + $dto = new \App\DTOs\CashAccountCreateDTO( + companyId: $payload['company_id'], + branchId: $payload['branch_id'], + code: $payload['code'], + name: $payload['name'], + isBank: $payload['is_bank'], + isActive: $payload['is_active'], + remarks: $payload['remarks'] + ); + + $result = $this->cashAccountActions->create($dto); + $this->assertDatabaseHas('cash_accounts', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_cash_account_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\CashAccountCreateDTO(); + + $this->cashAccountActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsDeleteTest.php b/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsDeleteTest.php new file mode 100644 index 000000000..096e82470 --- /dev/null +++ b/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsDeleteTest.php @@ -0,0 +1,47 @@ +cashAccountActions = new CashAccountActions(); + } + + public function test_cash_account_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()) + ->has( + CashAccount::factory()->state(function (array $attributes, Company $company) { + return [ + 'branch_id' => $company->branches()->inRandomOrder()->first()->id, + ]; + }) + ) + )->create(); + + $cashAccount = $user->companies()->inRandomOrder()->first() + ->cashAccounts()->inRandomOrder()->first(); + $result = $this->cashAccountActions->delete($cashAccount); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('cash_accounts', [ + 'id' => $cashAccount->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsEditTest.php b/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsEditTest.php new file mode 100644 index 000000000..68aa6134a --- /dev/null +++ b/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsEditTest.php @@ -0,0 +1,86 @@ +cashAccountActions = new CashAccountActions(); + } + + public function test_cash_account_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()) + ->has( + CashAccount::factory()->state(function (array $attributes, Company $company) { + return [ + 'branch_id' => $company->branches()->inRandomOrder()->first()->id, + ]; + }) + ) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $cashAccount = $company->cashAccounts()->inRandomOrder()->first(); + + $payload = CashAccount::factory()->make()->toArray(); + $payload['company_id'] = $company->id; + + $dto = new CashAccountUpdateDTO( + code: $payload['code'], + name: $payload['name'], + isBank: $payload['is_bank'], + isActive: $payload['is_active'], + remarks: $payload['remarks'] + ); + + $result = $this->cashAccountActions->update($cashAccount, $dto); + $this->assertInstanceOf(CashAccount::class, $result); + $this->assertDatabaseHas('cash_accounts', [ + 'id' => $cashAccount->id, + 'company_id' => $cashAccount->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_cash_account_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(\ArgumentCountError::class); + $dtoClass = \App\DTOs\CashAccountUpdateDTO::class; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()) + ->has( + CashAccount::factory()->state(function (array $attributes, Company $company) { + return [ + 'branch_id' => $company->branches()->inRandomOrder()->first()->id, + ]; + }) + ) + )->create(); + + $cashAccount = $user->companies()->inRandomOrder()->first() + ->cashAccounts()->inRandomOrder()->first(); + + $dto = new $dtoClass(...[]); + + $this->cashAccountActions->update($cashAccount, $dto); + } +} diff --git a/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsReadTest.php b/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsReadTest.php new file mode 100644 index 000000000..893aa21e1 --- /dev/null +++ b/api/tests/Unit/Actions/CashAccountActions/CashAccountActionsReadTest.php @@ -0,0 +1,211 @@ +cashAccountActions = new CashAccountActions(); + } + + public function test_cash_account_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()) + ->has( + CashAccount::factory()->state(function (array $attributes, Company $company) { + return [ + 'branch_id' => $company->branches()->inRandomOrder()->first()->id, + ]; + }) + ) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->cashAccountActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_cash_account_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()) + ->has( + CashAccount::factory()->state(function (array $attributes, Company $company) { + return [ + 'branch_id' => $company->branches()->inRandomOrder()->first()->id, + ]; + }) + ) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->cashAccountActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_cash_account_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->cashAccountActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_cash_account_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $cashAccountCount = 4; + $idxTest = random_int(0, $cashAccountCount - 1); + $defaultName = CashAccount::factory()->make()->name; + $testname = CashAccount::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()) + ->has( + CashAccount::factory()->count($cashAccountCount) + ->state(function (array $attributes, Company $company) { + return [ + 'branch_id' => $company->branches()->inRandomOrder()->first()->id, + ]; + }) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->cashAccountActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_cash_account_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $cashAccountCount = 3; + + $user = User::factory() + ->has(Company::factory()->setStatusActive() + ->has(Branch::factory()) + ->has(CashAccount::factory()->count($cashAccountCount)->state(function (array $attributes, Company $company) { + return [ + 'branch_id' => $company->branches()->inRandomOrder()->first()->id, + ]; + })) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->cashAccountActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: -1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == $cashAccountCount); + } + + public function test_cash_account_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()) + ->has( + CashAccount::factory()->state(function (array $attributes, Company $company) { + return [ + 'branch_id' => $company->branches()->inRandomOrder()->first()->id, + ]; + }) + ) + )->create(); + + $cashAccount = $user->companies()->inRandomOrder()->first() + ->cashAccounts()->inRandomOrder()->first(); + + $result = $this->cashAccountActions->read($cashAccount); + + $this->assertInstanceOf(CashAccount::class, $result); + } +} diff --git a/api/tests/Unit/Actions/CompanyActions/CompanyActionsCreateTest.php b/api/tests/Unit/Actions/CompanyActions/CompanyActionsCreateTest.php index 4b530b581..93af8fcf5 100644 --- a/api/tests/Unit/Actions/CompanyActions/CompanyActionsCreateTest.php +++ b/api/tests/Unit/Actions/CompanyActions/CompanyActionsCreateTest.php @@ -3,9 +3,9 @@ namespace Tests\Unit\Actions\CompanyActions; use App\Actions\Company\CompanyActions; +use App\DTOs\CompanyCreateDTO; use App\Models\Company; use App\Models\User; -use Exception; use Tests\ActionsTestCase; class CompanyActionsCreateTest extends ActionsTestCase @@ -16,30 +16,72 @@ protected function setUp(): void { parent::setUp(); - $this->companyActions = new CompanyActions(); + $this->companyActions = app(CompanyActions::class); } public function test_company_action_call_create_expect_db_has_record() { $user = User::factory()->create(); - $companyArr = Company::factory() + $payload = Company::factory() ->setStatusActive()->setIsDefault()->make([ 'user_id' => $user->id, ])->toArray(); - $result = $this->companyActions->create($companyArr); + $dto = new CompanyCreateDTO( + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + default: $payload['default'], + status: $payload['status'], + ); + + $result = $this->companyActions->create($user, $dto); $this->assertDatabaseHas('companies', [ 'id' => $result->id, - 'code' => $companyArr['code'], - 'name' => $companyArr['name'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_company_action_call_create_with_default_true_expect_previous_default_reset() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $previousDefaultCompany = $user->companies()->first(); + $payload = Company::factory() + ->setStatusActive() + ->setIsDefault() + ->make() + ->toArray(); + + $dto = new CompanyCreateDTO( + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + default: true, + status: $payload['status'], + ); + + $result = $this->companyActions->create($user, $dto); + $this->assertTrue((bool) $result->default); + $this->assertDatabaseHas('companies', [ + 'id' => $previousDefaultCompany->id, + 'default' => false, ]); } public function test_company_service_call_create_with_empty_array_parameters_expect_exception() { - $this->expectException(Exception::class); - $this->companyActions->create([]); + $user = User::factory()->create(); + $dtoClass = CompanyCreateDTO::class; + + $this->expectException(\ArgumentCountError::class); + $dto = new $dtoClass(...[]); + + $this->companyActions->create($user, $dto); } } diff --git a/api/tests/Unit/Actions/CompanyActions/CompanyActionsDeleteTest.php b/api/tests/Unit/Actions/CompanyActions/CompanyActionsDeleteTest.php index 54d52823c..6dbb8bcda 100644 --- a/api/tests/Unit/Actions/CompanyActions/CompanyActionsDeleteTest.php +++ b/api/tests/Unit/Actions/CompanyActions/CompanyActionsDeleteTest.php @@ -15,7 +15,7 @@ protected function setUp(): void { parent::setUp(); - $this->companyActions = new CompanyActions(); + $this->companyActions = app(CompanyActions::class); } public function test_company_actions_call_delete_expect_bool() diff --git a/api/tests/Unit/Actions/CompanyActions/CompanyActionsEditTest.php b/api/tests/Unit/Actions/CompanyActions/CompanyActionsEditTest.php index 30d1ad5fb..3f4ed32ae 100644 --- a/api/tests/Unit/Actions/CompanyActions/CompanyActionsEditTest.php +++ b/api/tests/Unit/Actions/CompanyActions/CompanyActionsEditTest.php @@ -3,9 +3,9 @@ namespace Tests\Unit\Actions\CompanyActions; use App\Actions\Company\CompanyActions; +use App\DTOs\CompanyUpdateDTO; use App\Models\Company; use App\Models\User; -use Exception; use Tests\ActionsTestCase; class CompanyActionsEditTest extends ActionsTestCase @@ -16,7 +16,7 @@ protected function setUp(): void { parent::setUp(); - $this->companyActions = new CompanyActions(); + $this->companyActions = app(CompanyActions::class); } public function test_company_service_call_update_expect_db_updated() @@ -26,29 +26,66 @@ public function test_company_service_call_update_expect_db_updated() ->create(); $company = $user->companies->first(); - $companyArr = Company::factory()->make()->toArray(); + $payload = Company::factory()->make()->toArray(); - $result = $this->companyActions->update($company, $companyArr); + $dto = new CompanyUpdateDTO( + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + default: $payload['default'], + status: $payload['status'], + ); + $result = $this->companyActions->update($user, $company, $dto); $this->assertInstanceOf(Company::class, $result); $this->assertDatabaseHas('companies', [ 'id' => $company->id, - 'code' => $companyArr['code'], - 'name' => $companyArr['name'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_company_service_call_update_with_default_true_expect_other_default_reset() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->has(Company::factory()->setStatusActive()->state(['default' => false])) + ->create(); + + $companies = $user->companies()->orderBy('id')->take(2)->get(); + $previousDefaultCompany = $companies[0]; + $targetCompany = $companies[1]; + $payload = Company::factory()->setStatusActive()->setIsDefault()->make()->toArray(); + + $dto = new CompanyUpdateDTO( + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + default: true, + status: $payload['status'], + ); + + $result = $this->companyActions->update($user, $targetCompany, $dto); + $this->assertTrue((bool) $result->default); + $this->assertDatabaseHas('companies', [ + 'id' => $previousDefaultCompany->id, + 'default' => false, ]); } public function test_company_service_call_update_with_empty_array_parameters_expect_exception() { - $this->expectException(Exception::class); + $this->expectException(\ArgumentCountError::class); + $dtoClass = CompanyUpdateDTO::class; $user = User::factory() ->has(Company::factory()->setStatusActive()->setIsDefault()) ->create(); $company = $user->companies->first(); - $companyArr = []; - $this->companyActions->update($company, $companyArr); + $dto = new $dtoClass(...[]); + + $this->companyActions->update($user, $company, $dto); } } diff --git a/api/tests/Unit/Actions/CompanyActions/CompanyActionsReadTest.php b/api/tests/Unit/Actions/CompanyActions/CompanyActionsReadTest.php index a5c2402b9..b52e9cf5e 100644 --- a/api/tests/Unit/Actions/CompanyActions/CompanyActionsReadTest.php +++ b/api/tests/Unit/Actions/CompanyActions/CompanyActionsReadTest.php @@ -3,7 +3,9 @@ namespace Tests\Unit\Actions\CompanyActions; use App\Actions\Company\CompanyActions; -use App\Enums\UserRoles; +use App\DTOs\ExecuteDTO; +use App\DTOs\ExecutePaginationDTO; +use App\Enums\UserRolesEnum; use App\Models\Company; use App\Models\Role; use App\Models\User; @@ -20,7 +22,7 @@ protected function setUp(): void { parent::setUp(); - $this->companyActions = new CompanyActions(); + $this->companyActions = app(CompanyActions::class); } public function test_company_actions_call_read_any_with_paginate_true_expect_paginator_object() @@ -30,11 +32,20 @@ public function test_company_actions_call_read_any_with_paginate_true_expect_pag ->create(); $result = $this->companyActions->readAny( - userId: $user->id, - search: '', - paginate: true, - page: 1, - perPage: 10 + user: $user, + withTrashed: false, + search: null, + default: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: 10, + ), + get: null, + ), ); $this->assertInstanceOf(Paginator::class, $result); @@ -47,9 +58,17 @@ public function test_company_actions_call_read_any_with_paginate_false_expect_co ->create(); $result = $this->companyActions->readAny( - userId: $user->id, - search: '', - paginate: false + user: $user, + withTrashed: false, + search: null, + default: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: null, + ), ); $this->assertInstanceOf(Collection::class, $result); @@ -75,11 +94,20 @@ public function test_company_actions_call_read_any_with_search_parameter_expect_ ->create(); $result = $this->companyActions->readAny( - userId: $user->id, + user: $user, + withTrashed: false, search: 'testing', - paginate: true, - page: 1, - perPage: 10 + default: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: 10, + ), + get: null, + ), ); $this->assertInstanceOf(Paginator::class, $result); @@ -92,7 +120,7 @@ public function test_company_actions_call_read_any_with_page_parameter_negative_ $idxDefaultCompany = random_int(0, $companyCount - 1); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->count($companyCount) ->state(new Sequence( fn (Sequence $sequence) => [ @@ -103,11 +131,20 @@ public function test_company_actions_call_read_any_with_page_parameter_negative_ ->create(); $result = $this->companyActions->readAny( - userId: $user->id, + user: $user, + withTrashed: false, search: '', - paginate: true, - page: -1, - perPage: 10 + default: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: -1, + perPage: 10, + ), + get: null, + ), ); $this->assertInstanceOf(Paginator::class, $result); @@ -120,7 +157,7 @@ public function test_company_actions_call_read_any_with_perpage_parameter_negati $idxDefaultCompany = random_int(0, $companyCount - 1); $user = User::factory() - ->hasAttached(Role::where('name', '=', UserRoles::DEVELOPER->value)->first()) + ->hasAttached(Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()) ->has(Company::factory()->setStatusActive()->count($companyCount) ->state(new Sequence( fn (Sequence $sequence) => [ @@ -131,11 +168,20 @@ public function test_company_actions_call_read_any_with_perpage_parameter_negati ->create(); $result = $this->companyActions->readAny( - userId: $user->id, + user: $user, + withTrashed: false, search: '', - paginate: true, - page: 1, - perPage: -10 + default: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: -10, + ), + get: null, + ), ); $this->assertInstanceOf(Paginator::class, $result); diff --git a/api/tests/Unit/Actions/CustomerActions/CustomerActionsCreateTest.php b/api/tests/Unit/Actions/CustomerActions/CustomerActionsCreateTest.php new file mode 100644 index 000000000..fef23d519 --- /dev/null +++ b/api/tests/Unit/Actions/CustomerActions/CustomerActionsCreateTest.php @@ -0,0 +1,84 @@ +customerActions = new CustomerActions(); + } + + public function test_customer_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $group = CustomerGroup::factory()->for($company)->create(); + + $payload = Customer::factory()->for($company) + ->make([ + 'group_id' => $group->id, + ])->toArray(); + + $dto = new \App\DTOs\CustomerCreateDTO( + companyId: $payload['company_id'], + groupId: $payload['group_id'], + code: $payload['code'], + name: $payload['name'], + paymentTermType: $payload['payment_term_type'], + paymentTerm: $payload['payment_term'], + taxableEnterprise: $payload['taxable_enterprise'], + taxId: $payload['tax_id'], + isMember: $payload['is_member'], + maxOpenInvoice: $payload['max_open_invoice'], + maxInvoiceAge: $payload['max_invoice_age'], + maxOutstandingInvoice: $payload['max_outstanding_invoice'], + zone: $payload['zone'], + remarks: $payload['remarks'], + status: $payload['status'] + ); + + $result = $this->customerActions->create($dto); + $this->assertDatabaseHas('customers', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'is_member' => $payload['is_member'], + 'name' => $payload['name'], + 'group_id' => $payload['group_id'], + 'zone' => $payload['zone'], + 'max_open_invoice' => $payload['max_open_invoice'], + 'max_outstanding_invoice' => $payload['max_outstanding_invoice'], + 'max_invoice_age' => $payload['max_invoice_age'], + 'payment_term_type' => $payload['payment_term_type'], + 'payment_term' => $payload['payment_term'], + 'taxable_enterprise' => $payload['taxable_enterprise'], + 'tax_id' => $payload['tax_id'], + 'status' => $payload['status'], + 'remarks' => $payload['remarks'], + ]); + } + + public function test_customer_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\CustomerCreateDTO(); + + $this->customerActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/CustomerActions/CustomerActionsDeleteTest.php b/api/tests/Unit/Actions/CustomerActions/CustomerActionsDeleteTest.php new file mode 100644 index 000000000..0a3c73532 --- /dev/null +++ b/api/tests/Unit/Actions/CustomerActions/CustomerActionsDeleteTest.php @@ -0,0 +1,39 @@ +customerActions = new CustomerActions(); + } + + public function test_customer_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Customer::factory()) + )->create(); + + $customer = $user->companies()->inRandomOrder()->first() + ->customers()->inRandomOrder()->first(); + $result = $this->customerActions->delete($customer); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('customers', [ + 'id' => $customer->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/CustomerActions/CustomerActionsEditTest.php b/api/tests/Unit/Actions/CustomerActions/CustomerActionsEditTest.php new file mode 100644 index 000000000..635891333 --- /dev/null +++ b/api/tests/Unit/Actions/CustomerActions/CustomerActionsEditTest.php @@ -0,0 +1,98 @@ +customerActions = new CustomerActions(); + } + + public function test_customer_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Customer::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customer = $company->customers()->inRandomOrder()->first(); + + $group = CustomerGroup::factory()->for($company)->create(); + + $payload = Customer::factory()->for($company) + ->make([ + 'group_id' => $group->id, + ])->toArray(); + + $dto = new \App\DTOs\CustomerUpdateDTO( + groupId: $payload['group_id'], + code: $payload['code'], + name: $payload['name'], + paymentTermType: $payload['payment_term_type'], + paymentTerm: $payload['payment_term'], + taxableEnterprise: $payload['taxable_enterprise'], + taxId: $payload['tax_id'], + isMember: $payload['is_member'], + maxOpenInvoice: $payload['max_open_invoice'], + maxInvoiceAge: $payload['max_invoice_age'], + maxOutstandingInvoice: $payload['max_outstanding_invoice'], + zone: $payload['zone'], + remarks: $payload['remarks'], + status: $payload['status'] + ); + + $result = $this->customerActions->update($customer, $dto); + $this->assertInstanceOf(Customer::class, $result); + $this->assertDatabaseHas('customers', [ + 'id' => $customer->id, + 'company_id' => $customer->company_id, + 'code' => $payload['code'], + 'is_member' => $payload['is_member'], + 'name' => $payload['name'], + 'group_id' => $payload['group_id'], + 'zone' => $payload['zone'], + 'max_open_invoice' => $payload['max_open_invoice'], + 'max_outstanding_invoice' => $payload['max_outstanding_invoice'], + 'max_invoice_age' => $payload['max_invoice_age'], + 'payment_term_type' => $payload['payment_term_type'], + 'payment_term' => $payload['payment_term'], + 'taxable_enterprise' => $payload['taxable_enterprise'], + 'tax_id' => $payload['tax_id'], + 'status' => $payload['status'], + 'remarks' => $payload['remarks'], + ]); + } + + public function test_customer_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Customer::factory()) + )->create(); + + $customer = $user->companies()->inRandomOrder()->first() + ->customers()->inRandomOrder()->first(); + + $payload = []; + + $dto = new \App\DTOs\CustomerUpdateDTO(); + + $this->customerActions->update($customer, $dto); + } +} diff --git a/api/tests/Unit/Actions/CustomerActions/CustomerActionsReadTest.php b/api/tests/Unit/Actions/CustomerActions/CustomerActionsReadTest.php new file mode 100644 index 000000000..0a6b863f0 --- /dev/null +++ b/api/tests/Unit/Actions/CustomerActions/CustomerActionsReadTest.php @@ -0,0 +1,211 @@ +customerActions = new CustomerActions(); + } + + public function test_customer_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Customer::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->customerActions->readAny( + withTrashed: false, + companyId: $company->id, + search: '', + isMember: null, + groupId: null, + zone: null, + maxOpenInvoice: null, + maxOutstandingInvoice: null, + maxInvoiceAge: null, + paymentTermType: null, + paymentTerm: null, + taxableEnterprise: null, + taxId: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: 10, + ), + get: null, + ) + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_customer_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Customer::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->customerActions->readAny( + withTrashed: false, + companyId: $company->id, + search: '', + isMember: null, + groupId: null, + zone: null, + maxOpenInvoice: null, + maxOutstandingInvoice: null, + maxInvoiceAge: null, + paymentTermType: null, + paymentTerm: null, + taxableEnterprise: null, + taxId: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: new ExecuteGetDTO( + limit: 10, + ), + ) + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_customer_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->customerActions->readAny( + withTrashed: false, + companyId: $maxId, + search: '', + isMember: null, + groupId: null, + zone: null, + maxOpenInvoice: null, + maxOutstandingInvoice: null, + maxInvoiceAge: null, + paymentTermType: null, + paymentTerm: null, + taxableEnterprise: null, + taxId: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: new ExecuteGetDTO( + limit: 10, + ), + ) + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_customer_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $customerCount = 4; + $idxTest = random_int(0, $customerCount - 1); + $defaultName = Customer::factory()->make()->name; + $testname = Customer::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Customer::factory()->count($customerCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->customerActions->readAny( + withTrashed: false, + companyId: $company->id, + search: 'testing', + isMember: null, + groupId: null, + zone: null, + maxOpenInvoice: null, + maxOutstandingInvoice: null, + maxInvoiceAge: null, + paymentTermType: null, + paymentTerm: null, + taxableEnterprise: null, + taxId: null, + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: 10, + ), + get: null, + ) + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_customer_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_customer_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_customer_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Customer::factory()) + )->create(); + + $customer = $user->companies()->inRandomOrder()->first() + ->customers()->inRandomOrder()->first(); + + $result = $this->customerActions->read($customer); + + $this->assertInstanceOf(Customer::class, $result); + } +} diff --git a/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsCreateTest.php b/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsCreateTest.php new file mode 100644 index 000000000..d03d4356e --- /dev/null +++ b/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsCreateTest.php @@ -0,0 +1,68 @@ +customerAddressActions = new CustomerAddressActions(); + } + + public function test_customer_address_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $customer = Customer::factory()->for($company)->create(); + + $payload = CustomerAddress::factory()->for($company) + ->make([ + 'customer_id' => $customer->id, + ])->toArray(); + + $dto = new \App\DTOs\CustomerAddressCreateDTO( + companyId: $payload['company_id'], + customerId: $payload['customer_id'], + address: $payload['address'], + city: $payload['city'], + contact: $payload['contact'], + isMain: $payload['is_main'], + remarks: $payload['remarks'] + ); + + $result = $this->customerAddressActions->create($dto); + $this->assertDatabaseHas('customer_addresses', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'customer_id' => $payload['customer_id'], + 'address' => $payload['address'], + 'city' => $payload['city'], + 'contact' => $payload['contact'], + 'is_main' => $payload['is_main'], + 'remarks' => $payload['remarks'], + ]); + } + + public function test_customer_address_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\CustomerAddressCreateDTO(); + + $this->customerAddressActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsDeleteTest.php b/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsDeleteTest.php new file mode 100644 index 000000000..2fb71194e --- /dev/null +++ b/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsDeleteTest.php @@ -0,0 +1,44 @@ +customerAddressActions = new CustomerAddressActions(); + } + + public function test_customer_address_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Customer::factory(), 'customers')) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customer = $company->customers()->inRandomOrder()->first(); + + $customerAddress = CustomerAddress::factory() + ->for($customer, 'customer') + ->create(); + $result = $this->customerAddressActions->delete($customerAddress); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('customer_addresses', [ + 'id' => $customerAddress->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsEditTest.php b/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsEditTest.php new file mode 100644 index 000000000..01ac70c1d --- /dev/null +++ b/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsEditTest.php @@ -0,0 +1,71 @@ +customerAddressActions = new CustomerAddressActions(); + } + + public function test_customer_address_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerAddress::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customerAddress = $company->customerAddresses()->inRandomOrder()->first(); + + $payload = CustomerAddress::factory()->make()->toArray(); + + $dto = new \App\DTOs\CustomerAddressUpdateDTO( + address: $payload['address'], + city: $payload['city'], + contact: $payload['contact'], + isMain: $payload['is_main'], + remarks: $payload['remarks'] + ); + + $result = $this->customerAddressActions->update($customerAddress, $dto); + $this->assertInstanceOf(CustomerAddress::class, $result); + $this->assertDatabaseHas('customer_addresses', [ + 'id' => $customerAddress->id, + 'company_id' => $customerAddress->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_customer_address_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerAddress::factory()) + )->create(); + + $customerAddress = $user->companies()->inRandomOrder()->first() + ->customerAddresses()->inRandomOrder()->first(); + + $payload = []; + + $dto = new \App\DTOs\CustomerAddressUpdateDTO(); + + $this->customerAddressActions->update($customerAddress, $dto); + } +} diff --git a/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsReadTest.php b/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsReadTest.php new file mode 100644 index 000000000..2b757e055 --- /dev/null +++ b/api/tests/Unit/Actions/CustomerAddressActions/CustomerAddressActionsReadTest.php @@ -0,0 +1,158 @@ +customerAddressActions = new CustomerAddressActions(); + } + + public function test_customer_address_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerAddress::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->customerAddressActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_customer_address_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerAddress::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->customerAddressActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_customer_address_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->customerAddressActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_customer_address_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $customerAddressCount = 4; + $idxTest = random_int(0, $customerAddressCount - 1); + $defaultName = CustomerAddress::factory()->make()->name; + $testname = CustomerAddress::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerAddress::factory()->count($customerAddressCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->customerAddressActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_customer_address_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_customer_address_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_customer_address_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerAddress::factory()) + )->create(); + + $customerAddress = $user->companies()->inRandomOrder()->first() + ->customerAddresses()->inRandomOrder()->first(); + + $result = $this->customerAddressActions->read($customerAddress); + + $this->assertInstanceOf(CustomerAddress::class, $result); + } +} diff --git a/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsCreateTest.php b/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsCreateTest.php new file mode 100644 index 000000000..18715ac4b --- /dev/null +++ b/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsCreateTest.php @@ -0,0 +1,70 @@ +customerGroupActions = new CustomerGroupActions(); + } + + public function test_customer_group_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = CustomerGroup::factory()->for($company) + ->make()->toArray(); + + $dto = new \App\DTOs\CustomerGroupCreateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'], + paymentTermType: $payload['payment_term_type'], + paymentTerm: $payload['payment_term'], + sellAtCost: $payload['sell_at_cost'], + sellingPoint: $payload['selling_point'], + sellingPointMultiple: $payload['selling_point_multiple'], + priceMarkupPercent: $payload['price_markup_percent'], + priceMarkupNominal: $payload['price_markup_nominal'], + priceMarkdownPercent: $payload['price_markdown_percent'], + priceMarkdownNominal: $payload['price_markdown_nominal'], + roundingType: $payload['rounding_type'], + roundingDigit: $payload['rounding_digit'], + maxOpenInvoice: $payload['max_open_invoice'], + maxInvoiceAge: $payload['max_invoice_age'], + maxOutstandingInvoice: $payload['max_outstanding_invoice'], + remarks: $payload['remarks'] + ); + + $result = $this->customerGroupActions->create($dto); + $this->assertDatabaseHas('customer_groups', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_customer_group_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\CustomerGroupCreateDTO(); + + $this->customerGroupActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsDeleteTest.php b/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsDeleteTest.php new file mode 100644 index 000000000..cea14a8ec --- /dev/null +++ b/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsDeleteTest.php @@ -0,0 +1,39 @@ +customerGroupActions = new CustomerGroupActions(); + } + + public function test_customer_group_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerGroup::factory()) + )->create(); + + $customerGroup = $user->companies()->inRandomOrder()->first() + ->customerGroups()->inRandomOrder()->first(); + $result = $this->customerGroupActions->delete($customerGroup); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('customer_groups', [ + 'id' => $customerGroup->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsEditTest.php b/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsEditTest.php new file mode 100644 index 000000000..8ec6ae8ef --- /dev/null +++ b/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsEditTest.php @@ -0,0 +1,83 @@ +customerGroupActions = new CustomerGroupActions(); + } + + public function test_customer_group_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerGroup::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $customerGroup = $company->customerGroups()->inRandomOrder()->first(); + + $payload = CustomerGroup::factory()->make()->toArray(); + + $dto = new \App\DTOs\CustomerGroupUpdateDTO( + code: $payload['code'], + name: $payload['name'], + paymentTermType: $payload['payment_term_type'], + paymentTerm: $payload['payment_term'], + sellAtCost: $payload['sell_at_cost'], + sellingPoint: $payload['selling_point'], + sellingPointMultiple: $payload['selling_point_multiple'], + priceMarkupPercent: $payload['price_markup_percent'], + priceMarkupNominal: $payload['price_markup_nominal'], + priceMarkdownPercent: $payload['price_markdown_percent'], + priceMarkdownNominal: $payload['price_markdown_nominal'], + roundingType: $payload['rounding_type'], + roundingDigit: $payload['rounding_digit'], + maxOpenInvoice: $payload['max_open_invoice'], + maxInvoiceAge: $payload['max_invoice_age'], + maxOutstandingInvoice: $payload['max_outstanding_invoice'], + remarks: $payload['remarks'] + ); + + $result = $this->customerGroupActions->update($customerGroup, $dto); + $this->assertInstanceOf(CustomerGroup::class, $result); + $this->assertDatabaseHas('customer_groups', [ + 'id' => $customerGroup->id, + 'company_id' => $customerGroup->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_customer_group_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerGroup::factory()) + )->create(); + + $customerGroup = $user->companies()->inRandomOrder()->first() + ->customerGroups()->inRandomOrder()->first(); + + $payload = []; + + $dto = new \App\DTOs\CustomerGroupUpdateDTO(); + + $this->customerGroupActions->update($customerGroup, $dto); + } +} diff --git a/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsReadTest.php b/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsReadTest.php new file mode 100644 index 000000000..7399e9ff1 --- /dev/null +++ b/api/tests/Unit/Actions/CustomerGroupActions/CustomerGroupActionsReadTest.php @@ -0,0 +1,158 @@ +customerGroupActions = new CustomerGroupActions(); + } + + public function test_customer_group_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerGroup::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->customerGroupActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_customer_group_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerGroup::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->customerGroupActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_customer_group_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->customerGroupActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_customer_group_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $customerGroupCount = 4; + $idxTest = random_int(0, $customerGroupCount - 1); + $defaultName = CustomerGroup::factory()->make()->name; + $testname = CustomerGroup::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerGroup::factory()->count($customerGroupCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->customerGroupActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_customer_group_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_customer_group_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_customer_group_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(CustomerGroup::factory()) + )->create(); + + $customerGroup = $user->companies()->inRandomOrder()->first() + ->customerGroups()->inRandomOrder()->first(); + + $result = $this->customerGroupActions->read($customerGroup); + + $this->assertInstanceOf(CustomerGroup::class, $result); + } +} diff --git a/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsCreateTest.php b/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsCreateTest.php new file mode 100644 index 000000000..204c7d228 --- /dev/null +++ b/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsCreateTest.php @@ -0,0 +1,56 @@ +employeeActions = new EmployeeActions(); + } + + public function test_employee_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Employee::factory()->for($company) + ->make()->toArray(); + + $dto = new \App\DTOs\EmployeeCreateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'], + remarks: $payload['remarks'] + ); + + $result = $this->employeeActions->create($dto); + $this->assertDatabaseHas('employees', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_employee_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\EmployeeCreateDTO(); + + $this->employeeActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsDeleteTest.php b/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsDeleteTest.php new file mode 100644 index 000000000..86e5d6842 --- /dev/null +++ b/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsDeleteTest.php @@ -0,0 +1,39 @@ +employeeActions = new EmployeeActions(); + } + + public function test_employee_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Employee::factory()) + )->create(); + + $employee = $user->companies()->inRandomOrder()->first() + ->employees()->inRandomOrder()->first(); + $result = $this->employeeActions->delete($employee); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('employees', [ + 'id' => $employee->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsEditTest.php b/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsEditTest.php new file mode 100644 index 000000000..531df8d88 --- /dev/null +++ b/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsEditTest.php @@ -0,0 +1,70 @@ +employeeActions = new EmployeeActions(); + } + + public function test_employee_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Employee::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $employee = $company->employees()->inRandomOrder()->first(); + + $payload = Employee::factory()->make()->toArray(); + + $dto = new \App\DTOs\EmployeeUpdateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'], + remarks: $payload['remarks'] + ); + + $result = $this->employeeActions->update($employee, $dto); + $this->assertInstanceOf(Employee::class, $result); + $this->assertDatabaseHas('employees', [ + 'id' => $employee->id, + 'company_id' => $employee->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_employee_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Employee::factory()) + )->create(); + + $employee = $user->companies()->inRandomOrder()->first() + ->employees()->inRandomOrder()->first(); + + $payload = []; + + $dto = new \App\DTOs\EmployeeUpdateDTO(); + + $this->employeeActions->update($employee, $dto); + } +} diff --git a/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsReadTest.php b/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsReadTest.php new file mode 100644 index 000000000..e35335e13 --- /dev/null +++ b/api/tests/Unit/Actions/EmployeeActions/EmployeeActionsReadTest.php @@ -0,0 +1,158 @@ +employeeActions = new EmployeeActions(); + } + + public function test_employee_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Employee::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->employeeActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_employee_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Employee::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->employeeActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_employee_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->employeeActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_employee_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $employeeCount = 4; + $idxTest = random_int(0, $employeeCount - 1); + $defaultName = Employee::factory()->make()->name; + $testname = Employee::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Employee::factory()->count($employeeCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->employeeActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_employee_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_employee_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_employee_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Employee::factory()) + )->create(); + + $employee = $user->companies()->inRandomOrder()->first() + ->employees()->inRandomOrder()->first(); + + $result = $this->employeeActions->read($employee); + + $this->assertInstanceOf(Employee::class, $result); + } +} diff --git a/api/tests/Unit/Actions/InvestorActions/InvestorActionsCreateTest.php b/api/tests/Unit/Actions/InvestorActions/InvestorActionsCreateTest.php new file mode 100644 index 000000000..5ea6dc8c3 --- /dev/null +++ b/api/tests/Unit/Actions/InvestorActions/InvestorActionsCreateTest.php @@ -0,0 +1,56 @@ +investorActions = new InvestorActions(); + } + + public function test_investor_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Investor::factory()->for($company) + ->make()->toArray(); + + $dto = new \App\DTOs\InvestorCreateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'], + remarks: $payload['remarks'] + ); + + $result = $this->investorActions->create($dto); + $this->assertDatabaseHas('investors', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_investor_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\InvestorCreateDTO(); + + $this->investorActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/InvestorActions/InvestorActionsDeleteTest.php b/api/tests/Unit/Actions/InvestorActions/InvestorActionsDeleteTest.php new file mode 100644 index 000000000..274cbda1a --- /dev/null +++ b/api/tests/Unit/Actions/InvestorActions/InvestorActionsDeleteTest.php @@ -0,0 +1,39 @@ +investorActions = new InvestorActions(); + } + + public function test_investor_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Investor::factory()) + )->create(); + + $investor = $user->companies()->inRandomOrder()->first() + ->investors()->inRandomOrder()->first(); + $result = $this->investorActions->delete($investor); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('investors', [ + 'id' => $investor->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/InvestorActions/InvestorActionsEditTest.php b/api/tests/Unit/Actions/InvestorActions/InvestorActionsEditTest.php new file mode 100644 index 000000000..5519364f5 --- /dev/null +++ b/api/tests/Unit/Actions/InvestorActions/InvestorActionsEditTest.php @@ -0,0 +1,69 @@ +investorActions = new InvestorActions(); + } + + public function test_investor_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Investor::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $investor = $company->investors()->inRandomOrder()->first(); + + $payload = Investor::factory()->make()->toArray(); + + $dto = new \App\DTOs\InvestorUpdateDTO( + code: $payload['code'], + name: $payload['name'], + remarks: $payload['remarks'] + ); + + $result = $this->investorActions->update($investor, $dto); + $this->assertInstanceOf(Investor::class, $result); + $this->assertDatabaseHas('investors', [ + 'id' => $investor->id, + 'company_id' => $investor->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_investor_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Investor::factory()) + )->create(); + + $investor = $user->companies()->inRandomOrder()->first() + ->investors()->inRandomOrder()->first(); + + $payload = []; + + $dto = new \App\DTOs\InvestorUpdateDTO(); + + $this->investorActions->update($investor, $dto); + } +} diff --git a/api/tests/Unit/Actions/InvestorActions/InvestorActionsReadTest.php b/api/tests/Unit/Actions/InvestorActions/InvestorActionsReadTest.php new file mode 100644 index 000000000..be8464a2e --- /dev/null +++ b/api/tests/Unit/Actions/InvestorActions/InvestorActionsReadTest.php @@ -0,0 +1,167 @@ +investorActions = new InvestorActions(); + } + + public function test_investor_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Investor::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->investorActions->readAny( + withTrashed: false, + search: '', + companyId: $company->id, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: 10, + ), + get: null, + ) + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_investor_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Investor::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->investorActions->readAny( + withTrashed: false, + search: '', + companyId: $company->id, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: new ExecuteGetDTO( + limit: 10, + ), + ) + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_investor_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->investorActions->readAny( + withTrashed: false, + search: '', + companyId: $maxId, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: new ExecuteGetDTO( + limit: 10, + ), + ) + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_investor_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $investorCount = 4; + $idxTest = random_int(0, $investorCount - 1); + $defaultName = Investor::factory()->make()->name; + $testname = Investor::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Investor::factory()->count($investorCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->investorActions->readAny( + withTrashed: false, + search: 'testing', + companyId: $company->id, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: 10, + ), + get: null, + ) + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_investor_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_investor_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_investor_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Investor::factory()) + )->create(); + + $investor = $user->companies()->inRandomOrder()->first() + ->investors()->inRandomOrder()->first(); + + $result = $this->investorActions->read($investor); + + $this->assertInstanceOf(Investor::class, $result); + } +} diff --git a/api/tests/Unit/Actions/ProductActions/ProductActionsCreateTest.php b/api/tests/Unit/Actions/ProductActions/ProductActionsCreateTest.php new file mode 100644 index 000000000..3163f41f4 --- /dev/null +++ b/api/tests/Unit/Actions/ProductActions/ProductActionsCreateTest.php @@ -0,0 +1,79 @@ +productActions = new ProductActions(); + } + + public function test_product_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $productCategory = $company->productCategories()->inRandomOrder()->first(); + $brand = $company->brands()->inRandomOrder()->first(); + + $payload = Product::factory() + ->for($company) + ->for($productCategory, 'category') + ->for($brand) + ->make()->toArray(); + + $productUnit = \App\Models\ProductUnit::factory()->make([ + 'company_id' => $company->id, + 'unit_id' => \App\Models\Unit::factory()->create(['company_id' => $company->id])->id, + 'point' => 50, + ])->toArray(); + $payload['product_units'] = [$productUnit]; + + $result = $this->productActions->create($payload); + + $this->assertDatabaseHas('products', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'category_id' => $payload['category_id'], + 'brand_id' => $payload['brand_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + 'type' => $payload['type'], + 'is_price_include_vat' => $payload['is_price_include_vat'], + 'is_use_serial_number' => $payload['is_use_serial_number'], + 'is_expirable' => $payload['is_expirable'], + 'status' => $payload['status'], + 'remarks' => $payload['remarks'], + ]); + + $this->assertDatabaseHas('product_units', [ + 'product_id' => $result->id, + 'point' => 50, + ]); + } + + public function test_product_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $this->productActions->create([]); + } +} diff --git a/api/tests/Unit/Actions/ProductActions/ProductActionsDeleteTest.php b/api/tests/Unit/Actions/ProductActions/ProductActionsDeleteTest.php new file mode 100644 index 000000000..e3100c741 --- /dev/null +++ b/api/tests/Unit/Actions/ProductActions/ProductActionsDeleteTest.php @@ -0,0 +1,52 @@ +productActions = new ProductActions(); + } + + public function test_product_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $productCategory = $company->productCategories()->inRandomOrder()->first(); + + $brand = $company->brands()->inRandomOrder()->first(); + + $product = Product::factory() + ->for($company) + ->for($productCategory) + ->for($brand); + + $product = $product->create(); + $result = $this->productActions->delete($product); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('products', [ + 'id' => $product->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/ProductActions/ProductActionsEditTest.php b/api/tests/Unit/Actions/ProductActions/ProductActionsEditTest.php new file mode 100644 index 000000000..399cb8079 --- /dev/null +++ b/api/tests/Unit/Actions/ProductActions/ProductActionsEditTest.php @@ -0,0 +1,103 @@ +productActions = new ProductActions(); + } + + public function test_product_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $productCategory = $company->productCategories()->inRandomOrder()->first(); + + $brand = $company->brands()->inRandomOrder()->first(); + + $product = Product::factory() + ->for($company) + ->for($productCategory, 'category') + ->for($brand); + + $product = $product->create(); + + $productUnit = \App\Models\ProductUnit::factory()->for($product)->create(['point' => 10]); + + $payload = $product->toArray(); + $payload['product_units'] = [ + [ + 'id' => $productUnit->id, + 'code' => $productUnit->code, + 'unit_id' => $productUnit->unit_id, + 'is_manufacturer_sku' => $productUnit->is_manufacturer_sku, + 'is_base' => $productUnit->is_base, + 'conversion_value' => $productUnit->conversion_value, + 'is_primary_unit' => $productUnit->is_primary_unit, + 'point' => 100, + 'remarks' => $productUnit->remarks, + ], + ]; + + $result = $this->productActions->update($product, $payload); + + $this->assertInstanceOf(Product::class, $result); + $this->assertDatabaseHas('products', [ + 'id' => $product->id, + 'category_id' => $payload['category_id'], + 'brand_id' => $payload['brand_id'], + 'company_id' => $product->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'type' => $payload['type'], + 'is_price_include_vat' => $payload['is_price_include_vat'], + 'is_use_serial_number' => $payload['is_use_serial_number'], + 'is_expirable' => $payload['is_expirable'], + 'status' => $payload['status'], + 'remarks' => $payload['remarks'], + ]); + + $this->assertDatabaseHas('product_units', [ + 'id' => $productUnit->id, + 'point' => 100, + ]); + } + + public function test_product_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Product::factory()) + )->create(); + + $product = $user->companies()->inRandomOrder()->first() + ->products()->inRandomOrder()->first(); + + $payload = []; + + $this->productActions->update($product, $payload); + } +} diff --git a/api/tests/Unit/Actions/ProductActions/ProductActionsReadTest.php b/api/tests/Unit/Actions/ProductActions/ProductActionsReadTest.php new file mode 100644 index 000000000..d4964a2b3 --- /dev/null +++ b/api/tests/Unit/Actions/ProductActions/ProductActionsReadTest.php @@ -0,0 +1,205 @@ +productActions = new ProductActions(); + } + + public function test_product_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $productSeedCount = random_int(1, 5); + for ($i = 0; $i < $productSeedCount; $i++) { + $productCategory = $company->productCategories()->inRandomOrder()->first(); + + $brand = $company->brands()->inRandomOrder()->first(); + + $product = Product::factory() + ->for($company) + ->for($productCategory) + ->for($brand); + + $product->create(); + } + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->productActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_product_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $productSeedCount = random_int(1, 5); + for ($i = 0; $i < $productSeedCount; $i++) { + $productCategory = $company->productCategories()->inRandomOrder()->first(); + + $brand = $company->brands()->inRandomOrder()->first(); + + $product = Product::factory() + ->for($company) + ->for($productCategory) + ->for($brand); + + $product->create(); + } + + $result = $this->productActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_product_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->productActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_product_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $productCount = 4; + $idxTest = random_int(0, $productCount - 1); + $defaultName = Product::factory()->make()->name; + $testname = Product::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3)) + ->has(Product::factory()->count($productCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->productActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_product_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_product_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_product_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count(3)) + ->has(Brand::factory()->count(3))) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $productCategory = $company->productCategories()->inRandomOrder()->first(); + + $brand = $company->brands()->inRandomOrder()->first(); + + $product = Product::factory() + ->for($company) + ->for($productCategory) + ->for($brand); + + $product = $product->create(); + + $result = $this->productActions->read($product); + + $this->assertInstanceOf(Product::class, $result); + } +} diff --git a/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsCreateTest.php b/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsCreateTest.php new file mode 100644 index 000000000..a1e75b771 --- /dev/null +++ b/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsCreateTest.php @@ -0,0 +1,57 @@ +productCategoryActions = new ProductCategoryActions(); + } + + public function test_product_category_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = ProductCategory::factory()->for($company) + ->make()->toArray(); + + $dto = new \App\DTOs\ProductCategoryCreateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'], + type: $payload['type'] + ); + + $result = $this->productCategoryActions->create($dto); + $this->assertDatabaseHas('product_categories', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + 'type' => $payload['type'], + ]); + } + + public function test_product_category_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\ProductCategoryCreateDTO(); + + $this->productCategoryActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsDeleteTest.php b/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsDeleteTest.php new file mode 100644 index 000000000..e4b1d2c6b --- /dev/null +++ b/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsDeleteTest.php @@ -0,0 +1,39 @@ +productCategoryActions = new ProductCategoryActions(); + } + + public function test_product_category_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()) + )->create(); + + $productCategory = $user->companies()->inRandomOrder()->first() + ->productCategories()->inRandomOrder()->first(); + $result = $this->productCategoryActions->delete($productCategory); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('product_categories', [ + 'id' => $productCategory->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsEditTest.php b/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsEditTest.php new file mode 100644 index 000000000..6f56d26c0 --- /dev/null +++ b/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsEditTest.php @@ -0,0 +1,69 @@ +productCategoryActions = new ProductCategoryActions(); + } + + public function test_product_category_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $productCategory = $company->productCategories()->inRandomOrder()->first(); + + $payload = ProductCategory::factory()->make()->toArray(); + + $dto = new \App\DTOs\ProductCategoryUpdateDTO( + code: $payload['code'], + name: $payload['name'], + type: $payload['type'] + ); + + $result = $this->productCategoryActions->update($productCategory, $dto); + $this->assertInstanceOf(ProductCategory::class, $result); + $this->assertDatabaseHas('product_categories', [ + 'id' => $productCategory->id, + 'company_id' => $productCategory->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_product_category_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()) + )->create(); + + $productCategory = $user->companies()->inRandomOrder()->first() + ->productCategories()->inRandomOrder()->first(); + + $payload = []; + + $dto = new \App\DTOs\ProductCategoryUpdateDTO(); + + $this->productCategoryActions->update($productCategory, $dto); + } +} diff --git a/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsReadTest.php b/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsReadTest.php new file mode 100644 index 000000000..c9da75802 --- /dev/null +++ b/api/tests/Unit/Actions/ProductCategoryActions/ProductCategoryActionsReadTest.php @@ -0,0 +1,158 @@ +productCategoryActions = new ProductCategoryActions(); + } + + public function test_product_category_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->productCategoryActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_product_category_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->productCategoryActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_product_category_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->productCategoryActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_product_category_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $productCategoryCount = 4; + $idxTest = random_int(0, $productCategoryCount - 1); + $defaultName = ProductCategory::factory()->make()->name; + $testname = ProductCategory::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()->count($productCategoryCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->productCategoryActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_product_category_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_product_category_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_product_category_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(ProductCategory::factory()) + )->create(); + + $productCategory = $user->companies()->inRandomOrder()->first() + ->productCategories()->inRandomOrder()->first(); + + $result = $this->productCategoryActions->read($productCategory); + + $this->assertInstanceOf(ProductCategory::class, $result); + } +} diff --git a/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsCreateTest.php b/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsCreateTest.php new file mode 100644 index 000000000..28d03ba12 --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsCreateTest.php @@ -0,0 +1,49 @@ +stockTransferActions = new StockTransferActions(); + } + + public function test_stock_transfer_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = StockTransfer::factory()->for($company) + ->make()->toArray(); + + $result = $this->stockTransferActions->create($payload); + + $this->assertDatabaseHas('stock_transfers', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_stock_transfer_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $this->stockTransferActions->create([]); + } +} diff --git a/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsDeleteTest.php b/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsDeleteTest.php new file mode 100644 index 000000000..30a1a58bd --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsDeleteTest.php @@ -0,0 +1,39 @@ +stockTransferActions = new StockTransferActions(); + } + + public function test_stock_transfer_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransfer::factory()) + )->create(); + + $stockTransfer = $user->companies()->inRandomOrder()->first() + ->stockTransfers()->inRandomOrder()->first(); + $result = $this->stockTransferActions->delete($stockTransfer); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('stock_transfers', [ + 'id' => $stockTransfer->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsEditTest.php b/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsEditTest.php new file mode 100644 index 000000000..891b6e412 --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsEditTest.php @@ -0,0 +1,62 @@ +stockTransferActions = new StockTransferActions(); + } + + public function test_stock_transfer_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransfer::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransfer = $company->stockTransfers()->inRandomOrder()->first(); + + $payload = StockTransfer::factory()->make()->toArray(); + + $result = $this->stockTransferActions->update($stockTransfer, $payload); + + $this->assertInstanceOf(StockTransfer::class, $result); + $this->assertDatabaseHas('stock_transfers', [ + 'id' => $stockTransfer->id, + 'company_id' => $stockTransfer->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_stock_transfer_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransfer::factory()) + )->create(); + + $stockTransfer = $user->companies()->inRandomOrder()->first() + ->stockTransfers()->inRandomOrder()->first(); + + $payload = []; + + $this->stockTransferActions->update($stockTransfer, $payload); + } +} diff --git a/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsReadTest.php b/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsReadTest.php new file mode 100644 index 000000000..4c339e29e --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferActions/StockTransferActionsReadTest.php @@ -0,0 +1,158 @@ +stockTransferActions = new StockTransferActions(); + } + + public function test_stock_transfer_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransfer::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->stockTransferActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_stock_transfer_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransfer::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->stockTransferActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_stock_transfer_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->stockTransferActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_stock_transfer_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $stockTransferCount = 4; + $idxTest = random_int(0, $stockTransferCount - 1); + $defaultName = StockTransfer::factory()->make()->name; + $testname = StockTransfer::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransfer::factory()->count($stockTransferCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->stockTransferActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_stock_transfer_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_stock_transfer_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_stock_transfer_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransfer::factory()) + )->create(); + + $stockTransfer = $user->companies()->inRandomOrder()->first() + ->stockTransfers()->inRandomOrder()->first(); + + $result = $this->stockTransferActions->read($stockTransfer); + + $this->assertInstanceOf(StockTransfer::class, $result); + } +} diff --git a/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsCreateTest.php b/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsCreateTest.php new file mode 100644 index 000000000..4cf94ab91 --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsCreateTest.php @@ -0,0 +1,49 @@ +stockTransferItemActions = new StockTransferItemActions(); + } + + public function test_stock_transfer_item_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = StockTransferItem::factory()->for($company) + ->make()->toArray(); + + $result = $this->stockTransferItemActions->create($payload); + + $this->assertDatabaseHas('stock_transfer_items', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_stock_transfer_item_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $this->stockTransferItemActions->create([]); + } +} diff --git a/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsDeleteTest.php b/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsDeleteTest.php new file mode 100644 index 000000000..3e2515518 --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsDeleteTest.php @@ -0,0 +1,39 @@ +stockTransferItemActions = new StockTransferItemActions(); + } + + public function test_stock_transfer_item_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItem::factory()) + )->create(); + + $stockTransferItem = $user->companies()->inRandomOrder()->first() + ->stockTransferItems()->inRandomOrder()->first(); + $result = $this->stockTransferItemActions->delete($stockTransferItem); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('stock_transfer_items', [ + 'id' => $stockTransferItem->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsEditTest.php b/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsEditTest.php new file mode 100644 index 000000000..8232fa490 --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsEditTest.php @@ -0,0 +1,62 @@ +stockTransferItemActions = new StockTransferItemActions(); + } + + public function test_stock_transfer_item_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItem::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItem = $company->stockTransferItems()->inRandomOrder()->first(); + + $payload = StockTransferItem::factory()->make()->toArray(); + + $result = $this->stockTransferItemActions->update($stockTransferItem, $payload); + + $this->assertInstanceOf(StockTransferItem::class, $result); + $this->assertDatabaseHas('stock_transfer_items', [ + 'id' => $stockTransferItem->id, + 'company_id' => $stockTransferItem->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_stock_transfer_item_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItem::factory()) + )->create(); + + $stockTransferItem = $user->companies()->inRandomOrder()->first() + ->stockTransferItems()->inRandomOrder()->first(); + + $payload = []; + + $this->stockTransferItemActions->update($stockTransferItem, $payload); + } +} diff --git a/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsReadTest.php b/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsReadTest.php new file mode 100644 index 000000000..aedb0058d --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferItemActions/StockTransferItemActionsReadTest.php @@ -0,0 +1,197 @@ +stockTransferItemActions = app(StockTransferItemActions::class); + } + + public function test_stock_transfer_item_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItem::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->stockTransferItemActions->readAny( + withTrashed: false, + companyId: $company->id, + branchId: null, + search: '', + + stockTransferCode: null, + stockTransferStartDate: null, + stockTransferEndDate: null, + stockTransferSourceWarehouseId: null, + stockTransferDestinationWarehouseId: null, + productUnitCode: null, + productUnitProductName: null, + productUnitProductCategoryId: null, + productUnitProductBrandId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO(page: 1, perPage: 10), + get: null, + ) + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_stock_transfer_item_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItem::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->stockTransferItemActions->readAny( + withTrashed: false, + companyId: $company->id, + branchId: null, + search: '', + + stockTransferCode: null, + stockTransferStartDate: null, + stockTransferEndDate: null, + stockTransferSourceWarehouseId: null, + stockTransferDestinationWarehouseId: null, + productUnitCode: null, + productUnitProductName: null, + productUnitProductCategoryId: null, + productUnitProductBrandId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: new ExecuteGetDTO(limit: 10), + ) + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_stock_transfer_item_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->stockTransferItemActions->readAny( + withTrashed: false, + companyId: $maxId, + branchId: null, + search: '', + + stockTransferCode: null, + stockTransferStartDate: null, + stockTransferEndDate: null, + stockTransferSourceWarehouseId: null, + stockTransferDestinationWarehouseId: null, + productUnitCode: null, + productUnitProductName: null, + productUnitProductCategoryId: null, + productUnitProductBrandId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: new ExecuteGetDTO(limit: 10), + ) + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_stock_transfer_item_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $stockTransferItemCount = 4; + $idxTest = random_int(0, $stockTransferItemCount - 1); + $defaultRemarks = 'default remarks'; + $testRemarks = 'testing remarks'; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItem::factory()->count($stockTransferItemCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'remarks' => $sequence->index == $idxTest ? $testRemarks : $defaultRemarks, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->stockTransferItemActions->readAny( + withTrashed: false, + companyId: $company->id, + branchId: null, + search: 'testing', + + stockTransferCode: null, + stockTransferStartDate: null, + stockTransferEndDate: null, + stockTransferSourceWarehouseId: null, + stockTransferDestinationWarehouseId: null, + productUnitCode: null, + productUnitProductName: null, + productUnitProductCategoryId: null, + productUnitProductBrandId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO(page: 1, perPage: 10), + get: null, + ) + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_stock_transfer_item_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_stock_transfer_item_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_stock_transfer_item_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItem::factory()) + )->create(); + + $stockTransferItem = $user->companies()->inRandomOrder()->first() + ->stockTransferItems()->inRandomOrder()->first(); + + $result = $this->stockTransferItemActions->read($stockTransferItem); + + $this->assertInstanceOf(StockTransferItem::class, $result); + } +} diff --git a/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsCreateTest.php b/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsCreateTest.php new file mode 100644 index 000000000..4276ae75a --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsCreateTest.php @@ -0,0 +1,49 @@ +stockTransferItemSerialActions = new StockTransferItemSerialActions(); + } + + public function test_stock_transfer_item_serial_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = StockTransferItemSerial::factory()->for($company) + ->make()->toArray(); + + $result = $this->stockTransferItemSerialActions->create($payload); + + $this->assertDatabaseHas('stock_transfer_item_serials', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_stock_transfer_item_serial_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $this->stockTransferItemSerialActions->create([]); + } +} diff --git a/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsDeleteTest.php b/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsDeleteTest.php new file mode 100644 index 000000000..d210c6341 --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsDeleteTest.php @@ -0,0 +1,39 @@ +stockTransferItemSerialActions = new StockTransferItemSerialActions(); + } + + public function test_stock_transfer_item_serial_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItemSerial::factory()) + )->create(); + + $stockTransferItemSerial = $user->companies()->inRandomOrder()->first() + ->stockTransferItemSerials()->inRandomOrder()->first(); + $result = $this->stockTransferItemSerialActions->delete($stockTransferItemSerial); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('stock_transfer_item_serials', [ + 'id' => $stockTransferItemSerial->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsEditTest.php b/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsEditTest.php new file mode 100644 index 000000000..51ecbf60b --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsEditTest.php @@ -0,0 +1,62 @@ +stockTransferItemSerialActions = new StockTransferItemSerialActions(); + } + + public function test_stock_transfer_item_serial_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItemSerial::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $stockTransferItemSerial = $company->stockTransferItemSerials()->inRandomOrder()->first(); + + $payload = StockTransferItemSerial::factory()->make()->toArray(); + + $result = $this->stockTransferItemSerialActions->update($stockTransferItemSerial, $payload); + + $this->assertInstanceOf(StockTransferItemSerial::class, $result); + $this->assertDatabaseHas('stock_transfer_item_serials', [ + 'id' => $stockTransferItemSerial->id, + 'company_id' => $stockTransferItemSerial->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_stock_transfer_item_serial_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItemSerial::factory()) + )->create(); + + $stockTransferItemSerial = $user->companies()->inRandomOrder()->first() + ->stockTransferItemSerials()->inRandomOrder()->first(); + + $payload = []; + + $this->stockTransferItemSerialActions->update($stockTransferItemSerial, $payload); + } +} diff --git a/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsReadTest.php b/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsReadTest.php new file mode 100644 index 000000000..de7e19a70 --- /dev/null +++ b/api/tests/Unit/Actions/StockTransferItemSerialActions/StockTransferItemSerialActionsReadTest.php @@ -0,0 +1,158 @@ +stockTransferItemSerialActions = new StockTransferItemSerialActions(); + } + + public function test_stock_transfer_item_serial_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItemSerial::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->stockTransferItemSerialActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_stock_transfer_item_serial_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItemSerial::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->stockTransferItemSerialActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_stock_transfer_item_serial_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->stockTransferItemSerialActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_stock_transfer_item_serial_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $stockTransferItemSerialCount = 4; + $idxTest = random_int(0, $stockTransferItemSerialCount - 1); + $defaultName = StockTransferItemSerial::factory()->make()->name; + $testname = StockTransferItemSerial::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItemSerial::factory()->count($stockTransferItemSerialCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->stockTransferItemSerialActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_stock_transfer_item_serial_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_stock_transfer_item_serial_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_stock_transfer_item_serial_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(StockTransferItemSerial::factory()) + )->create(); + + $stockTransferItemSerial = $user->companies()->inRandomOrder()->first() + ->stockTransferItemSerials()->inRandomOrder()->first(); + + $result = $this->stockTransferItemSerialActions->read($stockTransferItemSerial); + + $this->assertInstanceOf(StockTransferItemSerial::class, $result); + } +} diff --git a/api/tests/Unit/Actions/SupplierActions/SupplierActionsCreateTest.php b/api/tests/Unit/Actions/SupplierActions/SupplierActionsCreateTest.php new file mode 100644 index 000000000..b9d022190 --- /dev/null +++ b/api/tests/Unit/Actions/SupplierActions/SupplierActionsCreateTest.php @@ -0,0 +1,72 @@ +supplierActions = new SupplierActions(); + } + + public function test_supplier_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Supplier::factory()->for($company)->for($user) + ->make()->toArray(); + + $dto = new \App\DTOs\SupplierCreateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + city: $payload['city'], + paymentTermType: $payload['payment_term_type'], + paymentTerm: $payload['payment_term'], + taxableEnterprise: $payload['taxable_enterprise'], + taxId: $payload['tax_id'], + remarks: $payload['remarks'], + status: $payload['status'] + ); + + $result = $this->supplierActions->create($dto); + $this->assertDatabaseHas('suppliers', [ + 'id' => $result->id, + 'user_id' => $payload['user_id'], + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + 'address' => $payload['address'], + 'city' => $payload['city'], + 'payment_term_type' => $payload['payment_term_type'], + 'payment_term' => $payload['payment_term'], + 'taxable_enterprise' => $payload['taxable_enterprise'], + 'tax_id' => $payload['tax_id'], + 'status' => $payload['status'], + 'remarks' => $payload['remarks'], + ]); + } + + public function test_supplier_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\SupplierCreateDTO(); + + $this->supplierActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/SupplierActions/SupplierActionsDeleteTest.php b/api/tests/Unit/Actions/SupplierActions/SupplierActionsDeleteTest.php new file mode 100644 index 000000000..351c8a3aa --- /dev/null +++ b/api/tests/Unit/Actions/SupplierActions/SupplierActionsDeleteTest.php @@ -0,0 +1,39 @@ +supplierActions = new SupplierActions(); + } + + public function test_supplier_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Supplier::factory()) + )->create(); + + $supplier = $user->companies()->inRandomOrder()->first() + ->suppliers()->inRandomOrder()->first(); + $result = $this->supplierActions->delete($supplier); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('suppliers', [ + 'id' => $supplier->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/SupplierActions/SupplierActionsEditTest.php b/api/tests/Unit/Actions/SupplierActions/SupplierActionsEditTest.php new file mode 100644 index 000000000..e01e9e954 --- /dev/null +++ b/api/tests/Unit/Actions/SupplierActions/SupplierActionsEditTest.php @@ -0,0 +1,84 @@ +supplierActions = new SupplierActions(); + } + + public function test_supplier_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Supplier::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $supplier = $company->suppliers()->inRandomOrder()->first(); + + $payload = Supplier::factory()->make()->toArray(); + + $dto = new \App\DTOs\SupplierUpdateDTO( + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + city: $payload['city'], + paymentTermType: $payload['payment_term_type'], + paymentTerm: $payload['payment_term'], + taxableEnterprise: $payload['taxable_enterprise'], + taxId: $payload['tax_id'], + remarks: $payload['remarks'], + status: $payload['status'] + ); + + $result = $this->supplierActions->update($supplier, $dto); + $this->assertInstanceOf(Supplier::class, $result); + $this->assertDatabaseHas('suppliers', [ + 'id' => $supplier->id, + 'company_id' => $supplier->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'address' => $payload['address'], + 'city' => $payload['city'], + 'payment_term_type' => $payload['payment_term_type'], + 'payment_term' => $payload['payment_term'], + 'taxable_enterprise' => $payload['taxable_enterprise'], + 'tax_id' => $payload['tax_id'], + 'status' => $payload['status'], + 'remarks' => $payload['remarks'], + ]); + } + + public function test_supplier_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Supplier::factory()) + )->create(); + + $supplier = $user->companies()->inRandomOrder()->first() + ->suppliers()->inRandomOrder()->first(); + + $payload = []; + + $dto = new \App\DTOs\SupplierUpdateDTO(); + + $this->supplierActions->update($supplier, $dto); + } +} diff --git a/api/tests/Unit/Actions/SupplierActions/SupplierActionsReadTest.php b/api/tests/Unit/Actions/SupplierActions/SupplierActionsReadTest.php new file mode 100644 index 000000000..1bd3fd3cb --- /dev/null +++ b/api/tests/Unit/Actions/SupplierActions/SupplierActionsReadTest.php @@ -0,0 +1,164 @@ +supplierActions = new SupplierActions(); + } + + public function test_supplier_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + Supplier::factory()->for($company)->for($user) + ->create(); + + $result = $this->supplierActions->readAny( + user: $user, + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_supplier_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Supplier::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->supplierActions->readAny( + user: $user, + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_supplier_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->supplierActions->readAny( + user: User::factory()->create(), + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_supplier_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $supplierCount = 4; + $idxTest = random_int(0, $supplierCount - 1); + $defaultName = Supplier::factory()->make()->name; + $testname = Supplier::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Supplier::factory()->count($supplierCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->supplierActions->readAny( + user: $user, + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_supplier_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_supplier_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_supplier_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Supplier::factory()) + )->create(); + + $supplier = $user->companies()->inRandomOrder()->first() + ->suppliers()->inRandomOrder()->first(); + + $result = $this->supplierActions->read($supplier); + + $this->assertInstanceOf(Supplier::class, $result); + } +} diff --git a/api/tests/Unit/Actions/UnitActions/UnitActionsCreateTest.php b/api/tests/Unit/Actions/UnitActions/UnitActionsCreateTest.php new file mode 100644 index 000000000..5894985df --- /dev/null +++ b/api/tests/Unit/Actions/UnitActions/UnitActionsCreateTest.php @@ -0,0 +1,59 @@ +unitActions = new UnitActions(); + } + + public function test_unit_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault()) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $payload = Unit::factory()->for($company) + ->make()->toArray(); + + $dto = new \App\DTOs\UnitCreateDTO( + companyId: $payload['company_id'], + code: $payload['code'], + name: $payload['name'], + description: $payload['description'], + type: $payload['type'] + ); + + $result = $this->unitActions->create($dto); + $this->assertDatabaseHas('units', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + 'description' => $payload['description'], + 'type' => $payload['type'], + ]); + } + + public function test_unit_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + $dto = new \App\DTOs\UnitCreateDTO(); + + $this->unitActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/UnitActions/UnitActionsDeleteTest.php b/api/tests/Unit/Actions/UnitActions/UnitActionsDeleteTest.php new file mode 100644 index 000000000..c58bd1ced --- /dev/null +++ b/api/tests/Unit/Actions/UnitActions/UnitActionsDeleteTest.php @@ -0,0 +1,39 @@ +unitActions = new UnitActions(); + } + + public function test_unit_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Unit::factory()) + )->create(); + + $unit = $user->companies()->inRandomOrder()->first() + ->units()->inRandomOrder()->first(); + $result = $this->unitActions->delete($unit); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('units', [ + 'id' => $unit->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/UnitActions/UnitActionsEditTest.php b/api/tests/Unit/Actions/UnitActions/UnitActionsEditTest.php new file mode 100644 index 000000000..1bbddc8d2 --- /dev/null +++ b/api/tests/Unit/Actions/UnitActions/UnitActionsEditTest.php @@ -0,0 +1,72 @@ +unitActions = new UnitActions(); + } + + public function test_unit_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Unit::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + $unit = $company->units()->inRandomOrder()->first(); + + $payload = Unit::factory()->make()->toArray(); + + $dto = new \App\DTOs\UnitUpdateDTO( + code: $payload['code'], + name: $payload['name'], + description: $payload['description'], + type: $payload['type'] + ); + + $result = $this->unitActions->update($unit, $dto); + $this->assertInstanceOf(Unit::class, $result); + $this->assertDatabaseHas('units', [ + 'id' => $unit->id, + 'company_id' => $unit->company_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + 'description' => $payload['description'], + 'type' => $payload['type'], + ]); + } + + public function test_unit_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(Exception::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Unit::factory()) + )->create(); + + $unit = $user->companies()->inRandomOrder()->first() + ->units()->inRandomOrder()->first(); + + $payload = []; + + $dto = new \App\DTOs\UnitUpdateDTO(); + + $this->unitActions->update($unit, $dto); + } +} diff --git a/api/tests/Unit/Actions/UnitActions/UnitActionsReadTest.php b/api/tests/Unit/Actions/UnitActions/UnitActionsReadTest.php new file mode 100644 index 000000000..73feafb3d --- /dev/null +++ b/api/tests/Unit/Actions/UnitActions/UnitActionsReadTest.php @@ -0,0 +1,158 @@ +unitActions = new UnitActions(); + } + + public function test_unit_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Unit::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->unitActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_unit_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Unit::factory()) + )->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->unitActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_unit_actions_call_read_any_with_nonexistance_companyId_expect_empty_collection() + { + $maxId = Company::max('id') + 1; + + $result = $this->unitActions->readAny( + companyId: $maxId, + useCache: true, + withTrashed: false, + + search: '', + + paginate: false, + page: null, + perPage: null, + limit: 10 + ); + + $this->assertInstanceOf(Collection::class, $result); + $this->assertEmpty($result); + } + + public function test_unit_actions_call_read_any_with_search_parameter_expect_filtered_results() + { + $unitCount = 4; + $idxTest = random_int(0, $unitCount - 1); + $defaultName = Unit::factory()->make()->name; + $testname = Unit::factory()->insertStringInName('testing')->make()->name; + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Unit::factory()->count($unitCount) + ->state(new Sequence( + fn (Sequence $sequence) => [ + 'name' => $sequence->index == $idxTest ? $testname : $defaultName, + ] + )) + ) + ) + ->create(); + + $company = $user->companies()->inRandomOrder()->first(); + + $result = $this->unitActions->readAny( + companyId: $company->id, + useCache: true, + withTrashed: false, + + search: 'testing', + + paginate: true, + page: 1, + perPage: 10, + limit: null + ); + + $this->assertInstanceOf(Paginator::class, $result); + $this->assertTrue($result->total() == 1); + } + + public function test_unit_actions_call_read_any_with_page_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_unit_actions_call_read_any_with_perpage_parameter_negative_expect_results() + { + $this->markTestIncomplete('Need to implement test'); + } + + public function test_unit_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Unit::factory()) + )->create(); + + $unit = $user->companies()->inRandomOrder()->first() + ->units()->inRandomOrder()->first(); + + $result = $this->unitActions->read($unit); + + $this->assertInstanceOf(Unit::class, $result); + } +} diff --git a/api/tests/Unit/Actions/UserActions/UserActionsCreateTest.php b/api/tests/Unit/Actions/UserActions/UserActionsCreateTest.php index e136fd763..0e6630b27 100644 --- a/api/tests/Unit/Actions/UserActions/UserActionsCreateTest.php +++ b/api/tests/Unit/Actions/UserActions/UserActionsCreateTest.php @@ -3,7 +3,7 @@ namespace Tests\Unit\Actions\UserActions; use App\Actions\User\UserActions; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Profile; use App\Models\Role; use App\Models\User; @@ -31,7 +31,7 @@ public function test_user_actions_call_create_expect_db_has_record() $userArr['password'] = 'test123'; $rolesArr = []; - array_push($rolesArr, Role::where('name', '=', UserRoles::DEVELOPER->value)->first()->id); + array_push($rolesArr, Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()->id); $result = $this->userActions->create( $userArr, @@ -69,5 +69,9 @@ public function test_user_actions_call_create_with_empty_array_parameters_expect $rolesArr, $profileArr ); + + $userArr = []; + $rolesArr = []; + $profileArr = []; } } diff --git a/api/tests/Unit/Actions/UserActions/UserActionsEditTest.php b/api/tests/Unit/Actions/UserActions/UserActionsEditTest.php index 908bac235..6eada7aee 100644 --- a/api/tests/Unit/Actions/UserActions/UserActionsEditTest.php +++ b/api/tests/Unit/Actions/UserActions/UserActionsEditTest.php @@ -3,7 +3,7 @@ namespace Tests\Unit\Actions\UserActions; use App\Actions\User\UserActions; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Profile; use App\Models\Role; use App\Models\User; @@ -31,7 +31,7 @@ public function test_user_actions_call_update_expect_db_updated() $userArr['password'] = 'test123'; $rolesArr = []; - array_push($rolesArr, Role::where('name', '=', UserRoles::DEVELOPER->value)->first()->id); + array_push($rolesArr, Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()->id); $user = $this->userActions->create( $userArr, @@ -47,7 +47,7 @@ public function test_user_actions_call_update_expect_db_updated() $newUserArr['password'] = 'test123'; $newRolesArr = []; - array_push($newRolesArr, Role::where('name', '=', UserRoles::DEVELOPER->value)->first()->id); + array_push($newRolesArr, Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()->id); $result = $this->userActions->update( $user, @@ -86,7 +86,7 @@ public function test_user_actions_call_update_with_empty_array_parameters_expect $userArr['password'] = 'test123'; $rolesArr = []; - array_push($rolesArr, Role::where('name', '=', UserRoles::DEVELOPER->value)->first()->id); + array_push($rolesArr, Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()->id); $user = $this->userActions->create( $userArr, diff --git a/api/tests/Unit/Actions/UserActions/UserActionsReadTest.php b/api/tests/Unit/Actions/UserActions/UserActionsReadTest.php index 88034cbc0..49b98ee52 100644 --- a/api/tests/Unit/Actions/UserActions/UserActionsReadTest.php +++ b/api/tests/Unit/Actions/UserActions/UserActionsReadTest.php @@ -3,7 +3,7 @@ namespace Tests\Unit\Actions\UserActions; use App\Actions\User\UserActions; -use App\Enums\UserRoles; +use App\Enums\UserRolesEnum; use App\Models\Profile; use App\Models\Role; use App\Models\User; @@ -69,7 +69,7 @@ public function test_user_actions_call_read_any_with_search_parameter_expect_fil $userArr['password'] = 'test123'; $rolesArr = []; - array_push($rolesArr, Role::where('name', '=', UserRoles::DEVELOPER->value)->first()->id); + array_push($rolesArr, Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()->id); $this->userActions->create( $userArr, @@ -109,7 +109,7 @@ public function test_user_actions_call_read_any_with_page_parameter_negative_exp $userArr['password'] = 'test123'; $rolesArr = []; - array_push($rolesArr, Role::where('name', '=', UserRoles::DEVELOPER->value)->first()->id); + array_push($rolesArr, Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()->id); $this->userActions->create( $userArr, @@ -148,7 +148,7 @@ public function test_user_actions_call_read_any_with_perpage_parameter_negative_ $userArr['password'] = 'test123'; $rolesArr = []; - array_push($rolesArr, Role::where('name', '=', UserRoles::DEVELOPER->value)->first()->id); + array_push($rolesArr, Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()->id); $this->userActions->create( $userArr, @@ -178,7 +178,7 @@ public function test_user_actions_call_read_expect_object() $userArr['password'] = 'test123'; $rolesArr = []; - array_push($rolesArr, Role::where('name', '=', UserRoles::DEVELOPER->value)->first()->id); + array_push($rolesArr, Role::where('name', '=', UserRolesEnum::DEVELOPER->value)->first()->id); $result = $this->userActions->create( $userArr, diff --git a/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsCreateTest.php b/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsCreateTest.php new file mode 100644 index 000000000..766d2cdb9 --- /dev/null +++ b/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsCreateTest.php @@ -0,0 +1,66 @@ +warehouseActions = new WarehouseActions(); + } + + public function test_warehouse_actions_call_create_expect_db_has_record() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + ) + ->create(); + + $company = $user->companies()->first(); + $branch = $company->branches()->first(); + $payload = Warehouse::factory()->for($company)->for($branch)->make()->toArray(); + + $dto = new WarehouseCreateDTO( + companyId: $payload['company_id'], + branchId: $payload['branch_id'], + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + city: $payload['city'], + contact: $payload['contact'], + remarks: $payload['remarks'], + status: $payload['status'], + ); + + $result = $this->warehouseActions->create($dto); + $this->assertDatabaseHas('warehouses', [ + 'id' => $result->id, + 'company_id' => $payload['company_id'], + 'branch_id' => $payload['branch_id'], + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_warehouse_actions_call_create_with_empty_array_parameters_expect_exception() + { + $this->expectException(ArgumentCountError::class); + $dto = new WarehouseCreateDTO(...[]); + + $this->warehouseActions->create($dto); + } +} diff --git a/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsDeleteTest.php b/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsDeleteTest.php new file mode 100644 index 000000000..277cb224b --- /dev/null +++ b/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsDeleteTest.php @@ -0,0 +1,43 @@ +warehouseActions = new WarehouseActions(); + } + + public function test_warehouse_actions_call_delete_expect_bool() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + ) + ->create(); + + $company = $user->companies()->first(); + $branch = $company->branches()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $result = $this->warehouseActions->delete($warehouse); + + $this->assertIsBool($result); + $this->assertTrue($result); + $this->assertSoftDeleted('warehouses', [ + 'id' => $warehouse->id, + ]); + } +} diff --git a/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsEditTest.php b/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsEditTest.php new file mode 100644 index 000000000..3fa7775bd --- /dev/null +++ b/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsEditTest.php @@ -0,0 +1,78 @@ +warehouseActions = new WarehouseActions(); + } + + public function test_warehouse_actions_call_update_expect_db_updated() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + ) + ->create(); + + $company = $user->companies()->first(); + $branch = $company->branches()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + $payload = Warehouse::factory()->make()->toArray(); + + $dto = new WarehouseUpdateDTO( + code: $payload['code'], + name: $payload['name'], + address: $payload['address'], + city: $payload['city'], + contact: $payload['contact'], + remarks: $payload['remarks'], + status: $payload['status'], + ); + + $result = $this->warehouseActions->update($warehouse, $dto); + $this->assertInstanceOf(Warehouse::class, $result); + $this->assertDatabaseHas('warehouses', [ + 'id' => $warehouse->id, + 'company_id' => $warehouse->company_id, + 'branch_id' => $warehouse->branch_id, + 'code' => $payload['code'], + 'name' => $payload['name'], + ]); + } + + public function test_warehouse_actions_call_update_with_empty_array_parameters_expect_exception() + { + $this->expectException(ArgumentCountError::class); + + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + ) + ->create(); + + $warehouse = Warehouse::factory() + ->for($user->companies()->first()) + ->for($user->companies()->first()->branches()->first()) + ->create(); + + $dto = new WarehouseUpdateDTO(...[]); + + $this->warehouseActions->update($warehouse, $dto); + } +} diff --git a/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsReadTest.php b/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsReadTest.php new file mode 100644 index 000000000..4c869fda7 --- /dev/null +++ b/api/tests/Unit/Actions/WarehouseActions/WarehouseActionsReadTest.php @@ -0,0 +1,104 @@ +warehouseActions = new WarehouseActions(); + } + + public function test_warehouse_actions_call_read_any_with_paginate_true_expect_paginator_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + ) + ->create(); + + $company = $user->companies()->first(); + $branch = $company->branches()->first(); + Warehouse::factory()->count(2)->for($company)->for($branch)->create(); + + $result = $this->warehouseActions->readAny( + withTrashed: false, + companyId: $company->id, + branchId: null, + search: '', + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: new ExecutePaginationDTO( + page: 1, + perPage: 10, + ), + get: null, + ), + ); + + $this->assertInstanceOf(Paginator::class, $result); + } + + public function test_warehouse_actions_call_read_any_with_paginate_false_expect_collection_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + ) + ->create(); + + $company = $user->companies()->first(); + $branch = $company->branches()->first(); + Warehouse::factory()->count(2)->for($company)->for($branch)->create(); + + $result = $this->warehouseActions->readAny( + withTrashed: false, + companyId: $company->id, + branchId: null, + search: '', + status: null, + includeId: null, + execute: new ExecuteDTO( + useCache: true, + pagination: null, + get: null, + ), + ); + + $this->assertInstanceOf(Collection::class, $result); + } + + public function test_warehouse_actions_call_read_expect_object() + { + $user = User::factory() + ->has(Company::factory()->setStatusActive()->setIsDefault() + ->has(Branch::factory()->setStatusActive()->setIsMainBranch()) + ) + ->create(); + + $company = $user->companies()->first(); + $branch = $company->branches()->first(); + $warehouse = Warehouse::factory()->for($company)->for($branch)->create(); + + $result = $this->warehouseActions->read($warehouse); + + $this->assertInstanceOf(Warehouse::class, $result); + } +} diff --git a/promp-visualization.html b/promp-visualization.html new file mode 100644 index 000000000..d1519340b --- /dev/null +++ b/promp-visualization.html @@ -0,0 +1,392 @@ + + + + + + Visualisasi Jurnal + + + +
+
+

Kenapa Jurnal Biasanya Pakai 2 Tabel?

+

+ Buat programmer baru, ini sering bikin bingung. Di layar, kita merasa sedang bikin + 1 jurnal. Tapi di database, 1 jurnal itu biasanya punya + 1 header dan banyak baris debit/kredit. +

+
+
1 jurnal di UI
+
1 header di database
+
bisa punya banyak lines
+
lebih rapi dan fleksibel
+
+
+ +
+
+
Yang sering terasa
+

"Kayaknya cukup 1 tabel aja"

+

+ Perasaan ini wajar, karena user memang input 1 dokumen jurnal. + Masalahnya, isi jurnal hampir selalu punya lebih dari 1 baris akun. +

+
    +
  • Kas debit
  • +
  • Pendapatan kredit
  • +
  • PPN kredit
  • +
  • Piutang debit
  • +
+
+ +
+
Yang lebih aman
+

1 header + banyak line

+

+ Header menyimpan data umum jurnal. Line menyimpan tiap akun dan nominalnya. + Jadi data tidak diulang-ulang. +

+
    +
  • Header: kode, tanggal, sumber, memo
  • +
  • Line: akun, debit, kredit, urutan
  • +
+
+
+ +
+
+

`journal_entries`

+
company_id 1
+
code JRN-0001
+
date 2026-05-10 10:15
+
source_type Sale
+
source_id 15
+
remarks Jurnal dari penjualan
+
+ +
+ 1:N + 1 header punya banyak line +
+ +
+

`journal_entry_lines`

+
line 1 Kas, debit 150.000
+
line 2 Penjualan, kredit 135.000
+
line 3 PPN Keluaran, kredit 15.000
+
+
+ +
+

Contoh Nyata

+

+ Misalnya ada penjualan tunai Rp150.000. User merasa input 1 transaksi, + tapi jurnalnya punya beberapa baris. +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Header Jurnal
KodeJRN-0001
Tanggal10 Mei 2026
SumberPenjualan #SALE-0015
MemoPosting otomatis dari penjualan
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
AkunDebitKredit
Kas150.000-
Pendapatan Penjualan-135.000
PPN Keluaran-15.000
+
+
+
+ +
+

Kenapa 2 Tabel Lebih Enak?

+
    +
  • Tidak duplikat data header: kode, tanggal, sumber tidak perlu diulang di setiap baris.
  • +
  • Lebih fleksibel: 1 jurnal bisa 2 line, 3 line, 10 line, bebas.
  • +
  • Lebih gampang validasi: total debit dan total kredit tinggal dicek dari line.
  • +
  • Lebih nyambung ke transaksi lain: penjualan, pembelian, expense, semua bisa jadi sumber 1 header jurnal.
  • +
  • Lebih aman untuk laporan: buku besar dan trial balance biasanya memang baca dari detail line.
  • +
+
+
+ + diff --git a/temp.txt b/temp.txt new file mode 100644 index 000000000..3d691e883 --- /dev/null +++ b/temp.txt @@ -0,0 +1,62 @@ +purchase_requisitions +- id +- ulid +- company_id +- branch_id +- code +- date +- required_date +- priority +- requestor_user_id +- purpose +- remarks +- is_closed +- closed_at +- created_by +- updated_by +- deleted_by +- created_at +- updated_at +- deleted_at + +purchase_requisition_product_units +- id +- ulid +- company_id +- branch_id +- purchase_requisition_id +- product_unit_id +- qty +- product_unit_conversion_value +- product_unit_qty_base +- needed_date +- remarks +- created_by +- updated_by +- deleted_by +- created_at +- updated_at +- deleted_at + +purchase_requisition_approvals +- id +- ulid +- company_id +- branch_id +- purchase_requisition_id +- approval_code +- approval_level +- approver_user_id +- requested_at +- is_mandatory +- is_approved +- approved_at +- is_rejected +- rejected_at +- remarks +- created_by +- updated_by +- deleted_by +- created_at +- updated_at +- deleted_at diff --git a/web/.gitignore b/web/.gitignore index 4f7ad094a..55f829e8c 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -9,7 +9,6 @@ lerna-debug.log* node_modules .DS_Store -dist dist-ssr coverage *.local @@ -30,4 +29,5 @@ coverage *.tsbuildinfo /.vscode -.env \ No newline at end of file +.env +/public/config.js \ No newline at end of file diff --git a/web/.prettierrc b/web/.prettierrc new file mode 100644 index 000000000..278a3c3f1 --- /dev/null +++ b/web/.prettierrc @@ -0,0 +1,13 @@ +{ + "printWidth": 120, + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "trailingComma": "all", + "jsxBracketSameLine": false, + "htmlWhitespaceSensitivity": "ignore", + "vueIndentScriptAndStyle": true, + "arrowParens": "always", + "bracketSpacing": true, + "jsxSingleQuote": true +} diff --git a/web/README.md b/web/README.md index af432704b..0f511d110 100644 --- a/web/README.md +++ b/web/README.md @@ -6,10 +6,10 @@ DCSLab - Vue Web Run the installation scripts ->`$ npm install` +> `$ npm install` ## Run Dev Server Use vite for dev Server ->`$ npm run dev` +> `$ npm run dev` diff --git a/web/dist/.htaccess b/web/dist/.htaccess new file mode 100644 index 000000000..b0e00a120 --- /dev/null +++ b/web/dist/.htaccess @@ -0,0 +1,8 @@ + + RewriteEngine On + RewriteBase / + RewriteRule ^index\.html$ - [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule . /index.html [L] + \ No newline at end of file diff --git a/web/dist/assets/accounting_system-DS1yDazM.jpg b/web/dist/assets/accounting_system-DS1yDazM.jpg new file mode 100644 index 000000000..59d0c3575 Binary files /dev/null and b/web/dist/assets/accounting_system-DS1yDazM.jpg differ diff --git a/web/dist/assets/def-user-CUyK0U-V.png b/web/dist/assets/def-user-CUyK0U-V.png new file mode 100644 index 000000000..fcc6d82ec Binary files /dev/null and b/web/dist/assets/def-user-CUyK0U-V.png differ diff --git a/web/dist/assets/enigma-VF8rWhPh.png b/web/dist/assets/enigma-VF8rWhPh.png new file mode 100644 index 000000000..8e0df73f2 Binary files /dev/null and b/web/dist/assets/enigma-VF8rWhPh.png differ diff --git a/web/dist/assets/google-play-badge-BAXiFmDF.png b/web/dist/assets/google-play-badge-BAXiFmDF.png new file mode 100644 index 000000000..131f3acaa Binary files /dev/null and b/web/dist/assets/google-play-badge-BAXiFmDF.png differ diff --git a/web/dist/assets/icewall-C6bJAm8N.png b/web/dist/assets/icewall-C6bJAm8N.png new file mode 100644 index 000000000..fecc0e3d1 Binary files /dev/null and b/web/dist/assets/icewall-C6bJAm8N.png differ diff --git a/web/dist/assets/illustration-DoVs3XZq.svg b/web/dist/assets/illustration-DoVs3XZq.svg new file mode 100644 index 000000000..a0ae933b9 --- /dev/null +++ b/web/dist/assets/illustration-DoVs3XZq.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/dist/assets/index-Dzd_0sNX.js b/web/dist/assets/index-Dzd_0sNX.js new file mode 100644 index 000000000..57ab705cb --- /dev/null +++ b/web/dist/assets/index-Dzd_0sNX.js @@ -0,0 +1,6953 @@ +var lQ=Object.defineProperty;var cQ=(n,e,a)=>e in n?lQ(n,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):n[e]=a;var dQ=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var mt=(n,e,a)=>(cQ(n,typeof e!="symbol"?e+"":e,a),a);var qot=dQ((ks,bs)=>{(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function a(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(o){if(o.ep)return;o.ep=!0;const r=a(o);fetch(o.href,r)}})();/** +* @vue/shared v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function tT(n,e){const a=new Set(n.split(","));return e?s=>a.has(s.toLowerCase()):s=>a.has(s)}const qa={},fc=[],Os=()=>{},uQ=()=>!1,PL=n=>n.charCodeAt(0)===111&&n.charCodeAt(1)===110&&(n.charCodeAt(2)>122||n.charCodeAt(2)<97),aT=n=>n.startsWith("onUpdate:"),Mn=Object.assign,nT=(n,e)=>{const a=n.indexOf(e);a>-1&&n.splice(a,1)},pQ=Object.prototype.hasOwnProperty,ka=(n,e)=>pQ.call(n,e),Tt=Array.isArray,mc=n=>nu(n)==="[object Map]",Pc=n=>nu(n)==="[object Set]",lO=n=>nu(n)==="[object Date]",Yt=n=>typeof n=="function",sn=n=>typeof n=="string",Br=n=>typeof n=="symbol",Pa=n=>n!==null&&typeof n=="object",ZF=n=>(Pa(n)||Yt(n))&&Yt(n.then)&&Yt(n.catch),KF=Object.prototype.toString,nu=n=>KF.call(n),hQ=n=>nu(n).slice(8,-1),XF=n=>nu(n)==="[object Object]",sT=n=>sn(n)&&n!=="NaN"&&n[0]!=="-"&&""+parseInt(n,10)===n,bd=tT(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),DL=n=>{const e=Object.create(null);return a=>e[a]||(e[a]=n(a))},fQ=/-(\w)/g,Io=DL(n=>n.replace(fQ,(e,a)=>a?a.toUpperCase():"")),mQ=/\B([A-Z])/g,Ul=DL(n=>n.replace(mQ,"-$1").toLowerCase()),RL=DL(n=>n.charAt(0).toUpperCase()+n.slice(1)),R$=DL(n=>n?`on${RL(n)}`:""),qr=(n,e)=>!Object.is(n,e),A1=(n,e)=>{for(let a=0;a{Object.defineProperty(n,e,{configurable:!0,enumerable:!1,value:a})},Od=n=>{const e=parseFloat(n);return isNaN(e)?n:e},vQ=n=>{const e=sn(n)?Number(n):NaN;return isNaN(e)?n:e};let cO;const YF=()=>cO||(cO=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function oT(n){if(Tt(n)){const e={};for(let a=0;a{if(a){const s=a.split(_Q);s.length>1&&(e[s[0].trim()]=s[1].trim())}}),e}function F(n){let e="";if(sn(n))e=n;else if(Tt(n))for(let a=0;aRl(a,e))}const _=n=>sn(n)?n:n==null?"":Tt(n)||Pa(n)&&(n.toString===KF||!Yt(n.toString))?JSON.stringify(n,JF,2):String(n),JF=(n,e)=>e&&e.__v_isRef?JF(n,e.value):mc(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((a,[s,o],r)=>(a[O$(s,r)+" =>"]=o,a),{})}:Pc(e)?{[`Set(${e.size})`]:[...e.values()].map(a=>O$(a))}:Br(e)?O$(e):Pa(e)&&!Tt(e)&&!XF(e)?String(e):e,O$=(n,e="")=>{var a;return Br(n)?`Symbol(${(a=n.description)!=null?a:e})`:n};/** +* @vue/reactivity v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ys;class ej{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=ys,!e&&ys&&(this.index=(ys.scopes||(ys.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const a=ys;try{return ys=this,e()}finally{ys=a}}}on(){ys=this}off(){ys=this.parent}stop(e){if(this._active){let a,s;for(a=0,s=this.effects.length;a=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),jl()}return this._dirtyLevel>=4}set dirty(e){this._dirtyLevel=e?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let e=Hr,a=Tl;try{return Hr=!0,Tl=this,this._runnings++,dO(this),this.fn()}finally{uO(this),this._runnings--,Tl=a,Hr=e}}stop(){var e;this.active&&(dO(this),uO(this),(e=this.onStop)==null||e.call(this),this.active=!1)}}function SQ(n){return n.value}function dO(n){n._trackId++,n._depsLength=0}function uO(n){if(n.deps.length>n._depsLength){for(let e=n._depsLength;e{const a=new Map;return a.cleanup=n,a.computed=e,a},cL=new WeakMap,Pl=Symbol(""),UA=Symbol("");function os(n,e,a){if(Hr&&Tl){let s=cL.get(n);s||cL.set(n,s=new Map);let o=s.get(a);o||s.set(a,o=rj(()=>s.delete(a))),sj(Tl,o)}}function er(n,e,a,s,o,r){const i=cL.get(n);if(!i)return;let u=[];if(e==="clear")u=[...i.values()];else if(a==="length"&&Tt(n)){const h=Number(s);i.forEach((m,p)=>{(p==="length"||!Br(p)&&p>=h)&&u.push(m)})}else switch(a!==void 0&&u.push(i.get(a)),e){case"add":Tt(n)?sT(a)&&u.push(i.get("length")):(u.push(i.get(Pl)),mc(n)&&u.push(i.get(UA)));break;case"delete":Tt(n)||(u.push(i.get(Pl)),mc(n)&&u.push(i.get(UA)));break;case"set":mc(n)&&u.push(i.get(Pl));break}cT();for(const h of u)h&&oj(h,4);dT()}function IQ(n,e){var a;return(a=cL.get(n))==null?void 0:a.get(e)}const LQ=tT("__proto__,__v_isRef,__isVue"),ij=new Set(Object.getOwnPropertyNames(Symbol).filter(n=>n!=="arguments"&&n!=="caller").map(n=>Symbol[n]).filter(Br)),pO=$Q();function $Q(){const n={};return["includes","indexOf","lastIndexOf"].forEach(e=>{n[e]=function(...a){const s=pa(this);for(let r=0,i=this.length;r{n[e]=function(...a){Fl(),cT();const s=pa(this)[e].apply(this,a);return dT(),jl(),s}}),n}function AQ(n){const e=pa(this);return os(e,"has",n),e.hasOwnProperty(n)}class lj{constructor(e=!1,a=!1){this._isReadonly=e,this._isShallow=a}get(e,a,s){const o=this._isReadonly,r=this._isShallow;if(a==="__v_isReactive")return!o;if(a==="__v_isReadonly")return o;if(a==="__v_isShallow")return r;if(a==="__v_raw")return s===(o?r?zQ:pj:r?uj:dj).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(s)?e:void 0;const i=Tt(e);if(!o){if(i&&ka(pO,a))return Reflect.get(pO,a,s);if(a==="hasOwnProperty")return AQ}const u=Reflect.get(e,a,s);return(Br(a)?ij.has(a):LQ(a))||(o||os(e,"get",a),r)?u:on(u)?i&&sT(a)?u:u.value:Pa(u)?o?fj(u):gn(u):u}}class cj extends lj{constructor(e=!1){super(!1,e)}set(e,a,s,o){let r=e[a];if(!this._isShallow){const h=gc(r);if(!dL(s)&&!gc(s)&&(r=pa(r),s=pa(s)),!Tt(e)&&on(r)&&!on(s))return h?!1:(r.value=s,!0)}const i=Tt(e)&&sT(a)?Number(a)n,OL=n=>Reflect.getPrototypeOf(n);function c1(n,e,a=!1,s=!1){n=n.__v_raw;const o=pa(n),r=pa(e);a||(qr(e,r)&&os(o,"get",e),os(o,"get",r));const{has:i}=OL(o),u=s?uT:a?fT:Vd;if(i.call(o,e))return u(n.get(e));if(i.call(o,r))return u(n.get(r));n!==o&&n.get(e)}function d1(n,e=!1){const a=this.__v_raw,s=pa(a),o=pa(n);return e||(qr(n,o)&&os(s,"has",n),os(s,"has",o)),n===o?a.has(n):a.has(n)||a.has(o)}function u1(n,e=!1){return n=n.__v_raw,!e&&os(pa(n),"iterate",Pl),Reflect.get(n,"size",n)}function hO(n){n=pa(n);const e=pa(this);return OL(e).has.call(e,n)||(e.add(n),er(e,"add",n,n)),this}function fO(n,e){e=pa(e);const a=pa(this),{has:s,get:o}=OL(a);let r=s.call(a,n);r||(n=pa(n),r=s.call(a,n));const i=o.call(a,n);return a.set(n,e),r?qr(e,i)&&er(a,"set",n,e):er(a,"add",n,e),this}function mO(n){const e=pa(this),{has:a,get:s}=OL(e);let o=a.call(e,n);o||(n=pa(n),o=a.call(e,n)),s&&s.call(e,n);const r=e.delete(n);return o&&er(e,"delete",n,void 0),r}function vO(){const n=pa(this),e=n.size!==0,a=n.clear();return e&&er(n,"clear",void 0,void 0),a}function p1(n,e){return function(s,o){const r=this,i=r.__v_raw,u=pa(i),h=e?uT:n?fT:Vd;return!n&&os(u,"iterate",Pl),i.forEach((m,p)=>s.call(o,h(m),h(p),r))}}function h1(n,e,a){return function(...s){const o=this.__v_raw,r=pa(o),i=mc(r),u=n==="entries"||n===Symbol.iterator&&i,h=n==="keys"&&i,m=o[n](...s),p=a?uT:e?fT:Vd;return!e&&os(r,"iterate",h?UA:Pl),{next(){const{value:b,done:x}=m.next();return x?{value:b,done:x}:{value:u?[p(b[0]),p(b[1])]:p(b),done:x}},[Symbol.iterator](){return this}}}}function br(n){return function(...e){return n==="delete"?!1:n==="clear"?void 0:this}}function RQ(){const n={get(r){return c1(this,r)},get size(){return u1(this)},has:d1,add:hO,set:fO,delete:mO,clear:vO,forEach:p1(!1,!1)},e={get(r){return c1(this,r,!1,!0)},get size(){return u1(this)},has:d1,add:hO,set:fO,delete:mO,clear:vO,forEach:p1(!1,!0)},a={get(r){return c1(this,r,!0)},get size(){return u1(this,!0)},has(r){return d1.call(this,r,!0)},add:br("add"),set:br("set"),delete:br("delete"),clear:br("clear"),forEach:p1(!0,!1)},s={get(r){return c1(this,r,!0,!0)},get size(){return u1(this,!0)},has(r){return d1.call(this,r,!0)},add:br("add"),set:br("set"),delete:br("delete"),clear:br("clear"),forEach:p1(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=h1(r,!1,!1),a[r]=h1(r,!0,!1),e[r]=h1(r,!1,!0),s[r]=h1(r,!0,!0)}),[n,a,e,s]}const[OQ,VQ,UQ,FQ]=RQ();function pT(n,e){const a=e?n?FQ:UQ:n?VQ:OQ;return(s,o,r)=>o==="__v_isReactive"?!n:o==="__v_isReadonly"?n:o==="__v_raw"?s:Reflect.get(ka(a,o)&&o in s?a:s,o,r)}const jQ={get:pT(!1,!1)},HQ={get:pT(!1,!0)},NQ={get:pT(!0,!1)},dj=new WeakMap,uj=new WeakMap,pj=new WeakMap,zQ=new WeakMap;function BQ(n){switch(n){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function qQ(n){return n.__v_skip||!Object.isExtensible(n)?0:BQ(hQ(n))}function gn(n){return gc(n)?n:hT(n,!1,TQ,jQ,dj)}function hj(n){return hT(n,!1,DQ,HQ,uj)}function fj(n){return hT(n,!0,PQ,NQ,pj)}function hT(n,e,a,s,o){if(!Pa(n)||n.__v_raw&&!(e&&n.__v_isReactive))return n;const r=o.get(n);if(r)return r;const i=qQ(n);if(i===0)return n;const u=new Proxy(n,i===2?s:a);return o.set(n,u),u}function tr(n){return gc(n)?tr(n.__v_raw):!!(n&&n.__v_isReactive)}function gc(n){return!!(n&&n.__v_isReadonly)}function dL(n){return!!(n&&n.__v_isShallow)}function mj(n){return tr(n)||gc(n)}function pa(n){const e=n&&n.__v_raw;return e?pa(e):n}function VL(n){return Object.isExtensible(n)&&lL(n,"__v_skip",!0),n}const Vd=n=>Pa(n)?gn(n):n,fT=n=>Pa(n)?fj(n):n;class vj{constructor(e,a,s,o){this.getter=e,this._setter=a,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new lT(()=>e(this._value),()=>E1(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=s}get value(){const e=pa(this);return(!e._cacheable||e.effect.dirty)&&qr(e._value,e._value=e.effect.run())&&E1(e,4),yj(e),e.effect._dirtyLevel>=2&&E1(e,2),e._value}set value(e){this._setter(e)}get _dirty(){return this.effect.dirty}set _dirty(e){this.effect.dirty=e}}function WQ(n,e,a=!1){let s,o;const r=Yt(n);return r?(s=n,o=Os):(s=n.get,o=n.set),new vj(s,o,r||!o,a)}function yj(n){var e;Hr&&Tl&&(n=pa(n),sj(Tl,(e=n.dep)!=null?e:n.dep=rj(()=>n.dep=void 0,n instanceof vj?n:void 0)))}function E1(n,e=4,a){n=pa(n);const s=n.dep;s&&oj(s,e)}function on(n){return!!(n&&n.__v_isRef===!0)}function O(n){return _j(n,!1)}function UL(n){return _j(n,!0)}function _j(n,e){return on(n)?n:new GQ(n,e)}class GQ{constructor(e,a){this.__v_isShallow=a,this.dep=void 0,this.__v_isRef=!0,this._rawValue=a?e:pa(e),this._value=a?e:Vd(e)}get value(){return yj(this),this._value}set value(e){const a=this.__v_isShallow||dL(e)||gc(e);e=a?e:pa(e),qr(e,this._rawValue)&&(this._rawValue=e,this._value=a?e:Vd(e),E1(this,4))}}function t(n){return on(n)?n.value:n}const ZQ={get:(n,e,a)=>t(Reflect.get(n,e,a)),set:(n,e,a,s)=>{const o=n[e];return on(o)&&!on(a)?(o.value=a,!0):Reflect.set(n,e,a,s)}};function gj(n){return tr(n)?n:new Proxy(n,ZQ)}function KQ(n){const e=Tt(n)?new Array(n.length):{};for(const a in n)e[a]=kj(n,a);return e}class XQ{constructor(e,a,s){this._object=e,this._key=a,this._defaultValue=s,this.__v_isRef=!0}get value(){const e=this._object[this._key];return e===void 0?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return IQ(pa(this._object),this._key)}}class YQ{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function An(n,e,a){return on(n)?n:Yt(n)?new YQ(n):Pa(n)&&arguments.length>1?kj(n,e,a):O(n)}function kj(n,e,a){const s=n[e];return on(s)?s:new XQ(n,e,a)}/** +* @vue/runtime-core v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Nr(n,e,a,s){try{return s?n(...s):n()}catch(o){FL(o,e,a)}}function Vs(n,e,a,s){if(Yt(n)){const r=Nr(n,e,a,s);return r&&ZF(r)&&r.catch(i=>{FL(i,e,a)}),r}const o=[];for(let r=0;r>>1,o=Hn[s],r=Fd(o);rwo&&Hn.splice(e,1)}function tJ(n){Tt(n)?vc.push(...n):(!Pr||!Pr.includes(n,n.allowRecurse?xl+1:xl))&&vc.push(n),wj()}function yO(n,e,a=Ud?wo+1:0){for(;aFd(a)-Fd(s));if(vc.length=0,Pr){Pr.push(...e);return}for(Pr=e,xl=0;xln.id==null?1/0:n.id,aJ=(n,e)=>{const a=Fd(n)-Fd(e);if(a===0){if(n.pre&&!e.pre)return-1;if(e.pre&&!n.pre)return 1}return a};function Mj(n){FA=!1,Ud=!0,Hn.sort(aJ);try{for(wo=0;wosn(w)?w.trim():w)),b&&(o=a.map(Od))}let u,h=s[u=R$(e)]||s[u=R$(Io(e))];!h&&r&&(h=s[u=R$(Ul(e))]),h&&Vs(h,n,6,o);const m=s[u+"Once"];if(m){if(!n.emitted)n.emitted={};else if(n.emitted[u])return;n.emitted[u]=!0,Vs(m,n,6,o)}}function Cj(n,e,a=!1){const s=e.emitsCache,o=s.get(n);if(o!==void 0)return o;const r=n.emits;let i={},u=!1;if(!Yt(n)){const h=m=>{const p=Cj(m,e,!0);p&&(u=!0,Mn(i,p))};!a&&e.mixins.length&&e.mixins.forEach(h),n.extends&&h(n.extends),n.mixins&&n.mixins.forEach(h)}return!r&&!u?(Pa(n)&&s.set(n,null),null):(Tt(r)?r.forEach(h=>i[h]=null):Mn(i,r),Pa(n)&&s.set(n,i),i)}function jL(n,e){return!n||!PL(e)?!1:(e=e.slice(2).replace(/Once$/,""),ka(n,e[0].toLowerCase()+e.slice(1))||ka(n,Ul(e))||ka(n,e))}let vn=null,Sj=null;function uL(n){const e=vn;return vn=n,Sj=n&&n.type.__scopeId||null,e}function f(n,e=vn,a){if(!e||n._n)return n;const s=(...o)=>{s._d&&EO(-1);const r=uL(e);let i;try{i=n(...o)}finally{uL(r),s._d&&EO(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function V$(n){const{type:e,vnode:a,proxy:s,withProxy:o,props:r,propsOptions:[i],slots:u,attrs:h,emit:m,render:p,renderCache:b,data:x,setupState:w,ctx:$,inheritAttrs:D}=n;let V,R;const E=uL(n);try{if(a.shapeFlag&4){const S=o||s,C=S;V=ko(p.call(C,S,b,r,w,x,$)),R=h}else{const S=e;V=ko(S.length>1?S(r,{attrs:h,slots:u,emit:m}):S(r,null)),R=e.props?h:sJ(h)}}catch(S){Cd.length=0,FL(S,n,1),V=l(Us)}let P=V;if(R&&D!==!1){const S=Object.keys(R),{shapeFlag:C}=P;S.length&&C&7&&(i&&S.some(aT)&&(R=oJ(R,i)),P=nr(P,R))}return a.dirs&&(P=nr(P),P.dirs=P.dirs?P.dirs.concat(a.dirs):a.dirs),a.transition&&(P.transition=a.transition),V=P,uL(E),V}const sJ=n=>{let e;for(const a in n)(a==="class"||a==="style"||PL(a))&&((e||(e={}))[a]=n[a]);return e},oJ=(n,e)=>{const a={};for(const s in n)(!aT(s)||!(s.slice(9)in e))&&(a[s]=n[s]);return a};function rJ(n,e,a){const{props:s,children:o,component:r}=n,{props:i,children:u,patchFlag:h}=e,m=r.emitsOptions;if(e.dirs||e.transition)return!0;if(a&&h>=0){if(h&1024)return!0;if(h&16)return s?_O(s,i,m):!!i;if(h&8){const p=e.dynamicProps;for(let b=0;bn.__isSuspense;function cJ(n,e){e&&e.pendingBranch?Tt(n)?e.effects.push(...n):e.effects.push(n):tJ(n)}const dJ=Symbol.for("v-scx"),uJ=()=>xt(dJ);function yn(n,e){return _T(n,null,e)}const f1={};function dt(n,e,a){return _T(n,e,a)}function _T(n,e,{immediate:a,deep:s,flush:o,once:r,onTrack:i,onTrigger:u}=qa){if(e&&r){const M=e;e=(...g)=>{M(...g),C()}}const h=$n,m=M=>s===!0?M:Ll(M,s===!1?1:void 0);let p,b=!1,x=!1;if(on(n)?(p=()=>n.value,b=dL(n)):tr(n)?(p=()=>m(n),b=!0):Tt(n)?(x=!0,b=n.some(M=>tr(M)||dL(M)),p=()=>n.map(M=>{if(on(M))return M.value;if(tr(M))return m(M);if(Yt(M))return Nr(M,h,2)})):Yt(n)?e?p=()=>Nr(n,h,2):p=()=>(w&&w(),Vs(n,h,3,[$])):p=Os,e&&s){const M=p;p=()=>Ll(M())}let w,$=M=>{w=P.onStop=()=>{Nr(M,h,4),w=P.onStop=void 0}},D;if(BL)if($=Os,e?a&&Vs(e,h,3,[p(),x?[]:void 0,$]):p(),o==="sync"){const M=uJ();D=M.__watcherHandles||(M.__watcherHandles=[])}else return Os;let V=x?new Array(n.length).fill(f1):f1;const R=()=>{if(!(!P.active||!P.dirty))if(e){const M=P.run();(s||b||(x?M.some((g,v)=>qr(g,V[v])):qr(M,V)))&&(w&&w(),Vs(e,h,3,[M,V===f1?void 0:x&&V[0]===f1?[]:V,$]),V=M)}else P.run()};R.allowRecurse=!!e;let E;o==="sync"?E=R:o==="post"?E=()=>as(R,h&&h.suspense):(R.pre=!0,h&&(R.id=h.uid),E=()=>vT(R));const P=new lT(p,Os,E),S=tj(),C=()=>{P.stop(),S&&nT(S.effects,P)};return e?a?R():V=P.run():o==="post"?as(P.run.bind(P),h&&h.suspense):P.run(),D&&D.push(C),C}function pJ(n,e,a){const s=this.proxy,o=sn(n)?n.includes(".")?$j(s,n):()=>s[n]:n.bind(s,s);let r;Yt(e)?r=e:(r=e.handler,a=e);const i=ou(this),u=_T(o,r.bind(s),a);return i(),u}function $j(n,e){const a=e.split(".");return()=>{let s=n;for(let o=0;o0){if(a>=e)return n;a++}if(s=s||new Set,s.has(n))return n;if(s.add(n),on(n))Ll(n.value,e,a,s);else if(Tt(n))for(let o=0;o{Ll(o,e,a,s)});else if(XF(n))for(const o in n)Ll(n[o],e,a,s);return n}function rs(n,e){if(vn===null)return n;const a=qL(vn)||vn.proxy,s=n.dirs||(n.dirs=[]);for(let o=0;o{n.isMounted=!0}),gT(()=>{n.isUnmounting=!0}),n}const Ts=[Function,Array],Aj={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ts,onEnter:Ts,onAfterEnter:Ts,onEnterCancelled:Ts,onBeforeLeave:Ts,onLeave:Ts,onAfterLeave:Ts,onLeaveCancelled:Ts,onBeforeAppear:Ts,onAppear:Ts,onAfterAppear:Ts,onAppearCancelled:Ts},fJ={name:"BaseTransition",props:Aj,setup(n,{slots:e}){const a=Wr(),s=hJ();return()=>{const o=e.default&&Tj(e.default(),!0);if(!o||!o.length)return;let r=o[0];if(o.length>1){for(const x of o)if(x.type!==Us){r=x;break}}const i=pa(n),{mode:u}=i;if(s.isLeaving)return U$(r);const h=kO(r);if(!h)return U$(r);const m=jA(h,i,s,a);HA(h,m);const p=a.subTree,b=p&&kO(p);if(b&&b.type!==Us&&!Ml(h,b)){const x=jA(b,i,s,a);if(HA(b,x),u==="out-in")return s.isLeaving=!0,x.afterLeave=()=>{s.isLeaving=!1,a.update.active!==!1&&(a.effect.dirty=!0,a.update())},U$(r);u==="in-out"&&h.type!==Us&&(x.delayLeave=(w,$,D)=>{const V=Ej(s,b);V[String(b.key)]=b,w[Dr]=()=>{$(),w[Dr]=void 0,delete m.delayedLeave},m.delayedLeave=D})}return r}}},mJ=fJ;function Ej(n,e){const{leavingVNodes:a}=n;let s=a.get(e.type);return s||(s=Object.create(null),a.set(e.type,s)),s}function jA(n,e,a,s){const{appear:o,mode:r,persisted:i=!1,onBeforeEnter:u,onEnter:h,onAfterEnter:m,onEnterCancelled:p,onBeforeLeave:b,onLeave:x,onAfterLeave:w,onLeaveCancelled:$,onBeforeAppear:D,onAppear:V,onAfterAppear:R,onAppearCancelled:E}=e,P=String(n.key),S=Ej(a,n),C=(v,T)=>{v&&Vs(v,s,9,T)},M=(v,T)=>{const j=T[1];C(v,T),Tt(v)?v.every(B=>B.length<=1)&&j():v.length<=1&&j()},g={mode:r,persisted:i,beforeEnter(v){let T=u;if(!a.isMounted)if(o)T=D||u;else return;v[Dr]&&v[Dr](!0);const j=S[P];j&&Ml(n,j)&&j.el[Dr]&&j.el[Dr](),C(T,[v])},enter(v){let T=h,j=m,B=p;if(!a.isMounted)if(o)T=V||h,j=R||m,B=E||p;else return;let oe=!1;const be=v[m1]=$e=>{oe||(oe=!0,$e?C(B,[v]):C(j,[v]),g.delayedLeave&&g.delayedLeave(),v[m1]=void 0)};T?M(T,[v,be]):be()},leave(v,T){const j=String(n.key);if(v[m1]&&v[m1](!0),a.isUnmounting)return T();C(b,[v]);let B=!1;const oe=v[Dr]=be=>{B||(B=!0,T(),be?C($,[v]):C(w,[v]),v[Dr]=void 0,S[j]===n&&delete S[j])};S[j]=n,x?M(x,[v,oe]):oe()},clone(v){return jA(v,e,a,s)}};return g}function U$(n){if(HL(n))return n=nr(n),n.children=null,n}function kO(n){return HL(n)?n.children?n.children[0]:void 0:n}function HA(n,e){n.shapeFlag&6&&n.component?HA(n.component.subTree,e):n.shapeFlag&128?(n.ssContent.transition=e.clone(n.ssContent),n.ssFallback.transition=e.clone(n.ssFallback)):n.transition=e}function Tj(n,e=!1,a){let s=[],o=0;for(let r=0;r1)for(let r=0;r!!n.type.__asyncLoader,HL=n=>n.type.__isKeepAlive;function vJ(n,e){Pj(n,"a",e)}function yJ(n,e){Pj(n,"da",e)}function Pj(n,e,a=$n){const s=n.__wdc||(n.__wdc=()=>{let o=a;for(;o;){if(o.isDeactivated)return;o=o.parent}return n()});if(NL(e,s,a),a){let o=a.parent;for(;o&&o.parent;)HL(o.parent.vnode)&&_J(s,e,a,o),o=o.parent}}function _J(n,e,a,s){const o=NL(e,n,s,!0);rn(()=>{nT(s[e],o)},a)}function NL(n,e,a=$n,s=!1){if(a){const o=a[n]||(a[n]=[]),r=e.__weh||(e.__weh=(...i)=>{if(a.isUnmounted)return;Fl();const u=ou(a),h=Vs(e,a,n,i);return u(),jl(),h});return s?o.unshift(r):o.push(r),r}}const or=n=>(e,a=$n)=>(!BL||n==="sp")&&NL(n,(...s)=>e(...s),a),Dj=or("bm"),at=or("m"),gJ=or("bu"),kJ=or("u"),gT=or("bum"),rn=or("um"),bJ=or("sp"),wJ=or("rtg"),xJ=or("rtc");function MJ(n,e=$n){NL("ec",n,e)}function Fe(n,e,a,s){let o;const r=a&&a[s];if(Tt(n)||sn(n)){o=new Array(n.length);for(let i=0,u=n.length;ie(i,u,void 0,r&&r[u]));else{const i=Object.keys(n);o=new Array(i.length);for(let u=0,h=i.length;uhL(e)?!(e.type===Us||e.type===ke&&!Rj(e.children)):!0)?n:null}const NA=n=>n?Kj(n)?qL(n)||n.proxy:NA(n.parent):null,xd=Mn(Object.create(null),{$:n=>n,$el:n=>n.vnode.el,$data:n=>n.data,$props:n=>n.props,$attrs:n=>n.attrs,$slots:n=>n.slots,$refs:n=>n.refs,$parent:n=>NA(n.parent),$root:n=>NA(n.root),$emit:n=>n.emit,$options:n=>kT(n),$forceUpdate:n=>n.f||(n.f=()=>{n.effect.dirty=!0,vT(n.update)}),$nextTick:n=>n.n||(n.n=En.bind(n.proxy)),$watch:n=>pJ.bind(n)}),F$=(n,e)=>n!==qa&&!n.__isScriptSetup&&ka(n,e),CJ={get({_:n},e){const{ctx:a,setupState:s,data:o,props:r,accessCache:i,type:u,appContext:h}=n;let m;if(e[0]!=="$"){const w=i[e];if(w!==void 0)switch(w){case 1:return s[e];case 2:return o[e];case 4:return a[e];case 3:return r[e]}else{if(F$(s,e))return i[e]=1,s[e];if(o!==qa&&ka(o,e))return i[e]=2,o[e];if((m=n.propsOptions[0])&&ka(m,e))return i[e]=3,r[e];if(a!==qa&&ka(a,e))return i[e]=4,a[e];zA&&(i[e]=0)}}const p=xd[e];let b,x;if(p)return e==="$attrs"&&os(n,"get",e),p(n);if((b=u.__cssModules)&&(b=b[e]))return b;if(a!==qa&&ka(a,e))return i[e]=4,a[e];if(x=h.config.globalProperties,ka(x,e))return x[e]},set({_:n},e,a){const{data:s,setupState:o,ctx:r}=n;return F$(o,e)?(o[e]=a,!0):s!==qa&&ka(s,e)?(s[e]=a,!0):ka(n.props,e)||e[0]==="$"&&e.slice(1)in n?!1:(r[e]=a,!0)},has({_:{data:n,setupState:e,accessCache:a,ctx:s,appContext:o,propsOptions:r}},i){let u;return!!a[i]||n!==qa&&ka(n,i)||F$(e,i)||(u=r[0])&&ka(u,i)||ka(s,i)||ka(xd,i)||ka(o.config.globalProperties,i)},defineProperty(n,e,a){return a.get!=null?n._.accessCache[e]=0:ka(a,"value")&&this.set(n,e,a.value,null),Reflect.defineProperty(n,e,a)}};function Oj(){return Vj().slots}function Ot(){return Vj().attrs}function Vj(){const n=Wr();return n.setupContext||(n.setupContext=Yj(n))}function bO(n){return Tt(n)?n.reduce((e,a)=>(e[a]=null,e),{}):n}let zA=!0;function SJ(n){const e=kT(n),a=n.proxy,s=n.ctx;zA=!1,e.beforeCreate&&wO(e.beforeCreate,n,"bc");const{data:o,computed:r,methods:i,watch:u,provide:h,inject:m,created:p,beforeMount:b,mounted:x,beforeUpdate:w,updated:$,activated:D,deactivated:V,beforeDestroy:R,beforeUnmount:E,destroyed:P,unmounted:S,render:C,renderTracked:M,renderTriggered:g,errorCaptured:v,serverPrefetch:T,expose:j,inheritAttrs:B,components:oe,directives:be,filters:$e}=e;if(m&&IJ(m,s,null),i)for(const J in i){const G=i[J];Yt(G)&&(s[J]=G.bind(a))}if(o){const J=o.call(a,a);Pa(J)&&(n.data=gn(J))}if(zA=!0,r)for(const J in r){const G=r[J],ce=Yt(G)?G.bind(a,a):Yt(G.get)?G.get.bind(a,a):Os,Ee=!Yt(G)&&Yt(G.set)?G.set.bind(a):Os,He=ee({get:ce,set:Ee});Object.defineProperty(s,J,{enumerable:!0,configurable:!0,get:()=>He.value,set:Ke=>He.value=Ke})}if(u)for(const J in u)Uj(u[J],s,a,J);if(h){const J=Yt(h)?h.call(a):h;Reflect.ownKeys(J).forEach(G=>{St(G,J[G])})}p&&wO(p,n,"c");function de(J,G){Tt(G)?G.forEach(ce=>J(ce.bind(a))):G&&J(G.bind(a))}if(de(Dj,b),de(at,x),de(gJ,w),de(kJ,$),de(vJ,D),de(yJ,V),de(MJ,v),de(xJ,M),de(wJ,g),de(gT,E),de(rn,S),de(bJ,T),Tt(j))if(j.length){const J=n.exposed||(n.exposed={});j.forEach(G=>{Object.defineProperty(J,G,{get:()=>a[G],set:ce=>a[G]=ce})})}else n.exposed||(n.exposed={});C&&n.render===Os&&(n.render=C),B!=null&&(n.inheritAttrs=B),oe&&(n.components=oe),be&&(n.directives=be)}function IJ(n,e,a=Os){Tt(n)&&(n=BA(n));for(const s in n){const o=n[s];let r;Pa(o)?"default"in o?r=xt(o.from||s,o.default,!0):r=xt(o.from||s):r=xt(o),on(r)?Object.defineProperty(e,s,{enumerable:!0,configurable:!0,get:()=>r.value,set:i=>r.value=i}):e[s]=r}}function wO(n,e,a){Vs(Tt(n)?n.map(s=>s.bind(e.proxy)):n.bind(e.proxy),e,a)}function Uj(n,e,a,s){const o=s.includes(".")?$j(a,s):()=>a[s];if(sn(n)){const r=e[n];Yt(r)&&dt(o,r)}else if(Yt(n))dt(o,n.bind(a));else if(Pa(n))if(Tt(n))n.forEach(r=>Uj(r,e,a,s));else{const r=Yt(n.handler)?n.handler.bind(a):e[n.handler];Yt(r)&&dt(o,r,n)}}function kT(n){const e=n.type,{mixins:a,extends:s}=e,{mixins:o,optionsCache:r,config:{optionMergeStrategies:i}}=n.appContext,u=r.get(e);let h;return u?h=u:!o.length&&!a&&!s?h=e:(h={},o.length&&o.forEach(m=>pL(h,m,i,!0)),pL(h,e,i)),Pa(e)&&r.set(e,h),h}function pL(n,e,a,s=!1){const{mixins:o,extends:r}=e;r&&pL(n,r,a,!0),o&&o.forEach(i=>pL(n,i,a,!0));for(const i in e)if(!(s&&i==="expose")){const u=LJ[i]||a&&a[i];n[i]=u?u(n[i],e[i]):e[i]}return n}const LJ={data:xO,props:MO,emits:MO,methods:gd,computed:gd,beforeCreate:Wn,created:Wn,beforeMount:Wn,mounted:Wn,beforeUpdate:Wn,updated:Wn,beforeDestroy:Wn,beforeUnmount:Wn,destroyed:Wn,unmounted:Wn,activated:Wn,deactivated:Wn,errorCaptured:Wn,serverPrefetch:Wn,components:gd,directives:gd,watch:AJ,provide:xO,inject:$J};function xO(n,e){return e?n?function(){return Mn(Yt(n)?n.call(this,this):n,Yt(e)?e.call(this,this):e)}:e:n}function $J(n,e){return gd(BA(n),BA(e))}function BA(n){if(Tt(n)){const e={};for(let a=0;a1)return a&&Yt(e)?e.call(s&&s.proxy):e}}function PJ(){return!!($n||vn||yc)}function DJ(n,e,a,s=!1){const o={},r={};lL(r,zL,1),n.propsDefaults=Object.create(null),jj(n,e,o,r);for(const i in n.propsOptions[0])i in o||(o[i]=void 0);a?n.props=s?o:hj(o):n.type.props?n.props=o:n.props=r,n.attrs=r}function RJ(n,e,a,s){const{props:o,attrs:r,vnode:{patchFlag:i}}=n,u=pa(o),[h]=n.propsOptions;let m=!1;if((s||i>0)&&!(i&16)){if(i&8){const p=n.vnode.dynamicProps;for(let b=0;b{h=!0;const[x,w]=Hj(b,e,!0);Mn(i,x),w&&u.push(...w)};!a&&e.mixins.length&&e.mixins.forEach(p),n.extends&&p(n.extends),n.mixins&&n.mixins.forEach(p)}if(!r&&!h)return Pa(n)&&s.set(n,fc),fc;if(Tt(r))for(let p=0;p-1,w[1]=D<0||$-1||ka(w,"default"))&&u.push(b)}}}const m=[i,u];return Pa(n)&&s.set(n,m),m}function CO(n){return n[0]!=="$"&&!bd(n)}function SO(n){return n===null?"null":typeof n=="function"?n.name||"":typeof n=="object"&&n.constructor&&n.constructor.name||""}function IO(n,e){return SO(n)===SO(e)}function LO(n,e){return Tt(e)?e.findIndex(a=>IO(a,n)):Yt(e)&&IO(e,n)?0:-1}const Nj=n=>n[0]==="_"||n==="$stable",bT=n=>Tt(n)?n.map(ko):[ko(n)],OJ=(n,e,a)=>{if(e._n)return e;const s=f((...o)=>bT(e(...o)),a);return s._c=!1,s},zj=(n,e,a)=>{const s=n._ctx;for(const o in n){if(Nj(o))continue;const r=n[o];if(Yt(r))e[o]=OJ(o,r,s);else if(r!=null){const i=bT(r);e[o]=()=>i}}},Bj=(n,e)=>{const a=bT(e);n.slots.default=()=>a},VJ=(n,e)=>{if(n.vnode.shapeFlag&32){const a=e._;a?(n.slots=pa(e),lL(e,"_",a)):zj(e,n.slots={})}else n.slots={},e&&Bj(n,e);lL(n.slots,zL,1)},UJ=(n,e,a)=>{const{vnode:s,slots:o}=n;let r=!0,i=qa;if(s.shapeFlag&32){const u=e._;u?a&&u===1?r=!1:(Mn(o,e),!a&&u===1&&delete o._):(r=!e.$stable,zj(e,o)),i=e}else e&&(Bj(n,e),i={default:1});if(r)for(const u in o)!Nj(u)&&i[u]==null&&delete o[u]};function WA(n,e,a,s,o=!1){if(Tt(n)){n.forEach((x,w)=>WA(x,e&&(Tt(e)?e[w]:e),a,s,o));return}if(wd(s)&&!o)return;const r=s.shapeFlag&4?qL(s.component)||s.component.proxy:s.el,i=o?null:r,{i:u,r:h}=n,m=e&&e.r,p=u.refs===qa?u.refs={}:u.refs,b=u.setupState;if(m!=null&&m!==h&&(sn(m)?(p[m]=null,ka(b,m)&&(b[m]=null)):on(m)&&(m.value=null)),Yt(h))Nr(h,u,12,[i,p]);else{const x=sn(h),w=on(h);if(x||w){const $=()=>{if(n.f){const D=x?ka(b,h)?b[h]:p[h]:h.value;o?Tt(D)&&nT(D,r):Tt(D)?D.includes(r)||D.push(r):x?(p[h]=[r],ka(b,h)&&(b[h]=p[h])):(h.value=[r],n.k&&(p[n.k]=h.value))}else x?(p[h]=i,ka(b,h)&&(b[h]=i)):w&&(h.value=i,n.k&&(p[n.k]=i))};i?($.id=-1,as($,a)):$()}}}const as=cJ;function FJ(n){return jJ(n)}function jJ(n,e){const a=YF();a.__VUE__=!0;const{insert:s,remove:o,patchProp:r,createElement:i,createText:u,createComment:h,setText:m,setElementText:p,parentNode:b,nextSibling:x,setScopeId:w=Os,insertStaticContent:$}=n,D=(H,N,Q,he=null,Se=null,Re=null,Ze=void 0,ze=null,qe=!!N.dynamicChildren)=>{if(H===N)return;H&&!Ml(H,N)&&(he=Ae(H),Ke(H,Se,Re,!0),H=null),N.patchFlag===-2&&(qe=!1,N.dynamicChildren=null);const{type:Be,ref:lt,shapeFlag:yt}=N;switch(Be){case su:V(H,N,Q,he);break;case Us:R(H,N,Q,he);break;case T1:H==null&&E(N,Q,he,Ze);break;case ke:oe(H,N,Q,he,Se,Re,Ze,ze,qe);break;default:yt&1?C(H,N,Q,he,Se,Re,Ze,ze,qe):yt&6?be(H,N,Q,he,Se,Re,Ze,ze,qe):(yt&64||yt&128)&&Be.process(H,N,Q,he,Se,Re,Ze,ze,qe,Y)}lt!=null&&Se&&WA(lt,H&&H.ref,Re,N||H,!N)},V=(H,N,Q,he)=>{if(H==null)s(N.el=u(N.children),Q,he);else{const Se=N.el=H.el;N.children!==H.children&&m(Se,N.children)}},R=(H,N,Q,he)=>{H==null?s(N.el=h(N.children||""),Q,he):N.el=H.el},E=(H,N,Q,he)=>{[H.el,H.anchor]=$(H.children,N,Q,he,H.el,H.anchor)},P=({el:H,anchor:N},Q,he)=>{let Se;for(;H&&H!==N;)Se=x(H),s(H,Q,he),H=Se;s(N,Q,he)},S=({el:H,anchor:N})=>{let Q;for(;H&&H!==N;)Q=x(H),o(H),H=Q;o(N)},C=(H,N,Q,he,Se,Re,Ze,ze,qe)=>{N.type==="svg"?Ze="svg":N.type==="math"&&(Ze="mathml"),H==null?M(N,Q,he,Se,Re,Ze,ze,qe):T(H,N,Se,Re,Ze,ze,qe)},M=(H,N,Q,he,Se,Re,Ze,ze)=>{let qe,Be;const{props:lt,shapeFlag:yt,transition:it,dirs:Pe}=H;if(qe=H.el=i(H.type,Re,lt&<.is,lt),yt&8?p(qe,H.children):yt&16&&v(H.children,qe,null,he,Se,j$(H,Re),Ze,ze),Pe&&ui(H,null,he,"created"),g(qe,H,H.scopeId,Ze,he),lt){for(const ht in lt)ht!=="value"&&!bd(ht)&&r(qe,ht,null,lt[ht],Re,H.children,he,Se,kt);"value"in lt&&r(qe,"value",null,lt.value,Re),(Be=lt.onVnodeBeforeMount)&&fo(Be,he,H)}Pe&&ui(H,null,he,"beforeMount");const Ue=HJ(Se,it);Ue&&it.beforeEnter(qe),s(qe,N,Q),((Be=lt&<.onVnodeMounted)||Ue||Pe)&&as(()=>{Be&&fo(Be,he,H),Ue&&it.enter(qe),Pe&&ui(H,null,he,"mounted")},Se)},g=(H,N,Q,he,Se)=>{if(Q&&w(H,Q),he)for(let Re=0;Re{for(let Be=qe;Be{const ze=N.el=H.el;let{patchFlag:qe,dynamicChildren:Be,dirs:lt}=N;qe|=H.patchFlag&16;const yt=H.props||qa,it=N.props||qa;let Pe;if(Q&&pi(Q,!1),(Pe=it.onVnodeBeforeUpdate)&&fo(Pe,Q,N,H),lt&&ui(N,H,Q,"beforeUpdate"),Q&&pi(Q,!0),Be?j(H.dynamicChildren,Be,ze,Q,he,j$(N,Se),Re):Ze||G(H,N,ze,null,Q,he,j$(N,Se),Re,!1),qe>0){if(qe&16)B(ze,N,yt,it,Q,he,Se);else if(qe&2&&yt.class!==it.class&&r(ze,"class",null,it.class,Se),qe&4&&r(ze,"style",yt.style,it.style,Se),qe&8){const Ue=N.dynamicProps;for(let ht=0;ht{Pe&&fo(Pe,Q,N,H),lt&&ui(N,H,Q,"updated")},he)},j=(H,N,Q,he,Se,Re,Ze)=>{for(let ze=0;ze{if(Q!==he){if(Q!==qa)for(const ze in Q)!bd(ze)&&!(ze in he)&&r(H,ze,Q[ze],null,Ze,N.children,Se,Re,kt);for(const ze in he){if(bd(ze))continue;const qe=he[ze],Be=Q[ze];qe!==Be&&ze!=="value"&&r(H,ze,Be,qe,Ze,N.children,Se,Re,kt)}"value"in he&&r(H,"value",Q.value,he.value,Ze)}},oe=(H,N,Q,he,Se,Re,Ze,ze,qe)=>{const Be=N.el=H?H.el:u(""),lt=N.anchor=H?H.anchor:u("");let{patchFlag:yt,dynamicChildren:it,slotScopeIds:Pe}=N;Pe&&(ze=ze?ze.concat(Pe):Pe),H==null?(s(Be,Q,he),s(lt,Q,he),v(N.children||[],Q,lt,Se,Re,Ze,ze,qe)):yt>0&&yt&64&&it&&H.dynamicChildren?(j(H.dynamicChildren,it,Q,Se,Re,Ze,ze),(N.key!=null||Se&&N===Se.subTree)&&wT(H,N,!0)):G(H,N,Q,lt,Se,Re,Ze,ze,qe)},be=(H,N,Q,he,Se,Re,Ze,ze,qe)=>{N.slotScopeIds=ze,H==null?N.shapeFlag&512?Se.ctx.activate(N,Q,he,Ze,qe):$e(N,Q,he,Se,Re,Ze,qe):Le(H,N,qe)},$e=(H,N,Q,he,Se,Re,Ze)=>{const ze=H.component=QJ(H,he,Se);if(HL(H)&&(ze.ctx.renderer=Y),JJ(ze),ze.asyncDep){if(Se&&Se.registerDep(ze,de),!H.el){const qe=ze.subTree=l(Us);R(null,qe,N,Q)}}else de(ze,H,N,Q,Se,Re,Ze)},Le=(H,N,Q)=>{const he=N.component=H.component;if(rJ(H,N,Q))if(he.asyncDep&&!he.asyncResolved){J(he,N,Q);return}else he.next=N,eJ(he.update),he.effect.dirty=!0,he.update();else N.el=H.el,he.vnode=N},de=(H,N,Q,he,Se,Re,Ze)=>{const ze=()=>{if(H.isMounted){let{next:lt,bu:yt,u:it,parent:Pe,vnode:Ue}=H;{const ae=qj(H);if(ae){lt&&(lt.el=Ue.el,J(H,lt,Ze)),ae.asyncDep.then(()=>{H.isUnmounted||ze()});return}}let ht=lt,Mt;pi(H,!1),lt?(lt.el=Ue.el,J(H,lt,Ze)):lt=Ue,yt&&A1(yt),(Mt=lt.props&<.props.onVnodeBeforeUpdate)&&fo(Mt,Pe,lt,Ue),pi(H,!0);const Et=V$(H),Jt=H.subTree;H.subTree=Et,D(Jt,Et,b(Jt.el),Ae(Jt),H,Se,Re),lt.el=Et.el,ht===null&&iJ(H,Et.el),it&&as(it,Se),(Mt=lt.props&<.props.onVnodeUpdated)&&as(()=>fo(Mt,Pe,lt,Ue),Se)}else{let lt;const{el:yt,props:it}=N,{bm:Pe,m:Ue,parent:ht}=H,Mt=wd(N);if(pi(H,!1),Pe&&A1(Pe),!Mt&&(lt=it&&it.onVnodeBeforeMount)&&fo(lt,ht,N),pi(H,!0),yt&&pe){const Et=()=>{H.subTree=V$(H),pe(yt,H.subTree,H,Se,null)};Mt?N.type.__asyncLoader().then(()=>!H.isUnmounted&&Et()):Et()}else{const Et=H.subTree=V$(H);D(null,Et,Q,he,H,Se,Re),N.el=Et.el}if(Ue&&as(Ue,Se),!Mt&&(lt=it&&it.onVnodeMounted)){const Et=N;as(()=>fo(lt,ht,Et),Se)}(N.shapeFlag&256||ht&&wd(ht.vnode)&&ht.vnode.shapeFlag&256)&&H.a&&as(H.a,Se),H.isMounted=!0,N=Q=he=null}},qe=H.effect=new lT(ze,Os,()=>vT(Be),H.scope),Be=H.update=()=>{qe.dirty&&qe.run()};Be.id=H.uid,pi(H,!0),Be()},J=(H,N,Q)=>{N.component=H;const he=H.vnode.props;H.vnode=N,H.next=null,RJ(H,N.props,he,Q),UJ(H,N.children,Q),Fl(),yO(H),jl()},G=(H,N,Q,he,Se,Re,Ze,ze,qe=!1)=>{const Be=H&&H.children,lt=H?H.shapeFlag:0,yt=N.children,{patchFlag:it,shapeFlag:Pe}=N;if(it>0){if(it&128){Ee(Be,yt,Q,he,Se,Re,Ze,ze,qe);return}else if(it&256){ce(Be,yt,Q,he,Se,Re,Ze,ze,qe);return}}Pe&8?(lt&16&&kt(Be,Se,Re),yt!==Be&&p(Q,yt)):lt&16?Pe&16?Ee(Be,yt,Q,he,Se,Re,Ze,ze,qe):kt(Be,Se,Re,!0):(lt&8&&p(Q,""),Pe&16&&v(yt,Q,he,Se,Re,Ze,ze,qe))},ce=(H,N,Q,he,Se,Re,Ze,ze,qe)=>{H=H||fc,N=N||fc;const Be=H.length,lt=N.length,yt=Math.min(Be,lt);let it;for(it=0;itlt?kt(H,Se,Re,!0,!1,yt):v(N,Q,he,Se,Re,Ze,ze,qe,yt)},Ee=(H,N,Q,he,Se,Re,Ze,ze,qe)=>{let Be=0;const lt=N.length;let yt=H.length-1,it=lt-1;for(;Be<=yt&&Be<=it;){const Pe=H[Be],Ue=N[Be]=qe?Rr(N[Be]):ko(N[Be]);if(Ml(Pe,Ue))D(Pe,Ue,Q,null,Se,Re,Ze,ze,qe);else break;Be++}for(;Be<=yt&&Be<=it;){const Pe=H[yt],Ue=N[it]=qe?Rr(N[it]):ko(N[it]);if(Ml(Pe,Ue))D(Pe,Ue,Q,null,Se,Re,Ze,ze,qe);else break;yt--,it--}if(Be>yt){if(Be<=it){const Pe=it+1,Ue=Peit)for(;Be<=yt;)Ke(H[Be],Se,Re,!0),Be++;else{const Pe=Be,Ue=Be,ht=new Map;for(Be=Ue;Be<=it;Be++){const te=N[Be]=qe?Rr(N[Be]):ko(N[Be]);te.key!=null&&ht.set(te.key,Be)}let Mt,Et=0;const Jt=it-Ue+1;let ae=!1,W=0;const q=new Array(Jt);for(Be=0;Be=Jt){Ke(te,Se,Re,!0);continue}let ne;if(te.key!=null)ne=ht.get(te.key);else for(Mt=Ue;Mt<=it;Mt++)if(q[Mt-Ue]===0&&Ml(te,N[Mt])){ne=Mt;break}ne===void 0?Ke(te,Se,Re,!0):(q[ne-Ue]=Be+1,ne>=W?W=ne:ae=!0,D(te,N[ne],Q,null,Se,Re,Ze,ze,qe),Et++)}const ve=ae?NJ(q):fc;for(Mt=ve.length-1,Be=Jt-1;Be>=0;Be--){const te=Ue+Be,ne=N[te],ye=te+1{const{el:Re,type:Ze,transition:ze,children:qe,shapeFlag:Be}=H;if(Be&6){He(H.component.subTree,N,Q,he);return}if(Be&128){H.suspense.move(N,Q,he);return}if(Be&64){Ze.move(H,N,Q,Y);return}if(Ze===ke){s(Re,N,Q);for(let yt=0;ytze.enter(Re),Se);else{const{leave:yt,delayLeave:it,afterLeave:Pe}=ze,Ue=()=>s(Re,N,Q),ht=()=>{yt(Re,()=>{Ue(),Pe&&Pe()})};it?it(Re,Ue,ht):ht()}else s(Re,N,Q)},Ke=(H,N,Q,he=!1,Se=!1)=>{const{type:Re,props:Ze,ref:ze,children:qe,dynamicChildren:Be,shapeFlag:lt,patchFlag:yt,dirs:it}=H;if(ze!=null&&WA(ze,null,Q,H,!0),lt&256){N.ctx.deactivate(H);return}const Pe=lt&1&&it,Ue=!wd(H);let ht;if(Ue&&(ht=Ze&&Ze.onVnodeBeforeUnmount)&&fo(ht,N,H),lt&6)ft(H.component,Q,he);else{if(lt&128){H.suspense.unmount(Q,he);return}Pe&&ui(H,null,N,"beforeUnmount"),lt&64?H.type.remove(H,N,Q,Se,Y,he):Be&&(Re!==ke||yt>0&&yt&64)?kt(Be,N,Q,!1,!0):(Re===ke&&yt&384||!Se&<&16)&&kt(qe,N,Q),he&&pt(H)}(Ue&&(ht=Ze&&Ze.onVnodeUnmounted)||Pe)&&as(()=>{ht&&fo(ht,N,H),Pe&&ui(H,null,N,"unmounted")},Q)},pt=H=>{const{type:N,el:Q,anchor:he,transition:Se}=H;if(N===ke){ut(Q,he);return}if(N===T1){S(H);return}const Re=()=>{o(Q),Se&&!Se.persisted&&Se.afterLeave&&Se.afterLeave()};if(H.shapeFlag&1&&Se&&!Se.persisted){const{leave:Ze,delayLeave:ze}=Se,qe=()=>Ze(Q,Re);ze?ze(H.el,Re,qe):qe()}else Re()},ut=(H,N)=>{let Q;for(;H!==N;)Q=x(H),o(H),H=Q;o(N)},ft=(H,N,Q)=>{const{bum:he,scope:Se,update:Re,subTree:Ze,um:ze}=H;he&&A1(he),Se.stop(),Re&&(Re.active=!1,Ke(Ze,H,N,Q)),ze&&as(ze,N),as(()=>{H.isUnmounted=!0},N),N&&N.pendingBranch&&!N.isUnmounted&&H.asyncDep&&!H.asyncResolved&&H.suspenseId===N.pendingId&&(N.deps--,N.deps===0&&N.resolve())},kt=(H,N,Q,he=!1,Se=!1,Re=0)=>{for(let Ze=Re;ZeH.shapeFlag&6?Ae(H.component.subTree):H.shapeFlag&128?H.suspense.next():x(H.anchor||H.el);let Xe=!1;const ie=(H,N,Q)=>{H==null?N._vnode&&Ke(N._vnode,null,null,!0):D(N._vnode||null,H,N,null,null,null,Q),Xe||(Xe=!0,yO(),xj(),Xe=!1),N._vnode=H},Y={p:D,um:Ke,m:He,r:pt,mt:$e,mc:v,pc:G,pbc:j,n:Ae,o:n};let ue,pe;return e&&([ue,pe]=e(Y)),{render:ie,hydrate:ue,createApp:TJ(ie,ue)}}function j$({type:n,props:e},a){return a==="svg"&&n==="foreignObject"||a==="mathml"&&n==="annotation-xml"&&e&&e.encoding&&e.encoding.includes("html")?void 0:a}function pi({effect:n,update:e},a){n.allowRecurse=e.allowRecurse=a}function HJ(n,e){return(!n||n&&!n.pendingBranch)&&e&&!e.persisted}function wT(n,e,a=!1){const s=n.children,o=e.children;if(Tt(s)&&Tt(o))for(let r=0;r>1,n[a[u]]0&&(e[s]=a[r-1]),a[r]=s)}}for(r=a.length,i=a[r-1];r-- >0;)a[r]=i,i=e[i];return a}function qj(n){const e=n.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:qj(e)}const zJ=n=>n.__isTeleport,Md=n=>n&&(n.disabled||n.disabled===""),$O=n=>typeof SVGElement<"u"&&n instanceof SVGElement,AO=n=>typeof MathMLElement=="function"&&n instanceof MathMLElement,GA=(n,e)=>{const a=n&&n.to;return sn(a)?e?e(a):null:a},BJ={name:"Teleport",__isTeleport:!0,process(n,e,a,s,o,r,i,u,h,m){const{mc:p,pc:b,pbc:x,o:{insert:w,querySelector:$,createText:D,createComment:V}}=m,R=Md(e.props);let{shapeFlag:E,children:P,dynamicChildren:S}=e;if(n==null){const C=e.el=D(""),M=e.anchor=D("");w(C,a,s),w(M,a,s);const g=e.target=GA(e.props,$),v=e.targetAnchor=D("");g&&(w(v,g),i==="svg"||$O(g)?i="svg":(i==="mathml"||AO(g))&&(i="mathml"));const T=(j,B)=>{E&16&&p(P,j,B,o,r,i,u,h)};R?T(a,M):g&&T(g,v)}else{e.el=n.el;const C=e.anchor=n.anchor,M=e.target=n.target,g=e.targetAnchor=n.targetAnchor,v=Md(n.props),T=v?a:M,j=v?C:g;if(i==="svg"||$O(M)?i="svg":(i==="mathml"||AO(M))&&(i="mathml"),S?(x(n.dynamicChildren,S,T,o,r,i,u),wT(n,e,!0)):h||b(n,e,T,j,o,r,i,u,!1),R)v?e.props&&n.props&&e.props.to!==n.props.to&&(e.props.to=n.props.to):v1(e,a,C,m,1);else if((e.props&&e.props.to)!==(n.props&&n.props.to)){const B=e.target=GA(e.props,$);B&&v1(e,B,null,m,0)}else v&&v1(e,M,g,m,1)}Wj(e)},remove(n,e,a,s,{um:o,o:{remove:r}},i){const{shapeFlag:u,children:h,anchor:m,targetAnchor:p,target:b,props:x}=n;if(b&&r(p),i&&r(m),u&16){const w=i||!Md(x);for(let $=0;$0?to||fc:null,GJ(),jd>0&&to&&to.push(n),n}function U(n,e,a,s,o,r){return Gj(c(n,e,a,s,o,r,!0))}function ge(n,e,a,s,o){return Gj(l(n,e,a,s,o,!0))}function hL(n){return n?n.__v_isVNode===!0:!1}function Ml(n,e){return n.type===e.type&&n.key===e.key}const zL="__vInternal",Zj=({key:n})=>n??null,P1=({ref:n,ref_key:e,ref_for:a})=>(typeof n=="number"&&(n=""+n),n!=null?sn(n)||on(n)||Yt(n)?{i:vn,r:n,k:e,f:!!a}:n:null);function c(n,e=null,a=null,s=0,o=null,r=n===ke?0:1,i=!1,u=!1){const h={__v_isVNode:!0,__v_skip:!0,type:n,props:e,key:e&&Zj(e),ref:e&&P1(e),scopeId:Sj,slotScopeIds:null,children:a,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:vn};return u?(xT(h,a),r&128&&n.normalize(h)):a&&(h.shapeFlag|=sn(a)?8:16),jd>0&&!i&&to&&(h.patchFlag>0||r&6)&&h.patchFlag!==32&&to.push(h),h}const l=ZJ;function ZJ(n,e=null,a=null,s=0,o=null,r=!1){if((!n||n===Ij)&&(n=Us),hL(n)){const u=nr(n,e,!0);return a&&xT(u,a),jd>0&&!r&&to&&(u.shapeFlag&6?to[to.indexOf(n)]=u:to.push(u)),u.patchFlag|=-2,u}if(nee(n)&&(n=n.__vccOpts),e){e=KJ(e);let{class:u,style:h}=e;u&&!sn(u)&&(e.class=F(u)),Pa(h)&&(mj(h)&&!Tt(h)&&(h=Mn({},h)),e.style=oT(h))}const i=sn(n)?1:lJ(n)?128:zJ(n)?64:Pa(n)?4:Yt(n)?2:0;return c(n,e,a,s,o,i,r,!0)}function KJ(n){return n?mj(n)||zL in n?Mn({},n):n:null}function nr(n,e,a=!1){const{props:s,ref:o,patchFlag:r,children:i}=n,u=e?Ft(s||{},e):s;return{__v_isVNode:!0,__v_skip:!0,type:n.type,props:u,key:u&&Zj(u),ref:e&&e.ref?a&&o?Tt(o)?o.concat(P1(e)):[o,P1(e)]:P1(e):o,scopeId:n.scopeId,slotScopeIds:n.slotScopeIds,children:i,target:n.target,targetAnchor:n.targetAnchor,staticCount:n.staticCount,shapeFlag:n.shapeFlag,patchFlag:e&&n.type!==ke?r===-1?16:r|16:r,dynamicProps:n.dynamicProps,dynamicChildren:n.dynamicChildren,appContext:n.appContext,dirs:n.dirs,transition:n.transition,component:n.component,suspense:n.suspense,ssContent:n.ssContent&&nr(n.ssContent),ssFallback:n.ssFallback&&nr(n.ssFallback),el:n.el,anchor:n.anchor,ctx:n.ctx,ce:n.ce}}function A(n=" ",e=0){return l(su,null,n,e)}function io(n,e){const a=l(T1,null,n);return a.staticCount=e,a}function Me(n="",e=!1){return e?(L(),ge(Us,null,n)):l(Us,null,n)}function ko(n){return n==null||typeof n=="boolean"?l(Us):Tt(n)?l(ke,null,n.slice()):typeof n=="object"?Rr(n):l(su,null,String(n))}function Rr(n){return n.el===null&&n.patchFlag!==-1||n.memo?n:nr(n)}function xT(n,e){let a=0;const{shapeFlag:s}=n;if(e==null)e=null;else if(Tt(e))a=16;else if(typeof e=="object")if(s&65){const o=e.default;o&&(o._c&&(o._d=!1),xT(n,o()),o._c&&(o._d=!0));return}else{a=32;const o=e._;!o&&!(zL in e)?e._ctx=vn:o===3&&vn&&(vn.slots._===1?e._=1:(e._=2,n.patchFlag|=1024))}else Yt(e)?(e={default:e,_ctx:vn},a=32):(e=String(e),s&64?(a=16,e=[A(e)]):a=8);n.children=e,n.shapeFlag|=a}function Ft(...n){const e={};for(let a=0;a$n||vn;let fL,ZA;{const n=YF(),e=(a,s)=>{let o;return(o=n[a])||(o=n[a]=[]),o.push(s),r=>{o.length>1?o.forEach(i=>i(r)):o[0](r)}};fL=e("__VUE_INSTANCE_SETTERS__",a=>$n=a),ZA=e("__VUE_SSR_SETTERS__",a=>BL=a)}const ou=n=>{const e=$n;return fL(n),n.scope.on(),()=>{n.scope.off(),fL(e)}},TO=()=>{$n&&$n.scope.off(),fL(null)};function Kj(n){return n.vnode.shapeFlag&4}let BL=!1;function JJ(n,e=!1){e&&ZA(e);const{props:a,children:s}=n.vnode,o=Kj(n);DJ(n,a,o,e),VJ(n,s);const r=o?eee(n,e):void 0;return e&&ZA(!1),r}function eee(n,e){const a=n.type;n.accessCache=Object.create(null),n.proxy=VL(new Proxy(n.ctx,CJ));const{setup:s}=a;if(s){const o=n.setupContext=s.length>1?Yj(n):null,r=ou(n);Fl();const i=Nr(s,n,0,[n.props,o]);if(jl(),r(),ZF(i)){if(i.then(TO,TO),e)return i.then(u=>{PO(n,u,e)}).catch(u=>{FL(u,n,0)});n.asyncDep=i}else PO(n,i,e)}else Xj(n,e)}function PO(n,e,a){Yt(e)?n.type.__ssrInlineRender?n.ssrRender=e:n.render=e:Pa(e)&&(n.setupState=gj(e)),Xj(n,a)}let DO;function Xj(n,e,a){const s=n.type;if(!n.render){if(!e&&DO&&!s.render){const o=s.template||kT(n).template;if(o){const{isCustomElement:r,compilerOptions:i}=n.appContext.config,{delimiters:u,compilerOptions:h}=s,m=Mn(Mn({isCustomElement:r,delimiters:u},i),h);s.render=DO(o,m)}}n.render=s.render||Os}{const o=ou(n);Fl();try{SJ(n)}finally{jl(),o()}}}function tee(n){return n.attrsProxy||(n.attrsProxy=new Proxy(n.attrs,{get(e,a){return os(n,"get","$attrs"),e[a]}}))}function Yj(n){const e=a=>{n.exposed=a||{}};return{get attrs(){return tee(n)},slots:n.slots,emit:n.emit,expose:e}}function qL(n){if(n.exposed)return n.exposeProxy||(n.exposeProxy=new Proxy(gj(VL(n.exposed)),{get(e,a){if(a in e)return e[a];if(a in xd)return xd[a](n)},has(e,a){return a in e||a in xd}}))}function aee(n,e=!0){return Yt(n)?n.displayName||n.name:n.name||e&&n.__name}function nee(n){return Yt(n)&&"__vccOpts"in n}const ee=(n,e)=>WQ(n,e,BL);function ya(n,e,a){const s=arguments.length;return s===2?Pa(e)&&!Tt(e)?hL(e)?l(n,null,[e]):l(n,e):l(n,null,e):(s>3?a=Array.prototype.slice.call(arguments,2):s===3&&hL(a)&&(a=[a]),l(n,e,a))}const see="3.4.21";/** +* @vue/runtime-dom v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const oee="http://www.w3.org/2000/svg",ree="http://www.w3.org/1998/Math/MathML",Or=typeof document<"u"?document:null,RO=Or&&Or.createElement("template"),iee={insert:(n,e,a)=>{e.insertBefore(n,a||null)},remove:n=>{const e=n.parentNode;e&&e.removeChild(n)},createElement:(n,e,a,s)=>{const o=e==="svg"?Or.createElementNS(oee,n):e==="mathml"?Or.createElementNS(ree,n):Or.createElement(n,a?{is:a}:void 0);return n==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:n=>Or.createTextNode(n),createComment:n=>Or.createComment(n),setText:(n,e)=>{n.nodeValue=e},setElementText:(n,e)=>{n.textContent=e},parentNode:n=>n.parentNode,nextSibling:n=>n.nextSibling,querySelector:n=>Or.querySelector(n),setScopeId(n,e){n.setAttribute(e,"")},insertStaticContent(n,e,a,s,o,r){const i=a?a.previousSibling:e.lastChild;if(o&&(o===r||o.nextSibling))for(;e.insertBefore(o.cloneNode(!0),a),!(o===r||!(o=o.nextSibling)););else{RO.innerHTML=s==="svg"?`${n}`:s==="mathml"?`${n}`:n;const u=RO.content;if(s==="svg"||s==="mathml"){const h=u.firstChild;for(;h.firstChild;)u.appendChild(h.firstChild);u.removeChild(h)}e.insertBefore(u,a)}return[i?i.nextSibling:e.firstChild,a?a.previousSibling:e.lastChild]}},wr="transition",rd="animation",Hd=Symbol("_vtc"),hn=(n,{slots:e})=>ya(mJ,lee(n),e);hn.displayName="Transition";const Qj={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};hn.props=Mn({},Aj,Qj);const hi=(n,e=[])=>{Tt(n)?n.forEach(a=>a(...e)):n&&n(...e)},OO=n=>n?Tt(n)?n.some(e=>e.length>1):n.length>1:!1;function lee(n){const e={};for(const oe in n)oe in Qj||(e[oe]=n[oe]);if(n.css===!1)return e;const{name:a="v",type:s,duration:o,enterFromClass:r=`${a}-enter-from`,enterActiveClass:i=`${a}-enter-active`,enterToClass:u=`${a}-enter-to`,appearFromClass:h=r,appearActiveClass:m=i,appearToClass:p=u,leaveFromClass:b=`${a}-leave-from`,leaveActiveClass:x=`${a}-leave-active`,leaveToClass:w=`${a}-leave-to`}=n,$=cee(o),D=$&&$[0],V=$&&$[1],{onBeforeEnter:R,onEnter:E,onEnterCancelled:P,onLeave:S,onLeaveCancelled:C,onBeforeAppear:M=R,onAppear:g=E,onAppearCancelled:v=P}=e,T=(oe,be,$e)=>{fi(oe,be?p:u),fi(oe,be?m:i),$e&&$e()},j=(oe,be)=>{oe._isLeaving=!1,fi(oe,b),fi(oe,w),fi(oe,x),be&&be()},B=oe=>(be,$e)=>{const Le=oe?g:E,de=()=>T(be,oe,$e);hi(Le,[be,de]),VO(()=>{fi(be,oe?h:r),xr(be,oe?p:u),OO(Le)||UO(be,s,D,de)})};return Mn(e,{onBeforeEnter(oe){hi(R,[oe]),xr(oe,r),xr(oe,i)},onBeforeAppear(oe){hi(M,[oe]),xr(oe,h),xr(oe,m)},onEnter:B(!1),onAppear:B(!0),onLeave(oe,be){oe._isLeaving=!0;const $e=()=>j(oe,be);xr(oe,b),pee(),xr(oe,x),VO(()=>{oe._isLeaving&&(fi(oe,b),xr(oe,w),OO(S)||UO(oe,s,V,$e))}),hi(S,[oe,$e])},onEnterCancelled(oe){T(oe,!1),hi(P,[oe])},onAppearCancelled(oe){T(oe,!0),hi(v,[oe])},onLeaveCancelled(oe){j(oe),hi(C,[oe])}})}function cee(n){if(n==null)return null;if(Pa(n))return[H$(n.enter),H$(n.leave)];{const e=H$(n);return[e,e]}}function H$(n){return vQ(n)}function xr(n,e){e.split(/\s+/).forEach(a=>a&&n.classList.add(a)),(n[Hd]||(n[Hd]=new Set)).add(e)}function fi(n,e){e.split(/\s+/).forEach(s=>s&&n.classList.remove(s));const a=n[Hd];a&&(a.delete(e),a.size||(n[Hd]=void 0))}function VO(n){requestAnimationFrame(()=>{requestAnimationFrame(n)})}let dee=0;function UO(n,e,a,s){const o=n._endId=++dee,r=()=>{o===n._endId&&s()};if(a)return setTimeout(r,a);const{type:i,timeout:u,propCount:h}=uee(n,e);if(!i)return s();const m=i+"end";let p=0;const b=()=>{n.removeEventListener(m,x),r()},x=w=>{w.target===n&&++p>=h&&b()};setTimeout(()=>{p(a[$]||"").split(", "),o=s(`${wr}Delay`),r=s(`${wr}Duration`),i=FO(o,r),u=s(`${rd}Delay`),h=s(`${rd}Duration`),m=FO(u,h);let p=null,b=0,x=0;e===wr?i>0&&(p=wr,b=i,x=r.length):e===rd?m>0&&(p=rd,b=m,x=h.length):(b=Math.max(i,m),p=b>0?i>m?wr:rd:null,x=p?p===wr?r.length:h.length:0);const w=p===wr&&/\b(transform|all)(,|$)/.test(s(`${wr}Property`).toString());return{type:p,timeout:b,propCount:x,hasTransform:w}}function FO(n,e){for(;n.lengthjO(a)+jO(n[s])))}function jO(n){return n==="auto"?0:Number(n.slice(0,-1).replace(",","."))*1e3}function pee(){return document.body.offsetHeight}function hee(n,e,a){const s=n[Hd];s&&(e=(e?[e,...s]:[...s]).join(" ")),e==null?n.removeAttribute("class"):a?n.setAttribute("class",e):n.className=e}const HO=Symbol("_vod"),fee=Symbol("_vsh"),mee=Symbol(""),vee=/(^|;)\s*display\s*:/;function yee(n,e,a){const s=n.style,o=sn(a);let r=!1;if(a&&!o){if(e)if(sn(e))for(const i of e.split(";")){const u=i.slice(0,i.indexOf(":")).trim();a[u]==null&&D1(s,u,"")}else for(const i in e)a[i]==null&&D1(s,i,"");for(const i in a)i==="display"&&(r=!0),D1(s,i,a[i])}else if(o){if(e!==a){const i=s[mee];i&&(a+=";"+i),s.cssText=a,r=vee.test(a)}}else e&&n.removeAttribute("style");HO in n&&(n[HO]=r?s.display:"",n[fee]&&(s.display="none"))}const NO=/\s*!important$/;function D1(n,e,a){if(Tt(a))a.forEach(s=>D1(n,e,s));else if(a==null&&(a=""),e.startsWith("--"))n.setProperty(e,a);else{const s=_ee(n,e);NO.test(a)?n.setProperty(Ul(s),a.replace(NO,""),"important"):n[s]=a}}const zO=["Webkit","Moz","ms"],N$={};function _ee(n,e){const a=N$[e];if(a)return a;let s=Io(e);if(s!=="filter"&&s in n)return N$[e]=s;s=RL(s);for(let o=0;oz$||(Mee.then(()=>z$=0),z$=Date.now());function See(n,e){const a=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=a.attached)return;Vs(Iee(s,a.value),e,5,[s])};return a.value=n,a.attached=Cee(),a}function Iee(n,e){if(Tt(e)){const a=n.stopImmediatePropagation;return n.stopImmediatePropagation=()=>{a.call(n),n._stopped=!0},e.map(s=>o=>!o._stopped&&s&&s(o))}else return e}const GO=n=>n.charCodeAt(0)===111&&n.charCodeAt(1)===110&&n.charCodeAt(2)>96&&n.charCodeAt(2)<123,Lee=(n,e,a,s,o,r,i,u,h)=>{const m=o==="svg";e==="class"?hee(n,s,m):e==="style"?yee(n,a,s):PL(e)?aT(e)||wee(n,e,a,s,i):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):$ee(n,e,s,m))?kee(n,e,s,r,i,u,h):(e==="true-value"?n._trueValue=s:e==="false-value"&&(n._falseValue=s),gee(n,e,s,m))};function $ee(n,e,a,s){if(s)return!!(e==="innerHTML"||e==="textContent"||e in n&&GO(e)&&Yt(a));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="form"||e==="list"&&n.tagName==="INPUT"||e==="type"&&n.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const o=n.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return GO(e)&&sn(a)?!1:e in n}const Gr=n=>{const e=n.props["onUpdate:modelValue"]||!1;return Tt(e)?a=>A1(e,a):e};function Aee(n){n.target.composing=!0}function ZO(n){const e=n.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const Fs=Symbol("_assign"),Lo={created(n,{modifiers:{lazy:e,trim:a,number:s}},o){n[Fs]=Gr(o);const r=s||o.props&&o.props.type==="number";Xo(n,e?"change":"input",i=>{if(i.target.composing)return;let u=n.value;a&&(u=u.trim()),r&&(u=Od(u)),n[Fs](u)}),a&&Xo(n,"change",()=>{n.value=n.value.trim()}),e||(Xo(n,"compositionstart",Aee),Xo(n,"compositionend",ZO),Xo(n,"change",ZO))},mounted(n,{value:e}){n.value=e??""},beforeUpdate(n,{value:e,modifiers:{lazy:a,trim:s,number:o}},r){if(n[Fs]=Gr(r),n.composing)return;const i=o||n.type==="number"?Od(n.value):n.value,u=e??"";i!==u&&(document.activeElement===n&&n.type!=="range"&&(a||s&&n.value.trim()===u)||(n.value=u))}},Eee={deep:!0,created(n,e,a){n[Fs]=Gr(a),Xo(n,"change",()=>{const s=n._modelValue,o=kc(n),r=n.checked,i=n[Fs];if(Tt(s)){const u=rT(s,o),h=u!==-1;if(r&&!h)i(s.concat(o));else if(!r&&h){const m=[...s];m.splice(u,1),i(m)}}else if(Pc(s)){const u=new Set(s);r?u.add(o):u.delete(o),i(u)}else i(eH(n,r))})},mounted:KO,beforeUpdate(n,e,a){n[Fs]=Gr(a),KO(n,e,a)}};function KO(n,{value:e,oldValue:a},s){n._modelValue=e,Tt(e)?n.checked=rT(e,s.props.value)>-1:Pc(e)?n.checked=e.has(s.props.value):e!==a&&(n.checked=Rl(e,eH(n,!0)))}const Tee={created(n,{value:e},a){n.checked=Rl(e,a.props.value),n[Fs]=Gr(a),Xo(n,"change",()=>{n[Fs](kc(n))})},beforeUpdate(n,{value:e,oldValue:a},s){n[Fs]=Gr(s),e!==a&&(n.checked=Rl(e,s.props.value))}},Jj={deep:!0,created(n,{value:e,modifiers:{number:a}},s){const o=Pc(e);Xo(n,"change",()=>{const r=Array.prototype.filter.call(n.options,i=>i.selected).map(i=>a?Od(kc(i)):kc(i));n[Fs](n.multiple?o?new Set(r):r:r[0]),n._assigning=!0,En(()=>{n._assigning=!1})}),n[Fs]=Gr(s)},mounted(n,{value:e,modifiers:{number:a}}){XO(n,e,a)},beforeUpdate(n,e,a){n[Fs]=Gr(a)},updated(n,{value:e,modifiers:{number:a}}){n._assigning||XO(n,e,a)}};function XO(n,e,a){const s=n.multiple,o=Tt(e);if(!(s&&!o&&!Pc(e))){for(let r=0,i=n.options.length;r-1}else u.selected=e.has(h);else if(Rl(kc(u),e)){n.selectedIndex!==r&&(n.selectedIndex=r);return}}!s&&n.selectedIndex!==-1&&(n.selectedIndex=-1)}}function kc(n){return"_value"in n?n._value:n.value}function eH(n,e){const a=e?"_trueValue":"_falseValue";return a in n?n[a]:e}const MT={created(n,e,a){y1(n,e,a,null,"created")},mounted(n,e,a){y1(n,e,a,null,"mounted")},beforeUpdate(n,e,a,s){y1(n,e,a,s,"beforeUpdate")},updated(n,e,a,s){y1(n,e,a,s,"updated")}};function Pee(n,e){switch(n){case"SELECT":return Jj;case"TEXTAREA":return Lo;default:switch(e){case"checkbox":return Eee;case"radio":return Tee;default:return Lo}}}function y1(n,e,a,s,o){const i=Pee(n.tagName,a.props&&a.props.type)[o];i&&i(n,e,a,s)}const Dee=["ctrl","shift","alt","meta"],Ree={stop:n=>n.stopPropagation(),prevent:n=>n.preventDefault(),self:n=>n.target!==n.currentTarget,ctrl:n=>!n.ctrlKey,shift:n=>!n.shiftKey,alt:n=>!n.altKey,meta:n=>!n.metaKey,left:n=>"button"in n&&n.button!==0,middle:n=>"button"in n&&n.button!==1,right:n=>"button"in n&&n.button!==2,exact:(n,e)=>Dee.some(a=>n[`${a}Key`]&&!e.includes(a))},Rt=(n,e)=>{const a=n._withMods||(n._withMods={}),s=e.join(".");return a[s]||(a[s]=(o,...r)=>{for(let i=0;i{const a=n._withKeys||(n._withKeys={}),s=e.join(".");return a[s]||(a[s]=o=>{if(!("key"in o))return;const r=Ul(o.key);if(e.some(i=>i===r||Oee[i]===r))return n(o)})},Vee=Mn({patchProp:Lee},iee);let YO;function Uee(){return YO||(YO=FJ(Vee))}const Fee=(...n)=>{const e=Uee().createApp(...n),{mount:a}=e;return e.mount=s=>{const o=Hee(s);if(!o)return;const r=e._component;!Yt(r)&&!r.render&&!r.template&&(r.template=o.innerHTML),o.innerHTML="";const i=a(o,!1,jee(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},e};function jee(n){if(n instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&n instanceof MathMLElement)return"mathml"}function Hee(n){return sn(n)?document.querySelector(n):n}var Nee=!1;/*! + * pinia v2.1.7 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */let tH;const WL=n=>tH=n,aH=Symbol();function XA(n){return n&&typeof n=="object"&&Object.prototype.toString.call(n)==="[object Object]"&&typeof n.toJSON!="function"}var Sd;(function(n){n.direct="direct",n.patchObject="patch object",n.patchFunction="patch function"})(Sd||(Sd={}));function zee(){const n=iT(!0),e=n.run(()=>O({}));let a=[],s=[];const o=VL({install(r){WL(o),o._a=r,r.provide(aH,o),r.config.globalProperties.$pinia=o,s.forEach(i=>a.push(i)),s=[]},use(r){return!this._a&&!Nee?s.push(r):a.push(r),this},_p:a,_a:null,_e:n,_s:new Map,state:e});return o}const nH=()=>{};function QO(n,e,a,s=nH){n.push(e);const o=()=>{const r=n.indexOf(e);r>-1&&(n.splice(r,1),s())};return!a&&tj()&&CQ(o),o}function rc(n,...e){n.slice().forEach(a=>{a(...e)})}const Bee=n=>n();function YA(n,e){n instanceof Map&&e instanceof Map&&e.forEach((a,s)=>n.set(s,a)),n instanceof Set&&e instanceof Set&&e.forEach(n.add,n);for(const a in e){if(!e.hasOwnProperty(a))continue;const s=e[a],o=n[a];XA(o)&&XA(s)&&n.hasOwnProperty(a)&&!on(s)&&!tr(s)?n[a]=YA(o,s):n[a]=s}return n}const qee=Symbol();function Wee(n){return!XA(n)||!n.hasOwnProperty(qee)}const{assign:Tr}=Object;function Gee(n){return!!(on(n)&&n.effect)}function Zee(n,e,a,s){const{state:o,actions:r,getters:i}=e,u=a.state.value[n];let h;function m(){u||(a.state.value[n]=o?o():{});const p=KQ(a.state.value[n]);return Tr(p,r,Object.keys(i||{}).reduce((b,x)=>(b[x]=VL(ee(()=>{WL(a);const w=a._s.get(n);return i[x].call(w,w)})),b),{}))}return h=sH(n,m,e,a,s,!0),h}function sH(n,e,a={},s,o,r){let i;const u=Tr({actions:{}},a),h={deep:!0};let m,p,b=[],x=[],w;const $=s.state.value[n];!r&&!$&&(s.state.value[n]={}),O({});let D;function V(v){let T;m=p=!1,typeof v=="function"?(v(s.state.value[n]),T={type:Sd.patchFunction,storeId:n,events:w}):(YA(s.state.value[n],v),T={type:Sd.patchObject,payload:v,storeId:n,events:w});const j=D=Symbol();En().then(()=>{D===j&&(m=!0)}),p=!0,rc(b,T,s.state.value[n])}const R=r?function(){const{state:T}=a,j=T?T():{};this.$patch(B=>{Tr(B,j)})}:nH;function E(){i.stop(),b=[],x=[],s._s.delete(n)}function P(v,T){return function(){WL(s);const j=Array.from(arguments),B=[],oe=[];function be(de){B.push(de)}function $e(de){oe.push(de)}rc(x,{args:j,name:v,store:C,after:be,onError:$e});let Le;try{Le=T.apply(this&&this.$id===n?this:C,j)}catch(de){throw rc(oe,de),de}return Le instanceof Promise?Le.then(de=>(rc(B,de),de)).catch(de=>(rc(oe,de),Promise.reject(de))):(rc(B,Le),Le)}}const S={_p:s,$id:n,$onAction:QO.bind(null,x),$patch:V,$reset:R,$subscribe(v,T={}){const j=QO(b,v,T.detached,()=>B()),B=i.run(()=>dt(()=>s.state.value[n],oe=>{(T.flush==="sync"?p:m)&&v({storeId:n,type:Sd.direct,events:w},oe)},Tr({},h,T)));return j},$dispose:E},C=gn(S);s._s.set(n,C);const g=(s._a&&s._a.runWithContext||Bee)(()=>s._e.run(()=>(i=iT()).run(e)));for(const v in g){const T=g[v];if(on(T)&&!Gee(T)||tr(T))r||($&&Wee(T)&&(on(T)?T.value=$[v]:YA(T,$[v])),s.state.value[n][v]=T);else if(typeof T=="function"){const j=P(v,T);g[v]=j,u.actions[v]=T}}return Tr(C,g),Tr(pa(C),g),Object.defineProperty(C,"$state",{get:()=>s.state.value[n],set:v=>{V(T=>{Tr(T,v)})}}),s._p.forEach(v=>{Tr(C,i.run(()=>v({store:C,app:s._a,pinia:s,options:u})))}),$&&r&&a.hydrate&&a.hydrate(C.$state,$),m=!0,p=!0,C}function Qr(n,e,a){let s,o;const r=typeof e=="function";typeof n=="string"?(s=n,o=r?a:e):(o=n,s=n.id);function i(u,h){const m=PJ();return u=u||(m?xt(aH,null):null),u&&WL(u),u=tH,u._s.has(s)||(r?sH(s,e,o,u):Zee(s,o,u)),u._s.get(s)}return i.$id=s,i}function Kee(n){{n=pa(n);const e={};for(const a in n){const s=n[a];(on(s)||tr(s))&&(e[a]=An(n,a))}return e}}const Dc=(n,e)=>{const a=n.__vccOpts||n;for(const[s,o]of e)a[s]=o;return a},Xee={};function Yee(n,e){const a=Qt("RouterView");return L(),ge(a)}const Qee=Dc(Xee,[["render",Yee]]);/*! + * vue-router v4.3.0 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */const ic=typeof document<"u";function Jee(n){return n.__esModule||n[Symbol.toStringTag]==="Module"}const $a=Object.assign;function B$(n,e){const a={};for(const s in e){const o=e[s];a[s]=so(o)?o.map(n):n(o)}return a}const Id=()=>{},so=Array.isArray,oH=/#/g,ete=/&/g,tte=/\//g,ate=/=/g,nte=/\?/g,rH=/\+/g,ste=/%5B/g,ote=/%5D/g,iH=/%5E/g,rte=/%60/g,lH=/%7B/g,ite=/%7C/g,cH=/%7D/g,lte=/%20/g;function CT(n){return encodeURI(""+n).replace(ite,"|").replace(ste,"[").replace(ote,"]")}function cte(n){return CT(n).replace(lH,"{").replace(cH,"}").replace(iH,"^")}function QA(n){return CT(n).replace(rH,"%2B").replace(lte,"+").replace(oH,"%23").replace(ete,"%26").replace(rte,"`").replace(lH,"{").replace(cH,"}").replace(iH,"^")}function dte(n){return QA(n).replace(ate,"%3D")}function ute(n){return CT(n).replace(oH,"%23").replace(nte,"%3F")}function pte(n){return n==null?"":ute(n).replace(tte,"%2F")}function Nd(n){try{return decodeURIComponent(""+n)}catch{}return""+n}const hte=/\/$/,fte=n=>n.replace(hte,"");function q$(n,e,a="/"){let s,o={},r="",i="";const u=e.indexOf("#");let h=e.indexOf("?");return u=0&&(h=-1),h>-1&&(s=e.slice(0,h),r=e.slice(h+1,u>-1?u:e.length),o=n(r)),u>-1&&(s=s||e.slice(0,u),i=e.slice(u,e.length)),s=_te(s??e,a),{fullPath:s+(r&&"?")+r+i,path:s,query:o,hash:Nd(i)}}function mte(n,e){const a=e.query?n(e.query):"";return e.path+(a&&"?")+a+(e.hash||"")}function JO(n,e){return!e||!n.toLowerCase().startsWith(e.toLowerCase())?n:n.slice(e.length)||"/"}function vte(n,e,a){const s=e.matched.length-1,o=a.matched.length-1;return s>-1&&s===o&&bc(e.matched[s],a.matched[o])&&dH(e.params,a.params)&&n(e.query)===n(a.query)&&e.hash===a.hash}function bc(n,e){return(n.aliasOf||n)===(e.aliasOf||e)}function dH(n,e){if(Object.keys(n).length!==Object.keys(e).length)return!1;for(const a in n)if(!yte(n[a],e[a]))return!1;return!0}function yte(n,e){return so(n)?eV(n,e):so(e)?eV(e,n):n===e}function eV(n,e){return so(e)?n.length===e.length&&n.every((a,s)=>a===e[s]):n.length===1&&n[0]===e}function _te(n,e){if(n.startsWith("/"))return n;if(!n)return e;const a=e.split("/"),s=n.split("/"),o=s[s.length-1];(o===".."||o===".")&&s.push("");let r=a.length-1,i,u;for(i=0;i1&&r--;else break;return a.slice(0,r).join("/")+"/"+s.slice(i).join("/")}var zd;(function(n){n.pop="pop",n.push="push"})(zd||(zd={}));var Ld;(function(n){n.back="back",n.forward="forward",n.unknown=""})(Ld||(Ld={}));function gte(n){if(!n)if(ic){const e=document.querySelector("base");n=e&&e.getAttribute("href")||"/",n=n.replace(/^\w+:\/\/[^\/]+/,"")}else n="/";return n[0]!=="/"&&n[0]!=="#"&&(n="/"+n),fte(n)}const kte=/^[^#]+#/;function bte(n,e){return n.replace(kte,"#")+e}function wte(n,e){const a=document.documentElement.getBoundingClientRect(),s=n.getBoundingClientRect();return{behavior:e.behavior,left:s.left-a.left-(e.left||0),top:s.top-a.top-(e.top||0)}}const GL=()=>({left:window.scrollX,top:window.scrollY});function xte(n){let e;if("el"in n){const a=n.el,s=typeof a=="string"&&a.startsWith("#"),o=typeof a=="string"?s?document.getElementById(a.slice(1)):document.querySelector(a):a;if(!o)return;e=wte(o,n)}else e=n;"scrollBehavior"in document.documentElement.style?window.scrollTo(e):window.scrollTo(e.left!=null?e.left:window.scrollX,e.top!=null?e.top:window.scrollY)}function tV(n,e){return(history.state?history.state.position-e:-1)+n}const JA=new Map;function Mte(n,e){JA.set(n,e)}function Cte(n){const e=JA.get(n);return JA.delete(n),e}let Ste=()=>location.protocol+"//"+location.host;function uH(n,e){const{pathname:a,search:s,hash:o}=e,r=n.indexOf("#");if(r>-1){let u=o.includes(n.slice(r))?n.slice(r).length:1,h=o.slice(u);return h[0]!=="/"&&(h="/"+h),JO(h,"")}return JO(a,n)+s+o}function Ite(n,e,a,s){let o=[],r=[],i=null;const u=({state:x})=>{const w=uH(n,location),$=a.value,D=e.value;let V=0;if(x){if(a.value=w,e.value=x,i&&i===$){i=null;return}V=D?x.position-D.position:0}else s(w);o.forEach(R=>{R(a.value,$,{delta:V,type:zd.pop,direction:V?V>0?Ld.forward:Ld.back:Ld.unknown})})};function h(){i=a.value}function m(x){o.push(x);const w=()=>{const $=o.indexOf(x);$>-1&&o.splice($,1)};return r.push(w),w}function p(){const{history:x}=window;x.state&&x.replaceState($a({},x.state,{scroll:GL()}),"")}function b(){for(const x of r)x();r=[],window.removeEventListener("popstate",u),window.removeEventListener("beforeunload",p)}return window.addEventListener("popstate",u),window.addEventListener("beforeunload",p,{passive:!0}),{pauseListeners:h,listen:m,destroy:b}}function aV(n,e,a,s=!1,o=!1){return{back:n,current:e,forward:a,replaced:s,position:window.history.length,scroll:o?GL():null}}function Lte(n){const{history:e,location:a}=window,s={value:uH(n,a)},o={value:e.state};o.value||r(s.value,{back:null,current:s.value,forward:null,position:e.length-1,replaced:!0,scroll:null},!0);function r(h,m,p){const b=n.indexOf("#"),x=b>-1?(a.host&&document.querySelector("base")?n:n.slice(b))+h:Ste()+n+h;try{e[p?"replaceState":"pushState"](m,"",x),o.value=m}catch(w){console.error(w),a[p?"replace":"assign"](x)}}function i(h,m){const p=$a({},e.state,aV(o.value.back,h,o.value.forward,!0),m,{position:o.value.position});r(h,p,!0),s.value=h}function u(h,m){const p=$a({},o.value,e.state,{forward:h,scroll:GL()});r(p.current,p,!0);const b=$a({},aV(s.value,h,null),{position:p.position+1},m);r(h,b,!1),s.value=h}return{location:s,state:o,push:u,replace:i}}function $te(n){n=gte(n);const e=Lte(n),a=Ite(n,e.state,e.location,e.replace);function s(r,i=!0){i||a.pauseListeners(),history.go(r)}const o=$a({location:"",base:n,go:s,createHref:bte.bind(null,n)},e,a);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>e.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>e.state.value}),o}function Ate(n){return typeof n=="string"||n&&typeof n=="object"}function pH(n){return typeof n=="string"||typeof n=="symbol"}const Mr={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},hH=Symbol("");var nV;(function(n){n[n.aborted=4]="aborted",n[n.cancelled=8]="cancelled",n[n.duplicated=16]="duplicated"})(nV||(nV={}));function wc(n,e){return $a(new Error,{type:n,[hH]:!0},e)}function qo(n,e){return n instanceof Error&&hH in n&&(e==null||!!(n.type&e))}const sV="[^/]+?",Ete={sensitive:!1,strict:!1,start:!0,end:!0},Tte=/[.+*?^${}()[\]/\\]/g;function Pte(n,e){const a=$a({},Ete,e),s=[];let o=a.start?"^":"";const r=[];for(const m of n){const p=m.length?[]:[90];a.strict&&!m.length&&(o+="/");for(let b=0;be.length?e.length===1&&e[0]===80?1:-1:0}function Rte(n,e){let a=0;const s=n.score,o=e.score;for(;a0&&e[e.length-1]<0}const Ote={type:0,value:""},Vte=/[a-zA-Z0-9_]/;function Ute(n){if(!n)return[[]];if(n==="/")return[[Ote]];if(!n.startsWith("/"))throw new Error(`Invalid path "${n}"`);function e(w){throw new Error(`ERR (${a})/"${m}": ${w}`)}let a=0,s=a;const o=[];let r;function i(){r&&o.push(r),r=[]}let u=0,h,m="",p="";function b(){m&&(a===0?r.push({type:0,value:m}):a===1||a===2||a===3?(r.length>1&&(h==="*"||h==="+")&&e(`A repeatable param (${m}) must be alone in its segment. eg: '/:ids+.`),r.push({type:1,value:m,regexp:p,repeatable:h==="*"||h==="+",optional:h==="*"||h==="?"})):e("Invalid state to consume buffer"),m="")}function x(){m+=h}for(;u{i(E)}:Id}function i(p){if(pH(p)){const b=s.get(p);b&&(s.delete(p),a.splice(a.indexOf(b),1),b.children.forEach(i),b.alias.forEach(i))}else{const b=a.indexOf(p);b>-1&&(a.splice(b,1),p.record.name&&s.delete(p.record.name),p.children.forEach(i),p.alias.forEach(i))}}function u(){return a}function h(p){let b=0;for(;b=0&&(p.record.path!==a[b].record.path||!fH(p,a[b]));)b++;a.splice(b,0,p),p.record.name&&!iV(p)&&s.set(p.record.name,p)}function m(p,b){let x,w={},$,D;if("name"in p&&p.name){if(x=s.get(p.name),!x)throw wc(1,{location:p});D=x.record.name,w=$a(rV(b.params,x.keys.filter(E=>!E.optional).concat(x.parent?x.parent.keys.filter(E=>E.optional):[]).map(E=>E.name)),p.params&&rV(p.params,x.keys.map(E=>E.name))),$=x.stringify(w)}else if(p.path!=null)$=p.path,x=a.find(E=>E.re.test($)),x&&(w=x.parse($),D=x.record.name);else{if(x=b.name?s.get(b.name):a.find(E=>E.re.test(b.path)),!x)throw wc(1,{location:p,currentLocation:b});D=x.record.name,w=$a({},b.params,p.params),$=x.stringify(w)}const V=[];let R=x;for(;R;)V.unshift(R.record),R=R.parent;return{name:D,path:$,params:w,matched:V,meta:zte(V)}}return n.forEach(p=>r(p)),{addRoute:r,resolve:m,removeRoute:i,getRoutes:u,getRecordMatcher:o}}function rV(n,e){const a={};for(const s of e)s in n&&(a[s]=n[s]);return a}function Hte(n){return{path:n.path,redirect:n.redirect,name:n.name,meta:n.meta||{},aliasOf:void 0,beforeEnter:n.beforeEnter,props:Nte(n),children:n.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in n?n.components||null:n.component&&{default:n.component}}}function Nte(n){const e={},a=n.props||!1;if("component"in n)e.default=a;else for(const s in n.components)e[s]=typeof a=="object"?a[s]:a;return e}function iV(n){for(;n;){if(n.record.aliasOf)return!0;n=n.parent}return!1}function zte(n){return n.reduce((e,a)=>$a(e,a.meta),{})}function lV(n,e){const a={};for(const s in n)a[s]=s in e?e[s]:n[s];return a}function fH(n,e){return e.children.some(a=>a===n||fH(n,a))}function Bte(n){const e={};if(n===""||n==="?")return e;const s=(n[0]==="?"?n.slice(1):n).split("&");for(let o=0;or&&QA(r)):[s&&QA(s)]).forEach(r=>{r!==void 0&&(e+=(e.length?"&":"")+a,r!=null&&(e+="="+r))})}return e}function qte(n){const e={};for(const a in n){const s=n[a];s!==void 0&&(e[a]=so(s)?s.map(o=>o==null?null:""+o):s==null?s:""+s)}return e}const Wte=Symbol(""),dV=Symbol(""),ZL=Symbol(""),ST=Symbol(""),eE=Symbol("");function id(){let n=[];function e(s){return n.push(s),()=>{const o=n.indexOf(s);o>-1&&n.splice(o,1)}}function a(){n=[]}return{add:e,list:()=>n.slice(),reset:a}}function Vr(n,e,a,s,o,r=i=>i()){const i=s&&(s.enterCallbacks[o]=s.enterCallbacks[o]||[]);return()=>new Promise((u,h)=>{const m=x=>{x===!1?h(wc(4,{from:a,to:e})):x instanceof Error?h(x):Ate(x)?h(wc(2,{from:e,to:x})):(i&&s.enterCallbacks[o]===i&&typeof x=="function"&&i.push(x),u())},p=r(()=>n.call(s&&s.instances[o],e,a,m));let b=Promise.resolve(p);n.length<3&&(b=b.then(m)),b.catch(x=>h(x))})}function W$(n,e,a,s,o=r=>r()){const r=[];for(const i of n)for(const u in i.components){let h=i.components[u];if(!(e!=="beforeRouteEnter"&&!i.instances[u]))if(Gte(h)){const p=(h.__vccOpts||h)[e];p&&r.push(Vr(p,a,s,i,u,o))}else{let m=h();r.push(()=>m.then(p=>{if(!p)return Promise.reject(new Error(`Couldn't resolve component "${u}" at "${i.path}"`));const b=Jee(p)?p.default:p;i.components[u]=b;const w=(b.__vccOpts||b)[e];return w&&Vr(w,a,s,i,u,o)()}))}}return r}function Gte(n){return typeof n=="object"||"displayName"in n||"props"in n||"__vccOpts"in n}function uV(n){const e=xt(ZL),a=xt(ST),s=ee(()=>e.resolve(t(n.to))),o=ee(()=>{const{matched:h}=s.value,{length:m}=h,p=h[m-1],b=a.matched;if(!p||!b.length)return-1;const x=b.findIndex(bc.bind(null,p));if(x>-1)return x;const w=pV(h[m-2]);return m>1&&pV(p)===w&&b[b.length-1].path!==w?b.findIndex(bc.bind(null,h[m-2])):x}),r=ee(()=>o.value>-1&&Yte(a.params,s.value.params)),i=ee(()=>o.value>-1&&o.value===a.matched.length-1&&dH(a.params,s.value.params));function u(h={}){return Xte(h)?e[t(n.replace)?"replace":"push"](t(n.to)).catch(Id):Promise.resolve()}return{route:s,href:ee(()=>s.value.href),isActive:r,isExactActive:i,navigate:u}}const Zte=Ce({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:uV,setup(n,{slots:e}){const a=gn(uV(n)),{options:s}=xt(ZL),o=ee(()=>({[hV(n.activeClass,s.linkActiveClass,"router-link-active")]:a.isActive,[hV(n.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:a.isExactActive}));return()=>{const r=e.default&&e.default(a);return n.custom?r:ya("a",{"aria-current":a.isExactActive?n.ariaCurrentValue:null,href:a.href,onClick:a.navigate,class:o.value},r)}}}),Kte=Zte;function Xte(n){if(!(n.metaKey||n.altKey||n.ctrlKey||n.shiftKey)&&!n.defaultPrevented&&!(n.button!==void 0&&n.button!==0)){if(n.currentTarget&&n.currentTarget.getAttribute){const e=n.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return n.preventDefault&&n.preventDefault(),!0}}function Yte(n,e){for(const a in e){const s=e[a],o=n[a];if(typeof s=="string"){if(s!==o)return!1}else if(!so(o)||o.length!==s.length||s.some((r,i)=>r!==o[i]))return!1}return!0}function pV(n){return n?n.aliasOf?n.aliasOf.path:n.path:""}const hV=(n,e,a)=>n??e??a,Qte=Ce({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(n,{attrs:e,slots:a}){const s=xt(eE),o=ee(()=>n.route||s.value),r=xt(dV,0),i=ee(()=>{let m=t(r);const{matched:p}=o.value;let b;for(;(b=p[m])&&!b.components;)m++;return m}),u=ee(()=>o.value.matched[i.value]);St(dV,ee(()=>i.value+1)),St(Wte,u),St(eE,o);const h=O();return dt(()=>[h.value,u.value,n.name],([m,p,b],[x,w,$])=>{p&&(p.instances[b]=m,w&&w!==p&&m&&m===x&&(p.leaveGuards.size||(p.leaveGuards=w.leaveGuards),p.updateGuards.size||(p.updateGuards=w.updateGuards))),m&&p&&(!w||!bc(p,w)||!x)&&(p.enterCallbacks[b]||[]).forEach(D=>D(m))},{flush:"post"}),()=>{const m=o.value,p=n.name,b=u.value,x=b&&b.components[p];if(!x)return fV(a.default,{Component:x,route:m});const w=b.props[p],$=w?w===!0?m.params:typeof w=="function"?w(m):w:null,V=ya(x,$a({},$,e,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(b.instances[p]=null)},ref:h}));return fV(a.default,{Component:V,route:m})||V}}});function fV(n,e){if(!n)return null;const a=n(e);return a.length===1?a[0]:a}const Jte=Qte;function eae(n){const e=jte(n.routes,n),a=n.parseQuery||Bte,s=n.stringifyQuery||cV,o=n.history,r=id(),i=id(),u=id(),h=UL(Mr);let m=Mr;ic&&n.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const p=B$.bind(null,Ae=>""+Ae),b=B$.bind(null,pte),x=B$.bind(null,Nd);function w(Ae,Xe){let ie,Y;return pH(Ae)?(ie=e.getRecordMatcher(Ae),Y=Xe):Y=Ae,e.addRoute(Y,ie)}function $(Ae){const Xe=e.getRecordMatcher(Ae);Xe&&e.removeRoute(Xe)}function D(){return e.getRoutes().map(Ae=>Ae.record)}function V(Ae){return!!e.getRecordMatcher(Ae)}function R(Ae,Xe){if(Xe=$a({},Xe||h.value),typeof Ae=="string"){const N=q$(a,Ae,Xe.path),Q=e.resolve({path:N.path},Xe),he=o.createHref(N.fullPath);return $a(N,Q,{params:x(Q.params),hash:Nd(N.hash),redirectedFrom:void 0,href:he})}let ie;if(Ae.path!=null)ie=$a({},Ae,{path:q$(a,Ae.path,Xe.path).path});else{const N=$a({},Ae.params);for(const Q in N)N[Q]==null&&delete N[Q];ie=$a({},Ae,{params:b(N)}),Xe.params=b(Xe.params)}const Y=e.resolve(ie,Xe),ue=Ae.hash||"";Y.params=p(x(Y.params));const pe=mte(s,$a({},Ae,{hash:cte(ue),path:Y.path})),H=o.createHref(pe);return $a({fullPath:pe,hash:ue,query:s===cV?qte(Ae.query):Ae.query||{}},Y,{redirectedFrom:void 0,href:H})}function E(Ae){return typeof Ae=="string"?q$(a,Ae,h.value.path):$a({},Ae)}function P(Ae,Xe){if(m!==Ae)return wc(8,{from:Xe,to:Ae})}function S(Ae){return g(Ae)}function C(Ae){return S($a(E(Ae),{replace:!0}))}function M(Ae){const Xe=Ae.matched[Ae.matched.length-1];if(Xe&&Xe.redirect){const{redirect:ie}=Xe;let Y=typeof ie=="function"?ie(Ae):ie;return typeof Y=="string"&&(Y=Y.includes("?")||Y.includes("#")?Y=E(Y):{path:Y},Y.params={}),$a({query:Ae.query,hash:Ae.hash,params:Y.path!=null?{}:Ae.params},Y)}}function g(Ae,Xe){const ie=m=R(Ae),Y=h.value,ue=Ae.state,pe=Ae.force,H=Ae.replace===!0,N=M(ie);if(N)return g($a(E(N),{state:typeof N=="object"?$a({},ue,N.state):ue,force:pe,replace:H}),Xe||ie);const Q=ie;Q.redirectedFrom=Xe;let he;return!pe&&vte(s,Y,ie)&&(he=wc(16,{to:Q,from:Y}),He(Y,Y,!0,!1)),(he?Promise.resolve(he):j(Q,Y)).catch(Se=>qo(Se)?qo(Se,2)?Se:Ee(Se):G(Se,Q,Y)).then(Se=>{if(Se){if(qo(Se,2))return g($a({replace:H},E(Se.to),{state:typeof Se.to=="object"?$a({},ue,Se.to.state):ue,force:pe}),Xe||Q)}else Se=oe(Q,Y,!0,H,ue);return B(Q,Y,Se),Se})}function v(Ae,Xe){const ie=P(Ae,Xe);return ie?Promise.reject(ie):Promise.resolve()}function T(Ae){const Xe=ut.values().next().value;return Xe&&typeof Xe.runWithContext=="function"?Xe.runWithContext(Ae):Ae()}function j(Ae,Xe){let ie;const[Y,ue,pe]=tae(Ae,Xe);ie=W$(Y.reverse(),"beforeRouteLeave",Ae,Xe);for(const N of Y)N.leaveGuards.forEach(Q=>{ie.push(Vr(Q,Ae,Xe))});const H=v.bind(null,Ae,Xe);return ie.push(H),kt(ie).then(()=>{ie=[];for(const N of r.list())ie.push(Vr(N,Ae,Xe));return ie.push(H),kt(ie)}).then(()=>{ie=W$(ue,"beforeRouteUpdate",Ae,Xe);for(const N of ue)N.updateGuards.forEach(Q=>{ie.push(Vr(Q,Ae,Xe))});return ie.push(H),kt(ie)}).then(()=>{ie=[];for(const N of pe)if(N.beforeEnter)if(so(N.beforeEnter))for(const Q of N.beforeEnter)ie.push(Vr(Q,Ae,Xe));else ie.push(Vr(N.beforeEnter,Ae,Xe));return ie.push(H),kt(ie)}).then(()=>(Ae.matched.forEach(N=>N.enterCallbacks={}),ie=W$(pe,"beforeRouteEnter",Ae,Xe,T),ie.push(H),kt(ie))).then(()=>{ie=[];for(const N of i.list())ie.push(Vr(N,Ae,Xe));return ie.push(H),kt(ie)}).catch(N=>qo(N,8)?N:Promise.reject(N))}function B(Ae,Xe,ie){u.list().forEach(Y=>T(()=>Y(Ae,Xe,ie)))}function oe(Ae,Xe,ie,Y,ue){const pe=P(Ae,Xe);if(pe)return pe;const H=Xe===Mr,N=ic?history.state:{};ie&&(Y||H?o.replace(Ae.fullPath,$a({scroll:H&&N&&N.scroll},ue)):o.push(Ae.fullPath,ue)),h.value=Ae,He(Ae,Xe,ie,H),Ee()}let be;function $e(){be||(be=o.listen((Ae,Xe,ie)=>{if(!ft.listening)return;const Y=R(Ae),ue=M(Y);if(ue){g($a(ue,{replace:!0}),Y).catch(Id);return}m=Y;const pe=h.value;ic&&Mte(tV(pe.fullPath,ie.delta),GL()),j(Y,pe).catch(H=>qo(H,12)?H:qo(H,2)?(g(H.to,Y).then(N=>{qo(N,20)&&!ie.delta&&ie.type===zd.pop&&o.go(-1,!1)}).catch(Id),Promise.reject()):(ie.delta&&o.go(-ie.delta,!1),G(H,Y,pe))).then(H=>{H=H||oe(Y,pe,!1),H&&(ie.delta&&!qo(H,8)?o.go(-ie.delta,!1):ie.type===zd.pop&&qo(H,20)&&o.go(-1,!1)),B(Y,pe,H)}).catch(Id)}))}let Le=id(),de=id(),J;function G(Ae,Xe,ie){Ee(Ae);const Y=de.list();return Y.length?Y.forEach(ue=>ue(Ae,Xe,ie)):console.error(Ae),Promise.reject(Ae)}function ce(){return J&&h.value!==Mr?Promise.resolve():new Promise((Ae,Xe)=>{Le.add([Ae,Xe])})}function Ee(Ae){return J||(J=!Ae,$e(),Le.list().forEach(([Xe,ie])=>Ae?ie(Ae):Xe()),Le.reset()),Ae}function He(Ae,Xe,ie,Y){const{scrollBehavior:ue}=n;if(!ic||!ue)return Promise.resolve();const pe=!ie&&Cte(tV(Ae.fullPath,0))||(Y||!ie)&&history.state&&history.state.scroll||null;return En().then(()=>ue(Ae,Xe,pe)).then(H=>H&&xte(H)).catch(H=>G(H,Ae,Xe))}const Ke=Ae=>o.go(Ae);let pt;const ut=new Set,ft={currentRoute:h,listening:!0,addRoute:w,removeRoute:$,hasRoute:V,getRoutes:D,resolve:R,options:n,push:S,replace:C,go:Ke,back:()=>Ke(-1),forward:()=>Ke(1),beforeEach:r.add,beforeResolve:i.add,afterEach:u.add,onError:de.add,isReady:ce,install(Ae){const Xe=this;Ae.component("RouterLink",Kte),Ae.component("RouterView",Jte),Ae.config.globalProperties.$router=Xe,Object.defineProperty(Ae.config.globalProperties,"$route",{enumerable:!0,get:()=>t(h)}),ic&&!pt&&h.value===Mr&&(pt=!0,S(o.location).catch(ue=>{}));const ie={};for(const ue in Mr)Object.defineProperty(ie,ue,{get:()=>h.value[ue],enumerable:!0});Ae.provide(ZL,Xe),Ae.provide(ST,hj(ie)),Ae.provide(eE,h);const Y=Ae.unmount;ut.add(Ae),Ae.unmount=function(){ut.delete(Ae),ut.size<1&&(m=Mr,be&&be(),be=null,h.value=Mr,pt=!1,J=!1),Y()}}};function kt(Ae){return Ae.reduce((Xe,ie)=>Xe.then(()=>T(ie)),Promise.resolve())}return ft}function tae(n,e){const a=[],s=[],o=[],r=Math.max(e.matched.length,n.matched.length);for(let i=0;ibc(m,u))?s.push(u):a.push(u));const h=n.matched[i];h&&(e.matched.find(m=>bc(m,h))||o.push(h))}return[a,s,o]}function ct(){return xt(ZL)}function Sa(){return xt(ST)}const To="data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%20512%20512'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='%23000000'%20d='M256%2032L20%20400l60%2064%2052.1-75.9L176%20432l50.5-50.5L256%20448l29.5-66.5L336%20432l43.9-43.9L432%20464l60-64L256%2032zm-9%2047v78l-39-13%2039-65zm18%200l39%2065-39%2013V79z'/%3e%3c/svg%3e";var ns="top",Ns="bottom",zs="right",ss="left",IT="auto",ru=[ns,Ns,zs,ss],xc="start",Bd="end",aae="clippingParents",mH="viewport",ld="popper",nae="reference",mV=ru.reduce(function(n,e){return n.concat([e+"-"+xc,e+"-"+Bd])},[]),vH=[].concat(ru,[IT]).reduce(function(n,e){return n.concat([e,e+"-"+xc,e+"-"+Bd])},[]),sae="beforeRead",oae="read",rae="afterRead",iae="beforeMain",lae="main",cae="afterMain",dae="beforeWrite",uae="write",pae="afterWrite",hae=[sae,oae,rae,iae,lae,cae,dae,uae,pae];function $o(n){return n?(n.nodeName||"").toLowerCase():null}function ws(n){if(n==null)return window;if(n.toString()!=="[object Window]"){var e=n.ownerDocument;return e&&e.defaultView||window}return n}function Ol(n){var e=ws(n).Element;return n instanceof e||n instanceof Element}function js(n){var e=ws(n).HTMLElement;return n instanceof e||n instanceof HTMLElement}function LT(n){if(typeof ShadowRoot>"u")return!1;var e=ws(n).ShadowRoot;return n instanceof e||n instanceof ShadowRoot}function fae(n){var e=n.state;Object.keys(e.elements).forEach(function(a){var s=e.styles[a]||{},o=e.attributes[a]||{},r=e.elements[a];!js(r)||!$o(r)||(Object.assign(r.style,s),Object.keys(o).forEach(function(i){var u=o[i];u===!1?r.removeAttribute(i):r.setAttribute(i,u===!0?"":u)}))})}function mae(n){var e=n.state,a={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,a.popper),e.styles=a,e.elements.arrow&&Object.assign(e.elements.arrow.style,a.arrow),function(){Object.keys(e.elements).forEach(function(s){var o=e.elements[s],r=e.attributes[s]||{},i=Object.keys(e.styles.hasOwnProperty(s)?e.styles[s]:a[s]),u=i.reduce(function(h,m){return h[m]="",h},{});!js(o)||!$o(o)||(Object.assign(o.style,u),Object.keys(r).forEach(function(h){o.removeAttribute(h)}))})}}const yH={name:"applyStyles",enabled:!0,phase:"write",fn:fae,effect:mae,requires:["computeStyles"]};function Co(n){return n.split("-")[0]}var Dl=Math.max,mL=Math.min,Mc=Math.round;function tE(){var n=navigator.userAgentData;return n!=null&&n.brands&&Array.isArray(n.brands)?n.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function _H(){return!/^((?!chrome|android).)*safari/i.test(tE())}function Cc(n,e,a){e===void 0&&(e=!1),a===void 0&&(a=!1);var s=n.getBoundingClientRect(),o=1,r=1;e&&js(n)&&(o=n.offsetWidth>0&&Mc(s.width)/n.offsetWidth||1,r=n.offsetHeight>0&&Mc(s.height)/n.offsetHeight||1);var i=Ol(n)?ws(n):window,u=i.visualViewport,h=!_H()&&a,m=(s.left+(h&&u?u.offsetLeft:0))/o,p=(s.top+(h&&u?u.offsetTop:0))/r,b=s.width/o,x=s.height/r;return{width:b,height:x,top:p,right:m+b,bottom:p+x,left:m,x:m,y:p}}function $T(n){var e=Cc(n),a=n.offsetWidth,s=n.offsetHeight;return Math.abs(e.width-a)<=1&&(a=e.width),Math.abs(e.height-s)<=1&&(s=e.height),{x:n.offsetLeft,y:n.offsetTop,width:a,height:s}}function gH(n,e){var a=e.getRootNode&&e.getRootNode();if(n.contains(e))return!0;if(a&<(a)){var s=e;do{if(s&&n.isSameNode(s))return!0;s=s.parentNode||s.host}while(s)}return!1}function sr(n){return ws(n).getComputedStyle(n)}function vae(n){return["table","td","th"].indexOf($o(n))>=0}function Jr(n){return((Ol(n)?n.ownerDocument:n.document)||window.document).documentElement}function KL(n){return $o(n)==="html"?n:n.assignedSlot||n.parentNode||(LT(n)?n.host:null)||Jr(n)}function vV(n){return!js(n)||sr(n).position==="fixed"?null:n.offsetParent}function yae(n){var e=/firefox/i.test(tE()),a=/Trident/i.test(tE());if(a&&js(n)){var s=sr(n);if(s.position==="fixed")return null}var o=KL(n);for(LT(o)&&(o=o.host);js(o)&&["html","body"].indexOf($o(o))<0;){var r=sr(o);if(r.transform!=="none"||r.perspective!=="none"||r.contain==="paint"||["transform","perspective"].indexOf(r.willChange)!==-1||e&&r.willChange==="filter"||e&&r.filter&&r.filter!=="none")return o;o=o.parentNode}return null}function iu(n){for(var e=ws(n),a=vV(n);a&&vae(a)&&sr(a).position==="static";)a=vV(a);return a&&($o(a)==="html"||$o(a)==="body"&&sr(a).position==="static")?e:a||yae(n)||e}function AT(n){return["top","bottom"].indexOf(n)>=0?"x":"y"}function $d(n,e,a){return Dl(n,mL(e,a))}function _ae(n,e,a){var s=$d(n,e,a);return s>a?a:s}function kH(){return{top:0,right:0,bottom:0,left:0}}function bH(n){return Object.assign({},kH(),n)}function wH(n,e){return e.reduce(function(a,s){return a[s]=n,a},{})}var gae=function(e,a){return e=typeof e=="function"?e(Object.assign({},a.rects,{placement:a.placement})):e,bH(typeof e!="number"?e:wH(e,ru))};function kae(n){var e,a=n.state,s=n.name,o=n.options,r=a.elements.arrow,i=a.modifiersData.popperOffsets,u=Co(a.placement),h=AT(u),m=[ss,zs].indexOf(u)>=0,p=m?"height":"width";if(!(!r||!i)){var b=gae(o.padding,a),x=$T(r),w=h==="y"?ns:ss,$=h==="y"?Ns:zs,D=a.rects.reference[p]+a.rects.reference[h]-i[h]-a.rects.popper[p],V=i[h]-a.rects.reference[h],R=iu(r),E=R?h==="y"?R.clientHeight||0:R.clientWidth||0:0,P=D/2-V/2,S=b[w],C=E-x[p]-b[$],M=E/2-x[p]/2+P,g=$d(S,M,C),v=h;a.modifiersData[s]=(e={},e[v]=g,e.centerOffset=g-M,e)}}function bae(n){var e=n.state,a=n.options,s=a.element,o=s===void 0?"[data-popper-arrow]":s;o!=null&&(typeof o=="string"&&(o=e.elements.popper.querySelector(o),!o)||gH(e.elements.popper,o)&&(e.elements.arrow=o))}const wae={name:"arrow",enabled:!0,phase:"main",fn:kae,effect:bae,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Sc(n){return n.split("-")[1]}var xae={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Mae(n,e){var a=n.x,s=n.y,o=e.devicePixelRatio||1;return{x:Mc(a*o)/o||0,y:Mc(s*o)/o||0}}function yV(n){var e,a=n.popper,s=n.popperRect,o=n.placement,r=n.variation,i=n.offsets,u=n.position,h=n.gpuAcceleration,m=n.adaptive,p=n.roundOffsets,b=n.isFixed,x=i.x,w=x===void 0?0:x,$=i.y,D=$===void 0?0:$,V=typeof p=="function"?p({x:w,y:D}):{x:w,y:D};w=V.x,D=V.y;var R=i.hasOwnProperty("x"),E=i.hasOwnProperty("y"),P=ss,S=ns,C=window;if(m){var M=iu(a),g="clientHeight",v="clientWidth";if(M===ws(a)&&(M=Jr(a),sr(M).position!=="static"&&u==="absolute"&&(g="scrollHeight",v="scrollWidth")),M=M,o===ns||(o===ss||o===zs)&&r===Bd){S=Ns;var T=b&&M===C&&C.visualViewport?C.visualViewport.height:M[g];D-=T-s.height,D*=h?1:-1}if(o===ss||(o===ns||o===Ns)&&r===Bd){P=zs;var j=b&&M===C&&C.visualViewport?C.visualViewport.width:M[v];w-=j-s.width,w*=h?1:-1}}var B=Object.assign({position:u},m&&xae),oe=p===!0?Mae({x:w,y:D},ws(a)):{x:w,y:D};if(w=oe.x,D=oe.y,h){var be;return Object.assign({},B,(be={},be[S]=E?"0":"",be[P]=R?"0":"",be.transform=(C.devicePixelRatio||1)<=1?"translate("+w+"px, "+D+"px)":"translate3d("+w+"px, "+D+"px, 0)",be))}return Object.assign({},B,(e={},e[S]=E?D+"px":"",e[P]=R?w+"px":"",e.transform="",e))}function Cae(n){var e=n.state,a=n.options,s=a.gpuAcceleration,o=s===void 0?!0:s,r=a.adaptive,i=r===void 0?!0:r,u=a.roundOffsets,h=u===void 0?!0:u,m={placement:Co(e.placement),variation:Sc(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,yV(Object.assign({},m,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:i,roundOffsets:h})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,yV(Object.assign({},m,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:h})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}const Sae={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Cae,data:{}};var _1={passive:!0};function Iae(n){var e=n.state,a=n.instance,s=n.options,o=s.scroll,r=o===void 0?!0:o,i=s.resize,u=i===void 0?!0:i,h=ws(e.elements.popper),m=[].concat(e.scrollParents.reference,e.scrollParents.popper);return r&&m.forEach(function(p){p.addEventListener("scroll",a.update,_1)}),u&&h.addEventListener("resize",a.update,_1),function(){r&&m.forEach(function(p){p.removeEventListener("scroll",a.update,_1)}),u&&h.removeEventListener("resize",a.update,_1)}}const Lae={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Iae,data:{}};var $ae={left:"right",right:"left",bottom:"top",top:"bottom"};function R1(n){return n.replace(/left|right|bottom|top/g,function(e){return $ae[e]})}var Aae={start:"end",end:"start"};function _V(n){return n.replace(/start|end/g,function(e){return Aae[e]})}function ET(n){var e=ws(n),a=e.pageXOffset,s=e.pageYOffset;return{scrollLeft:a,scrollTop:s}}function TT(n){return Cc(Jr(n)).left+ET(n).scrollLeft}function Eae(n,e){var a=ws(n),s=Jr(n),o=a.visualViewport,r=s.clientWidth,i=s.clientHeight,u=0,h=0;if(o){r=o.width,i=o.height;var m=_H();(m||!m&&e==="fixed")&&(u=o.offsetLeft,h=o.offsetTop)}return{width:r,height:i,x:u+TT(n),y:h}}function Tae(n){var e,a=Jr(n),s=ET(n),o=(e=n.ownerDocument)==null?void 0:e.body,r=Dl(a.scrollWidth,a.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),i=Dl(a.scrollHeight,a.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),u=-s.scrollLeft+TT(n),h=-s.scrollTop;return sr(o||a).direction==="rtl"&&(u+=Dl(a.clientWidth,o?o.clientWidth:0)-r),{width:r,height:i,x:u,y:h}}function PT(n){var e=sr(n),a=e.overflow,s=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(a+o+s)}function xH(n){return["html","body","#document"].indexOf($o(n))>=0?n.ownerDocument.body:js(n)&&PT(n)?n:xH(KL(n))}function Ad(n,e){var a;e===void 0&&(e=[]);var s=xH(n),o=s===((a=n.ownerDocument)==null?void 0:a.body),r=ws(s),i=o?[r].concat(r.visualViewport||[],PT(s)?s:[]):s,u=e.concat(i);return o?u:u.concat(Ad(KL(i)))}function aE(n){return Object.assign({},n,{left:n.x,top:n.y,right:n.x+n.width,bottom:n.y+n.height})}function Pae(n,e){var a=Cc(n,!1,e==="fixed");return a.top=a.top+n.clientTop,a.left=a.left+n.clientLeft,a.bottom=a.top+n.clientHeight,a.right=a.left+n.clientWidth,a.width=n.clientWidth,a.height=n.clientHeight,a.x=a.left,a.y=a.top,a}function gV(n,e,a){return e===mH?aE(Eae(n,a)):Ol(e)?Pae(e,a):aE(Tae(Jr(n)))}function Dae(n){var e=Ad(KL(n)),a=["absolute","fixed"].indexOf(sr(n).position)>=0,s=a&&js(n)?iu(n):n;return Ol(s)?e.filter(function(o){return Ol(o)&&gH(o,s)&&$o(o)!=="body"}):[]}function Rae(n,e,a,s){var o=e==="clippingParents"?Dae(n):[].concat(e),r=[].concat(o,[a]),i=r[0],u=r.reduce(function(h,m){var p=gV(n,m,s);return h.top=Dl(p.top,h.top),h.right=mL(p.right,h.right),h.bottom=mL(p.bottom,h.bottom),h.left=Dl(p.left,h.left),h},gV(n,i,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function MH(n){var e=n.reference,a=n.element,s=n.placement,o=s?Co(s):null,r=s?Sc(s):null,i=e.x+e.width/2-a.width/2,u=e.y+e.height/2-a.height/2,h;switch(o){case ns:h={x:i,y:e.y-a.height};break;case Ns:h={x:i,y:e.y+e.height};break;case zs:h={x:e.x+e.width,y:u};break;case ss:h={x:e.x-a.width,y:u};break;default:h={x:e.x,y:e.y}}var m=o?AT(o):null;if(m!=null){var p=m==="y"?"height":"width";switch(r){case xc:h[m]=h[m]-(e[p]/2-a[p]/2);break;case Bd:h[m]=h[m]+(e[p]/2-a[p]/2);break}}return h}function qd(n,e){e===void 0&&(e={});var a=e,s=a.placement,o=s===void 0?n.placement:s,r=a.strategy,i=r===void 0?n.strategy:r,u=a.boundary,h=u===void 0?aae:u,m=a.rootBoundary,p=m===void 0?mH:m,b=a.elementContext,x=b===void 0?ld:b,w=a.altBoundary,$=w===void 0?!1:w,D=a.padding,V=D===void 0?0:D,R=bH(typeof V!="number"?V:wH(V,ru)),E=x===ld?nae:ld,P=n.rects.popper,S=n.elements[$?E:x],C=Rae(Ol(S)?S:S.contextElement||Jr(n.elements.popper),h,p,i),M=Cc(n.elements.reference),g=MH({reference:M,element:P,strategy:"absolute",placement:o}),v=aE(Object.assign({},P,g)),T=x===ld?v:M,j={top:C.top-T.top+R.top,bottom:T.bottom-C.bottom+R.bottom,left:C.left-T.left+R.left,right:T.right-C.right+R.right},B=n.modifiersData.offset;if(x===ld&&B){var oe=B[o];Object.keys(j).forEach(function(be){var $e=[zs,Ns].indexOf(be)>=0?1:-1,Le=[ns,Ns].indexOf(be)>=0?"y":"x";j[be]+=oe[Le]*$e})}return j}function Oae(n,e){e===void 0&&(e={});var a=e,s=a.placement,o=a.boundary,r=a.rootBoundary,i=a.padding,u=a.flipVariations,h=a.allowedAutoPlacements,m=h===void 0?vH:h,p=Sc(s),b=p?u?mV:mV.filter(function($){return Sc($)===p}):ru,x=b.filter(function($){return m.indexOf($)>=0});x.length===0&&(x=b);var w=x.reduce(function($,D){return $[D]=qd(n,{placement:D,boundary:o,rootBoundary:r,padding:i})[Co(D)],$},{});return Object.keys(w).sort(function($,D){return w[$]-w[D]})}function Vae(n){if(Co(n)===IT)return[];var e=R1(n);return[_V(n),e,_V(e)]}function Uae(n){var e=n.state,a=n.options,s=n.name;if(!e.modifiersData[s]._skip){for(var o=a.mainAxis,r=o===void 0?!0:o,i=a.altAxis,u=i===void 0?!0:i,h=a.fallbackPlacements,m=a.padding,p=a.boundary,b=a.rootBoundary,x=a.altBoundary,w=a.flipVariations,$=w===void 0?!0:w,D=a.allowedAutoPlacements,V=e.options.placement,R=Co(V),E=R===V,P=h||(E||!$?[R1(V)]:Vae(V)),S=[V].concat(P).reduce(function(ut,ft){return ut.concat(Co(ft)===IT?Oae(e,{placement:ft,boundary:p,rootBoundary:b,padding:m,flipVariations:$,allowedAutoPlacements:D}):ft)},[]),C=e.rects.reference,M=e.rects.popper,g=new Map,v=!0,T=S[0],j=0;j=0,Le=$e?"width":"height",de=qd(e,{placement:B,boundary:p,rootBoundary:b,altBoundary:x,padding:m}),J=$e?be?zs:ss:be?Ns:ns;C[Le]>M[Le]&&(J=R1(J));var G=R1(J),ce=[];if(r&&ce.push(de[oe]<=0),u&&ce.push(de[J]<=0,de[G]<=0),ce.every(function(ut){return ut})){T=B,v=!1;break}g.set(B,ce)}if(v)for(var Ee=$?3:1,He=function(ft){var kt=S.find(function(Ae){var Xe=g.get(Ae);if(Xe)return Xe.slice(0,ft).every(function(ie){return ie})});if(kt)return T=kt,"break"},Ke=Ee;Ke>0;Ke--){var pt=He(Ke);if(pt==="break")break}e.placement!==T&&(e.modifiersData[s]._skip=!0,e.placement=T,e.reset=!0)}}const Fae={name:"flip",enabled:!0,phase:"main",fn:Uae,requiresIfExists:["offset"],data:{_skip:!1}};function kV(n,e,a){return a===void 0&&(a={x:0,y:0}),{top:n.top-e.height-a.y,right:n.right-e.width+a.x,bottom:n.bottom-e.height+a.y,left:n.left-e.width-a.x}}function bV(n){return[ns,zs,Ns,ss].some(function(e){return n[e]>=0})}function jae(n){var e=n.state,a=n.name,s=e.rects.reference,o=e.rects.popper,r=e.modifiersData.preventOverflow,i=qd(e,{elementContext:"reference"}),u=qd(e,{altBoundary:!0}),h=kV(i,s),m=kV(u,o,r),p=bV(h),b=bV(m);e.modifiersData[a]={referenceClippingOffsets:h,popperEscapeOffsets:m,isReferenceHidden:p,hasPopperEscaped:b},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":b})}const Hae={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:jae};function Nae(n,e,a){var s=Co(n),o=[ss,ns].indexOf(s)>=0?-1:1,r=typeof a=="function"?a(Object.assign({},e,{placement:n})):a,i=r[0],u=r[1];return i=i||0,u=(u||0)*o,[ss,zs].indexOf(s)>=0?{x:u,y:i}:{x:i,y:u}}function zae(n){var e=n.state,a=n.options,s=n.name,o=a.offset,r=o===void 0?[0,0]:o,i=vH.reduce(function(p,b){return p[b]=Nae(b,e.rects,r),p},{}),u=i[e.placement],h=u.x,m=u.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=h,e.modifiersData.popperOffsets.y+=m),e.modifiersData[s]=i}const Bae={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:zae};function qae(n){var e=n.state,a=n.name;e.modifiersData[a]=MH({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}const Wae={name:"popperOffsets",enabled:!0,phase:"read",fn:qae,data:{}};function Gae(n){return n==="x"?"y":"x"}function Zae(n){var e=n.state,a=n.options,s=n.name,o=a.mainAxis,r=o===void 0?!0:o,i=a.altAxis,u=i===void 0?!1:i,h=a.boundary,m=a.rootBoundary,p=a.altBoundary,b=a.padding,x=a.tether,w=x===void 0?!0:x,$=a.tetherOffset,D=$===void 0?0:$,V=qd(e,{boundary:h,rootBoundary:m,padding:b,altBoundary:p}),R=Co(e.placement),E=Sc(e.placement),P=!E,S=AT(R),C=Gae(S),M=e.modifiersData.popperOffsets,g=e.rects.reference,v=e.rects.popper,T=typeof D=="function"?D(Object.assign({},e.rects,{placement:e.placement})):D,j=typeof T=="number"?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),B=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,oe={x:0,y:0};if(M){if(r){var be,$e=S==="y"?ns:ss,Le=S==="y"?Ns:zs,de=S==="y"?"height":"width",J=M[S],G=J+V[$e],ce=J-V[Le],Ee=w?-v[de]/2:0,He=E===xc?g[de]:v[de],Ke=E===xc?-v[de]:-g[de],pt=e.elements.arrow,ut=w&&pt?$T(pt):{width:0,height:0},ft=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:kH(),kt=ft[$e],Ae=ft[Le],Xe=$d(0,g[de],ut[de]),ie=P?g[de]/2-Ee-Xe-kt-j.mainAxis:He-Xe-kt-j.mainAxis,Y=P?-g[de]/2+Ee+Xe+Ae+j.mainAxis:Ke+Xe+Ae+j.mainAxis,ue=e.elements.arrow&&iu(e.elements.arrow),pe=ue?S==="y"?ue.clientTop||0:ue.clientLeft||0:0,H=(be=B==null?void 0:B[S])!=null?be:0,N=J+ie-H-pe,Q=J+Y-H,he=$d(w?mL(G,N):G,J,w?Dl(ce,Q):ce);M[S]=he,oe[S]=he-J}if(u){var Se,Re=S==="x"?ns:ss,Ze=S==="x"?Ns:zs,ze=M[C],qe=C==="y"?"height":"width",Be=ze+V[Re],lt=ze-V[Ze],yt=[ns,ss].indexOf(R)!==-1,it=(Se=B==null?void 0:B[C])!=null?Se:0,Pe=yt?Be:ze-g[qe]-v[qe]-it+j.altAxis,Ue=yt?ze+g[qe]+v[qe]-it-j.altAxis:lt,ht=w&&yt?_ae(Pe,ze,Ue):$d(w?Pe:Be,ze,w?Ue:lt);M[C]=ht,oe[C]=ht-ze}e.modifiersData[s]=oe}}const Kae={name:"preventOverflow",enabled:!0,phase:"main",fn:Zae,requiresIfExists:["offset"]};function Xae(n){return{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}}function Yae(n){return n===ws(n)||!js(n)?ET(n):Xae(n)}function Qae(n){var e=n.getBoundingClientRect(),a=Mc(e.width)/n.offsetWidth||1,s=Mc(e.height)/n.offsetHeight||1;return a!==1||s!==1}function Jae(n,e,a){a===void 0&&(a=!1);var s=js(e),o=js(e)&&Qae(e),r=Jr(e),i=Cc(n,o,a),u={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(s||!s&&!a)&&(($o(e)!=="body"||PT(r))&&(u=Yae(e)),js(e)?(h=Cc(e,!0),h.x+=e.clientLeft,h.y+=e.clientTop):r&&(h.x=TT(r))),{x:i.left+u.scrollLeft-h.x,y:i.top+u.scrollTop-h.y,width:i.width,height:i.height}}function ene(n){var e=new Map,a=new Set,s=[];n.forEach(function(r){e.set(r.name,r)});function o(r){a.add(r.name);var i=[].concat(r.requires||[],r.requiresIfExists||[]);i.forEach(function(u){if(!a.has(u)){var h=e.get(u);h&&o(h)}}),s.push(r)}return n.forEach(function(r){a.has(r.name)||o(r)}),s}function tne(n){var e=ene(n);return hae.reduce(function(a,s){return a.concat(e.filter(function(o){return o.phase===s}))},[])}function ane(n){var e;return function(){return e||(e=new Promise(function(a){Promise.resolve().then(function(){e=void 0,a(n())})})),e}}function nne(n){var e=n.reduce(function(a,s){var o=a[s.name];return a[s.name]=o?Object.assign({},o,s,{options:Object.assign({},o.options,s.options),data:Object.assign({},o.data,s.data)}):s,a},{});return Object.keys(e).map(function(a){return e[a]})}var wV={placement:"bottom",modifiers:[],strategy:"absolute"};function xV(){for(var n=arguments.length,e=new Array(n),a=0;a',lne="tippy-box",CH="tippy-content",SH="tippy-backdrop",IH="tippy-arrow",LH="tippy-svg-arrow",gi={passive:!0,capture:!0},$H=function(){return document.body};function G$(n,e,a){if(Array.isArray(n)){var s=n[e];return s??(Array.isArray(a)?a[e]:a)}return n}function DT(n,e){var a={}.toString.call(n);return a.indexOf("[object")===0&&a.indexOf(e+"]")>-1}function AH(n,e){return typeof n=="function"?n.apply(void 0,e):n}function MV(n,e){if(e===0)return n;var a;return function(s){clearTimeout(a),a=setTimeout(function(){n(s)},e)}}function cne(n){return n.split(/\s+/).filter(Boolean)}function lc(n){return[].concat(n)}function CV(n,e){n.indexOf(e)===-1&&n.push(e)}function dne(n){return n.filter(function(e,a){return n.indexOf(e)===a})}function une(n){return n.split("-")[0]}function vL(n){return[].slice.call(n)}function SV(n){return Object.keys(n).reduce(function(e,a){return n[a]!==void 0&&(e[a]=n[a]),e},{})}function _c(){return document.createElement("div")}function XL(n){return["Element","Fragment"].some(function(e){return DT(n,e)})}function pne(n){return DT(n,"NodeList")}function hne(n){return DT(n,"MouseEvent")}function fne(n){return!!(n&&n._tippy&&n._tippy.reference===n)}function mne(n){return XL(n)?[n]:pne(n)?vL(n):Array.isArray(n)?n:vL(document.querySelectorAll(n))}function Z$(n,e){n.forEach(function(a){a&&(a.style.transitionDuration=e+"ms")})}function Wd(n,e){n.forEach(function(a){a&&a.setAttribute("data-state",e)})}function vne(n){var e,a=lc(n),s=a[0];return s!=null&&(e=s.ownerDocument)!=null&&e.body?s.ownerDocument:document}function yne(n,e){var a=e.clientX,s=e.clientY;return n.every(function(o){var r=o.popperRect,i=o.popperState,u=o.props,h=u.interactiveBorder,m=une(i.placement),p=i.modifiersData.offset;if(!p)return!0;var b=m==="bottom"?p.top.y:0,x=m==="top"?p.bottom.y:0,w=m==="right"?p.left.x:0,$=m==="left"?p.right.x:0,D=r.top-s+b>h,V=s-r.bottom-x>h,R=r.left-a+w>h,E=a-r.right-$>h;return D||V||R||E})}function K$(n,e,a){var s=e+"EventListener";["transitionend","webkitTransitionEnd"].forEach(function(o){n[s](o,a)})}function IV(n,e){for(var a=e;a;){var s;if(n.contains(a))return!0;a=a.getRootNode==null||(s=a.getRootNode())==null?void 0:s.host}return!1}var bo={isTouch:!1},LV=0;function _ne(){bo.isTouch||(bo.isTouch=!0,window.performance&&document.addEventListener("mousemove",EH))}function EH(){var n=performance.now();n-LV<20&&(bo.isTouch=!1,document.removeEventListener("mousemove",EH)),LV=n}function gne(){var n=document.activeElement;if(fne(n)){var e=n._tippy;n.blur&&!e.state.isVisible&&n.blur()}}function kne(){document.addEventListener("touchstart",_ne,gi),window.addEventListener("blur",gne)}var bne=typeof window<"u"&&typeof document<"u",wne=bne?!!window.msCrypto:!1,xne={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},Mne={allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999},ao=Object.assign({appendTo:$H,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},xne,Mne),Cne=Object.keys(ao),Sne=function(e){var a=Object.keys(e);a.forEach(function(s){ao[s]=e[s]})};function TH(n){var e=n.plugins||[],a=e.reduce(function(s,o){var r=o.name,i=o.defaultValue;if(r){var u;s[r]=n[r]!==void 0?n[r]:(u=ao[r])!=null?u:i}return s},{});return Object.assign({},n,a)}function Ine(n,e){var a=e?Object.keys(TH(Object.assign({},ao,{plugins:e}))):Cne,s=a.reduce(function(o,r){var i=(n.getAttribute("data-tippy-"+r)||"").trim();if(!i)return o;if(r==="content")o[r]=i;else try{o[r]=JSON.parse(i)}catch{o[r]=i}return o},{});return s}function $V(n,e){var a=Object.assign({},e,{content:AH(e.content,[n])},e.ignoreAttributes?{}:Ine(n,e.plugins));return a.aria=Object.assign({},ao.aria,a.aria),a.aria={expanded:a.aria.expanded==="auto"?e.interactive:a.aria.expanded,content:a.aria.content==="auto"?e.interactive?null:"describedby":a.aria.content},a}var Lne=function(){return"innerHTML"};function nE(n,e){n[Lne()]=e}function AV(n){var e=_c();return n===!0?e.className=IH:(e.className=LH,XL(n)?e.appendChild(n):nE(e,n)),e}function EV(n,e){XL(e.content)?(nE(n,""),n.appendChild(e.content)):typeof e.content!="function"&&(e.allowHTML?nE(n,e.content):n.textContent=e.content)}function yL(n){var e=n.firstElementChild,a=vL(e.children);return{box:e,content:a.find(function(s){return s.classList.contains(CH)}),arrow:a.find(function(s){return s.classList.contains(IH)||s.classList.contains(LH)}),backdrop:a.find(function(s){return s.classList.contains(SH)})}}function PH(n){var e=_c(),a=_c();a.className=lne,a.setAttribute("data-state","hidden"),a.setAttribute("tabindex","-1");var s=_c();s.className=CH,s.setAttribute("data-state","hidden"),EV(s,n.props),e.appendChild(a),a.appendChild(s),o(n.props,n.props);function o(r,i){var u=yL(e),h=u.box,m=u.content,p=u.arrow;i.theme?h.setAttribute("data-theme",i.theme):h.removeAttribute("data-theme"),typeof i.animation=="string"?h.setAttribute("data-animation",i.animation):h.removeAttribute("data-animation"),i.inertia?h.setAttribute("data-inertia",""):h.removeAttribute("data-inertia"),h.style.maxWidth=typeof i.maxWidth=="number"?i.maxWidth+"px":i.maxWidth,i.role?h.setAttribute("role",i.role):h.removeAttribute("role"),(r.content!==i.content||r.allowHTML!==i.allowHTML)&&EV(m,n.props),i.arrow?p?r.arrow!==i.arrow&&(h.removeChild(p),h.appendChild(AV(i.arrow))):h.appendChild(AV(i.arrow)):p&&h.removeChild(p)}return{popper:e,onUpdate:o}}PH.$$tippy=!0;var $ne=1,g1=[],X$=[];function Ane(n,e){var a=$V(n,Object.assign({},ao,TH(SV(e)))),s,o,r,i=!1,u=!1,h=!1,m=!1,p,b,x,w=[],$=MV(N,a.interactiveDebounce),D,V=$ne++,R=null,E=dne(a.plugins),P={isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},S={id:V,reference:n,popper:_c(),popperInstance:R,props:a,state:P,plugins:E,clearDelayTimeouts:Pe,setProps:Ue,setContent:ht,show:Mt,hide:Et,hideWithInteractivity:Jt,enable:yt,disable:it,unmount:ae,destroy:W};if(!a.render)return S;var C=a.render(S),M=C.popper,g=C.onUpdate;M.setAttribute("data-tippy-root",""),M.id="tippy-"+S.id,S.popper=M,n._tippy=S,M._tippy=S;var v=E.map(function(q){return q.fn(S)}),T=n.hasAttribute("aria-expanded");return ue(),Ee(),J(),G("onCreate",[S]),a.showOnCreate&&Be(),M.addEventListener("mouseenter",function(){S.props.interactive&&S.state.isVisible&&S.clearDelayTimeouts()}),M.addEventListener("mouseleave",function(){S.props.interactive&&S.props.trigger.indexOf("mouseenter")>=0&&$e().addEventListener("mousemove",$)}),S;function j(){var q=S.props.touch;return Array.isArray(q)?q:[q,0]}function B(){return j()[0]==="hold"}function oe(){var q;return!!((q=S.props.render)!=null&&q.$$tippy)}function be(){return D||n}function $e(){var q=be().parentNode;return q?vne(q):document}function Le(){return yL(M)}function de(q){return S.state.isMounted&&!S.state.isVisible||bo.isTouch||p&&p.type==="focus"?0:G$(S.props.delay,q?0:1,ao.delay)}function J(q){q===void 0&&(q=!1),M.style.pointerEvents=S.props.interactive&&!q?"":"none",M.style.zIndex=""+S.props.zIndex}function G(q,ve,te){if(te===void 0&&(te=!0),v.forEach(function(ye){ye[q]&&ye[q].apply(ye,ve)}),te){var ne;(ne=S.props)[q].apply(ne,ve)}}function ce(){var q=S.props.aria;if(q.content){var ve="aria-"+q.content,te=M.id,ne=lc(S.props.triggerTarget||n);ne.forEach(function(ye){var Ve=ye.getAttribute(ve);if(S.state.isVisible)ye.setAttribute(ve,Ve?Ve+" "+te:te);else{var We=Ve&&Ve.replace(te,"").trim();We?ye.setAttribute(ve,We):ye.removeAttribute(ve)}})}}function Ee(){if(!(T||!S.props.aria.expanded)){var q=lc(S.props.triggerTarget||n);q.forEach(function(ve){S.props.interactive?ve.setAttribute("aria-expanded",S.state.isVisible&&ve===be()?"true":"false"):ve.removeAttribute("aria-expanded")})}}function He(){$e().removeEventListener("mousemove",$),g1=g1.filter(function(q){return q!==$})}function Ke(q){if(!(bo.isTouch&&(h||q.type==="mousedown"))){var ve=q.composedPath&&q.composedPath()[0]||q.target;if(!(S.props.interactive&&IV(M,ve))){if(lc(S.props.triggerTarget||n).some(function(te){return IV(te,ve)})){if(bo.isTouch||S.state.isVisible&&S.props.trigger.indexOf("click")>=0)return}else G("onClickOutside",[S,q]);S.props.hideOnClick===!0&&(S.clearDelayTimeouts(),S.hide(),u=!0,setTimeout(function(){u=!1}),S.state.isMounted||kt())}}}function pt(){h=!0}function ut(){h=!1}function ft(){var q=$e();q.addEventListener("mousedown",Ke,!0),q.addEventListener("touchend",Ke,gi),q.addEventListener("touchstart",ut,gi),q.addEventListener("touchmove",pt,gi)}function kt(){var q=$e();q.removeEventListener("mousedown",Ke,!0),q.removeEventListener("touchend",Ke,gi),q.removeEventListener("touchstart",ut,gi),q.removeEventListener("touchmove",pt,gi)}function Ae(q,ve){ie(q,function(){!S.state.isVisible&&M.parentNode&&M.parentNode.contains(M)&&ve()})}function Xe(q,ve){ie(q,ve)}function ie(q,ve){var te=Le().box;function ne(ye){ye.target===te&&(K$(te,"remove",ne),ve())}if(q===0)return ve();K$(te,"remove",b),K$(te,"add",ne),b=ne}function Y(q,ve,te){te===void 0&&(te=!1);var ne=lc(S.props.triggerTarget||n);ne.forEach(function(ye){ye.addEventListener(q,ve,te),w.push({node:ye,eventType:q,handler:ve,options:te})})}function ue(){B()&&(Y("touchstart",H,{passive:!0}),Y("touchend",Q,{passive:!0})),cne(S.props.trigger).forEach(function(q){if(q!=="manual")switch(Y(q,H),q){case"mouseenter":Y("mouseleave",Q);break;case"focus":Y(wne?"focusout":"blur",he);break;case"focusin":Y("focusout",he);break}})}function pe(){w.forEach(function(q){var ve=q.node,te=q.eventType,ne=q.handler,ye=q.options;ve.removeEventListener(te,ne,ye)}),w=[]}function H(q){var ve,te=!1;if(!(!S.state.isEnabled||Se(q)||u)){var ne=((ve=p)==null?void 0:ve.type)==="focus";p=q,D=q.currentTarget,Ee(),!S.state.isVisible&&hne(q)&&g1.forEach(function(ye){return ye(q)}),q.type==="click"&&(S.props.trigger.indexOf("mouseenter")<0||i)&&S.props.hideOnClick!==!1&&S.state.isVisible?te=!0:Be(q),q.type==="click"&&(i=!te),te&&!ne&<(q)}}function N(q){var ve=q.target,te=be().contains(ve)||M.contains(ve);if(!(q.type==="mousemove"&&te)){var ne=qe().concat(M).map(function(ye){var Ve,We=ye._tippy,ga=(Ve=We.popperInstance)==null?void 0:Ve.state;return ga?{popperRect:ye.getBoundingClientRect(),popperState:ga,props:a}:null}).filter(Boolean);yne(ne,q)&&(He(),lt(q))}}function Q(q){var ve=Se(q)||S.props.trigger.indexOf("click")>=0&&i;if(!ve){if(S.props.interactive){S.hideWithInteractivity(q);return}lt(q)}}function he(q){S.props.trigger.indexOf("focusin")<0&&q.target!==be()||S.props.interactive&&q.relatedTarget&&M.contains(q.relatedTarget)||lt(q)}function Se(q){return bo.isTouch?B()!==q.type.indexOf("touch")>=0:!1}function Re(){Ze();var q=S.props,ve=q.popperOptions,te=q.placement,ne=q.offset,ye=q.getReferenceClientRect,Ve=q.moveTransition,We=oe()?yL(M).arrow:null,ga=ye?{getBoundingClientRect:ye,contextElement:ye.contextElement||be()}:n,_t={name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(Oa){var Cn=Oa.state;if(oe()){var ku=Le(),Bc=ku.box;["placement","reference-hidden","escaped"].forEach(function(ql){ql==="placement"?Bc.setAttribute("data-placement",Cn.placement):Cn.attributes.popper["data-popper-"+ql]?Bc.setAttribute("data-"+ql,""):Bc.removeAttribute("data-"+ql)}),Cn.attributes.popper={}}}},Wt=[{name:"offset",options:{offset:ne}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!Ve}},_t];oe()&&We&&Wt.push({name:"arrow",options:{element:We,padding:3}}),Wt.push.apply(Wt,(ve==null?void 0:ve.modifiers)||[]),S.popperInstance=rne(ga,M,Object.assign({},ve,{placement:te,onFirstUpdate:x,modifiers:Wt}))}function Ze(){S.popperInstance&&(S.popperInstance.destroy(),S.popperInstance=null)}function ze(){var q=S.props.appendTo,ve,te=be();S.props.interactive&&q===$H||q==="parent"?ve=te.parentNode:ve=AH(q,[te]),ve.contains(M)||ve.appendChild(M),S.state.isMounted=!0,Re()}function qe(){return vL(M.querySelectorAll("[data-tippy-root]"))}function Be(q){S.clearDelayTimeouts(),q&&G("onTrigger",[S,q]),ft();var ve=de(!0),te=j(),ne=te[0],ye=te[1];bo.isTouch&&ne==="hold"&&ye&&(ve=ye),ve?s=setTimeout(function(){S.show()},ve):S.show()}function lt(q){if(S.clearDelayTimeouts(),G("onUntrigger",[S,q]),!S.state.isVisible){kt();return}if(!(S.props.trigger.indexOf("mouseenter")>=0&&S.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(q.type)>=0&&i)){var ve=de(!1);ve?o=setTimeout(function(){S.state.isVisible&&S.hide()},ve):r=requestAnimationFrame(function(){S.hide()})}}function yt(){S.state.isEnabled=!0}function it(){S.hide(),S.state.isEnabled=!1}function Pe(){clearTimeout(s),clearTimeout(o),cancelAnimationFrame(r)}function Ue(q){if(!S.state.isDestroyed){G("onBeforeUpdate",[S,q]),pe();var ve=S.props,te=$V(n,Object.assign({},ve,SV(q),{ignoreAttributes:!0}));S.props=te,ue(),ve.interactiveDebounce!==te.interactiveDebounce&&(He(),$=MV(N,te.interactiveDebounce)),ve.triggerTarget&&!te.triggerTarget?lc(ve.triggerTarget).forEach(function(ne){ne.removeAttribute("aria-expanded")}):te.triggerTarget&&n.removeAttribute("aria-expanded"),Ee(),J(),g&&g(ve,te),S.popperInstance&&(Re(),qe().forEach(function(ne){requestAnimationFrame(ne._tippy.popperInstance.forceUpdate)})),G("onAfterUpdate",[S,q])}}function ht(q){S.setProps({content:q})}function Mt(){var q=S.state.isVisible,ve=S.state.isDestroyed,te=!S.state.isEnabled,ne=bo.isTouch&&!S.props.touch,ye=G$(S.props.duration,0,ao.duration);if(!(q||ve||te||ne)&&!be().hasAttribute("disabled")&&(G("onShow",[S],!1),S.props.onShow(S)!==!1)){if(S.state.isVisible=!0,oe()&&(M.style.visibility="visible"),J(),ft(),S.state.isMounted||(M.style.transition="none"),oe()){var Ve=Le(),We=Ve.box,ga=Ve.content;Z$([We,ga],0)}x=function(){var Wt;if(!(!S.state.isVisible||m)){if(m=!0,M.offsetHeight,M.style.transition=S.props.moveTransition,oe()&&S.props.animation){var oa=Le(),Oa=oa.box,Cn=oa.content;Z$([Oa,Cn],ye),Wd([Oa,Cn],"visible")}ce(),Ee(),CV(X$,S),(Wt=S.popperInstance)==null||Wt.forceUpdate(),G("onMount",[S]),S.props.animation&&oe()&&Xe(ye,function(){S.state.isShown=!0,G("onShown",[S])})}},ze()}}function Et(){var q=!S.state.isVisible,ve=S.state.isDestroyed,te=!S.state.isEnabled,ne=G$(S.props.duration,1,ao.duration);if(!(q||ve||te)&&(G("onHide",[S],!1),S.props.onHide(S)!==!1)){if(S.state.isVisible=!1,S.state.isShown=!1,m=!1,i=!1,oe()&&(M.style.visibility="hidden"),He(),kt(),J(!0),oe()){var ye=Le(),Ve=ye.box,We=ye.content;S.props.animation&&(Z$([Ve,We],ne),Wd([Ve,We],"hidden"))}ce(),Ee(),S.props.animation?oe()&&Ae(ne,S.unmount):S.unmount()}}function Jt(q){$e().addEventListener("mousemove",$),CV(g1,$),$(q)}function ae(){S.state.isVisible&&S.hide(),S.state.isMounted&&(Ze(),qe().forEach(function(q){q._tippy.unmount()}),M.parentNode&&M.parentNode.removeChild(M),X$=X$.filter(function(q){return q!==S}),S.state.isMounted=!1,G("onHidden",[S]))}function W(){S.state.isDestroyed||(S.clearDelayTimeouts(),S.unmount(),pe(),delete n._tippy,S.state.isDestroyed=!0,G("onDestroy",[S]))}}function lu(n,e){e===void 0&&(e={});var a=ao.plugins.concat(e.plugins||[]);kne();var s=Object.assign({},e,{plugins:a}),o=mne(n),r=o.reduce(function(i,u){var h=u&&Ane(u,s);return h&&i.push(h),i},[]);return XL(n)?r[0]:r}lu.defaultProps=ao;lu.setDefaultProps=Sne;lu.currentInput=bo;Object.assign({},yH,{effect:function(e){var a=e.state,s={popper:{position:a.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(a.elements.popper.style,s.popper),a.styles=s,a.elements.arrow&&Object.assign(a.elements.arrow.style,s.arrow)}});var Ene={name:"animateFill",defaultValue:!1,fn:function(e){var a;if(!((a=e.props.render)!=null&&a.$$tippy))return{};var s=yL(e.popper),o=s.box,r=s.content,i=e.props.animateFill?Tne():null;return{onCreate:function(){i&&(o.insertBefore(i,o.firstElementChild),o.setAttribute("data-animatefill",""),o.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var h=o.style.transitionDuration,m=Number(h.replace("ms",""));r.style.transitionDelay=Math.round(m/10)+"ms",i.style.transitionDuration=h,Wd([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&Wd([i],"hidden")}}}};function Tne(){var n=_c();return n.className=SH,Wd([n],"hidden"),n}lu.setDefaultProps({render:PH});const Qa=Ce({__name:"Tippy",props:{refKey:{},content:{},disable:{type:Boolean,default:!1},as:{default:"span"},options:{}},setup(n){const e=n,a=O(),s=(u,h)=>{lu(u,{plugins:[Ene],content:h.content,arrow:ine,popperOptions:{modifiers:[{name:"preventOverflow",options:{rootBoundary:"viewport"}}]},animateFill:!1,animation:"shift-away",...h.options})},o=u=>{if(e.refKey){const h=xt(`bind[${e.refKey}]`,()=>{});h&&h(u)}},r={mounted(u){a.value=u}},i=()=>{a.value&&a.value._tippy!==void 0&&(e.disable?a.value._tippy.disable():a.value._tippy.enable())};return dt(e,()=>{i()}),at(()=>{a.value&&(s(a.value,e),o(a.value),i())}),(u,h)=>rs((L(),ge(Da(u.as),{class:"cursor-pointer"},{default:f(()=>[Lt(u.$slots,"default")]),_:3})),[[r]])}});/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var k1={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pne=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),k=(n,e)=>({size:a,strokeWidth:s=2,absoluteStrokeWidth:o,color:r,class:i,...u},{attrs:h,slots:m})=>ya("svg",{...k1,width:a||k1.width,height:a||k1.height,stroke:r||k1.stroke,"stroke-width":o?Number(s)*24/Number(a):s,...h,class:["lucide",`lucide-${Pne(n)}`],...u},[...e.map(p=>ya(...p)),...m.default?[m.default()]:[]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O1=k("AArrowDownIcon",[["path",{d:"M3.5 13h6",key:"p1my2r"}],["path",{d:"m2 16 4.5-9 4.5 9",key:"ndf0b3"}],["path",{d:"M18 7v9",key:"pknjwm"}],["path",{d:"m14 12 4 4 4-4",key:"buelq4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V1=k("AArrowUpIcon",[["path",{d:"M3.5 13h6",key:"p1my2r"}],["path",{d:"m2 16 4.5-9 4.5 9",key:"ndf0b3"}],["path",{d:"M18 16V7",key:"ty0viw"}],["path",{d:"m14 11 4-4 4 4",key:"1pu57t"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U1=k("ALargeSmallIcon",[["path",{d:"M21 14h-5",key:"1vh23k"}],["path",{d:"M16 16v-3.5a2.5 2.5 0 0 1 5 0V16",key:"1wh10o"}],["path",{d:"M4.5 13h6",key:"dfilno"}],["path",{d:"m3 16 4.5-9 4.5 9",key:"2dxa0e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F1=k("AccessibilityIcon",[["circle",{cx:"16",cy:"4",r:"1",key:"1grugj"}],["path",{d:"m18 19 1-7-6 1",key:"r0i19z"}],["path",{d:"m5 8 3-3 5.5 3-2.36 3.5",key:"9ptxx2"}],["path",{d:"M4.24 14.5a5 5 0 0 0 6.88 6",key:"10kmtu"}],["path",{d:"M13.76 17.5a5 5 0 0 0-6.88-6",key:"2qq6rc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j1=k("ActivitySquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M17 12h-2l-2 5-2-10-2 5H7",key:"15hlnc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H1=k("ActivityIcon",[["path",{d:"M22 12h-4l-3 9L9 3l-3 9H2",key:"d5dnw9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N1=k("AirVentIcon",[["path",{d:"M6 12H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"larmp2"}],["path",{d:"M6 8h12",key:"6g4wlu"}],["path",{d:"M18.3 17.7a2.5 2.5 0 0 1-3.16 3.83 2.53 2.53 0 0 1-1.14-2V12",key:"1bo8pg"}],["path",{d:"M6.6 15.6A2 2 0 1 0 10 17v-5",key:"t9h90c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z1=k("AirplayIcon",[["path",{d:"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1",key:"ns4c3b"}],["polygon",{points:"12 15 17 21 7 21 12 15",key:"1sy95i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ki=k("AlarmClockCheckIcon",[["circle",{cx:"12",cy:"13",r:"8",key:"3y4lt7"}],["path",{d:"M5 3 2 6",key:"18tl5t"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.38 18.7 4 21",key:"17xu3x"}],["path",{d:"M17.64 18.67 20 21",key:"kv2oe2"}],["path",{d:"m9 13 2 2 4-4",key:"6343dt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bi=k("AlarmClockMinusIcon",[["circle",{cx:"12",cy:"13",r:"8",key:"3y4lt7"}],["path",{d:"M5 3 2 6",key:"18tl5t"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.38 18.7 4 21",key:"17xu3x"}],["path",{d:"M17.64 18.67 20 21",key:"kv2oe2"}],["path",{d:"M9 13h6",key:"1uhe8q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B1=k("AlarmClockOffIcon",[["path",{d:"M6.87 6.87a8 8 0 1 0 11.26 11.26",key:"3on8tj"}],["path",{d:"M19.9 14.25a8 8 0 0 0-9.15-9.15",key:"15ghsc"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.26 18.67 4 21",key:"yzmioq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M4 4 2 6",key:"1ycko6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wi=k("AlarmClockPlusIcon",[["circle",{cx:"12",cy:"13",r:"8",key:"3y4lt7"}],["path",{d:"M5 3 2 6",key:"18tl5t"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.38 18.7 4 21",key:"17xu3x"}],["path",{d:"M17.64 18.67 20 21",key:"kv2oe2"}],["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q1=k("AlarmClockIcon",[["circle",{cx:"12",cy:"13",r:"8",key:"3y4lt7"}],["path",{d:"M12 9v4l2 2",key:"1c63tq"}],["path",{d:"M5 3 2 6",key:"18tl5t"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.38 18.7 4 21",key:"17xu3x"}],["path",{d:"M17.64 18.67 20 21",key:"kv2oe2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W1=k("AlarmSmokeIcon",[["path",{d:"M4 8a2 2 0 0 1-2-2V3h20v3a2 2 0 0 1-2 2Z",key:"2c4fvq"}],["path",{d:"m19 8-.8 3c-.1.6-.6 1-1.2 1H7c-.6 0-1.1-.4-1.2-1L5 8",key:"1vrndv"}],["path",{d:"M16 21c0-2.5 2-2.5 2-5",key:"1o3eny"}],["path",{d:"M11 21c0-2.5 2-2.5 2-5",key:"1sicvv"}],["path",{d:"M6 21c0-2.5 2-2.5 2-5",key:"i3w1gp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G1=k("AlbumIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["polyline",{points:"11 3 11 11 14 8 17 11 17 3",key:"1wcwz3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z1=k("AlertCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K1=k("AlertOctagonIcon",[["polygon",{points:"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2",key:"h1p8hx"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X1=k("AlertTriangleIcon",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z",key:"c3ski4"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y1=k("AlignCenterHorizontalIcon",[["path",{d:"M2 12h20",key:"9i4pu4"}],["path",{d:"M10 16v4a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-4",key:"11f1s0"}],["path",{d:"M10 8V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v4",key:"t14dx9"}],["path",{d:"M20 16v1a2 2 0 0 1-2 2h-2a2 2 0 0 1-2-2v-1",key:"1w07xs"}],["path",{d:"M14 8V7c0-1.1.9-2 2-2h2a2 2 0 0 1 2 2v1",key:"1apec2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q1=k("AlignCenterVerticalIcon",[["path",{d:"M12 2v20",key:"t6zp3m"}],["path",{d:"M8 10H4a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h4",key:"14d6g8"}],["path",{d:"M16 10h4a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-4",key:"1e2lrw"}],["path",{d:"M8 20H7a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2h1",key:"1fkdwx"}],["path",{d:"M16 14h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1",key:"1euafb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J1=k("AlignCenterIcon",[["line",{x1:"21",x2:"3",y1:"6",y2:"6",key:"1fp77t"}],["line",{x1:"17",x2:"7",y1:"12",y2:"12",key:"rsh8ii"}],["line",{x1:"19",x2:"5",y1:"18",y2:"18",key:"1t0tuv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ep=k("AlignEndHorizontalIcon",[["rect",{width:"6",height:"16",x:"4",y:"2",rx:"2",key:"z5wdxg"}],["rect",{width:"6",height:"9",x:"14",y:"9",rx:"2",key:"um7a8w"}],["path",{d:"M22 22H2",key:"19qnx5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tp=k("AlignEndVerticalIcon",[["rect",{width:"16",height:"6",x:"2",y:"4",rx:"2",key:"10wcwx"}],["rect",{width:"9",height:"6",x:"9",y:"14",rx:"2",key:"4p5bwg"}],["path",{d:"M22 22V2",key:"12ipfv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ap=k("AlignHorizontalDistributeCenterIcon",[["rect",{width:"6",height:"14",x:"4",y:"5",rx:"2",key:"1wwnby"}],["rect",{width:"6",height:"10",x:"14",y:"7",rx:"2",key:"1fe6j6"}],["path",{d:"M17 22v-5",key:"4b6g73"}],["path",{d:"M17 7V2",key:"hnrr36"}],["path",{d:"M7 22v-3",key:"1r4jpn"}],["path",{d:"M7 5V2",key:"liy1u9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const np=k("AlignHorizontalDistributeEndIcon",[["rect",{width:"6",height:"14",x:"4",y:"5",rx:"2",key:"1wwnby"}],["rect",{width:"6",height:"10",x:"14",y:"7",rx:"2",key:"1fe6j6"}],["path",{d:"M10 2v20",key:"uyc634"}],["path",{d:"M20 2v20",key:"1tx262"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sp=k("AlignHorizontalDistributeStartIcon",[["rect",{width:"6",height:"14",x:"4",y:"5",rx:"2",key:"1wwnby"}],["rect",{width:"6",height:"10",x:"14",y:"7",rx:"2",key:"1fe6j6"}],["path",{d:"M4 2v20",key:"gtpd5x"}],["path",{d:"M14 2v20",key:"tg6bpw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const op=k("AlignHorizontalJustifyCenterIcon",[["rect",{width:"6",height:"14",x:"2",y:"5",rx:"2",key:"dy24zr"}],["rect",{width:"6",height:"10",x:"16",y:"7",rx:"2",key:"13zkjt"}],["path",{d:"M12 2v20",key:"t6zp3m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rp=k("AlignHorizontalJustifyEndIcon",[["rect",{width:"6",height:"14",x:"2",y:"5",rx:"2",key:"dy24zr"}],["rect",{width:"6",height:"10",x:"12",y:"7",rx:"2",key:"1ht384"}],["path",{d:"M22 2v20",key:"40qfg1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ip=k("AlignHorizontalJustifyStartIcon",[["rect",{width:"6",height:"14",x:"6",y:"5",rx:"2",key:"hsirpf"}],["rect",{width:"6",height:"10",x:"16",y:"7",rx:"2",key:"13zkjt"}],["path",{d:"M2 2v20",key:"1ivd8o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lp=k("AlignHorizontalSpaceAroundIcon",[["rect",{width:"6",height:"10",x:"9",y:"7",rx:"2",key:"yn7j0q"}],["path",{d:"M4 22V2",key:"tsjzd3"}],["path",{d:"M20 22V2",key:"1bnhr8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cp=k("AlignHorizontalSpaceBetweenIcon",[["rect",{width:"6",height:"14",x:"3",y:"5",rx:"2",key:"j77dae"}],["rect",{width:"6",height:"10",x:"15",y:"7",rx:"2",key:"bq30hj"}],["path",{d:"M3 2v20",key:"1d2pfg"}],["path",{d:"M21 2v20",key:"p059bm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dp=k("AlignJustifyIcon",[["line",{x1:"3",x2:"21",y1:"6",y2:"6",key:"4m8b97"}],["line",{x1:"3",x2:"21",y1:"12",y2:"12",key:"10d38w"}],["line",{x1:"3",x2:"21",y1:"18",y2:"18",key:"kwyyxn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const up=k("AlignLeftIcon",[["line",{x1:"21",x2:"3",y1:"6",y2:"6",key:"1fp77t"}],["line",{x1:"15",x2:"3",y1:"12",y2:"12",key:"v6grx8"}],["line",{x1:"17",x2:"3",y1:"18",y2:"18",key:"1awlsn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pp=k("AlignRightIcon",[["line",{x1:"21",x2:"3",y1:"6",y2:"6",key:"1fp77t"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}],["line",{x1:"21",x2:"7",y1:"18",y2:"18",key:"1g9eri"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hp=k("AlignStartHorizontalIcon",[["rect",{width:"6",height:"16",x:"4",y:"6",rx:"2",key:"1n4dg1"}],["rect",{width:"6",height:"9",x:"14",y:"6",rx:"2",key:"17khns"}],["path",{d:"M22 2H2",key:"fhrpnj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fp=k("AlignStartVerticalIcon",[["rect",{width:"9",height:"6",x:"6",y:"14",rx:"2",key:"lpm2y7"}],["rect",{width:"16",height:"6",x:"6",y:"4",rx:"2",key:"rdj6ps"}],["path",{d:"M2 2v20",key:"1ivd8o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mp=k("AlignVerticalDistributeCenterIcon",[["rect",{width:"14",height:"6",x:"5",y:"14",rx:"2",key:"jmoj9s"}],["rect",{width:"10",height:"6",x:"7",y:"4",rx:"2",key:"aza5on"}],["path",{d:"M22 7h-5",key:"o2endc"}],["path",{d:"M7 7H1",key:"105l6j"}],["path",{d:"M22 17h-3",key:"1lwga1"}],["path",{d:"M5 17H2",key:"1gx9xc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vp=k("AlignVerticalDistributeEndIcon",[["rect",{width:"14",height:"6",x:"5",y:"14",rx:"2",key:"jmoj9s"}],["rect",{width:"10",height:"6",x:"7",y:"4",rx:"2",key:"aza5on"}],["path",{d:"M2 20h20",key:"owomy5"}],["path",{d:"M2 10h20",key:"1ir3d8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yp=k("AlignVerticalDistributeStartIcon",[["rect",{width:"14",height:"6",x:"5",y:"14",rx:"2",key:"jmoj9s"}],["rect",{width:"10",height:"6",x:"7",y:"4",rx:"2",key:"aza5on"}],["path",{d:"M2 14h20",key:"myj16y"}],["path",{d:"M2 4h20",key:"mda7wb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _p=k("AlignVerticalJustifyCenterIcon",[["rect",{width:"14",height:"6",x:"5",y:"16",rx:"2",key:"1i8z2d"}],["rect",{width:"10",height:"6",x:"7",y:"2",rx:"2",key:"ypihtt"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gp=k("AlignVerticalJustifyEndIcon",[["rect",{width:"14",height:"6",x:"5",y:"12",rx:"2",key:"4l4tp2"}],["rect",{width:"10",height:"6",x:"7",y:"2",rx:"2",key:"ypihtt"}],["path",{d:"M2 22h20",key:"272qi7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kp=k("AlignVerticalJustifyStartIcon",[["rect",{width:"14",height:"6",x:"5",y:"16",rx:"2",key:"1i8z2d"}],["rect",{width:"10",height:"6",x:"7",y:"6",rx:"2",key:"13squh"}],["path",{d:"M2 2h20",key:"1ennik"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bp=k("AlignVerticalSpaceAroundIcon",[["rect",{width:"10",height:"6",x:"7",y:"9",rx:"2",key:"b1zbii"}],["path",{d:"M22 20H2",key:"1p1f7z"}],["path",{d:"M22 4H2",key:"1b7qnq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wp=k("AlignVerticalSpaceBetweenIcon",[["rect",{width:"14",height:"6",x:"5",y:"15",rx:"2",key:"1w91an"}],["rect",{width:"10",height:"6",x:"7",y:"3",rx:"2",key:"17wqzy"}],["path",{d:"M2 21h20",key:"1nyx9w"}],["path",{d:"M2 3h20",key:"91anmk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xp=k("AmpersandIcon",[["path",{d:"M17.5 12c0 4.4-3.6 8-8 8A4.5 4.5 0 0 1 5 15.5c0-6 8-4 8-8.5a3 3 0 1 0-6 0c0 3 2.5 8.5 12 13",key:"1o9ehi"}],["path",{d:"M16 12h3",key:"4uvgyw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mp=k("AmpersandsIcon",[["path",{d:"M10 17c-5-3-7-7-7-9a2 2 0 0 1 4 0c0 2.5-5 2.5-5 6 0 1.7 1.3 3 3 3 2.8 0 5-2.2 5-5",key:"12lh1k"}],["path",{d:"M22 17c-5-3-7-7-7-9a2 2 0 0 1 4 0c0 2.5-5 2.5-5 6 0 1.7 1.3 3 3 3 2.8 0 5-2.2 5-5",key:"173c68"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cp=k("AnchorIcon",[["circle",{cx:"12",cy:"5",r:"3",key:"rqqgnr"}],["line",{x1:"12",x2:"12",y1:"22",y2:"8",key:"abakz7"}],["path",{d:"M5 12H2a10 10 0 0 0 20 0h-3",key:"1hv3nh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sp=k("AngryIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M16 16s-1.5-2-4-2-4 2-4 2",key:"epbg0q"}],["path",{d:"M7.5 8 10 9",key:"olxxln"}],["path",{d:"m14 9 2.5-1",key:"1j6cij"}],["path",{d:"M9 10h0",key:"1vxvly"}],["path",{d:"M15 10h0",key:"1j6oav"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ip=k("AnnoyedIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 15h8",key:"45n4r"}],["path",{d:"M8 9h2",key:"1g203m"}],["path",{d:"M14 9h2",key:"116p9w"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lp=k("AntennaIcon",[["path",{d:"M2 12 7 2",key:"117k30"}],["path",{d:"m7 12 5-10",key:"1tvx22"}],["path",{d:"m12 12 5-10",key:"ev1o1a"}],["path",{d:"m17 12 5-10",key:"1e4ti3"}],["path",{d:"M4.5 7h15",key:"vlsxkz"}],["path",{d:"M12 16v6",key:"c8a4gj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $p=k("AnvilIcon",[["path",{d:"M7 10c-2.8 0-5-2.2-5-5h5",key:"1d6adc"}],["path",{d:"M7 4v8h7a8 8 0 0 0 8-8Z",key:"uu98hv"}],["path",{d:"M9 12v5",key:"3anwtq"}],["path",{d:"M15 12v5",key:"5xh3zn"}],["path",{d:"M5 20a3 3 0 0 1 3-3h8a3 3 0 0 1 3 3v1H5Z",key:"10a9tj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ap=k("ApertureIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"14.31",x2:"20.05",y1:"8",y2:"17.94",key:"jdes2e"}],["line",{x1:"9.69",x2:"21.17",y1:"8",y2:"8",key:"1gubuk"}],["line",{x1:"7.38",x2:"13.12",y1:"12",y2:"2.06",key:"1m4d1n"}],["line",{x1:"9.69",x2:"3.95",y1:"16",y2:"6.06",key:"1wye2p"}],["line",{x1:"14.31",x2:"2.83",y1:"16",y2:"16",key:"1l9f4x"}],["line",{x1:"16.62",x2:"10.88",y1:"12",y2:"21.94",key:"1jjvfs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ep=k("AppWindowIcon",[["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}],["path",{d:"M10 4v4",key:"pp8u80"}],["path",{d:"M2 8h20",key:"d11cs7"}],["path",{d:"M6 4v4",key:"1svtjw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tp=k("AppleIcon",[["path",{d:"M12 20.94c1.5 0 2.75 1.06 4 1.06 3 0 6-8 6-12.22A4.91 4.91 0 0 0 17 5c-2.22 0-4 1.44-5 2-1-.56-2.78-2-5-2a4.9 4.9 0 0 0-5 4.78C2 14 5 22 8 22c1.25 0 2.5-1.06 4-1.06Z",key:"3s7exb"}],["path",{d:"M10 2c1 .5 2 2 2 5",key:"fcco2y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pp=k("ArchiveRestoreIcon",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h2",key:"tvwodi"}],["path",{d:"M20 8v11a2 2 0 0 1-2 2h-2",key:"1gkqxj"}],["path",{d:"m9 15 3-3 3 3",key:"1pd0qc"}],["path",{d:"M12 12v9",key:"192myk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dp=k("ArchiveXIcon",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"m9.5 17 5-5",key:"nakeu6"}],["path",{d:"m9.5 12 5 5",key:"1hccrj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rp=k("ArchiveIcon",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Op=k("AreaChartIcon",[["path",{d:"M3 3v18h18",key:"1s2lah"}],["path",{d:"M7 12v5h12V8l-5 5-4-4Z",key:"zxz28u"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vp=k("ArmchairIcon",[["path",{d:"M19 9V6a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v3",key:"irtipd"}],["path",{d:"M3 16a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H7v-2a2 2 0 0 0-4 0Z",key:"1e01m0"}],["path",{d:"M5 18v2",key:"ppbyun"}],["path",{d:"M19 18v2",key:"gy7782"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Up=k("ArrowBigDownDashIcon",[["path",{d:"M15 5H9",key:"1tp3ed"}],["path",{d:"M15 9v3h4l-7 7-7-7h4V9h6z",key:"oscb9h"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fp=k("ArrowBigDownIcon",[["path",{d:"M15 6v6h4l-7 7-7-7h4V6h6z",key:"1thax2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jp=k("ArrowBigLeftDashIcon",[["path",{d:"M19 15V9",key:"1hci5f"}],["path",{d:"M15 15h-3v4l-7-7 7-7v4h3v6z",key:"16tjna"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hp=k("ArrowBigLeftIcon",[["path",{d:"M18 15h-6v4l-7-7 7-7v4h6v6z",key:"lbrdak"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Np=k("ArrowBigRightDashIcon",[["path",{d:"M5 9v6",key:"158jrl"}],["path",{d:"M9 9h3V5l7 7-7 7v-4H9V9z",key:"1sg2xn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zp=k("ArrowBigRightIcon",[["path",{d:"M6 9h6V5l7 7-7 7v-4H6V9z",key:"7fvt9c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bp=k("ArrowBigUpDashIcon",[["path",{d:"M9 19h6",key:"456am0"}],["path",{d:"M9 15v-3H5l7-7 7 7h-4v3H9z",key:"1r2uve"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qp=k("ArrowBigUpIcon",[["path",{d:"M9 18v-6H5l7-7 7 7h-4v6H9z",key:"1x06kx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wp=k("ArrowDown01Icon",[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 20V4",key:"1yoxec"}],["rect",{x:"15",y:"4",width:"4",height:"6",ry:"2",key:"1bwicg"}],["path",{d:"M17 20v-6h-2",key:"1qp1so"}],["path",{d:"M15 20h4",key:"1j968p"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gp=k("ArrowDown10Icon",[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 20V4",key:"1yoxec"}],["path",{d:"M17 10V4h-2",key:"zcsr5x"}],["path",{d:"M15 10h4",key:"id2lce"}],["rect",{x:"15",y:"14",width:"4",height:"6",ry:"2",key:"33xykx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xi=k("ArrowDownAZIcon",[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 20V4",key:"1yoxec"}],["path",{d:"M20 8h-5",key:"1vsyxs"}],["path",{d:"M15 10V6.5a2.5 2.5 0 0 1 5 0V10",key:"ag13bf"}],["path",{d:"M15 14h5l-5 6h5",key:"ur5jdg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zp=k("ArrowDownCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 8v8",key:"napkw2"}],["path",{d:"m8 12 4 4 4-4",key:"k98ssh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kp=k("ArrowDownFromLineIcon",[["path",{d:"M19 3H5",key:"1236rx"}],["path",{d:"M12 21V7",key:"gj6g52"}],["path",{d:"m6 15 6 6 6-6",key:"h15q88"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xp=k("ArrowDownLeftFromCircleIcon",[["path",{d:"M2 12a10 10 0 1 1 10 10",key:"1yn6ov"}],["path",{d:"m2 22 10-10",key:"28ilpk"}],["path",{d:"M8 22H2v-6",key:"sulq54"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yp=k("ArrowDownLeftSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m16 8-8 8",key:"166keh"}],["path",{d:"M16 16H8V8",key:"1w2ppm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qp=k("ArrowDownLeftIcon",[["path",{d:"M17 7 7 17",key:"15tmo1"}],["path",{d:"M17 17H7V7",key:"1org7z"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jp=k("ArrowDownNarrowWideIcon",[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 20V4",key:"1yoxec"}],["path",{d:"M11 4h4",key:"6d7r33"}],["path",{d:"M11 8h7",key:"djye34"}],["path",{d:"M11 12h10",key:"1438ji"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const eh=k("ArrowDownRightFromCircleIcon",[["path",{d:"M12 22a10 10 0 1 1 10-10",key:"130bv5"}],["path",{d:"M22 22 12 12",key:"131aw7"}],["path",{d:"M22 16v6h-6",key:"1gvm70"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const th=k("ArrowDownRightSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m8 8 8 8",key:"1imecy"}],["path",{d:"M16 8v8H8",key:"1lbpgo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ah=k("ArrowDownRightIcon",[["path",{d:"m7 7 10 10",key:"1fmybs"}],["path",{d:"M17 7v10H7",key:"6fjiku"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nh=k("ArrowDownSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 8v8",key:"napkw2"}],["path",{d:"m8 12 4 4 4-4",key:"k98ssh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sh=k("ArrowDownToDotIcon",[["path",{d:"M12 2v14",key:"jyx4ut"}],["path",{d:"m19 9-7 7-7-7",key:"1oe3oy"}],["circle",{cx:"12",cy:"21",r:"1",key:"o0uj5v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oh=k("ArrowDownToLineIcon",[["path",{d:"M12 17V3",key:"1cwfxf"}],["path",{d:"m6 11 6 6 6-6",key:"12ii2o"}],["path",{d:"M19 21H5",key:"150jfl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rh=k("ArrowDownUpIcon",[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 20V4",key:"1yoxec"}],["path",{d:"m21 8-4-4-4 4",key:"1c9v7m"}],["path",{d:"M17 4v16",key:"7dpous"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mi=k("ArrowDownWideNarrowIcon",[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 20V4",key:"1yoxec"}],["path",{d:"M11 4h10",key:"1w87gc"}],["path",{d:"M11 8h7",key:"djye34"}],["path",{d:"M11 12h4",key:"q8tih4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ci=k("ArrowDownZAIcon",[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 4v16",key:"1glfcx"}],["path",{d:"M15 4h5l-5 6h5",key:"8asdl1"}],["path",{d:"M15 20v-3.5a2.5 2.5 0 0 1 5 0V20",key:"r6l5cz"}],["path",{d:"M20 18h-5",key:"18j1r2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ih=k("ArrowDownIcon",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lh=k("ArrowLeftCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M16 12H8",key:"1fr5h0"}],["path",{d:"m12 8-4 4 4 4",key:"15vm53"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ch=k("ArrowLeftFromLineIcon",[["path",{d:"m9 6-6 6 6 6",key:"7v63n9"}],["path",{d:"M3 12h14",key:"13k4hi"}],["path",{d:"M21 19V5",key:"b4bplr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dh=k("ArrowLeftRightIcon",[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uh=k("ArrowLeftSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m12 8-4 4 4 4",key:"15vm53"}],["path",{d:"M16 12H8",key:"1fr5h0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ph=k("ArrowLeftToLineIcon",[["path",{d:"M3 19V5",key:"rwsyhb"}],["path",{d:"m13 6-6 6 6 6",key:"1yhaz7"}],["path",{d:"M7 12h14",key:"uoisry"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hh=k("ArrowLeftIcon",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fh=k("ArrowRightCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"m12 16 4-4-4-4",key:"1i9zcv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mh=k("ArrowRightFromLineIcon",[["path",{d:"M3 5v14",key:"1nt18q"}],["path",{d:"M21 12H7",key:"13ipq5"}],["path",{d:"m15 18 6-6-6-6",key:"6tx3qv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vh=k("ArrowRightLeftIcon",[["path",{d:"m16 3 4 4-4 4",key:"1x1c3m"}],["path",{d:"M20 7H4",key:"zbl0bi"}],["path",{d:"m8 21-4-4 4-4",key:"h9nckh"}],["path",{d:"M4 17h16",key:"g4d7ey"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yh=k("ArrowRightSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"m12 16 4-4-4-4",key:"1i9zcv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _h=k("ArrowRightToLineIcon",[["path",{d:"M17 12H3",key:"8awo09"}],["path",{d:"m11 18 6-6-6-6",key:"8c2y43"}],["path",{d:"M21 5v14",key:"nzette"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gh=k("ArrowRightIcon",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kh=k("ArrowUp01Icon",[["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}],["rect",{x:"15",y:"4",width:"4",height:"6",ry:"2",key:"1bwicg"}],["path",{d:"M17 20v-6h-2",key:"1qp1so"}],["path",{d:"M15 20h4",key:"1j968p"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bh=k("ArrowUp10Icon",[["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}],["path",{d:"M17 10V4h-2",key:"zcsr5x"}],["path",{d:"M15 10h4",key:"id2lce"}],["rect",{x:"15",y:"14",width:"4",height:"6",ry:"2",key:"33xykx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Si=k("ArrowUpAZIcon",[["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}],["path",{d:"M20 8h-5",key:"1vsyxs"}],["path",{d:"M15 10V6.5a2.5 2.5 0 0 1 5 0V10",key:"ag13bf"}],["path",{d:"M15 14h5l-5 6h5",key:"ur5jdg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wh=k("ArrowUpCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xh=k("ArrowUpDownIcon",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mh=k("ArrowUpFromDotIcon",[["path",{d:"m5 9 7-7 7 7",key:"1hw5ic"}],["path",{d:"M12 16V2",key:"ywoabb"}],["circle",{cx:"12",cy:"21",r:"1",key:"o0uj5v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ch=k("ArrowUpFromLineIcon",[["path",{d:"m18 9-6-6-6 6",key:"kcunyi"}],["path",{d:"M12 3v14",key:"7cf3v8"}],["path",{d:"M5 21h14",key:"11awu3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sh=k("ArrowUpLeftFromCircleIcon",[["path",{d:"M2 8V2h6",key:"hiwtdz"}],["path",{d:"m2 2 10 10",key:"1oh8rs"}],["path",{d:"M12 2A10 10 0 1 1 2 12",key:"rrk4fa"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ih=k("ArrowUpLeftSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 16V8h8",key:"19xb1h"}],["path",{d:"M16 16 8 8",key:"1qdy8n"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lh=k("ArrowUpLeftIcon",[["path",{d:"M7 17V7h10",key:"11bw93"}],["path",{d:"M17 17 7 7",key:"2786uv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ii=k("ArrowUpNarrowWideIcon",[["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}],["path",{d:"M11 12h4",key:"q8tih4"}],["path",{d:"M11 16h7",key:"uosisv"}],["path",{d:"M11 20h10",key:"jvxblo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $h=k("ArrowUpRightFromCircleIcon",[["path",{d:"M22 12A10 10 0 1 1 12 2",key:"1fm58d"}],["path",{d:"M22 2 12 12",key:"yg2myt"}],["path",{d:"M16 2h6v6",key:"zan5cs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ah=k("ArrowUpRightSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 8h8v8",key:"b65dnt"}],["path",{d:"m8 16 8-8",key:"13b9ih"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Eh=k("ArrowUpRightIcon",[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Th=k("ArrowUpSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ph=k("ArrowUpToLineIcon",[["path",{d:"M5 3h14",key:"7usisc"}],["path",{d:"m18 13-6-6-6 6",key:"1kf1n9"}],["path",{d:"M12 7v14",key:"1akyts"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dh=k("ArrowUpWideNarrowIcon",[["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}],["path",{d:"M11 12h10",key:"1438ji"}],["path",{d:"M11 16h7",key:"uosisv"}],["path",{d:"M11 20h4",key:"1krc32"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Li=k("ArrowUpZAIcon",[["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}],["path",{d:"M15 4h5l-5 6h5",key:"8asdl1"}],["path",{d:"M15 20v-3.5a2.5 2.5 0 0 1 5 0V20",key:"r6l5cz"}],["path",{d:"M20 18h-5",key:"18j1r2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rh=k("ArrowUpIcon",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Oh=k("ArrowsUpFromLineIcon",[["path",{d:"m4 6 3-3 3 3",key:"9aidw8"}],["path",{d:"M7 17V3",key:"19qxw1"}],["path",{d:"m14 6 3-3 3 3",key:"6iy689"}],["path",{d:"M17 17V3",key:"o0fmgi"}],["path",{d:"M4 21h16",key:"1h09gz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vh=k("AsteriskIcon",[["path",{d:"M12 6v12",key:"1vza4d"}],["path",{d:"M17.196 9 6.804 15",key:"1ah31z"}],["path",{d:"m6.804 9 10.392 6",key:"1b6pxd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Uh=k("AtSignIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8",key:"7n84p3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fh=k("AtomIcon",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["path",{d:"M20.2 20.2c2.04-2.03.02-7.36-4.5-11.9-4.54-4.52-9.87-6.54-11.9-4.5-2.04 2.03-.02 7.36 4.5 11.9 4.54 4.52 9.87 6.54 11.9 4.5Z",key:"1l2ple"}],["path",{d:"M15.7 15.7c4.52-4.54 6.54-9.87 4.5-11.9-2.03-2.04-7.36-.02-11.9 4.5-4.52 4.54-6.54 9.87-4.5 11.9 2.03 2.04 7.36.02 11.9-4.5Z",key:"1wam0m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jh=k("AudioLinesIcon",[["path",{d:"M2 10v3",key:"1fnikh"}],["path",{d:"M6 6v11",key:"11sgs0"}],["path",{d:"M10 3v18",key:"yhl04a"}],["path",{d:"M14 8v7",key:"3a1oy3"}],["path",{d:"M18 5v13",key:"123xd1"}],["path",{d:"M22 10v3",key:"154ddg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hh=k("AudioWaveformIcon",[["path",{d:"M2 13a2 2 0 0 0 2-2V7a2 2 0 0 1 4 0v13a2 2 0 0 0 4 0V4a2 2 0 0 1 4 0v13a2 2 0 0 0 4 0v-4a2 2 0 0 1 2-2",key:"57tc96"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nh=k("AwardIcon",[["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}],["path",{d:"M15.477 12.89 17 22l-5-3-5 3 1.523-9.11",key:"em7aur"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zh=k("AxeIcon",[["path",{d:"m14 12-8.5 8.5a2.12 2.12 0 1 1-3-3L11 9",key:"csbz4o"}],["path",{d:"M15 13 9 7l4-4 6 6h3a8 8 0 0 1-7 7z",key:"113wfo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $i=k("Axis3dIcon",[["path",{d:"M4 4v16h16",key:"1s015l"}],["path",{d:"m4 20 7-7",key:"17qe9y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bh=k("BabyIcon",[["path",{d:"M9 12h.01",key:"157uk2"}],["path",{d:"M15 12h.01",key:"1k8ypt"}],["path",{d:"M10 16c.5.3 1.2.5 2 .5s1.5-.2 2-.5",key:"1u7htd"}],["path",{d:"M19 6.3a9 9 0 0 1 1.8 3.9 2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1",key:"5yv0yz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qh=k("BackpackIcon",[["path",{d:"M4 10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z",key:"wvr1b5"}],["path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2",key:"donm21"}],["path",{d:"M8 21v-5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v5",key:"xk3gvk"}],["path",{d:"M8 10h8",key:"c7uz4u"}],["path",{d:"M8 18h8",key:"1no2b1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wh=k("BadgeAlertIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gh=k("BadgeCentIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M12 7v10",key:"jspqdw"}],["path",{d:"M15.4 10a4 4 0 1 0 0 4",key:"2eqtx8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ai=k("BadgeCheckIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zh=k("BadgeDollarSignIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8",key:"1h4pet"}],["path",{d:"M12 18V6",key:"zqpxq5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kh=k("BadgeEuroIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M7 12h5",key:"gblrwe"}],["path",{d:"M15 9.4a4 4 0 1 0 0 5.2",key:"1makmb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xh=k("BadgeHelpIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["line",{x1:"12",x2:"12.01",y1:"17",y2:"17",key:"io3f8k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yh=k("BadgeIndianRupeeIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M8 8h8",key:"1bis0t"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"m13 17-5-1h1a4 4 0 0 0 0-8",key:"nu2bwa"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qh=k("BadgeInfoIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["line",{x1:"12",x2:"12",y1:"16",y2:"12",key:"1y1yb1"}],["line",{x1:"12",x2:"12.01",y1:"8",y2:"8",key:"110wyk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jh=k("BadgeJapaneseYenIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 8 3 3v7",key:"17yadx"}],["path",{d:"m12 11 3-3",key:"p4cfq1"}],["path",{d:"M9 12h6",key:"1c52cq"}],["path",{d:"M9 16h6",key:"8wimt3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ef=k("BadgeMinusIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tf=k("BadgePercentIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M9 9h.01",key:"1q5me6"}],["path",{d:"M15 15h.01",key:"lqbp3k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const af=k("BadgePlusIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["line",{x1:"12",x2:"12",y1:"8",y2:"16",key:"10p56q"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nf=k("BadgePoundSterlingIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M8 12h4",key:"qz6y1c"}],["path",{d:"M10 16V9.5a2.5 2.5 0 0 1 5 0",key:"3mlbjk"}],["path",{d:"M8 16h7",key:"sbedsn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sf=k("BadgeRussianRubleIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M9 16h5",key:"1syiyw"}],["path",{d:"M9 12h5a2 2 0 1 0 0-4h-3v9",key:"1ge9c1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const of=k("BadgeSwissFrancIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M11 17V8h4",key:"1bfq6y"}],["path",{d:"M11 12h3",key:"2eqnfz"}],["path",{d:"M9 16h4",key:"1skf3a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rf=k("BadgeXIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["line",{x1:"15",x2:"9",y1:"9",y2:"15",key:"f7djnv"}],["line",{x1:"9",x2:"15",y1:"9",y2:"15",key:"1shsy8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lf=k("BadgeIcon",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cf=k("BaggageClaimIcon",[["path",{d:"M22 18H6a2 2 0 0 1-2-2V7a2 2 0 0 0-2-2",key:"4irg2o"}],["path",{d:"M17 14V4a2 2 0 0 0-2-2h-1a2 2 0 0 0-2 2v10",key:"14fcyx"}],["rect",{width:"13",height:"8",x:"8",y:"6",rx:"1",key:"o6oiis"}],["circle",{cx:"18",cy:"20",r:"2",key:"t9985n"}],["circle",{cx:"9",cy:"20",r:"2",key:"e5v82j"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const df=k("BanIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m4.9 4.9 14.2 14.2",key:"1m5liu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uf=k("BananaIcon",[["path",{d:"M4 13c3.5-2 8-2 10 2a5.5 5.5 0 0 1 8 5",key:"1cscit"}],["path",{d:"M5.15 17.89c5.52-1.52 8.65-6.89 7-12C11.55 4 11.5 2 13 2c3.22 0 5 5.5 5 8 0 6.5-4.2 12-10.49 12C5.11 22 2 22 2 20c0-1.5 1.14-1.55 3.15-2.11Z",key:"1y1nbv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pf=k("BanknoteIcon",[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2",key:"9lu3g6"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M6 12h.01M18 12h.01",key:"113zkx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hf=k("BarChart2Icon",[["line",{x1:"18",x2:"18",y1:"20",y2:"10",key:"1xfpm4"}],["line",{x1:"12",x2:"12",y1:"20",y2:"4",key:"be30l9"}],["line",{x1:"6",x2:"6",y1:"20",y2:"14",key:"1r4le6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ff=k("BarChart3Icon",[["path",{d:"M3 3v18h18",key:"1s2lah"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mf=k("BarChart4Icon",[["path",{d:"M3 3v18h18",key:"1s2lah"}],["path",{d:"M13 17V9",key:"1fwyjl"}],["path",{d:"M18 17V5",key:"sfb6ij"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vf=k("BarChartBigIcon",[["path",{d:"M3 3v18h18",key:"1s2lah"}],["rect",{width:"4",height:"7",x:"7",y:"10",rx:"1",key:"14u6mf"}],["rect",{width:"4",height:"12",x:"15",y:"5",rx:"1",key:"b3pek6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yf=k("BarChartHorizontalBigIcon",[["path",{d:"M3 3v18h18",key:"1s2lah"}],["rect",{width:"12",height:"4",x:"7",y:"5",rx:"1",key:"936jl1"}],["rect",{width:"7",height:"4",x:"7",y:"13",rx:"1",key:"jqfkpy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _f=k("BarChartHorizontalIcon",[["path",{d:"M3 3v18h18",key:"1s2lah"}],["path",{d:"M7 16h8",key:"srdodz"}],["path",{d:"M7 11h12",key:"127s9w"}],["path",{d:"M7 6h3",key:"w9rmul"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gf=k("BarChartIcon",[["line",{x1:"12",x2:"12",y1:"20",y2:"10",key:"1vz5eb"}],["line",{x1:"18",x2:"18",y1:"20",y2:"4",key:"cun8e5"}],["line",{x1:"6",x2:"6",y1:"20",y2:"16",key:"hq0ia6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kf=k("BarcodeIcon",[["path",{d:"M3 5v14",key:"1nt18q"}],["path",{d:"M8 5v14",key:"1ybrkv"}],["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"M17 5v14",key:"ycjyhj"}],["path",{d:"M21 5v14",key:"nzette"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bf=k("BaselineIcon",[["path",{d:"M4 20h16",key:"14thso"}],["path",{d:"m6 16 6-12 6 12",key:"1b4byz"}],["path",{d:"M8 12h8",key:"1wcyev"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wf=k("BathIcon",[["path",{d:"M9 6 6.5 3.5a1.5 1.5 0 0 0-1-.5C4.683 3 4 3.683 4 4.5V17a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5",key:"1r8yf5"}],["line",{x1:"10",x2:"8",y1:"5",y2:"7",key:"h5g8z4"}],["line",{x1:"2",x2:"22",y1:"12",y2:"12",key:"1dnqot"}],["line",{x1:"7",x2:"7",y1:"19",y2:"21",key:"16jp00"}],["line",{x1:"17",x2:"17",y1:"19",y2:"21",key:"1pxrnk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xf=k("BatteryChargingIcon",[["path",{d:"M15 7h1a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-2",key:"1sdynx"}],["path",{d:"M6 7H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h1",key:"1gkd3k"}],["path",{d:"m11 7-3 5h4l-3 5",key:"b4a64w"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13",key:"4dh1rd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mf=k("BatteryFullIcon",[["rect",{width:"16",height:"10",x:"2",y:"7",rx:"2",ry:"2",key:"1w10f2"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13",key:"4dh1rd"}],["line",{x1:"6",x2:"6",y1:"11",y2:"13",key:"1wd6dw"}],["line",{x1:"10",x2:"10",y1:"11",y2:"13",key:"haxvl5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"13",key:"c6fn6x"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cf=k("BatteryLowIcon",[["rect",{width:"16",height:"10",x:"2",y:"7",rx:"2",ry:"2",key:"1w10f2"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13",key:"4dh1rd"}],["line",{x1:"6",x2:"6",y1:"11",y2:"13",key:"1wd6dw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sf=k("BatteryMediumIcon",[["rect",{width:"16",height:"10",x:"2",y:"7",rx:"2",ry:"2",key:"1w10f2"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13",key:"4dh1rd"}],["line",{x1:"6",x2:"6",y1:"11",y2:"13",key:"1wd6dw"}],["line",{x1:"10",x2:"10",y1:"11",y2:"13",key:"haxvl5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const If=k("BatteryWarningIcon",[["path",{d:"M14 7h2a2 2 0 0 1 2 2v6c0 1-1 2-2 2h-2",key:"1if82c"}],["path",{d:"M6 7H4a2 2 0 0 0-2 2v6c0 1 1 2 2 2h2",key:"2pdlyl"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13",key:"4dh1rd"}],["line",{x1:"10",x2:"10",y1:"7",y2:"13",key:"1uzyus"}],["line",{x1:"10",x2:"10",y1:"17",y2:"17.01",key:"1y8k4g"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lf=k("BatteryIcon",[["rect",{width:"16",height:"10",x:"2",y:"7",rx:"2",ry:"2",key:"1w10f2"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13",key:"4dh1rd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $f=k("BeakerIcon",[["path",{d:"M4.5 3h15",key:"c7n0jr"}],["path",{d:"M6 3v16a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V3",key:"m1uhx7"}],["path",{d:"M6 14h12",key:"4cwo0f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Af=k("BeanOffIcon",[["path",{d:"M9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22a13.96 13.96 0 0 0 9.9-4.1",key:"bq3udt"}],["path",{d:"M10.75 5.093A6 6 0 0 1 22 8c0 2.411-.61 4.68-1.683 6.66",key:"17ccse"}],["path",{d:"M5.341 10.62a4 4 0 0 0 6.487 1.208M10.62 5.341a4.015 4.015 0 0 1 2.039 2.04",key:"18zqgq"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ef=k("BeanIcon",[["path",{d:"M10.165 6.598C9.954 7.478 9.64 8.36 9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22c7.732 0 14-6.268 14-14a6 6 0 0 0-11.835-1.402Z",key:"1tvzk7"}],["path",{d:"M5.341 10.62a4 4 0 1 0 5.279-5.28",key:"2cyri2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tf=k("BedDoubleIcon",[["path",{d:"M2 20v-8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v8",key:"1k78r4"}],["path",{d:"M4 10V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4",key:"fb3tl2"}],["path",{d:"M12 4v6",key:"1dcgq2"}],["path",{d:"M2 18h20",key:"ajqnye"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pf=k("BedSingleIcon",[["path",{d:"M3 20v-8a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v8",key:"1wm6mi"}],["path",{d:"M5 10V6a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v4",key:"4k93s5"}],["path",{d:"M3 18h18",key:"1h113x"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Df=k("BedIcon",[["path",{d:"M2 4v16",key:"vw9hq8"}],["path",{d:"M2 8h18a2 2 0 0 1 2 2v10",key:"1dgv2r"}],["path",{d:"M2 17h20",key:"18nfp3"}],["path",{d:"M6 8v9",key:"1yriud"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rf=k("BeefIcon",[["circle",{cx:"12.5",cy:"8.5",r:"2.5",key:"9738u8"}],["path",{d:"M12.5 2a6.5 6.5 0 0 0-6.22 4.6c-1.1 3.13-.78 3.9-3.18 6.08A3 3 0 0 0 5 18c4 0 8.4-1.8 11.4-4.3A6.5 6.5 0 0 0 12.5 2Z",key:"o0f6za"}],["path",{d:"m18.5 6 2.19 4.5a6.48 6.48 0 0 1 .31 2 6.49 6.49 0 0 1-2.6 5.2C15.4 20.2 11 22 7 22a3 3 0 0 1-2.68-1.66L2.4 16.5",key:"k7p6i0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Of=k("BeerIcon",[["path",{d:"M17 11h1a3 3 0 0 1 0 6h-1",key:"1yp76v"}],["path",{d:"M9 12v6",key:"1u1cab"}],["path",{d:"M13 12v6",key:"1sugkk"}],["path",{d:"M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z",key:"1510fo"}],["path",{d:"M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8",key:"19jb7n"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vf=k("BellDotIcon",[["path",{d:"M19.4 14.9C20.2 16.4 21 17 21 17H3s3-2 3-9c0-3.3 2.7-6 6-6 .7 0 1.3.1 1.9.3",key:"xcehk"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}],["circle",{cx:"18",cy:"8",r:"3",key:"1g0gzu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Uf=k("BellElectricIcon",[["path",{d:"M18.8 4A6.3 8.7 0 0 1 20 9",key:"xve1fh"}],["path",{d:"M9 9h.01",key:"1q5me6"}],["circle",{cx:"9",cy:"9",r:"7",key:"p2h5vp"}],["rect",{width:"10",height:"6",x:"4",y:"16",rx:"2",key:"17f3te"}],["path",{d:"M14 19c3 0 4.6-1.6 4.6-1.6",key:"n7odp6"}],["circle",{cx:"20",cy:"16",r:"2",key:"1v9bxh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ff=k("BellMinusIcon",[["path",{d:"M18.4 12c.8 3.8 2.6 5 2.6 5H3s3-2 3-9c0-3.3 2.7-6 6-6 1.8 0 3.4.8 4.5 2",key:"eck70s"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}],["path",{d:"M15 8h6",key:"8ybuxh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jf=k("BellOffIcon",[["path",{d:"M8.7 3A6 6 0 0 1 18 8a21.3 21.3 0 0 0 .6 5",key:"o7mx20"}],["path",{d:"M17 17H3s3-2 3-9a4.67 4.67 0 0 1 .3-1.7",key:"16f1lm"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hf=k("BellPlusIcon",[["path",{d:"M19.3 14.8C20.1 16.4 21 17 21 17H3s3-2 3-9c0-3.3 2.7-6 6-6 1 0 1.9.2 2.8.7",key:"guizqy"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}],["path",{d:"M15 8h6",key:"8ybuxh"}],["path",{d:"M18 5v6",key:"g5ayrv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nf=k("BellRingIcon",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}],["path",{d:"M4 2C2.8 3.7 2 5.7 2 8",key:"tap9e0"}],["path",{d:"M22 8c0-2.3-.8-4.3-2-6",key:"5bb3ad"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zf=k("BellIcon",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bf=k("BikeIcon",[["circle",{cx:"18.5",cy:"17.5",r:"3.5",key:"15x4ox"}],["circle",{cx:"5.5",cy:"17.5",r:"3.5",key:"1noe27"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["path",{d:"M12 17.5V14l-3-3 4-3 2 3h2",key:"1npguv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qf=k("BinaryIcon",[["rect",{x:"14",y:"14",width:"4",height:"6",rx:"2",key:"p02svl"}],["rect",{x:"6",y:"4",width:"4",height:"6",rx:"2",key:"xm4xkj"}],["path",{d:"M6 20h4",key:"1i6q5t"}],["path",{d:"M14 10h4",key:"ru81e7"}],["path",{d:"M6 14h2v6",key:"16z9wg"}],["path",{d:"M14 4h2v6",key:"1idq9u"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wf=k("BiohazardIcon",[["circle",{cx:"12",cy:"11.9",r:"2",key:"e8h31w"}],["path",{d:"M6.7 3.4c-.9 2.5 0 5.2 2.2 6.7C6.5 9 3.7 9.6 2 11.6",key:"17bolr"}],["path",{d:"m8.9 10.1 1.4.8",key:"15ezny"}],["path",{d:"M17.3 3.4c.9 2.5 0 5.2-2.2 6.7 2.4-1.2 5.2-.6 6.9 1.5",key:"wtwa5u"}],["path",{d:"m15.1 10.1-1.4.8",key:"1r0b28"}],["path",{d:"M16.7 20.8c-2.6-.4-4.6-2.6-4.7-5.3-.2 2.6-2.1 4.8-4.7 5.2",key:"m7qszh"}],["path",{d:"M12 13.9v1.6",key:"zfyyim"}],["path",{d:"M13.5 5.4c-1-.2-2-.2-3 0",key:"1bi9q0"}],["path",{d:"M17 16.4c.7-.7 1.2-1.6 1.5-2.5",key:"1rhjqw"}],["path",{d:"M5.5 13.9c.3.9.8 1.8 1.5 2.5",key:"8gsud3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gf=k("BirdIcon",[["path",{d:"M16 7h.01",key:"1kdx03"}],["path",{d:"M3.4 18H12a8 8 0 0 0 8-8V7a4 4 0 0 0-7.28-2.3L2 20",key:"oj1oa8"}],["path",{d:"m20 7 2 .5-2 .5",key:"12nv4d"}],["path",{d:"M10 18v3",key:"1yea0a"}],["path",{d:"M14 17.75V21",key:"1pymcb"}],["path",{d:"M7 18a6 6 0 0 0 3.84-10.61",key:"1npnn0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zf=k("BitcoinIcon",[["path",{d:"M11.767 19.089c4.924.868 6.14-6.025 1.216-6.894m-1.216 6.894L5.86 18.047m5.908 1.042-.347 1.97m1.563-8.864c4.924.869 6.14-6.025 1.215-6.893m-1.215 6.893-3.94-.694m5.155-6.2L8.29 4.26m5.908 1.042.348-1.97M7.48 20.364l3.126-17.727",key:"yr8idg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kf=k("BlindsIcon",[["path",{d:"M3 3h18",key:"o7r712"}],["path",{d:"M20 7H8",key:"gd2fo2"}],["path",{d:"M20 11H8",key:"1ynp89"}],["path",{d:"M10 19h10",key:"19hjk5"}],["path",{d:"M8 15h12",key:"1yqzne"}],["path",{d:"M4 3v14",key:"fggqzn"}],["circle",{cx:"4",cy:"19",r:"2",key:"p3m9r0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xf=k("BlocksIcon",[["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["path",{d:"M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3",key:"1fpvtg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yf=k("BluetoothConnectedIcon",[["path",{d:"m7 7 10 10-5 5V2l5 5L7 17",key:"1q5490"}],["line",{x1:"18",x2:"21",y1:"12",y2:"12",key:"1rsjjs"}],["line",{x1:"3",x2:"6",y1:"12",y2:"12",key:"11yl8c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qf=k("BluetoothOffIcon",[["path",{d:"m17 17-5 5V12l-5 5",key:"v5aci6"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M14.5 9.5 17 7l-5-5v4.5",key:"1kddfz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jf=k("BluetoothSearchingIcon",[["path",{d:"m7 7 10 10-5 5V2l5 5L7 17",key:"1q5490"}],["path",{d:"M20.83 14.83a4 4 0 0 0 0-5.66",key:"k8tn1j"}],["path",{d:"M18 12h.01",key:"yjnet6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const em=k("BluetoothIcon",[["path",{d:"m7 7 10 10-5 5V2l5 5L7 17",key:"1q5490"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tm=k("BoldIcon",[["path",{d:"M14 12a4 4 0 0 0 0-8H6v8",key:"v2sylx"}],["path",{d:"M15 20a4 4 0 0 0 0-8H6v8Z",key:"1ef5ya"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const am=k("BoltIcon",[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",key:"yt0hxn"}],["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nm=k("BombIcon",[["circle",{cx:"11",cy:"13",r:"9",key:"hd149"}],["path",{d:"M14.35 4.65 16.3 2.7a2.41 2.41 0 0 1 3.4 0l1.6 1.6a2.4 2.4 0 0 1 0 3.4l-1.95 1.95",key:"jp4j1b"}],["path",{d:"m22 2-1.5 1.5",key:"ay92ug"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sm=k("BoneIcon",[["path",{d:"M17 10c.7-.7 1.69 0 2.5 0a2.5 2.5 0 1 0 0-5 .5.5 0 0 1-.5-.5 2.5 2.5 0 1 0-5 0c0 .81.7 1.8 0 2.5l-7 7c-.7.7-1.69 0-2.5 0a2.5 2.5 0 0 0 0 5c.28 0 .5.22.5.5a2.5 2.5 0 1 0 5 0c0-.81-.7-1.8 0-2.5Z",key:"w610uw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const om=k("BookAIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"m8 13 4-7 4 7",key:"4rari8"}],["path",{d:"M9.1 11h5.7",key:"1gkovt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rm=k("BookAudioIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"M8 8v3",key:"1qzp49"}],["path",{d:"M12 6v7",key:"1f6ttz"}],["path",{d:"M16 8v3",key:"gejaml"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const im=k("BookCheckIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"m9 9.5 2 2 4-4",key:"1dth82"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lm=k("BookCopyIcon",[["path",{d:"M2 16V4a2 2 0 0 1 2-2h11",key:"spzkk5"}],["path",{d:"M5 14H4a2 2 0 1 0 0 4h1",key:"16gqf9"}],["path",{d:"M22 18H11a2 2 0 1 0 0 4h11V6H11a2 2 0 0 0-2 2v12",key:"1owzki"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ei=k("BookDashedIcon",[["path",{d:"M20 22h-2",key:"1rpnb6"}],["path",{d:"M20 15v2h-2",key:"fph276"}],["path",{d:"M4 19.5V15",key:"6gr39e"}],["path",{d:"M20 8v3",key:"deu0bs"}],["path",{d:"M18 2h2v2",key:"180o53"}],["path",{d:"M4 11V9",key:"v3xsx8"}],["path",{d:"M12 2h2",key:"cvn524"}],["path",{d:"M12 22h2",key:"kn7ki6"}],["path",{d:"M12 17h2",key:"13u4lk"}],["path",{d:"M8 22H6.5a2.5 2.5 0 0 1 0-5H8",key:"fiseg2"}],["path",{d:"M4 5v-.5A2.5 2.5 0 0 1 6.5 2H8",key:"wywhs9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cm=k("BookDownIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"m9 10 3 3 3-3",key:"zt5b4y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dm=k("BookHeadphonesIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["path",{d:"M8 12v-2a4 4 0 0 1 8 0v2",key:"1vsqkj"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const um=k("BookHeartIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"M16 8.2C16 7 15 6 13.8 6c-.8 0-1.4.3-1.8.9-.4-.6-1-.9-1.8-.9C9 6 8 7 8 8.2c0 .6.3 1.2.7 1.6h0C10 11.1 12 13 12 13s2-1.9 3.3-3.1h0c.4-.4.7-1 .7-1.7z",key:"1dlbw1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pm=k("BookImageIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["circle",{cx:"10",cy:"8",r:"2",key:"2qkj4p"}],["path",{d:"m20 13.7-2.1-2.1c-.8-.8-2-.8-2.8 0L9.7 17",key:"160say"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hm=k("BookKeyIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H14",key:"1gfsgw"}],["path",{d:"M20 8v14H6.5a2.5 2.5 0 0 1 0-5H20",key:"zb0ngp"}],["circle",{cx:"14",cy:"8",r:"2",key:"u49eql"}],["path",{d:"m20 2-4.5 4.5",key:"1sppr8"}],["path",{d:"m19 3 1 1",key:"ze14oc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fm=k("BookLockIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H10",key:"18wgow"}],["path",{d:"M20 15v7H6.5a2.5 2.5 0 0 1 0-5H20",key:"dpch1j"}],["rect",{width:"8",height:"5",x:"12",y:"6",rx:"1",key:"9nqwug"}],["path",{d:"M18 6V4a2 2 0 1 0-4 0v2",key:"1aquzs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mm=k("BookMarkedIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["polyline",{points:"10 2 10 10 13 7 16 10 16 2",key:"13o6vz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vm=k("BookMinusIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"M9 10h6",key:"9gxzsh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ym=k("BookOpenCheckIcon",[["path",{d:"M8 3H2v15h7c1.7 0 3 1.3 3 3V7c0-2.2-1.8-4-4-4Z",key:"1i8u0n"}],["path",{d:"m16 12 2 2 4-4",key:"mdajum"}],["path",{d:"M22 6V3h-6c-2.2 0-4 1.8-4 4v14c0-1.7 1.3-3 3-3h7v-2.3",key:"jb5l51"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _m=k("BookOpenTextIcon",[["path",{d:"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z",key:"vv98re"}],["path",{d:"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z",key:"1cyq3y"}],["path",{d:"M6 8h2",key:"30oboj"}],["path",{d:"M6 12h2",key:"32wvfc"}],["path",{d:"M16 8h2",key:"msurwy"}],["path",{d:"M16 12h2",key:"7q9ll5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gm=k("BookOpenIcon",[["path",{d:"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z",key:"vv98re"}],["path",{d:"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z",key:"1cyq3y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const km=k("BookPlusIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M12 7v6",key:"lw1j43"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bm=k("BookTextIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"M8 7h6",key:"1f0q6e"}],["path",{d:"M8 11h8",key:"vwpz6n"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wm=k("BookTypeIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"M16 8V6H8v2",key:"x8j6u4"}],["path",{d:"M12 6v7",key:"1f6ttz"}],["path",{d:"M10 13h4",key:"ytezjc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xm=k("BookUp2Icon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2",key:"1lorq7"}],["path",{d:"M18 2h2v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"1nfm9i"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"m9 10 3-3 3 3",key:"11gsxs"}],["path",{d:"m9 5 3-3 3 3",key:"l8vdw6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mm=k("BookUpIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"m9 10 3-3 3 3",key:"11gsxs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cm=k("BookUserIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["circle",{cx:"12",cy:"8",r:"2",key:"1822b1"}],["path",{d:"M15 13a3 3 0 1 0-6 0",key:"10j68g"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sm=k("BookXIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["path",{d:"m14.5 7-5 5",key:"dy991v"}],["path",{d:"m9.5 7 5 5",key:"s45iea"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Im=k("BookIcon",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lm=k("BookmarkCheckIcon",[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2Z",key:"169p4p"}],["path",{d:"m9 10 2 2 4-4",key:"1gnqz4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $m=k("BookmarkMinusIcon",[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z",key:"1fy3hk"}],["line",{x1:"15",x2:"9",y1:"10",y2:"10",key:"1gty7f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Am=k("BookmarkPlusIcon",[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z",key:"1fy3hk"}],["line",{x1:"12",x2:"12",y1:"7",y2:"13",key:"1cppfj"}],["line",{x1:"15",x2:"9",y1:"10",y2:"10",key:"1gty7f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Em=k("BookmarkXIcon",[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2Z",key:"169p4p"}],["path",{d:"m14.5 7.5-5 5",key:"3lb6iw"}],["path",{d:"m9.5 7.5 5 5",key:"ko136h"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tm=k("BookmarkIcon",[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z",key:"1fy3hk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pm=k("BoomBoxIcon",[["path",{d:"M4 9V5a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4",key:"vvzvr1"}],["path",{d:"M8 8v1",key:"xcqmfk"}],["path",{d:"M12 8v1",key:"1rj8u4"}],["path",{d:"M16 8v1",key:"1q12zr"}],["rect",{width:"20",height:"12",x:"2",y:"9",rx:"2",key:"igpb89"}],["circle",{cx:"8",cy:"15",r:"2",key:"fa4a8s"}],["circle",{cx:"16",cy:"15",r:"2",key:"14c3ya"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dm=k("BotIcon",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rm=k("BoxSelectIcon",[["path",{d:"M5 3a2 2 0 0 0-2 2",key:"y57alp"}],["path",{d:"M19 3a2 2 0 0 1 2 2",key:"18rm91"}],["path",{d:"M21 19a2 2 0 0 1-2 2",key:"1j7049"}],["path",{d:"M5 21a2 2 0 0 1-2-2",key:"sbafld"}],["path",{d:"M9 3h1",key:"1yesri"}],["path",{d:"M9 21h1",key:"15o7lz"}],["path",{d:"M14 3h1",key:"1ec4yj"}],["path",{d:"M14 21h1",key:"v9vybs"}],["path",{d:"M3 9v1",key:"1r0deq"}],["path",{d:"M21 9v1",key:"mxsmne"}],["path",{d:"M3 14v1",key:"vnatye"}],["path",{d:"M21 14v1",key:"169vum"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Om=k("BoxIcon",[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vm=k("BoxesIcon",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ti=k("BracesIcon",[["path",{d:"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1",key:"ezmyqa"}],["path",{d:"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1",key:"e1hn23"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Um=k("BracketsIcon",[["path",{d:"M16 3h3v18h-3",key:"1yor1f"}],["path",{d:"M8 21H5V3h3",key:"1qrfwo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fm=k("BrainCircuitIcon",[["path",{d:"M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08 2.5 2.5 0 0 0 4.91.05L12 20V4.5Z",key:"ixwj2a"}],["path",{d:"M16 8V5c0-1.1.9-2 2-2",key:"13dx7u"}],["path",{d:"M12 13h4",key:"1ku699"}],["path",{d:"M12 18h6a2 2 0 0 1 2 2v1",key:"105ag5"}],["path",{d:"M12 8h8",key:"1lhi5i"}],["path",{d:"M20.5 8a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z",key:"1s25gz"}],["path",{d:"M16.5 13a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z",key:"127460"}],["path",{d:"M20.5 21a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z",key:"fys062"}],["path",{d:"M18.5 3a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z",key:"1vib61"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jm=k("BrainCogIcon",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08A2.5 2.5 0 0 0 12 19.5a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 12 4.5",key:"1f4le0"}],["path",{d:"m15.7 10.4-.9.4",key:"ayzo6p"}],["path",{d:"m9.2 13.2-.9.4",key:"1uzb3g"}],["path",{d:"m13.6 15.7-.4-.9",key:"11ifqf"}],["path",{d:"m10.8 9.2-.4-.9",key:"1pmk2v"}],["path",{d:"m15.7 13.5-.9-.4",key:"7ng02m"}],["path",{d:"m9.2 10.9-.9-.4",key:"1x66zd"}],["path",{d:"m10.5 15.7.4-.9",key:"3js94g"}],["path",{d:"m13.1 9.2.4-.9",key:"18n7mc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hm=k("BrainIcon",[["path",{d:"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z",key:"1mhkh5"}],["path",{d:"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z",key:"1d6s00"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nm=k("BrickWallIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 9v6",key:"199k2o"}],["path",{d:"M16 15v6",key:"8rj2es"}],["path",{d:"M16 3v6",key:"1j6rpj"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M8 15v6",key:"1stoo3"}],["path",{d:"M8 3v6",key:"vlvjmk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zm=k("BriefcaseIcon",[["rect",{width:"20",height:"14",x:"2",y:"7",rx:"2",ry:"2",key:"eto64e"}],["path",{d:"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16",key:"zwj3tp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bm=k("BringToFrontIcon",[["rect",{x:"8",y:"8",width:"8",height:"8",rx:"2",key:"yj20xf"}],["path",{d:"M4 10a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2",key:"1ltk23"}],["path",{d:"M14 20a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2",key:"1q24h9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qm=k("BrushIcon",[["path",{d:"m9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08",key:"1styjt"}],["path",{d:"M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.1 2.49 2.02 4 2.02 2.2 0 4-1.8 4-4.04a3.01 3.01 0 0 0-3-3.02z",key:"z0l1mu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wm=k("BugOffIcon",[["path",{d:"M15 7.13V6a3 3 0 0 0-5.14-2.1L8 2",key:"vl8zik"}],["path",{d:"M14.12 3.88 16 2",key:"qol33r"}],["path",{d:"M22 13h-4v-2a4 4 0 0 0-4-4h-1.3",key:"1ou0bd"}],["path",{d:"M20.97 5c0 2.1-1.6 3.8-3.5 4",key:"18gb23"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M7.7 7.7A4 4 0 0 0 6 11v3a6 6 0 0 0 11.13 3.13",key:"1njkjs"}],["path",{d:"M12 20v-8",key:"i3yub9"}],["path",{d:"M6 13H2",key:"82j7cp"}],["path",{d:"M3 21c0-2.1 1.7-3.9 3.8-4",key:"4p0ekp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gm=k("BugPlayIcon",[["path",{d:"m8 2 1.88 1.88",key:"fmnt4t"}],["path",{d:"M14.12 3.88 16 2",key:"qol33r"}],["path",{d:"M9 7.13v-1a3.003 3.003 0 1 1 6 0v1",key:"d7y7pr"}],["path",{d:"M18 11a4 4 0 0 0-4-4h-4a4 4 0 0 0-4 4v3a6.1 6.1 0 0 0 2 4.5",key:"1tjixy"}],["path",{d:"M6.53 9C4.6 8.8 3 7.1 3 5",key:"32zzws"}],["path",{d:"M6 13H2",key:"82j7cp"}],["path",{d:"M3 21c0-2.1 1.7-3.9 3.8-4",key:"4p0ekp"}],["path",{d:"M20.97 5c0 2.1-1.6 3.8-3.5 4",key:"18gb23"}],["path",{d:"m12 12 8 5-8 5Z",key:"1ydf81"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zm=k("BugIcon",[["path",{d:"m8 2 1.88 1.88",key:"fmnt4t"}],["path",{d:"M14.12 3.88 16 2",key:"qol33r"}],["path",{d:"M9 7.13v-1a3.003 3.003 0 1 1 6 0v1",key:"d7y7pr"}],["path",{d:"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6",key:"xs1cw7"}],["path",{d:"M12 20v-9",key:"1qisl0"}],["path",{d:"M6.53 9C4.6 8.8 3 7.1 3 5",key:"32zzws"}],["path",{d:"M6 13H2",key:"82j7cp"}],["path",{d:"M3 21c0-2.1 1.7-3.9 3.8-4",key:"4p0ekp"}],["path",{d:"M20.97 5c0 2.1-1.6 3.8-3.5 4",key:"18gb23"}],["path",{d:"M22 13h-4",key:"1jl80f"}],["path",{d:"M17.2 17c2.1.1 3.8 1.9 3.8 4",key:"k3fwyw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Km=k("Building2Icon",[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",key:"1b4qmf"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",key:"i71pzd"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",key:"10jefs"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"M10 10h4",key:"tcdvrf"}],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xm=k("BuildingIcon",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["path",{d:"M9 22v-4h6v4",key:"r93iot"}],["path",{d:"M8 6h.01",key:"1dz90k"}],["path",{d:"M16 6h.01",key:"1x0f13"}],["path",{d:"M12 6h.01",key:"1vi96p"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M8 14h.01",key:"6423bh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ym=k("BusFrontIcon",[["path",{d:"M4 6 2 7",key:"1mqr15"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"m22 7-2-1",key:"1umjhc"}],["rect",{width:"16",height:"16",x:"4",y:"3",rx:"2",key:"1wxw4b"}],["path",{d:"M4 11h16",key:"mpoxn0"}],["path",{d:"M8 15h.01",key:"a7atzg"}],["path",{d:"M16 15h.01",key:"rnfrdf"}],["path",{d:"M6 19v2",key:"1loha6"}],["path",{d:"M18 21v-2",key:"sqyl04"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qm=k("BusIcon",[["path",{d:"M8 6v6",key:"18i7km"}],["path",{d:"M15 6v6",key:"1sg6z9"}],["path",{d:"M2 12h19.6",key:"de5uta"}],["path",{d:"M18 18h3s.5-1.7.8-2.8c.1-.4.2-.8.2-1.2 0-.4-.1-.8-.2-1.2l-1.4-5C20.1 6.8 19.1 6 18 6H4a2 2 0 0 0-2 2v10h3",key:"1wwztk"}],["circle",{cx:"7",cy:"18",r:"2",key:"19iecd"}],["path",{d:"M9 18h5",key:"lrx6i"}],["circle",{cx:"16",cy:"18",r:"2",key:"1v4tcr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jm=k("CableCarIcon",[["path",{d:"M10 3h.01",key:"lbucoy"}],["path",{d:"M14 2h.01",key:"1k8aa1"}],["path",{d:"m2 9 20-5",key:"1kz0j5"}],["path",{d:"M12 12V6.5",key:"1vbrij"}],["rect",{width:"16",height:"10",x:"4",y:"12",rx:"3",key:"if91er"}],["path",{d:"M9 12v5",key:"3anwtq"}],["path",{d:"M15 12v5",key:"5xh3zn"}],["path",{d:"M4 17h16",key:"g4d7ey"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e2=k("CableIcon",[["path",{d:"M4 9a2 2 0 0 1-2-2V5h6v2a2 2 0 0 1-2 2Z",key:"1s6oa5"}],["path",{d:"M3 5V3",key:"1k5hjh"}],["path",{d:"M7 5V3",key:"1t1388"}],["path",{d:"M19 15V6.5a3.5 3.5 0 0 0-7 0v11a3.5 3.5 0 0 1-7 0V9",key:"1ytv72"}],["path",{d:"M17 21v-2",key:"ds4u3f"}],["path",{d:"M21 21v-2",key:"eo0ou"}],["path",{d:"M22 19h-6v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2Z",key:"sdz6o8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t2=k("CakeSliceIcon",[["circle",{cx:"9",cy:"7",r:"2",key:"1305pl"}],["path",{d:"M7.2 7.9 3 11v9c0 .6.4 1 1 1h16c.6 0 1-.4 1-1v-9c0-2-3-6-7-8l-3.6 2.6",key:"xle13f"}],["path",{d:"M16 13H3",key:"1wpj08"}],["path",{d:"M16 17H3",key:"3lvfcd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const a2=k("CakeIcon",[["path",{d:"M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8",key:"1w3rig"}],["path",{d:"M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1",key:"n2jgmb"}],["path",{d:"M2 21h20",key:"1nyx9w"}],["path",{d:"M7 8v3",key:"1qtyvj"}],["path",{d:"M12 8v3",key:"hwp4zt"}],["path",{d:"M17 8v3",key:"1i6e5u"}],["path",{d:"M7 4h0.01",key:"hsw7lv"}],["path",{d:"M12 4h0.01",key:"1e3d8f"}],["path",{d:"M17 4h0.01",key:"p7cxgy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n2=k("CalculatorIcon",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["line",{x1:"8",x2:"16",y1:"6",y2:"6",key:"x4nwl0"}],["line",{x1:"16",x2:"16",y1:"14",y2:"18",key:"wjye3r"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M8 18h.01",key:"lrp35t"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s2=k("CalendarCheck2Icon",[["path",{d:"M21 14V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8",key:"bce9hv"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}],["path",{d:"m16 20 2 2 4-4",key:"13tcca"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o2=k("CalendarCheckIcon",[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2",key:"eu3xkr"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}],["path",{d:"m9 16 2 2 4-4",key:"19s6y9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r2=k("CalendarClockIcon",[["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M17.5 17.5 16 16.25V14",key:"re2vv1"}],["path",{d:"M22 16a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z",key:"ame013"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i2=k("CalendarDaysIcon",[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2",key:"eu3xkr"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l2=k("CalendarHeartIcon",[["path",{d:"M21 10V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7",key:"1sfrvf"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M21.29 14.7a2.43 2.43 0 0 0-2.65-.52c-.3.12-.57.3-.8.53l-.34.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L17.5 22l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z",key:"1t7hil"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c2=k("CalendarMinusIcon",[["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8",key:"3spt84"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}],["line",{x1:"16",x2:"22",y1:"19",y2:"19",key:"1g9955"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const d2=k("CalendarOffIcon",[["path",{d:"M4.18 4.18A2 2 0 0 0 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 1.82-1.18",key:"1feomx"}],["path",{d:"M21 15.5V6a2 2 0 0 0-2-2H9.5",key:"yhw86o"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M3 10h7",key:"1wap6i"}],["path",{d:"M21 10h-5.5",key:"quycpq"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u2=k("CalendarPlusIcon",[["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8",key:"3spt84"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}],["line",{x1:"19",x2:"19",y1:"16",y2:"22",key:"1ttwzi"}],["line",{x1:"16",x2:"22",y1:"19",y2:"19",key:"1g9955"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const p2=k("CalendarRangeIcon",[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2",key:"eu3xkr"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}],["path",{d:"M17 14h-6",key:"bkmgh3"}],["path",{d:"M13 18H7",key:"bb0bb7"}],["path",{d:"M7 14h.01",key:"1qa3f1"}],["path",{d:"M17 18h.01",key:"1bdyru"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h2=k("CalendarSearchIcon",[["path",{d:"M21 12V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7.5",key:"18ncp8"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z",key:"mgbru4"}],["path",{d:"m22 22-1.5-1.5",key:"1x83k4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f2=k("CalendarX2Icon",[["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8",key:"3spt84"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}],["line",{x1:"17",x2:"22",y1:"17",y2:"22",key:"xa9o8b"}],["line",{x1:"17",x2:"22",y1:"22",y2:"17",key:"18nitg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m2=k("CalendarXIcon",[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2",key:"eu3xkr"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}],["line",{x1:"10",x2:"14",y1:"14",y2:"18",key:"1g3qc0"}],["line",{x1:"14",x2:"10",y1:"14",y2:"18",key:"1az83m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const v2=k("CalendarIcon",[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2",key:"eu3xkr"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y2=k("CameraOffIcon",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16",key:"qmtpty"}],["path",{d:"M9.5 4h5L17 7h3a2 2 0 0 1 2 2v7.5",key:"1ufyfc"}],["path",{d:"M14.121 15.121A3 3 0 1 1 9.88 10.88",key:"11zox6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _2=k("CameraIcon",[["path",{d:"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z",key:"1tc9qg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const g2=k("CandlestickChartIcon",[["path",{d:"M9 5v4",key:"14uxtq"}],["rect",{width:"4",height:"6",x:"7",y:"9",rx:"1",key:"f4fvz0"}],["path",{d:"M9 15v2",key:"r5rk32"}],["path",{d:"M17 3v2",key:"1l2re6"}],["rect",{width:"4",height:"8",x:"15",y:"5",rx:"1",key:"z38je5"}],["path",{d:"M17 13v3",key:"5l0wba"}],["path",{d:"M3 3v18h18",key:"1s2lah"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k2=k("CandyCaneIcon",[["path",{d:"M5.7 21a2 2 0 0 1-3.5-2l8.6-14a6 6 0 0 1 10.4 6 2 2 0 1 1-3.464-2 2 2 0 1 0-3.464-2Z",key:"isaq8g"}],["path",{d:"M17.75 7 15 2.1",key:"12x7e8"}],["path",{d:"M10.9 4.8 13 9",key:"100a87"}],["path",{d:"m7.9 9.7 2 4.4",key:"ntfhaj"}],["path",{d:"M4.9 14.7 7 18.9",key:"1x43jy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b2=k("CandyOffIcon",[["path",{d:"m8.5 8.5-1 1a4.95 4.95 0 0 0 7 7l1-1",key:"1ff4ui"}],["path",{d:"M11.843 6.187A4.947 4.947 0 0 1 16.5 7.5a4.947 4.947 0 0 1 1.313 4.657",key:"1sbrv4"}],["path",{d:"M14 16.5V14",key:"1maf8j"}],["path",{d:"M14 6.5v1.843",key:"1a6u6t"}],["path",{d:"M10 10v7.5",key:"80pj65"}],["path",{d:"m16 7 1-5 1.367.683A3 3 0 0 0 19.708 3H21v1.292a3 3 0 0 0 .317 1.341L22 7l-5 1",key:"11a9mt"}],["path",{d:"m8 17-1 5-1.367-.683A3 3 0 0 0 4.292 21H3v-1.292a3 3 0 0 0-.317-1.341L2 17l5-1",key:"3mjmon"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w2=k("CandyIcon",[["path",{d:"m9.5 7.5-2 2a4.95 4.95 0 1 0 7 7l2-2a4.95 4.95 0 1 0-7-7Z",key:"ue6khb"}],["path",{d:"M14 6.5v10",key:"5xnk7c"}],["path",{d:"M10 7.5v10",key:"1uew51"}],["path",{d:"m16 7 1-5 1.37.68A3 3 0 0 0 19.7 3H21v1.3c0 .46.1.92.32 1.33L22 7l-5 1",key:"b9cp6k"}],["path",{d:"m8 17-1 5-1.37-.68A3 3 0 0 0 4.3 21H3v-1.3a3 3 0 0 0-.32-1.33L2 17l5-1",key:"5lney8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x2=k("CarFrontIcon",[["path",{d:"m21 8-2 2-1.5-3.7A2 2 0 0 0 15.646 5H8.4a2 2 0 0 0-1.903 1.257L5 10 3 8",key:"1imjwt"}],["path",{d:"M7 14h.01",key:"1qa3f1"}],["path",{d:"M17 14h.01",key:"7oqj8z"}],["rect",{width:"18",height:"8",x:"3",y:"10",rx:"2",key:"a7itu8"}],["path",{d:"M5 18v2",key:"ppbyun"}],["path",{d:"M19 18v2",key:"gy7782"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M2=k("CarTaxiFrontIcon",[["path",{d:"M10 2h4",key:"n1abiw"}],["path",{d:"m21 8-2 2-1.5-3.7A2 2 0 0 0 15.646 5H8.4a2 2 0 0 0-1.903 1.257L5 10 3 8",key:"1imjwt"}],["path",{d:"M7 14h.01",key:"1qa3f1"}],["path",{d:"M17 14h.01",key:"7oqj8z"}],["rect",{width:"18",height:"8",x:"3",y:"10",rx:"2",key:"a7itu8"}],["path",{d:"M5 18v2",key:"ppbyun"}],["path",{d:"M19 18v2",key:"gy7782"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const C2=k("CarIcon",[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S2=k("CaravanIcon",[["rect",{width:"4",height:"4",x:"2",y:"9",key:"1vcvhd"}],["rect",{width:"4",height:"10",x:"10",y:"9",key:"1b7ev2"}],["path",{d:"M18 19V9a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v8a2 2 0 0 0 2 2h2",key:"19jm3t"}],["circle",{cx:"8",cy:"19",r:"2",key:"t8fc5s"}],["path",{d:"M10 19h12v-2",key:"1yu2qx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I2=k("CarrotIcon",[["path",{d:"M2.27 21.7s9.87-3.5 12.73-6.36a4.5 4.5 0 0 0-6.36-6.37C5.77 11.84 2.27 21.7 2.27 21.7zM8.64 14l-2.05-2.04M15.34 15l-2.46-2.46",key:"rfqxbe"}],["path",{d:"M22 9s-1.33-2-3.5-2C16.86 7 15 9 15 9s1.33 2 3.5 2S22 9 22 9z",key:"6b25w4"}],["path",{d:"M15 2s-2 1.33-2 3.5S15 9 15 9s2-1.84 2-3.5C17 3.33 15 2 15 2z",key:"fn65lo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L2=k("CaseLowerIcon",[["circle",{cx:"7",cy:"12",r:"3",key:"12clwm"}],["path",{d:"M10 9v6",key:"17i7lo"}],["circle",{cx:"17",cy:"12",r:"3",key:"gl7c2s"}],["path",{d:"M14 7v8",key:"dl84cr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $2=k("CaseSensitiveIcon",[["path",{d:"m3 15 4-8 4 8",key:"1vwr6u"}],["path",{d:"M4 13h6",key:"1r9ots"}],["circle",{cx:"18",cy:"12",r:"3",key:"1kchzo"}],["path",{d:"M21 9v6",key:"anns31"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A2=k("CaseUpperIcon",[["path",{d:"m3 15 4-8 4 8",key:"1vwr6u"}],["path",{d:"M4 13h6",key:"1r9ots"}],["path",{d:"M15 11h4.5a2 2 0 0 1 0 4H15V7h4a2 2 0 0 1 0 4",key:"1sqfas"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const E2=k("CassetteTapeIcon",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["circle",{cx:"8",cy:"10",r:"2",key:"1xl4ub"}],["path",{d:"M8 12h8",key:"1wcyev"}],["circle",{cx:"16",cy:"10",r:"2",key:"r14t7q"}],["path",{d:"m6 20 .7-2.9A1.4 1.4 0 0 1 8.1 16h7.8a1.4 1.4 0 0 1 1.4 1l.7 3",key:"l01ucn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const T2=k("CastIcon",[["path",{d:"M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6",key:"3zrzxg"}],["path",{d:"M2 12a9 9 0 0 1 8 8",key:"g6cvee"}],["path",{d:"M2 16a5 5 0 0 1 4 4",key:"1y1dii"}],["line",{x1:"2",x2:"2.01",y1:"20",y2:"20",key:"xu2jvo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P2=k("CastleIcon",[["path",{d:"M22 20v-9H2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2Z",key:"109fe4"}],["path",{d:"M18 11V4H6v7",key:"mon5oj"}],["path",{d:"M15 22v-4a3 3 0 0 0-3-3v0a3 3 0 0 0-3 3v4",key:"jdggr9"}],["path",{d:"M22 11V9",key:"3zbp94"}],["path",{d:"M2 11V9",key:"1x5rnq"}],["path",{d:"M6 4V2",key:"1rsq15"}],["path",{d:"M18 4V2",key:"1jsdo1"}],["path",{d:"M10 4V2",key:"75d9ly"}],["path",{d:"M14 4V2",key:"8nj3z6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D2=k("CatIcon",[["path",{d:"M12 5c.67 0 1.35.09 2 .26 1.78-2 5.03-2.84 6.42-2.26 1.4.58-.42 7-.42 7 .57 1.07 1 2.24 1 3.44C21 17.9 16.97 21 12 21s-9-3-9-7.56c0-1.25.5-2.4 1-3.44 0 0-1.89-6.42-.5-7 1.39-.58 4.72.23 6.5 2.23A9.04 9.04 0 0 1 12 5Z",key:"x6xyqk"}],["path",{d:"M8 14v.5",key:"1nzgdb"}],["path",{d:"M16 14v.5",key:"1lajdz"}],["path",{d:"M11.25 16.25h1.5L12 17l-.75-.75Z",key:"12kq1m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R2=k("CctvIcon",[["path",{d:"M7 9h.01",key:"19b3jx"}],["path",{d:"M16.75 12H22l-3.5 7-3.09-4.32",key:"1h9vqe"}],["path",{d:"M18 9.5l-4 8-10.39-5.2a2.92 2.92 0 0 1-1.3-3.91L3.69 5.6a2.92 2.92 0 0 1 3.92-1.3Z",key:"q5d122"}],["path",{d:"M2 19h3.76a2 2 0 0 0 1.8-1.1L9 15",key:"19bib8"}],["path",{d:"M2 21v-4",key:"l40lih"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O2=k("CheckCheckIcon",[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V2=k("CheckCircle2Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U2=k("CheckCircleIcon",[["path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14",key:"g774vq"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F2=k("CheckSquare2Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j2=k("CheckSquareIcon",[["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}],["path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11",key:"1jnkn4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H2=k("CheckIcon",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N2=k("ChefHatIcon",[["path",{d:"M6 13.87A4 4 0 0 1 7.41 6a5.11 5.11 0 0 1 1.05-1.54 5 5 0 0 1 7.08 0A5.11 5.11 0 0 1 16.59 6 4 4 0 0 1 18 13.87V21H6Z",key:"z3ra2g"}],["line",{x1:"6",x2:"18",y1:"17",y2:"17",key:"12q60k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z2=k("CherryIcon",[["path",{d:"M2 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z",key:"cvxqlc"}],["path",{d:"M12 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z",key:"1ostrc"}],["path",{d:"M7 14c3.22-2.91 4.29-8.75 5-12 1.66 2.38 4.94 9 5 12",key:"hqx58h"}],["path",{d:"M22 9c-4.29 0-7.14-2.33-10-7 5.71 0 10 4.67 10 7Z",key:"eykp1o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B2=k("ChevronDownCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 10-4 4-4-4",key:"894hmk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q2=k("ChevronDownSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m16 10-4 4-4-4",key:"894hmk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W2=k("ChevronDownIcon",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G2=k("ChevronFirstIcon",[["path",{d:"m17 18-6-6 6-6",key:"1yerx2"}],["path",{d:"M7 6v12",key:"1p53r6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z2=k("ChevronLastIcon",[["path",{d:"m7 18 6-6-6-6",key:"lwmzdw"}],["path",{d:"M17 6v12",key:"1o0aio"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K2=k("ChevronLeftCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m14 16-4-4 4-4",key:"ojs7w8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X2=k("ChevronLeftSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m14 16-4-4 4-4",key:"ojs7w8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y2=k("ChevronLeftIcon",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q2=k("ChevronRightCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m10 8 4 4-4 4",key:"1wy4r4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J2=k("ChevronRightSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m10 8 4 4-4 4",key:"1wy4r4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e0=k("ChevronRightIcon",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t0=k("ChevronUpCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m8 14 4-4 4 4",key:"fy2ptz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const a0=k("ChevronUpSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m8 14 4-4 4 4",key:"fy2ptz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n0=k("ChevronUpIcon",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s0=k("ChevronsDownUpIcon",[["path",{d:"m7 20 5-5 5 5",key:"13a0gw"}],["path",{d:"m7 4 5 5 5-5",key:"1kwcof"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o0=k("ChevronsDownIcon",[["path",{d:"m7 6 5 5 5-5",key:"1lc07p"}],["path",{d:"m7 13 5 5 5-5",key:"1d48rs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r0=k("ChevronsLeftRightIcon",[["path",{d:"m9 7-5 5 5 5",key:"j5w590"}],["path",{d:"m15 7 5 5-5 5",key:"1bl6da"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i0=k("ChevronsLeftIcon",[["path",{d:"m11 17-5-5 5-5",key:"13zhaf"}],["path",{d:"m18 17-5-5 5-5",key:"h8a8et"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l0=k("ChevronsRightLeftIcon",[["path",{d:"m20 17-5-5 5-5",key:"30x0n2"}],["path",{d:"m4 17 5-5-5-5",key:"16spf4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c0=k("ChevronsRightIcon",[["path",{d:"m6 17 5-5-5-5",key:"xnjwq"}],["path",{d:"m13 17 5-5-5-5",key:"17xmmf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const d0=k("ChevronsUpDownIcon",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u0=k("ChevronsUpIcon",[["path",{d:"m17 11-5-5-5 5",key:"e8nh98"}],["path",{d:"m17 18-5-5-5 5",key:"2avn1x"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const p0=k("ChromeIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["line",{x1:"21.17",x2:"12",y1:"8",y2:"8",key:"a0cw5f"}],["line",{x1:"3.95",x2:"8.54",y1:"6.06",y2:"14",key:"1kftof"}],["line",{x1:"10.88",x2:"15.46",y1:"21.94",y2:"14",key:"1ymyh8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h0=k("ChurchIcon",[["path",{d:"m18 7 4 2v11a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9l4-2",key:"gy5gyo"}],["path",{d:"M14 22v-4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v4",key:"cpkuc4"}],["path",{d:"M18 22V5l-6-3-6 3v17",key:"1hsnhq"}],["path",{d:"M12 7v5",key:"ma6bk"}],["path",{d:"M10 9h4",key:"u4k05v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f0=k("CigaretteOffIcon",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M12 12H2v4h14",key:"91gsaq"}],["path",{d:"M22 12v4",key:"142cbu"}],["path",{d:"M18 12h-.5",key:"12ymji"}],["path",{d:"M7 12v4",key:"jqww69"}],["path",{d:"M18 8c0-2.5-2-2.5-2-5",key:"1il607"}],["path",{d:"M22 8c0-2.5-2-2.5-2-5",key:"1gah44"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m0=k("CigaretteIcon",[["path",{d:"M18 12H2v4h16",key:"2rt1hm"}],["path",{d:"M22 12v4",key:"142cbu"}],["path",{d:"M7 12v4",key:"jqww69"}],["path",{d:"M18 8c0-2.5-2-2.5-2-5",key:"1il607"}],["path",{d:"M22 8c0-2.5-2-2.5-2-5",key:"1gah44"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const v0=k("CircleDashedIcon",[["path",{d:"M10.1 2.18a9.93 9.93 0 0 1 3.8 0",key:"1qdqn0"}],["path",{d:"M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7",key:"1bq7p6"}],["path",{d:"M21.82 10.1a9.93 9.93 0 0 1 0 3.8",key:"1rlaqf"}],["path",{d:"M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69",key:"1xk03u"}],["path",{d:"M13.9 21.82a9.94 9.94 0 0 1-3.8 0",key:"l7re25"}],["path",{d:"M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7",key:"1v18p6"}],["path",{d:"M2.18 13.9a9.93 9.93 0 0 1 0-3.8",key:"xdo6bj"}],["path",{d:"M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69",key:"1jjmaz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y0=k("CircleDollarSignIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8",key:"1h4pet"}],["path",{d:"M12 18V6",key:"zqpxq5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _0=k("CircleDotDashedIcon",[["path",{d:"M10.1 2.18a9.93 9.93 0 0 1 3.8 0",key:"1qdqn0"}],["path",{d:"M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7",key:"1bq7p6"}],["path",{d:"M21.82 10.1a9.93 9.93 0 0 1 0 3.8",key:"1rlaqf"}],["path",{d:"M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69",key:"1xk03u"}],["path",{d:"M13.9 21.82a9.94 9.94 0 0 1-3.8 0",key:"l7re25"}],["path",{d:"M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7",key:"1v18p6"}],["path",{d:"M2.18 13.9a9.93 9.93 0 0 1 0-3.8",key:"xdo6bj"}],["path",{d:"M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69",key:"1jjmaz"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const g0=k("CircleDotIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k0=k("CircleEllipsisIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M17 12h.01",key:"1m0b6t"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M7 12h.01",key:"eqddd0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b0=k("CircleEqualIcon",[["path",{d:"M7 10h10",key:"1101jm"}],["path",{d:"M7 14h10",key:"1mhdw3"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w0=k("CircleOffIcon",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M8.35 2.69A10 10 0 0 1 21.3 15.65",key:"1pfsoa"}],["path",{d:"M19.08 19.08A10 10 0 1 1 4.92 4.92",key:"1ablyi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pi=k("CircleSlash2Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M22 2 2 22",key:"y4kqgn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x0=k("CircleSlashIcon",[["line",{x1:"9",x2:"15",y1:"15",y2:"9",key:"1dfufj"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Di=k("CircleUserRoundIcon",[["path",{d:"M18 20a6 6 0 0 0-12 0",key:"1qehca"}],["circle",{cx:"12",cy:"10",r:"4",key:"1h16sb"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ri=k("CircleUserIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}],["path",{d:"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662",key:"154egf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M0=k("CircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const C0=k("CircuitBoardIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M11 9h4a2 2 0 0 0 2-2V3",key:"1ve2rv"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"M7 21v-4a2 2 0 0 1 2-2h4",key:"1fwkro"}],["circle",{cx:"15",cy:"15",r:"2",key:"3i40o0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S0=k("CitrusIcon",[["path",{d:"M21.66 17.67a1.08 1.08 0 0 1-.04 1.6A12 12 0 0 1 4.73 2.38a1.1 1.1 0 0 1 1.61-.04z",key:"4ite01"}],["path",{d:"M19.65 15.66A8 8 0 0 1 8.35 4.34",key:"1gxipu"}],["path",{d:"m14 10-5.5 5.5",key:"92pfem"}],["path",{d:"M14 17.85V10H6.15",key:"xqmtsk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I0=k("ClapperboardIcon",[["path",{d:"M20.2 6 3 11l-.9-2.4c-.3-1.1.3-2.2 1.3-2.5l13.5-4c1.1-.3 2.2.3 2.5 1.3Z",key:"1tn4o7"}],["path",{d:"m6.2 5.3 3.1 3.9",key:"iuk76l"}],["path",{d:"m12.4 3.4 3.1 4",key:"6hsd6n"}],["path",{d:"M3 11h18v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z",key:"ltgou9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L0=k("ClipboardCheckIcon",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"m9 14 2 2 4-4",key:"df797q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $0=k("ClipboardCopyIcon",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2",key:"4jdomd"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v4",key:"3hqy98"}],["path",{d:"M21 14H11",key:"1bme5i"}],["path",{d:"m15 10-4 4 4 4",key:"5dvupr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A0=k("ClipboardEditIcon",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z",key:"1rgxu8"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-5.5",key:"cereej"}],["path",{d:"M4 13.5V6a2 2 0 0 1 2-2h2",key:"5ua5vh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const E0=k("ClipboardListIcon",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const T0=k("ClipboardPasteIcon",[["path",{d:"M15 2H9a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1Z",key:"1pp7kr"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2M16 4h2a2 2 0 0 1 2 2v2M11 14h10",key:"2ik1ml"}],["path",{d:"m17 10 4 4-4 4",key:"vp2hj1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P0=k("ClipboardSignatureIcon",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-.5",key:"1but9f"}],["path",{d:"M16 4h2a2 2 0 0 1 1.73 1",key:"1p8n7l"}],["path",{d:"M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z",key:"johvi5"}],["path",{d:"M8 18h1",key:"13wk12"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D0=k("ClipboardTypeIcon",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M9 12v-1h6v1",key:"iehl6m"}],["path",{d:"M11 17h2",key:"12w5me"}],["path",{d:"M12 11v6",key:"1bwqyc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R0=k("ClipboardXIcon",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"m15 11-6 6",key:"1toa9n"}],["path",{d:"m9 11 6 6",key:"wlibny"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O0=k("ClipboardIcon",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V0=k("Clock1Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 14.5 8",key:"12zbmj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U0=k("Clock10Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 8 10",key:"atfzqc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F0=k("Clock11Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 9.5 8",key:"l5bg6f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j0=k("Clock12Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12",key:"1fub01"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H0=k("Clock2Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 10",key:"1g230d"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N0=k("Clock3Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16.5 12",key:"1aq6pp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z0=k("Clock4Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B0=k("Clock5Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 14.5 16",key:"1pcbox"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q0=k("Clock6Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 12 16.5",key:"hb2qv6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W0=k("Clock7Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 9.5 16",key:"ka3394"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G0=k("Clock8Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 8 14",key:"tmc9b4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z0=k("Clock9Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 7.5 12",key:"1k60p0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K0=k("ClockIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X0=k("CloudCogIcon",[["circle",{cx:"12",cy:"17",r:"3",key:"1spfwm"}],["path",{d:"M4.2 15.1A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.2",key:"zaobp"}],["path",{d:"m15.7 18.4-.9-.3",key:"4qxpbn"}],["path",{d:"m9.2 15.9-.9-.3",key:"17q7o2"}],["path",{d:"m10.6 20.7.3-.9",key:"1pf4s2"}],["path",{d:"m13.1 14.2.3-.9",key:"1mnuqm"}],["path",{d:"m13.6 20.7-.4-1",key:"1jpd1m"}],["path",{d:"m10.8 14.3-.4-1",key:"17ugyy"}],["path",{d:"m8.3 18.6 1-.4",key:"s42vdx"}],["path",{d:"m14.7 15.8 1-.4",key:"2wizun"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y0=k("CloudDrizzleIcon",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M8 19v1",key:"1dk2by"}],["path",{d:"M8 14v1",key:"84yxot"}],["path",{d:"M16 19v1",key:"v220m7"}],["path",{d:"M16 14v1",key:"g12gj6"}],["path",{d:"M12 21v1",key:"q8vafk"}],["path",{d:"M12 16v1",key:"1mx6rx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q0=k("CloudFogIcon",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M16 17H7",key:"pygtm1"}],["path",{d:"M17 21H9",key:"1u2q02"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J0=k("CloudHailIcon",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M16 14v2",key:"a1is7l"}],["path",{d:"M8 14v2",key:"1e9m6t"}],["path",{d:"M16 20h.01",key:"xwek51"}],["path",{d:"M8 20h.01",key:"1vjney"}],["path",{d:"M12 16v2",key:"z66u1j"}],["path",{d:"M12 22h.01",key:"1urd7a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ev=k("CloudLightningIcon",[["path",{d:"M6 16.326A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 .5 8.973",key:"1cez44"}],["path",{d:"m13 12-3 5h4l-3 5",key:"1t22er"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tv=k("CloudMoonRainIcon",[["path",{d:"M10.083 9A6.002 6.002 0 0 1 16 4a4.243 4.243 0 0 0 6 6c0 2.22-1.206 4.16-3 5.197",key:"u82z8m"}],["path",{d:"M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24",key:"1qmrp3"}],["path",{d:"M11 20v2",key:"174qtz"}],["path",{d:"M7 19v2",key:"12npes"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const av=k("CloudMoonIcon",[["path",{d:"M13 16a3 3 0 1 1 0 6H7a5 5 0 1 1 4.9-6Z",key:"p44pc9"}],["path",{d:"M10.1 9A6 6 0 0 1 16 4a4.24 4.24 0 0 0 6 6 6 6 0 0 1-3 5.197",key:"16nha0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nv=k("CloudOffIcon",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193",key:"yfwify"}],["path",{d:"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07",key:"jlfiyv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sv=k("CloudRainWindIcon",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"m9.2 22 3-7",key:"sb5f6j"}],["path",{d:"m9 13-3 7",key:"500co5"}],["path",{d:"m17 13-3 7",key:"8t2fiy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ov=k("CloudRainIcon",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M16 14v6",key:"1j4efv"}],["path",{d:"M8 14v6",key:"17c4r9"}],["path",{d:"M12 16v6",key:"c8a4gj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rv=k("CloudSnowIcon",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M8 15h.01",key:"a7atzg"}],["path",{d:"M8 19h.01",key:"puxtts"}],["path",{d:"M12 17h.01",key:"p32p05"}],["path",{d:"M12 21h.01",key:"h35vbk"}],["path",{d:"M16 15h.01",key:"rnfrdf"}],["path",{d:"M16 19h.01",key:"1vcnzz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iv=k("CloudSunRainIcon",[["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}],["path",{d:"M15.947 12.65a4 4 0 0 0-5.925-4.128",key:"dpwdj0"}],["path",{d:"M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24",key:"1qmrp3"}],["path",{d:"M11 20v2",key:"174qtz"}],["path",{d:"M7 19v2",key:"12npes"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lv=k("CloudSunIcon",[["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}],["path",{d:"M15.947 12.65a4 4 0 0 0-5.925-4.128",key:"dpwdj0"}],["path",{d:"M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z",key:"s09mg5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cv=k("CloudIcon",[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dv=k("CloudyIcon",[["path",{d:"M17.5 21H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"gqqjvc"}],["path",{d:"M22 10a3 3 0 0 0-3-3h-2.207a5.502 5.502 0 0 0-10.702.5",key:"1p2s76"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uv=k("CloverIcon",[["path",{d:"M16.2 3.8a2.7 2.7 0 0 0-3.81 0l-.4.38-.4-.4a2.7 2.7 0 0 0-3.82 0C6.73 4.85 6.67 6.64 8 8l4 4 4-4c1.33-1.36 1.27-3.15.2-4.2z",key:"1gxwox"}],["path",{d:"M8 8c-1.36-1.33-3.15-1.27-4.2-.2a2.7 2.7 0 0 0 0 3.81l.38.4-.4.4a2.7 2.7 0 0 0 0 3.82C4.85 17.27 6.64 17.33 8 16",key:"il7z7z"}],["path",{d:"M16 16c1.36 1.33 3.15 1.27 4.2.2a2.7 2.7 0 0 0 0-3.81l-.38-.4.4-.4a2.7 2.7 0 0 0 0-3.82C19.15 6.73 17.36 6.67 16 8",key:"15bpx2"}],["path",{d:"M7.8 20.2a2.7 2.7 0 0 0 3.81 0l.4-.38.4.4a2.7 2.7 0 0 0 3.82 0c1.06-1.06 1.12-2.85-.21-4.21l-4-4-4 4c-1.33 1.36-1.27 3.15-.2 4.2z",key:"v9mug8"}],["path",{d:"m7 17-5 5",key:"1py3mz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pv=k("ClubIcon",[["path",{d:"M17.28 9.05a5.5 5.5 0 1 0-10.56 0A5.5 5.5 0 1 0 12 17.66a5.5 5.5 0 1 0 5.28-8.6Z",key:"27yuqz"}],["path",{d:"M12 17.66L12 22",key:"ogfahf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hv=k("Code2Icon",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fv=k("CodeIcon",[["polyline",{points:"16 18 22 12 16 6",key:"z7tu5w"}],["polyline",{points:"8 6 2 12 8 18",key:"1eg1df"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mv=k("CodepenIcon",[["polygon",{points:"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2",key:"srzb37"}],["line",{x1:"12",x2:"12",y1:"22",y2:"15.5",key:"1t73f2"}],["polyline",{points:"22 8.5 12 15.5 2 8.5",key:"ajlxae"}],["polyline",{points:"2 15.5 12 8.5 22 15.5",key:"susrui"}],["line",{x1:"12",x2:"12",y1:"2",y2:"8.5",key:"2cldga"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vv=k("CodesandboxIcon",[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",key:"yt0hxn"}],["polyline",{points:"7.5 4.21 12 6.81 16.5 4.21",key:"fabo96"}],["polyline",{points:"7.5 19.79 7.5 14.6 3 12",key:"z377f1"}],["polyline",{points:"21 12 16.5 14.6 16.5 19.79",key:"9nrev1"}],["polyline",{points:"3.27 6.96 12 12.01 20.73 6.96",key:"1180pa"}],["line",{x1:"12",x2:"12",y1:"22.08",y2:"12",key:"3z3uq6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yv=k("CoffeeIcon",[["path",{d:"M17 8h1a4 4 0 1 1 0 8h-1",key:"jx4kbh"}],["path",{d:"M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4Z",key:"1bxrl0"}],["line",{x1:"6",x2:"6",y1:"2",y2:"4",key:"1cr9l3"}],["line",{x1:"10",x2:"10",y1:"2",y2:"4",key:"170wym"}],["line",{x1:"14",x2:"14",y1:"2",y2:"4",key:"1c5f70"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _v=k("CogIcon",[["path",{d:"M12 20a8 8 0 1 0 0-16 8 8 0 0 0 0 16Z",key:"sobvz5"}],["path",{d:"M12 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z",key:"11i496"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 22v-2",key:"1osdcq"}],["path",{d:"m17 20.66-1-1.73",key:"eq3orb"}],["path",{d:"M11 10.27 7 3.34",key:"16pf9h"}],["path",{d:"m20.66 17-1.73-1",key:"sg0v6f"}],["path",{d:"m3.34 7 1.73 1",key:"1ulond"}],["path",{d:"M14 12h8",key:"4f43i9"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"m20.66 7-1.73 1",key:"1ow05n"}],["path",{d:"m3.34 17 1.73-1",key:"nuk764"}],["path",{d:"m17 3.34-1 1.73",key:"2wel8s"}],["path",{d:"m11 13.73-4 6.93",key:"794ttg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gv=k("CoinsIcon",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Oi=k("Columns2Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 3v18",key:"108xh3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vi=k("Columns3Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kv=k("Columns4Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M7.5 3v18",key:"w0wo6v"}],["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M16.5 3v18",key:"10tjh1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bv=k("CombineIcon",[["rect",{width:"8",height:"8",x:"2",y:"2",rx:"2",key:"z1hh3n"}],["path",{d:"M14 2c1.1 0 2 .9 2 2v4c0 1.1-.9 2-2 2",key:"83orz6"}],["path",{d:"M20 2c1.1 0 2 .9 2 2v4c0 1.1-.9 2-2 2",key:"k86dmt"}],["path",{d:"M10 18H5c-1.7 0-3-1.3-3-3v-1",key:"6vokjl"}],["polyline",{points:"7 21 10 18 7 15",key:"1k02g0"}],["rect",{width:"8",height:"8",x:"14",y:"14",rx:"2",key:"1fa9i4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wv=k("CommandIcon",[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3",key:"11bfej"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xv=k("CompassIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76",key:"m9r19z"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mv=k("ComponentIcon",[["path",{d:"M5.5 8.5 9 12l-3.5 3.5L2 12l3.5-3.5Z",key:"1kciei"}],["path",{d:"m12 2 3.5 3.5L12 9 8.5 5.5 12 2Z",key:"1ome0g"}],["path",{d:"M18.5 8.5 22 12l-3.5 3.5L15 12l3.5-3.5Z",key:"vbupec"}],["path",{d:"m12 15 3.5 3.5L12 22l-3.5-3.5L12 15Z",key:"16csic"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cv=k("ComputerIcon",[["rect",{width:"14",height:"8",x:"5",y:"2",rx:"2",key:"wc9tft"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",key:"w68u3i"}],["path",{d:"M6 18h2",key:"rwmk9e"}],["path",{d:"M12 18h6",key:"aqd8w3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sv=k("ConciergeBellIcon",[["path",{d:"M2 18a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v2H2v-2Z",key:"1co3i8"}],["path",{d:"M20 16a8 8 0 1 0-16 0",key:"1pa543"}],["path",{d:"M12 4v4",key:"1bq03y"}],["path",{d:"M10 4h4",key:"1xpv9s"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Iv=k("ConeIcon",[["path",{d:"m20.9 18.55-8-15.98a1 1 0 0 0-1.8 0l-8 15.98",key:"53pte7"}],["ellipse",{cx:"12",cy:"19",rx:"9",ry:"3",key:"1ji25f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lv=k("ConstructionIcon",[["rect",{x:"2",y:"6",width:"20",height:"8",rx:"1",key:"1estib"}],["path",{d:"M17 14v7",key:"7m2elx"}],["path",{d:"M7 14v7",key:"1cm7wv"}],["path",{d:"M17 3v3",key:"1v4jwn"}],["path",{d:"M7 3v3",key:"7o6guu"}],["path",{d:"M10 14 2.3 6.3",key:"1023jk"}],["path",{d:"m14 6 7.7 7.7",key:"1s8pl2"}],["path",{d:"m8 6 8 8",key:"hl96qh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $v=k("Contact2Icon",[["path",{d:"M16 18a4 4 0 0 0-8 0",key:"1lzouq"}],["circle",{cx:"12",cy:"11",r:"3",key:"itu57m"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["line",{x1:"8",x2:"8",y1:"2",y2:"4",key:"1ff9gb"}],["line",{x1:"16",x2:"16",y1:"2",y2:"4",key:"1ufoma"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Av=k("ContactIcon",[["path",{d:"M17 18a2 2 0 0 0-2-2H9a2 2 0 0 0-2 2",key:"1mghuy"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["circle",{cx:"12",cy:"10",r:"2",key:"1yojzk"}],["line",{x1:"8",x2:"8",y1:"2",y2:"4",key:"1ff9gb"}],["line",{x1:"16",x2:"16",y1:"2",y2:"4",key:"1ufoma"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ev=k("ContainerIcon",[["path",{d:"M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z",key:"1t2lqe"}],["path",{d:"M10 21.9V14L2.1 9.1",key:"o7czzq"}],["path",{d:"m10 14 11.9-6.9",key:"zm5e20"}],["path",{d:"M14 19.8v-8.1",key:"159ecu"}],["path",{d:"M18 17.5V9.4",key:"11uown"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tv=k("ContrastIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 18a6 6 0 0 0 0-12v12z",key:"j4l70d"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pv=k("CookieIcon",[["path",{d:"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5",key:"laymnq"}],["path",{d:"M8.5 8.5v.01",key:"ue8clq"}],["path",{d:"M16 15.5v.01",key:"14dtrp"}],["path",{d:"M12 12v.01",key:"u5ubse"}],["path",{d:"M11 17v.01",key:"1hyl5a"}],["path",{d:"M7 14v.01",key:"uct60s"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dv=k("CookingPotIcon",[["path",{d:"M2 12h20",key:"9i4pu4"}],["path",{d:"M20 12v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8",key:"u0tga0"}],["path",{d:"m4 8 16-4",key:"16g0ng"}],["path",{d:"m8.86 6.78-.45-1.81a2 2 0 0 1 1.45-2.43l1.94-.48a2 2 0 0 1 2.43 1.46l.45 1.8",key:"12cejc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rv=k("CopyCheckIcon",[["path",{d:"m12 15 2 2 4-4",key:"2c609p"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ov=k("CopyMinusIcon",[["line",{x1:"12",x2:"18",y1:"15",y2:"15",key:"1nscbv"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vv=k("CopyPlusIcon",[["line",{x1:"15",x2:"15",y1:"12",y2:"18",key:"1p7wdc"}],["line",{x1:"12",x2:"18",y1:"15",y2:"15",key:"1nscbv"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Uv=k("CopySlashIcon",[["line",{x1:"12",x2:"18",y1:"18",y2:"12",key:"ebkxgr"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fv=k("CopyXIcon",[["line",{x1:"12",x2:"18",y1:"12",y2:"18",key:"1rg63v"}],["line",{x1:"12",x2:"18",y1:"18",y2:"12",key:"ebkxgr"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jv=k("CopyIcon",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hv=k("CopyleftIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.17 14.83a4 4 0 1 0 0-5.66",key:"1sveal"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nv=k("CopyrightIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M14.83 14.83a4 4 0 1 1 0-5.66",key:"1i56pz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zv=k("CornerDownLeftIcon",[["polyline",{points:"9 10 4 15 9 20",key:"r3jprv"}],["path",{d:"M20 4v7a4 4 0 0 1-4 4H4",key:"6o5b7l"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bv=k("CornerDownRightIcon",[["polyline",{points:"15 10 20 15 15 20",key:"1q7qjw"}],["path",{d:"M4 4v7a4 4 0 0 0 4 4h12",key:"z08zvw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qv=k("CornerLeftDownIcon",[["polyline",{points:"14 15 9 20 4 15",key:"nkc4i"}],["path",{d:"M20 4h-7a4 4 0 0 0-4 4v12",key:"nbpdq2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wv=k("CornerLeftUpIcon",[["polyline",{points:"14 9 9 4 4 9",key:"m9oyvo"}],["path",{d:"M20 20h-7a4 4 0 0 1-4-4V4",key:"1blwi3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gv=k("CornerRightDownIcon",[["polyline",{points:"10 15 15 20 20 15",key:"axus6l"}],["path",{d:"M4 4h7a4 4 0 0 1 4 4v12",key:"wcbgct"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zv=k("CornerRightUpIcon",[["polyline",{points:"10 9 15 4 20 9",key:"1lr6px"}],["path",{d:"M4 20h7a4 4 0 0 0 4-4V4",key:"1plgdj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kv=k("CornerUpLeftIcon",[["polyline",{points:"9 14 4 9 9 4",key:"881910"}],["path",{d:"M20 20v-7a4 4 0 0 0-4-4H4",key:"1nkjon"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xv=k("CornerUpRightIcon",[["polyline",{points:"15 14 20 9 15 4",key:"1tbx3s"}],["path",{d:"M4 20v-7a4 4 0 0 1 4-4h12",key:"1lu4f8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yv=k("CpuIcon",[["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"9",y:"9",width:"6",height:"6",key:"o3kz5p"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qv=k("CreativeCommonsIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M10 9.3a2.8 2.8 0 0 0-3.5 1 3.1 3.1 0 0 0 0 3.4 2.7 2.7 0 0 0 3.5 1",key:"1ss3eq"}],["path",{d:"M17 9.3a2.8 2.8 0 0 0-3.5 1 3.1 3.1 0 0 0 0 3.4 2.7 2.7 0 0 0 3.5 1",key:"1od56t"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jv=k("CreditCardIcon",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ey=k("CroissantIcon",[["path",{d:"m4.6 13.11 5.79-3.21c1.89-1.05 4.79 1.78 3.71 3.71l-3.22 5.81C8.8 23.16.79 15.23 4.6 13.11Z",key:"1ozxlb"}],["path",{d:"m10.5 9.5-1-2.29C9.2 6.48 8.8 6 8 6H4.5C2.79 6 2 6.5 2 8.5a7.71 7.71 0 0 0 2 4.83",key:"ffuyb5"}],["path",{d:"M8 6c0-1.55.24-4-2-4-2 0-2.5 2.17-2.5 4",key:"osnpzi"}],["path",{d:"m14.5 13.5 2.29 1c.73.3 1.21.7 1.21 1.5v3.5c0 1.71-.5 2.5-2.5 2.5a7.71 7.71 0 0 1-4.83-2",key:"1vubaw"}],["path",{d:"M18 16c1.55 0 4-.24 4 2 0 2-2.17 2.5-4 2.5",key:"wxr772"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ty=k("CropIcon",[["path",{d:"M6 2v14a2 2 0 0 0 2 2h14",key:"ron5a4"}],["path",{d:"M18 22V8a2 2 0 0 0-2-2H2",key:"7s9ehn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ay=k("CrossIcon",[["path",{d:"M11 2a2 2 0 0 0-2 2v5H4a2 2 0 0 0-2 2v2c0 1.1.9 2 2 2h5v5c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-5h5a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-5V4a2 2 0 0 0-2-2h-2z",key:"1t5g7j"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ny=k("CrosshairIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sy=k("CrownIcon",[["path",{d:"m2 4 3 12h14l3-12-6 7-4-7-4 7-6-7zm3 16h14",key:"zkxr6b"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oy=k("CuboidIcon",[["path",{d:"m21.12 6.4-6.05-4.06a2 2 0 0 0-2.17-.05L2.95 8.41a2 2 0 0 0-.95 1.7v5.82a2 2 0 0 0 .88 1.66l6.05 4.07a2 2 0 0 0 2.17.05l9.95-6.12a2 2 0 0 0 .95-1.7V8.06a2 2 0 0 0-.88-1.66Z",key:"1u2ovd"}],["path",{d:"M10 22v-8L2.25 9.15",key:"11pn4q"}],["path",{d:"m10 14 11.77-6.87",key:"1kt1wh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ry=k("CupSodaIcon",[["path",{d:"m6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8",key:"8166m8"}],["path",{d:"M5 8h14",key:"pcz4l3"}],["path",{d:"M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0",key:"yjz344"}],["path",{d:"m12 8 1-6h2",key:"3ybfa4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iy=k("CurrencyIcon",[["circle",{cx:"12",cy:"12",r:"8",key:"46899m"}],["line",{x1:"3",x2:"6",y1:"3",y2:"6",key:"1jkytn"}],["line",{x1:"21",x2:"18",y1:"3",y2:"6",key:"14zfjt"}],["line",{x1:"3",x2:"6",y1:"21",y2:"18",key:"iusuec"}],["line",{x1:"21",x2:"18",y1:"21",y2:"18",key:"yj2dd7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ly=k("CylinderIcon",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5v14a9 3 0 0 0 18 0V5",key:"aqi0yr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cy=k("DatabaseBackupIcon",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 12a9 3 0 0 0 5 2.69",key:"1ui2ym"}],["path",{d:"M21 9.3V5",key:"6k6cib"}],["path",{d:"M3 5v14a9 3 0 0 0 6.47 2.88",key:"i62tjy"}],["path",{d:"M12 12v4h4",key:"1bxaet"}],["path",{d:"M13 20a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L12 16",key:"1f4ei9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dy=k("DatabaseZapIcon",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 15 21.84",key:"14ibmq"}],["path",{d:"M21 5V8",key:"1marbg"}],["path",{d:"M21 12L18 17H22L19 22",key:"zafso"}],["path",{d:"M3 12A9 3 0 0 0 14.59 14.87",key:"1y4wr8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uy=k("DatabaseIcon",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const py=k("DeleteIcon",[["path",{d:"M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Z",key:"1oy587"}],["line",{x1:"18",x2:"12",y1:"9",y2:"15",key:"1olkx5"}],["line",{x1:"12",x2:"18",y1:"9",y2:"15",key:"1n50pc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hy=k("DessertIcon",[["circle",{cx:"12",cy:"4",r:"2",key:"muu5ef"}],["path",{d:"M10.2 3.2C5.5 4 2 8.1 2 13a2 2 0 0 0 4 0v-1a2 2 0 0 1 4 0v4a2 2 0 0 0 4 0v-4a2 2 0 0 1 4 0v1a2 2 0 0 0 4 0c0-4.9-3.5-9-8.2-9.8",key:"lfo06j"}],["path",{d:"M3.2 14.8a9 9 0 0 0 17.6 0",key:"12xarc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fy=k("DiameterIcon",[["circle",{cx:"19",cy:"19",r:"2",key:"17f5cg"}],["circle",{cx:"5",cy:"5",r:"2",key:"1gwv83"}],["path",{d:"M6.48 3.66a10 10 0 0 1 13.86 13.86",key:"xr8kdq"}],["path",{d:"m6.41 6.41 11.18 11.18",key:"uhpjw7"}],["path",{d:"M3.66 6.48a10 10 0 0 0 13.86 13.86",key:"cldpwv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const my=k("DiamondIcon",[["path",{d:"M2.7 10.3a2.41 2.41 0 0 0 0 3.41l7.59 7.59a2.41 2.41 0 0 0 3.41 0l7.59-7.59a2.41 2.41 0 0 0 0-3.41l-7.59-7.59a2.41 2.41 0 0 0-3.41 0Z",key:"1f1r0c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vy=k("Dice1Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"M12 12h.01",key:"1mp3jc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yy=k("Dice2Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"M15 9h.01",key:"x1ddxp"}],["path",{d:"M9 15h.01",key:"fzyn71"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _y=k("Dice3Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"M16 8h.01",key:"cr5u4v"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gy=k("Dice4Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"M16 8h.01",key:"cr5u4v"}],["path",{d:"M8 8h.01",key:"1e4136"}],["path",{d:"M8 16h.01",key:"18s6g9"}],["path",{d:"M16 16h.01",key:"1f9h7w"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ky=k("Dice5Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"M16 8h.01",key:"cr5u4v"}],["path",{d:"M8 8h.01",key:"1e4136"}],["path",{d:"M8 16h.01",key:"18s6g9"}],["path",{d:"M16 16h.01",key:"1f9h7w"}],["path",{d:"M12 12h.01",key:"1mp3jc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const by=k("Dice6Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"M16 8h.01",key:"cr5u4v"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M16 16h.01",key:"1f9h7w"}],["path",{d:"M8 8h.01",key:"1e4136"}],["path",{d:"M8 12h.01",key:"czm47f"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wy=k("DicesIcon",[["rect",{width:"12",height:"12",x:"2",y:"10",rx:"2",ry:"2",key:"6agr2n"}],["path",{d:"m17.92 14 3.5-3.5a2.24 2.24 0 0 0 0-3l-5-4.92a2.24 2.24 0 0 0-3 0L10 6",key:"1o487t"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"M10 14h.01",key:"ssrbsk"}],["path",{d:"M15 6h.01",key:"cblpky"}],["path",{d:"M18 9h.01",key:"2061c0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xy=k("DiffIcon",[["path",{d:"M12 3v14",key:"7cf3v8"}],["path",{d:"M5 10h14",key:"elsbfy"}],["path",{d:"M5 21h14",key:"11awu3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const My=k("Disc2Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 12h.01",key:"1mp3jc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cy=k("Disc3Icon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M6 12c0-1.7.7-3.2 1.8-4.2",key:"oqkarx"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M18 12c0 1.7-.7 3.2-1.8 4.2",key:"1eah9h"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sy=k("DiscAlbumIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["circle",{cx:"12",cy:"12",r:"5",key:"nd82uf"}],["path",{d:"M12 12h.01",key:"1mp3jc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Iy=k("DiscIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ly=k("DivideCircleIcon",[["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}],["line",{x1:"12",x2:"12",y1:"16",y2:"16",key:"aqc6ln"}],["line",{x1:"12",x2:"12",y1:"8",y2:"8",key:"1mkcni"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $y=k("DivideSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}],["line",{x1:"12",x2:"12",y1:"16",y2:"16",key:"aqc6ln"}],["line",{x1:"12",x2:"12",y1:"8",y2:"8",key:"1mkcni"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ay=k("DivideIcon",[["circle",{cx:"12",cy:"6",r:"1",key:"1bh7o1"}],["line",{x1:"5",x2:"19",y1:"12",y2:"12",key:"13b5wn"}],["circle",{cx:"12",cy:"18",r:"1",key:"lqb9t5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ey=k("DnaOffIcon",[["path",{d:"M15 2c-1.35 1.5-2.092 3-2.5 4.5M9 22c1.35-1.5 2.092-3 2.5-4.5",key:"sxiaad"}],["path",{d:"M2 15c3.333-3 6.667-3 10-3m10-3c-1.5 1.35-3 2.092-4.5 2.5",key:"yn4bs1"}],["path",{d:"m17 6-2.5-2.5",key:"5cdfhj"}],["path",{d:"m14 8-1.5-1.5",key:"1ohn8i"}],["path",{d:"m7 18 2.5 2.5",key:"16tu1a"}],["path",{d:"m3.5 14.5.5.5",key:"hapbhd"}],["path",{d:"m20 9 .5.5",key:"1n7z02"}],["path",{d:"m6.5 12.5 1 1",key:"cs35ky"}],["path",{d:"m16.5 10.5 1 1",key:"696xn5"}],["path",{d:"m10 16 1.5 1.5",key:"11lckj"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ty=k("DnaIcon",[["path",{d:"M2 15c6.667-6 13.333 0 20-6",key:"1pyr53"}],["path",{d:"M9 22c1.798-1.998 2.518-3.995 2.807-5.993",key:"q3hbxp"}],["path",{d:"M15 2c-1.798 1.998-2.518 3.995-2.807 5.993",key:"80uv8i"}],["path",{d:"m17 6-2.5-2.5",key:"5cdfhj"}],["path",{d:"m14 8-1-1",key:"15nbz5"}],["path",{d:"m7 18 2.5 2.5",key:"16tu1a"}],["path",{d:"m3.5 14.5.5.5",key:"hapbhd"}],["path",{d:"m20 9 .5.5",key:"1n7z02"}],["path",{d:"m6.5 12.5 1 1",key:"cs35ky"}],["path",{d:"m16.5 10.5 1 1",key:"696xn5"}],["path",{d:"m10 16 1.5 1.5",key:"11lckj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Py=k("DogIcon",[["path",{d:"M10 5.172C10 3.782 8.423 2.679 6.5 3c-2.823.47-4.113 6.006-4 7 .08.703 1.725 1.722 3.656 1 1.261-.472 1.96-1.45 2.344-2.5",key:"19br0u"}],["path",{d:"M14.267 5.172c0-1.39 1.577-2.493 3.5-2.172 2.823.47 4.113 6.006 4 7-.08.703-1.725 1.722-3.656 1-1.261-.472-1.855-1.45-2.239-2.5",key:"11n1an"}],["path",{d:"M8 14v.5",key:"1nzgdb"}],["path",{d:"M16 14v.5",key:"1lajdz"}],["path",{d:"M11.25 16.25h1.5L12 17l-.75-.75Z",key:"12kq1m"}],["path",{d:"M4.42 11.247A13.152 13.152 0 0 0 4 14.556C4 18.728 7.582 21 12 21s8-2.272 8-6.444c0-1.061-.162-2.2-.493-3.309m-9.243-6.082A8.801 8.801 0 0 1 12 5c.78 0 1.5.108 2.161.306",key:"wsu29d"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dy=k("DollarSignIcon",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ry=k("DonutIcon",[["path",{d:"M20.5 10a2.5 2.5 0 0 1-2.4-3H18a2.95 2.95 0 0 1-2.6-4.4 10 10 0 1 0 6.3 7.1c-.3.2-.8.3-1.2.3",key:"19sr3x"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Oy=k("DoorClosedIcon",[["path",{d:"M18 20V6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14",key:"36qu9e"}],["path",{d:"M2 20h20",key:"owomy5"}],["path",{d:"M14 12v.01",key:"xfcn54"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vy=k("DoorOpenIcon",[["path",{d:"M13 4h3a2 2 0 0 1 2 2v14",key:"hrm0s9"}],["path",{d:"M2 20h3",key:"1gaodv"}],["path",{d:"M13 20h9",key:"s90cdi"}],["path",{d:"M10 12v.01",key:"vx6srw"}],["path",{d:"M13 4.562v16.157a1 1 0 0 1-1.242.97L5 20V5.562a2 2 0 0 1 1.515-1.94l4-1A2 2 0 0 1 13 4.561Z",key:"199qr4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Uy=k("DotIcon",[["circle",{cx:"12.1",cy:"12.1",r:"1",key:"18d7e5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fy=k("DownloadCloudIcon",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M12 12v9",key:"192myk"}],["path",{d:"m8 17 4 4 4-4",key:"1ul180"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jy=k("DownloadIcon",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hy=k("DraftingCompassIcon",[["circle",{cx:"12",cy:"5",r:"2",key:"f1ur92"}],["path",{d:"m3 21 8.02-14.26",key:"1ssaw4"}],["path",{d:"m12.99 6.74 1.93 3.44",key:"iwagvd"}],["path",{d:"M19 12c-3.87 4-10.13 4-14 0",key:"1tsu18"}],["path",{d:"m21 21-2.16-3.84",key:"vylbct"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ny=k("DramaIcon",[["path",{d:"M10 11h.01",key:"d2at3l"}],["path",{d:"M14 6h.01",key:"k028ub"}],["path",{d:"M18 6h.01",key:"1v4wsw"}],["path",{d:"M6.5 13.1h.01",key:"1748ia"}],["path",{d:"M22 5c0 9-4 12-6 12s-6-3-6-12c0-2 2-3 6-3s6 1 6 3",key:"172yzv"}],["path",{d:"M17.4 9.9c-.8.8-2 .8-2.8 0",key:"1obv0w"}],["path",{d:"M10.1 7.1C9 7.2 7.7 7.7 6 8.6c-3.5 2-4.7 3.9-3.7 5.6 4.5 7.8 9.5 8.4 11.2 7.4.9-.5 1.9-2.1 1.9-4.7",key:"rqjl8i"}],["path",{d:"M9.1 16.5c.3-1.1 1.4-1.7 2.4-1.4",key:"1mr6wy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zy=k("DribbbleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M19.13 5.09C15.22 9.14 10 10.44 2.25 10.94",key:"hpej1"}],["path",{d:"M21.75 12.84c-6.62-1.41-12.14 1-16.38 6.32",key:"1tr44o"}],["path",{d:"M8.56 2.75c4.37 6 6 9.42 8 17.72",key:"kbh691"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const By=k("DrillIcon",[["path",{d:"M14 9c0 .6-.4 1-1 1H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9c.6 0 1 .4 1 1Z",key:"b6nnkj"}],["path",{d:"M18 6h4",key:"66u95g"}],["path",{d:"M14 4h3a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-3",key:"105ega"}],["path",{d:"m5 10-2 8",key:"xt2lic"}],["path",{d:"M12 10v3c0 .6-.4 1-1 1H8",key:"mwpjnk"}],["path",{d:"m7 18 2-8",key:"1bzku2"}],["path",{d:"M5 22c-1.7 0-3-1.3-3-3 0-.6.4-1 1-1h7c.6 0 1 .4 1 1v2c0 .6-.4 1-1 1Z",key:"117add"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qy=k("DropletIcon",[["path",{d:"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z",key:"c7niix"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wy=k("DropletsIcon",[["path",{d:"M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z",key:"1ptgy4"}],["path",{d:"M12.56 6.6A10.97 10.97 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97",key:"1sl1rz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gy=k("DrumIcon",[["path",{d:"m2 2 8 8",key:"1v6059"}],["path",{d:"m22 2-8 8",key:"173r8a"}],["ellipse",{cx:"12",cy:"9",rx:"10",ry:"5",key:"liohsx"}],["path",{d:"M7 13.4v7.9",key:"1yi6u9"}],["path",{d:"M12 14v8",key:"1tn2tj"}],["path",{d:"M17 13.4v7.9",key:"eqz2v3"}],["path",{d:"M2 9v8a10 5 0 0 0 20 0V9",key:"1750ul"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zy=k("DrumstickIcon",[["path",{d:"M15.45 15.4c-2.13.65-4.3.32-5.7-1.1-2.29-2.27-1.76-6.5 1.17-9.42 2.93-2.93 7.15-3.46 9.43-1.18 1.41 1.41 1.74 3.57 1.1 5.71-1.4-.51-3.26-.02-4.64 1.36-1.38 1.38-1.87 3.23-1.36 4.63z",key:"1o96s0"}],["path",{d:"m11.25 15.6-2.16 2.16a2.5 2.5 0 1 1-4.56 1.73 2.49 2.49 0 0 1-1.41-4.24 2.5 2.5 0 0 1 3.14-.32l2.16-2.16",key:"14vv5h"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ky=k("DumbbellIcon",[["path",{d:"m6.5 6.5 11 11",key:"f7oqzb"}],["path",{d:"m21 21-1-1",key:"cpc6if"}],["path",{d:"m3 3 1 1",key:"d3rpuf"}],["path",{d:"m18 22 4-4",key:"1e32o6"}],["path",{d:"m2 6 4-4",key:"189tqz"}],["path",{d:"m3 10 7-7",key:"1bxui2"}],["path",{d:"m14 21 7-7",key:"16x78n"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xy=k("EarOffIcon",[["path",{d:"M6 18.5a3.5 3.5 0 1 0 7 0c0-1.57.92-2.52 2.04-3.46",key:"1qngmn"}],["path",{d:"M6 8.5c0-.75.13-1.47.36-2.14",key:"b06bma"}],["path",{d:"M8.8 3.15A6.5 6.5 0 0 1 19 8.5c0 1.63-.44 2.81-1.09 3.76",key:"g10hsz"}],["path",{d:"M12.5 6A2.5 2.5 0 0 1 15 8.5M10 13a2 2 0 0 0 1.82-1.18",key:"ygzou7"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yy=k("EarIcon",[["path",{d:"M6 8.5a6.5 6.5 0 1 1 13 0c0 6-6 6-6 10a3.5 3.5 0 1 1-7 0",key:"1dfaln"}],["path",{d:"M15 8.5a2.5 2.5 0 0 0-5 0v1a2 2 0 1 1 0 4",key:"1qnva7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qy=k("EggFriedIcon",[["circle",{cx:"11.5",cy:"12.5",r:"3.5",key:"1cl1mi"}],["path",{d:"M3 8c0-3.5 2.5-6 6.5-6 5 0 4.83 3 7.5 5s5 2 5 6c0 4.5-2.5 6.5-7 6.5-2.5 0-2.5 2.5-6 2.5s-7-2-7-5.5c0-3 1.5-3 1.5-5C3.5 10 3 9 3 8Z",key:"165ef9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jy=k("EggOffIcon",[["path",{d:"M6.399 6.399C5.362 8.157 4.65 10.189 4.5 12c-.37 4.43 1.27 9.95 7.5 10 3.256-.026 5.259-1.547 6.375-3.625",key:"6et380"}],["path",{d:"M19.532 13.875A14.07 14.07 0 0 0 19.5 12c-.36-4.34-3.95-9.96-7.5-10-1.04.012-2.082.502-3.046 1.297",key:"gcdc3f"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e_=k("EggIcon",[["path",{d:"M12 22c6.23-.05 7.87-5.57 7.5-10-.36-4.34-3.95-9.96-7.5-10-3.55.04-7.14 5.66-7.5 10-.37 4.43 1.27 9.95 7.5 10z",key:"1c39pg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t_=k("EqualNotIcon",[["line",{x1:"5",x2:"19",y1:"9",y2:"9",key:"1nwqeh"}],["line",{x1:"5",x2:"19",y1:"15",y2:"15",key:"g8yjpy"}],["line",{x1:"19",x2:"5",y1:"5",y2:"19",key:"1x9vlm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const a_=k("EqualIcon",[["line",{x1:"5",x2:"19",y1:"9",y2:"9",key:"1nwqeh"}],["line",{x1:"5",x2:"19",y1:"15",y2:"15",key:"g8yjpy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n_=k("EraserIcon",[["path",{d:"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21",key:"182aya"}],["path",{d:"M22 21H7",key:"t4ddhn"}],["path",{d:"m5 11 9 9",key:"1mo9qw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s_=k("EuroIcon",[["path",{d:"M4 10h12",key:"1y6xl8"}],["path",{d:"M4 14h9",key:"1loblj"}],["path",{d:"M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2",key:"1j6lzo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o_=k("ExpandIcon",[["path",{d:"m21 21-6-6m6 6v-4.8m0 4.8h-4.8",key:"1c15vz"}],["path",{d:"M3 16.2V21m0 0h4.8M3 21l6-6",key:"1fsnz2"}],["path",{d:"M21 7.8V3m0 0h-4.8M21 3l-6 6",key:"hawz9i"}],["path",{d:"M3 7.8V3m0 0h4.8M3 3l6 6",key:"u9ee12"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r_=k("ExternalLinkIcon",[["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}],["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["line",{x1:"10",x2:"21",y1:"14",y2:"3",key:"18c3s4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i_=k("EyeOffIcon",[["path",{d:"M9.88 9.88a3 3 0 1 0 4.24 4.24",key:"1jxqfv"}],["path",{d:"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68",key:"9wicm4"}],["path",{d:"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61",key:"1jreej"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l_=k("EyeIcon",[["path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z",key:"rwhkz3"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c_=k("FacebookIcon",[["path",{d:"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z",key:"1jg4f8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const d_=k("FactoryIcon",[["path",{d:"M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z",key:"159hny"}],["path",{d:"M17 18h1",key:"uldtlt"}],["path",{d:"M12 18h1",key:"s9uhes"}],["path",{d:"M7 18h1",key:"1neino"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u_=k("FanIcon",[["path",{d:"M10.827 16.379a6.082 6.082 0 0 1-8.618-7.002l5.412 1.45a6.082 6.082 0 0 1 7.002-8.618l-1.45 5.412a6.082 6.082 0 0 1 8.618 7.002l-5.412-1.45a6.082 6.082 0 0 1-7.002 8.618l1.45-5.412Z",key:"484a7f"}],["path",{d:"M12 12v.01",key:"u5ubse"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const p_=k("FastForwardIcon",[["polygon",{points:"13 19 22 12 13 5 13 19",key:"587y9g"}],["polygon",{points:"2 19 11 12 2 5 2 19",key:"3pweh0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h_=k("FeatherIcon",[["path",{d:"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z",key:"u4sw5n"}],["line",{x1:"16",x2:"2",y1:"8",y2:"22",key:"1c47m2"}],["line",{x1:"17.5",x2:"9",y1:"15",y2:"15",key:"2fj3pr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f_=k("FenceIcon",[["path",{d:"M4 3 2 5v15c0 .6.4 1 1 1h2c.6 0 1-.4 1-1V5Z",key:"1n2rgs"}],["path",{d:"M6 8h4",key:"utf9t1"}],["path",{d:"M6 18h4",key:"12yh4b"}],["path",{d:"m12 3-2 2v15c0 .6.4 1 1 1h2c.6 0 1-.4 1-1V5Z",key:"3ha7mj"}],["path",{d:"M14 8h4",key:"1r8wg2"}],["path",{d:"M14 18h4",key:"1t3kbu"}],["path",{d:"m20 3-2 2v15c0 .6.4 1 1 1h2c.6 0 1-.4 1-1V5Z",key:"dfd4e2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m_=k("FerrisWheelIcon",[["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m6.8 15-3.5 2",key:"hjy98k"}],["path",{d:"m20.7 7-3.5 2",key:"f08gto"}],["path",{d:"M6.8 9 3.3 7",key:"1aevh4"}],["path",{d:"m20.7 17-3.5-2",key:"1liqo3"}],["path",{d:"m9 22 3-8 3 8",key:"wees03"}],["path",{d:"M8 22h8",key:"rmew8v"}],["path",{d:"M18 18.7a9 9 0 1 0-12 0",key:"dhzg4g"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const v_=k("FigmaIcon",[["path",{d:"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z",key:"1340ok"}],["path",{d:"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z",key:"1hz3m3"}],["path",{d:"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z",key:"1oz8n2"}],["path",{d:"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z",key:"1ff65i"}],["path",{d:"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z",key:"pdip6e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y_=k("FileArchiveIcon",[["path",{d:"M4 22V4c0-.5.2-1 .6-1.4C5 2.2 5.5 2 6 2h8.5L20 7.5V20c0 .5-.2 1-.6 1.4-.4.4-.9.6-1.4.6h-2",key:"1u864v"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["circle",{cx:"10",cy:"20",r:"2",key:"1xzdoj"}],["path",{d:"M10 7V6",key:"dljcrl"}],["path",{d:"M10 12v-1",key:"v7bkov"}],["path",{d:"M10 18v-2",key:"1cjy8d"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const __=k("FileAudio2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v2",key:"fkyf72"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M2 17v-3a4 4 0 0 1 8 0v3",key:"1ggdre"}],["circle",{cx:"9",cy:"17",r:"1",key:"bc1fq4"}],["circle",{cx:"3",cy:"17",r:"1",key:"vo6nti"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const g_=k("FileAudioIcon",[["path",{d:"M17.5 22h.5c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3",key:"1013sb"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M10 20v-1a2 2 0 1 1 4 0v1a2 2 0 1 1-4 0Z",key:"gqt63y"}],["path",{d:"M6 20v-1a2 2 0 1 0-4 0v1a2 2 0 1 0 4 0Z",key:"cf7lqx"}],["path",{d:"M2 19v-3a6 6 0 0 1 12 0v3",key:"1acxgf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ui=k("FileAxis3dIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M8 10v8h8",key:"tlaukw"}],["path",{d:"m8 18 4-4",key:"12zab0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k_=k("FileBadge2Icon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["path",{d:"M12 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z",key:"13rien"}],["path",{d:"m14 12.5 1 5.5-3-1-3 1 1-5.5",key:"14xlky"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b_=k("FileBadgeIcon",[["path",{d:"M4 7V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-6",key:"qtddq0"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z",key:"u0c8gj"}],["path",{d:"M7 16.5 8 22l-3-1-3 1 1-5.5",key:"5gm2nr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w_=k("FileBarChart2Icon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"M8 18v-1",key:"zg0ygc"}],["path",{d:"M16 18v-3",key:"j5jt4h"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x_=k("FileBarChartIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M12 18v-4",key:"q1q25u"}],["path",{d:"M8 18v-2",key:"qcmpov"}],["path",{d:"M16 18v-6",key:"15y0np"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M_=k("FileBoxIcon",[["path",{d:"M14.5 22H18a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"h7jej2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M2.97 13.12c-.6.36-.97 1.02-.97 1.74v3.28c0 .72.37 1.38.97 1.74l3 1.83c.63.39 1.43.39 2.06 0l3-1.83c.6-.36.97-1.02.97-1.74v-3.28c0-.72-.37-1.38-.97-1.74l-3-1.83a1.97 1.97 0 0 0-2.06 0l-3 1.83Z",key:"f4a3oc"}],["path",{d:"m7 17-4.74-2.85",key:"etm6su"}],["path",{d:"m7 17 4.74-2.85",key:"5xuooz"}],["path",{d:"M7 17v5",key:"1yj1jh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const C_=k("FileCheck2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m3 15 2 2 4-4",key:"1lhrkk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S_=k("FileCheckIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m9 15 2 2 4-4",key:"1grp1n"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I_=k("FileClockIcon",[["path",{d:"M16 22h2c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3",key:"9lo3o3"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["circle",{cx:"8",cy:"16",r:"6",key:"10v15b"}],["path",{d:"M9.5 17.5 8 16.25V14",key:"1o80t2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L_=k("FileCode2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m9 18 3-3-3-3",key:"112psh"}],["path",{d:"m5 12-3 3 3 3",key:"oke12k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $_=k("FileCodeIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m10 13-2 2 2 2",key:"17smn8"}],["path",{d:"m14 17 2-2-2-2",key:"14mezr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fi=k("FileCogIcon",[["circle",{cx:"6",cy:"13",r:"3",key:"1z65bp"}],["path",{d:"m9.7 14.4-.9-.3",key:"o1luaq"}],["path",{d:"m3.2 11.9-.9-.3",key:"qm3zk5"}],["path",{d:"m4.6 16.7.3-.9",key:"1o0ect"}],["path",{d:"m7.6 16.7-.4-1",key:"1ym8d1"}],["path",{d:"m4.8 10.3-.4-1",key:"18q26g"}],["path",{d:"m2.3 14.6 1-.4",key:"121m88"}],["path",{d:"m8.7 11.8 1-.4",key:"9meqp2"}],["path",{d:"m7.4 9.3-.3.9",key:"136qqn"}],["path",{d:"M14 2v6h6",key:"1kof46"}],["path",{d:"M4 5.5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-1.5",key:"xwe04"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A_=k("FileDiffIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M9 17h6",key:"r8uit2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const E_=k("FileDigitIcon",[["rect",{width:"4",height:"6",x:"2",y:"12",rx:"2",key:"jm304g"}],["path",{d:"M14 2v6h6",key:"1kof46"}],["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["path",{d:"M10 12h2v6",key:"12zw74"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const T_=k("FileDownIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"m9 15 3 3 3-3",key:"1npd3o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P_=k("FileEditIcon",[["path",{d:"M4 13.5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-5.5",key:"1bg6eb"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z",key:"1rgxu8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D_=k("FileHeartIcon",[["path",{d:"M4 6V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4",key:"dba9qu"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M10.29 10.7a2.43 2.43 0 0 0-2.66-.52c-.29.12-.56.3-.78.53l-.35.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L6.5 18l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z",key:"1c1fso"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R_=k("FileImageIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["circle",{cx:"10",cy:"13",r:"2",key:"6v46hv"}],["path",{d:"m20 17-1.09-1.09a2 2 0 0 0-2.82 0L10 22",key:"17vly1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O_=k("FileInputIcon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M2 15h10",key:"jfw4w8"}],["path",{d:"m9 18 3-3-3-3",key:"112psh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V_=k("FileJson2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M4 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"fq0c9t"}],["path",{d:"M8 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"4gibmv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U_=k("FileJsonIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F_=k("FileKey2Icon",[["path",{d:"M4 10V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4",key:"1nw5t3"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["circle",{cx:"4",cy:"16",r:"2",key:"1ehqvc"}],["path",{d:"m10 10-4.5 4.5",key:"7fwrp6"}],["path",{d:"m9 11 1 1",key:"wa6s5q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j_=k("FileKeyIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["circle",{cx:"10",cy:"16",r:"2",key:"4ckbqe"}],["path",{d:"m16 10-4.5 4.5",key:"7p3ebg"}],["path",{d:"m15 11 1 1",key:"1bsyx3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H_=k("FileLineChartIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m16 13-3.5 3.5-2-2L8 17",key:"zz7yod"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N_=k("FileLock2Icon",[["path",{d:"M4 5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4",key:"gwd2r9"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["rect",{width:"8",height:"5",x:"2",y:"13",rx:"1",key:"10y5wo"}],["path",{d:"M8 13v-2a2 2 0 1 0-4 0v2",key:"1pdxzg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z_=k("FileLockIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["rect",{width:"8",height:"6",x:"8",y:"12",rx:"1",key:"3yr8at"}],["path",{d:"M15 12v-2a3 3 0 1 0-6 0v2",key:"1nqnhw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B_=k("FileMinus2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M3 15h6",key:"4e2qda"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q_=k("FileMinusIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["line",{x1:"9",x2:"15",y1:"15",y2:"15",key:"110plj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W_=k("FileMusicIcon",[["circle",{cx:"14",cy:"16",r:"2",key:"1bzzi3"}],["circle",{cx:"6",cy:"18",r:"2",key:"1fncim"}],["path",{d:"M4 12.4V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-7.5",key:"skc018"}],["path",{d:"M8 18v-7.7L16 9v7",key:"1oie6o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G_=k("FileOutputIcon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M2 15h10",key:"jfw4w8"}],["path",{d:"m5 12-3 3 3 3",key:"oke12k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z_=k("FilePieChartIcon",[["path",{d:"M16 22h2a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3",key:"zhyrez"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M4.04 11.71a5.84 5.84 0 1 0 8.2 8.29",key:"f1t5jc"}],["path",{d:"M13.83 16A5.83 5.83 0 0 0 8 10.17V16h5.83Z",key:"7q54ec"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K_=k("FilePlus2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M3 15h6",key:"4e2qda"}],["path",{d:"M6 12v6",key:"1u72j0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X_=k("FilePlusIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["line",{x1:"12",x2:"12",y1:"18",y2:"12",key:"1tsf04"}],["line",{x1:"9",x2:"15",y1:"15",y2:"15",key:"110plj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y_=k("FileQuestionIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["path",{d:"M10 10.3c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2",key:"1umxtm"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q_=k("FileScanIcon",[["path",{d:"M20 10V7.5L14.5 2H6a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h4.5",key:"uvikde"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M16 22a2 2 0 0 1-2-2",key:"1wqh5n"}],["path",{d:"M20 22a2 2 0 0 0 2-2",key:"1l9q4k"}],["path",{d:"M20 14a2 2 0 0 1 2 2",key:"1ny6zw"}],["path",{d:"M16 14a2 2 0 0 0-2 2",key:"ceaadl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J_=k("FileSearch2Icon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["circle",{cx:"11.5",cy:"14.5",r:"2.5",key:"1bq0ko"}],["path",{d:"M13.25 16.25 15 18",key:"9eh8bj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const eg=k("FileSearchIcon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3",key:"am10z3"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6z",key:"ychnub"}],["path",{d:"m9 18-1.5-1.5",key:"1j6qii"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tg=k("FileSignatureIcon",[["path",{d:"M20 19.5v.5a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8.5L18 5.5",key:"kd5d3"}],["path",{d:"M8 18h1",key:"13wk12"}],["path",{d:"M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z",key:"johvi5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ag=k("FileSpreadsheetIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M8 13h2",key:"yr2amv"}],["path",{d:"M8 17h2",key:"2yhykz"}],["path",{d:"M14 13h2",key:"un5t4a"}],["path",{d:"M14 17h2",key:"10kma7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ng=k("FileStackIcon",[["path",{d:"M16 2v5h5",key:"kt2in0"}],["path",{d:"M21 6v6.5c0 .8-.7 1.5-1.5 1.5h-7c-.8 0-1.5-.7-1.5-1.5v-9c0-.8.7-1.5 1.5-1.5H17l4 4z",key:"1km23n"}],["path",{d:"M7 8v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H15",key:"16874u"}],["path",{d:"M3 12v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H11",key:"k2ox98"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sg=k("FileSymlinkIcon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v7",key:"138uzh"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m10 18 3-3-3-3",key:"18f6ys"}],["path",{d:"M4 18v-1a2 2 0 0 1 2-2h6",key:"5uz2rn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const og=k("FileTerminalIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m8 16 2-2-2-2",key:"10vzyd"}],["path",{d:"M12 18h4",key:"1wd2n7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rg=k("FileTextIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["line",{x1:"16",x2:"8",y1:"13",y2:"13",key:"14keom"}],["line",{x1:"16",x2:"8",y1:"17",y2:"17",key:"17nazh"}],["line",{x1:"10",x2:"8",y1:"9",y2:"9",key:"1a5vjj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ig=k("FileType2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M2 13v-1h6v1",key:"1dh9dg"}],["path",{d:"M4 18h2",key:"1xrofg"}],["path",{d:"M5 12v6",key:"150t9c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lg=k("FileTypeIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M9 13v-1h6v1",key:"1bb014"}],["path",{d:"M11 18h2",key:"12mj7e"}],["path",{d:"M12 12v6",key:"3ahymv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cg=k("FileUpIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"m15 15-3-3-3 3",key:"15xj92"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dg=k("FileVideo2Icon",[["path",{d:"M4 8V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4",key:"1nti49"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m10 15.5 4 2.5v-6l-4 2.5",key:"t7cp39"}],["rect",{width:"8",height:"6",x:"2",y:"12",rx:"1",key:"1a6c1e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ug=k("FileVideoIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m10 11 5 3-5 3v-6Z",key:"7ntvm4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pg=k("FileVolume2Icon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M11.5 13.5c.32.4.5.94.5 1.5s-.18 1.1-.5 1.5",key:"joawwx"}],["path",{d:"M15 12c.64.8 1 1.87 1 3s-.36 2.2-1 3",key:"1f2wyw"}],["path",{d:"M8 15h.01",key:"a7atzg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hg=k("FileVolumeIcon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3",key:"am10z3"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"m7 10-3 2H2v4h2l3 2v-8Z",key:"tazg57"}],["path",{d:"M11 11c.64.8 1 1.87 1 3s-.36 2.2-1 3",key:"1yej3m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fg=k("FileWarningIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mg=k("FileX2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["path",{d:"M14 2v6h6",key:"1kof46"}],["path",{d:"m3 12.5 5 5",key:"1qls4r"}],["path",{d:"m8 12.5-5 5",key:"b853mi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vg=k("FileXIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["line",{x1:"9.5",x2:"14.5",y1:"12.5",y2:"17.5",key:"izs6du"}],["line",{x1:"14.5",x2:"9.5",y1:"12.5",y2:"17.5",key:"1lehlj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yg=k("FileIcon",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _g=k("FilesIcon",[["path",{d:"M15.5 2H8.6c-.4 0-.8.2-1.1.5-.3.3-.5.7-.5 1.1v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8c.4 0 .8-.2 1.1-.5.3-.3.5-.7.5-1.1V6.5L15.5 2z",key:"cennsq"}],["path",{d:"M3 7.6v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8",key:"ms809a"}],["path",{d:"M15 2v5h5",key:"qq6kwv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gg=k("FilmIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M7 3v18",key:"bbkbws"}],["path",{d:"M3 7.5h4",key:"zfgn84"}],["path",{d:"M3 12h18",key:"1i2n21"}],["path",{d:"M3 16.5h4",key:"1230mu"}],["path",{d:"M17 3v18",key:"in4fa5"}],["path",{d:"M17 7.5h4",key:"myr1c1"}],["path",{d:"M17 16.5h4",key:"go4c1d"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kg=k("FilterXIcon",[["path",{d:"M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055",key:"1fi1da"}],["path",{d:"m22 3-5 5",key:"12jva0"}],["path",{d:"m17 3 5 5",key:"k36vhe"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bg=k("FilterIcon",[["polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3",key:"1yg77f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wg=k("FingerprintIcon",[["path",{d:"M2 12C2 6.5 6.5 2 12 2a10 10 0 0 1 8 4",key:"1jc9o5"}],["path",{d:"M5 19.5C5.5 18 6 15 6 12c0-.7.12-1.37.34-2",key:"1mxgy1"}],["path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02",key:"ptglia"}],["path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4",key:"1nerag"}],["path",{d:"M8.65 22c.21-.66.45-1.32.57-2",key:"13wd9y"}],["path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88",key:"o46ks0"}],["path",{d:"M2 16h.01",key:"1gqxmh"}],["path",{d:"M21.8 16c.2-2 .131-5.354 0-6",key:"drycrb"}],["path",{d:"M9 6.8a6 6 0 0 1 9 5.2c0 .47 0 1.17-.02 2",key:"1fgabc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xg=k("FireExtinguisherIcon",[["path",{d:"M15 6.5V3a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v3.5",key:"sqyvz"}],["path",{d:"M9 18h8",key:"i7pszb"}],["path",{d:"M18 3h-3",key:"7idoqj"}],["path",{d:"M11 3a6 6 0 0 0-6 6v11",key:"1v5je3"}],["path",{d:"M5 13h4",key:"svpcxo"}],["path",{d:"M17 10a4 4 0 0 0-8 0v10a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2Z",key:"vsjego"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mg=k("FishOffIcon",[["path",{d:"M18 12.47v.03m0-.5v.47m-.475 5.056A6.744 6.744 0 0 1 15 18c-3.56 0-7.56-2.53-8.5-6 .348-1.28 1.114-2.433 2.121-3.38m3.444-2.088A8.802 8.802 0 0 1 15 6c3.56 0 6.06 2.54 7 6-.309 1.14-.786 2.177-1.413 3.058",key:"1j1hse"}],["path",{d:"M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33m7.48-4.372A9.77 9.77 0 0 1 16 6.07m0 11.86a9.77 9.77 0 0 1-1.728-3.618",key:"1q46z8"}],["path",{d:"m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98M8.53 3h5.27a2 2 0 0 1 1.98 1.67l.23 1.4M2 2l20 20",key:"1407gh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cg=k("FishSymbolIcon",[["path",{d:"M2 16s9-15 20-4C11 23 2 8 2 8",key:"h4oh4o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sg=k("FishIcon",[["path",{d:"M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z",key:"15baut"}],["path",{d:"M18 12v.5",key:"18hhni"}],["path",{d:"M16 17.93a9.77 9.77 0 0 1 0-11.86",key:"16dt7o"}],["path",{d:"M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33",key:"l9di03"}],["path",{d:"M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4",key:"1kjonw"}],["path",{d:"m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98",key:"1zlm23"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ig=k("FlagOffIcon",[["path",{d:"M8 2c3 0 5 2 8 2s4-1 4-1v11",key:"9rwyz9"}],["path",{d:"M4 22V4",key:"1plyxx"}],["path",{d:"M4 15s1-1 4-1 5 2 8 2",key:"1myooe"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lg=k("FlagTriangleLeftIcon",[["path",{d:"M17 22V2L7 7l10 5",key:"1rmf0r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $g=k("FlagTriangleRightIcon",[["path",{d:"M7 22V2l10 5-10 5",key:"17n18y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ag=k("FlagIcon",[["path",{d:"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z",key:"i9b6wo"}],["line",{x1:"4",x2:"4",y1:"22",y2:"15",key:"1cm3nv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Eg=k("FlameKindlingIcon",[["path",{d:"M12 2c1 3 2.5 3.5 3.5 4.5A5 5 0 0 1 17 10a5 5 0 1 1-10 0c0-.3 0-.6.1-.9a2 2 0 1 0 3.3-2C8 4.5 11 2 12 2Z",key:"1ir223"}],["path",{d:"m5 22 14-4",key:"1brv4h"}],["path",{d:"m5 18 14 4",key:"lgyyje"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tg=k("FlameIcon",[["path",{d:"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z",key:"96xj49"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pg=k("FlashlightOffIcon",[["path",{d:"M16 16v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4",key:"1r120k"}],["path",{d:"M7 2h11v4c0 2-2 2-2 4v1",key:"dz1920"}],["line",{x1:"11",x2:"18",y1:"6",y2:"6",key:"bi1vpe"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dg=k("FlashlightIcon",[["path",{d:"M18 6c0 2-2 2-2 4v10a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4V2h12z",key:"1orkel"}],["line",{x1:"6",x2:"18",y1:"6",y2:"6",key:"1z11jq"}],["line",{x1:"12",x2:"12",y1:"12",y2:"12",key:"1f4yc1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rg=k("FlaskConicalOffIcon",[["path",{d:"M10 10 4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-1.272-2.542",key:"59ek9y"}],["path",{d:"M10 2v2.343",key:"15t272"}],["path",{d:"M14 2v6.343",key:"sxr80q"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M7 16h9",key:"t5njau"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Og=k("FlaskConicalIcon",[["path",{d:"M10 2v7.527a2 2 0 0 1-.211.896L4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-5.069-10.127A2 2 0 0 1 14 9.527V2",key:"pzvekw"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M7 16h10",key:"wp8him"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vg=k("FlaskRoundIcon",[["path",{d:"M10 2v7.31",key:"5d1hyh"}],["path",{d:"M14 9.3V1.99",key:"14k4l0"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M14 9.3a6.5 6.5 0 1 1-4 0",key:"1r8fvy"}],["path",{d:"M5.52 16h12.96",key:"46hh1i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ug=k("FlipHorizontal2Icon",[["path",{d:"m3 7 5 5-5 5V7",key:"couhi7"}],["path",{d:"m21 7-5 5 5 5V7",key:"6ouia7"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 14v2",key:"8jcxud"}],["path",{d:"M12 8v2",key:"1woqiv"}],["path",{d:"M12 2v2",key:"tus03m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fg=k("FlipHorizontalIcon",[["path",{d:"M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3",key:"1i73f7"}],["path",{d:"M16 3h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3",key:"saxlbk"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 14v2",key:"8jcxud"}],["path",{d:"M12 8v2",key:"1woqiv"}],["path",{d:"M12 2v2",key:"tus03m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jg=k("FlipVertical2Icon",[["path",{d:"m17 3-5 5-5-5h10",key:"1ftt6x"}],["path",{d:"m17 21-5-5-5 5h10",key:"1m0wmu"}],["path",{d:"M4 12H2",key:"rhcxmi"}],["path",{d:"M10 12H8",key:"s88cx1"}],["path",{d:"M16 12h-2",key:"10asgb"}],["path",{d:"M22 12h-2",key:"14jgyd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hg=k("FlipVerticalIcon",[["path",{d:"M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3",key:"14bfxa"}],["path",{d:"M21 16v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3",key:"14rx03"}],["path",{d:"M4 12H2",key:"rhcxmi"}],["path",{d:"M10 12H8",key:"s88cx1"}],["path",{d:"M16 12h-2",key:"10asgb"}],["path",{d:"M22 12h-2",key:"14jgyd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ng=k("Flower2Icon",[["path",{d:"M12 5a3 3 0 1 1 3 3m-3-3a3 3 0 1 0-3 3m3-3v1M9 8a3 3 0 1 0 3 3M9 8h1m5 0a3 3 0 1 1-3 3m3-3h-1m-2 3v-1",key:"3pnvol"}],["circle",{cx:"12",cy:"8",r:"2",key:"1822b1"}],["path",{d:"M12 10v12",key:"6ubwww"}],["path",{d:"M12 22c4.2 0 7-1.667 7-5-4.2 0-7 1.667-7 5Z",key:"9hd38g"}],["path",{d:"M12 22c-4.2 0-7-1.667-7-5 4.2 0 7 1.667 7 5Z",key:"ufn41s"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zg=k("FlowerIcon",[["path",{d:"M12 7.5a4.5 4.5 0 1 1 4.5 4.5M12 7.5A4.5 4.5 0 1 0 7.5 12M12 7.5V9m-4.5 3a4.5 4.5 0 1 0 4.5 4.5M7.5 12H9m7.5 0a4.5 4.5 0 1 1-4.5 4.5m4.5-4.5H15m-3 4.5V15",key:"51z86h"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"m8 16 1.5-1.5",key:"ce6zph"}],["path",{d:"M14.5 9.5 16 8",key:"1kzrzb"}],["path",{d:"m8 8 1.5 1.5",key:"1yv88w"}],["path",{d:"M14.5 14.5 16 16",key:"12xhjh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bg=k("FocusIcon",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qg=k("FoldHorizontalIcon",[["path",{d:"M2 12h6",key:"1wqiqv"}],["path",{d:"M22 12h-6",key:"1eg9hc"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 8v2",key:"1woqiv"}],["path",{d:"M12 14v2",key:"8jcxud"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m19 9-3 3 3 3",key:"12ol22"}],["path",{d:"m5 15 3-3-3-3",key:"1kdhjc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wg=k("FoldVerticalIcon",[["path",{d:"M12 22v-6",key:"6o8u61"}],["path",{d:"M12 8V2",key:"1wkif3"}],["path",{d:"M4 12H2",key:"rhcxmi"}],["path",{d:"M10 12H8",key:"s88cx1"}],["path",{d:"M16 12h-2",key:"10asgb"}],["path",{d:"M22 12h-2",key:"14jgyd"}],["path",{d:"m15 19-3-3-3 3",key:"e37ymu"}],["path",{d:"m15 5-3 3-3-3",key:"19d6lf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gg=k("FolderArchiveIcon",[["circle",{cx:"15",cy:"19",r:"2",key:"u2pros"}],["path",{d:"M20.9 19.8A2 2 0 0 0 22 18V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h5.1",key:"1jj40k"}],["path",{d:"M15 11v-1",key:"cntcp"}],["path",{d:"M15 17v-2",key:"1279jj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zg=k("FolderCheckIcon",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}],["path",{d:"m9 13 2 2 4-4",key:"6343dt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kg=k("FolderClockIcon",[["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}],["path",{d:"M7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2",key:"1urifu"}],["path",{d:"M16 14v2l1 1",key:"xth2jh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xg=k("FolderClosedIcon",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}],["path",{d:"M2 10h20",key:"1ir3d8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ji=k("FolderCogIcon",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["path",{d:"M10.3 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v3.3",key:"1k8050"}],["path",{d:"m21.7 19.4-.9-.3",key:"1qgwi9"}],["path",{d:"m15.2 16.9-.9-.3",key:"1t7mvx"}],["path",{d:"m16.6 21.7.3-.9",key:"1j67ps"}],["path",{d:"m19.1 15.2.3-.9",key:"18r7jp"}],["path",{d:"m19.6 21.7-.4-1",key:"z2vh2"}],["path",{d:"m16.8 15.3-.4-1",key:"1ei7r6"}],["path",{d:"m14.3 19.6 1-.4",key:"11sv9r"}],["path",{d:"m20.7 16.8 1-.4",key:"19m87a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yg=k("FolderDotIcon",[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z",key:"1fr9dc"}],["circle",{cx:"12",cy:"13",r:"1",key:"49l61u"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qg=k("FolderDownIcon",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}],["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"m15 13-3 3-3-3",key:"6j2sf0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jg=k("FolderEditIcon",[["path",{d:"M8.4 10.6a2.1 2.1 0 1 1 2.99 2.98L6 19l-4 1 1-3.9Z",key:"10ocjb"}],["path",{d:"M2 11.5V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-9.5",key:"1h3cz8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ek=k("FolderGit2Icon",[["path",{d:"M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v5",key:"1w6njk"}],["circle",{cx:"13",cy:"12",r:"2",key:"1j92g6"}],["path",{d:"M18 19c-2.8 0-5-2.2-5-5v8",key:"pkpw2h"}],["circle",{cx:"20",cy:"19",r:"2",key:"1obnsp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tk=k("FolderGitIcon",[["circle",{cx:"12",cy:"13",r:"2",key:"1c1ljs"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}],["path",{d:"M14 13h3",key:"1dgedf"}],["path",{d:"M7 13h3",key:"1pygq7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ak=k("FolderHeartIcon",[["path",{d:"M11 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v1.5",key:"6hud8k"}],["path",{d:"M13.9 17.45c-1.2-1.2-1.14-2.8-.2-3.73a2.43 2.43 0 0 1 3.44 0l.36.34.34-.34a2.43 2.43 0 0 1 3.45-.01v0c.95.95 1 2.53-.2 3.74L17.5 21Z",key:"vgq86i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nk=k("FolderInputIcon",[["path",{d:"M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1",key:"fm4g5t"}],["path",{d:"M2 13h10",key:"pgb2dq"}],["path",{d:"m9 16 3-3-3-3",key:"6m91ic"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sk=k("FolderKanbanIcon",[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z",key:"1fr9dc"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M12 10v2",key:"hh53o1"}],["path",{d:"M16 10v6",key:"1d6xys"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ok=k("FolderKeyIcon",[["circle",{cx:"16",cy:"20",r:"2",key:"1vifvg"}],["path",{d:"M10 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v2",key:"3hgo9p"}],["path",{d:"m22 14-4.5 4.5",key:"1ef6z8"}],["path",{d:"m21 15 1 1",key:"1ejcpy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rk=k("FolderLockIcon",[["rect",{width:"8",height:"5",x:"14",y:"17",rx:"1",key:"19aais"}],["path",{d:"M10 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v2.5",key:"1w6v7t"}],["path",{d:"M20 17v-2a2 2 0 1 0-4 0v2",key:"pwaxnr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ik=k("FolderMinusIcon",[["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lk=k("FolderOpenDotIcon",[["path",{d:"m6 14 1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2",key:"1nmvlm"}],["circle",{cx:"14",cy:"15",r:"1",key:"1gm4qj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ck=k("FolderOpenIcon",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dk=k("FolderOutputIcon",[["path",{d:"M2 7.5V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2",key:"jm8npq"}],["path",{d:"M2 13h10",key:"pgb2dq"}],["path",{d:"m5 10-3 3 3 3",key:"1r8ie0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uk=k("FolderPlusIcon",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pk=k("FolderRootIcon",[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z",key:"1fr9dc"}],["circle",{cx:"12",cy:"13",r:"2",key:"1c1ljs"}],["path",{d:"M12 15v5",key:"11xva1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hk=k("FolderSearch2Icon",[["circle",{cx:"11.5",cy:"12.5",r:"2.5",key:"1ea5ju"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}],["path",{d:"M13.3 14.3 15 16",key:"1y4v1n"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fk=k("FolderSearchIcon",[["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["path",{d:"M10.7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v4.1",key:"1bw5m7"}],["path",{d:"m21 21-1.5-1.5",key:"3sg1j"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mk=k("FolderSymlinkIcon",[["path",{d:"M2 9V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2",key:"1or2t8"}],["path",{d:"m8 16 3-3-3-3",key:"rlqrt1"}],["path",{d:"M2 16v-1a2 2 0 0 1 2-2h6",key:"pgw8ln"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vk=k("FolderSyncIcon",[["path",{d:"M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v1",key:"1rkwto"}],["path",{d:"M12 10v4h4",key:"1czhmt"}],["path",{d:"m12 14 1.5-1.5c.9-.9 2.2-1.5 3.5-1.5s2.6.6 3.5 1.5c.4.4.8 1 1 1.5",key:"25wejs"}],["path",{d:"M22 22v-4h-4",key:"1ewp4q"}],["path",{d:"m22 18-1.5 1.5c-.9.9-2.1 1.5-3.5 1.5s-2.6-.6-3.5-1.5c-.4-.4-.8-1-1-1.5",key:"vlp1j8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yk=k("FolderTreeIcon",[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _k=k("FolderUpIcon",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}],["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"m9 13 3-3 3 3",key:"1pxg3c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gk=k("FolderXIcon",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}],["path",{d:"m9.5 10.5 5 5",key:"ra9qjz"}],["path",{d:"m14.5 10.5-5 5",key:"l2rkpq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kk=k("FolderIcon",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bk=k("FoldersIcon",[["path",{d:"M20 17a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3.9a2 2 0 0 1-1.69-.9l-.81-1.2a2 2 0 0 0-1.67-.9H8a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2Z",key:"4u7rpt"}],["path",{d:"M2 8v11a2 2 0 0 0 2 2h14",key:"1eicx1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wk=k("FootprintsIcon",[["path",{d:"M4 16v-2.38C4 11.5 2.97 10.5 3 8c.03-2.72 1.49-6 4.5-6C9.37 2 10 3.8 10 5.5c0 3.11-2 5.66-2 8.68V16a2 2 0 1 1-4 0Z",key:"1dudjm"}],["path",{d:"M20 20v-2.38c0-2.12 1.03-3.12 1-5.62-.03-2.72-1.49-6-4.5-6C14.63 6 14 7.8 14 9.5c0 3.11 2 5.66 2 8.68V20a2 2 0 1 0 4 0Z",key:"l2t8xc"}],["path",{d:"M16 17h4",key:"1dejxt"}],["path",{d:"M4 13h4",key:"1bwh8b"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xk=k("ForkliftIcon",[["path",{d:"M12 12H5a2 2 0 0 0-2 2v5",key:"7zsz91"}],["circle",{cx:"13",cy:"19",r:"2",key:"wjnkru"}],["circle",{cx:"5",cy:"19",r:"2",key:"v8kfzx"}],["path",{d:"M8 19h3m5-17v17h6M6 12V7c0-1.1.9-2 2-2h3l5 5",key:"13bk1p"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mk=k("FormInputIcon",[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2",key:"9lu3g6"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M17 12h.01",key:"1m0b6t"}],["path",{d:"M7 12h.01",key:"eqddd0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ck=k("ForwardIcon",[["polyline",{points:"15 17 20 12 15 7",key:"1w3sku"}],["path",{d:"M4 18v-2a4 4 0 0 1 4-4h12",key:"jmiej9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sk=k("FrameIcon",[["line",{x1:"22",x2:"2",y1:"6",y2:"6",key:"15w7dq"}],["line",{x1:"22",x2:"2",y1:"18",y2:"18",key:"1ip48p"}],["line",{x1:"6",x2:"6",y1:"2",y2:"22",key:"a2lnyx"}],["line",{x1:"18",x2:"18",y1:"2",y2:"22",key:"8vb6jd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ik=k("FramerIcon",[["path",{d:"M5 16V9h14V2H5l14 14h-7m-7 0 7 7v-7m-7 0h7",key:"1a2nng"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lk=k("FrownIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M16 16s-1.5-2-4-2-4 2-4 2",key:"epbg0q"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $k=k("FuelIcon",[["line",{x1:"3",x2:"15",y1:"22",y2:"22",key:"xegly4"}],["line",{x1:"4",x2:"14",y1:"9",y2:"9",key:"xcnuvu"}],["path",{d:"M14 22V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v18",key:"16j0yd"}],["path",{d:"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 2 2h0a2 2 0 0 0 2-2V9.83a2 2 0 0 0-.59-1.42L18 5",key:"8ur5zv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ak=k("FullscreenIcon",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["rect",{width:"10",height:"8",x:"7",y:"8",rx:"1",key:"vys8me"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ek=k("FunctionSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3",key:"m1af9g"}],["path",{d:"M9 11.2h5.7",key:"3zgcl2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tk=k("GalleryHorizontalEndIcon",[["path",{d:"M2 7v10",key:"a2pl2d"}],["path",{d:"M6 5v14",key:"1kq3d7"}],["rect",{width:"12",height:"18",x:"10",y:"3",rx:"2",key:"13i7bc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pk=k("GalleryHorizontalIcon",[["path",{d:"M2 3v18",key:"pzttux"}],["rect",{width:"12",height:"18",x:"6",y:"3",rx:"2",key:"btr8bg"}],["path",{d:"M22 3v18",key:"6jf3v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dk=k("GalleryThumbnailsIcon",[["rect",{width:"18",height:"14",x:"3",y:"3",rx:"2",key:"74y24f"}],["path",{d:"M4 21h1",key:"16zlid"}],["path",{d:"M9 21h1",key:"15o7lz"}],["path",{d:"M14 21h1",key:"v9vybs"}],["path",{d:"M19 21h1",key:"edywat"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rk=k("GalleryVerticalEndIcon",[["path",{d:"M7 2h10",key:"nczekb"}],["path",{d:"M5 6h14",key:"u2x4p"}],["rect",{width:"18",height:"12",x:"3",y:"10",rx:"2",key:"l0tzu3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ok=k("GalleryVerticalIcon",[["path",{d:"M3 2h18",key:"15qxfx"}],["rect",{width:"18",height:"12",x:"3",y:"6",rx:"2",key:"1439r6"}],["path",{d:"M3 22h18",key:"8prr45"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vk=k("Gamepad2Icon",[["line",{x1:"6",x2:"10",y1:"11",y2:"11",key:"1gktln"}],["line",{x1:"8",x2:"8",y1:"9",y2:"13",key:"qnk9ow"}],["line",{x1:"15",x2:"15.01",y1:"12",y2:"12",key:"krot7o"}],["line",{x1:"18",x2:"18.01",y1:"10",y2:"10",key:"1lcuu1"}],["path",{d:"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z",key:"mfqc10"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Uk=k("GamepadIcon",[["line",{x1:"6",x2:"10",y1:"12",y2:"12",key:"161bw2"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"15",x2:"15.01",y1:"13",y2:"13",key:"dqpgro"}],["line",{x1:"18",x2:"18.01",y1:"11",y2:"11",key:"meh2c"}],["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2",key:"9lu3g6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hi=k("GanttChartSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 8h7",key:"kbo1nt"}],["path",{d:"M8 12h6",key:"ikassy"}],["path",{d:"M11 16h5",key:"oq65wt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fk=k("GanttChartIcon",[["path",{d:"M8 6h10",key:"9lnwnk"}],["path",{d:"M6 12h9",key:"1g9pqf"}],["path",{d:"M11 18h7",key:"c8dzvl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jk=k("GaugeCircleIcon",[["path",{d:"M15.6 2.7a10 10 0 1 0 5.7 5.7",key:"1e0p6d"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M13.4 10.6 19 5",key:"1kr7tw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hk=k("GaugeIcon",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nk=k("GavelIcon",[["path",{d:"m14.5 12.5-8 8a2.119 2.119 0 1 1-3-3l8-8",key:"15492f"}],["path",{d:"m16 16 6-6",key:"vzrcl6"}],["path",{d:"m8 8 6-6",key:"18bi4p"}],["path",{d:"m9 7 8 8",key:"5jnvq1"}],["path",{d:"m21 11-8-8",key:"z4y7zo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zk=k("GemIcon",[["path",{d:"M6 3h12l4 6-10 13L2 9Z",key:"1pcd5k"}],["path",{d:"M11 3 8 9l4 13 4-13-3-6",key:"1fcu3u"}],["path",{d:"M2 9h20",key:"16fsjt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bk=k("GhostIcon",[["path",{d:"M9 10h.01",key:"qbtxuw"}],["path",{d:"M15 10h.01",key:"1qmjsl"}],["path",{d:"M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z",key:"uwwb07"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qk=k("GiftIcon",[["rect",{x:"3",y:"8",width:"18",height:"4",rx:"1",key:"bkv52"}],["path",{d:"M12 8v13",key:"1c76mn"}],["path",{d:"M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7",key:"6wjy6b"}],["path",{d:"M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5",key:"1ihvrl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wk=k("GitBranchPlusIcon",[["path",{d:"M6 3v12",key:"qpgusn"}],["path",{d:"M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6z",key:"1d02ji"}],["path",{d:"M6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6z",key:"chk6ph"}],["path",{d:"M15 6a9 9 0 0 0-9 9",key:"or332x"}],["path",{d:"M18 15v6",key:"9wciyi"}],["path",{d:"M21 18h-6",key:"139f0c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gk=k("GitBranchIcon",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ni=k("GitCommitHorizontalIcon",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12",key:"1dyftd"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12",key:"oup4p8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zk=k("GitCommitVerticalIcon",[["path",{d:"M12 3v6",key:"1holv5"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"M12 15v6",key:"a9ows0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kk=k("GitCompareArrowsIcon",[["circle",{cx:"5",cy:"6",r:"3",key:"1qnov2"}],["path",{d:"M12 6h5a2 2 0 0 1 2 2v7",key:"1yj91y"}],["path",{d:"m15 9-3-3 3-3",key:"1lwv8l"}],["circle",{cx:"19",cy:"18",r:"3",key:"1qljk2"}],["path",{d:"M12 18H7a2 2 0 0 1-2-2V9",key:"16sdep"}],["path",{d:"m9 15 3 3-3 3",key:"1m3kbl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xk=k("GitCompareIcon",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["path",{d:"M11 18H8a2 2 0 0 1-2-2V9",key:"19pyzm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yk=k("GitForkIcon",[["circle",{cx:"12",cy:"18",r:"3",key:"1mpf1b"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["path",{d:"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9",key:"1uq4wg"}],["path",{d:"M12 12v3",key:"158kv8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qk=k("GitGraphIcon",[["circle",{cx:"5",cy:"6",r:"3",key:"1qnov2"}],["path",{d:"M5 9v6",key:"158jrl"}],["circle",{cx:"5",cy:"18",r:"3",key:"104gr9"}],["path",{d:"M12 3v18",key:"108xh3"}],["circle",{cx:"19",cy:"6",r:"3",key:"108a5v"}],["path",{d:"M16 15.7A9 9 0 0 0 19 9",key:"1e3vqb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jk=k("GitMergeIcon",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const eb=k("GitPullRequestArrowIcon",[["circle",{cx:"5",cy:"6",r:"3",key:"1qnov2"}],["path",{d:"M5 9v12",key:"ih889a"}],["circle",{cx:"19",cy:"18",r:"3",key:"1qljk2"}],["path",{d:"m15 9-3-3 3-3",key:"1lwv8l"}],["path",{d:"M12 6h5a2 2 0 0 1 2 2v7",key:"1yj91y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tb=k("GitPullRequestClosedIcon",[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 9v12",key:"1sc30k"}],["path",{d:"m21 3-6 6",key:"16nqsk"}],["path",{d:"m21 9-6-6",key:"9j17rh"}],["path",{d:"M18 11.5V15",key:"65xf6f"}],["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ab=k("GitPullRequestCreateArrowIcon",[["circle",{cx:"5",cy:"6",r:"3",key:"1qnov2"}],["path",{d:"M5 9v12",key:"ih889a"}],["path",{d:"m15 9-3-3 3-3",key:"1lwv8l"}],["path",{d:"M12 6h5a2 2 0 0 1 2 2v3",key:"1rbwk6"}],["path",{d:"M19 15v6",key:"10aioa"}],["path",{d:"M22 18h-6",key:"1d5gi5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nb=k("GitPullRequestCreateIcon",[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 9v12",key:"1sc30k"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v3",key:"1jb6z3"}],["path",{d:"M18 15v6",key:"9wciyi"}],["path",{d:"M21 18h-6",key:"139f0c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sb=k("GitPullRequestDraftIcon",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M18 6V5",key:"1oao2s"}],["path",{d:"M18 11v-1",key:"11c8tz"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21",key:"rroup"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ob=k("GitPullRequestIcon",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21",key:"rroup"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rb=k("GithubIcon",[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ib=k("GitlabIcon",[["path",{d:"m22 13.29-3.33-10a.42.42 0 0 0-.14-.18.38.38 0 0 0-.22-.11.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18l-2.26 6.67H8.32L6.1 3.26a.42.42 0 0 0-.1-.18.38.38 0 0 0-.26-.08.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18L2 13.29a.74.74 0 0 0 .27.83L12 21l9.69-6.88a.71.71 0 0 0 .31-.83Z",key:"148pdi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lb=k("GlassWaterIcon",[["path",{d:"M15.2 22H8.8a2 2 0 0 1-2-1.79L5 3h14l-1.81 17.21A2 2 0 0 1 15.2 22Z",key:"48rfw3"}],["path",{d:"M6 12a5 5 0 0 1 6 0 5 5 0 0 0 6 0",key:"mjntcy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cb=k("GlassesIcon",[["circle",{cx:"6",cy:"15",r:"4",key:"vux9w4"}],["circle",{cx:"18",cy:"15",r:"4",key:"18o8ve"}],["path",{d:"M14 15a2 2 0 0 0-2-2 2 2 0 0 0-2 2",key:"1ag4bs"}],["path",{d:"M2.5 13 5 7c.7-1.3 1.4-2 3-2",key:"1hm1gs"}],["path",{d:"M21.5 13 19 7c-.7-1.3-1.5-2-3-2",key:"1r31ai"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const db=k("Globe2Icon",[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3v0a2 2 0 0 1 2 2v0c0 1.1.9 2 2 2v0a2 2 0 0 0 2-2v0c0-1.1.9-2 2-2h3.17",key:"1fi5u6"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2v0a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"xsiumc"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ub=k("GlobeIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pb=k("GoalIcon",[["path",{d:"M12 13V2l8 4-8 4",key:"5wlwwj"}],["path",{d:"M20.55 10.23A9 9 0 1 1 8 4.94",key:"5988i3"}],["path",{d:"M8 10a5 5 0 1 0 8.9 2.02",key:"1hq7ot"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hb=k("GrabIcon",[["path",{d:"M18 11.5V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4",key:"n5nng"}],["path",{d:"M14 10V8a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2",key:"185i9d"}],["path",{d:"M10 9.9V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v5",key:"11pz95"}],["path",{d:"M6 14v0a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0",key:"16yk7l"}],["path",{d:"M18 11v0a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-4a8 8 0 0 1-8-8 2 2 0 1 1 4 0",key:"nzvb1c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fb=k("GraduationCapIcon",[["path",{d:"M22 10v6M2 10l10-5 10 5-10 5z",key:"1ef52a"}],["path",{d:"M6 12v5c3 3 9 3 12 0v-5",key:"1f75yj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mb=k("GrapeIcon",[["path",{d:"M22 5V2l-5.89 5.89",key:"1eenpo"}],["circle",{cx:"16.6",cy:"15.89",r:"3",key:"xjtalx"}],["circle",{cx:"8.11",cy:"7.4",r:"3",key:"u2fv6i"}],["circle",{cx:"12.35",cy:"11.65",r:"3",key:"i6i8g7"}],["circle",{cx:"13.91",cy:"5.85",r:"3",key:"6ye0dv"}],["circle",{cx:"18.15",cy:"10.09",r:"3",key:"snx9no"}],["circle",{cx:"6.56",cy:"13.2",r:"3",key:"17x4xg"}],["circle",{cx:"10.8",cy:"17.44",r:"3",key:"1hogw9"}],["circle",{cx:"5",cy:"19",r:"3",key:"1sn6vo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zi=k("Grid2x2Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 12h18",key:"1i2n21"}],["path",{d:"M12 3v18",key:"108xh3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yo=k("Grid3x3Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vb=k("GripHorizontalIcon",[["circle",{cx:"12",cy:"9",r:"1",key:"124mty"}],["circle",{cx:"19",cy:"9",r:"1",key:"1ruzo2"}],["circle",{cx:"5",cy:"9",r:"1",key:"1a8b28"}],["circle",{cx:"12",cy:"15",r:"1",key:"1e56xg"}],["circle",{cx:"19",cy:"15",r:"1",key:"1a92ep"}],["circle",{cx:"5",cy:"15",r:"1",key:"5r1jwy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yb=k("GripVerticalIcon",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _b=k("GripIcon",[["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"19",cy:"5",r:"1",key:"w8mnmm"}],["circle",{cx:"5",cy:"5",r:"1",key:"lttvr7"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}],["circle",{cx:"19",cy:"19",r:"1",key:"shf9b7"}],["circle",{cx:"5",cy:"19",r:"1",key:"bfqh0e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gb=k("GroupIcon",[["path",{d:"M3 7V5c0-1.1.9-2 2-2h2",key:"adw53z"}],["path",{d:"M17 3h2c1.1 0 2 .9 2 2v2",key:"an4l38"}],["path",{d:"M21 17v2c0 1.1-.9 2-2 2h-2",key:"144t0e"}],["path",{d:"M7 21H5c-1.1 0-2-.9-2-2v-2",key:"rtnfgi"}],["rect",{width:"7",height:"5",x:"7",y:"7",rx:"1",key:"1eyiv7"}],["rect",{width:"7",height:"5",x:"10",y:"12",rx:"1",key:"1qlmkx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kb=k("GuitarIcon",[["path",{d:"m20 7 1.7-1.7a1 1 0 0 0 0-1.4l-1.6-1.6a1 1 0 0 0-1.4 0L17 4v3Z",key:"15ixgv"}],["path",{d:"m17 7-5.1 5.1",key:"l9guh7"}],["circle",{cx:"11.5",cy:"12.5",r:".5",key:"1evg0a"}],["path",{d:"M6 12a2 2 0 0 0 1.8-1.2l.4-.9C8.7 8.8 9.8 8 11 8c2.8 0 5 2.2 5 5 0 1.2-.8 2.3-1.9 2.8l-.9.4A2 2 0 0 0 12 18a4 4 0 0 1-4 4c-3.3 0-6-2.7-6-6a4 4 0 0 1 4-4",key:"x9fguj"}],["path",{d:"m6 16 2 2",key:"16qmzd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bb=k("HammerIcon",[["path",{d:"m15 12-8.5 8.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L12 9",key:"1afvon"}],["path",{d:"M17.64 15 22 10.64",key:"zsji6s"}],["path",{d:"m20.91 11.7-1.25-1.25c-.6-.6-.93-1.4-.93-2.25v-.86L16.01 4.6a5.56 5.56 0 0 0-3.94-1.64H9l.92.82A6.18 6.18 0 0 1 12 8.4v1.56l2 2h2.47l2.26 1.91",key:"lehyy1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wb=k("HandMetalIcon",[["path",{d:"M18 12.5V10a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4",key:"7eki13"}],["path",{d:"M14 11V9a2 2 0 1 0-4 0v2",key:"94qvcw"}],["path",{d:"M10 10.5V5a2 2 0 1 0-4 0v9",key:"m1ah89"}],["path",{d:"m7 15-1.76-1.76a2 2 0 0 0-2.83 2.82l3.6 3.6C7.5 21.14 9.2 22 12 22h2a8 8 0 0 0 8-8V7a2 2 0 1 0-4 0v5",key:"t1skq1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xb=k("HandIcon",[["path",{d:"M18 11V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0",key:"aigmz7"}],["path",{d:"M14 10V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2",key:"1n6bmn"}],["path",{d:"M10 10.5V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v8",key:"a9iiix"}],["path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15",key:"1s1gnw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mb=k("HardDriveDownloadIcon",[["path",{d:"M12 2v8",key:"1q4o3n"}],["path",{d:"m16 6-4 4-4-4",key:"6wukr"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",key:"w68u3i"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"M10 18h.01",key:"h775k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cb=k("HardDriveUploadIcon",[["path",{d:"m16 6-4-4-4 4",key:"13yo43"}],["path",{d:"M12 2v8",key:"1q4o3n"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",key:"w68u3i"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"M10 18h.01",key:"h775k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sb=k("HardDriveIcon",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ib=k("HardHatIcon",[["path",{d:"M2 18a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v2z",key:"1dej2m"}],["path",{d:"M10 10V5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v5",key:"1p9q5i"}],["path",{d:"M4 15v-3a6 6 0 0 1 6-6h0",key:"1uc279"}],["path",{d:"M14 6h0a6 6 0 0 1 6 6v3",key:"1j9mnm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lb=k("HashIcon",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $b=k("HazeIcon",[["path",{d:"m5.2 6.2 1.4 1.4",key:"17imol"}],["path",{d:"M2 13h2",key:"13gyu8"}],["path",{d:"M20 13h2",key:"16rner"}],["path",{d:"m17.4 7.6 1.4-1.4",key:"t4xlah"}],["path",{d:"M22 17H2",key:"1gtaj3"}],["path",{d:"M22 21H2",key:"1gy6en"}],["path",{d:"M16 13a4 4 0 0 0-8 0",key:"1dyczq"}],["path",{d:"M12 5V2.5",key:"1vytko"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ab=k("HdmiPortIcon",[["path",{d:"M22 9a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h1l2 2h12l2-2h1a1 1 0 0 0 1-1Z",key:"2128wb"}],["path",{d:"M7.5 12h9",key:"1t0ckc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Eb=k("Heading1Icon",[["path",{d:"M4 12h8",key:"17cfdx"}],["path",{d:"M4 18V6",key:"1rz3zl"}],["path",{d:"M12 18V6",key:"zqpxq5"}],["path",{d:"m17 12 3-2v8",key:"1hhhft"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tb=k("Heading2Icon",[["path",{d:"M4 12h8",key:"17cfdx"}],["path",{d:"M4 18V6",key:"1rz3zl"}],["path",{d:"M12 18V6",key:"zqpxq5"}],["path",{d:"M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1",key:"9jr5yi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pb=k("Heading3Icon",[["path",{d:"M4 12h8",key:"17cfdx"}],["path",{d:"M4 18V6",key:"1rz3zl"}],["path",{d:"M12 18V6",key:"zqpxq5"}],["path",{d:"M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2",key:"68ncm8"}],["path",{d:"M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2",key:"1ejuhz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Db=k("Heading4Icon",[["path",{d:"M4 12h8",key:"17cfdx"}],["path",{d:"M4 18V6",key:"1rz3zl"}],["path",{d:"M12 18V6",key:"zqpxq5"}],["path",{d:"M17 10v4h4",key:"13sv97"}],["path",{d:"M21 10v8",key:"1kdml4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rb=k("Heading5Icon",[["path",{d:"M4 12h8",key:"17cfdx"}],["path",{d:"M4 18V6",key:"1rz3zl"}],["path",{d:"M12 18V6",key:"zqpxq5"}],["path",{d:"M17 13v-3h4",key:"1nvgqp"}],["path",{d:"M17 17.7c.4.2.8.3 1.3.3 1.5 0 2.7-1.1 2.7-2.5S19.8 13 18.3 13H17",key:"2nebdn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ob=k("Heading6Icon",[["path",{d:"M4 12h8",key:"17cfdx"}],["path",{d:"M4 18V6",key:"1rz3zl"}],["path",{d:"M12 18V6",key:"zqpxq5"}],["circle",{cx:"19",cy:"16",r:"2",key:"15mx69"}],["path",{d:"M20 10c-2 2-3 3.5-3 6",key:"f35dl0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vb=k("HeadingIcon",[["path",{d:"M6 12h12",key:"8npq4p"}],["path",{d:"M6 20V4",key:"1w1bmo"}],["path",{d:"M18 20V4",key:"o2hl4u"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ub=k("HeadphonesIcon",[["path",{d:"M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3",key:"1xhozi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fb=k("HeartCrackIcon",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}],["path",{d:"m12 13-1-1 2-2-3-3 2-2",key:"xjdxli"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jb=k("HeartHandshakeIcon",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}],["path",{d:"M12 5 9.04 7.96a2.17 2.17 0 0 0 0 3.08v0c.82.82 2.13.85 3 .07l2.07-1.9a2.82 2.82 0 0 1 3.79 0l2.96 2.66",key:"12sd6o"}],["path",{d:"m18 15-2-2",key:"60u0ii"}],["path",{d:"m15 18-2-2",key:"6p76be"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hb=k("HeartOffIcon",[["line",{x1:"2",y1:"2",x2:"22",y2:"22",key:"1w4vcy"}],["path",{d:"M16.5 16.5 12 21l-7-7c-1.5-1.45-3-3.2-3-5.5a5.5 5.5 0 0 1 2.14-4.35",key:"3mpagl"}],["path",{d:"M8.76 3.1c1.15.22 2.13.78 3.24 1.9 1.5-1.5 2.74-2 4.5-2A5.5 5.5 0 0 1 22 8.5c0 2.12-1.3 3.78-2.67 5.17",key:"1gh3v3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nb=k("HeartPulseIcon",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}],["path",{d:"M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27",key:"1uw2ng"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zb=k("HeartIcon",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bb=k("HelpCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qb=k("HelpingHandIcon",[["path",{d:"m3 15 5.12-5.12A3 3 0 0 1 10.24 9H13a2 2 0 1 1 0 4h-2.5m4-.68 4.17-4.89a1.88 1.88 0 0 1 2.92 2.36l-4.2 5.94A3 3 0 0 1 14.96 17H9.83a2 2 0 0 0-1.42.59L7 19",key:"nitrv7"}],["path",{d:"m2 14 6 6",key:"g6j1uo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wb=k("HexagonIcon",[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",key:"yt0hxn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gb=k("HighlighterIcon",[["path",{d:"m9 11-6 6v3h9l3-3",key:"1a3l36"}],["path",{d:"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4",key:"14a9rk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zb=k("HistoryIcon",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kb=k("HomeIcon",[["path",{d:"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"y5dka4"}],["polyline",{points:"9 22 9 12 15 12 15 22",key:"e2us08"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xb=k("HopOffIcon",[["path",{d:"M17.5 5.5C19 7 20.5 9 21 11c-1.323.265-2.646.39-4.118.226",key:"10j95a"}],["path",{d:"M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5",key:"1mqyjd"}],["path",{d:"M17.5 17.5c-2.5 0-4 0-6-1",key:"11elt5"}],["path",{d:"M20 11.5c1 1.5 2 3.5 2 4.5",key:"13ezvz"}],["path",{d:"M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5",key:"1ufrz1"}],["path",{d:"M22 22c-2 0-3.5-.5-5.5-1.5",key:"1n8vbj"}],["path",{d:"M4.783 4.782C1.073 8.492 1 14.5 5 18c1-1 2-4.5 1.5-6.5 1.5 1 4 1 5.5.5M8.227 2.57C11.578 1.335 15.453 2.089 18 5c-.88.88-3.7 1.761-5.726 1.618",key:"1h85u8"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yb=k("HopIcon",[["path",{d:"M17.5 5.5C19 7 20.5 9 21 11c-2.5.5-5 .5-8.5-1",key:"l0z2za"}],["path",{d:"M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5",key:"1mqyjd"}],["path",{d:"M16.5 11.5c1 2 1 3.5 1 6-2.5 0-4 0-6-1",key:"10xoad"}],["path",{d:"M20 11.5c1 1.5 2 3.5 2 4.5-1.5.5-3 0-4.5-.5",key:"1a4gpx"}],["path",{d:"M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5",key:"1ufrz1"}],["path",{d:"M20.5 16.5c1 2 1.5 3.5 1.5 5.5-2 0-3.5-.5-5.5-1.5",key:"1ok5d2"}],["path",{d:"M4.783 4.782C8.493 1.072 14.5 1 18 5c-1 1-4.5 2-6.5 1.5 1 1.5 1 4 .5 5.5-1.5.5-4 .5-5.5-.5C7 13.5 6 17 5 18c-4-3.5-3.927-9.508-.217-13.218Z",key:"8hlroy"}],["path",{d:"M4.5 4.5 3 3c-.184-.185-.184-.816 0-1",key:"q3aj97"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qb=k("HotelIcon",[["path",{d:"M18 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2Z",key:"p9z69c"}],["path",{d:"m9 16 .348-.24c1.465-1.013 3.84-1.013 5.304 0L15 16",key:"1bvcvh"}],["path",{d:"M8 7h.01",key:"1vti4s"}],["path",{d:"M16 7h.01",key:"1kdx03"}],["path",{d:"M12 7h.01",key:"1ivr5q"}],["path",{d:"M12 11h.01",key:"z322tv"}],["path",{d:"M16 11h.01",key:"xkw8gn"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M10 22v-6.5m4 0V22",key:"16gs4s"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jb=k("HourglassIcon",[["path",{d:"M5 22h14",key:"ehvnwv"}],["path",{d:"M5 2h14",key:"pdyrp9"}],["path",{d:"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22",key:"1d314k"}],["path",{d:"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2",key:"1vvvr6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ew=k("IceCream2Icon",[["path",{d:"M12 17c5 0 8-2.69 8-6H4c0 3.31 3 6 8 6Zm-4 4h8m-4-3v3M5.14 11a3.5 3.5 0 1 1 6.71 0",key:"g86ewz"}],["path",{d:"M12.14 11a3.5 3.5 0 1 1 6.71 0",key:"4k3m1s"}],["path",{d:"M15.5 6.5a3.5 3.5 0 1 0-7 0",key:"zmuahr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tw=k("IceCreamIcon",[["path",{d:"m7 11 4.08 10.35a1 1 0 0 0 1.84 0L17 11",key:"1v6356"}],["path",{d:"M17 7A5 5 0 0 0 7 7",key:"151p3v"}],["path",{d:"M17 7a2 2 0 0 1 0 4H7a2 2 0 0 1 0-4",key:"1sdaij"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const aw=k("ImageDownIcon",[["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10.8",key:"sqts6f"}],["path",{d:"m21 15-3.1-3.1a2 2 0 0 0-2.814.014L6 21",key:"1h47z9"}],["path",{d:"m14 19.5 3 3v-6",key:"1x9jmo"}],["path",{d:"m17 22.5 3-3",key:"xzuz0n"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nw=k("ImageMinusIcon",[["path",{d:"M21 9v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7",key:"m87ecr"}],["line",{x1:"16",x2:"22",y1:"5",y2:"5",key:"ez7e4s"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sw=k("ImageOffIcon",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M10.41 10.41a2 2 0 1 1-2.83-2.83",key:"1bzlo9"}],["line",{x1:"13.5",x2:"6",y1:"13.5",y2:"21",key:"1q0aeu"}],["line",{x1:"18",x2:"21",y1:"12",y2:"15",key:"5mozeu"}],["path",{d:"M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59",key:"mmje98"}],["path",{d:"M21 15V5a2 2 0 0 0-2-2H9",key:"43el77"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ow=k("ImagePlusIcon",[["path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7",key:"31hg93"}],["line",{x1:"16",x2:"22",y1:"5",y2:"5",key:"ez7e4s"}],["line",{x1:"19",x2:"19",y1:"2",y2:"8",key:"1gkr8c"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rw=k("ImageIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iw=k("ImportIcon",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m8 11 4 4 4-4",key:"1dohi6"}],["path",{d:"M8 5H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-4",key:"1ywtjm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lw=k("InboxIcon",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cw=k("IndentIcon",[["polyline",{points:"3 8 7 12 3 16",key:"f3rxhf"}],["line",{x1:"21",x2:"11",y1:"12",y2:"12",key:"1fxxak"}],["line",{x1:"21",x2:"11",y1:"6",y2:"6",key:"asgu94"}],["line",{x1:"21",x2:"11",y1:"18",y2:"18",key:"13dsj7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dw=k("IndianRupeeIcon",[["path",{d:"M6 3h12",key:"ggurg9"}],["path",{d:"M6 8h12",key:"6g4wlu"}],["path",{d:"m6 13 8.5 8",key:"u1kupk"}],["path",{d:"M6 13h3",key:"wdp6ag"}],["path",{d:"M9 13c6.667 0 6.667-10 0-10",key:"1nkvk2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uw=k("InfinityIcon",[["path",{d:"M12 12c-2-2.67-4-4-6-4a4 4 0 1 0 0 8c2 0 4-1.33 6-4Zm0 0c2 2.67 4 4 6 4a4 4 0 0 0 0-8c-2 0-4 1.33-6 4Z",key:"1z0uae"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pw=k("InfoIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hw=k("InspectionPanelIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M7 7h.01",key:"7u93v4"}],["path",{d:"M17 7h.01",key:"14a9sn"}],["path",{d:"M7 17h.01",key:"19xn7k"}],["path",{d:"M17 17h.01",key:"1sd3ek"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fw=k("InstagramIcon",[["rect",{width:"20",height:"20",x:"2",y:"2",rx:"5",ry:"5",key:"2e1cvw"}],["path",{d:"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z",key:"9exkf1"}],["line",{x1:"17.5",x2:"17.51",y1:"6.5",y2:"6.5",key:"r4j83e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mw=k("ItalicIcon",[["line",{x1:"19",x2:"10",y1:"4",y2:"4",key:"15jd3p"}],["line",{x1:"14",x2:"5",y1:"20",y2:"20",key:"bu0au3"}],["line",{x1:"15",x2:"9",y1:"4",y2:"20",key:"uljnxc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vw=k("IterationCcwIcon",[["path",{d:"M20 10c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8h8",key:"4znkd0"}],["polyline",{points:"16 14 20 18 16 22",key:"11njsm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yw=k("IterationCwIcon",[["path",{d:"M4 10c0-4.4 3.6-8 8-8s8 3.6 8 8-3.6 8-8 8H4",key:"tuf4su"}],["polyline",{points:"8 22 4 18 8 14",key:"evkj9s"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _w=k("JapaneseYenIcon",[["path",{d:"M12 9.5V21m0-11.5L6 3m6 6.5L18 3",key:"2ej80x"}],["path",{d:"M6 15h12",key:"1hwgt5"}],["path",{d:"M6 11h12",key:"wf4gp6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gw=k("JoystickIcon",[["path",{d:"M21 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2Z",key:"jg2n2t"}],["path",{d:"M6 15v-2",key:"gd6mvg"}],["path",{d:"M12 15V9",key:"8c7uyn"}],["circle",{cx:"12",cy:"6",r:"3",key:"1gm2ql"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bi=k("KanbanSquareDashedIcon",[["path",{d:"M8 7v7",key:"1x2jlm"}],["path",{d:"M12 7v4",key:"xawao1"}],["path",{d:"M16 7v9",key:"1hp2iy"}],["path",{d:"M5 3a2 2 0 0 0-2 2",key:"y57alp"}],["path",{d:"M9 3h1",key:"1yesri"}],["path",{d:"M14 3h1",key:"1ec4yj"}],["path",{d:"M19 3a2 2 0 0 1 2 2",key:"18rm91"}],["path",{d:"M21 9v1",key:"mxsmne"}],["path",{d:"M21 14v1",key:"169vum"}],["path",{d:"M21 19a2 2 0 0 1-2 2",key:"1j7049"}],["path",{d:"M14 21h1",key:"v9vybs"}],["path",{d:"M9 21h1",key:"15o7lz"}],["path",{d:"M5 21a2 2 0 0 1-2-2",key:"sbafld"}],["path",{d:"M3 14v1",key:"vnatye"}],["path",{d:"M3 9v1",key:"1r0deq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qi=k("KanbanSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 7v7",key:"1x2jlm"}],["path",{d:"M12 7v4",key:"xawao1"}],["path",{d:"M16 7v9",key:"1hp2iy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kw=k("KanbanIcon",[["path",{d:"M6 5v11",key:"mdvv1e"}],["path",{d:"M12 5v6",key:"14ar3b"}],["path",{d:"M18 5v14",key:"7ji314"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bw=k("KeyRoundIcon",[["path",{d:"M2 18v3c0 .6.4 1 1 1h4v-3h3v-3h2l1.4-1.4a6.5 6.5 0 1 0-4-4Z",key:"167ctg"}],["circle",{cx:"16.5",cy:"7.5",r:".5",key:"1kog09"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ww=k("KeySquareIcon",[["path",{d:"M12.4 2.7c.9-.9 2.5-.9 3.4 0l5.5 5.5c.9.9.9 2.5 0 3.4l-3.7 3.7c-.9.9-2.5.9-3.4 0L8.7 9.8c-.9-.9-.9-2.5 0-3.4Z",key:"9li5bk"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M9.4 10.6 2 18v3c0 .6.4 1 1 1h4v-3h3v-3h2l1.4-1.4",key:"1ym3zm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xw=k("KeyIcon",[["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["path",{d:"m15.5 7.5 3 3L22 7l-3-3",key:"1rn1fs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mw=k("KeyboardMusicIcon",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"M6 8h4",key:"utf9t1"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M2 12h20",key:"9i4pu4"}],["path",{d:"M6 12v4",key:"dy92yo"}],["path",{d:"M10 12v4",key:"1fxnav"}],["path",{d:"M14 12v4",key:"1hft58"}],["path",{d:"M18 12v4",key:"tjjnbz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cw=k("KeyboardIcon",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",ry:"2",key:"15u882"}],["path",{d:"M6 8h.001",key:"1ej0i3"}],["path",{d:"M10 8h.001",key:"1x2st2"}],["path",{d:"M14 8h.001",key:"1vkmyp"}],["path",{d:"M18 8h.001",key:"kfsenl"}],["path",{d:"M8 12h.001",key:"1sjpby"}],["path",{d:"M12 12h.001",key:"al75ts"}],["path",{d:"M16 12h.001",key:"931bgk"}],["path",{d:"M7 16h10",key:"wp8him"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sw=k("LampCeilingIcon",[["path",{d:"M12 2v5",key:"nd4vlx"}],["path",{d:"M6 7h12l4 9H2l4-9Z",key:"123d64"}],["path",{d:"M9.17 16a3 3 0 1 0 5.66 0",key:"1061mw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Iw=k("LampDeskIcon",[["path",{d:"m14 5-3 3 2 7 8-8-7-2Z",key:"1b0msb"}],["path",{d:"m14 5-3 3-3-3 3-3 3 3Z",key:"1uemms"}],["path",{d:"M9.5 6.5 4 12l3 6",key:"1bx08v"}],["path",{d:"M3 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H3Z",key:"wap775"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lw=k("LampFloorIcon",[["path",{d:"M9 2h6l3 7H6l3-7Z",key:"wcx6mj"}],["path",{d:"M12 9v13",key:"3n1su1"}],["path",{d:"M9 22h6",key:"1rlq3v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $w=k("LampWallDownIcon",[["path",{d:"M11 13h6l3 7H8l3-7Z",key:"9n3qlo"}],["path",{d:"M14 13V8a2 2 0 0 0-2-2H8",key:"1hu4hb"}],["path",{d:"M4 9h2a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2H4v6Z",key:"s053bc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Aw=k("LampWallUpIcon",[["path",{d:"M11 4h6l3 7H8l3-7Z",key:"11x1ee"}],["path",{d:"M14 11v5a2 2 0 0 1-2 2H8",key:"eutp5o"}],["path",{d:"M4 15h2a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4v-6Z",key:"1iuthr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ew=k("LampIcon",[["path",{d:"M8 2h8l4 10H4L8 2Z",key:"9dma5w"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"M8 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H8Z",key:"mwf4oh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tw=k("LandPlotIcon",[["path",{d:"m12 8 6-3-6-3v10",key:"mvpnpy"}],["path",{d:"m8 11.99-5.5 3.14a1 1 0 0 0 0 1.74l8.5 4.86a2 2 0 0 0 2 0l8.5-4.86a1 1 0 0 0 0-1.74L16 12",key:"ek95tt"}],["path",{d:"m6.49 12.85 11.02 6.3",key:"1kt42w"}],["path",{d:"M17.51 12.85 6.5 19.15",key:"v55bdg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pw=k("LandmarkIcon",[["line",{x1:"3",x2:"21",y1:"22",y2:"22",key:"j8o0r"}],["line",{x1:"6",x2:"6",y1:"18",y2:"11",key:"10tf0k"}],["line",{x1:"10",x2:"10",y1:"18",y2:"11",key:"54lgf6"}],["line",{x1:"14",x2:"14",y1:"18",y2:"11",key:"380y"}],["line",{x1:"18",x2:"18",y1:"18",y2:"11",key:"1kevvc"}],["polygon",{points:"12 2 20 7 4 7",key:"jkujk7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dw=k("LanguagesIcon",[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rw=k("Laptop2Icon",[["rect",{width:"18",height:"12",x:"3",y:"4",rx:"2",ry:"2",key:"1qhy41"}],["line",{x1:"2",x2:"22",y1:"20",y2:"20",key:"ni3hll"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ow=k("LaptopIcon",[["path",{d:"M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16",key:"tarvll"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vw=k("LassoSelectIcon",[["path",{d:"M7 22a5 5 0 0 1-2-4",key:"umushi"}],["path",{d:"M7 16.93c.96.43 1.96.74 2.99.91",key:"ybbtv3"}],["path",{d:"M3.34 14A6.8 6.8 0 0 1 2 10c0-4.42 4.48-8 10-8s10 3.58 10 8a7.19 7.19 0 0 1-.33 2",key:"gt5e1w"}],["path",{d:"M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z",key:"bq3ynw"}],["path",{d:"M14.33 22h-.09a.35.35 0 0 1-.24-.32v-10a.34.34 0 0 1 .33-.34c.08 0 .15.03.21.08l7.34 6a.33.33 0 0 1-.21.59h-4.49l-2.57 3.85a.35.35 0 0 1-.28.14v0z",key:"1bawls"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Uw=k("LassoIcon",[["path",{d:"M7 22a5 5 0 0 1-2-4",key:"umushi"}],["path",{d:"M3.3 14A6.8 6.8 0 0 1 2 10c0-4.4 4.5-8 10-8s10 3.6 10 8-4.5 8-10 8a12 12 0 0 1-5-1",key:"146dds"}],["path",{d:"M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z",key:"bq3ynw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fw=k("LaughIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M18 13a6 6 0 0 1-6 5 6 6 0 0 1-6-5h12Z",key:"b2q4dd"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jw=k("Layers2Icon",[["path",{d:"m16.02 12 5.48 3.13a1 1 0 0 1 0 1.74L13 21.74a2 2 0 0 1-2 0l-8.5-4.87a1 1 0 0 1 0-1.74L7.98 12",key:"1cuww1"}],["path",{d:"M13 13.74a2 2 0 0 1-2 0L2.5 8.87a1 1 0 0 1 0-1.74L11 2.26a2 2 0 0 1 2 0l8.5 4.87a1 1 0 0 1 0 1.74Z",key:"pdlvxu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hw=k("Layers3Icon",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m6.08 9.5-3.5 1.6a1 1 0 0 0 0 1.81l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9a1 1 0 0 0 0-1.83l-3.5-1.59",key:"1e5n1m"}],["path",{d:"m6.08 14.5-3.5 1.6a1 1 0 0 0 0 1.81l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9a1 1 0 0 0 0-1.83l-3.5-1.59",key:"1iwflc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nw=k("LayersIcon",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65",key:"dd6zsq"}],["path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65",key:"ep9fru"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zw=k("LayoutDashboardIcon",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bw=k("LayoutGridIcon",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qw=k("LayoutListIcon",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}],["path",{d:"M14 4h7",key:"3xa0d5"}],["path",{d:"M14 9h7",key:"1icrd9"}],["path",{d:"M14 15h7",key:"1mj8o2"}],["path",{d:"M14 20h7",key:"11slyb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ww=k("LayoutPanelLeftIcon",[["rect",{width:"7",height:"18",x:"3",y:"3",rx:"1",key:"2obqm"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gw=k("LayoutPanelTopIcon",[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zw=k("LayoutTemplateIcon",[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"9",height:"7",x:"3",y:"14",rx:"1",key:"jqznyg"}],["rect",{width:"5",height:"7",x:"16",y:"14",rx:"1",key:"q5h2i8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kw=k("LeafIcon",[["path",{d:"M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z",key:"nnexq3"}],["path",{d:"M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12",key:"mt58a7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xw=k("LeafyGreenIcon",[["path",{d:"M2 22c1.25-.987 2.27-1.975 3.9-2.2a5.56 5.56 0 0 1 3.8 1.5 4 4 0 0 0 6.187-2.353 3.5 3.5 0 0 0 3.69-5.116A3.5 3.5 0 0 0 20.95 8 3.5 3.5 0 1 0 16 3.05a3.5 3.5 0 0 0-5.831 1.373 3.5 3.5 0 0 0-5.116 3.69 4 4 0 0 0-2.348 6.155C3.499 15.42 4.409 16.712 4.2 18.1 3.926 19.743 3.014 20.732 2 22",key:"1134nt"}],["path",{d:"M2 22 17 7",key:"1q7jp2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yw=k("LibraryBigIcon",[["rect",{width:"8",height:"18",x:"3",y:"3",rx:"1",key:"oynpb5"}],["path",{d:"M7 3v18",key:"bbkbws"}],["path",{d:"M20.4 18.9c.2.5-.1 1.1-.6 1.3l-1.9.7c-.5.2-1.1-.1-1.3-.6L11.1 5.1c-.2-.5.1-1.1.6-1.3l1.9-.7c.5-.2 1.1.1 1.3.6Z",key:"1qboyk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qw=k("LibrarySquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M7 7v10",key:"d5nglc"}],["path",{d:"M11 7v10",key:"pptsnr"}],["path",{d:"m15 7 2 10",key:"1m7qm5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jw=k("LibraryIcon",[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e4=k("LifeBuoyIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m4.93 4.93 4.24 4.24",key:"1ymg45"}],["path",{d:"m14.83 9.17 4.24-4.24",key:"1cb5xl"}],["path",{d:"m14.83 14.83 4.24 4.24",key:"q42g0n"}],["path",{d:"m9.17 14.83-4.24 4.24",key:"bqpfvv"}],["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t4=k("LigatureIcon",[["path",{d:"M8 20V8c0-2.2 1.8-4 4-4 1.5 0 2.8.8 3.5 2",key:"1rtphz"}],["path",{d:"M6 12h4",key:"a4o3ry"}],["path",{d:"M14 12h2v8",key:"c1fccl"}],["path",{d:"M6 20h4",key:"1i6q5t"}],["path",{d:"M14 20h4",key:"lzx1xo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const a4=k("LightbulbOffIcon",[["path",{d:"M16.8 11.2c.8-.9 1.2-2 1.2-3.2a6 6 0 0 0-9.3-5",key:"1fkcox"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M6.3 6.3a4.67 4.67 0 0 0 1.2 5.2c.7.7 1.3 1.5 1.5 2.5",key:"10m8kw"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n4=k("LightbulbIcon",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s4=k("LineChartIcon",[["path",{d:"M3 3v18h18",key:"1s2lah"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o4=k("Link2OffIcon",[["path",{d:"M9 17H7A5 5 0 0 1 7 7",key:"10o201"}],["path",{d:"M15 7h2a5 5 0 0 1 4 8",key:"1d3206"}],["line",{x1:"8",x2:"12",y1:"12",y2:"12",key:"rvw6j4"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r4=k("Link2Icon",[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i4=k("LinkIcon",[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l4=k("LinkedinIcon",[["path",{d:"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z",key:"c2jq9f"}],["rect",{width:"4",height:"12",x:"2",y:"9",key:"mk3on5"}],["circle",{cx:"4",cy:"4",r:"2",key:"bt5ra8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c4=k("ListChecksIcon",[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const d4=k("ListEndIcon",[["path",{d:"M16 12H3",key:"1a2rj7"}],["path",{d:"M16 6H3",key:"1wxfjs"}],["path",{d:"M10 18H3",key:"13769t"}],["path",{d:"M21 6v10a2 2 0 0 1-2 2h-5",key:"ilrcs8"}],["path",{d:"m16 16-2 2 2 2",key:"kkc6pm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u4=k("ListFilterIcon",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M7 12h10",key:"b7w52i"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const p4=k("ListMinusIcon",[["path",{d:"M11 12H3",key:"51ecnj"}],["path",{d:"M16 6H3",key:"1wxfjs"}],["path",{d:"M16 18H3",key:"12xzn7"}],["path",{d:"M21 12h-6",key:"bt1uis"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h4=k("ListMusicIcon",[["path",{d:"M21 15V6",key:"h1cx4g"}],["path",{d:"M18.5 18a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z",key:"8saifv"}],["path",{d:"M12 12H3",key:"18klou"}],["path",{d:"M16 6H3",key:"1wxfjs"}],["path",{d:"M12 18H3",key:"11ftsu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f4=k("ListOrderedIcon",[["line",{x1:"10",x2:"21",y1:"6",y2:"6",key:"76qw6h"}],["line",{x1:"10",x2:"21",y1:"12",y2:"12",key:"16nom4"}],["line",{x1:"10",x2:"21",y1:"18",y2:"18",key:"u3jurt"}],["path",{d:"M4 6h1v4",key:"cnovpq"}],["path",{d:"M4 10h2",key:"16xx2s"}],["path",{d:"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1",key:"m9a95d"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m4=k("ListPlusIcon",[["path",{d:"M11 12H3",key:"51ecnj"}],["path",{d:"M16 6H3",key:"1wxfjs"}],["path",{d:"M16 18H3",key:"12xzn7"}],["path",{d:"M18 9v6",key:"1twb98"}],["path",{d:"M21 12h-6",key:"bt1uis"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const v4=k("ListRestartIcon",[["path",{d:"M21 6H3",key:"1jwq7v"}],["path",{d:"M7 12H3",key:"13ou7f"}],["path",{d:"M7 18H3",key:"1sijw9"}],["path",{d:"M12 18a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L11 14",key:"qth677"}],["path",{d:"M11 10v4h4",key:"172dkj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y4=k("ListStartIcon",[["path",{d:"M16 12H3",key:"1a2rj7"}],["path",{d:"M16 18H3",key:"12xzn7"}],["path",{d:"M10 6H3",key:"lf8lx7"}],["path",{d:"M21 18V8a2 2 0 0 0-2-2h-5",key:"1hghli"}],["path",{d:"m16 8-2-2 2-2",key:"160uvd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _4=k("ListTodoIcon",[["rect",{x:"3",y:"5",width:"6",height:"6",rx:"1",key:"1defrl"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const g4=k("ListTreeIcon",[["path",{d:"M21 12h-8",key:"1bmf0i"}],["path",{d:"M21 6H8",key:"1pqkrb"}],["path",{d:"M21 18h-8",key:"1tm79t"}],["path",{d:"M3 6v4c0 1.1.9 2 2 2h3",key:"1ywdgy"}],["path",{d:"M3 10v6c0 1.1.9 2 2 2h3",key:"2wc746"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k4=k("ListVideoIcon",[["path",{d:"M12 12H3",key:"18klou"}],["path",{d:"M16 6H3",key:"1wxfjs"}],["path",{d:"M12 18H3",key:"11ftsu"}],["path",{d:"m16 12 5 3-5 3v-6Z",key:"zpskkp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b4=k("ListXIcon",[["path",{d:"M11 12H3",key:"51ecnj"}],["path",{d:"M16 6H3",key:"1wxfjs"}],["path",{d:"M16 18H3",key:"12xzn7"}],["path",{d:"m19 10-4 4",key:"1tz659"}],["path",{d:"m15 10 4 4",key:"1n7nei"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w4=k("ListIcon",[["line",{x1:"8",x2:"21",y1:"6",y2:"6",key:"7ey8pc"}],["line",{x1:"8",x2:"21",y1:"12",y2:"12",key:"rjfblc"}],["line",{x1:"8",x2:"21",y1:"18",y2:"18",key:"c3b1m8"}],["line",{x1:"3",x2:"3.01",y1:"6",y2:"6",key:"1g7gq3"}],["line",{x1:"3",x2:"3.01",y1:"12",y2:"12",key:"1pjlvk"}],["line",{x1:"3",x2:"3.01",y1:"18",y2:"18",key:"28t2mc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x4=k("Loader2Icon",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M4=k("LoaderIcon",[["line",{x1:"12",x2:"12",y1:"2",y2:"6",key:"gza1u7"}],["line",{x1:"12",x2:"12",y1:"18",y2:"22",key:"1qhbu9"}],["line",{x1:"4.93",x2:"7.76",y1:"4.93",y2:"7.76",key:"xae44r"}],["line",{x1:"16.24",x2:"19.07",y1:"16.24",y2:"19.07",key:"bxnmvf"}],["line",{x1:"2",x2:"6",y1:"12",y2:"12",key:"89khin"}],["line",{x1:"18",x2:"22",y1:"12",y2:"12",key:"pb8tfm"}],["line",{x1:"4.93",x2:"7.76",y1:"19.07",y2:"16.24",key:"1uxjnu"}],["line",{x1:"16.24",x2:"19.07",y1:"7.76",y2:"4.93",key:"6duxfx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const C4=k("LocateFixedIcon",[["line",{x1:"2",x2:"5",y1:"12",y2:"12",key:"bvdh0s"}],["line",{x1:"19",x2:"22",y1:"12",y2:"12",key:"1tbv5k"}],["line",{x1:"12",x2:"12",y1:"2",y2:"5",key:"11lu5j"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}],["circle",{cx:"12",cy:"12",r:"7",key:"fim9np"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S4=k("LocateOffIcon",[["line",{x1:"2",x2:"5",y1:"12",y2:"12",key:"bvdh0s"}],["line",{x1:"19",x2:"22",y1:"12",y2:"12",key:"1tbv5k"}],["line",{x1:"12",x2:"12",y1:"2",y2:"5",key:"11lu5j"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}],["path",{d:"M7.11 7.11C5.83 8.39 5 10.1 5 12c0 3.87 3.13 7 7 7 1.9 0 3.61-.83 4.89-2.11",key:"1oh7ia"}],["path",{d:"M18.71 13.96c.19-.63.29-1.29.29-1.96 0-3.87-3.13-7-7-7-.67 0-1.33.1-1.96.29",key:"3qdecy"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I4=k("LocateIcon",[["line",{x1:"2",x2:"5",y1:"12",y2:"12",key:"bvdh0s"}],["line",{x1:"19",x2:"22",y1:"12",y2:"12",key:"1tbv5k"}],["line",{x1:"12",x2:"12",y1:"2",y2:"5",key:"11lu5j"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}],["circle",{cx:"12",cy:"12",r:"7",key:"fim9np"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L4=k("LockKeyholeIcon",[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $4=k("LockIcon",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A4=k("LogInIcon",[["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}],["polyline",{points:"10 17 15 12 10 7",key:"1ail0h"}],["line",{x1:"15",x2:"3",y1:"12",y2:"12",key:"v6grx8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const E4=k("LogOutIcon",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const T4=k("LollipopIcon",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}],["path",{d:"M11 11a2 2 0 0 0 4 0 4 4 0 0 0-8 0 6 6 0 0 0 12 0",key:"107gwy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P4=k("LuggageIcon",[["path",{d:"M6 20h0a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h0",key:"1h5fkc"}],["path",{d:"M8 18V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v14",key:"1l99gc"}],["path",{d:"M10 20h4",key:"ni2waw"}],["circle",{cx:"16",cy:"20",r:"2",key:"1vifvg"}],["circle",{cx:"8",cy:"20",r:"2",key:"ckkr5m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D4=k("MSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 16V8l4 4 4-4v8",key:"141u4e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R4=k("MagnetIcon",[["path",{d:"m6 15-4-4 6.75-6.77a7.79 7.79 0 0 1 11 11L13 22l-4-4 6.39-6.36a2.14 2.14 0 0 0-3-3L6 15",key:"1i3lhw"}],["path",{d:"m5 8 4 4",key:"j6kj7e"}],["path",{d:"m12 15 4 4",key:"lnac28"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O4=k("MailCheckIcon",[["path",{d:"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8",key:"12jkf8"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}],["path",{d:"m16 19 2 2 4-4",key:"1b14m6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V4=k("MailMinusIcon",[["path",{d:"M22 15V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8",key:"fuxbkv"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}],["path",{d:"M16 19h6",key:"xwg31i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U4=k("MailOpenIcon",[["path",{d:"M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z",key:"1jhwl8"}],["path",{d:"m22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10",key:"1qfld7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F4=k("MailPlusIcon",[["path",{d:"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8",key:"12jkf8"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}],["path",{d:"M19 16v6",key:"tddt3s"}],["path",{d:"M16 19h6",key:"xwg31i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j4=k("MailQuestionIcon",[["path",{d:"M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5",key:"e61zoh"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}],["path",{d:"M18 15.28c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2",key:"7z9rxb"}],["path",{d:"M20 22v.01",key:"12bgn6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H4=k("MailSearchIcon",[["path",{d:"M22 12.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h7.5",key:"w80f2v"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}],["path",{d:"M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z",key:"mgbru4"}],["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["path",{d:"m22 22-1.5-1.5",key:"1x83k4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N4=k("MailWarningIcon",[["path",{d:"M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5",key:"e61zoh"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}],["path",{d:"M20 14v4",key:"1hm744"}],["path",{d:"M20 22v.01",key:"12bgn6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z4=k("MailXIcon",[["path",{d:"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h9",key:"1j9vog"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}],["path",{d:"m17 17 4 4",key:"1b3523"}],["path",{d:"m21 17-4 4",key:"uinynz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B4=k("MailIcon",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q4=k("MailboxIcon",[["path",{d:"M22 17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9.5C2 7 4 5 6.5 5H18c2.2 0 4 1.8 4 4v8Z",key:"1lbycx"}],["polyline",{points:"15,9 18,9 18,11",key:"1pm9c0"}],["path",{d:"M6.5 5C9 5 11 7 11 9.5V17a2 2 0 0 1-2 2v0",key:"n6nfvi"}],["line",{x1:"6",x2:"7",y1:"10",y2:"10",key:"1e2scm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W4=k("MailsIcon",[["rect",{width:"16",height:"13",x:"6",y:"4",rx:"2",key:"1drq3f"}],["path",{d:"m22 7-7.1 3.78c-.57.3-1.23.3-1.8 0L6 7",key:"xn252p"}],["path",{d:"M2 8v11c0 1.1.9 2 2 2h14",key:"n13cji"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G4=k("MapPinOffIcon",[["path",{d:"M5.43 5.43A8.06 8.06 0 0 0 4 10c0 6 8 12 8 12a29.94 29.94 0 0 0 5-5",key:"12a8pk"}],["path",{d:"M19.18 13.52A8.66 8.66 0 0 0 20 10a8 8 0 0 0-8-8 7.88 7.88 0 0 0-3.52.82",key:"1r9f6y"}],["path",{d:"M9.13 9.13A2.78 2.78 0 0 0 9 10a3 3 0 0 0 3 3 2.78 2.78 0 0 0 .87-.13",key:"erynq7"}],["path",{d:"M14.9 9.25a3 3 0 0 0-2.15-2.16",key:"1hwwmx"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z4=k("MapPinIcon",[["path",{d:"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z",key:"2oe9fu"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K4=k("MapPinnedIcon",[["path",{d:"M18 8c0 4.5-6 9-6 9s-6-4.5-6-9a6 6 0 0 1 12 0",key:"yrbn30"}],["circle",{cx:"12",cy:"8",r:"2",key:"1822b1"}],["path",{d:"M8.835 14H5a1 1 0 0 0-.9.7l-2 6c-.1.1-.1.2-.1.3 0 .6.4 1 1 1h18c.6 0 1-.4 1-1 0-.1 0-.2-.1-.3l-2-6a1 1 0 0 0-.9-.7h-3.835",key:"112zkj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X4=k("MapIcon",[["polygon",{points:"3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21",key:"ok2ie8"}],["line",{x1:"9",x2:"9",y1:"3",y2:"18",key:"w34qz5"}],["line",{x1:"15",x2:"15",y1:"6",y2:"21",key:"volv9a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y4=k("MartiniIcon",[["path",{d:"M8 22h8",key:"rmew8v"}],["path",{d:"M12 11v11",key:"ur9y6a"}],["path",{d:"m19 3-7 8-7-8Z",key:"1sgpiw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q4=k("Maximize2Icon",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J4=k("MaximizeIcon",[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e5=k("MedalIcon",[["path",{d:"M7.21 15 2.66 7.14a2 2 0 0 1 .13-2.2L4.4 2.8A2 2 0 0 1 6 2h12a2 2 0 0 1 1.6.8l1.6 2.14a2 2 0 0 1 .14 2.2L16.79 15",key:"143lza"}],["path",{d:"M11 12 5.12 2.2",key:"qhuxz6"}],["path",{d:"m13 12 5.88-9.8",key:"hbye0f"}],["path",{d:"M8 7h8",key:"i86dvs"}],["circle",{cx:"12",cy:"17",r:"5",key:"qbz8iq"}],["path",{d:"M12 18v-2h-.5",key:"fawc4q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t5=k("MegaphoneOffIcon",[["path",{d:"M9.26 9.26 3 11v3l14.14 3.14",key:"3429n"}],["path",{d:"M21 15.34V6l-7.31 2.03",key:"4o1dh8"}],["path",{d:"M11.6 16.8a3 3 0 1 1-5.8-1.6",key:"1yl0tm"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const a5=k("MegaphoneIcon",[["path",{d:"m3 11 18-5v12L3 14v-3z",key:"n962bs"}],["path",{d:"M11.6 16.8a3 3 0 1 1-5.8-1.6",key:"1yl0tm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n5=k("MehIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"8",x2:"16",y1:"15",y2:"15",key:"1xb1d9"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s5=k("MemoryStickIcon",[["path",{d:"M6 19v-3",key:"1nvgqn"}],["path",{d:"M10 19v-3",key:"iu8nkm"}],["path",{d:"M14 19v-3",key:"kcehxu"}],["path",{d:"M18 19v-3",key:"1vh91z"}],["path",{d:"M8 11V9",key:"63erz4"}],["path",{d:"M16 11V9",key:"fru6f3"}],["path",{d:"M12 11V9",key:"ha00sb"}],["path",{d:"M2 15h20",key:"16ne18"}],["path",{d:"M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v1.1a2 2 0 0 0 0 3.837V17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.1a2 2 0 0 0 0-3.837Z",key:"lhddv3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o5=k("MenuSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M7 8h10",key:"1jw688"}],["path",{d:"M7 12h10",key:"b7w52i"}],["path",{d:"M7 16h10",key:"wp8him"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r5=k("MenuIcon",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i5=k("MergeIcon",[["path",{d:"m8 6 4-4 4 4",key:"ybng9g"}],["path",{d:"M12 2v10.3a4 4 0 0 1-1.172 2.872L4 22",key:"1hyw0i"}],["path",{d:"m20 22-5-5",key:"1m27yz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l5=k("MessageCircleCodeIcon",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}],["path",{d:"m10 10-2 2 2 2",key:"p6et6i"}],["path",{d:"m14 10 2 2-2 2",key:"1kkmpt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c5=k("MessageCircleDashedIcon",[["path",{d:"M13.5 3.1c-.5 0-1-.1-1.5-.1s-1 .1-1.5.1",key:"16ll65"}],["path",{d:"M19.3 6.8a10.45 10.45 0 0 0-2.1-2.1",key:"1nq77a"}],["path",{d:"M20.9 13.5c.1-.5.1-1 .1-1.5s-.1-1-.1-1.5",key:"1sf7wn"}],["path",{d:"M17.2 19.3a10.45 10.45 0 0 0 2.1-2.1",key:"x1hs5g"}],["path",{d:"M10.5 20.9c.5.1 1 .1 1.5.1s1-.1 1.5-.1",key:"19m18z"}],["path",{d:"M3.5 17.5 2 22l4.5-1.5",key:"1f36qi"}],["path",{d:"M3.1 10.5c0 .5-.1 1-.1 1.5s.1 1 .1 1.5",key:"1vz3ju"}],["path",{d:"M6.8 4.7a10.45 10.45 0 0 0-2.1 2.1",key:"19f9do"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const d5=k("MessageCircleHeartIcon",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}],["path",{d:"M15.8 9.2a2.5 2.5 0 0 0-3.5 0l-.3.4-.35-.3a2.42 2.42 0 1 0-3.2 3.6l3.6 3.5 3.6-3.5c1.2-1.2 1.1-2.7.2-3.7",key:"43lnbm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u5=k("MessageCircleMoreIcon",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}],["path",{d:"M8 12h.01",key:"czm47f"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M16 12h.01",key:"1l6xoz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const p5=k("MessageCircleOffIcon",[["path",{d:"M20.5 14.9A9 9 0 0 0 9.1 3.5",key:"1iebmn"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5.6 5.6C3 8.3 2.2 12.5 4 16l-2 6 6-2c3.4 1.8 7.6 1.1 10.3-1.7",key:"1ov8ce"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h5=k("MessageCirclePlusIcon",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f5=k("MessageCircleQuestionIcon",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m5=k("MessageCircleReplyIcon",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}],["path",{d:"m10 15-3-3 3-3",key:"1pgupc"}],["path",{d:"M7 12h7a2 2 0 0 1 2 2v1",key:"1gheu4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const v5=k("MessageCircleWarningIcon",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y5=k("MessageCircleXIcon",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _5=k("MessageCircleIcon",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const g5=k("MessageSquareCodeIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"m10 8-2 2 2 2",key:"19bv1o"}],["path",{d:"m14 8 2 2-2 2",key:"1whylv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k5=k("MessageSquareDashedIcon",[["path",{d:"M3 6V5c0-1.1.9-2 2-2h2",key:"9usibi"}],["path",{d:"M11 3h3",key:"1c3ji7"}],["path",{d:"M18 3h1c1.1 0 2 .9 2 2",key:"19esxn"}],["path",{d:"M21 9v2",key:"p14lih"}],["path",{d:"M21 15c0 1.1-.9 2-2 2h-1",key:"1fo1j8"}],["path",{d:"M14 17h-3",key:"1w4p2m"}],["path",{d:"m7 17-4 4v-5",key:"ph9x1h"}],["path",{d:"M3 12v-2",key:"856n1q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b5=k("MessageSquareDiffIcon",[["path",{d:"m5 19-2 2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2",key:"1xuzuj"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M12 7v6",key:"lw1j43"}],["path",{d:"M9 17h6",key:"r8uit2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w5=k("MessageSquareDotIcon",[["path",{d:"M11.7 3H5a2 2 0 0 0-2 2v16l4-4h12a2 2 0 0 0 2-2v-2.7",key:"uodpkb"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x5=k("MessageSquareHeartIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"M14.8 7.5a1.84 1.84 0 0 0-2.6 0l-.2.3-.3-.3a1.84 1.84 0 1 0-2.4 2.8L12 13l2.7-2.7c.9-.9.8-2.1.1-2.8",key:"1blaws"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M5=k("MessageSquareMoreIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M16 10h.01",key:"1m94wz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const C5=k("MessageSquareOffIcon",[["path",{d:"M21 15V5a2 2 0 0 0-2-2H9",key:"43el77"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M3.6 3.6c-.4.3-.6.8-.6 1.4v16l4-4h10",key:"pwpm4a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S5=k("MessageSquarePlusIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"M12 7v6",key:"lw1j43"}],["path",{d:"M9 10h6",key:"9gxzsh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I5=k("MessageSquareQuoteIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"M8 12a2 2 0 0 0 2-2V8H8",key:"1jfesj"}],["path",{d:"M14 12a2 2 0 0 0 2-2V8h-2",key:"1dq9mh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L5=k("MessageSquareReplyIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"m10 7-3 3 3 3",key:"1eugdv"}],["path",{d:"M17 13v-1a2 2 0 0 0-2-2H7",key:"ernfh3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $5=k("MessageSquareShareIcon",[["path",{d:"M21 12v3a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h7",key:"tqtdkg"}],["path",{d:"M16 3h5v5",key:"1806ms"}],["path",{d:"m16 8 5-5",key:"15mbrl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A5=k("MessageSquareTextIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"M13 8H7",key:"14i4kc"}],["path",{d:"M17 12H7",key:"16if0g"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const E5=k("MessageSquareWarningIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"M12 7v2",key:"stiyo7"}],["path",{d:"M12 13h.01",key:"y0uutt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const T5=k("MessageSquareXIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"m14.5 7.5-5 5",key:"3lb6iw"}],["path",{d:"m9.5 7.5 5 5",key:"ko136h"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P5=k("MessageSquareIcon",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D5=k("MessagesSquareIcon",[["path",{d:"M14 9a2 2 0 0 1-2 2H6l-4 4V4c0-1.1.9-2 2-2h8a2 2 0 0 1 2 2v5Z",key:"16vlm8"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1",key:"1cx29u"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R5=k("Mic2Icon",[["path",{d:"m12 8-9.04 9.06a2.82 2.82 0 1 0 3.98 3.98L16 12",key:"zoua8r"}],["circle",{cx:"17",cy:"7",r:"5",key:"1fomce"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O5=k("MicOffIcon",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2",key:"80xlxr"}],["path",{d:"M5 10v2a7 7 0 0 0 12 5",key:"p2k8kg"}],["path",{d:"M15 9.34V5a3 3 0 0 0-5.68-1.33",key:"1gzdoj"}],["path",{d:"M9 9v3a3 3 0 0 0 5.12 2.12",key:"r2i35w"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V5=k("MicIcon",[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z",key:"131961"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U5=k("MicroscopeIcon",[["path",{d:"M6 18h8",key:"1borvv"}],["path",{d:"M3 22h18",key:"8prr45"}],["path",{d:"M14 22a7 7 0 1 0 0-14h-1",key:"1jwaiy"}],["path",{d:"M9 14h2",key:"197e7h"}],["path",{d:"M9 12a2 2 0 0 1-2-2V6h6v4a2 2 0 0 1-2 2Z",key:"1bmzmy"}],["path",{d:"M12 6V3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3",key:"1drr47"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F5=k("MicrowaveIcon",[["rect",{width:"20",height:"15",x:"2",y:"4",rx:"2",key:"2no95f"}],["rect",{width:"8",height:"7",x:"6",y:"8",rx:"1",key:"zh9wx"}],["path",{d:"M18 8v7",key:"o5zi4n"}],["path",{d:"M6 19v2",key:"1loha6"}],["path",{d:"M18 19v2",key:"1dawf0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j5=k("MilestoneIcon",[["path",{d:"M18 6H5a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h13l4-3.5L18 6Z",key:"1mp5s7"}],["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M12 3v3",key:"1n5kay"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H5=k("MilkOffIcon",[["path",{d:"M8 2h8",key:"1ssgc1"}],["path",{d:"M9 2v1.343M15 2v2.789a4 4 0 0 0 .672 2.219l.656.984a4 4 0 0 1 .672 2.22v1.131M7.8 7.8l-.128.192A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-3",key:"y0ejgx"}],["path",{d:"M7 15a6.47 6.47 0 0 1 5 0 6.472 6.472 0 0 0 3.435.435",key:"iaxqsy"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N5=k("MilkIcon",[["path",{d:"M8 2h8",key:"1ssgc1"}],["path",{d:"M9 2v2.789a4 4 0 0 1-.672 2.219l-.656.984A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-9.789a4 4 0 0 0-.672-2.219l-.656-.984A4 4 0 0 1 15 4.788V2",key:"qtp12x"}],["path",{d:"M7 15a6.472 6.472 0 0 1 5 0 6.47 6.47 0 0 0 5 0",key:"ygeh44"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z5=k("Minimize2Icon",[["polyline",{points:"4 14 10 14 10 20",key:"11kfnr"}],["polyline",{points:"20 10 14 10 14 4",key:"rlmsce"}],["line",{x1:"14",x2:"21",y1:"10",y2:"3",key:"o5lafz"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B5=k("MinimizeIcon",[["path",{d:"M8 3v3a2 2 0 0 1-2 2H3",key:"hohbtr"}],["path",{d:"M21 8h-3a2 2 0 0 1-2-2V3",key:"5jw1f3"}],["path",{d:"M3 16h3a2 2 0 0 1 2 2v3",key:"198tvr"}],["path",{d:"M16 21v-3a2 2 0 0 1 2-2h3",key:"ph8mxp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q5=k("MinusCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W5=k("MinusSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 12h8",key:"1wcyev"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G5=k("MinusIcon",[["path",{d:"M5 12h14",key:"1ays0h"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z5=k("MonitorCheckIcon",[["path",{d:"m9 10 2 2 4-4",key:"1gnqz4"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K5=k("MonitorDotIcon",[["circle",{cx:"19",cy:"6",r:"3",key:"108a5v"}],["path",{d:"M22 12v3a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9",key:"1fet9y"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X5=k("MonitorDownIcon",[["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"m15 10-3 3-3-3",key:"lzhmyn"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y5=k("MonitorOffIcon",[["path",{d:"M17 17H4a2 2 0 0 1-2-2V5c0-1.5 1-2 1-2",key:"k0q8oc"}],["path",{d:"M22 15V5a2 2 0 0 0-2-2H9",key:"cp1ac0"}],["path",{d:"M8 21h8",key:"1ev6f3"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q5=k("MonitorPauseIcon",[["path",{d:"M10 13V7",key:"1u13u9"}],["path",{d:"M14 13V7",key:"1vj9om"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J5=k("MonitorPlayIcon",[["path",{d:"m10 7 5 3-5 3Z",key:"29ljg6"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e3=k("MonitorSmartphoneIcon",[["path",{d:"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8",key:"10dyio"}],["path",{d:"M10 19v-3.96 3.15",key:"1irgej"}],["path",{d:"M7 19h5",key:"qswx4l"}],["rect",{width:"6",height:"10",x:"16",y:"12",rx:"2",key:"1egngj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t3=k("MonitorSpeakerIcon",[["path",{d:"M5.5 20H8",key:"1k40s5"}],["path",{d:"M17 9h.01",key:"1j24nn"}],["rect",{width:"10",height:"16",x:"12",y:"4",rx:"2",key:"ixliua"}],["path",{d:"M8 6H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h4",key:"1mp6e1"}],["circle",{cx:"17",cy:"15",r:"1",key:"tqvash"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const a3=k("MonitorStopIcon",[["rect",{x:"9",y:"7",width:"6",height:"6",key:"4xvc6r"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n3=k("MonitorUpIcon",[["path",{d:"m9 10 3-3 3 3",key:"11gsxs"}],["path",{d:"M12 13V7",key:"h0r20n"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s3=k("MonitorXIcon",[["path",{d:"m14.5 12.5-5-5",key:"1jahn5"}],["path",{d:"m9.5 12.5 5-5",key:"1k2t7b"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o3=k("MonitorIcon",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r3=k("MoonStarIcon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}],["path",{d:"M19 3v4",key:"vgv24u"}],["path",{d:"M21 5h-4",key:"1wcg1f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i3=k("MoonIcon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l3=k("MoreHorizontalIcon",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c3=k("MoreVerticalIcon",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const d3=k("MountainSnowIcon",[["path",{d:"m8 3 4 8 5-5 5 15H2L8 3z",key:"otkl63"}],["path",{d:"M4.14 15.08c2.62-1.57 5.24-1.43 7.86.42 2.74 1.94 5.49 2 8.23.19",key:"1pvmmp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u3=k("MountainIcon",[["path",{d:"m8 3 4 8 5-5 5 15H2L8 3z",key:"otkl63"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const p3=k("MousePointer2Icon",[["path",{d:"m4 4 7.07 17 2.51-7.39L21 11.07z",key:"1vqm48"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h3=k("MousePointerClickIcon",[["path",{d:"m9 9 5 12 1.8-5.2L21 14Z",key:"1b76lo"}],["path",{d:"M7.2 2.2 8 5.1",key:"1cfko1"}],["path",{d:"m5.1 8-2.9-.8",key:"1go3kf"}],["path",{d:"M14 4.1 12 6",key:"ita8i4"}],["path",{d:"m6 12-1.9 2",key:"mnht97"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f3=k("MousePointerSquareDashedIcon",[["path",{d:"M5 3a2 2 0 0 0-2 2",key:"y57alp"}],["path",{d:"M19 3a2 2 0 0 1 2 2",key:"18rm91"}],["path",{d:"m12 12 4 10 1.7-4.3L22 16Z",key:"64ilsv"}],["path",{d:"M5 21a2 2 0 0 1-2-2",key:"sbafld"}],["path",{d:"M9 3h1",key:"1yesri"}],["path",{d:"M9 21h2",key:"1qve2z"}],["path",{d:"M14 3h1",key:"1ec4yj"}],["path",{d:"M3 9v1",key:"1r0deq"}],["path",{d:"M21 9v2",key:"p14lih"}],["path",{d:"M3 14v1",key:"vnatye"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wi=k("MousePointerSquareIcon",[["path",{d:"M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6",key:"14rsvq"}],["path",{d:"m12 12 4 10 1.7-4.3L22 16Z",key:"64ilsv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m3=k("MousePointerIcon",[["path",{d:"m3 3 7.07 16.97 2.51-7.39 7.39-2.51L3 3z",key:"y2ucgo"}],["path",{d:"m13 13 6 6",key:"1nhxnf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const v3=k("MouseIcon",[["rect",{x:"5",y:"2",width:"14",height:"20",rx:"7",key:"11ol66"}],["path",{d:"M12 6v4",key:"16clxf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gi=k("Move3dIcon",[["path",{d:"M5 3v16h16",key:"1mqmf9"}],["path",{d:"m5 19 6-6",key:"jh6hbb"}],["path",{d:"m2 6 3-3 3 3",key:"tkyvxa"}],["path",{d:"m18 16 3 3-3 3",key:"1d4glt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y3=k("MoveDiagonal2Icon",[["polyline",{points:"5 11 5 5 11 5",key:"ncfzxk"}],["polyline",{points:"19 13 19 19 13 19",key:"1mk7hk"}],["line",{x1:"5",x2:"19",y1:"5",y2:"19",key:"mcyte3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _3=k("MoveDiagonalIcon",[["polyline",{points:"13 5 19 5 19 11",key:"11219e"}],["polyline",{points:"11 19 5 19 5 13",key:"sfq3wq"}],["line",{x1:"19",x2:"5",y1:"5",y2:"19",key:"1x9vlm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const g3=k("MoveDownLeftIcon",[["path",{d:"M11 19H5V13",key:"1akmht"}],["path",{d:"M19 5L5 19",key:"72u4yj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k3=k("MoveDownRightIcon",[["path",{d:"M19 13V19H13",key:"10vkzq"}],["path",{d:"M5 5L19 19",key:"5zm2fv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b3=k("MoveDownIcon",[["path",{d:"M8 18L12 22L16 18",key:"cskvfv"}],["path",{d:"M12 2V22",key:"r89rzk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w3=k("MoveHorizontalIcon",[["polyline",{points:"18 8 22 12 18 16",key:"1hqrds"}],["polyline",{points:"6 8 2 12 6 16",key:"f0ernq"}],["line",{x1:"2",x2:"22",y1:"12",y2:"12",key:"1dnqot"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x3=k("MoveLeftIcon",[["path",{d:"M6 8L2 12L6 16",key:"kyvwex"}],["path",{d:"M2 12H22",key:"1m8cig"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M3=k("MoveRightIcon",[["path",{d:"M18 8L22 12L18 16",key:"1r0oui"}],["path",{d:"M2 12H22",key:"1m8cig"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const C3=k("MoveUpLeftIcon",[["path",{d:"M5 11V5H11",key:"3q78g9"}],["path",{d:"M5 5L19 19",key:"5zm2fv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S3=k("MoveUpRightIcon",[["path",{d:"M13 5H19V11",key:"1n1gyv"}],["path",{d:"M19 5L5 19",key:"72u4yj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I3=k("MoveUpIcon",[["path",{d:"M8 6L12 2L16 6",key:"1yvkyx"}],["path",{d:"M12 2V22",key:"r89rzk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L3=k("MoveVerticalIcon",[["polyline",{points:"8 18 12 22 16 18",key:"1uutw3"}],["polyline",{points:"8 6 12 2 16 6",key:"d60sxy"}],["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $3=k("MoveIcon",[["polyline",{points:"5 9 2 12 5 15",key:"1r5uj5"}],["polyline",{points:"9 5 12 2 15 5",key:"5v383o"}],["polyline",{points:"15 19 12 22 9 19",key:"g7qi8m"}],["polyline",{points:"19 9 22 12 19 15",key:"tpp73q"}],["line",{x1:"2",x2:"22",y1:"12",y2:"12",key:"1dnqot"}],["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A3=k("Music2Icon",[["circle",{cx:"8",cy:"18",r:"4",key:"1fc0mg"}],["path",{d:"M12 18V2l7 4",key:"g04rme"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const E3=k("Music3Icon",[["circle",{cx:"12",cy:"18",r:"4",key:"m3r9ws"}],["path",{d:"M16 18V2",key:"40x2m5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const T3=k("Music4Icon",[["path",{d:"M9 18V5l12-2v13",key:"1jmyc2"}],["path",{d:"m9 9 12-2",key:"1e64n2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["circle",{cx:"18",cy:"16",r:"3",key:"1hluhg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P3=k("MusicIcon",[["path",{d:"M9 18V5l12-2v13",key:"1jmyc2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["circle",{cx:"18",cy:"16",r:"3",key:"1hluhg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D3=k("Navigation2OffIcon",[["path",{d:"M9.31 9.31 5 21l7-4 7 4-1.17-3.17",key:"qoq2o2"}],["path",{d:"M14.53 8.88 12 2l-1.17 3.17",key:"k3sjzy"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R3=k("Navigation2Icon",[["polygon",{points:"12 2 19 21 12 17 5 21 12 2",key:"x8c0qg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O3=k("NavigationOffIcon",[["path",{d:"M8.43 8.43 3 11l8 2 2 8 2.57-5.43",key:"1vdtb7"}],["path",{d:"M17.39 11.73 22 2l-9.73 4.61",key:"tya3r6"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V3=k("NavigationIcon",[["polygon",{points:"3 11 22 2 13 21 11 13 3 11",key:"1ltx0t"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U3=k("NetworkIcon",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F3=k("NewspaperIcon",[["path",{d:"M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2",key:"7pis2x"}],["path",{d:"M18 14h-8",key:"sponae"}],["path",{d:"M15 18h-5",key:"95g1m2"}],["path",{d:"M10 6h8v4h-8V6Z",key:"smlsk5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j3=k("NfcIcon",[["path",{d:"M6 8.32a7.43 7.43 0 0 1 0 7.36",key:"9iaqei"}],["path",{d:"M9.46 6.21a11.76 11.76 0 0 1 0 11.58",key:"1yha7l"}],["path",{d:"M12.91 4.1a15.91 15.91 0 0 1 .01 15.8",key:"4iu2gk"}],["path",{d:"M16.37 2a20.16 20.16 0 0 1 0 20",key:"sap9u2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H3=k("NutOffIcon",[["path",{d:"M12 4V2",key:"1k5q1u"}],["path",{d:"M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592a7.01 7.01 0 0 0 4.125-2.939",key:"1xcvy9"}],["path",{d:"M19 10v3.343",key:"163tfc"}],["path",{d:"M12 12c-1.349-.573-1.905-1.005-2.5-2-.546.902-1.048 1.353-2.5 2-1.018-.644-1.46-1.08-2-2-1.028.71-1.69.918-3 1 1.081-1.048 1.757-2.03 2-3 .194-.776.84-1.551 1.79-2.21m11.654 5.997c.887-.457 1.28-.891 1.556-1.787 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4-.74 0-1.461.068-2.15.192",key:"17914v"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N3=k("NutIcon",[["path",{d:"M12 4V2",key:"1k5q1u"}],["path",{d:"M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592A7.003 7.003 0 0 0 19 14v-4",key:"1tgyif"}],["path",{d:"M12 4C8 4 4.5 6 4 8c-.243.97-.919 1.952-2 3 1.31-.082 1.972-.29 3-1 .54.92.982 1.356 2 2 1.452-.647 1.954-1.098 2.5-2 .595.995 1.151 1.427 2.5 2 1.31-.621 1.862-1.058 2.5-2 .629.977 1.162 1.423 2.5 2 1.209-.548 1.68-.967 2-2 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4Z",key:"tnsqj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z3=k("OctagonIcon",[["polygon",{points:"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2",key:"h1p8hx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B3=k("OptionIcon",[["path",{d:"M3 3h6l6 18h6",key:"ph9rgk"}],["path",{d:"M14 3h7",key:"16f0ms"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q3=k("OrbitIcon",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["circle",{cx:"19",cy:"5",r:"2",key:"mhkx31"}],["circle",{cx:"5",cy:"19",r:"2",key:"v8kfzx"}],["path",{d:"M10.4 21.9a10 10 0 0 0 9.941-15.416",key:"eohfx2"}],["path",{d:"M13.5 2.1a10 10 0 0 0-9.841 15.416",key:"19pvbm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W3=k("OutdentIcon",[["polyline",{points:"7 8 3 12 7 16",key:"2j60jr"}],["line",{x1:"21",x2:"11",y1:"12",y2:"12",key:"1fxxak"}],["line",{x1:"21",x2:"11",y1:"6",y2:"6",key:"asgu94"}],["line",{x1:"21",x2:"11",y1:"18",y2:"18",key:"13dsj7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G3=k("Package2Icon",[["path",{d:"M3 9h18v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9Z",key:"1ront0"}],["path",{d:"m3 9 2.45-4.9A2 2 0 0 1 7.24 3h9.52a2 2 0 0 1 1.8 1.1L21 9",key:"19h2x1"}],["path",{d:"M12 3v6",key:"1holv5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z3=k("PackageCheckIcon",[["path",{d:"m16 16 2 2 4-4",key:"gfu2re"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K3=k("PackageMinusIcon",[["path",{d:"M16 16h6",key:"100bgy"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X3=k("PackageOpenIcon",[["path",{d:"M20.91 8.84 8.56 2.23a1.93 1.93 0 0 0-1.81 0L3.1 4.13a2.12 2.12 0 0 0-.05 3.69l12.22 6.93a2 2 0 0 0 1.94 0L21 12.51a2.12 2.12 0 0 0-.09-3.67Z",key:"1vy178"}],["path",{d:"m3.09 8.84 12.35-6.61a1.93 1.93 0 0 1 1.81 0l3.65 1.9a2.12 2.12 0 0 1 .1 3.69L8.73 14.75a2 2 0 0 1-1.94 0L3 12.51a2.12 2.12 0 0 1 .09-3.67Z",key:"s3bv25"}],["line",{x1:"12",x2:"12",y1:"22",y2:"13",key:"1o4xyi"}],["path",{d:"M20 13.5v3.37a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13.5",key:"1na2nq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y3=k("PackagePlusIcon",[["path",{d:"M16 16h6",key:"100bgy"}],["path",{d:"M19 13v6",key:"85cyf1"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q3=k("PackageSearchIcon",[["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}],["circle",{cx:"18.5",cy:"15.5",r:"2.5",key:"b5zd12"}],["path",{d:"M20.27 17.27 22 19",key:"1l4muz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J3=k("PackageXIcon",[["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}],["path",{d:"m17 13 5 5m-5 0 5-5",key:"im3w4b"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ex=k("PackageIcon",[["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tx=k("PaintBucketIcon",[["path",{d:"m19 11-8-8-8.6 8.6a2 2 0 0 0 0 2.8l5.2 5.2c.8.8 2 .8 2.8 0L19 11Z",key:"irua1i"}],["path",{d:"m5 2 5 5",key:"1lls2c"}],["path",{d:"M2 13h15",key:"1hkzvu"}],["path",{d:"M22 20a2 2 0 1 1-4 0c0-1.6 1.7-2.4 2-4 .3 1.6 2 2.4 2 4Z",key:"xk76lq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ax=k("Paintbrush2Icon",[["path",{d:"M14 19.9V16h3a2 2 0 0 0 2-2v-2H5v2c0 1.1.9 2 2 2h3v3.9a2 2 0 1 0 4 0Z",key:"1c8kta"}],["path",{d:"M6 12V2h12v10",key:"1esbnf"}],["path",{d:"M14 2v4",key:"qmzblu"}],["path",{d:"M10 2v2",key:"7u0qdc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nx=k("PaintbrushIcon",[["path",{d:"M18.37 2.63 14 7l-1.59-1.59a2 2 0 0 0-2.82 0L8 7l9 9 1.59-1.59a2 2 0 0 0 0-2.82L17 10l4.37-4.37a2.12 2.12 0 1 0-3-3Z",key:"m6k5sh"}],["path",{d:"M9 8c-2 3-4 3.5-7 4l8 10c2-1 6-5 6-7",key:"arzq70"}],["path",{d:"M14.5 17.5 4.5 15",key:"s7fvrz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sx=k("PaletteIcon",[["circle",{cx:"13.5",cy:"6.5",r:".5",key:"1xcu5"}],["circle",{cx:"17.5",cy:"10.5",r:".5",key:"736e4u"}],["circle",{cx:"8.5",cy:"7.5",r:".5",key:"clrty"}],["circle",{cx:"6.5",cy:"12.5",r:".5",key:"1s4xz9"}],["path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z",key:"12rzf8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ox=k("PalmtreeIcon",[["path",{d:"M13 8c0-2.76-2.46-5-5.5-5S2 5.24 2 8h2l1-1 1 1h4",key:"foxbe7"}],["path",{d:"M13 7.14A5.82 5.82 0 0 1 16.5 6c3.04 0 5.5 2.24 5.5 5h-3l-1-1-1 1h-3",key:"18arnh"}],["path",{d:"M5.89 9.71c-2.15 2.15-2.3 5.47-.35 7.43l4.24-4.25.7-.7.71-.71 2.12-2.12c-1.95-1.96-5.27-1.8-7.42.35z",key:"epoumf"}],["path",{d:"M11 15.5c.5 2.5-.17 4.5-1 6.5h4c2-5.5-.5-12-1-14",key:"ft0feo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rx=k("PanelBottomCloseIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"m15 8-3 3-3-3",key:"1oxy1z"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zi=k("PanelBottomDashedIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M14 15h1",key:"171nev"}],["path",{d:"M19 15h2",key:"1vnucp"}],["path",{d:"M3 15h2",key:"8bym0q"}],["path",{d:"M9 15h1",key:"1tg3ks"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ix=k("PanelBottomOpenIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"m9 10 3-3 3 3",key:"11gsxs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lx=k("PanelBottomIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 15h18",key:"5xshup"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ki=k("PanelLeftCloseIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m16 15-3-3 3-3",key:"14y99z"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xi=k("PanelLeftDashedIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 14v1",key:"askpd8"}],["path",{d:"M9 19v2",key:"16tejx"}],["path",{d:"M9 3v2",key:"1noubl"}],["path",{d:"M9 9v1",key:"19ebxg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yi=k("PanelLeftOpenIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m14 9 3 3-3 3",key:"8010ee"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qi=k("PanelLeftIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cx=k("PanelRightCloseIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m8 9 3 3-3 3",key:"12hl5m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ji=k("PanelRightDashedIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 14v1",key:"ilsfch"}],["path",{d:"M15 19v2",key:"1fst2f"}],["path",{d:"M15 3v2",key:"z204g4"}],["path",{d:"M15 9v1",key:"z2a8b1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dx=k("PanelRightOpenIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m10 15-3-3 3-3",key:"1pgupc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ux=k("PanelRightIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const px=k("PanelTopCloseIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"m9 16 3-3 3 3",key:"1idcnm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const el=k("PanelTopDashedIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M14 9h1",key:"l0svgy"}],["path",{d:"M19 9h2",key:"te2zfg"}],["path",{d:"M3 9h2",key:"1h4ldw"}],["path",{d:"M9 9h1",key:"15jzuz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hx=k("PanelTopOpenIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"m15 14-3 3-3-3",key:"g215vf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fx=k("PanelTopIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mx=k("PanelsLeftBottomIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M9 15h12",key:"5ijen5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vx=k("PanelsRightBottomIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 15h12",key:"1wkqb3"}],["path",{d:"M15 3v18",key:"14nvp0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tl=k("PanelsTopLeftIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M9 21V9",key:"1oto5p"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yx=k("PaperclipIcon",[["path",{d:"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48",key:"1u3ebp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _x=k("ParenthesesIcon",[["path",{d:"M8 21s-4-3-4-9 4-9 4-9",key:"uto9ud"}],["path",{d:"M16 3s4 3 4 9-4 9-4 9",key:"4w2vsq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gx=k("ParkingCircleOffIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m5 5 14 14",key:"11anup"}],["path",{d:"M13 13a3 3 0 1 0 0-6H9v2",key:"uoagbd"}],["path",{d:"M9 17v-2.34",key:"a9qo08"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kx=k("ParkingCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9 17V7h4a3 3 0 0 1 0 6H9",key:"1dfk2c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bx=k("ParkingMeterIcon",[["path",{d:"M9 9a3 3 0 1 1 6 0",key:"jdoeu8"}],["path",{d:"M12 12v3",key:"158kv8"}],["path",{d:"M11 15h2",key:"199qp6"}],["path",{d:"M19 9a7 7 0 1 0-13.6 2.3C6.4 14.4 8 19 8 19h8s1.6-4.6 2.6-7.7c.3-.8.4-1.5.4-2.3",key:"1l50wn"}],["path",{d:"M12 19v3",key:"npa21l"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wx=k("ParkingSquareOffIcon",[["path",{d:"M3.6 3.6A2 2 0 0 1 5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-.59 1.41",key:"9l1ft6"}],["path",{d:"M3 8.7V19a2 2 0 0 0 2 2h10.3",key:"17knke"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M13 13a3 3 0 1 0 0-6H9v2",key:"uoagbd"}],["path",{d:"M9 17v-2.3",key:"1jxgo2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xx=k("ParkingSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 17V7h4a3 3 0 0 1 0 6H9",key:"1dfk2c"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mx=k("PartyPopperIcon",[["path",{d:"M5.8 11.3 2 22l10.7-3.79",key:"gwxi1d"}],["path",{d:"M4 3h.01",key:"1vcuye"}],["path",{d:"M22 8h.01",key:"1mrtc2"}],["path",{d:"M15 2h.01",key:"1cjtqr"}],["path",{d:"M22 20h.01",key:"1mrys2"}],["path",{d:"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12v0c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10",key:"bpx1uq"}],["path",{d:"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11v0c-.11.7-.72 1.22-1.43 1.22H17",key:"1pd0s7"}],["path",{d:"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98v0C9.52 4.9 9 5.52 9 6.23V7",key:"zq5xbz"}],["path",{d:"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z",key:"4kbmks"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cx=k("PauseCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"10",x2:"10",y1:"15",y2:"9",key:"c1nkhi"}],["line",{x1:"14",x2:"14",y1:"15",y2:"9",key:"h65svq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sx=k("PauseOctagonIcon",[["path",{d:"M10 15V9",key:"1lckn7"}],["path",{d:"M14 15V9",key:"1muqhk"}],["path",{d:"M7.714 2h8.572L22 7.714v8.572L16.286 22H7.714L2 16.286V7.714L7.714 2z",key:"1m7qra"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ix=k("PauseIcon",[["rect",{width:"4",height:"16",x:"6",y:"4",key:"iffhe4"}],["rect",{width:"4",height:"16",x:"14",y:"4",key:"sjin7j"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lx=k("PawPrintIcon",[["circle",{cx:"11",cy:"4",r:"2",key:"vol9p0"}],["circle",{cx:"18",cy:"8",r:"2",key:"17gozi"}],["circle",{cx:"20",cy:"16",r:"2",key:"1v9bxh"}],["path",{d:"M9 10a5 5 0 0 1 5 5v3.5a3.5 3.5 0 0 1-6.84 1.045Q6.52 17.48 4.46 16.84A3.5 3.5 0 0 1 5.5 10Z",key:"1ydw1z"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $x=k("PcCaseIcon",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",key:"1uq1d7"}],["path",{d:"M15 14h.01",key:"1kp3bh"}],["path",{d:"M9 6h6",key:"dgm16u"}],["path",{d:"M9 10h6",key:"9gxzsh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const al=k("PenLineIcon",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z",key:"ymcmye"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _o=k("PenSquareIcon",[["path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1qinfi"}],["path",{d:"M18.5 2.5a2.12 2.12 0 0 1 3 3L12 15l-4 1 1-4Z",key:"w2jsv5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ax=k("PenToolIcon",[["path",{d:"m12 19 7-7 3 3-7 7-3-3z",key:"rklqx2"}],["path",{d:"m18 13-1.5-7.5L2 2l3.5 14.5L13 18l5-5z",key:"1et58u"}],["path",{d:"m2 2 7.586 7.586",key:"etlp93"}],["circle",{cx:"11",cy:"11",r:"2",key:"xmgehs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nl=k("PenIcon",[["path",{d:"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z",key:"5qss01"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ex=k("PencilLineIcon",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z",key:"ymcmye"}],["path",{d:"m15 5 3 3",key:"1w25hb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tx=k("PencilRulerIcon",[["path",{d:"m15 5 4 4",key:"1mk7zo"}],["path",{d:"M13 7 8.7 2.7a2.41 2.41 0 0 0-3.4 0L2.7 5.3a2.41 2.41 0 0 0 0 3.4L7 13",key:"orapub"}],["path",{d:"m8 6 2-2",key:"115y1s"}],["path",{d:"m2 22 5.5-1.5L21.17 6.83a2.82 2.82 0 0 0-4-4L3.5 16.5Z",key:"hes763"}],["path",{d:"m18 16 2-2",key:"ee94s4"}],["path",{d:"m17 11 4.3 4.3c.94.94.94 2.46 0 3.4l-2.6 2.6c-.94.94-2.46.94-3.4 0L11 17",key:"cfq27r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Px=k("PencilIcon",[["path",{d:"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z",key:"5qss01"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dx=k("PentagonIcon",[["path",{d:"M3.5 8.7c-.7.5-1 1.4-.7 2.2l2.8 8.7c.3.8 1 1.4 1.9 1.4h9.1c.9 0 1.6-.6 1.9-1.4l2.8-8.7c.3-.8 0-1.7-.7-2.2l-7.4-5.3a2.1 2.1 0 0 0-2.4 0Z",key:"hsj90r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rx=k("PercentCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M9 9h.01",key:"1q5me6"}],["path",{d:"M15 15h.01",key:"lqbp3k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ox=k("PercentDiamondIcon",[["path",{d:"M2.7 10.3a2.41 2.41 0 0 0 0 3.41l7.59 7.59a2.41 2.41 0 0 0 3.41 0l7.59-7.59a2.41 2.41 0 0 0 0-3.41L13.7 2.71a2.41 2.41 0 0 0-3.41 0Z",key:"1tpxz2"}],["path",{d:"M9.2 9.2h.01",key:"1b7bvt"}],["path",{d:"m14.5 9.5-5 5",key:"17q4r4"}],["path",{d:"M14.7 14.8h.01",key:"17nsh4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vx=k("PercentSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M9 9h.01",key:"1q5me6"}],["path",{d:"M15 15h.01",key:"lqbp3k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ux=k("PercentIcon",[["line",{x1:"19",x2:"5",y1:"5",y2:"19",key:"1x9vlm"}],["circle",{cx:"6.5",cy:"6.5",r:"2.5",key:"4mh3h7"}],["circle",{cx:"17.5",cy:"17.5",r:"2.5",key:"1mdrzq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fx=k("PersonStandingIcon",[["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["path",{d:"m9 20 3-6 3 6",key:"se2kox"}],["path",{d:"m6 8 6 2 6-2",key:"4o3us4"}],["path",{d:"M12 10v4",key:"1kjpxc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jx=k("PhoneCallIcon",[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}],["path",{d:"M14.05 2a9 9 0 0 1 8 7.94",key:"vmijpz"}],["path",{d:"M14.05 6A5 5 0 0 1 18 10",key:"13nbpp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hx=k("PhoneForwardedIcon",[["polyline",{points:"18 2 22 6 18 10",key:"6vjanh"}],["line",{x1:"14",x2:"22",y1:"6",y2:"6",key:"1jsywh"}],["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nx=k("PhoneIncomingIcon",[["polyline",{points:"16 2 16 8 22 8",key:"1ygljm"}],["line",{x1:"22",x2:"16",y1:"2",y2:"8",key:"1xzwqn"}],["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zx=k("PhoneMissedIcon",[["line",{x1:"22",x2:"16",y1:"2",y2:"8",key:"1xzwqn"}],["line",{x1:"16",x2:"22",y1:"2",y2:"8",key:"13zxdn"}],["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bx=k("PhoneOffIcon",[["path",{d:"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91",key:"z86iuo"}],["line",{x1:"22",x2:"2",y1:"2",y2:"22",key:"11kh81"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qx=k("PhoneOutgoingIcon",[["polyline",{points:"22 8 22 2 16 2",key:"1g204g"}],["line",{x1:"16",x2:"22",y1:"8",y2:"2",key:"1ggias"}],["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wx=k("PhoneIcon",[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gx=k("PiSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M7 7h10",key:"udp07y"}],["path",{d:"M10 7v10",key:"i1d9ee"}],["path",{d:"M16 17a2 2 0 0 1-2-2V7",key:"ftwdc7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zx=k("PiIcon",[["line",{x1:"9",x2:"9",y1:"4",y2:"20",key:"ovs5a5"}],["path",{d:"M4 7c0-1.7 1.3-3 3-3h13",key:"10pag4"}],["path",{d:"M18 20c-1.7 0-3-1.3-3-3V4",key:"1gaosr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kx=k("PianoIcon",[["path",{d:"M18.5 8c-1.4 0-2.6-.8-3.2-2A6.87 6.87 0 0 0 2 9v11a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-8.5C22 9.6 20.4 8 18.5 8",key:"lag0yf"}],["path",{d:"M2 14h20",key:"myj16y"}],["path",{d:"M6 14v4",key:"9ng0ue"}],["path",{d:"M10 14v4",key:"1v8uk5"}],["path",{d:"M14 14v4",key:"1tqops"}],["path",{d:"M18 14v4",key:"18uqwm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xx=k("PictureInPicture2Icon",[["path",{d:"M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4",key:"daa4of"}],["rect",{width:"10",height:"7",x:"12",y:"13",rx:"2",key:"1nb8gs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yx=k("PictureInPictureIcon",[["path",{d:"M8 4.5v5H3m-1-6 6 6m13 0v-3c0-1.16-.84-2-2-2h-7m-9 9v2c0 1.05.95 2 2 2h3",key:"bcd8fb"}],["rect",{width:"10",height:"7",x:"12",y:"13.5",ry:"2",key:"136fx3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qx=k("PieChartIcon",[["path",{d:"M21.21 15.89A10 10 0 1 1 8 2.83",key:"k2fpak"}],["path",{d:"M22 12A10 10 0 0 0 12 2v10z",key:"1rfc4y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jx=k("PiggyBankIcon",[["path",{d:"M19 5c-1.5 0-2.8 1.4-3 2-3.5-1.5-11-.3-11 5 0 1.8 0 3 2 4.5V20h4v-2h3v2h4v-4c1-.5 1.7-1 2-2h2v-4h-2c0-1-.5-1.5-1-2h0V5z",key:"uf6l00"}],["path",{d:"M2 9v1c0 1.1.9 2 2 2h1",key:"nm575m"}],["path",{d:"M16 11h0",key:"k2aug8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e8=k("PilcrowSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 12H9.5a2.5 2.5 0 0 1 0-5H17",key:"1l9586"}],["path",{d:"M12 7v10",key:"jspqdw"}],["path",{d:"M16 7v10",key:"lavkr4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t8=k("PilcrowIcon",[["path",{d:"M13 4v16",key:"8vvj80"}],["path",{d:"M17 4v16",key:"7dpous"}],["path",{d:"M19 4H9.5a4.5 4.5 0 0 0 0 9H13",key:"sh4n9v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const a8=k("PillIcon",[["path",{d:"m10.5 20.5 10-10a4.95 4.95 0 1 0-7-7l-10 10a4.95 4.95 0 1 0 7 7Z",key:"wa1lgi"}],["path",{d:"m8.5 8.5 7 7",key:"rvfmvr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n8=k("PinOffIcon",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["line",{x1:"12",x2:"12",y1:"17",y2:"22",key:"1jrz49"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h12",key:"13x2n8"}],["path",{d:"M15 9.34V6h1a2 2 0 0 0 0-4H7.89",key:"reo3ki"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s8=k("PinIcon",[["line",{x1:"12",x2:"12",y1:"17",y2:"22",key:"1jrz49"}],["path",{d:"M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z",key:"13yl11"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o8=k("PipetteIcon",[["path",{d:"m2 22 1-1h3l9-9",key:"1sre89"}],["path",{d:"M3 21v-3l9-9",key:"hpe2y6"}],["path",{d:"m15 6 3.4-3.4a2.1 2.1 0 1 1 3 3L18 9l.4.4a2.1 2.1 0 1 1-3 3l-3.8-3.8a2.1 2.1 0 1 1 3-3l.4.4Z",key:"196du1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r8=k("PizzaIcon",[["path",{d:"M15 11h.01",key:"rns66s"}],["path",{d:"M11 15h.01",key:"k85uqc"}],["path",{d:"M16 16h.01",key:"1f9h7w"}],["path",{d:"m2 16 20 6-6-20A20 20 0 0 0 2 16",key:"e4slt2"}],["path",{d:"M5.71 17.11a17.04 17.04 0 0 1 11.4-11.4",key:"rerf8f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i8=k("PlaneLandingIcon",[["path",{d:"M2 22h20",key:"272qi7"}],["path",{d:"M3.77 10.77 2 9l2-4.5 1.1.55c.55.28.9.84.9 1.45s.35 1.17.9 1.45L8 8.5l3-6 1.05.53a2 2 0 0 1 1.09 1.52l.72 5.4a2 2 0 0 0 1.09 1.52l4.4 2.2c.42.22.78.55 1.01.96l.6 1.03c.49.88-.06 1.98-1.06 2.1l-1.18.15c-.47.06-.95-.02-1.37-.24L4.29 11.15a2 2 0 0 1-.52-.38Z",key:"1ma21e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l8=k("PlaneTakeoffIcon",[["path",{d:"M2 22h20",key:"272qi7"}],["path",{d:"M6.36 17.4 4 17l-2-4 1.1-.55a2 2 0 0 1 1.8 0l.17.1a2 2 0 0 0 1.8 0L8 12 5 6l.9-.45a2 2 0 0 1 2.09.2l4.02 3a2 2 0 0 0 2.1.2l4.19-2.06a2.41 2.41 0 0 1 1.73-.17L21 7a1.4 1.4 0 0 1 .87 1.99l-.38.76c-.23.46-.6.84-1.07 1.08L7.58 17.2a2 2 0 0 1-1.22.18Z",key:"fkigj9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c8=k("PlaneIcon",[["path",{d:"M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z",key:"1v9wt8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const d8=k("PlayCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"10 8 16 12 10 16 10 8",key:"1cimsy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u8=k("PlaySquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m9 8 6 4-6 4Z",key:"f1r3lt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const p8=k("PlayIcon",[["polygon",{points:"5 3 19 12 5 21 5 3",key:"191637"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h8=k("Plug2Icon",[["path",{d:"M9 2v6",key:"17ngun"}],["path",{d:"M15 2v6",key:"s7yy2p"}],["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M5 8h14",key:"pcz4l3"}],["path",{d:"M6 11V8h12v3a6 6 0 1 1-12 0v0Z",key:"nd4hoy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f8=k("PlugZap2Icon",[["path",{d:"m13 2-2 2.5h3L12 7",key:"1me98u"}],["path",{d:"M10 14v-3",key:"1mllf3"}],["path",{d:"M14 14v-3",key:"1l3fkq"}],["path",{d:"M11 19c-1.7 0-3-1.3-3-3v-2h8v2c0 1.7-1.3 3-3 3Z",key:"jd5pat"}],["path",{d:"M12 22v-3",key:"kmzjlo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m8=k("PlugZapIcon",[["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m18 3-4 4h6l-4 4",key:"16psg9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const v8=k("PlugIcon",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y8=k("PlusCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _8=k("PlusSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const g8=k("PlusIcon",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k8=k("PocketKnifeIcon",[["path",{d:"M3 2v1c0 1 2 1 2 2S3 6 3 7s2 1 2 2-2 1-2 2 2 1 2 2",key:"19w3oe"}],["path",{d:"M18 6h.01",key:"1v4wsw"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"M20.83 8.83a4 4 0 0 0-5.66-5.66l-12 12a4 4 0 1 0 5.66 5.66Z",key:"6fykxj"}],["path",{d:"M18 11.66V22a4 4 0 0 0 4-4V6",key:"1utzek"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b8=k("PocketIcon",[["path",{d:"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z",key:"1mz881"}],["polyline",{points:"8 10 12 14 16 10",key:"w4mbv5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w8=k("PodcastIcon",[["circle",{cx:"12",cy:"11",r:"1",key:"1gvufo"}],["path",{d:"M11 17a1 1 0 0 1 2 0c0 .5-.34 3-.5 4.5a.5.5 0 0 1-1 0c-.16-1.5-.5-4-.5-4.5Z",key:"1n5fvv"}],["path",{d:"M8 14a5 5 0 1 1 8 0",key:"fc81rn"}],["path",{d:"M17 18.5a9 9 0 1 0-10 0",key:"jqtxkf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x8=k("PointerOffIcon",[["path",{d:"M10 4.5V4a2 2 0 0 0-2.41-1.957",key:"jsi14n"}],["path",{d:"M13.9 8.4a2 2 0 0 0-1.26-1.295",key:"hirc7f"}],["path",{d:"M21.7 16.2A8 8 0 0 0 22 14v-3a2 2 0 1 0-4 0v-1a2 2 0 0 0-3.63-1.158",key:"1jxb2e"}],["path",{d:"m7 15-1.8-1.8a2 2 0 0 0-2.79 2.86L6 19.7a7.74 7.74 0 0 0 6 2.3h2a8 8 0 0 0 5.657-2.343",key:"10r7hm"}],["path",{d:"M6 6v8",key:"tv5xkp"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M8=k("PointerIcon",[["path",{d:"M22 14a8 8 0 0 1-8 8",key:"56vcr3"}],["path",{d:"M18 11v-1a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0",key:"1pp0yd"}],["path",{d:"M14 10V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1",key:"u654g"}],["path",{d:"M10 9.5V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v10",key:"1e2dtv"}],["path",{d:"M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15",key:"g6ys72"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const C8=k("PopcornIcon",[["path",{d:"M18 8a2 2 0 0 0 0-4 2 2 0 0 0-4 0 2 2 0 0 0-4 0 2 2 0 0 0-4 0 2 2 0 0 0 0 4",key:"10td1f"}],["path",{d:"M10 22 9 8",key:"yjptiv"}],["path",{d:"m14 22 1-14",key:"8jwc8b"}],["path",{d:"M20 8c.5 0 .9.4.8 1l-2.6 12c-.1.5-.7 1-1.2 1H7c-.6 0-1.1-.4-1.2-1L3.2 9c-.1-.6.3-1 .8-1Z",key:"1qo33t"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S8=k("PopsicleIcon",[["path",{d:"M18.6 14.4c.8-.8.8-2 0-2.8l-8.1-8.1a4.95 4.95 0 1 0-7.1 7.1l8.1 8.1c.9.7 2.1.7 2.9-.1Z",key:"1o68ps"}],["path",{d:"m22 22-5.5-5.5",key:"17o70y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I8=k("PoundSterlingIcon",[["path",{d:"M18 7c0-5.333-8-5.333-8 0",key:"1prm2n"}],["path",{d:"M10 7v14",key:"18tmcs"}],["path",{d:"M6 21h12",key:"4dkmi1"}],["path",{d:"M6 13h10",key:"ybwr4a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L8=k("PowerCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 12V6",key:"30zewn"}],["path",{d:"M8 7.5A6.1 6.1 0 0 0 12 18a6 6 0 0 0 4-10.5",key:"1r0tk2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $8=k("PowerOffIcon",[["path",{d:"M18.36 6.64A9 9 0 0 1 20.77 15",key:"dxknvb"}],["path",{d:"M6.16 6.16a9 9 0 1 0 12.68 12.68",key:"1x7qb5"}],["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A8=k("PowerSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 7v5",key:"ma6bk"}],["path",{d:"M8 9a5.14 5.14 0 0 0 4 8 4.95 4.95 0 0 0 4-8",key:"15eubv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const E8=k("PowerIcon",[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const T8=k("PresentationIcon",[["path",{d:"M2 3h20",key:"91anmk"}],["path",{d:"M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3",key:"2k9sn8"}],["path",{d:"m7 21 5-5 5 5",key:"bip4we"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P8=k("PrinterIcon",[["polyline",{points:"6 9 6 2 18 2 18 9",key:"1306q4"}],["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["rect",{width:"12",height:"8",x:"6",y:"14",key:"5ipwut"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D8=k("ProjectorIcon",[["path",{d:"M5 7 3 5",key:"1yys58"}],["path",{d:"M9 6V3",key:"1ptz9u"}],["path",{d:"m13 7 2-2",key:"1w3vmq"}],["circle",{cx:"9",cy:"13",r:"3",key:"1mma13"}],["path",{d:"M11.83 12H20a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h2.17",key:"2frwzc"}],["path",{d:"M16 16h2",key:"dnq2od"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R8=k("PuzzleIcon",[["path",{d:"M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.077.877.528 1.073 1.01a2.5 2.5 0 1 0 3.259-3.259c-.482-.196-.933-.558-1.01-1.073-.05-.336.062-.676.303-.917l1.525-1.525A2.402 2.402 0 0 1 12 1.998c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.237 3.237c-.464.18-.894.527-.967 1.02Z",key:"i0oyt7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O8=k("PyramidIcon",[["path",{d:"M2.5 16.88a1 1 0 0 1-.32-1.43l9-13.02a1 1 0 0 1 1.64 0l9 13.01a1 1 0 0 1-.32 1.44l-8.51 4.86a2 2 0 0 1-1.98 0Z",key:"aenxs0"}],["path",{d:"M12 2v20",key:"t6zp3m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V8=k("QrCodeIcon",[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U8=k("QuoteIcon",[["path",{d:"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z",key:"4rm80e"}],["path",{d:"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z",key:"10za9r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F8=k("RabbitIcon",[["path",{d:"M13 16a3 3 0 0 1 2.24 5",key:"1epib5"}],["path",{d:"M18 12h.01",key:"yjnet6"}],["path",{d:"M18 21h-8a4 4 0 0 1-4-4 7 7 0 0 1 7-7h.2L9.6 6.4a1 1 0 1 1 2.8-2.8L15.8 7h.2c3.3 0 6 2.7 6 6v1a2 2 0 0 1-2 2h-1a3 3 0 0 0-3 3",key:"ue9ozu"}],["path",{d:"M20 8.54V4a2 2 0 1 0-4 0v3",key:"49iql8"}],["path",{d:"M7.612 12.524a3 3 0 1 0-1.6 4.3",key:"1e33i0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j8=k("RadarIcon",[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H8=k("RadiationIcon",[["path",{d:"M12 12h0.01",key:"6ztbls"}],["path",{d:"M7.5 4.2c-.3-.5-.9-.7-1.3-.4C3.9 5.5 2.3 8.1 2 11c-.1.5.4 1 1 1h5c0-1.5.8-2.8 2-3.4-1.1-1.9-2-3.5-2.5-4.4z",key:"wy49g3"}],["path",{d:"M21 12c.6 0 1-.4 1-1-.3-2.9-1.8-5.5-4.1-7.1-.4-.3-1.1-.2-1.3.3-.6.9-1.5 2.5-2.6 4.3 1.2.7 2 2 2 3.5h5z",key:"vklnvr"}],["path",{d:"M7.5 19.8c-.3.5-.1 1.1.4 1.3 2.6 1.2 5.6 1.2 8.2 0 .5-.2.7-.8.4-1.3-.5-.9-1.4-2.5-2.5-4.3-1.2.7-2.8.7-4 0-1.1 1.8-2 3.4-2.5 4.3z",key:"wkdf1o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N8=k("RadioReceiverIcon",[["path",{d:"M5 16v2",key:"g5qcv5"}],["path",{d:"M19 16v2",key:"1gbaio"}],["rect",{width:"20",height:"8",x:"2",y:"8",rx:"2",key:"vjsjur"}],["path",{d:"M18 12h0",key:"1ucjzd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z8=k("RadioTowerIcon",[["path",{d:"M4.9 16.1C1 12.2 1 5.8 4.9 1.9",key:"s0qx1y"}],["path",{d:"M7.8 4.7a6.14 6.14 0 0 0-.8 7.5",key:"1idnkw"}],["circle",{cx:"12",cy:"9",r:"2",key:"1092wv"}],["path",{d:"M16.2 4.8c2 2 2.26 5.11.8 7.47",key:"ojru2q"}],["path",{d:"M19.1 1.9a9.96 9.96 0 0 1 0 14.1",key:"rhi7fg"}],["path",{d:"M9.5 18h5",key:"mfy3pd"}],["path",{d:"m8 22 4-11 4 11",key:"25yftu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B8=k("RadioIcon",[["path",{d:"M4.9 19.1C1 15.2 1 8.8 4.9 4.9",key:"1vaf9d"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5",key:"u1ii0m"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5",key:"1j5fej"}],["path",{d:"M19.1 4.9C23 8.8 23 15.1 19.1 19",key:"10b0cb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q8=k("RadiusIcon",[["path",{d:"M20.34 17.52a10 10 0 1 0-2.82 2.82",key:"fydyku"}],["circle",{cx:"19",cy:"19",r:"2",key:"17f5cg"}],["path",{d:"m13.41 13.41 4.18 4.18",key:"1gqbwc"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W8=k("RailSymbolIcon",[["path",{d:"M5 15h14",key:"m0yey3"}],["path",{d:"M5 9h14",key:"7tsvo6"}],["path",{d:"m14 20-5-5 6-6-5-5",key:"1jo42i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G8=k("RainbowIcon",[["path",{d:"M22 17a10 10 0 0 0-20 0",key:"ozegv"}],["path",{d:"M6 17a6 6 0 0 1 12 0",key:"5giftw"}],["path",{d:"M10 17a2 2 0 0 1 4 0",key:"gnsikk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z8=k("RatIcon",[["path",{d:"M17 5c0-1.7-1.3-3-3-3s-3 1.3-3 3c0 .8.3 1.5.8 2H11c-3.9 0-7 3.1-7 7v0c0 2.2 1.8 4 4 4",key:"16aj0u"}],["path",{d:"M16.8 3.9c.3-.3.6-.5 1-.7 1.5-.6 3.3.1 3.9 1.6.6 1.5-.1 3.3-1.6 3.9l1.6 2.8c.2.3.2.7.2 1-.2.8-.9 1.2-1.7 1.1 0 0-1.6-.3-2.7-.6H17c-1.7 0-3 1.3-3 3",key:"1crdmb"}],["path",{d:"M13.2 18a3 3 0 0 0-2.2-5",key:"1ol3lk"}],["path",{d:"M13 22H4a2 2 0 0 1 0-4h12",key:"bt3f23"}],["path",{d:"M16 9h.01",key:"1bdo4e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K8=k("RatioIcon",[["rect",{width:"12",height:"20",x:"6",y:"2",rx:"2",key:"1oxtiu"}],["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2",key:"9lu3g6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X8=k("ReceiptIcon",[["path",{d:"M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1-2-1Z",key:"wqdwcb"}],["path",{d:"M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8",key:"1h4pet"}],["path",{d:"M12 17V7",key:"pyj7ub"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y8=k("RectangleHorizontalIcon",[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2",key:"9lu3g6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q8=k("RectangleVerticalIcon",[["rect",{width:"12",height:"20",x:"6",y:"2",rx:"2",key:"1oxtiu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J8=k("RecycleIcon",[["path",{d:"M7 19H4.815a1.83 1.83 0 0 1-1.57-.881 1.785 1.785 0 0 1-.004-1.784L7.196 9.5",key:"x6z5xu"}],["path",{d:"M11 19h8.203a1.83 1.83 0 0 0 1.556-.89 1.784 1.784 0 0 0 0-1.775l-1.226-2.12",key:"1x4zh5"}],["path",{d:"m14 16-3 3 3 3",key:"f6jyew"}],["path",{d:"M8.293 13.596 7.196 9.5 3.1 10.598",key:"wf1obh"}],["path",{d:"m9.344 5.811 1.093-1.892A1.83 1.83 0 0 1 11.985 3a1.784 1.784 0 0 1 1.546.888l3.943 6.843",key:"9tzpgr"}],["path",{d:"m13.378 9.633 4.096 1.098 1.097-4.096",key:"1oe83g"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e6=k("Redo2Icon",[["path",{d:"m15 14 5-5-5-5",key:"12vg1m"}],["path",{d:"M20 9H9.5A5.5 5.5 0 0 0 4 14.5v0A5.5 5.5 0 0 0 9.5 20H13",key:"19mnr4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t6=k("RedoDotIcon",[["circle",{cx:"12",cy:"17",r:"1",key:"1ixnty"}],["path",{d:"M21 7v6h-6",key:"3ptur4"}],["path",{d:"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7",key:"1kgawr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const a6=k("RedoIcon",[["path",{d:"M21 7v6h-6",key:"3ptur4"}],["path",{d:"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7",key:"1kgawr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n6=k("RefreshCcwDotIcon",[["path",{d:"M3 2v6h6",key:"18ldww"}],["path",{d:"M21 12A9 9 0 0 0 6 5.3L3 8",key:"1pbrqz"}],["path",{d:"M21 22v-6h-6",key:"usdfbe"}],["path",{d:"M3 12a9 9 0 0 0 15 6.7l3-2.7",key:"1hosoe"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s6=k("RefreshCcwIcon",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o6=k("RefreshCwOffIcon",[["path",{d:"M21 8L18.74 5.74A9.75 9.75 0 0 0 12 3C11 3 10.03 3.16 9.13 3.47",key:"1krf6h"}],["path",{d:"M8 16H3v5",key:"1cv678"}],["path",{d:"M3 12C3 9.51 4 7.26 5.64 5.64",key:"ruvoct"}],["path",{d:"m3 16 2.26 2.26A9.75 9.75 0 0 0 12 21c2.49 0 4.74-1 6.36-2.64",key:"19q130"}],["path",{d:"M21 12c0 1-.16 1.97-.47 2.87",key:"4w8emr"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M22 22 2 2",key:"1r8tn9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r6=k("RefreshCwIcon",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i6=k("RefrigeratorIcon",[["path",{d:"M5 6a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6Z",key:"fpq118"}],["path",{d:"M5 10h14",key:"elsbfy"}],["path",{d:"M15 7v6",key:"1nx30x"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l6=k("RegexIcon",[["path",{d:"M17 3v10",key:"15fgeh"}],["path",{d:"m12.67 5.5 8.66 5",key:"1gpheq"}],["path",{d:"m12.67 10.5 8.66-5",key:"1dkfa6"}],["path",{d:"M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z",key:"swwfx4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c6=k("RemoveFormattingIcon",[["path",{d:"M4 7V4h16v3",key:"9msm58"}],["path",{d:"M5 20h6",key:"1h6pxn"}],["path",{d:"M13 4 8 20",key:"kqq6aj"}],["path",{d:"m15 15 5 5",key:"me55sn"}],["path",{d:"m20 15-5 5",key:"11p7ol"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const d6=k("Repeat1Icon",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}],["path",{d:"M11 10h1v4",key:"70cz1p"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u6=k("Repeat2Icon",[["path",{d:"m2 9 3-3 3 3",key:"1ltn5i"}],["path",{d:"M13 18H7a2 2 0 0 1-2-2V6",key:"1r6tfw"}],["path",{d:"m22 15-3 3-3-3",key:"4rnwn2"}],["path",{d:"M11 6h6a2 2 0 0 1 2 2v10",key:"2f72bc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const p6=k("RepeatIcon",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h6=k("ReplaceAllIcon",[["path",{d:"M14 4c0-1.1.9-2 2-2",key:"1mvvbw"}],["path",{d:"M20 2c1.1 0 2 .9 2 2",key:"1mj6oe"}],["path",{d:"M22 8c0 1.1-.9 2-2 2",key:"v1wql3"}],["path",{d:"M16 10c-1.1 0-2-.9-2-2",key:"821ux0"}],["path",{d:"m3 7 3 3 3-3",key:"x25e72"}],["path",{d:"M6 10V5c0-1.7 1.3-3 3-3h1",key:"13af7h"}],["rect",{width:"8",height:"8",x:"2",y:"14",rx:"2",key:"17ihk4"}],["path",{d:"M14 14c1.1 0 2 .9 2 2v4c0 1.1-.9 2-2 2",key:"1w9p8c"}],["path",{d:"M20 14c1.1 0 2 .9 2 2v4c0 1.1-.9 2-2 2",key:"m45eaa"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f6=k("ReplaceIcon",[["path",{d:"M14 4c0-1.1.9-2 2-2",key:"1mvvbw"}],["path",{d:"M20 2c1.1 0 2 .9 2 2",key:"1mj6oe"}],["path",{d:"M22 8c0 1.1-.9 2-2 2",key:"v1wql3"}],["path",{d:"M16 10c-1.1 0-2-.9-2-2",key:"821ux0"}],["path",{d:"m3 7 3 3 3-3",key:"x25e72"}],["path",{d:"M6 10V5c0-1.7 1.3-3 3-3h1",key:"13af7h"}],["rect",{width:"8",height:"8",x:"2",y:"14",rx:"2",key:"17ihk4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m6=k("ReplyAllIcon",[["polyline",{points:"7 17 2 12 7 7",key:"t83bqg"}],["polyline",{points:"12 17 7 12 12 7",key:"1g4ajm"}],["path",{d:"M22 18v-2a4 4 0 0 0-4-4H7",key:"1fcyog"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const v6=k("ReplyIcon",[["polyline",{points:"9 17 4 12 9 7",key:"hvgpf2"}],["path",{d:"M20 18v-2a4 4 0 0 0-4-4H4",key:"5vmcpk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y6=k("RewindIcon",[["polygon",{points:"11 19 2 12 11 5 11 19",key:"14yba5"}],["polygon",{points:"22 19 13 12 22 5 22 19",key:"1pi1cj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _6=k("RibbonIcon",[["path",{d:"M17.75 9.01c-.52 2.08-1.83 3.64-3.18 5.49l-2.6 3.54-2.97 4-3.5-2.54 3.85-4.97c-1.86-2.61-2.8-3.77-3.16-5.44",key:"1njedg"}],["path",{d:"M17.75 9.01A7 7 0 0 0 6.2 9.1C6.06 8.5 6 7.82 6 7c0-3.5 2.83-5 5.98-5C15.24 2 18 3.5 18 7c0 .73-.09 1.4-.25 2.01Z",key:"10len7"}],["path",{d:"m9.35 14.53 2.64-3.31",key:"1wfi09"}],["path",{d:"m11.97 18.04 2.99 4 3.54-2.54-3.93-5",key:"1ezyge"}],["path",{d:"M14 8c0 1-1 2-2.01 3.22C11 10 10 9 10 8a2 2 0 1 1 4 0",key:"aw0zq5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const g6=k("RocketIcon",[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k6=k("RockingChairIcon",[["polyline",{points:"3.5 2 6.5 12.5 18 12.5",key:"y3iy52"}],["line",{x1:"9.5",x2:"5.5",y1:"12.5",y2:"20",key:"19vg5i"}],["line",{x1:"15",x2:"18.5",y1:"12.5",y2:"20",key:"1inpmv"}],["path",{d:"M2.75 18a13 13 0 0 0 18.5 0",key:"1nquas"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b6=k("RollerCoasterIcon",[["path",{d:"M6 19V5",key:"1r845m"}],["path",{d:"M10 19V6.8",key:"9j2tfs"}],["path",{d:"M14 19v-7.8",key:"10s8qv"}],["path",{d:"M18 5v4",key:"1tajlv"}],["path",{d:"M18 19v-6",key:"ielfq3"}],["path",{d:"M22 19V9",key:"158nzp"}],["path",{d:"M2 19V9a4 4 0 0 1 4-4c2 0 4 1.33 6 4s4 4 6 4a4 4 0 1 0-3-6.65",key:"1930oh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sl=k("Rotate3dIcon",[["path",{d:"M16.466 7.5C15.643 4.237 13.952 2 12 2 9.239 2 7 6.477 7 12s2.239 10 5 10c.342 0 .677-.069 1-.2",key:"10n0gc"}],["path",{d:"m15.194 13.707 3.814 1.86-1.86 3.814",key:"16shm9"}],["path",{d:"M19 15.57c-1.804.885-4.274 1.43-7 1.43-5.523 0-10-2.239-10-5s4.477-5 10-5c4.838 0 8.873 1.718 9.8 4",key:"1lxi77"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w6=k("RotateCcwIcon",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x6=k("RotateCwIcon",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M6=k("RouteOffIcon",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5c.4 0 .9-.1 1.3-.2",key:"1effex"}],["path",{d:"M5.2 5.2A3.5 3.53 0 0 0 6.5 12H12",key:"k9y2ds"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M21 15.3a3.5 3.5 0 0 0-3.3-3.3",key:"11nlu2"}],["path",{d:"M15 5h-4.3",key:"6537je"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const C6=k("RouteIcon",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S6=k("RouterIcon",[["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",key:"w68u3i"}],["path",{d:"M6.01 18H6",key:"19vcac"}],["path",{d:"M10.01 18H10",key:"uamcmx"}],["path",{d:"M15 10v4",key:"qjz1xs"}],["path",{d:"M17.84 7.17a4 4 0 0 0-5.66 0",key:"1rif40"}],["path",{d:"M20.66 4.34a8 8 0 0 0-11.31 0",key:"6a5xfq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ol=k("Rows2Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 12h18",key:"1i2n21"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rl=k("Rows3Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M21 9H3",key:"1338ky"}],["path",{d:"M21 15H3",key:"9uk58r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I6=k("Rows4Icon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M21 7.5H3",key:"1hm9pq"}],["path",{d:"M21 12H3",key:"2avoz0"}],["path",{d:"M21 16.5H3",key:"n7jzkj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L6=k("RssIcon",[["path",{d:"M4 11a9 9 0 0 1 9 9",key:"pv89mb"}],["path",{d:"M4 4a16 16 0 0 1 16 16",key:"k0647b"}],["circle",{cx:"5",cy:"19",r:"1",key:"bfqh0e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $6=k("RulerIcon",[["path",{d:"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z",key:"icamh8"}],["path",{d:"m14.5 12.5 2-2",key:"inckbg"}],["path",{d:"m11.5 9.5 2-2",key:"fmmyf7"}],["path",{d:"m8.5 6.5 2-2",key:"vc6u1g"}],["path",{d:"m17.5 15.5 2-2",key:"wo5hmg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A6=k("RussianRubleIcon",[["path",{d:"M6 11h8a4 4 0 0 0 0-8H9v18",key:"18ai8t"}],["path",{d:"M6 15h8",key:"1y8f6l"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const E6=k("SailboatIcon",[["path",{d:"M22 18H2a4 4 0 0 0 4 4h12a4 4 0 0 0 4-4Z",key:"1404fh"}],["path",{d:"M21 14 10 2 3 14h18Z",key:"1nzg7v"}],["path",{d:"M10 2v16",key:"1labyt"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const T6=k("SaladIcon",[["path",{d:"M7 21h10",key:"1b0cd5"}],["path",{d:"M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z",key:"4rw317"}],["path",{d:"M11.38 12a2.4 2.4 0 0 1-.4-4.77 2.4 2.4 0 0 1 3.2-2.77 2.4 2.4 0 0 1 3.47-.63 2.4 2.4 0 0 1 3.37 3.37 2.4 2.4 0 0 1-1.1 3.7 2.51 2.51 0 0 1 .03 1.1",key:"10xrj0"}],["path",{d:"m13 12 4-4",key:"1hckqy"}],["path",{d:"M10.9 7.25A3.99 3.99 0 0 0 4 10c0 .73.2 1.41.54 2",key:"1p4srx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P6=k("SandwichIcon",[["path",{d:"M3 11v3a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-3",key:"34v9d7"}],["path",{d:"M12 19H4a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-3.83",key:"1k5vfb"}],["path",{d:"m3 11 7.77-6.04a2 2 0 0 1 2.46 0L21 11H3Z",key:"1oe7l6"}],["path",{d:"M12.97 19.77 7 15h12.5l-3.75 4.5a2 2 0 0 1-2.78.27Z",key:"1ts2ri"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D6=k("SatelliteDishIcon",[["path",{d:"M4 10a7.31 7.31 0 0 0 10 10Z",key:"1fzpp3"}],["path",{d:"m9 15 3-3",key:"88sc13"}],["path",{d:"M17 13a6 6 0 0 0-6-6",key:"15cc6u"}],["path",{d:"M21 13A10 10 0 0 0 11 3",key:"11nf8s"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R6=k("SatelliteIcon",[["path",{d:"M13 7 9 3 5 7l4 4",key:"vyckw6"}],["path",{d:"m17 11 4 4-4 4-4-4",key:"rchckc"}],["path",{d:"m8 12 4 4 6-6-4-4Z",key:"1sshf7"}],["path",{d:"m16 8 3-3",key:"x428zp"}],["path",{d:"M9 21a6 6 0 0 0-6-6",key:"1iajcf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O6=k("SaveAllIcon",[["path",{d:"M6 4a2 2 0 0 1 2-2h10l4 4v10.2a2 2 0 0 1-2 1.8H8a2 2 0 0 1-2-2Z",key:"1unput"}],["path",{d:"M10 2v4h6",key:"1p5sg6"}],["path",{d:"M18 18v-7h-8v7",key:"1oniuk"}],["path",{d:"M18 22H4a2 2 0 0 1-2-2V6",key:"pblm9e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V6=k("SaveIcon",[["path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z",key:"1owoqh"}],["polyline",{points:"17 21 17 13 7 13 7 21",key:"1md35c"}],["polyline",{points:"7 3 7 8 15 8",key:"8nz8an"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const il=k("Scale3dIcon",[["circle",{cx:"19",cy:"19",r:"2",key:"17f5cg"}],["circle",{cx:"5",cy:"5",r:"2",key:"1gwv83"}],["path",{d:"M5 7v12h12",key:"vtaa4r"}],["path",{d:"m5 19 6-6",key:"jh6hbb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U6=k("ScaleIcon",[["path",{d:"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"7g6ntu"}],["path",{d:"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"ijws7r"}],["path",{d:"M7 21h10",key:"1b0cd5"}],["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2",key:"3gwbw2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F6=k("ScalingIcon",[["path",{d:"M21 3 9 15",key:"15kdhq"}],["path",{d:"M12 3H3v18h18v-9",key:"8suug0"}],["path",{d:"M16 3h5v5",key:"1806ms"}],["path",{d:"M14 15H9v-5",key:"pi4jk9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j6=k("ScanBarcodeIcon",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["path",{d:"M8 7v10",key:"23sfjj"}],["path",{d:"M12 7v10",key:"jspqdw"}],["path",{d:"M17 7v10",key:"578dap"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H6=k("ScanEyeIcon",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["path",{d:"M5 12s2.5-5 7-5 7 5 7 5-2.5 5-7 5-7-5-7-5",key:"nhuolu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N6=k("ScanFaceIcon",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["path",{d:"M9 9h.01",key:"1q5me6"}],["path",{d:"M15 9h.01",key:"x1ddxp"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z6=k("ScanLineIcon",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["path",{d:"M7 12h10",key:"b7w52i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B6=k("ScanSearchIcon",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"m16 16-1.9-1.9",key:"1dq9hf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q6=k("ScanTextIcon",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["path",{d:"M7 8h8",key:"1jbsf9"}],["path",{d:"M7 12h10",key:"b7w52i"}],["path",{d:"M7 16h6",key:"1vyc9m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W6=k("ScanIcon",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G6=k("ScatterChartIcon",[["circle",{cx:"7.5",cy:"7.5",r:".5",key:"1x97lo"}],["circle",{cx:"18.5",cy:"5.5",r:".5",key:"56iowl"}],["circle",{cx:"11.5",cy:"11.5",r:".5",key:"m9xkw9"}],["circle",{cx:"7.5",cy:"16.5",r:".5",key:"14ln9z"}],["circle",{cx:"17.5",cy:"14.5",r:".5",key:"14qxqt"}],["path",{d:"M3 3v18h18",key:"1s2lah"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z6=k("School2Icon",[["circle",{cx:"12",cy:"10",r:"1",key:"1gnqs8"}],["path",{d:"M22 20V8h-4l-6-4-6 4H2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2Z",key:"8z0lq4"}],["path",{d:"M6 17v.01",key:"roodi6"}],["path",{d:"M6 13v.01",key:"67c122"}],["path",{d:"M18 17v.01",key:"12ktxm"}],["path",{d:"M18 13v.01",key:"tn1rt1"}],["path",{d:"M14 22v-5a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v5",key:"jfgdp0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K6=k("SchoolIcon",[["path",{d:"m4 6 8-4 8 4",key:"1q0ilc"}],["path",{d:"m18 10 4 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-8l4-2",key:"1vwozw"}],["path",{d:"M14 22v-4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v4",key:"cpkuc4"}],["path",{d:"M18 5v17",key:"1sw6gf"}],["path",{d:"M6 5v17",key:"1xfsm0"}],["circle",{cx:"12",cy:"9",r:"2",key:"1092wv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X6=k("ScissorsLineDashedIcon",[["path",{d:"M5.42 9.42 8 12",key:"12pkuq"}],["circle",{cx:"4",cy:"8",r:"2",key:"107mxr"}],["path",{d:"m14 6-8.58 8.58",key:"gvzu5l"}],["circle",{cx:"4",cy:"16",r:"2",key:"1ehqvc"}],["path",{d:"M10.8 14.8 14 18",key:"ax7m9r"}],["path",{d:"M16 12h-2",key:"10asgb"}],["path",{d:"M22 12h-2",key:"14jgyd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y6=k("ScissorsSquareDashedBottomIcon",[["path",{d:"M4 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2",key:"1vzg26"}],["path",{d:"M10 22H8",key:"euku7a"}],["path",{d:"M16 22h-2",key:"18d249"}],["circle",{cx:"8",cy:"8",r:"2",key:"14cg06"}],["path",{d:"M9.414 9.414 12 12",key:"qz4lzr"}],["path",{d:"M14.8 14.8 18 18",key:"11flf1"}],["circle",{cx:"8",cy:"16",r:"2",key:"1acxsx"}],["path",{d:"m18 6-8.586 8.586",key:"11kzk1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q6=k("ScissorsSquareIcon",[["rect",{width:"20",height:"20",x:"2",y:"2",rx:"2",key:"1btzen"}],["circle",{cx:"8",cy:"8",r:"2",key:"14cg06"}],["path",{d:"M9.414 9.414 12 12",key:"qz4lzr"}],["path",{d:"M14.8 14.8 18 18",key:"11flf1"}],["circle",{cx:"8",cy:"16",r:"2",key:"1acxsx"}],["path",{d:"m18 6-8.586 8.586",key:"11kzk1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J6=k("ScissorsIcon",[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M8.12 8.12 12 12",key:"1alkpv"}],["path",{d:"M20 4 8.12 15.88",key:"xgtan2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M14.8 14.8 20 20",key:"ptml3r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const eM=k("ScreenShareOffIcon",[["path",{d:"M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3",key:"i8wdob"}],["path",{d:"M8 21h8",key:"1ev6f3"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"m22 3-5 5",key:"12jva0"}],["path",{d:"m17 3 5 5",key:"k36vhe"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tM=k("ScreenShareIcon",[["path",{d:"M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3",key:"i8wdob"}],["path",{d:"M8 21h8",key:"1ev6f3"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"m17 8 5-5",key:"fqif7o"}],["path",{d:"M17 3h5v5",key:"1o3tu8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const aM=k("ScrollTextIcon",[["path",{d:"M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4",key:"13a6an"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M15 12h-5",key:"r7krc0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nM=k("ScrollIcon",[["path",{d:"M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4",key:"13a6an"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sM=k("SearchCheckIcon",[["path",{d:"m8 11 2 2 4-4",key:"1sed1v"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oM=k("SearchCodeIcon",[["path",{d:"m9 9-2 2 2 2",key:"17gsfh"}],["path",{d:"m13 13 2-2-2-2",key:"186z8k"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rM=k("SearchSlashIcon",[["path",{d:"m13.5 8.5-5 5",key:"1cs55j"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iM=k("SearchXIcon",[["path",{d:"m13.5 8.5-5 5",key:"1cs55j"}],["path",{d:"m8.5 8.5 5 5",key:"a8mexj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lM=k("SearchIcon",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ll=k("SendHorizontalIcon",[["path",{d:"m3 3 3 9-3 9 19-9Z",key:"1aobqy"}],["path",{d:"M6 12h16",key:"s4cdu5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cM=k("SendToBackIcon",[["rect",{x:"14",y:"14",width:"8",height:"8",rx:"2",key:"1b0bso"}],["rect",{x:"2",y:"2",width:"8",height:"8",rx:"2",key:"1x09vl"}],["path",{d:"M7 14v1a2 2 0 0 0 2 2h1",key:"pao6x6"}],["path",{d:"M14 7h1a2 2 0 0 1 2 2v1",key:"19tdru"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dM=k("SendIcon",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uM=k("SeparatorHorizontalIcon",[["line",{x1:"3",x2:"21",y1:"12",y2:"12",key:"10d38w"}],["polyline",{points:"8 8 12 4 16 8",key:"zo8t4w"}],["polyline",{points:"16 16 12 20 8 16",key:"1oyrid"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pM=k("SeparatorVerticalIcon",[["line",{x1:"12",x2:"12",y1:"3",y2:"21",key:"1efggb"}],["polyline",{points:"8 8 4 12 8 16",key:"bnfmv4"}],["polyline",{points:"16 16 20 12 16 8",key:"u90052"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hM=k("ServerCogIcon",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5",key:"tn8das"}],["path",{d:"M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5",key:"1g2pve"}],["path",{d:"M6 6h.01",key:"1utrut"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"m15.7 13.4-.9-.3",key:"1jwmzr"}],["path",{d:"m9.2 10.9-.9-.3",key:"qapnim"}],["path",{d:"m10.6 15.7.3-.9",key:"quwk0k"}],["path",{d:"m13.6 15.7-.4-1",key:"cb9xp7"}],["path",{d:"m10.8 9.3-.4-1",key:"1uaiz5"}],["path",{d:"m8.3 13.6 1-.4",key:"s6srou"}],["path",{d:"m14.7 10.8 1-.4",key:"4d31cq"}],["path",{d:"m13.4 8.3-.3.9",key:"1bm987"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fM=k("ServerCrashIcon",[["path",{d:"M6 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2",key:"4b9dqc"}],["path",{d:"M6 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-2",key:"22nnkd"}],["path",{d:"M6 6h.01",key:"1utrut"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"m13 6-4 6h6l-4 6",key:"14hqih"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mM=k("ServerOffIcon",[["path",{d:"M7 2h13a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-5",key:"bt2siv"}],["path",{d:"M10 10 2.5 2.5C2 2 2 2.5 2 5v3a2 2 0 0 0 2 2h6z",key:"1hjrv1"}],["path",{d:"M22 17v-1a2 2 0 0 0-2-2h-1",key:"1iynyr"}],["path",{d:"M4 14a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16.5l1-.5.5.5-8-8H4z",key:"161ggg"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vM=k("ServerIcon",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yM=k("Settings2Icon",[["path",{d:"M20 7h-9",key:"3s1dr2"}],["path",{d:"M14 17H5",key:"gfn3mx"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _M=k("SettingsIcon",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gM=k("ShapesIcon",[["path",{d:"M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z",key:"1bo67w"}],["rect",{x:"3",y:"14",width:"7",height:"7",rx:"1",key:"1bkyp8"}],["circle",{cx:"17.5",cy:"17.5",r:"3.5",key:"w3z12y"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kM=k("Share2Icon",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bM=k("ShareIcon",[["path",{d:"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8",key:"1b2hhj"}],["polyline",{points:"16 6 12 2 8 6",key:"m901s6"}],["line",{x1:"12",x2:"12",y1:"2",y2:"15",key:"1p0rca"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wM=k("SheetIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["line",{x1:"3",x2:"21",y1:"9",y2:"9",key:"1vqk6q"}],["line",{x1:"3",x2:"21",y1:"15",y2:"15",key:"o2sbyz"}],["line",{x1:"9",x2:"9",y1:"9",y2:"21",key:"1ib60c"}],["line",{x1:"15",x2:"15",y1:"9",y2:"21",key:"1n26ft"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xM=k("ShellIcon",[["path",{d:"M14 11a2 2 0 1 1-4 0 4 4 0 0 1 8 0 6 6 0 0 1-12 0 8 8 0 0 1 16 0 10 10 0 1 1-20 0 11.93 11.93 0 0 1 2.42-7.22 2 2 0 1 1 3.16 2.44",key:"1cn552"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const MM=k("ShieldAlertIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const CM=k("ShieldBanIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"m4 5 14 12",key:"1ta6nf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const SM=k("ShieldCheckIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const IM=k("ShieldEllipsisIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M12 11h.01",key:"z322tv"}],["path",{d:"M16 11h.01",key:"xkw8gn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const LM=k("ShieldHalfIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"M12 22V2",key:"zs6s6o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $M=k("ShieldMinusIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"M8 11h8",key:"vwpz6n"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const AM=k("ShieldOffIcon",[["path",{d:"M19.7 14a6.9 6.9 0 0 0 .3-2V5l-8-3-3.2 1.2",key:"342pvf"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M4.7 4.7 4 5v7c0 6 8 10 8 10a20.3 20.3 0 0 0 5.62-4.38",key:"p0ycf4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const EM=k("ShieldPlusIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"M8 11h8",key:"vwpz6n"}],["path",{d:"M12 15V7",key:"1ycneb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const TM=k("ShieldQuestionIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3",key:"mhlwft"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cl=k("ShieldXIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}],["path",{d:"m14.5 9-5 5",key:"1m49dw"}],["path",{d:"m9.5 9 5 5",key:"wyx7zg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const PM=k("ShieldIcon",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const DM=k("ShipWheelIcon",[["circle",{cx:"12",cy:"12",r:"8",key:"46899m"}],["path",{d:"M12 2v7.5",key:"1e5rl5"}],["path",{d:"m19 5-5.23 5.23",key:"1ezxxf"}],["path",{d:"M22 12h-7.5",key:"le1719"}],["path",{d:"m19 19-5.23-5.23",key:"p3fmgn"}],["path",{d:"M12 14.5V22",key:"dgcmos"}],["path",{d:"M10.23 13.77 5 19",key:"qwopd4"}],["path",{d:"M9.5 12H2",key:"r7bup8"}],["path",{d:"M10.23 10.23 5 5",key:"k2y7lj"}],["circle",{cx:"12",cy:"12",r:"2.5",key:"ix0uyj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const RM=k("ShipIcon",[["path",{d:"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1 .6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"iegodh"}],["path",{d:"M19.38 20A11.6 11.6 0 0 0 21 14l-9-4-9 4c0 2.9.94 5.34 2.81 7.76",key:"fp8vka"}],["path",{d:"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6",key:"qpkstq"}],["path",{d:"M12 10v4",key:"1kjpxc"}],["path",{d:"M12 2v3",key:"qbqxhf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const OM=k("ShirtIcon",[["path",{d:"M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z",key:"1wgbhj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const VM=k("ShoppingBagIcon",[["path",{d:"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z",key:"hou9p0"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M16 10a4 4 0 0 1-8 0",key:"1ltviw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const UM=k("ShoppingBasketIcon",[["path",{d:"m5 11 4-7",key:"116ra9"}],["path",{d:"m19 11-4-7",key:"cnml18"}],["path",{d:"M2 11h20",key:"3eubbj"}],["path",{d:"m3.5 11 1.6 7.4a2 2 0 0 0 2 1.6h9.8c.9 0 1.8-.7 2-1.6l1.7-7.4",key:"1x2lvw"}],["path",{d:"m9 11 1 9",key:"1ojof7"}],["path",{d:"M4.5 15.5h15",key:"13mye1"}],["path",{d:"m15 11-1 9",key:"5wnq3a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const FM=k("ShoppingCartIcon",[["circle",{cx:"8",cy:"21",r:"1",key:"jimo8o"}],["circle",{cx:"19",cy:"21",r:"1",key:"13723u"}],["path",{d:"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12",key:"9zh506"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jM=k("ShovelIcon",[["path",{d:"M2 22v-5l5-5 5 5-5 5z",key:"1fh25c"}],["path",{d:"M9.5 14.5 16 8",key:"1smz5x"}],["path",{d:"m17 2 5 5-.5.5a3.53 3.53 0 0 1-5 0s0 0 0 0a3.53 3.53 0 0 1 0-5L17 2",key:"1q8uv5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const HM=k("ShowerHeadIcon",[["path",{d:"m4 4 2.5 2.5",key:"uv2vmf"}],["path",{d:"M13.5 6.5a4.95 4.95 0 0 0-7 7",key:"frdkwv"}],["path",{d:"M15 5 5 15",key:"1ag8rq"}],["path",{d:"M14 17v.01",key:"eokfpp"}],["path",{d:"M10 16v.01",key:"14uyyl"}],["path",{d:"M13 13v.01",key:"1v1k97"}],["path",{d:"M16 10v.01",key:"5169yg"}],["path",{d:"M11 20v.01",key:"cj92p8"}],["path",{d:"M17 14v.01",key:"11cswd"}],["path",{d:"M20 11v.01",key:"19e0od"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const NM=k("ShrinkIcon",[["path",{d:"m15 15 6 6m-6-6v4.8m0-4.8h4.8",key:"17vawe"}],["path",{d:"M9 19.8V15m0 0H4.2M9 15l-6 6",key:"chjx8e"}],["path",{d:"M15 4.2V9m0 0h4.8M15 9l6-6",key:"lav6yq"}],["path",{d:"M9 4.2V9m0 0H4.2M9 9 3 3",key:"1pxi2q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zM=k("ShrubIcon",[["path",{d:"M12 22v-7l-2-2",key:"eqv9mc"}],["path",{d:"M17 8v.8A6 6 0 0 1 13.8 20v0H10v0A6.5 6.5 0 0 1 7 8h0a5 5 0 0 1 10 0Z",key:"12jcau"}],["path",{d:"m14 14-2 2",key:"847xa2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const BM=k("ShuffleIcon",[["path",{d:"M2 18h1.4c1.3 0 2.5-.6 3.3-1.7l6.1-8.6c.7-1.1 2-1.7 3.3-1.7H22",key:"1wmou1"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 6h1.9c1.5 0 2.9.9 3.6 2.2",key:"10bdb2"}],["path",{d:"M22 18h-5.9c-1.3 0-2.6-.7-3.3-1.8l-.5-.8",key:"vgxac0"}],["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qM=k("SigmaSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M16 8.9V7H8l4 5-4 5h8v-1.9",key:"9nih0i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const WM=k("SigmaIcon",[["path",{d:"M18 7V4H6l6 8-6 8h12v-3",key:"zis8ev"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const GM=k("SignalHighIcon",[["path",{d:"M2 20h.01",key:"4haj6o"}],["path",{d:"M7 20v-4",key:"j294jx"}],["path",{d:"M12 20v-8",key:"i3yub9"}],["path",{d:"M17 20V8",key:"1tkaf5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ZM=k("SignalLowIcon",[["path",{d:"M2 20h.01",key:"4haj6o"}],["path",{d:"M7 20v-4",key:"j294jx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const KM=k("SignalMediumIcon",[["path",{d:"M2 20h.01",key:"4haj6o"}],["path",{d:"M7 20v-4",key:"j294jx"}],["path",{d:"M12 20v-8",key:"i3yub9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const XM=k("SignalZeroIcon",[["path",{d:"M2 20h.01",key:"4haj6o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const YM=k("SignalIcon",[["path",{d:"M2 20h.01",key:"4haj6o"}],["path",{d:"M7 20v-4",key:"j294jx"}],["path",{d:"M12 20v-8",key:"i3yub9"}],["path",{d:"M17 20V8",key:"1tkaf5"}],["path",{d:"M22 4v16",key:"sih9yq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const QM=k("SignpostBigIcon",[["path",{d:"M10 9H4L2 7l2-2h6",key:"1hq7x2"}],["path",{d:"M14 5h6l2 2-2 2h-6",key:"bv62ej"}],["path",{d:"M10 22V4a2 2 0 1 1 4 0v18",key:"eqpcf2"}],["path",{d:"M8 22h8",key:"rmew8v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const JM=k("SignpostIcon",[["path",{d:"M12 3v3",key:"1n5kay"}],["path",{d:"M18.5 13h-13L2 9.5 5.5 6h13L22 9.5Z",key:"27os56"}],["path",{d:"M12 13v8",key:"1l5pq0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e7=k("SirenIcon",[["path",{d:"M7 12a5 5 0 0 1 5-5v0a5 5 0 0 1 5 5v6H7v-6Z",key:"rmc51c"}],["path",{d:"M5 20a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v2H5v-2Z",key:"yyvmjy"}],["path",{d:"M21 12h1",key:"jtio3y"}],["path",{d:"M18.5 4.5 18 5",key:"g5sp9y"}],["path",{d:"M2 12h1",key:"1uaihz"}],["path",{d:"M12 2v1",key:"11qlp1"}],["path",{d:"m4.929 4.929.707.707",key:"1i51kw"}],["path",{d:"M12 12v6",key:"3ahymv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t7=k("SkipBackIcon",[["polygon",{points:"19 20 9 12 19 4 19 20",key:"o2sva"}],["line",{x1:"5",x2:"5",y1:"19",y2:"5",key:"1ocqjk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const a7=k("SkipForwardIcon",[["polygon",{points:"5 4 15 12 5 20 5 4",key:"16p6eg"}],["line",{x1:"19",x2:"19",y1:"5",y2:"19",key:"futhcm"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n7=k("SkullIcon",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["path",{d:"M8 20v2h8v-2",key:"ded4og"}],["path",{d:"m12.5 17-.5-1-.5 1h1z",key:"3me087"}],["path",{d:"M16 20a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20",key:"xq9p5u"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s7=k("SlackIcon",[["rect",{width:"3",height:"8",x:"13",y:"2",rx:"1.5",key:"diqz80"}],["path",{d:"M19 8.5V10h1.5A1.5 1.5 0 1 0 19 8.5",key:"183iwg"}],["rect",{width:"3",height:"8",x:"8",y:"14",rx:"1.5",key:"hqg7r1"}],["path",{d:"M5 15.5V14H3.5A1.5 1.5 0 1 0 5 15.5",key:"76g71w"}],["rect",{width:"8",height:"3",x:"14",y:"13",rx:"1.5",key:"1kmz0a"}],["path",{d:"M15.5 19H14v1.5a1.5 1.5 0 1 0 1.5-1.5",key:"jc4sz0"}],["rect",{width:"8",height:"3",x:"2",y:"8",rx:"1.5",key:"1omvl4"}],["path",{d:"M8.5 5H10V3.5A1.5 1.5 0 1 0 8.5 5",key:"16f3cl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o7=k("SlashIcon",[["path",{d:"M22 2 2 22",key:"y4kqgn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r7=k("SliceIcon",[["path",{d:"m8 14-6 6h9v-3",key:"zo3j9a"}],["path",{d:"M18.37 3.63 8 14l3 3L21.37 6.63a2.12 2.12 0 1 0-3-3Z",key:"1dzx0j"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i7=k("SlidersHorizontalIcon",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l7=k("SlidersIcon",[["line",{x1:"4",x2:"4",y1:"21",y2:"14",key:"1p332r"}],["line",{x1:"4",x2:"4",y1:"10",y2:"3",key:"gb41h5"}],["line",{x1:"12",x2:"12",y1:"21",y2:"12",key:"hf2csr"}],["line",{x1:"12",x2:"12",y1:"8",y2:"3",key:"1kfi7u"}],["line",{x1:"20",x2:"20",y1:"21",y2:"16",key:"1lhrwl"}],["line",{x1:"20",x2:"20",y1:"12",y2:"3",key:"16vvfq"}],["line",{x1:"2",x2:"6",y1:"14",y2:"14",key:"1uebub"}],["line",{x1:"10",x2:"14",y1:"8",y2:"8",key:"1yglbp"}],["line",{x1:"18",x2:"22",y1:"16",y2:"16",key:"1jxqpz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c7=k("SmartphoneChargingIcon",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12.667 8 10 12h4l-2.667 4",key:"h9lk2d"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const d7=k("SmartphoneNfcIcon",[["rect",{width:"7",height:"12",x:"2",y:"6",rx:"1",key:"5nje8w"}],["path",{d:"M13 8.32a7.43 7.43 0 0 1 0 7.36",key:"1g306n"}],["path",{d:"M16.46 6.21a11.76 11.76 0 0 1 0 11.58",key:"uqvjvo"}],["path",{d:"M19.91 4.1a15.91 15.91 0 0 1 .01 15.8",key:"ujntz3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u7=k("SmartphoneIcon",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const p7=k("SmilePlusIcon",[["path",{d:"M22 11v1a10 10 0 1 1-9-10",key:"ew0xw9"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}],["path",{d:"M16 5h6",key:"1vod17"}],["path",{d:"M19 2v6",key:"4bpg5p"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h7=k("SmileIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f7=k("SnailIcon",[["path",{d:"M2 13a6 6 0 1 0 12 0 4 4 0 1 0-8 0 2 2 0 0 0 4 0",key:"hneq2s"}],["circle",{cx:"10",cy:"13",r:"8",key:"194lz3"}],["path",{d:"M2 21h12c4.4 0 8-3.6 8-8V7a2 2 0 1 0-4 0v6",key:"ixqyt7"}],["path",{d:"M18 3 19.1 5.2",key:"9tjm43"}],["path",{d:"M22 3 20.9 5.2",key:"j3odrs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m7=k("SnowflakeIcon",[["line",{x1:"2",x2:"22",y1:"12",y2:"12",key:"1dnqot"}],["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"m20 16-4-4 4-4",key:"rquw4f"}],["path",{d:"m4 8 4 4-4 4",key:"12s3z9"}],["path",{d:"m16 4-4 4-4-4",key:"1tumq1"}],["path",{d:"m8 20 4-4 4 4",key:"9p200w"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const v7=k("SofaIcon",[["path",{d:"M20 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v3",key:"1dgpiv"}],["path",{d:"M2 11v5a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H6v-2a2 2 0 0 0-4 0Z",key:"u5qfb7"}],["path",{d:"M4 18v2",key:"jwo5n2"}],["path",{d:"M20 18v2",key:"1ar1qi"}],["path",{d:"M12 4v9",key:"oqhhn3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y7=k("SoupIcon",[["path",{d:"M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z",key:"4rw317"}],["path",{d:"M7 21h10",key:"1b0cd5"}],["path",{d:"M19.5 12 22 6",key:"shfsr5"}],["path",{d:"M16.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.73 1.62",key:"rpc6vp"}],["path",{d:"M11.25 3c.27.1.8.53.74 1.36-.05.83-.93 1.2-.98 2.02-.06.78.33 1.24.72 1.62",key:"1lf63m"}],["path",{d:"M6.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.74 1.62",key:"97tijn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _7=k("SpaceIcon",[["path",{d:"M22 17v1c0 .5-.5 1-1 1H3c-.5 0-1-.5-1-1v-1",key:"lt2kga"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const g7=k("SpadeIcon",[["path",{d:"M5 9c-1.5 1.5-3 3.2-3 5.5A5.5 5.5 0 0 0 7.5 20c1.8 0 3-.5 4.5-2 1.5 1.5 2.7 2 4.5 2a5.5 5.5 0 0 0 5.5-5.5c0-2.3-1.5-4-3-5.5l-7-7-7 7Z",key:"40bo9n"}],["path",{d:"M12 18v4",key:"jadmvz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k7=k("SparkleIcon",[["path",{d:"m12 3-1.9 5.8a2 2 0 0 1-1.287 1.288L3 12l5.8 1.9a2 2 0 0 1 1.288 1.287L12 21l1.9-5.8a2 2 0 0 1 1.287-1.288L21 12l-5.8-1.9a2 2 0 0 1-1.288-1.287Z",key:"nraa5p"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dl=k("SparklesIcon",[["path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z",key:"17u4zn"}],["path",{d:"M5 3v4",key:"bklmnn"}],["path",{d:"M19 17v4",key:"iiml17"}],["path",{d:"M3 5h4",key:"nem4j1"}],["path",{d:"M17 19h4",key:"lbex7p"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b7=k("SpeakerIcon",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["path",{d:"M12 6h.01",key:"1vi96p"}],["circle",{cx:"12",cy:"14",r:"4",key:"1jruaj"}],["path",{d:"M12 14h.01",key:"1etili"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w7=k("SpeechIcon",[["path",{d:"M8.8 20v-4.1l1.9.2a2.3 2.3 0 0 0 2.164-2.1V8.3A5.37 5.37 0 0 0 2 8.25c0 2.8.656 3.054 1 4.55a5.77 5.77 0 0 1 .029 2.758L2 20",key:"11atix"}],["path",{d:"M19.8 17.8a7.5 7.5 0 0 0 .003-10.603",key:"yol142"}],["path",{d:"M17 15a3.5 3.5 0 0 0-.025-4.975",key:"ssbmkc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x7=k("SpellCheck2Icon",[["path",{d:"m6 16 6-12 6 12",key:"1b4byz"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M4 21c1.1 0 1.1-1 2.3-1s1.1 1 2.3 1c1.1 0 1.1-1 2.3-1 1.1 0 1.1 1 2.3 1 1.1 0 1.1-1 2.3-1 1.1 0 1.1 1 2.3 1 1.1 0 1.1-1 2.3-1",key:"8mdmtu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M7=k("SpellCheckIcon",[["path",{d:"m6 16 6-12 6 12",key:"1b4byz"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"m16 20 2 2 4-4",key:"13tcca"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const C7=k("SplineIcon",[["circle",{cx:"19",cy:"5",r:"2",key:"mhkx31"}],["circle",{cx:"5",cy:"19",r:"2",key:"v8kfzx"}],["path",{d:"M5 17A12 12 0 0 1 17 5",key:"1okkup"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S7=k("SplitSquareHorizontalIcon",[["path",{d:"M8 19H5c-1 0-2-1-2-2V7c0-1 1-2 2-2h3",key:"lubmu8"}],["path",{d:"M16 5h3c1 0 2 1 2 2v10c0 1-1 2-2 2h-3",key:"1ag34g"}],["line",{x1:"12",x2:"12",y1:"4",y2:"20",key:"1tx1rr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I7=k("SplitSquareVerticalIcon",[["path",{d:"M5 8V5c0-1 1-2 2-2h10c1 0 2 1 2 2v3",key:"1pi83i"}],["path",{d:"M19 16v3c0 1-1 2-2 2H7c-1 0-2-1-2-2v-3",key:"ido5k7"}],["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L7=k("SplitIcon",[["path",{d:"M16 3h5v5",key:"1806ms"}],["path",{d:"M8 3H3v5",key:"15dfkv"}],["path",{d:"M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3",key:"1qrqzj"}],["path",{d:"m15 9 6-6",key:"ko1vev"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $7=k("SprayCanIcon",[["path",{d:"M3 3h.01",key:"159qn6"}],["path",{d:"M7 5h.01",key:"1hq22a"}],["path",{d:"M11 7h.01",key:"1osv80"}],["path",{d:"M3 7h.01",key:"1xzrh3"}],["path",{d:"M7 9h.01",key:"19b3jx"}],["path",{d:"M3 11h.01",key:"1eifu7"}],["rect",{width:"4",height:"4",x:"15",y:"5",key:"mri9e4"}],["path",{d:"m19 9 2 2v10c0 .6-.4 1-1 1h-6c-.6 0-1-.4-1-1V11l2-2",key:"aib6hk"}],["path",{d:"m13 14 8-2",key:"1d7bmk"}],["path",{d:"m13 19 8-2",key:"1y2vml"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A7=k("SproutIcon",[["path",{d:"M7 20h10",key:"e6iznv"}],["path",{d:"M10 20c5.5-2.5.8-6.4 3-10",key:"161w41"}],["path",{d:"M9.5 9.4c1.1.8 1.8 2.2 2.3 3.7-2 .4-3.5.4-4.8-.3-1.2-.6-2.3-1.9-3-4.2 2.8-.5 4.4 0 5.5.8z",key:"9gtqwd"}],["path",{d:"M14.1 6a7 7 0 0 0-1.1 4c1.9-.1 3.3-.6 4.3-1.4 1-1 1.6-2.3 1.7-4.6-2.7.1-4 1-4.9 2z",key:"bkxnd2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const E7=k("SquareAsteriskIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 8v8",key:"napkw2"}],["path",{d:"m8.5 14 7-4",key:"12hpby"}],["path",{d:"m8.5 10 7 4",key:"wwy2dy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const T7=k("SquareCodeIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m10 10-2 2 2 2",key:"p6et6i"}],["path",{d:"m14 14 2-2-2-2",key:"m075q2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P7=k("SquareDashedBottomCodeIcon",[["path",{d:"m10 10-2 2 2 2",key:"p6et6i"}],["path",{d:"m14 14 2-2-2-2",key:"m075q2"}],["path",{d:"M5 21a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2",key:"as5y1o"}],["path",{d:"M9 21h1",key:"15o7lz"}],["path",{d:"M14 21h1",key:"v9vybs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D7=k("SquareDashedBottomIcon",[["path",{d:"M5 21a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2",key:"as5y1o"}],["path",{d:"M9 21h1",key:"15o7lz"}],["path",{d:"M14 21h1",key:"v9vybs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R7=k("SquareDotIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O7=k("SquareEqualIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M7 10h10",key:"1101jm"}],["path",{d:"M7 14h10",key:"1mhdw3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V7=k("SquareSlashIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["line",{x1:"9",x2:"15",y1:"15",y2:"9",key:"1dfufj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U7=k("SquareStackIcon",[["path",{d:"M4 10c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h4c1.1 0 2 .9 2 2",key:"4i38lg"}],["path",{d:"M10 16c-1.1 0-2-.9-2-2v-4c0-1.1.9-2 2-2h4c1.1 0 2 .9 2 2",key:"mlte4a"}],["rect",{width:"8",height:"8",x:"14",y:"14",rx:"2",key:"1fa9i4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ul=k("SquareUserRoundIcon",[["path",{d:"M18 21a6 6 0 0 0-12 0",key:"kaz2du"}],["circle",{cx:"12",cy:"11",r:"4",key:"1gt34v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pl=k("SquareUserIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}],["path",{d:"M7 21v-2a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v2",key:"1m6ac2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F7=k("SquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j7=k("SquircleIcon",[["path",{d:"M12 3c7.2 0 9 1.8 9 9s-1.8 9-9 9-9-1.8-9-9 1.8-9 9-9",key:"garfkc"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H7=k("SquirrelIcon",[["path",{d:"M15.236 22a3 3 0 0 0-2.2-5",key:"21bitc"}],["path",{d:"M16 20a3 3 0 0 1 3-3h1a2 2 0 0 0 2-2v-2a4 4 0 0 0-4-4V4",key:"oh0fg0"}],["path",{d:"M18 13h.01",key:"9veqaj"}],["path",{d:"M18 6a4 4 0 0 0-4 4 7 7 0 0 0-7 7c0-5 4-5 4-10.5a4.5 4.5 0 1 0-9 0 2.5 2.5 0 0 0 5 0C7 10 3 11 3 17c0 2.8 2.2 5 5 5h10",key:"980v8a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N7=k("StampIcon",[["path",{d:"M5 22h14",key:"ehvnwv"}],["path",{d:"M19.27 13.73A2.5 2.5 0 0 0 17.5 13h-11A2.5 2.5 0 0 0 4 15.5V17a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-1.5c0-.66-.26-1.3-.73-1.77Z",key:"1sy9ra"}],["path",{d:"M14 13V8.5C14 7 15 7 15 5a3 3 0 0 0-3-3c-1.66 0-3 1-3 3s1 2 1 3.5V13",key:"cnxgux"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z7=k("StarHalfIcon",[["path",{d:"M12 17.8 5.8 21 7 14.1 2 9.3l7-1L12 2",key:"nare05"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B7=k("StarOffIcon",[["path",{d:"M8.34 8.34 2 9.27l5 4.87L5.82 21 12 17.77 18.18 21l-.59-3.43",key:"16m0ql"}],["path",{d:"M18.42 12.76 22 9.27l-6.91-1L12 2l-1.44 2.91",key:"1vt8nq"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q7=k("StarIcon",[["polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2",key:"8f66p6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W7=k("StepBackIcon",[["line",{x1:"18",x2:"18",y1:"20",y2:"4",key:"cun8e5"}],["polygon",{points:"14,20 4,12 14,4",key:"ypakod"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G7=k("StepForwardIcon",[["line",{x1:"6",x2:"6",y1:"4",y2:"20",key:"fy8qot"}],["polygon",{points:"10,4 20,12 10,20",key:"1mc1pf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z7=k("StethoscopeIcon",[["path",{d:"M4.8 2.3A.3.3 0 1 0 5 2H4a2 2 0 0 0-2 2v5a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6V4a2 2 0 0 0-2-2h-1a.2.2 0 1 0 .3.3",key:"1jd90r"}],["path",{d:"M8 15v1a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6v-4",key:"126ukv"}],["circle",{cx:"20",cy:"10",r:"2",key:"ts1r5v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K7=k("StickerIcon",[["path",{d:"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z",key:"1wis1t"}],["path",{d:"M15 3v6h6",key:"edgan2"}],["path",{d:"M10 16s.8 1 2 1c1.3 0 2-1 2-1",key:"1vvgv3"}],["path",{d:"M8 13h0",key:"jdup5h"}],["path",{d:"M16 13h0",key:"l4i2ga"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X7=k("StickyNoteIcon",[["path",{d:"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z",key:"1wis1t"}],["path",{d:"M15 3v6h6",key:"edgan2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y7=k("StopCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["rect",{width:"6",height:"6",x:"9",y:"9",key:"1wrtvo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q7=k("StoreIcon",[["path",{d:"m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7",key:"ztvudi"}],["path",{d:"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8",key:"1b2hhj"}],["path",{d:"M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4",key:"2ebpfo"}],["path",{d:"M2 7h20",key:"1fcdvo"}],["path",{d:"M22 7v3a2 2 0 0 1-2 2v0a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12v0a2 2 0 0 1-2-2V7",key:"jon5kx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J7=k("StretchHorizontalIcon",[["rect",{width:"20",height:"6",x:"2",y:"4",rx:"2",key:"qdearl"}],["rect",{width:"20",height:"6",x:"2",y:"14",rx:"2",key:"1xrn6j"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const eC=k("StretchVerticalIcon",[["rect",{width:"6",height:"20",x:"4",y:"2",rx:"2",key:"19qu7m"}],["rect",{width:"6",height:"20",x:"14",y:"2",rx:"2",key:"24v0nk"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tC=k("StrikethroughIcon",[["path",{d:"M16 4H9a3 3 0 0 0-2.83 4",key:"43sutm"}],["path",{d:"M14 12a4 4 0 0 1 0 8H6",key:"nlfj13"}],["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const aC=k("SubscriptIcon",[["path",{d:"m4 5 8 8",key:"1eunvl"}],["path",{d:"m12 5-8 8",key:"1ah0jp"}],["path",{d:"M20 19h-4c0-1.5.44-2 1.5-2.5S20 15.33 20 14c0-.47-.17-.93-.48-1.29a2.11 2.11 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07",key:"e8ta8j"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nC=k("SubtitlesIcon",[["path",{d:"M7 13h4",key:"1m1xj0"}],["path",{d:"M15 13h2",key:"vgjay3"}],["path",{d:"M7 9h2",key:"1q072n"}],["path",{d:"M13 9h4",key:"o7fxw0"}],["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2Z",key:"5somay"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sC=k("SunDimIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 4h.01",key:"1ujb9j"}],["path",{d:"M20 12h.01",key:"1ykeid"}],["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M4 12h.01",key:"158zrr"}],["path",{d:"M17.657 6.343h.01",key:"31pqzk"}],["path",{d:"M17.657 17.657h.01",key:"jehnf4"}],["path",{d:"M6.343 17.657h.01",key:"gdk6ow"}],["path",{d:"M6.343 6.343h.01",key:"1uurf0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oC=k("SunMediumIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 3v1",key:"1asbbs"}],["path",{d:"M12 20v1",key:"1wcdkc"}],["path",{d:"M3 12h1",key:"lp3yf2"}],["path",{d:"M20 12h1",key:"1vloll"}],["path",{d:"m18.364 5.636-.707.707",key:"1hakh0"}],["path",{d:"m6.343 17.657-.707.707",key:"18m9nf"}],["path",{d:"m5.636 5.636.707.707",key:"1xv1c5"}],["path",{d:"m17.657 17.657.707.707",key:"vl76zb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rC=k("SunMoonIcon",[["path",{d:"M12 8a2.83 2.83 0 0 0 4 4 4 4 0 1 1-4-4",key:"1fu5g2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.9 4.9 1.4 1.4",key:"b9915j"}],["path",{d:"m17.7 17.7 1.4 1.4",key:"qc3ed3"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.3 17.7-1.4 1.4",key:"5gca6"}],["path",{d:"m19.1 4.9-1.4 1.4",key:"wpu9u6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iC=k("SunSnowIcon",[["path",{d:"M10 9a3 3 0 1 0 0 6",key:"6zmtdl"}],["path",{d:"M2 12h1",key:"1uaihz"}],["path",{d:"M14 21V3",key:"1llu3z"}],["path",{d:"M10 4V3",key:"pkzwkn"}],["path",{d:"M10 21v-1",key:"1u8rkd"}],["path",{d:"m3.64 18.36.7-.7",key:"105rm9"}],["path",{d:"m4.34 6.34-.7-.7",key:"d3unjp"}],["path",{d:"M14 12h8",key:"4f43i9"}],["path",{d:"m17 4-3 3",key:"15jcng"}],["path",{d:"m14 17 3 3",key:"6tlq38"}],["path",{d:"m21 15-3-3 3-3",key:"1nlnje"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lC=k("SunIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cC=k("SunriseIcon",[["path",{d:"M12 2v8",key:"1q4o3n"}],["path",{d:"m4.93 10.93 1.41 1.41",key:"2a7f42"}],["path",{d:"M2 18h2",key:"j10viu"}],["path",{d:"M20 18h2",key:"wocana"}],["path",{d:"m19.07 10.93-1.41 1.41",key:"15zs5n"}],["path",{d:"M22 22H2",key:"19qnx5"}],["path",{d:"m8 6 4-4 4 4",key:"ybng9g"}],["path",{d:"M16 18a4 4 0 0 0-8 0",key:"1lzouq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dC=k("SunsetIcon",[["path",{d:"M12 10V2",key:"16sf7g"}],["path",{d:"m4.93 10.93 1.41 1.41",key:"2a7f42"}],["path",{d:"M2 18h2",key:"j10viu"}],["path",{d:"M20 18h2",key:"wocana"}],["path",{d:"m19.07 10.93-1.41 1.41",key:"15zs5n"}],["path",{d:"M22 22H2",key:"19qnx5"}],["path",{d:"m16 6-4 4-4-4",key:"6wukr"}],["path",{d:"M16 18a4 4 0 0 0-8 0",key:"1lzouq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uC=k("SuperscriptIcon",[["path",{d:"m4 19 8-8",key:"hr47gm"}],["path",{d:"m12 19-8-8",key:"1dhhmo"}],["path",{d:"M20 12h-4c0-1.5.442-2 1.5-2.5S20 8.334 20 7.002c0-.472-.17-.93-.484-1.29a2.105 2.105 0 0 0-2.617-.436c-.42.239-.738.614-.899 1.06",key:"1dfcux"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pC=k("SwissFrancIcon",[["path",{d:"M10 21V3h8",key:"br2l0g"}],["path",{d:"M6 16h9",key:"2py0wn"}],["path",{d:"M10 9.5h7",key:"13dmhz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hC=k("SwitchCameraIcon",[["path",{d:"M11 19H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h5",key:"mtk2lu"}],["path",{d:"M13 5h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5",key:"120jsl"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"m18 22-3-3 3-3",key:"kgdoj7"}],["path",{d:"m6 2 3 3-3 3",key:"1fnbkv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fC=k("SwordIcon",[["polyline",{points:"14.5 17.5 3 6 3 3 6 3 17.5 14.5",key:"1hfsw2"}],["line",{x1:"13",x2:"19",y1:"19",y2:"13",key:"1vrmhu"}],["line",{x1:"16",x2:"20",y1:"16",y2:"20",key:"1bron3"}],["line",{x1:"19",x2:"21",y1:"21",y2:"19",key:"13pww6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mC=k("SwordsIcon",[["polyline",{points:"14.5 17.5 3 6 3 3 6 3 17.5 14.5",key:"1hfsw2"}],["line",{x1:"13",x2:"19",y1:"19",y2:"13",key:"1vrmhu"}],["line",{x1:"16",x2:"20",y1:"16",y2:"20",key:"1bron3"}],["line",{x1:"19",x2:"21",y1:"21",y2:"19",key:"13pww6"}],["polyline",{points:"14.5 6.5 18 3 21 3 21 6 17.5 9.5",key:"hbey2j"}],["line",{x1:"5",x2:"9",y1:"14",y2:"18",key:"1hf58s"}],["line",{x1:"7",x2:"4",y1:"17",y2:"20",key:"pidxm4"}],["line",{x1:"3",x2:"5",y1:"19",y2:"21",key:"1pehsh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vC=k("SyringeIcon",[["path",{d:"m18 2 4 4",key:"22kx64"}],["path",{d:"m17 7 3-3",key:"1w1zoj"}],["path",{d:"M19 9 8.7 19.3c-1 1-2.5 1-3.4 0l-.6-.6c-1-1-1-2.5 0-3.4L15 5",key:"1exhtz"}],["path",{d:"m9 11 4 4",key:"rovt3i"}],["path",{d:"m5 19-3 3",key:"59f2uf"}],["path",{d:"m14 4 6 6",key:"yqp9t2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yC=k("Table2Icon",[["path",{d:"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18",key:"gugj83"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _C=k("TablePropertiesIcon",[["path",{d:"M15 3v18",key:"14nvp0"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M21 9H3",key:"1338ky"}],["path",{d:"M21 15H3",key:"9uk58r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gC=k("TableIcon",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kC=k("TabletSmartphoneIcon",[["rect",{width:"10",height:"14",x:"3",y:"8",rx:"2",key:"1vrsiq"}],["path",{d:"M5 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2h-2.4",key:"1j4zmg"}],["path",{d:"M8 18h.01",key:"lrp35t"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bC=k("TabletIcon",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18",key:"1dp563"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wC=k("TabletsIcon",[["circle",{cx:"7",cy:"7",r:"5",key:"x29byf"}],["circle",{cx:"17",cy:"17",r:"5",key:"1op1d2"}],["path",{d:"M12 17h10",key:"ls21zv"}],["path",{d:"m3.46 10.54 7.08-7.08",key:"1rehiu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xC=k("TagIcon",[["path",{d:"M12 2H2v10l9.29 9.29c.94.94 2.48.94 3.42 0l6.58-6.58c.94-.94.94-2.48 0-3.42L12 2Z",key:"14b2ls"}],["path",{d:"M7 7h.01",key:"7u93v4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const MC=k("TagsIcon",[["path",{d:"M9 5H2v7l6.29 6.29c.94.94 2.48.94 3.42 0l3.58-3.58c.94-.94.94-2.48 0-3.42L9 5Z",key:"gt587u"}],["path",{d:"M6 9.01V9",key:"1flxpt"}],["path",{d:"m15 5 6.3 6.3a2.4 2.4 0 0 1 0 3.4L17 19",key:"1cbfv1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const CC=k("Tally1Icon",[["path",{d:"M4 4v16",key:"6qkkli"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const SC=k("Tally2Icon",[["path",{d:"M4 4v16",key:"6qkkli"}],["path",{d:"M9 4v16",key:"81ygyz"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const IC=k("Tally3Icon",[["path",{d:"M4 4v16",key:"6qkkli"}],["path",{d:"M9 4v16",key:"81ygyz"}],["path",{d:"M14 4v16",key:"12vmem"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const LC=k("Tally4Icon",[["path",{d:"M4 4v16",key:"6qkkli"}],["path",{d:"M9 4v16",key:"81ygyz"}],["path",{d:"M14 4v16",key:"12vmem"}],["path",{d:"M19 4v16",key:"8ij5ei"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $C=k("Tally5Icon",[["path",{d:"M4 4v16",key:"6qkkli"}],["path",{d:"M9 4v16",key:"81ygyz"}],["path",{d:"M14 4v16",key:"12vmem"}],["path",{d:"M19 4v16",key:"8ij5ei"}],["path",{d:"M22 6 2 18",key:"h9moai"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const AC=k("TangentIcon",[["circle",{cx:"17",cy:"4",r:"2",key:"y5j2s2"}],["path",{d:"M15.59 5.41 5.41 15.59",key:"l0vprr"}],["circle",{cx:"4",cy:"17",r:"2",key:"9p4efm"}],["path",{d:"M12 22s-4-9-1.5-11.5S22 12 22 12",key:"1twk4o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const EC=k("TargetIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const TC=k("TentTreeIcon",[["circle",{cx:"4",cy:"4",r:"2",key:"bt5ra8"}],["path",{d:"m14 5 3-3 3 3",key:"1sorif"}],["path",{d:"m14 10 3-3 3 3",key:"1jyi9h"}],["path",{d:"M17 14V2",key:"8ymqnk"}],["path",{d:"M17 14H7l-5 8h20Z",key:"13ar7p"}],["path",{d:"M8 14v8",key:"1ghmqk"}],["path",{d:"m9 14 5 8",key:"13pgi6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const PC=k("TentIcon",[["path",{d:"M3.5 21 14 3",key:"1szst5"}],["path",{d:"M20.5 21 10 3",key:"1310c3"}],["path",{d:"M15.5 21 12 15l-3.5 6",key:"1ddtfw"}],["path",{d:"M2 21h20",key:"1nyx9w"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const DC=k("TerminalSquareIcon",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const RC=k("TerminalIcon",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const OC=k("TestTube2Icon",[["path",{d:"M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01v0a2.83 2.83 0 0 1 0-4L17 3",key:"dg8b2p"}],["path",{d:"m16 2 6 6",key:"1gw87d"}],["path",{d:"M12 16H4",key:"1cjfip"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const VC=k("TestTubeIcon",[["path",{d:"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5h0c-1.4 0-2.5-1.1-2.5-2.5V2",key:"187lwq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M14.5 16h-5",key:"1ox875"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const UC=k("TestTubesIcon",[["path",{d:"M9 2v17.5A2.5 2.5 0 0 1 6.5 22v0A2.5 2.5 0 0 1 4 19.5V2",key:"12z67u"}],["path",{d:"M20 2v17.5a2.5 2.5 0 0 1-2.5 2.5v0a2.5 2.5 0 0 1-2.5-2.5V2",key:"1q2nfy"}],["path",{d:"M3 2h7",key:"7s29d5"}],["path",{d:"M14 2h7",key:"7sicin"}],["path",{d:"M9 16H4",key:"1bfye3"}],["path",{d:"M20 16h-5",key:"ddnjpe"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const FC=k("TextCursorInputIcon",[["path",{d:"M5 4h1a3 3 0 0 1 3 3 3 3 0 0 1 3-3h1",key:"18xjzo"}],["path",{d:"M13 20h-1a3 3 0 0 1-3-3 3 3 0 0 1-3 3H5",key:"fj48gi"}],["path",{d:"M5 16H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h1",key:"1n9rhb"}],["path",{d:"M13 8h7a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-7",key:"13ksps"}],["path",{d:"M9 7v10",key:"1vc8ob"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jC=k("TextCursorIcon",[["path",{d:"M17 22h-1a4 4 0 0 1-4-4V6a4 4 0 0 1 4-4h1",key:"uvaxm9"}],["path",{d:"M7 22h1a4 4 0 0 0 4-4v-1",key:"11xy8d"}],["path",{d:"M7 2h1a4 4 0 0 1 4 4v1",key:"1uw06m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const HC=k("TextQuoteIcon",[["path",{d:"M17 6H3",key:"16j9eg"}],["path",{d:"M21 12H8",key:"scolzb"}],["path",{d:"M21 18H8",key:"1wfozv"}],["path",{d:"M3 12v6",key:"fv4c87"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hl=k("TextSelectIcon",[["path",{d:"M5 3a2 2 0 0 0-2 2",key:"y57alp"}],["path",{d:"M19 3a2 2 0 0 1 2 2",key:"18rm91"}],["path",{d:"M21 19a2 2 0 0 1-2 2",key:"1j7049"}],["path",{d:"M5 21a2 2 0 0 1-2-2",key:"sbafld"}],["path",{d:"M9 3h1",key:"1yesri"}],["path",{d:"M9 21h1",key:"15o7lz"}],["path",{d:"M14 3h1",key:"1ec4yj"}],["path",{d:"M14 21h1",key:"v9vybs"}],["path",{d:"M3 9v1",key:"1r0deq"}],["path",{d:"M21 9v1",key:"mxsmne"}],["path",{d:"M3 14v1",key:"vnatye"}],["path",{d:"M21 14v1",key:"169vum"}],["line",{x1:"7",x2:"15",y1:"8",y2:"8",key:"1758g8"}],["line",{x1:"7",x2:"17",y1:"12",y2:"12",key:"197423"}],["line",{x1:"7",x2:"13",y1:"16",y2:"16",key:"37cgm6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const NC=k("TextIcon",[["path",{d:"M17 6.1H3",key:"wptmhv"}],["path",{d:"M21 12.1H3",key:"1j38uz"}],["path",{d:"M15.1 18H3",key:"1nb16a"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zC=k("TheaterIcon",[["path",{d:"M2 10s3-3 3-8",key:"3xiif0"}],["path",{d:"M22 10s-3-3-3-8",key:"ioaa5q"}],["path",{d:"M10 2c0 4.4-3.6 8-8 8",key:"16fkpi"}],["path",{d:"M14 2c0 4.4 3.6 8 8 8",key:"b9eulq"}],["path",{d:"M2 10s2 2 2 5",key:"1au1lb"}],["path",{d:"M22 10s-2 2-2 5",key:"qi2y5e"}],["path",{d:"M8 15h8",key:"45n4r"}],["path",{d:"M2 22v-1a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1",key:"1vsc2m"}],["path",{d:"M14 22v-1a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1",key:"hrha4u"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const BC=k("ThermometerSnowflakeIcon",[["path",{d:"M2 12h10",key:"19562f"}],["path",{d:"M9 4v16",key:"81ygyz"}],["path",{d:"m3 9 3 3-3 3",key:"1sas0l"}],["path",{d:"M12 6 9 9 6 6",key:"pfrgxu"}],["path",{d:"m6 18 3-3 1.5 1.5",key:"1e277p"}],["path",{d:"M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z",key:"iof6y5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qC=k("ThermometerSunIcon",[["path",{d:"M12 9a4 4 0 0 0-2 7.5",key:"1jvsq6"}],["path",{d:"M12 3v2",key:"1w22ol"}],["path",{d:"m6.6 18.4-1.4 1.4",key:"w2yidj"}],["path",{d:"M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z",key:"iof6y5"}],["path",{d:"M4 13H2",key:"118le4"}],["path",{d:"M6.34 7.34 4.93 5.93",key:"1brd51"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const WC=k("ThermometerIcon",[["path",{d:"M14 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z",key:"17jzev"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const GC=k("ThumbsDownIcon",[["path",{d:"M17 14V2",key:"8ymqnk"}],["path",{d:"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22h0a3.13 3.13 0 0 1-3-3.88Z",key:"s6e0r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ZC=k("ThumbsUpIcon",[["path",{d:"M7 10v12",key:"1qc93n"}],["path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z",key:"y3tblf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const KC=k("TicketIcon",[["path",{d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z",key:"qn84l0"}],["path",{d:"M13 5v2",key:"dyzc3o"}],["path",{d:"M13 17v2",key:"1ont0d"}],["path",{d:"M13 11v2",key:"1wjjxi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const XC=k("TimerOffIcon",[["path",{d:"M10 2h4",key:"n1abiw"}],["path",{d:"M4.6 11a8 8 0 0 0 1.7 8.7 8 8 0 0 0 8.7 1.7",key:"10he05"}],["path",{d:"M7.4 7.4a8 8 0 0 1 10.3 1 8 8 0 0 1 .9 10.2",key:"15f7sh"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M12 12v-2",key:"fwoke6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const YC=k("TimerResetIcon",[["path",{d:"M10 2h4",key:"n1abiw"}],["path",{d:"M12 14v-4",key:"1evpnu"}],["path",{d:"M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6",key:"1ts96g"}],["path",{d:"M9 17H4v5",key:"8t5av"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const QC=k("TimerIcon",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const JC=k("ToggleLeftIcon",[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"6",ry:"6",key:"f2vt7d"}],["circle",{cx:"8",cy:"12",r:"2",key:"1nvbw3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const eS=k("ToggleRightIcon",[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"6",ry:"6",key:"f2vt7d"}],["circle",{cx:"16",cy:"12",r:"2",key:"4ma0v8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tS=k("TornadoIcon",[["path",{d:"M21 4H3",key:"1hwok0"}],["path",{d:"M18 8H6",key:"41n648"}],["path",{d:"M19 12H9",key:"1g4lpz"}],["path",{d:"M16 16h-6",key:"1j5d54"}],["path",{d:"M11 20H9",key:"39obr8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const aS=k("TorusIcon",[["ellipse",{cx:"12",cy:"11",rx:"3",ry:"2",key:"1b2qxu"}],["ellipse",{cx:"12",cy:"12.5",rx:"10",ry:"8.5",key:"h8emeu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nS=k("TouchpadOffIcon",[["path",{d:"M4 4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16",key:"lnt0bk"}],["path",{d:"M2 14h12",key:"d8icqz"}],["path",{d:"M22 14h-2",key:"jrx26d"}],["path",{d:"M12 20v-6",key:"1rm09r"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M22 16V6a2 2 0 0 0-2-2H10",key:"11y8e4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sS=k("TouchpadIcon",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"M2 14h20",key:"myj16y"}],["path",{d:"M12 20v-6",key:"1rm09r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oS=k("TowerControlIcon",[["path",{d:"M18.2 12.27 20 6H4l1.8 6.27a1 1 0 0 0 .95.73h10.5a1 1 0 0 0 .96-.73Z",key:"1pledb"}],["path",{d:"M8 13v9",key:"hmv0ci"}],["path",{d:"M16 22v-9",key:"ylnf1u"}],["path",{d:"m9 6 1 7",key:"dpdgam"}],["path",{d:"m15 6-1 7",key:"ls7zgu"}],["path",{d:"M12 6V2",key:"1pj48d"}],["path",{d:"M13 2h-2",key:"mj6ths"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rS=k("ToyBrickIcon",[["rect",{width:"18",height:"12",x:"3",y:"8",rx:"1",key:"158fvp"}],["path",{d:"M10 8V5c0-.6-.4-1-1-1H6a1 1 0 0 0-1 1v3",key:"s0042v"}],["path",{d:"M19 8V5c0-.6-.4-1-1-1h-3a1 1 0 0 0-1 1v3",key:"9wmeh2"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iS=k("TractorIcon",[["path",{d:"M3 4h9l1 7",key:"1ftpo8"}],["path",{d:"M4 11V4",key:"9ft8pt"}],["path",{d:"M8 10V4",key:"1y5f7n"}],["path",{d:"M18 5c-.6 0-1 .4-1 1v5.6",key:"10zbvr"}],["path",{d:"m10 11 11 .9c.6 0 .9.5.8 1.1l-.8 5h-1",key:"2w242w"}],["circle",{cx:"7",cy:"15",r:".5",key:"fbsjqy"}],["circle",{cx:"7",cy:"15",r:"5",key:"ddtuc"}],["path",{d:"M16 18h-5",key:"bq60fd"}],["circle",{cx:"18",cy:"18",r:"2",key:"1emm8v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lS=k("TrafficConeIcon",[["path",{d:"M9.3 6.2a4.55 4.55 0 0 0 5.4 0",key:"flyxqv"}],["path",{d:"M7.9 10.7c.9.8 2.4 1.3 4.1 1.3s3.2-.5 4.1-1.3",key:"1nlxxg"}],["path",{d:"M13.9 3.5a1.93 1.93 0 0 0-3.8-.1l-3 10c-.1.2-.1.4-.1.6 0 1.7 2.2 3 5 3s5-1.3 5-3c0-.2 0-.4-.1-.5Z",key:"vz7x1l"}],["path",{d:"m7.5 12.2-4.7 2.7c-.5.3-.8.7-.8 1.1s.3.8.8 1.1l7.6 4.5c.9.5 2.1.5 3 0l7.6-4.5c.7-.3 1-.7 1-1.1s-.3-.8-.8-1.1l-4.7-2.8",key:"1xfzlw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cS=k("TrainFrontTunnelIcon",[["path",{d:"M2 22V12a10 10 0 1 1 20 0v10",key:"o0fyp0"}],["path",{d:"M15 6.8v1.4a3 2.8 0 1 1-6 0V6.8",key:"m8q3n9"}],["path",{d:"M10 15h.01",key:"44in9x"}],["path",{d:"M14 15h.01",key:"5mohn5"}],["path",{d:"M10 19a4 4 0 0 1-4-4v-3a6 6 0 1 1 12 0v3a4 4 0 0 1-4 4Z",key:"hckbmu"}],["path",{d:"m9 19-2 3",key:"iij7hm"}],["path",{d:"m15 19 2 3",key:"npx8sa"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dS=k("TrainFrontIcon",[["path",{d:"M8 3.1V7a4 4 0 0 0 8 0V3.1",key:"1v71zp"}],["path",{d:"m9 15-1-1",key:"1yrq24"}],["path",{d:"m15 15 1-1",key:"1t0d6s"}],["path",{d:"M9 19c-2.8 0-5-2.2-5-5v-4a8 8 0 0 1 16 0v4c0 2.8-2.2 5-5 5Z",key:"1p0hjs"}],["path",{d:"m8 19-2 3",key:"13i0xs"}],["path",{d:"m16 19 2 3",key:"xo31yx"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uS=k("TrainTrackIcon",[["path",{d:"M2 17 17 2",key:"18b09t"}],["path",{d:"m2 14 8 8",key:"1gv9hu"}],["path",{d:"m5 11 8 8",key:"189pqp"}],["path",{d:"m8 8 8 8",key:"1imecy"}],["path",{d:"m11 5 8 8",key:"ummqn6"}],["path",{d:"m14 2 8 8",key:"1vk7dn"}],["path",{d:"M7 22 22 7",key:"15mb1i"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fl=k("TramFrontIcon",[["rect",{width:"16",height:"16",x:"4",y:"3",rx:"2",key:"1wxw4b"}],["path",{d:"M4 11h16",key:"mpoxn0"}],["path",{d:"M12 3v8",key:"1h2ygw"}],["path",{d:"m8 19-2 3",key:"13i0xs"}],["path",{d:"m18 22-2-3",key:"1p0ohu"}],["path",{d:"M8 15h0",key:"q9eq1f"}],["path",{d:"M16 15h0",key:"pzrbjg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pS=k("Trash2Icon",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hS=k("TrashIcon",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fS=k("TreeDeciduousIcon",[["path",{d:"M8 19a4 4 0 0 1-2.24-7.32A3.5 3.5 0 0 1 9 6.03V6a3 3 0 1 1 6 0v.04a3.5 3.5 0 0 1 3.24 5.65A4 4 0 0 1 16 19Z",key:"oadzkq"}],["path",{d:"M12 19v3",key:"npa21l"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mS=k("TreePineIcon",[["path",{d:"m17 14 3 3.3a1 1 0 0 1-.7 1.7H4.7a1 1 0 0 1-.7-1.7L7 14h-.3a1 1 0 0 1-.7-1.7L9 9h-.2A1 1 0 0 1 8 7.3L12 3l4 4.3a1 1 0 0 1-.8 1.7H15l3 3.3a1 1 0 0 1-.7 1.7H17Z",key:"cpyugq"}],["path",{d:"M12 22v-3",key:"kmzjlo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vS=k("TreesIcon",[["path",{d:"M10 10v.2A3 3 0 0 1 8.9 16v0H5v0h0a3 3 0 0 1-1-5.8V10a3 3 0 0 1 6 0Z",key:"yh07w9"}],["path",{d:"M7 16v6",key:"1a82de"}],["path",{d:"M13 19v3",key:"13sx9i"}],["path",{d:"M12 19h8.3a1 1 0 0 0 .7-1.7L18 14h.3a1 1 0 0 0 .7-1.7L16 9h.2a1 1 0 0 0 .8-1.7L13 3l-1.4 1.5",key:"1sj9kv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yS=k("TrelloIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["rect",{width:"3",height:"9",x:"7",y:"7",key:"14n3xi"}],["rect",{width:"3",height:"5",x:"14",y:"7",key:"s4azjd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _S=k("TrendingDownIcon",[["polyline",{points:"22 17 13.5 8.5 8.5 13.5 2 7",key:"1r2t7k"}],["polyline",{points:"16 17 22 17 22 11",key:"11uiuu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gS=k("TrendingUpIcon",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kS=k("TriangleRightIcon",[["path",{d:"M22 18a2 2 0 0 1-2 2H3c-1.1 0-1.3-.6-.4-1.3L20.4 4.3c.9-.7 1.6-.4 1.6.7Z",key:"183wce"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bS=k("TriangleIcon",[["path",{d:"M13.73 4a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z",key:"14u9p9"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wS=k("TrophyIcon",[["path",{d:"M6 9H4.5a2.5 2.5 0 0 1 0-5H6",key:"17hqa7"}],["path",{d:"M18 9h1.5a2.5 2.5 0 0 0 0-5H18",key:"lmptdp"}],["path",{d:"M4 22h16",key:"57wxv0"}],["path",{d:"M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20.24 7 22",key:"1nw9bq"}],["path",{d:"M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20.24 17 22",key:"1np0yb"}],["path",{d:"M18 2H6v7a6 6 0 0 0 12 0V2Z",key:"u46fv3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xS=k("TruckIcon",[["path",{d:"M5 18H3c-.6 0-1-.4-1-1V7c0-.6.4-1 1-1h10c.6 0 1 .4 1 1v11",key:"hs4xqm"}],["path",{d:"M14 9h4l4 4v4c0 .6-.4 1-1 1h-2",key:"11fp61"}],["circle",{cx:"7",cy:"18",r:"2",key:"19iecd"}],["path",{d:"M15 18H9",key:"1lyqi6"}],["circle",{cx:"17",cy:"18",r:"2",key:"332jqn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const MS=k("TurtleIcon",[["path",{d:"m12 10 2 4v3a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-3a8 8 0 1 0-16 0v3a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-3l2-4h4Z",key:"1lbbv7"}],["path",{d:"M4.82 7.9 8 10",key:"m9wose"}],["path",{d:"M15.18 7.9 12 10",key:"p8dp2u"}],["path",{d:"M16.93 10H20a2 2 0 0 1 0 4H2",key:"12nsm7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const CS=k("Tv2Icon",[["path",{d:"M7 21h10",key:"1b0cd5"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const SS=k("TvIcon",[["rect",{width:"20",height:"15",x:"2",y:"7",rx:"2",ry:"2",key:"10ag99"}],["polyline",{points:"17 2 12 7 7 2",key:"11pgbg"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const IS=k("TwitchIcon",[["path",{d:"M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7",key:"c0yzno"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const LS=k("TwitterIcon",[["path",{d:"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z",key:"pff0z6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $S=k("TypeIcon",[["polyline",{points:"4 7 4 4 20 4 20 7",key:"1nosan"}],["line",{x1:"9",x2:"15",y1:"20",y2:"20",key:"swin9y"}],["line",{x1:"12",x2:"12",y1:"4",y2:"20",key:"1tx1rr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const AS=k("UmbrellaOffIcon",[["path",{d:"M12 2v1",key:"11qlp1"}],["path",{d:"M15.5 21a1.85 1.85 0 0 1-3.5-1v-8H2a10 10 0 0 1 3.428-6.575",key:"eki10q"}],["path",{d:"M17.5 12H22A10 10 0 0 0 9.004 3.455",key:"n2ayka"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ES=k("UmbrellaIcon",[["path",{d:"M22 12a10.06 10.06 1 0 0-20 0Z",key:"1teyop"}],["path",{d:"M12 12v8a2 2 0 0 0 4 0",key:"ulpmoc"}],["path",{d:"M12 2v1",key:"11qlp1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const TS=k("UnderlineIcon",[["path",{d:"M6 4v6a6 6 0 0 0 12 0V4",key:"9kb039"}],["line",{x1:"4",x2:"20",y1:"20",y2:"20",key:"nun2al"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const PS=k("Undo2Icon",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11",key:"llx8ln"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const DS=k("UndoDotIcon",[["circle",{cx:"12",cy:"17",r:"1",key:"1ixnty"}],["path",{d:"M3 7v6h6",key:"1v2h90"}],["path",{d:"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13",key:"1r6uu6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const RS=k("UndoIcon",[["path",{d:"M3 7v6h6",key:"1v2h90"}],["path",{d:"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13",key:"1r6uu6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const OS=k("UnfoldHorizontalIcon",[["path",{d:"M16 12h6",key:"15xry1"}],["path",{d:"M8 12H2",key:"1jqql6"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 8v2",key:"1woqiv"}],["path",{d:"M12 14v2",key:"8jcxud"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m19 15 3-3-3-3",key:"wjy7rq"}],["path",{d:"m5 9-3 3 3 3",key:"j64kie"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const VS=k("UnfoldVerticalIcon",[["path",{d:"M12 22v-6",key:"6o8u61"}],["path",{d:"M12 8V2",key:"1wkif3"}],["path",{d:"M4 12H2",key:"rhcxmi"}],["path",{d:"M10 12H8",key:"s88cx1"}],["path",{d:"M16 12h-2",key:"10asgb"}],["path",{d:"M22 12h-2",key:"14jgyd"}],["path",{d:"m15 19-3 3-3-3",key:"11eu04"}],["path",{d:"m15 5-3-3-3 3",key:"itvq4r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const US=k("UngroupIcon",[["rect",{width:"8",height:"6",x:"5",y:"4",rx:"1",key:"nzclkv"}],["rect",{width:"8",height:"6",x:"11",y:"14",rx:"1",key:"4tytwb"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const FS=k("Unlink2Icon",[["path",{d:"M15 7h2a5 5 0 0 1 0 10h-2m-6 0H7A5 5 0 0 1 7 7h2",key:"1re2ne"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jS=k("UnlinkIcon",[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const HS=k("UnlockKeyholeIcon",[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 9.33-2.5",key:"car5b7"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const NS=k("UnlockIcon",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 9.9-1",key:"1mm8w8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zS=k("UnplugIcon",[["path",{d:"m19 5 3-3",key:"yk6iyv"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z",key:"1snsnr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const BS=k("UploadCloudIcon",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M12 12v9",key:"192myk"}],["path",{d:"m16 16-4-4-4 4",key:"119tzi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qS=k("UploadIcon",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const WS=k("UsbIcon",[["circle",{cx:"10",cy:"7",r:"1",key:"dypaad"}],["circle",{cx:"4",cy:"20",r:"1",key:"22iqad"}],["path",{d:"M4.7 19.3 19 5",key:"1enqfc"}],["path",{d:"m21 3-3 1 2 2Z",key:"d3ov82"}],["path",{d:"M9.26 7.68 5 12l2 5",key:"1esawj"}],["path",{d:"m10 14 5 2 3.5-3.5",key:"v8oal5"}],["path",{d:"m18 12 1-1 1 1-1 1Z",key:"1bh22v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const GS=k("UserCheckIcon",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["polyline",{points:"16 11 18 13 22 9",key:"1pwet4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ZS=k("UserCogIcon",[["circle",{cx:"18",cy:"15",r:"3",key:"gjjjvw"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M10 15H6a4 4 0 0 0-4 4v2",key:"1nfge6"}],["path",{d:"m21.7 16.4-.9-.3",key:"12j9ji"}],["path",{d:"m15.2 13.9-.9-.3",key:"1fdjdi"}],["path",{d:"m16.6 18.7.3-.9",key:"heedtr"}],["path",{d:"m19.1 12.2.3-.9",key:"1af3ki"}],["path",{d:"m19.6 18.7-.4-1",key:"1x9vze"}],["path",{d:"m16.8 12.3-.4-1",key:"vqeiwj"}],["path",{d:"m14.3 16.6 1-.4",key:"1qlj63"}],["path",{d:"m20.7 13.8 1-.4",key:"1v5t8k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const KS=k("UserMinusIcon",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const XS=k("UserPlusIcon",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ml=k("UserRoundCheckIcon",[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"m16 19 2 2 4-4",key:"1b14m6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vl=k("UserRoundCogIcon",[["path",{d:"M2 21a8 8 0 0 1 10.434-7.62",key:"1yezr2"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["path",{d:"m19.5 14.3-.4.9",key:"1eb35c"}],["path",{d:"m16.9 20.8-.4.9",key:"dfjc4z"}],["path",{d:"m21.7 19.5-.9-.4",key:"q4dx6b"}],["path",{d:"m15.2 16.9-.9-.4",key:"1r0w5f"}],["path",{d:"m21.7 16.5-.9.4",key:"1knoei"}],["path",{d:"m15.2 19.1-.9.4",key:"j188fs"}],["path",{d:"m19.5 21.7-.4-.9",key:"1tonu5"}],["path",{d:"m16.9 15.2-.4-.9",key:"699xu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yl=k("UserRoundMinusIcon",[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M22 19h-6",key:"vcuq98"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _l=k("UserRoundPlusIcon",[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M19 16v6",key:"tddt3s"}],["path",{d:"M22 19h-6",key:"vcuq98"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const YS=k("UserRoundSearchIcon",[["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M2 21a8 8 0 0 1 10.434-7.62",key:"1yezr2"}],["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["path",{d:"m22 22-1.9-1.9",key:"1e5ubv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gl=k("UserRoundXIcon",[["path",{d:"M2 21a8 8 0 0 1 11.873-7",key:"74fkxq"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"m17 17 5 5",key:"p7ous7"}],["path",{d:"m22 17-5 5",key:"gqnmv0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kl=k("UserRoundIcon",[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const QS=k("UserSearchIcon",[["circle",{cx:"10",cy:"7",r:"4",key:"e45bow"}],["path",{d:"M10.3 15H7a4 4 0 0 0-4 4v2",key:"3bnktk"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["path",{d:"m21 21-1.9-1.9",key:"1g2n9r"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const JS=k("UserXIcon",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"17",x2:"22",y1:"8",y2:"13",key:"3nzzx3"}],["line",{x1:"22",x2:"17",y1:"8",y2:"13",key:"1swrse"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const eI=k("UserIcon",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bl=k("UsersRoundIcon",[["path",{d:"M18 21a8 8 0 0 0-16 0",key:"3ypg7q"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3",key:"10s06x"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tI=k("UsersIcon",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const aI=k("UtensilsCrossedIcon",[["path",{d:"m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8",key:"n7qcjb"}],["path",{d:"M15 15 3.3 3.3a4.2 4.2 0 0 0 0 6l7.3 7.3c.7.7 2 .7 2.8 0L15 15Zm0 0 7 7",key:"d0u48b"}],["path",{d:"m2.1 21.8 6.4-6.3",key:"yn04lh"}],["path",{d:"m19 5-7 7",key:"194lzd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nI=k("UtensilsIcon",[["path",{d:"M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2",key:"cjf0a3"}],["path",{d:"M7 2v20",key:"1473qp"}],["path",{d:"M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7",key:"1ogz0v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sI=k("UtilityPoleIcon",[["path",{d:"M12 2v20",key:"t6zp3m"}],["path",{d:"M2 5h20",key:"1fs1ex"}],["path",{d:"M3 3v2",key:"9imdir"}],["path",{d:"M7 3v2",key:"n0os7"}],["path",{d:"M17 3v2",key:"1l2re6"}],["path",{d:"M21 3v2",key:"1duuac"}],["path",{d:"m19 5-7 7-7-7",key:"133zxf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oI=k("VariableIcon",[["path",{d:"M8 21s-4-3-4-9 4-9 4-9",key:"uto9ud"}],["path",{d:"M16 3s4 3 4 9-4 9-4 9",key:"4w2vsq"}],["line",{x1:"15",x2:"9",y1:"9",y2:"15",key:"f7djnv"}],["line",{x1:"9",x2:"15",y1:"9",y2:"15",key:"1shsy8"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rI=k("VeganIcon",[["path",{d:"M2 2a26.6 26.6 0 0 1 10 20c.9-6.82 1.5-9.5 4-14",key:"qiv7li"}],["path",{d:"M16 8c4 0 6-2 6-6-4 0-6 2-6 6",key:"n7eohy"}],["path",{d:"M17.41 3.6a10 10 0 1 0 3 3",key:"1dion0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iI=k("VenetianMaskIcon",[["path",{d:"M2 12a5 5 0 0 0 5 5 8 8 0 0 1 5 2 8 8 0 0 1 5-2 5 5 0 0 0 5-5V7h-5a8 8 0 0 0-5 2 8 8 0 0 0-5-2H2Z",key:"1g6z3j"}],["path",{d:"M6 11c1.5 0 3 .5 3 2-2 0-3 0-3-2Z",key:"c2lwnf"}],["path",{d:"M18 11c-1.5 0-3 .5-3 2 2 0 3 0 3-2Z",key:"njd9zo"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lI=k("VibrateOffIcon",[["path",{d:"m2 8 2 2-2 2 2 2-2 2",key:"sv1b1"}],["path",{d:"m22 8-2 2 2 2-2 2 2 2",key:"101i4y"}],["path",{d:"M8 8v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2",key:"1hbad5"}],["path",{d:"M16 10.34V6c0-.55-.45-1-1-1h-4.34",key:"1x5tf0"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cI=k("VibrateIcon",[["path",{d:"m2 8 2 2-2 2 2 2-2 2",key:"sv1b1"}],["path",{d:"m22 8-2 2 2 2-2 2 2 2",key:"101i4y"}],["rect",{width:"8",height:"14",x:"8",y:"5",rx:"1",key:"1oyrl4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dI=k("VideoOffIcon",[["path",{d:"M10.66 6H14a2 2 0 0 1 2 2v2.34l1 1L22 8v8",key:"ubwiq0"}],["path",{d:"M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2l10 10Z",key:"1l10zd"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uI=k("VideoIcon",[["path",{d:"m22 8-6 4 6 4V8Z",key:"50v9me"}],["rect",{width:"14",height:"12",x:"2",y:"6",rx:"2",ry:"2",key:"1rqjg6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pI=k("VideotapeIcon",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"M2 8h20",key:"d11cs7"}],["circle",{cx:"8",cy:"14",r:"2",key:"1k2qr5"}],["path",{d:"M8 12h8",key:"1wcyev"}],["circle",{cx:"16",cy:"14",r:"2",key:"14k7lr"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hI=k("ViewIcon",[["path",{d:"M5 12s2.545-5 7-5c4.454 0 7 5 7 5s-2.546 5-7 5c-4.455 0-7-5-7-5z",key:"vptub8"}],["path",{d:"M12 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2z",key:"10lhjs"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2",key:"mrq65r"}],["path",{d:"M21 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2",key:"be3xqs"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fI=k("VoicemailIcon",[["circle",{cx:"6",cy:"12",r:"4",key:"1ehtga"}],["circle",{cx:"18",cy:"12",r:"4",key:"4vafl8"}],["line",{x1:"6",x2:"18",y1:"16",y2:"16",key:"pmt8us"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mI=k("Volume1Icon",[["polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5",key:"16drj5"}],["path",{d:"M15.54 8.46a5 5 0 0 1 0 7.07",key:"ltjumu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vI=k("Volume2Icon",[["polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5",key:"16drj5"}],["path",{d:"M15.54 8.46a5 5 0 0 1 0 7.07",key:"ltjumu"}],["path",{d:"M19.07 4.93a10 10 0 0 1 0 14.14",key:"1kegas"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yI=k("VolumeXIcon",[["polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5",key:"16drj5"}],["line",{x1:"22",x2:"16",y1:"9",y2:"15",key:"1ewh16"}],["line",{x1:"16",x2:"22",y1:"9",y2:"15",key:"5ykzw1"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _I=k("VolumeIcon",[["polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5",key:"16drj5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gI=k("VoteIcon",[["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}],["path",{d:"M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z",key:"1ezoue"}],["path",{d:"M22 19H2",key:"nuriw5"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kI=k("Wallet2Icon",[["path",{d:"M17 14h.01",key:"7oqj8z"}],["path",{d:"M7 7h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14",key:"u1rqew"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bI=k("WalletCardsIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2",key:"4125el"}],["path",{d:"M3 11h3c.8 0 1.6.3 2.1.9l1.1.9c1.6 1.6 4.1 1.6 5.7 0l1.1-.9c.5-.5 1.3-.9 2.1-.9H21",key:"1dpki6"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wI=k("WalletIcon",[["path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4",key:"195gfw"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5",key:"195n9w"}],["path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z",key:"vllfpd"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xI=k("WallpaperIcon",[["circle",{cx:"8",cy:"9",r:"2",key:"gjzl9d"}],["path",{d:"m9 17 6.1-6.1a2 2 0 0 1 2.81.01L22 15V5a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2",key:"69xh40"}],["path",{d:"M8 21h8",key:"1ev6f3"}],["path",{d:"M12 17v4",key:"1riwvh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const MI=k("Wand2Icon",[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72Z",key:"1bcowg"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const CI=k("WandIcon",[["path",{d:"M15 4V2",key:"z1p9b7"}],["path",{d:"M15 16v-2",key:"px0unx"}],["path",{d:"M8 9h2",key:"1g203m"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M17.8 11.8 19 13",key:"yihg8r"}],["path",{d:"M15 9h0",key:"kg5t1u"}],["path",{d:"M17.8 6.2 19 5",key:"fd4us0"}],["path",{d:"m3 21 9-9",key:"1jfql5"}],["path",{d:"M12.2 6.2 11 5",key:"i3da3b"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const SI=k("WarehouseIcon",[["path",{d:"M22 8.35V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8.35A2 2 0 0 1 3.26 6.5l8-3.2a2 2 0 0 1 1.48 0l8 3.2A2 2 0 0 1 22 8.35Z",key:"gksnxg"}],["path",{d:"M6 18h12",key:"9pbo8z"}],["path",{d:"M6 14h12",key:"4cwo0f"}],["rect",{width:"12",height:"12",x:"6",y:"10",key:"apd30q"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const II=k("WatchIcon",[["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["polyline",{points:"12 10 12 12 13 13",key:"19dquz"}],["path",{d:"m16.13 7.66-.81-4.05a2 2 0 0 0-2-1.61h-2.68a2 2 0 0 0-2 1.61l-.78 4.05",key:"18k57s"}],["path",{d:"m7.88 16.36.8 4a2 2 0 0 0 2 1.61h2.72a2 2 0 0 0 2-1.61l.81-4.05",key:"16ny36"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const LI=k("WavesIcon",[["path",{d:"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"knzxuh"}],["path",{d:"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"2jd2cc"}],["path",{d:"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"rd2r6e"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $I=k("WaypointsIcon",[["circle",{cx:"12",cy:"4.5",r:"2.5",key:"r5ysbb"}],["path",{d:"m10.2 6.3-3.9 3.9",key:"1nzqf6"}],["circle",{cx:"4.5",cy:"12",r:"2.5",key:"jydg6v"}],["path",{d:"M7 12h10",key:"b7w52i"}],["circle",{cx:"19.5",cy:"12",r:"2.5",key:"1piiel"}],["path",{d:"m13.8 17.7 3.9-3.9",key:"1wyg1y"}],["circle",{cx:"12",cy:"19.5",r:"2.5",key:"13o1pw"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const AI=k("WebcamIcon",[["circle",{cx:"12",cy:"10",r:"8",key:"1gshiw"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}],["path",{d:"M7 22h10",key:"10w4w3"}],["path",{d:"M12 22v-4",key:"1utk9m"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const EI=k("WebhookIcon",[["path",{d:"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2",key:"q3hayz"}],["path",{d:"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06",key:"1go1hn"}],["path",{d:"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8",key:"qlwsc0"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const TI=k("WeightIcon",[["circle",{cx:"12",cy:"5",r:"3",key:"rqqgnr"}],["path",{d:"M6.5 8a2 2 0 0 0-1.905 1.46L2.1 18.5A2 2 0 0 0 4 21h16a2 2 0 0 0 1.925-2.54L19.4 9.5A2 2 0 0 0 17.48 8Z",key:"56o5sh"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const PI=k("WheatOffIcon",[["path",{d:"m2 22 10-10",key:"28ilpk"}],["path",{d:"m16 8-1.17 1.17",key:"1qqm82"}],["path",{d:"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"1rdhi6"}],["path",{d:"m8 8-.53.53a3.5 3.5 0 0 0 0 4.94L9 15l1.53-1.53c.55-.55.88-1.25.98-1.97",key:"4wz8re"}],["path",{d:"M10.91 5.26c.15-.26.34-.51.56-.73L13 3l1.53 1.53a3.5 3.5 0 0 1 .28 4.62",key:"rves66"}],["path",{d:"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z",key:"19rau1"}],["path",{d:"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"tc8ph9"}],["path",{d:"m16 16-.53.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.49 3.49 0 0 1 1.97-.98",key:"ak46r"}],["path",{d:"M18.74 13.09c.26-.15.51-.34.73-.56L21 11l-1.53-1.53a3.5 3.5 0 0 0-4.62-.28",key:"1tw520"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const DI=k("WheatIcon",[["path",{d:"M2 22 16 8",key:"60hf96"}],["path",{d:"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"1rdhi6"}],["path",{d:"M7.47 8.53 9 7l1.53 1.53a3.5 3.5 0 0 1 0 4.94L9 15l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"1sdzmb"}],["path",{d:"M11.47 4.53 13 3l1.53 1.53a3.5 3.5 0 0 1 0 4.94L13 11l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"eoatbi"}],["path",{d:"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z",key:"19rau1"}],["path",{d:"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"tc8ph9"}],["path",{d:"M15.47 13.47 17 15l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"2m8kc5"}],["path",{d:"M19.47 9.47 21 11l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L13 11l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"vex3ng"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const RI=k("WholeWordIcon",[["circle",{cx:"7",cy:"12",r:"3",key:"12clwm"}],["path",{d:"M10 9v6",key:"17i7lo"}],["circle",{cx:"17",cy:"12",r:"3",key:"gl7c2s"}],["path",{d:"M14 7v8",key:"dl84cr"}],["path",{d:"M22 17v1c0 .5-.5 1-1 1H3c-.5 0-1-.5-1-1v-1",key:"lt2kga"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const OI=k("WifiOffIcon",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M8.5 16.5a5 5 0 0 1 7 0",key:"sej527"}],["path",{d:"M2 8.82a15 15 0 0 1 4.17-2.65",key:"11utq1"}],["path",{d:"M10.66 5c4.01-.36 8.14.9 11.34 3.76",key:"hxefdu"}],["path",{d:"M16.85 11.25a10 10 0 0 1 2.22 1.68",key:"q734kn"}],["path",{d:"M5 13a10 10 0 0 1 5.24-2.76",key:"piq4yl"}],["line",{x1:"12",x2:"12.01",y1:"20",y2:"20",key:"of4bc4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const VI=k("WifiIcon",[["path",{d:"M5 13a10 10 0 0 1 14 0",key:"6v8j51"}],["path",{d:"M8.5 16.5a5 5 0 0 1 7 0",key:"sej527"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["line",{x1:"12",x2:"12.01",y1:"20",y2:"20",key:"of4bc4"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const UI=k("WindIcon",[["path",{d:"M17.7 7.7a2.5 2.5 0 1 1 1.8 4.3H2",key:"1k4u03"}],["path",{d:"M9.6 4.6A2 2 0 1 1 11 8H2",key:"b7d0fd"}],["path",{d:"M12.6 19.4A2 2 0 1 0 14 16H2",key:"1p5cb3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const FI=k("WineOffIcon",[["path",{d:"M8 22h8",key:"rmew8v"}],["path",{d:"M7 10h3m7 0h-1.343",key:"v48bem"}],["path",{d:"M12 15v7",key:"t2xh3l"}],["path",{d:"M7.307 7.307A12.33 12.33 0 0 0 7 10a5 5 0 0 0 7.391 4.391M8.638 2.981C8.75 2.668 8.872 2.34 9 2h6c1.5 4 2 6 2 8 0 .407-.05.809-.145 1.198",key:"1ymjlu"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jI=k("WineIcon",[["path",{d:"M8 22h8",key:"rmew8v"}],["path",{d:"M7 10h10",key:"1101jm"}],["path",{d:"M12 15v7",key:"t2xh3l"}],["path",{d:"M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z",key:"10ffi3"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const HI=k("WorkflowIcon",[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const NI=k("WrapTextIcon",[["line",{x1:"3",x2:"21",y1:"6",y2:"6",key:"4m8b97"}],["path",{d:"M3 12h15a3 3 0 1 1 0 6h-4",key:"1cl7v7"}],["polyline",{points:"16 16 14 18 16 20",key:"1jznyi"}],["line",{x1:"3",x2:"10",y1:"18",y2:"18",key:"1h33wv"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zI=k("WrenchIcon",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const BI=k("XCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qI=k("XOctagonIcon",[["polygon",{points:"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2",key:"h1p8hx"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const WI=k("XSquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const GI=k("XIcon",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ZI=k("YoutubeIcon",[["path",{d:"M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17",key:"1q2vi4"}],["path",{d:"m10 15 5-3-5-3z",key:"1jp15x"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const KI=k("ZapOffIcon",[["polyline",{points:"12.41 6.75 13 2 10.57 4.92",key:"122m05"}],["polyline",{points:"18.57 12.91 21 10 15.66 10",key:"16r43o"}],["polyline",{points:"8 8 3 14 12 14 11 22 16 16",key:"tmh4bc"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const XI=k("ZapIcon",[["polygon",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2",key:"45s27k"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const YI=k("ZoomInIcon",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const QI=k("ZoomOutIcon",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]);/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dne=Object.freeze(Object.defineProperty({__proto__:null,AArrowDown:O1,AArrowUp:V1,ALargeSmall:U1,Accessibility:F1,Activity:H1,ActivitySquare:j1,AirVent:N1,Airplay:z1,AlarmClock:q1,AlarmClockCheck:ki,AlarmClockMinus:bi,AlarmClockOff:B1,AlarmClockPlus:wi,AlarmSmoke:W1,Album:G1,AlertCircle:Z1,AlertOctagon:K1,AlertTriangle:X1,AlignCenter:J1,AlignCenterHorizontal:Y1,AlignCenterVertical:Q1,AlignEndHorizontal:ep,AlignEndVertical:tp,AlignHorizontalDistributeCenter:ap,AlignHorizontalDistributeEnd:np,AlignHorizontalDistributeStart:sp,AlignHorizontalJustifyCenter:op,AlignHorizontalJustifyEnd:rp,AlignHorizontalJustifyStart:ip,AlignHorizontalSpaceAround:lp,AlignHorizontalSpaceBetween:cp,AlignJustify:dp,AlignLeft:up,AlignRight:pp,AlignStartHorizontal:hp,AlignStartVertical:fp,AlignVerticalDistributeCenter:mp,AlignVerticalDistributeEnd:vp,AlignVerticalDistributeStart:yp,AlignVerticalJustifyCenter:_p,AlignVerticalJustifyEnd:gp,AlignVerticalJustifyStart:kp,AlignVerticalSpaceAround:bp,AlignVerticalSpaceBetween:wp,Ampersand:xp,Ampersands:Mp,Anchor:Cp,Angry:Sp,Annoyed:Ip,Antenna:Lp,Anvil:$p,Aperture:Ap,AppWindow:Ep,Apple:Tp,Archive:Rp,ArchiveRestore:Pp,ArchiveX:Dp,AreaChart:Op,Armchair:Vp,ArrowBigDown:Fp,ArrowBigDownDash:Up,ArrowBigLeft:Hp,ArrowBigLeftDash:jp,ArrowBigRight:zp,ArrowBigRightDash:Np,ArrowBigUp:qp,ArrowBigUpDash:Bp,ArrowDown:ih,ArrowDown01:Wp,ArrowDown10:Gp,ArrowDownAZ:xi,ArrowDownCircle:Zp,ArrowDownFromLine:Kp,ArrowDownLeft:Qp,ArrowDownLeftFromCircle:Xp,ArrowDownLeftSquare:Yp,ArrowDownNarrowWide:Jp,ArrowDownRight:ah,ArrowDownRightFromCircle:eh,ArrowDownRightSquare:th,ArrowDownSquare:nh,ArrowDownToDot:sh,ArrowDownToLine:oh,ArrowDownUp:rh,ArrowDownWideNarrow:Mi,ArrowDownZA:Ci,ArrowLeft:hh,ArrowLeftCircle:lh,ArrowLeftFromLine:ch,ArrowLeftRight:dh,ArrowLeftSquare:uh,ArrowLeftToLine:ph,ArrowRight:gh,ArrowRightCircle:fh,ArrowRightFromLine:mh,ArrowRightLeft:vh,ArrowRightSquare:yh,ArrowRightToLine:_h,ArrowUp:Rh,ArrowUp01:kh,ArrowUp10:bh,ArrowUpAZ:Si,ArrowUpCircle:wh,ArrowUpDown:xh,ArrowUpFromDot:Mh,ArrowUpFromLine:Ch,ArrowUpLeft:Lh,ArrowUpLeftFromCircle:Sh,ArrowUpLeftSquare:Ih,ArrowUpNarrowWide:Ii,ArrowUpRight:Eh,ArrowUpRightFromCircle:$h,ArrowUpRightSquare:Ah,ArrowUpSquare:Th,ArrowUpToLine:Ph,ArrowUpWideNarrow:Dh,ArrowUpZA:Li,ArrowsUpFromLine:Oh,Asterisk:Vh,AtSign:Uh,Atom:Fh,AudioLines:jh,AudioWaveform:Hh,Award:Nh,Axe:zh,Axis3d:$i,Baby:Bh,Backpack:qh,Badge:lf,BadgeAlert:Wh,BadgeCent:Gh,BadgeCheck:Ai,BadgeDollarSign:Zh,BadgeEuro:Kh,BadgeHelp:Xh,BadgeIndianRupee:Yh,BadgeInfo:Qh,BadgeJapaneseYen:Jh,BadgeMinus:ef,BadgePercent:tf,BadgePlus:af,BadgePoundSterling:nf,BadgeRussianRuble:sf,BadgeSwissFranc:of,BadgeX:rf,BaggageClaim:cf,Ban:df,Banana:uf,Banknote:pf,BarChart:gf,BarChart2:hf,BarChart3:ff,BarChart4:mf,BarChartBig:vf,BarChartHorizontal:_f,BarChartHorizontalBig:yf,Barcode:kf,Baseline:bf,Bath:wf,Battery:Lf,BatteryCharging:xf,BatteryFull:Mf,BatteryLow:Cf,BatteryMedium:Sf,BatteryWarning:If,Beaker:$f,Bean:Ef,BeanOff:Af,Bed:Df,BedDouble:Tf,BedSingle:Pf,Beef:Rf,Beer:Of,Bell:zf,BellDot:Vf,BellElectric:Uf,BellMinus:Ff,BellOff:jf,BellPlus:Hf,BellRing:Nf,Bike:Bf,Binary:qf,Biohazard:Wf,Bird:Gf,Bitcoin:Zf,Blinds:Kf,Blocks:Xf,Bluetooth:em,BluetoothConnected:Yf,BluetoothOff:Qf,BluetoothSearching:Jf,Bold:tm,Bolt:am,Bomb:nm,Bone:sm,Book:Im,BookA:om,BookAudio:rm,BookCheck:im,BookCopy:lm,BookDashed:Ei,BookDown:cm,BookHeadphones:dm,BookHeart:um,BookImage:pm,BookKey:hm,BookLock:fm,BookMarked:mm,BookMinus:vm,BookOpen:gm,BookOpenCheck:ym,BookOpenText:_m,BookPlus:km,BookText:bm,BookType:wm,BookUp:Mm,BookUp2:xm,BookUser:Cm,BookX:Sm,Bookmark:Tm,BookmarkCheck:Lm,BookmarkMinus:$m,BookmarkPlus:Am,BookmarkX:Em,BoomBox:Pm,Bot:Dm,Box:Om,BoxSelect:Rm,Boxes:Vm,Braces:Ti,Brackets:Um,Brain:Hm,BrainCircuit:Fm,BrainCog:jm,BrickWall:Nm,Briefcase:zm,BringToFront:Bm,Brush:qm,Bug:Zm,BugOff:Wm,BugPlay:Gm,Building:Xm,Building2:Km,Bus:Qm,BusFront:Ym,Cable:e2,CableCar:Jm,Cake:a2,CakeSlice:t2,Calculator:n2,Calendar:v2,CalendarCheck:o2,CalendarCheck2:s2,CalendarClock:r2,CalendarDays:i2,CalendarHeart:l2,CalendarMinus:c2,CalendarOff:d2,CalendarPlus:u2,CalendarRange:p2,CalendarSearch:h2,CalendarX:m2,CalendarX2:f2,Camera:_2,CameraOff:y2,CandlestickChart:g2,Candy:w2,CandyCane:k2,CandyOff:b2,Car:C2,CarFront:x2,CarTaxiFront:M2,Caravan:S2,Carrot:I2,CaseLower:L2,CaseSensitive:$2,CaseUpper:A2,CassetteTape:E2,Cast:T2,Castle:P2,Cat:D2,Cctv:R2,Check:H2,CheckCheck:O2,CheckCircle:U2,CheckCircle2:V2,CheckSquare:j2,CheckSquare2:F2,ChefHat:N2,Cherry:z2,ChevronDown:W2,ChevronDownCircle:B2,ChevronDownSquare:q2,ChevronFirst:G2,ChevronLast:Z2,ChevronLeft:Y2,ChevronLeftCircle:K2,ChevronLeftSquare:X2,ChevronRight:e0,ChevronRightCircle:Q2,ChevronRightSquare:J2,ChevronUp:n0,ChevronUpCircle:t0,ChevronUpSquare:a0,ChevronsDown:o0,ChevronsDownUp:s0,ChevronsLeft:i0,ChevronsLeftRight:r0,ChevronsRight:c0,ChevronsRightLeft:l0,ChevronsUp:u0,ChevronsUpDown:d0,Chrome:p0,Church:h0,Cigarette:m0,CigaretteOff:f0,Circle:M0,CircleDashed:v0,CircleDollarSign:y0,CircleDot:g0,CircleDotDashed:_0,CircleEllipsis:k0,CircleEqual:b0,CircleOff:w0,CircleSlash:x0,CircleSlash2:Pi,CircleUser:Ri,CircleUserRound:Di,CircuitBoard:C0,Citrus:S0,Clapperboard:I0,Clipboard:O0,ClipboardCheck:L0,ClipboardCopy:$0,ClipboardEdit:A0,ClipboardList:E0,ClipboardPaste:T0,ClipboardSignature:P0,ClipboardType:D0,ClipboardX:R0,Clock:K0,Clock1:V0,Clock10:U0,Clock11:F0,Clock12:j0,Clock2:H0,Clock3:N0,Clock4:z0,Clock5:B0,Clock6:q0,Clock7:W0,Clock8:G0,Clock9:Z0,Cloud:cv,CloudCog:X0,CloudDrizzle:Y0,CloudFog:Q0,CloudHail:J0,CloudLightning:ev,CloudMoon:av,CloudMoonRain:tv,CloudOff:nv,CloudRain:ov,CloudRainWind:sv,CloudSnow:rv,CloudSun:lv,CloudSunRain:iv,Cloudy:dv,Clover:uv,Club:pv,Code:fv,Code2:hv,Codepen:mv,Codesandbox:vv,Coffee:yv,Cog:_v,Coins:gv,Columns2:Oi,Columns3:Vi,Columns4:kv,Combine:bv,Command:wv,Compass:xv,Component:Mv,Computer:Cv,ConciergeBell:Sv,Cone:Iv,Construction:Lv,Contact:Av,Contact2:$v,Container:Ev,Contrast:Tv,Cookie:Pv,CookingPot:Dv,Copy:jv,CopyCheck:Rv,CopyMinus:Ov,CopyPlus:Vv,CopySlash:Uv,CopyX:Fv,Copyleft:Hv,Copyright:Nv,CornerDownLeft:zv,CornerDownRight:Bv,CornerLeftDown:qv,CornerLeftUp:Wv,CornerRightDown:Gv,CornerRightUp:Zv,CornerUpLeft:Kv,CornerUpRight:Xv,Cpu:Yv,CreativeCommons:Qv,CreditCard:Jv,Croissant:ey,Crop:ty,Cross:ay,Crosshair:ny,Crown:sy,Cuboid:oy,CupSoda:ry,Currency:iy,Cylinder:ly,Database:uy,DatabaseBackup:cy,DatabaseZap:dy,Delete:py,Dessert:hy,Diameter:fy,Diamond:my,Dice1:vy,Dice2:yy,Dice3:_y,Dice4:gy,Dice5:ky,Dice6:by,Dices:wy,Diff:xy,Disc:Iy,Disc2:My,Disc3:Cy,DiscAlbum:Sy,Divide:Ay,DivideCircle:Ly,DivideSquare:$y,Dna:Ty,DnaOff:Ey,Dog:Py,DollarSign:Dy,Donut:Ry,DoorClosed:Oy,DoorOpen:Vy,Dot:Uy,Download:jy,DownloadCloud:Fy,DraftingCompass:Hy,Drama:Ny,Dribbble:zy,Drill:By,Droplet:qy,Droplets:Wy,Drum:Gy,Drumstick:Zy,Dumbbell:Ky,Ear:Yy,EarOff:Xy,Egg:e_,EggFried:Qy,EggOff:Jy,Equal:a_,EqualNot:t_,Eraser:n_,Euro:s_,Expand:o_,ExternalLink:r_,Eye:l_,EyeOff:i_,Facebook:c_,Factory:d_,Fan:u_,FastForward:p_,Feather:h_,Fence:f_,FerrisWheel:m_,Figma:v_,File:yg,FileArchive:y_,FileAudio:g_,FileAudio2:__,FileAxis3d:Ui,FileBadge:b_,FileBadge2:k_,FileBarChart:x_,FileBarChart2:w_,FileBox:M_,FileCheck:S_,FileCheck2:C_,FileClock:I_,FileCode:$_,FileCode2:L_,FileCog:Fi,FileDiff:A_,FileDigit:E_,FileDown:T_,FileEdit:P_,FileHeart:D_,FileImage:R_,FileInput:O_,FileJson:U_,FileJson2:V_,FileKey:j_,FileKey2:F_,FileLineChart:H_,FileLock:z_,FileLock2:N_,FileMinus:q_,FileMinus2:B_,FileMusic:W_,FileOutput:G_,FilePieChart:Z_,FilePlus:X_,FilePlus2:K_,FileQuestion:Y_,FileScan:Q_,FileSearch:eg,FileSearch2:J_,FileSignature:tg,FileSpreadsheet:ag,FileStack:ng,FileSymlink:sg,FileTerminal:og,FileText:rg,FileType:lg,FileType2:ig,FileUp:cg,FileVideo:ug,FileVideo2:dg,FileVolume:hg,FileVolume2:pg,FileWarning:fg,FileX:vg,FileX2:mg,Files:_g,Film:gg,Filter:bg,FilterX:kg,Fingerprint:wg,FireExtinguisher:xg,Fish:Sg,FishOff:Mg,FishSymbol:Cg,Flag:Ag,FlagOff:Ig,FlagTriangleLeft:Lg,FlagTriangleRight:$g,Flame:Tg,FlameKindling:Eg,Flashlight:Dg,FlashlightOff:Pg,FlaskConical:Og,FlaskConicalOff:Rg,FlaskRound:Vg,FlipHorizontal:Fg,FlipHorizontal2:Ug,FlipVertical:Hg,FlipVertical2:jg,Flower:zg,Flower2:Ng,Focus:Bg,FoldHorizontal:qg,FoldVertical:Wg,Folder:kk,FolderArchive:Gg,FolderCheck:Zg,FolderClock:Kg,FolderClosed:Xg,FolderCog:ji,FolderDot:Yg,FolderDown:Qg,FolderEdit:Jg,FolderGit:tk,FolderGit2:ek,FolderHeart:ak,FolderInput:nk,FolderKanban:sk,FolderKey:ok,FolderLock:rk,FolderMinus:ik,FolderOpen:ck,FolderOpenDot:lk,FolderOutput:dk,FolderPlus:uk,FolderRoot:pk,FolderSearch:fk,FolderSearch2:hk,FolderSymlink:mk,FolderSync:vk,FolderTree:yk,FolderUp:_k,FolderX:gk,Folders:bk,Footprints:wk,Forklift:xk,FormInput:Mk,Forward:Ck,Frame:Sk,Framer:Ik,Frown:Lk,Fuel:$k,Fullscreen:Ak,FunctionSquare:Ek,GalleryHorizontal:Pk,GalleryHorizontalEnd:Tk,GalleryThumbnails:Dk,GalleryVertical:Ok,GalleryVerticalEnd:Rk,Gamepad:Uk,Gamepad2:Vk,GanttChart:Fk,GanttChartSquare:Hi,Gauge:Hk,GaugeCircle:jk,Gavel:Nk,Gem:zk,Ghost:Bk,Gift:qk,GitBranch:Gk,GitBranchPlus:Wk,GitCommitHorizontal:Ni,GitCommitVertical:Zk,GitCompare:Xk,GitCompareArrows:Kk,GitFork:Yk,GitGraph:Qk,GitMerge:Jk,GitPullRequest:ob,GitPullRequestArrow:eb,GitPullRequestClosed:tb,GitPullRequestCreate:nb,GitPullRequestCreateArrow:ab,GitPullRequestDraft:sb,Github:rb,Gitlab:ib,GlassWater:lb,Glasses:cb,Globe:ub,Globe2:db,Goal:pb,Grab:hb,GraduationCap:fb,Grape:mb,Grid2x2:zi,Grid3x3:yo,Grip:_b,GripHorizontal:vb,GripVertical:yb,Group:gb,Guitar:kb,Hammer:bb,Hand:xb,HandMetal:wb,HardDrive:Sb,HardDriveDownload:Mb,HardDriveUpload:Cb,HardHat:Ib,Hash:Lb,Haze:$b,HdmiPort:Ab,Heading:Vb,Heading1:Eb,Heading2:Tb,Heading3:Pb,Heading4:Db,Heading5:Rb,Heading6:Ob,Headphones:Ub,Heart:zb,HeartCrack:Fb,HeartHandshake:jb,HeartOff:Hb,HeartPulse:Nb,HelpCircle:Bb,HelpingHand:qb,Hexagon:Wb,Highlighter:Gb,History:Zb,Home:Kb,Hop:Yb,HopOff:Xb,Hotel:Qb,Hourglass:Jb,IceCream:tw,IceCream2:ew,Image:rw,ImageDown:aw,ImageMinus:nw,ImageOff:sw,ImagePlus:ow,Import:iw,Inbox:lw,Indent:cw,IndianRupee:dw,Infinity:uw,Info:pw,InspectionPanel:hw,Instagram:fw,Italic:mw,IterationCcw:vw,IterationCw:yw,JapaneseYen:_w,Joystick:gw,Kanban:kw,KanbanSquare:qi,KanbanSquareDashed:Bi,Key:xw,KeyRound:bw,KeySquare:ww,Keyboard:Cw,KeyboardMusic:Mw,Lamp:Ew,LampCeiling:Sw,LampDesk:Iw,LampFloor:Lw,LampWallDown:$w,LampWallUp:Aw,LandPlot:Tw,Landmark:Pw,Languages:Dw,Laptop:Ow,Laptop2:Rw,Lasso:Uw,LassoSelect:Vw,Laugh:Fw,Layers:Nw,Layers2:jw,Layers3:Hw,LayoutDashboard:zw,LayoutGrid:Bw,LayoutList:qw,LayoutPanelLeft:Ww,LayoutPanelTop:Gw,LayoutTemplate:Zw,Leaf:Kw,LeafyGreen:Xw,Library:Jw,LibraryBig:Yw,LibrarySquare:Qw,LifeBuoy:e4,Ligature:t4,Lightbulb:n4,LightbulbOff:a4,LineChart:s4,Link:i4,Link2:r4,Link2Off:o4,Linkedin:l4,List:w4,ListChecks:c4,ListEnd:d4,ListFilter:u4,ListMinus:p4,ListMusic:h4,ListOrdered:f4,ListPlus:m4,ListRestart:v4,ListStart:y4,ListTodo:_4,ListTree:g4,ListVideo:k4,ListX:b4,Loader:M4,Loader2:x4,Locate:I4,LocateFixed:C4,LocateOff:S4,Lock:$4,LockKeyhole:L4,LogIn:A4,LogOut:E4,Lollipop:T4,Luggage:P4,MSquare:D4,Magnet:R4,Mail:B4,MailCheck:O4,MailMinus:V4,MailOpen:U4,MailPlus:F4,MailQuestion:j4,MailSearch:H4,MailWarning:N4,MailX:z4,Mailbox:q4,Mails:W4,Map:X4,MapPin:Z4,MapPinOff:G4,MapPinned:K4,Martini:Y4,Maximize:J4,Maximize2:Q4,Medal:e5,Megaphone:a5,MegaphoneOff:t5,Meh:n5,MemoryStick:s5,Menu:r5,MenuSquare:o5,Merge:i5,MessageCircle:_5,MessageCircleCode:l5,MessageCircleDashed:c5,MessageCircleHeart:d5,MessageCircleMore:u5,MessageCircleOff:p5,MessageCirclePlus:h5,MessageCircleQuestion:f5,MessageCircleReply:m5,MessageCircleWarning:v5,MessageCircleX:y5,MessageSquare:P5,MessageSquareCode:g5,MessageSquareDashed:k5,MessageSquareDiff:b5,MessageSquareDot:w5,MessageSquareHeart:x5,MessageSquareMore:M5,MessageSquareOff:C5,MessageSquarePlus:S5,MessageSquareQuote:I5,MessageSquareReply:L5,MessageSquareShare:$5,MessageSquareText:A5,MessageSquareWarning:E5,MessageSquareX:T5,MessagesSquare:D5,Mic:V5,Mic2:R5,MicOff:O5,Microscope:U5,Microwave:F5,Milestone:j5,Milk:N5,MilkOff:H5,Minimize:B5,Minimize2:z5,Minus:G5,MinusCircle:q5,MinusSquare:W5,Monitor:o3,MonitorCheck:Z5,MonitorDot:K5,MonitorDown:X5,MonitorOff:Y5,MonitorPause:Q5,MonitorPlay:J5,MonitorSmartphone:e3,MonitorSpeaker:t3,MonitorStop:a3,MonitorUp:n3,MonitorX:s3,Moon:i3,MoonStar:r3,MoreHorizontal:l3,MoreVertical:c3,Mountain:u3,MountainSnow:d3,Mouse:v3,MousePointer:m3,MousePointer2:p3,MousePointerClick:h3,MousePointerSquare:Wi,MousePointerSquareDashed:f3,Move:$3,Move3d:Gi,MoveDiagonal:_3,MoveDiagonal2:y3,MoveDown:b3,MoveDownLeft:g3,MoveDownRight:k3,MoveHorizontal:w3,MoveLeft:x3,MoveRight:M3,MoveUp:I3,MoveUpLeft:C3,MoveUpRight:S3,MoveVertical:L3,Music:P3,Music2:A3,Music3:E3,Music4:T3,Navigation:V3,Navigation2:R3,Navigation2Off:D3,NavigationOff:O3,Network:U3,Newspaper:F3,Nfc:j3,Nut:N3,NutOff:H3,Octagon:z3,Option:B3,Orbit:q3,Outdent:W3,Package:ex,Package2:G3,PackageCheck:Z3,PackageMinus:K3,PackageOpen:X3,PackagePlus:Y3,PackageSearch:Q3,PackageX:J3,PaintBucket:tx,Paintbrush:nx,Paintbrush2:ax,Palette:sx,Palmtree:ox,PanelBottom:lx,PanelBottomClose:rx,PanelBottomDashed:Zi,PanelBottomOpen:ix,PanelLeft:Qi,PanelLeftClose:Ki,PanelLeftDashed:Xi,PanelLeftOpen:Yi,PanelRight:ux,PanelRightClose:cx,PanelRightDashed:Ji,PanelRightOpen:dx,PanelTop:fx,PanelTopClose:px,PanelTopDashed:el,PanelTopOpen:hx,PanelsLeftBottom:mx,PanelsRightBottom:vx,PanelsTopLeft:tl,Paperclip:yx,Parentheses:_x,ParkingCircle:kx,ParkingCircleOff:gx,ParkingMeter:bx,ParkingSquare:xx,ParkingSquareOff:wx,PartyPopper:Mx,Pause:Ix,PauseCircle:Cx,PauseOctagon:Sx,PawPrint:Lx,PcCase:$x,Pen:nl,PenLine:al,PenSquare:_o,PenTool:Ax,Pencil:Px,PencilLine:Ex,PencilRuler:Tx,Pentagon:Dx,Percent:Ux,PercentCircle:Rx,PercentDiamond:Ox,PercentSquare:Vx,PersonStanding:Fx,Phone:Wx,PhoneCall:jx,PhoneForwarded:Hx,PhoneIncoming:Nx,PhoneMissed:zx,PhoneOff:Bx,PhoneOutgoing:qx,Pi:Zx,PiSquare:Gx,Piano:Kx,PictureInPicture:Yx,PictureInPicture2:Xx,PieChart:Qx,PiggyBank:Jx,Pilcrow:t8,PilcrowSquare:e8,Pill:a8,Pin:s8,PinOff:n8,Pipette:o8,Pizza:r8,Plane:c8,PlaneLanding:i8,PlaneTakeoff:l8,Play:p8,PlayCircle:d8,PlaySquare:u8,Plug:v8,Plug2:h8,PlugZap:m8,PlugZap2:f8,Plus:g8,PlusCircle:y8,PlusSquare:_8,Pocket:b8,PocketKnife:k8,Podcast:w8,Pointer:M8,PointerOff:x8,Popcorn:C8,Popsicle:S8,PoundSterling:I8,Power:E8,PowerCircle:L8,PowerOff:$8,PowerSquare:A8,Presentation:T8,Printer:P8,Projector:D8,Puzzle:R8,Pyramid:O8,QrCode:V8,Quote:U8,Rabbit:F8,Radar:j8,Radiation:H8,Radio:B8,RadioReceiver:N8,RadioTower:z8,Radius:q8,RailSymbol:W8,Rainbow:G8,Rat:Z8,Ratio:K8,Receipt:X8,RectangleHorizontal:Y8,RectangleVertical:Q8,Recycle:J8,Redo:a6,Redo2:e6,RedoDot:t6,RefreshCcw:s6,RefreshCcwDot:n6,RefreshCw:r6,RefreshCwOff:o6,Refrigerator:i6,Regex:l6,RemoveFormatting:c6,Repeat:p6,Repeat1:d6,Repeat2:u6,Replace:f6,ReplaceAll:h6,Reply:v6,ReplyAll:m6,Rewind:y6,Ribbon:_6,Rocket:g6,RockingChair:k6,RollerCoaster:b6,Rotate3d:sl,RotateCcw:w6,RotateCw:x6,Route:C6,RouteOff:M6,Router:S6,Rows2:ol,Rows3:rl,Rows4:I6,Rss:L6,Ruler:$6,RussianRuble:A6,Sailboat:E6,Salad:T6,Sandwich:P6,Satellite:R6,SatelliteDish:D6,Save:V6,SaveAll:O6,Scale:U6,Scale3d:il,Scaling:F6,Scan:W6,ScanBarcode:j6,ScanEye:H6,ScanFace:N6,ScanLine:z6,ScanSearch:B6,ScanText:q6,ScatterChart:G6,School:K6,School2:Z6,Scissors:J6,ScissorsLineDashed:X6,ScissorsSquare:Q6,ScissorsSquareDashedBottom:Y6,ScreenShare:tM,ScreenShareOff:eM,Scroll:nM,ScrollText:aM,Search:lM,SearchCheck:sM,SearchCode:oM,SearchSlash:rM,SearchX:iM,Send:dM,SendHorizontal:ll,SendToBack:cM,SeparatorHorizontal:uM,SeparatorVertical:pM,Server:vM,ServerCog:hM,ServerCrash:fM,ServerOff:mM,Settings:_M,Settings2:yM,Shapes:gM,Share:bM,Share2:kM,Sheet:wM,Shell:xM,Shield:PM,ShieldAlert:MM,ShieldBan:CM,ShieldCheck:SM,ShieldEllipsis:IM,ShieldHalf:LM,ShieldMinus:$M,ShieldOff:AM,ShieldPlus:EM,ShieldQuestion:TM,ShieldX:cl,Ship:RM,ShipWheel:DM,Shirt:OM,ShoppingBag:VM,ShoppingBasket:UM,ShoppingCart:FM,Shovel:jM,ShowerHead:HM,Shrink:NM,Shrub:zM,Shuffle:BM,Sigma:WM,SigmaSquare:qM,Signal:YM,SignalHigh:GM,SignalLow:ZM,SignalMedium:KM,SignalZero:XM,Signpost:JM,SignpostBig:QM,Siren:e7,SkipBack:t7,SkipForward:a7,Skull:n7,Slack:s7,Slash:o7,Slice:r7,Sliders:l7,SlidersHorizontal:i7,Smartphone:u7,SmartphoneCharging:c7,SmartphoneNfc:d7,Smile:h7,SmilePlus:p7,Snail:f7,Snowflake:m7,Sofa:v7,Soup:y7,Space:_7,Spade:g7,Sparkle:k7,Sparkles:dl,Speaker:b7,Speech:w7,SpellCheck:M7,SpellCheck2:x7,Spline:C7,Split:L7,SplitSquareHorizontal:S7,SplitSquareVertical:I7,SprayCan:$7,Sprout:A7,Square:F7,SquareAsterisk:E7,SquareCode:T7,SquareDashedBottom:D7,SquareDashedBottomCode:P7,SquareDot:R7,SquareEqual:O7,SquareSlash:V7,SquareStack:U7,SquareUser:pl,SquareUserRound:ul,Squircle:j7,Squirrel:H7,Stamp:N7,Star:q7,StarHalf:z7,StarOff:B7,StepBack:W7,StepForward:G7,Stethoscope:Z7,Sticker:K7,StickyNote:X7,StopCircle:Y7,Store:Q7,StretchHorizontal:J7,StretchVertical:eC,Strikethrough:tC,Subscript:aC,Subtitles:nC,Sun:lC,SunDim:sC,SunMedium:oC,SunMoon:rC,SunSnow:iC,Sunrise:cC,Sunset:dC,Superscript:uC,SwissFranc:pC,SwitchCamera:hC,Sword:fC,Swords:mC,Syringe:vC,Table:gC,Table2:yC,TableProperties:_C,Tablet:bC,TabletSmartphone:kC,Tablets:wC,Tag:xC,Tags:MC,Tally1:CC,Tally2:SC,Tally3:IC,Tally4:LC,Tally5:$C,Tangent:AC,Target:EC,Tent:PC,TentTree:TC,Terminal:RC,TerminalSquare:DC,TestTube:VC,TestTube2:OC,TestTubes:UC,Text:NC,TextCursor:jC,TextCursorInput:FC,TextQuote:HC,TextSelect:hl,Theater:zC,Thermometer:WC,ThermometerSnowflake:BC,ThermometerSun:qC,ThumbsDown:GC,ThumbsUp:ZC,Ticket:KC,Timer:QC,TimerOff:XC,TimerReset:YC,ToggleLeft:JC,ToggleRight:eS,Tornado:tS,Torus:aS,Touchpad:sS,TouchpadOff:nS,TowerControl:oS,ToyBrick:rS,Tractor:iS,TrafficCone:lS,TrainFront:dS,TrainFrontTunnel:cS,TrainTrack:uS,TramFront:fl,Trash:hS,Trash2:pS,TreeDeciduous:fS,TreePine:mS,Trees:vS,Trello:yS,TrendingDown:_S,TrendingUp:gS,Triangle:bS,TriangleRight:kS,Trophy:wS,Truck:xS,Turtle:MS,Tv:SS,Tv2:CS,Twitch:IS,Twitter:LS,Type:$S,Umbrella:ES,UmbrellaOff:AS,Underline:TS,Undo:RS,Undo2:PS,UndoDot:DS,UnfoldHorizontal:OS,UnfoldVertical:VS,Ungroup:US,Unlink:jS,Unlink2:FS,Unlock:NS,UnlockKeyhole:HS,Unplug:zS,Upload:qS,UploadCloud:BS,Usb:WS,User:eI,UserCheck:GS,UserCog:ZS,UserMinus:KS,UserPlus:XS,UserRound:kl,UserRoundCheck:ml,UserRoundCog:vl,UserRoundMinus:yl,UserRoundPlus:_l,UserRoundSearch:YS,UserRoundX:gl,UserSearch:QS,UserX:JS,Users:tI,UsersRound:bl,Utensils:nI,UtensilsCrossed:aI,UtilityPole:sI,Variable:oI,Vegan:rI,VenetianMask:iI,Vibrate:cI,VibrateOff:lI,Video:uI,VideoOff:dI,Videotape:pI,View:hI,Voicemail:fI,Volume:_I,Volume1:mI,Volume2:vI,VolumeX:yI,Vote:gI,Wallet:wI,Wallet2:kI,WalletCards:bI,Wallpaper:xI,Wand:CI,Wand2:MI,Warehouse:SI,Watch:II,Waves:LI,Waypoints:$I,Webcam:AI,Webhook:EI,Weight:TI,Wheat:DI,WheatOff:PI,WholeWord:RI,Wifi:VI,WifiOff:OI,Wind:UI,Wine:jI,WineOff:FI,Workflow:HI,WrapText:NI,Wrench:zI,X:GI,XCircle:BI,XOctagon:qI,XSquare:WI,Youtube:ZI,Zap:XI,ZapOff:KI,ZoomIn:YI,ZoomOut:QI},Symbol.toStringTag,{value:"Module"}));/** + * @license lucide-vue-next v0.304.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rne=Object.freeze(Object.defineProperty({__proto__:null,AArrowDown:O1,AArrowDownIcon:O1,AArrowUp:V1,AArrowUpIcon:V1,ALargeSmall:U1,ALargeSmallIcon:U1,Accessibility:F1,AccessibilityIcon:F1,Activity:H1,ActivityIcon:H1,ActivitySquare:j1,ActivitySquareIcon:j1,AirVent:N1,AirVentIcon:N1,Airplay:z1,AirplayIcon:z1,AlarmCheck:ki,AlarmCheckIcon:ki,AlarmClock:q1,AlarmClockCheck:ki,AlarmClockCheckIcon:ki,AlarmClockIcon:q1,AlarmClockMinus:bi,AlarmClockMinusIcon:bi,AlarmClockOff:B1,AlarmClockOffIcon:B1,AlarmClockPlus:wi,AlarmClockPlusIcon:wi,AlarmMinus:bi,AlarmMinusIcon:bi,AlarmPlus:wi,AlarmPlusIcon:wi,AlarmSmoke:W1,AlarmSmokeIcon:W1,Album:G1,AlbumIcon:G1,AlertCircle:Z1,AlertCircleIcon:Z1,AlertOctagon:K1,AlertOctagonIcon:K1,AlertTriangle:X1,AlertTriangleIcon:X1,AlignCenter:J1,AlignCenterHorizontal:Y1,AlignCenterHorizontalIcon:Y1,AlignCenterIcon:J1,AlignCenterVertical:Q1,AlignCenterVerticalIcon:Q1,AlignEndHorizontal:ep,AlignEndHorizontalIcon:ep,AlignEndVertical:tp,AlignEndVerticalIcon:tp,AlignHorizontalDistributeCenter:ap,AlignHorizontalDistributeCenterIcon:ap,AlignHorizontalDistributeEnd:np,AlignHorizontalDistributeEndIcon:np,AlignHorizontalDistributeStart:sp,AlignHorizontalDistributeStartIcon:sp,AlignHorizontalJustifyCenter:op,AlignHorizontalJustifyCenterIcon:op,AlignHorizontalJustifyEnd:rp,AlignHorizontalJustifyEndIcon:rp,AlignHorizontalJustifyStart:ip,AlignHorizontalJustifyStartIcon:ip,AlignHorizontalSpaceAround:lp,AlignHorizontalSpaceAroundIcon:lp,AlignHorizontalSpaceBetween:cp,AlignHorizontalSpaceBetweenIcon:cp,AlignJustify:dp,AlignJustifyIcon:dp,AlignLeft:up,AlignLeftIcon:up,AlignRight:pp,AlignRightIcon:pp,AlignStartHorizontal:hp,AlignStartHorizontalIcon:hp,AlignStartVertical:fp,AlignStartVerticalIcon:fp,AlignVerticalDistributeCenter:mp,AlignVerticalDistributeCenterIcon:mp,AlignVerticalDistributeEnd:vp,AlignVerticalDistributeEndIcon:vp,AlignVerticalDistributeStart:yp,AlignVerticalDistributeStartIcon:yp,AlignVerticalJustifyCenter:_p,AlignVerticalJustifyCenterIcon:_p,AlignVerticalJustifyEnd:gp,AlignVerticalJustifyEndIcon:gp,AlignVerticalJustifyStart:kp,AlignVerticalJustifyStartIcon:kp,AlignVerticalSpaceAround:bp,AlignVerticalSpaceAroundIcon:bp,AlignVerticalSpaceBetween:wp,AlignVerticalSpaceBetweenIcon:wp,Ampersand:xp,AmpersandIcon:xp,Ampersands:Mp,AmpersandsIcon:Mp,Anchor:Cp,AnchorIcon:Cp,Angry:Sp,AngryIcon:Sp,Annoyed:Ip,AnnoyedIcon:Ip,Antenna:Lp,AntennaIcon:Lp,Anvil:$p,AnvilIcon:$p,Aperture:Ap,ApertureIcon:Ap,AppWindow:Ep,AppWindowIcon:Ep,Apple:Tp,AppleIcon:Tp,Archive:Rp,ArchiveIcon:Rp,ArchiveRestore:Pp,ArchiveRestoreIcon:Pp,ArchiveX:Dp,ArchiveXIcon:Dp,AreaChart:Op,AreaChartIcon:Op,Armchair:Vp,ArmchairIcon:Vp,ArrowBigDown:Fp,ArrowBigDownDash:Up,ArrowBigDownDashIcon:Up,ArrowBigDownIcon:Fp,ArrowBigLeft:Hp,ArrowBigLeftDash:jp,ArrowBigLeftDashIcon:jp,ArrowBigLeftIcon:Hp,ArrowBigRight:zp,ArrowBigRightDash:Np,ArrowBigRightDashIcon:Np,ArrowBigRightIcon:zp,ArrowBigUp:qp,ArrowBigUpDash:Bp,ArrowBigUpDashIcon:Bp,ArrowBigUpIcon:qp,ArrowDown:ih,ArrowDown01:Wp,ArrowDown01Icon:Wp,ArrowDown10:Gp,ArrowDown10Icon:Gp,ArrowDownAZ:xi,ArrowDownAZIcon:xi,ArrowDownAz:xi,ArrowDownAzIcon:xi,ArrowDownCircle:Zp,ArrowDownCircleIcon:Zp,ArrowDownFromLine:Kp,ArrowDownFromLineIcon:Kp,ArrowDownIcon:ih,ArrowDownLeft:Qp,ArrowDownLeftFromCircle:Xp,ArrowDownLeftFromCircleIcon:Xp,ArrowDownLeftIcon:Qp,ArrowDownLeftSquare:Yp,ArrowDownLeftSquareIcon:Yp,ArrowDownNarrowWide:Jp,ArrowDownNarrowWideIcon:Jp,ArrowDownRight:ah,ArrowDownRightFromCircle:eh,ArrowDownRightFromCircleIcon:eh,ArrowDownRightIcon:ah,ArrowDownRightSquare:th,ArrowDownRightSquareIcon:th,ArrowDownSquare:nh,ArrowDownSquareIcon:nh,ArrowDownToDot:sh,ArrowDownToDotIcon:sh,ArrowDownToLine:oh,ArrowDownToLineIcon:oh,ArrowDownUp:rh,ArrowDownUpIcon:rh,ArrowDownWideNarrow:Mi,ArrowDownWideNarrowIcon:Mi,ArrowDownZA:Ci,ArrowDownZAIcon:Ci,ArrowDownZa:Ci,ArrowDownZaIcon:Ci,ArrowLeft:hh,ArrowLeftCircle:lh,ArrowLeftCircleIcon:lh,ArrowLeftFromLine:ch,ArrowLeftFromLineIcon:ch,ArrowLeftIcon:hh,ArrowLeftRight:dh,ArrowLeftRightIcon:dh,ArrowLeftSquare:uh,ArrowLeftSquareIcon:uh,ArrowLeftToLine:ph,ArrowLeftToLineIcon:ph,ArrowRight:gh,ArrowRightCircle:fh,ArrowRightCircleIcon:fh,ArrowRightFromLine:mh,ArrowRightFromLineIcon:mh,ArrowRightIcon:gh,ArrowRightLeft:vh,ArrowRightLeftIcon:vh,ArrowRightSquare:yh,ArrowRightSquareIcon:yh,ArrowRightToLine:_h,ArrowRightToLineIcon:_h,ArrowUp:Rh,ArrowUp01:kh,ArrowUp01Icon:kh,ArrowUp10:bh,ArrowUp10Icon:bh,ArrowUpAZ:Si,ArrowUpAZIcon:Si,ArrowUpAz:Si,ArrowUpAzIcon:Si,ArrowUpCircle:wh,ArrowUpCircleIcon:wh,ArrowUpDown:xh,ArrowUpDownIcon:xh,ArrowUpFromDot:Mh,ArrowUpFromDotIcon:Mh,ArrowUpFromLine:Ch,ArrowUpFromLineIcon:Ch,ArrowUpIcon:Rh,ArrowUpLeft:Lh,ArrowUpLeftFromCircle:Sh,ArrowUpLeftFromCircleIcon:Sh,ArrowUpLeftIcon:Lh,ArrowUpLeftSquare:Ih,ArrowUpLeftSquareIcon:Ih,ArrowUpNarrowWide:Ii,ArrowUpNarrowWideIcon:Ii,ArrowUpRight:Eh,ArrowUpRightFromCircle:$h,ArrowUpRightFromCircleIcon:$h,ArrowUpRightIcon:Eh,ArrowUpRightSquare:Ah,ArrowUpRightSquareIcon:Ah,ArrowUpSquare:Th,ArrowUpSquareIcon:Th,ArrowUpToLine:Ph,ArrowUpToLineIcon:Ph,ArrowUpWideNarrow:Dh,ArrowUpWideNarrowIcon:Dh,ArrowUpZA:Li,ArrowUpZAIcon:Li,ArrowUpZa:Li,ArrowUpZaIcon:Li,ArrowsUpFromLine:Oh,ArrowsUpFromLineIcon:Oh,Asterisk:Vh,AsteriskIcon:Vh,AtSign:Uh,AtSignIcon:Uh,Atom:Fh,AtomIcon:Fh,AudioLines:jh,AudioLinesIcon:jh,AudioWaveform:Hh,AudioWaveformIcon:Hh,Award:Nh,AwardIcon:Nh,Axe:zh,AxeIcon:zh,Axis3D:$i,Axis3DIcon:$i,Axis3d:$i,Axis3dIcon:$i,Baby:Bh,BabyIcon:Bh,Backpack:qh,BackpackIcon:qh,Badge:lf,BadgeAlert:Wh,BadgeAlertIcon:Wh,BadgeCent:Gh,BadgeCentIcon:Gh,BadgeCheck:Ai,BadgeCheckIcon:Ai,BadgeDollarSign:Zh,BadgeDollarSignIcon:Zh,BadgeEuro:Kh,BadgeEuroIcon:Kh,BadgeHelp:Xh,BadgeHelpIcon:Xh,BadgeIcon:lf,BadgeIndianRupee:Yh,BadgeIndianRupeeIcon:Yh,BadgeInfo:Qh,BadgeInfoIcon:Qh,BadgeJapaneseYen:Jh,BadgeJapaneseYenIcon:Jh,BadgeMinus:ef,BadgeMinusIcon:ef,BadgePercent:tf,BadgePercentIcon:tf,BadgePlus:af,BadgePlusIcon:af,BadgePoundSterling:nf,BadgePoundSterlingIcon:nf,BadgeRussianRuble:sf,BadgeRussianRubleIcon:sf,BadgeSwissFranc:of,BadgeSwissFrancIcon:of,BadgeX:rf,BadgeXIcon:rf,BaggageClaim:cf,BaggageClaimIcon:cf,Ban:df,BanIcon:df,Banana:uf,BananaIcon:uf,Banknote:pf,BanknoteIcon:pf,BarChart:gf,BarChart2:hf,BarChart2Icon:hf,BarChart3:ff,BarChart3Icon:ff,BarChart4:mf,BarChart4Icon:mf,BarChartBig:vf,BarChartBigIcon:vf,BarChartHorizontal:_f,BarChartHorizontalBig:yf,BarChartHorizontalBigIcon:yf,BarChartHorizontalIcon:_f,BarChartIcon:gf,Barcode:kf,BarcodeIcon:kf,Baseline:bf,BaselineIcon:bf,Bath:wf,BathIcon:wf,Battery:Lf,BatteryCharging:xf,BatteryChargingIcon:xf,BatteryFull:Mf,BatteryFullIcon:Mf,BatteryIcon:Lf,BatteryLow:Cf,BatteryLowIcon:Cf,BatteryMedium:Sf,BatteryMediumIcon:Sf,BatteryWarning:If,BatteryWarningIcon:If,Beaker:$f,BeakerIcon:$f,Bean:Ef,BeanIcon:Ef,BeanOff:Af,BeanOffIcon:Af,Bed:Df,BedDouble:Tf,BedDoubleIcon:Tf,BedIcon:Df,BedSingle:Pf,BedSingleIcon:Pf,Beef:Rf,BeefIcon:Rf,Beer:Of,BeerIcon:Of,Bell:zf,BellDot:Vf,BellDotIcon:Vf,BellElectric:Uf,BellElectricIcon:Uf,BellIcon:zf,BellMinus:Ff,BellMinusIcon:Ff,BellOff:jf,BellOffIcon:jf,BellPlus:Hf,BellPlusIcon:Hf,BellRing:Nf,BellRingIcon:Nf,Bike:Bf,BikeIcon:Bf,Binary:qf,BinaryIcon:qf,Biohazard:Wf,BiohazardIcon:Wf,Bird:Gf,BirdIcon:Gf,Bitcoin:Zf,BitcoinIcon:Zf,Blinds:Kf,BlindsIcon:Kf,Blocks:Xf,BlocksIcon:Xf,Bluetooth:em,BluetoothConnected:Yf,BluetoothConnectedIcon:Yf,BluetoothIcon:em,BluetoothOff:Qf,BluetoothOffIcon:Qf,BluetoothSearching:Jf,BluetoothSearchingIcon:Jf,Bold:tm,BoldIcon:tm,Bolt:am,BoltIcon:am,Bomb:nm,BombIcon:nm,Bone:sm,BoneIcon:sm,Book:Im,BookA:om,BookAIcon:om,BookAudio:rm,BookAudioIcon:rm,BookCheck:im,BookCheckIcon:im,BookCopy:lm,BookCopyIcon:lm,BookDashed:Ei,BookDashedIcon:Ei,BookDown:cm,BookDownIcon:cm,BookHeadphones:dm,BookHeadphonesIcon:dm,BookHeart:um,BookHeartIcon:um,BookIcon:Im,BookImage:pm,BookImageIcon:pm,BookKey:hm,BookKeyIcon:hm,BookLock:fm,BookLockIcon:fm,BookMarked:mm,BookMarkedIcon:mm,BookMinus:vm,BookMinusIcon:vm,BookOpen:gm,BookOpenCheck:ym,BookOpenCheckIcon:ym,BookOpenIcon:gm,BookOpenText:_m,BookOpenTextIcon:_m,BookPlus:km,BookPlusIcon:km,BookTemplate:Ei,BookTemplateIcon:Ei,BookText:bm,BookTextIcon:bm,BookType:wm,BookTypeIcon:wm,BookUp:Mm,BookUp2:xm,BookUp2Icon:xm,BookUpIcon:Mm,BookUser:Cm,BookUserIcon:Cm,BookX:Sm,BookXIcon:Sm,Bookmark:Tm,BookmarkCheck:Lm,BookmarkCheckIcon:Lm,BookmarkIcon:Tm,BookmarkMinus:$m,BookmarkMinusIcon:$m,BookmarkPlus:Am,BookmarkPlusIcon:Am,BookmarkX:Em,BookmarkXIcon:Em,BoomBox:Pm,BoomBoxIcon:Pm,Bot:Dm,BotIcon:Dm,Box:Om,BoxIcon:Om,BoxSelect:Rm,BoxSelectIcon:Rm,Boxes:Vm,BoxesIcon:Vm,Braces:Ti,BracesIcon:Ti,Brackets:Um,BracketsIcon:Um,Brain:Hm,BrainCircuit:Fm,BrainCircuitIcon:Fm,BrainCog:jm,BrainCogIcon:jm,BrainIcon:Hm,BrickWall:Nm,BrickWallIcon:Nm,Briefcase:zm,BriefcaseIcon:zm,BringToFront:Bm,BringToFrontIcon:Bm,Brush:qm,BrushIcon:qm,Bug:Zm,BugIcon:Zm,BugOff:Wm,BugOffIcon:Wm,BugPlay:Gm,BugPlayIcon:Gm,Building:Xm,Building2:Km,Building2Icon:Km,BuildingIcon:Xm,Bus:Qm,BusFront:Ym,BusFrontIcon:Ym,BusIcon:Qm,Cable:e2,CableCar:Jm,CableCarIcon:Jm,CableIcon:e2,Cake:a2,CakeIcon:a2,CakeSlice:t2,CakeSliceIcon:t2,Calculator:n2,CalculatorIcon:n2,Calendar:v2,CalendarCheck:o2,CalendarCheck2:s2,CalendarCheck2Icon:s2,CalendarCheckIcon:o2,CalendarClock:r2,CalendarClockIcon:r2,CalendarDays:i2,CalendarDaysIcon:i2,CalendarHeart:l2,CalendarHeartIcon:l2,CalendarIcon:v2,CalendarMinus:c2,CalendarMinusIcon:c2,CalendarOff:d2,CalendarOffIcon:d2,CalendarPlus:u2,CalendarPlusIcon:u2,CalendarRange:p2,CalendarRangeIcon:p2,CalendarSearch:h2,CalendarSearchIcon:h2,CalendarX:m2,CalendarX2:f2,CalendarX2Icon:f2,CalendarXIcon:m2,Camera:_2,CameraIcon:_2,CameraOff:y2,CameraOffIcon:y2,CandlestickChart:g2,CandlestickChartIcon:g2,Candy:w2,CandyCane:k2,CandyCaneIcon:k2,CandyIcon:w2,CandyOff:b2,CandyOffIcon:b2,Car:C2,CarFront:x2,CarFrontIcon:x2,CarIcon:C2,CarTaxiFront:M2,CarTaxiFrontIcon:M2,Caravan:S2,CaravanIcon:S2,Carrot:I2,CarrotIcon:I2,CaseLower:L2,CaseLowerIcon:L2,CaseSensitive:$2,CaseSensitiveIcon:$2,CaseUpper:A2,CaseUpperIcon:A2,CassetteTape:E2,CassetteTapeIcon:E2,Cast:T2,CastIcon:T2,Castle:P2,CastleIcon:P2,Cat:D2,CatIcon:D2,Cctv:R2,CctvIcon:R2,Check:H2,CheckCheck:O2,CheckCheckIcon:O2,CheckCircle:U2,CheckCircle2:V2,CheckCircle2Icon:V2,CheckCircleIcon:U2,CheckIcon:H2,CheckSquare:j2,CheckSquare2:F2,CheckSquare2Icon:F2,CheckSquareIcon:j2,ChefHat:N2,ChefHatIcon:N2,Cherry:z2,CherryIcon:z2,ChevronDown:W2,ChevronDownCircle:B2,ChevronDownCircleIcon:B2,ChevronDownIcon:W2,ChevronDownSquare:q2,ChevronDownSquareIcon:q2,ChevronFirst:G2,ChevronFirstIcon:G2,ChevronLast:Z2,ChevronLastIcon:Z2,ChevronLeft:Y2,ChevronLeftCircle:K2,ChevronLeftCircleIcon:K2,ChevronLeftIcon:Y2,ChevronLeftSquare:X2,ChevronLeftSquareIcon:X2,ChevronRight:e0,ChevronRightCircle:Q2,ChevronRightCircleIcon:Q2,ChevronRightIcon:e0,ChevronRightSquare:J2,ChevronRightSquareIcon:J2,ChevronUp:n0,ChevronUpCircle:t0,ChevronUpCircleIcon:t0,ChevronUpIcon:n0,ChevronUpSquare:a0,ChevronUpSquareIcon:a0,ChevronsDown:o0,ChevronsDownIcon:o0,ChevronsDownUp:s0,ChevronsDownUpIcon:s0,ChevronsLeft:i0,ChevronsLeftIcon:i0,ChevronsLeftRight:r0,ChevronsLeftRightIcon:r0,ChevronsRight:c0,ChevronsRightIcon:c0,ChevronsRightLeft:l0,ChevronsRightLeftIcon:l0,ChevronsUp:u0,ChevronsUpDown:d0,ChevronsUpDownIcon:d0,ChevronsUpIcon:u0,Chrome:p0,ChromeIcon:p0,Church:h0,ChurchIcon:h0,Cigarette:m0,CigaretteIcon:m0,CigaretteOff:f0,CigaretteOffIcon:f0,Circle:M0,CircleDashed:v0,CircleDashedIcon:v0,CircleDollarSign:y0,CircleDollarSignIcon:y0,CircleDot:g0,CircleDotDashed:_0,CircleDotDashedIcon:_0,CircleDotIcon:g0,CircleEllipsis:k0,CircleEllipsisIcon:k0,CircleEqual:b0,CircleEqualIcon:b0,CircleIcon:M0,CircleOff:w0,CircleOffIcon:w0,CircleSlash:x0,CircleSlash2:Pi,CircleSlash2Icon:Pi,CircleSlashIcon:x0,CircleSlashed:Pi,CircleSlashedIcon:Pi,CircleUser:Ri,CircleUserIcon:Ri,CircleUserRound:Di,CircleUserRoundIcon:Di,CircuitBoard:C0,CircuitBoardIcon:C0,Citrus:S0,CitrusIcon:S0,Clapperboard:I0,ClapperboardIcon:I0,Clipboard:O0,ClipboardCheck:L0,ClipboardCheckIcon:L0,ClipboardCopy:$0,ClipboardCopyIcon:$0,ClipboardEdit:A0,ClipboardEditIcon:A0,ClipboardIcon:O0,ClipboardList:E0,ClipboardListIcon:E0,ClipboardPaste:T0,ClipboardPasteIcon:T0,ClipboardSignature:P0,ClipboardSignatureIcon:P0,ClipboardType:D0,ClipboardTypeIcon:D0,ClipboardX:R0,ClipboardXIcon:R0,Clock:K0,Clock1:V0,Clock10:U0,Clock10Icon:U0,Clock11:F0,Clock11Icon:F0,Clock12:j0,Clock12Icon:j0,Clock1Icon:V0,Clock2:H0,Clock2Icon:H0,Clock3:N0,Clock3Icon:N0,Clock4:z0,Clock4Icon:z0,Clock5:B0,Clock5Icon:B0,Clock6:q0,Clock6Icon:q0,Clock7:W0,Clock7Icon:W0,Clock8:G0,Clock8Icon:G0,Clock9:Z0,Clock9Icon:Z0,ClockIcon:K0,Cloud:cv,CloudCog:X0,CloudCogIcon:X0,CloudDrizzle:Y0,CloudDrizzleIcon:Y0,CloudFog:Q0,CloudFogIcon:Q0,CloudHail:J0,CloudHailIcon:J0,CloudIcon:cv,CloudLightning:ev,CloudLightningIcon:ev,CloudMoon:av,CloudMoonIcon:av,CloudMoonRain:tv,CloudMoonRainIcon:tv,CloudOff:nv,CloudOffIcon:nv,CloudRain:ov,CloudRainIcon:ov,CloudRainWind:sv,CloudRainWindIcon:sv,CloudSnow:rv,CloudSnowIcon:rv,CloudSun:lv,CloudSunIcon:lv,CloudSunRain:iv,CloudSunRainIcon:iv,Cloudy:dv,CloudyIcon:dv,Clover:uv,CloverIcon:uv,Club:pv,ClubIcon:pv,Code:fv,Code2:hv,Code2Icon:hv,CodeIcon:fv,Codepen:mv,CodepenIcon:mv,Codesandbox:vv,CodesandboxIcon:vv,Coffee:yv,CoffeeIcon:yv,Cog:_v,CogIcon:_v,Coins:gv,CoinsIcon:gv,Columns:Oi,Columns2:Oi,Columns2Icon:Oi,Columns3:Vi,Columns3Icon:Vi,Columns4:kv,Columns4Icon:kv,ColumnsIcon:Oi,Combine:bv,CombineIcon:bv,Command:wv,CommandIcon:wv,Compass:xv,CompassIcon:xv,Component:Mv,ComponentIcon:Mv,Computer:Cv,ComputerIcon:Cv,ConciergeBell:Sv,ConciergeBellIcon:Sv,Cone:Iv,ConeIcon:Iv,Construction:Lv,ConstructionIcon:Lv,Contact:Av,Contact2:$v,Contact2Icon:$v,ContactIcon:Av,Container:Ev,ContainerIcon:Ev,Contrast:Tv,ContrastIcon:Tv,Cookie:Pv,CookieIcon:Pv,CookingPot:Dv,CookingPotIcon:Dv,Copy:jv,CopyCheck:Rv,CopyCheckIcon:Rv,CopyIcon:jv,CopyMinus:Ov,CopyMinusIcon:Ov,CopyPlus:Vv,CopyPlusIcon:Vv,CopySlash:Uv,CopySlashIcon:Uv,CopyX:Fv,CopyXIcon:Fv,Copyleft:Hv,CopyleftIcon:Hv,Copyright:Nv,CopyrightIcon:Nv,CornerDownLeft:zv,CornerDownLeftIcon:zv,CornerDownRight:Bv,CornerDownRightIcon:Bv,CornerLeftDown:qv,CornerLeftDownIcon:qv,CornerLeftUp:Wv,CornerLeftUpIcon:Wv,CornerRightDown:Gv,CornerRightDownIcon:Gv,CornerRightUp:Zv,CornerRightUpIcon:Zv,CornerUpLeft:Kv,CornerUpLeftIcon:Kv,CornerUpRight:Xv,CornerUpRightIcon:Xv,Cpu:Yv,CpuIcon:Yv,CreativeCommons:Qv,CreativeCommonsIcon:Qv,CreditCard:Jv,CreditCardIcon:Jv,Croissant:ey,CroissantIcon:ey,Crop:ty,CropIcon:ty,Cross:ay,CrossIcon:ay,Crosshair:ny,CrosshairIcon:ny,Crown:sy,CrownIcon:sy,Cuboid:oy,CuboidIcon:oy,CupSoda:ry,CupSodaIcon:ry,CurlyBraces:Ti,CurlyBracesIcon:Ti,Currency:iy,CurrencyIcon:iy,Cylinder:ly,CylinderIcon:ly,Database:uy,DatabaseBackup:cy,DatabaseBackupIcon:cy,DatabaseIcon:uy,DatabaseZap:dy,DatabaseZapIcon:dy,Delete:py,DeleteIcon:py,Dessert:hy,DessertIcon:hy,Diameter:fy,DiameterIcon:fy,Diamond:my,DiamondIcon:my,Dice1:vy,Dice1Icon:vy,Dice2:yy,Dice2Icon:yy,Dice3:_y,Dice3Icon:_y,Dice4:gy,Dice4Icon:gy,Dice5:ky,Dice5Icon:ky,Dice6:by,Dice6Icon:by,Dices:wy,DicesIcon:wy,Diff:xy,DiffIcon:xy,Disc:Iy,Disc2:My,Disc2Icon:My,Disc3:Cy,Disc3Icon:Cy,DiscAlbum:Sy,DiscAlbumIcon:Sy,DiscIcon:Iy,Divide:Ay,DivideCircle:Ly,DivideCircleIcon:Ly,DivideIcon:Ay,DivideSquare:$y,DivideSquareIcon:$y,Dna:Ty,DnaIcon:Ty,DnaOff:Ey,DnaOffIcon:Ey,Dog:Py,DogIcon:Py,DollarSign:Dy,DollarSignIcon:Dy,Donut:Ry,DonutIcon:Ry,DoorClosed:Oy,DoorClosedIcon:Oy,DoorOpen:Vy,DoorOpenIcon:Vy,Dot:Uy,DotIcon:Uy,Download:jy,DownloadCloud:Fy,DownloadCloudIcon:Fy,DownloadIcon:jy,DraftingCompass:Hy,DraftingCompassIcon:Hy,Drama:Ny,DramaIcon:Ny,Dribbble:zy,DribbbleIcon:zy,Drill:By,DrillIcon:By,Droplet:qy,DropletIcon:qy,Droplets:Wy,DropletsIcon:Wy,Drum:Gy,DrumIcon:Gy,Drumstick:Zy,DrumstickIcon:Zy,Dumbbell:Ky,DumbbellIcon:Ky,Ear:Yy,EarIcon:Yy,EarOff:Xy,EarOffIcon:Xy,Edit:_o,Edit2:nl,Edit2Icon:nl,Edit3:al,Edit3Icon:al,EditIcon:_o,Egg:e_,EggFried:Qy,EggFriedIcon:Qy,EggIcon:e_,EggOff:Jy,EggOffIcon:Jy,Equal:a_,EqualIcon:a_,EqualNot:t_,EqualNotIcon:t_,Eraser:n_,EraserIcon:n_,Euro:s_,EuroIcon:s_,Expand:o_,ExpandIcon:o_,ExternalLink:r_,ExternalLinkIcon:r_,Eye:l_,EyeIcon:l_,EyeOff:i_,EyeOffIcon:i_,Facebook:c_,FacebookIcon:c_,Factory:d_,FactoryIcon:d_,Fan:u_,FanIcon:u_,FastForward:p_,FastForwardIcon:p_,Feather:h_,FeatherIcon:h_,Fence:f_,FenceIcon:f_,FerrisWheel:m_,FerrisWheelIcon:m_,Figma:v_,FigmaIcon:v_,File:yg,FileArchive:y_,FileArchiveIcon:y_,FileAudio:g_,FileAudio2:__,FileAudio2Icon:__,FileAudioIcon:g_,FileAxis3D:Ui,FileAxis3DIcon:Ui,FileAxis3d:Ui,FileAxis3dIcon:Ui,FileBadge:b_,FileBadge2:k_,FileBadge2Icon:k_,FileBadgeIcon:b_,FileBarChart:x_,FileBarChart2:w_,FileBarChart2Icon:w_,FileBarChartIcon:x_,FileBox:M_,FileBoxIcon:M_,FileCheck:S_,FileCheck2:C_,FileCheck2Icon:C_,FileCheckIcon:S_,FileClock:I_,FileClockIcon:I_,FileCode:$_,FileCode2:L_,FileCode2Icon:L_,FileCodeIcon:$_,FileCog:Fi,FileCog2:Fi,FileCog2Icon:Fi,FileCogIcon:Fi,FileDiff:A_,FileDiffIcon:A_,FileDigit:E_,FileDigitIcon:E_,FileDown:T_,FileDownIcon:T_,FileEdit:P_,FileEditIcon:P_,FileHeart:D_,FileHeartIcon:D_,FileIcon:yg,FileImage:R_,FileImageIcon:R_,FileInput:O_,FileInputIcon:O_,FileJson:U_,FileJson2:V_,FileJson2Icon:V_,FileJsonIcon:U_,FileKey:j_,FileKey2:F_,FileKey2Icon:F_,FileKeyIcon:j_,FileLineChart:H_,FileLineChartIcon:H_,FileLock:z_,FileLock2:N_,FileLock2Icon:N_,FileLockIcon:z_,FileMinus:q_,FileMinus2:B_,FileMinus2Icon:B_,FileMinusIcon:q_,FileMusic:W_,FileMusicIcon:W_,FileOutput:G_,FileOutputIcon:G_,FilePieChart:Z_,FilePieChartIcon:Z_,FilePlus:X_,FilePlus2:K_,FilePlus2Icon:K_,FilePlusIcon:X_,FileQuestion:Y_,FileQuestionIcon:Y_,FileScan:Q_,FileScanIcon:Q_,FileSearch:eg,FileSearch2:J_,FileSearch2Icon:J_,FileSearchIcon:eg,FileSignature:tg,FileSignatureIcon:tg,FileSpreadsheet:ag,FileSpreadsheetIcon:ag,FileStack:ng,FileStackIcon:ng,FileSymlink:sg,FileSymlinkIcon:sg,FileTerminal:og,FileTerminalIcon:og,FileText:rg,FileTextIcon:rg,FileType:lg,FileType2:ig,FileType2Icon:ig,FileTypeIcon:lg,FileUp:cg,FileUpIcon:cg,FileVideo:ug,FileVideo2:dg,FileVideo2Icon:dg,FileVideoIcon:ug,FileVolume:hg,FileVolume2:pg,FileVolume2Icon:pg,FileVolumeIcon:hg,FileWarning:fg,FileWarningIcon:fg,FileX:vg,FileX2:mg,FileX2Icon:mg,FileXIcon:vg,Files:_g,FilesIcon:_g,Film:gg,FilmIcon:gg,Filter:bg,FilterIcon:bg,FilterX:kg,FilterXIcon:kg,Fingerprint:wg,FingerprintIcon:wg,FireExtinguisher:xg,FireExtinguisherIcon:xg,Fish:Sg,FishIcon:Sg,FishOff:Mg,FishOffIcon:Mg,FishSymbol:Cg,FishSymbolIcon:Cg,Flag:Ag,FlagIcon:Ag,FlagOff:Ig,FlagOffIcon:Ig,FlagTriangleLeft:Lg,FlagTriangleLeftIcon:Lg,FlagTriangleRight:$g,FlagTriangleRightIcon:$g,Flame:Tg,FlameIcon:Tg,FlameKindling:Eg,FlameKindlingIcon:Eg,Flashlight:Dg,FlashlightIcon:Dg,FlashlightOff:Pg,FlashlightOffIcon:Pg,FlaskConical:Og,FlaskConicalIcon:Og,FlaskConicalOff:Rg,FlaskConicalOffIcon:Rg,FlaskRound:Vg,FlaskRoundIcon:Vg,FlipHorizontal:Fg,FlipHorizontal2:Ug,FlipHorizontal2Icon:Ug,FlipHorizontalIcon:Fg,FlipVertical:Hg,FlipVertical2:jg,FlipVertical2Icon:jg,FlipVerticalIcon:Hg,Flower:zg,Flower2:Ng,Flower2Icon:Ng,FlowerIcon:zg,Focus:Bg,FocusIcon:Bg,FoldHorizontal:qg,FoldHorizontalIcon:qg,FoldVertical:Wg,FoldVerticalIcon:Wg,Folder:kk,FolderArchive:Gg,FolderArchiveIcon:Gg,FolderCheck:Zg,FolderCheckIcon:Zg,FolderClock:Kg,FolderClockIcon:Kg,FolderClosed:Xg,FolderClosedIcon:Xg,FolderCog:ji,FolderCog2:ji,FolderCog2Icon:ji,FolderCogIcon:ji,FolderDot:Yg,FolderDotIcon:Yg,FolderDown:Qg,FolderDownIcon:Qg,FolderEdit:Jg,FolderEditIcon:Jg,FolderGit:tk,FolderGit2:ek,FolderGit2Icon:ek,FolderGitIcon:tk,FolderHeart:ak,FolderHeartIcon:ak,FolderIcon:kk,FolderInput:nk,FolderInputIcon:nk,FolderKanban:sk,FolderKanbanIcon:sk,FolderKey:ok,FolderKeyIcon:ok,FolderLock:rk,FolderLockIcon:rk,FolderMinus:ik,FolderMinusIcon:ik,FolderOpen:ck,FolderOpenDot:lk,FolderOpenDotIcon:lk,FolderOpenIcon:ck,FolderOutput:dk,FolderOutputIcon:dk,FolderPlus:uk,FolderPlusIcon:uk,FolderRoot:pk,FolderRootIcon:pk,FolderSearch:fk,FolderSearch2:hk,FolderSearch2Icon:hk,FolderSearchIcon:fk,FolderSymlink:mk,FolderSymlinkIcon:mk,FolderSync:vk,FolderSyncIcon:vk,FolderTree:yk,FolderTreeIcon:yk,FolderUp:_k,FolderUpIcon:_k,FolderX:gk,FolderXIcon:gk,Folders:bk,FoldersIcon:bk,Footprints:wk,FootprintsIcon:wk,Forklift:xk,ForkliftIcon:xk,FormInput:Mk,FormInputIcon:Mk,Forward:Ck,ForwardIcon:Ck,Frame:Sk,FrameIcon:Sk,Framer:Ik,FramerIcon:Ik,Frown:Lk,FrownIcon:Lk,Fuel:$k,FuelIcon:$k,Fullscreen:Ak,FullscreenIcon:Ak,FunctionSquare:Ek,FunctionSquareIcon:Ek,GalleryHorizontal:Pk,GalleryHorizontalEnd:Tk,GalleryHorizontalEndIcon:Tk,GalleryHorizontalIcon:Pk,GalleryThumbnails:Dk,GalleryThumbnailsIcon:Dk,GalleryVertical:Ok,GalleryVerticalEnd:Rk,GalleryVerticalEndIcon:Rk,GalleryVerticalIcon:Ok,Gamepad:Uk,Gamepad2:Vk,Gamepad2Icon:Vk,GamepadIcon:Uk,GanttChart:Fk,GanttChartIcon:Fk,GanttChartSquare:Hi,GanttChartSquareIcon:Hi,Gauge:Hk,GaugeCircle:jk,GaugeCircleIcon:jk,GaugeIcon:Hk,Gavel:Nk,GavelIcon:Nk,Gem:zk,GemIcon:zk,Ghost:Bk,GhostIcon:Bk,Gift:qk,GiftIcon:qk,GitBranch:Gk,GitBranchIcon:Gk,GitBranchPlus:Wk,GitBranchPlusIcon:Wk,GitCommit:Ni,GitCommitHorizontal:Ni,GitCommitHorizontalIcon:Ni,GitCommitIcon:Ni,GitCommitVertical:Zk,GitCommitVerticalIcon:Zk,GitCompare:Xk,GitCompareArrows:Kk,GitCompareArrowsIcon:Kk,GitCompareIcon:Xk,GitFork:Yk,GitForkIcon:Yk,GitGraph:Qk,GitGraphIcon:Qk,GitMerge:Jk,GitMergeIcon:Jk,GitPullRequest:ob,GitPullRequestArrow:eb,GitPullRequestArrowIcon:eb,GitPullRequestClosed:tb,GitPullRequestClosedIcon:tb,GitPullRequestCreate:nb,GitPullRequestCreateArrow:ab,GitPullRequestCreateArrowIcon:ab,GitPullRequestCreateIcon:nb,GitPullRequestDraft:sb,GitPullRequestDraftIcon:sb,GitPullRequestIcon:ob,Github:rb,GithubIcon:rb,Gitlab:ib,GitlabIcon:ib,GlassWater:lb,GlassWaterIcon:lb,Glasses:cb,GlassesIcon:cb,Globe:ub,Globe2:db,Globe2Icon:db,GlobeIcon:ub,Goal:pb,GoalIcon:pb,Grab:hb,GrabIcon:hb,GraduationCap:fb,GraduationCapIcon:fb,Grape:mb,GrapeIcon:mb,Grid:yo,Grid2X2:zi,Grid2X2Icon:zi,Grid2x2:zi,Grid2x2Icon:zi,Grid3X3:yo,Grid3X3Icon:yo,Grid3x3:yo,Grid3x3Icon:yo,GridIcon:yo,Grip:_b,GripHorizontal:vb,GripHorizontalIcon:vb,GripIcon:_b,GripVertical:yb,GripVerticalIcon:yb,Group:gb,GroupIcon:gb,Guitar:kb,GuitarIcon:kb,Hammer:bb,HammerIcon:bb,Hand:xb,HandIcon:xb,HandMetal:wb,HandMetalIcon:wb,HardDrive:Sb,HardDriveDownload:Mb,HardDriveDownloadIcon:Mb,HardDriveIcon:Sb,HardDriveUpload:Cb,HardDriveUploadIcon:Cb,HardHat:Ib,HardHatIcon:Ib,Hash:Lb,HashIcon:Lb,Haze:$b,HazeIcon:$b,HdmiPort:Ab,HdmiPortIcon:Ab,Heading:Vb,Heading1:Eb,Heading1Icon:Eb,Heading2:Tb,Heading2Icon:Tb,Heading3:Pb,Heading3Icon:Pb,Heading4:Db,Heading4Icon:Db,Heading5:Rb,Heading5Icon:Rb,Heading6:Ob,Heading6Icon:Ob,HeadingIcon:Vb,Headphones:Ub,HeadphonesIcon:Ub,Heart:zb,HeartCrack:Fb,HeartCrackIcon:Fb,HeartHandshake:jb,HeartHandshakeIcon:jb,HeartIcon:zb,HeartOff:Hb,HeartOffIcon:Hb,HeartPulse:Nb,HeartPulseIcon:Nb,HelpCircle:Bb,HelpCircleIcon:Bb,HelpingHand:qb,HelpingHandIcon:qb,Hexagon:Wb,HexagonIcon:Wb,Highlighter:Gb,HighlighterIcon:Gb,History:Zb,HistoryIcon:Zb,Home:Kb,HomeIcon:Kb,Hop:Yb,HopIcon:Yb,HopOff:Xb,HopOffIcon:Xb,Hotel:Qb,HotelIcon:Qb,Hourglass:Jb,HourglassIcon:Jb,IceCream:tw,IceCream2:ew,IceCream2Icon:ew,IceCreamIcon:tw,Image:rw,ImageDown:aw,ImageDownIcon:aw,ImageIcon:rw,ImageMinus:nw,ImageMinusIcon:nw,ImageOff:sw,ImageOffIcon:sw,ImagePlus:ow,ImagePlusIcon:ow,Import:iw,ImportIcon:iw,Inbox:lw,InboxIcon:lw,Indent:cw,IndentIcon:cw,IndianRupee:dw,IndianRupeeIcon:dw,Infinity:uw,InfinityIcon:uw,Info:pw,InfoIcon:pw,Inspect:Wi,InspectIcon:Wi,InspectionPanel:hw,InspectionPanelIcon:hw,Instagram:fw,InstagramIcon:fw,Italic:mw,ItalicIcon:mw,IterationCcw:vw,IterationCcwIcon:vw,IterationCw:yw,IterationCwIcon:yw,JapaneseYen:_w,JapaneseYenIcon:_w,Joystick:gw,JoystickIcon:gw,Kanban:kw,KanbanIcon:kw,KanbanSquare:qi,KanbanSquareDashed:Bi,KanbanSquareDashedIcon:Bi,KanbanSquareIcon:qi,Key:xw,KeyIcon:xw,KeyRound:bw,KeyRoundIcon:bw,KeySquare:ww,KeySquareIcon:ww,Keyboard:Cw,KeyboardIcon:Cw,KeyboardMusic:Mw,KeyboardMusicIcon:Mw,Lamp:Ew,LampCeiling:Sw,LampCeilingIcon:Sw,LampDesk:Iw,LampDeskIcon:Iw,LampFloor:Lw,LampFloorIcon:Lw,LampIcon:Ew,LampWallDown:$w,LampWallDownIcon:$w,LampWallUp:Aw,LampWallUpIcon:Aw,LandPlot:Tw,LandPlotIcon:Tw,Landmark:Pw,LandmarkIcon:Pw,Languages:Dw,LanguagesIcon:Dw,Laptop:Ow,Laptop2:Rw,Laptop2Icon:Rw,LaptopIcon:Ow,Lasso:Uw,LassoIcon:Uw,LassoSelect:Vw,LassoSelectIcon:Vw,Laugh:Fw,LaughIcon:Fw,Layers:Nw,Layers2:jw,Layers2Icon:jw,Layers3:Hw,Layers3Icon:Hw,LayersIcon:Nw,Layout:tl,LayoutDashboard:zw,LayoutDashboardIcon:zw,LayoutGrid:Bw,LayoutGridIcon:Bw,LayoutIcon:tl,LayoutList:qw,LayoutListIcon:qw,LayoutPanelLeft:Ww,LayoutPanelLeftIcon:Ww,LayoutPanelTop:Gw,LayoutPanelTopIcon:Gw,LayoutTemplate:Zw,LayoutTemplateIcon:Zw,Leaf:Kw,LeafIcon:Kw,LeafyGreen:Xw,LeafyGreenIcon:Xw,Library:Jw,LibraryBig:Yw,LibraryBigIcon:Yw,LibraryIcon:Jw,LibrarySquare:Qw,LibrarySquareIcon:Qw,LifeBuoy:e4,LifeBuoyIcon:e4,Ligature:t4,LigatureIcon:t4,Lightbulb:n4,LightbulbIcon:n4,LightbulbOff:a4,LightbulbOffIcon:a4,LineChart:s4,LineChartIcon:s4,Link:i4,Link2:r4,Link2Icon:r4,Link2Off:o4,Link2OffIcon:o4,LinkIcon:i4,Linkedin:l4,LinkedinIcon:l4,List:w4,ListChecks:c4,ListChecksIcon:c4,ListEnd:d4,ListEndIcon:d4,ListFilter:u4,ListFilterIcon:u4,ListIcon:w4,ListMinus:p4,ListMinusIcon:p4,ListMusic:h4,ListMusicIcon:h4,ListOrdered:f4,ListOrderedIcon:f4,ListPlus:m4,ListPlusIcon:m4,ListRestart:v4,ListRestartIcon:v4,ListStart:y4,ListStartIcon:y4,ListTodo:_4,ListTodoIcon:_4,ListTree:g4,ListTreeIcon:g4,ListVideo:k4,ListVideoIcon:k4,ListX:b4,ListXIcon:b4,Loader:M4,Loader2:x4,Loader2Icon:x4,LoaderIcon:M4,Locate:I4,LocateFixed:C4,LocateFixedIcon:C4,LocateIcon:I4,LocateOff:S4,LocateOffIcon:S4,Lock:$4,LockIcon:$4,LockKeyhole:L4,LockKeyholeIcon:L4,LogIn:A4,LogInIcon:A4,LogOut:E4,LogOutIcon:E4,Lollipop:T4,LollipopIcon:T4,LucideAArrowDown:O1,LucideAArrowUp:V1,LucideALargeSmall:U1,LucideAccessibility:F1,LucideActivity:H1,LucideActivitySquare:j1,LucideAirVent:N1,LucideAirplay:z1,LucideAlarmCheck:ki,LucideAlarmClock:q1,LucideAlarmClockCheck:ki,LucideAlarmClockMinus:bi,LucideAlarmClockOff:B1,LucideAlarmClockPlus:wi,LucideAlarmMinus:bi,LucideAlarmPlus:wi,LucideAlarmSmoke:W1,LucideAlbum:G1,LucideAlertCircle:Z1,LucideAlertOctagon:K1,LucideAlertTriangle:X1,LucideAlignCenter:J1,LucideAlignCenterHorizontal:Y1,LucideAlignCenterVertical:Q1,LucideAlignEndHorizontal:ep,LucideAlignEndVertical:tp,LucideAlignHorizontalDistributeCenter:ap,LucideAlignHorizontalDistributeEnd:np,LucideAlignHorizontalDistributeStart:sp,LucideAlignHorizontalJustifyCenter:op,LucideAlignHorizontalJustifyEnd:rp,LucideAlignHorizontalJustifyStart:ip,LucideAlignHorizontalSpaceAround:lp,LucideAlignHorizontalSpaceBetween:cp,LucideAlignJustify:dp,LucideAlignLeft:up,LucideAlignRight:pp,LucideAlignStartHorizontal:hp,LucideAlignStartVertical:fp,LucideAlignVerticalDistributeCenter:mp,LucideAlignVerticalDistributeEnd:vp,LucideAlignVerticalDistributeStart:yp,LucideAlignVerticalJustifyCenter:_p,LucideAlignVerticalJustifyEnd:gp,LucideAlignVerticalJustifyStart:kp,LucideAlignVerticalSpaceAround:bp,LucideAlignVerticalSpaceBetween:wp,LucideAmpersand:xp,LucideAmpersands:Mp,LucideAnchor:Cp,LucideAngry:Sp,LucideAnnoyed:Ip,LucideAntenna:Lp,LucideAnvil:$p,LucideAperture:Ap,LucideAppWindow:Ep,LucideApple:Tp,LucideArchive:Rp,LucideArchiveRestore:Pp,LucideArchiveX:Dp,LucideAreaChart:Op,LucideArmchair:Vp,LucideArrowBigDown:Fp,LucideArrowBigDownDash:Up,LucideArrowBigLeft:Hp,LucideArrowBigLeftDash:jp,LucideArrowBigRight:zp,LucideArrowBigRightDash:Np,LucideArrowBigUp:qp,LucideArrowBigUpDash:Bp,LucideArrowDown:ih,LucideArrowDown01:Wp,LucideArrowDown10:Gp,LucideArrowDownAZ:xi,LucideArrowDownAz:xi,LucideArrowDownCircle:Zp,LucideArrowDownFromLine:Kp,LucideArrowDownLeft:Qp,LucideArrowDownLeftFromCircle:Xp,LucideArrowDownLeftSquare:Yp,LucideArrowDownNarrowWide:Jp,LucideArrowDownRight:ah,LucideArrowDownRightFromCircle:eh,LucideArrowDownRightSquare:th,LucideArrowDownSquare:nh,LucideArrowDownToDot:sh,LucideArrowDownToLine:oh,LucideArrowDownUp:rh,LucideArrowDownWideNarrow:Mi,LucideArrowDownZA:Ci,LucideArrowDownZa:Ci,LucideArrowLeft:hh,LucideArrowLeftCircle:lh,LucideArrowLeftFromLine:ch,LucideArrowLeftRight:dh,LucideArrowLeftSquare:uh,LucideArrowLeftToLine:ph,LucideArrowRight:gh,LucideArrowRightCircle:fh,LucideArrowRightFromLine:mh,LucideArrowRightLeft:vh,LucideArrowRightSquare:yh,LucideArrowRightToLine:_h,LucideArrowUp:Rh,LucideArrowUp01:kh,LucideArrowUp10:bh,LucideArrowUpAZ:Si,LucideArrowUpAz:Si,LucideArrowUpCircle:wh,LucideArrowUpDown:xh,LucideArrowUpFromDot:Mh,LucideArrowUpFromLine:Ch,LucideArrowUpLeft:Lh,LucideArrowUpLeftFromCircle:Sh,LucideArrowUpLeftSquare:Ih,LucideArrowUpNarrowWide:Ii,LucideArrowUpRight:Eh,LucideArrowUpRightFromCircle:$h,LucideArrowUpRightSquare:Ah,LucideArrowUpSquare:Th,LucideArrowUpToLine:Ph,LucideArrowUpWideNarrow:Dh,LucideArrowUpZA:Li,LucideArrowUpZa:Li,LucideArrowsUpFromLine:Oh,LucideAsterisk:Vh,LucideAtSign:Uh,LucideAtom:Fh,LucideAudioLines:jh,LucideAudioWaveform:Hh,LucideAward:Nh,LucideAxe:zh,LucideAxis3D:$i,LucideAxis3d:$i,LucideBaby:Bh,LucideBackpack:qh,LucideBadge:lf,LucideBadgeAlert:Wh,LucideBadgeCent:Gh,LucideBadgeCheck:Ai,LucideBadgeDollarSign:Zh,LucideBadgeEuro:Kh,LucideBadgeHelp:Xh,LucideBadgeIndianRupee:Yh,LucideBadgeInfo:Qh,LucideBadgeJapaneseYen:Jh,LucideBadgeMinus:ef,LucideBadgePercent:tf,LucideBadgePlus:af,LucideBadgePoundSterling:nf,LucideBadgeRussianRuble:sf,LucideBadgeSwissFranc:of,LucideBadgeX:rf,LucideBaggageClaim:cf,LucideBan:df,LucideBanana:uf,LucideBanknote:pf,LucideBarChart:gf,LucideBarChart2:hf,LucideBarChart3:ff,LucideBarChart4:mf,LucideBarChartBig:vf,LucideBarChartHorizontal:_f,LucideBarChartHorizontalBig:yf,LucideBarcode:kf,LucideBaseline:bf,LucideBath:wf,LucideBattery:Lf,LucideBatteryCharging:xf,LucideBatteryFull:Mf,LucideBatteryLow:Cf,LucideBatteryMedium:Sf,LucideBatteryWarning:If,LucideBeaker:$f,LucideBean:Ef,LucideBeanOff:Af,LucideBed:Df,LucideBedDouble:Tf,LucideBedSingle:Pf,LucideBeef:Rf,LucideBeer:Of,LucideBell:zf,LucideBellDot:Vf,LucideBellElectric:Uf,LucideBellMinus:Ff,LucideBellOff:jf,LucideBellPlus:Hf,LucideBellRing:Nf,LucideBike:Bf,LucideBinary:qf,LucideBiohazard:Wf,LucideBird:Gf,LucideBitcoin:Zf,LucideBlinds:Kf,LucideBlocks:Xf,LucideBluetooth:em,LucideBluetoothConnected:Yf,LucideBluetoothOff:Qf,LucideBluetoothSearching:Jf,LucideBold:tm,LucideBolt:am,LucideBomb:nm,LucideBone:sm,LucideBook:Im,LucideBookA:om,LucideBookAudio:rm,LucideBookCheck:im,LucideBookCopy:lm,LucideBookDashed:Ei,LucideBookDown:cm,LucideBookHeadphones:dm,LucideBookHeart:um,LucideBookImage:pm,LucideBookKey:hm,LucideBookLock:fm,LucideBookMarked:mm,LucideBookMinus:vm,LucideBookOpen:gm,LucideBookOpenCheck:ym,LucideBookOpenText:_m,LucideBookPlus:km,LucideBookTemplate:Ei,LucideBookText:bm,LucideBookType:wm,LucideBookUp:Mm,LucideBookUp2:xm,LucideBookUser:Cm,LucideBookX:Sm,LucideBookmark:Tm,LucideBookmarkCheck:Lm,LucideBookmarkMinus:$m,LucideBookmarkPlus:Am,LucideBookmarkX:Em,LucideBoomBox:Pm,LucideBot:Dm,LucideBox:Om,LucideBoxSelect:Rm,LucideBoxes:Vm,LucideBraces:Ti,LucideBrackets:Um,LucideBrain:Hm,LucideBrainCircuit:Fm,LucideBrainCog:jm,LucideBrickWall:Nm,LucideBriefcase:zm,LucideBringToFront:Bm,LucideBrush:qm,LucideBug:Zm,LucideBugOff:Wm,LucideBugPlay:Gm,LucideBuilding:Xm,LucideBuilding2:Km,LucideBus:Qm,LucideBusFront:Ym,LucideCable:e2,LucideCableCar:Jm,LucideCake:a2,LucideCakeSlice:t2,LucideCalculator:n2,LucideCalendar:v2,LucideCalendarCheck:o2,LucideCalendarCheck2:s2,LucideCalendarClock:r2,LucideCalendarDays:i2,LucideCalendarHeart:l2,LucideCalendarMinus:c2,LucideCalendarOff:d2,LucideCalendarPlus:u2,LucideCalendarRange:p2,LucideCalendarSearch:h2,LucideCalendarX:m2,LucideCalendarX2:f2,LucideCamera:_2,LucideCameraOff:y2,LucideCandlestickChart:g2,LucideCandy:w2,LucideCandyCane:k2,LucideCandyOff:b2,LucideCar:C2,LucideCarFront:x2,LucideCarTaxiFront:M2,LucideCaravan:S2,LucideCarrot:I2,LucideCaseLower:L2,LucideCaseSensitive:$2,LucideCaseUpper:A2,LucideCassetteTape:E2,LucideCast:T2,LucideCastle:P2,LucideCat:D2,LucideCctv:R2,LucideCheck:H2,LucideCheckCheck:O2,LucideCheckCircle:U2,LucideCheckCircle2:V2,LucideCheckSquare:j2,LucideCheckSquare2:F2,LucideChefHat:N2,LucideCherry:z2,LucideChevronDown:W2,LucideChevronDownCircle:B2,LucideChevronDownSquare:q2,LucideChevronFirst:G2,LucideChevronLast:Z2,LucideChevronLeft:Y2,LucideChevronLeftCircle:K2,LucideChevronLeftSquare:X2,LucideChevronRight:e0,LucideChevronRightCircle:Q2,LucideChevronRightSquare:J2,LucideChevronUp:n0,LucideChevronUpCircle:t0,LucideChevronUpSquare:a0,LucideChevronsDown:o0,LucideChevronsDownUp:s0,LucideChevronsLeft:i0,LucideChevronsLeftRight:r0,LucideChevronsRight:c0,LucideChevronsRightLeft:l0,LucideChevronsUp:u0,LucideChevronsUpDown:d0,LucideChrome:p0,LucideChurch:h0,LucideCigarette:m0,LucideCigaretteOff:f0,LucideCircle:M0,LucideCircleDashed:v0,LucideCircleDollarSign:y0,LucideCircleDot:g0,LucideCircleDotDashed:_0,LucideCircleEllipsis:k0,LucideCircleEqual:b0,LucideCircleOff:w0,LucideCircleSlash:x0,LucideCircleSlash2:Pi,LucideCircleSlashed:Pi,LucideCircleUser:Ri,LucideCircleUserRound:Di,LucideCircuitBoard:C0,LucideCitrus:S0,LucideClapperboard:I0,LucideClipboard:O0,LucideClipboardCheck:L0,LucideClipboardCopy:$0,LucideClipboardEdit:A0,LucideClipboardList:E0,LucideClipboardPaste:T0,LucideClipboardSignature:P0,LucideClipboardType:D0,LucideClipboardX:R0,LucideClock:K0,LucideClock1:V0,LucideClock10:U0,LucideClock11:F0,LucideClock12:j0,LucideClock2:H0,LucideClock3:N0,LucideClock4:z0,LucideClock5:B0,LucideClock6:q0,LucideClock7:W0,LucideClock8:G0,LucideClock9:Z0,LucideCloud:cv,LucideCloudCog:X0,LucideCloudDrizzle:Y0,LucideCloudFog:Q0,LucideCloudHail:J0,LucideCloudLightning:ev,LucideCloudMoon:av,LucideCloudMoonRain:tv,LucideCloudOff:nv,LucideCloudRain:ov,LucideCloudRainWind:sv,LucideCloudSnow:rv,LucideCloudSun:lv,LucideCloudSunRain:iv,LucideCloudy:dv,LucideClover:uv,LucideClub:pv,LucideCode:fv,LucideCode2:hv,LucideCodepen:mv,LucideCodesandbox:vv,LucideCoffee:yv,LucideCog:_v,LucideCoins:gv,LucideColumns:Oi,LucideColumns2:Oi,LucideColumns3:Vi,LucideColumns4:kv,LucideCombine:bv,LucideCommand:wv,LucideCompass:xv,LucideComponent:Mv,LucideComputer:Cv,LucideConciergeBell:Sv,LucideCone:Iv,LucideConstruction:Lv,LucideContact:Av,LucideContact2:$v,LucideContainer:Ev,LucideContrast:Tv,LucideCookie:Pv,LucideCookingPot:Dv,LucideCopy:jv,LucideCopyCheck:Rv,LucideCopyMinus:Ov,LucideCopyPlus:Vv,LucideCopySlash:Uv,LucideCopyX:Fv,LucideCopyleft:Hv,LucideCopyright:Nv,LucideCornerDownLeft:zv,LucideCornerDownRight:Bv,LucideCornerLeftDown:qv,LucideCornerLeftUp:Wv,LucideCornerRightDown:Gv,LucideCornerRightUp:Zv,LucideCornerUpLeft:Kv,LucideCornerUpRight:Xv,LucideCpu:Yv,LucideCreativeCommons:Qv,LucideCreditCard:Jv,LucideCroissant:ey,LucideCrop:ty,LucideCross:ay,LucideCrosshair:ny,LucideCrown:sy,LucideCuboid:oy,LucideCupSoda:ry,LucideCurlyBraces:Ti,LucideCurrency:iy,LucideCylinder:ly,LucideDatabase:uy,LucideDatabaseBackup:cy,LucideDatabaseZap:dy,LucideDelete:py,LucideDessert:hy,LucideDiameter:fy,LucideDiamond:my,LucideDice1:vy,LucideDice2:yy,LucideDice3:_y,LucideDice4:gy,LucideDice5:ky,LucideDice6:by,LucideDices:wy,LucideDiff:xy,LucideDisc:Iy,LucideDisc2:My,LucideDisc3:Cy,LucideDiscAlbum:Sy,LucideDivide:Ay,LucideDivideCircle:Ly,LucideDivideSquare:$y,LucideDna:Ty,LucideDnaOff:Ey,LucideDog:Py,LucideDollarSign:Dy,LucideDonut:Ry,LucideDoorClosed:Oy,LucideDoorOpen:Vy,LucideDot:Uy,LucideDownload:jy,LucideDownloadCloud:Fy,LucideDraftingCompass:Hy,LucideDrama:Ny,LucideDribbble:zy,LucideDrill:By,LucideDroplet:qy,LucideDroplets:Wy,LucideDrum:Gy,LucideDrumstick:Zy,LucideDumbbell:Ky,LucideEar:Yy,LucideEarOff:Xy,LucideEdit:_o,LucideEdit2:nl,LucideEdit3:al,LucideEgg:e_,LucideEggFried:Qy,LucideEggOff:Jy,LucideEqual:a_,LucideEqualNot:t_,LucideEraser:n_,LucideEuro:s_,LucideExpand:o_,LucideExternalLink:r_,LucideEye:l_,LucideEyeOff:i_,LucideFacebook:c_,LucideFactory:d_,LucideFan:u_,LucideFastForward:p_,LucideFeather:h_,LucideFence:f_,LucideFerrisWheel:m_,LucideFigma:v_,LucideFile:yg,LucideFileArchive:y_,LucideFileAudio:g_,LucideFileAudio2:__,LucideFileAxis3D:Ui,LucideFileAxis3d:Ui,LucideFileBadge:b_,LucideFileBadge2:k_,LucideFileBarChart:x_,LucideFileBarChart2:w_,LucideFileBox:M_,LucideFileCheck:S_,LucideFileCheck2:C_,LucideFileClock:I_,LucideFileCode:$_,LucideFileCode2:L_,LucideFileCog:Fi,LucideFileCog2:Fi,LucideFileDiff:A_,LucideFileDigit:E_,LucideFileDown:T_,LucideFileEdit:P_,LucideFileHeart:D_,LucideFileImage:R_,LucideFileInput:O_,LucideFileJson:U_,LucideFileJson2:V_,LucideFileKey:j_,LucideFileKey2:F_,LucideFileLineChart:H_,LucideFileLock:z_,LucideFileLock2:N_,LucideFileMinus:q_,LucideFileMinus2:B_,LucideFileMusic:W_,LucideFileOutput:G_,LucideFilePieChart:Z_,LucideFilePlus:X_,LucideFilePlus2:K_,LucideFileQuestion:Y_,LucideFileScan:Q_,LucideFileSearch:eg,LucideFileSearch2:J_,LucideFileSignature:tg,LucideFileSpreadsheet:ag,LucideFileStack:ng,LucideFileSymlink:sg,LucideFileTerminal:og,LucideFileText:rg,LucideFileType:lg,LucideFileType2:ig,LucideFileUp:cg,LucideFileVideo:ug,LucideFileVideo2:dg,LucideFileVolume:hg,LucideFileVolume2:pg,LucideFileWarning:fg,LucideFileX:vg,LucideFileX2:mg,LucideFiles:_g,LucideFilm:gg,LucideFilter:bg,LucideFilterX:kg,LucideFingerprint:wg,LucideFireExtinguisher:xg,LucideFish:Sg,LucideFishOff:Mg,LucideFishSymbol:Cg,LucideFlag:Ag,LucideFlagOff:Ig,LucideFlagTriangleLeft:Lg,LucideFlagTriangleRight:$g,LucideFlame:Tg,LucideFlameKindling:Eg,LucideFlashlight:Dg,LucideFlashlightOff:Pg,LucideFlaskConical:Og,LucideFlaskConicalOff:Rg,LucideFlaskRound:Vg,LucideFlipHorizontal:Fg,LucideFlipHorizontal2:Ug,LucideFlipVertical:Hg,LucideFlipVertical2:jg,LucideFlower:zg,LucideFlower2:Ng,LucideFocus:Bg,LucideFoldHorizontal:qg,LucideFoldVertical:Wg,LucideFolder:kk,LucideFolderArchive:Gg,LucideFolderCheck:Zg,LucideFolderClock:Kg,LucideFolderClosed:Xg,LucideFolderCog:ji,LucideFolderCog2:ji,LucideFolderDot:Yg,LucideFolderDown:Qg,LucideFolderEdit:Jg,LucideFolderGit:tk,LucideFolderGit2:ek,LucideFolderHeart:ak,LucideFolderInput:nk,LucideFolderKanban:sk,LucideFolderKey:ok,LucideFolderLock:rk,LucideFolderMinus:ik,LucideFolderOpen:ck,LucideFolderOpenDot:lk,LucideFolderOutput:dk,LucideFolderPlus:uk,LucideFolderRoot:pk,LucideFolderSearch:fk,LucideFolderSearch2:hk,LucideFolderSymlink:mk,LucideFolderSync:vk,LucideFolderTree:yk,LucideFolderUp:_k,LucideFolderX:gk,LucideFolders:bk,LucideFootprints:wk,LucideForklift:xk,LucideFormInput:Mk,LucideForward:Ck,LucideFrame:Sk,LucideFramer:Ik,LucideFrown:Lk,LucideFuel:$k,LucideFullscreen:Ak,LucideFunctionSquare:Ek,LucideGalleryHorizontal:Pk,LucideGalleryHorizontalEnd:Tk,LucideGalleryThumbnails:Dk,LucideGalleryVertical:Ok,LucideGalleryVerticalEnd:Rk,LucideGamepad:Uk,LucideGamepad2:Vk,LucideGanttChart:Fk,LucideGanttChartSquare:Hi,LucideGauge:Hk,LucideGaugeCircle:jk,LucideGavel:Nk,LucideGem:zk,LucideGhost:Bk,LucideGift:qk,LucideGitBranch:Gk,LucideGitBranchPlus:Wk,LucideGitCommit:Ni,LucideGitCommitHorizontal:Ni,LucideGitCommitVertical:Zk,LucideGitCompare:Xk,LucideGitCompareArrows:Kk,LucideGitFork:Yk,LucideGitGraph:Qk,LucideGitMerge:Jk,LucideGitPullRequest:ob,LucideGitPullRequestArrow:eb,LucideGitPullRequestClosed:tb,LucideGitPullRequestCreate:nb,LucideGitPullRequestCreateArrow:ab,LucideGitPullRequestDraft:sb,LucideGithub:rb,LucideGitlab:ib,LucideGlassWater:lb,LucideGlasses:cb,LucideGlobe:ub,LucideGlobe2:db,LucideGoal:pb,LucideGrab:hb,LucideGraduationCap:fb,LucideGrape:mb,LucideGrid:yo,LucideGrid2X2:zi,LucideGrid2x2:zi,LucideGrid3X3:yo,LucideGrid3x3:yo,LucideGrip:_b,LucideGripHorizontal:vb,LucideGripVertical:yb,LucideGroup:gb,LucideGuitar:kb,LucideHammer:bb,LucideHand:xb,LucideHandMetal:wb,LucideHardDrive:Sb,LucideHardDriveDownload:Mb,LucideHardDriveUpload:Cb,LucideHardHat:Ib,LucideHash:Lb,LucideHaze:$b,LucideHdmiPort:Ab,LucideHeading:Vb,LucideHeading1:Eb,LucideHeading2:Tb,LucideHeading3:Pb,LucideHeading4:Db,LucideHeading5:Rb,LucideHeading6:Ob,LucideHeadphones:Ub,LucideHeart:zb,LucideHeartCrack:Fb,LucideHeartHandshake:jb,LucideHeartOff:Hb,LucideHeartPulse:Nb,LucideHelpCircle:Bb,LucideHelpingHand:qb,LucideHexagon:Wb,LucideHighlighter:Gb,LucideHistory:Zb,LucideHome:Kb,LucideHop:Yb,LucideHopOff:Xb,LucideHotel:Qb,LucideHourglass:Jb,LucideIceCream:tw,LucideIceCream2:ew,LucideImage:rw,LucideImageDown:aw,LucideImageMinus:nw,LucideImageOff:sw,LucideImagePlus:ow,LucideImport:iw,LucideInbox:lw,LucideIndent:cw,LucideIndianRupee:dw,LucideInfinity:uw,LucideInfo:pw,LucideInspect:Wi,LucideInspectionPanel:hw,LucideInstagram:fw,LucideItalic:mw,LucideIterationCcw:vw,LucideIterationCw:yw,LucideJapaneseYen:_w,LucideJoystick:gw,LucideKanban:kw,LucideKanbanSquare:qi,LucideKanbanSquareDashed:Bi,LucideKey:xw,LucideKeyRound:bw,LucideKeySquare:ww,LucideKeyboard:Cw,LucideKeyboardMusic:Mw,LucideLamp:Ew,LucideLampCeiling:Sw,LucideLampDesk:Iw,LucideLampFloor:Lw,LucideLampWallDown:$w,LucideLampWallUp:Aw,LucideLandPlot:Tw,LucideLandmark:Pw,LucideLanguages:Dw,LucideLaptop:Ow,LucideLaptop2:Rw,LucideLasso:Uw,LucideLassoSelect:Vw,LucideLaugh:Fw,LucideLayers:Nw,LucideLayers2:jw,LucideLayers3:Hw,LucideLayout:tl,LucideLayoutDashboard:zw,LucideLayoutGrid:Bw,LucideLayoutList:qw,LucideLayoutPanelLeft:Ww,LucideLayoutPanelTop:Gw,LucideLayoutTemplate:Zw,LucideLeaf:Kw,LucideLeafyGreen:Xw,LucideLibrary:Jw,LucideLibraryBig:Yw,LucideLibrarySquare:Qw,LucideLifeBuoy:e4,LucideLigature:t4,LucideLightbulb:n4,LucideLightbulbOff:a4,LucideLineChart:s4,LucideLink:i4,LucideLink2:r4,LucideLink2Off:o4,LucideLinkedin:l4,LucideList:w4,LucideListChecks:c4,LucideListEnd:d4,LucideListFilter:u4,LucideListMinus:p4,LucideListMusic:h4,LucideListOrdered:f4,LucideListPlus:m4,LucideListRestart:v4,LucideListStart:y4,LucideListTodo:_4,LucideListTree:g4,LucideListVideo:k4,LucideListX:b4,LucideLoader:M4,LucideLoader2:x4,LucideLocate:I4,LucideLocateFixed:C4,LucideLocateOff:S4,LucideLock:$4,LucideLockKeyhole:L4,LucideLogIn:A4,LucideLogOut:E4,LucideLollipop:T4,LucideLuggage:P4,LucideMSquare:D4,LucideMagnet:R4,LucideMail:B4,LucideMailCheck:O4,LucideMailMinus:V4,LucideMailOpen:U4,LucideMailPlus:F4,LucideMailQuestion:j4,LucideMailSearch:H4,LucideMailWarning:N4,LucideMailX:z4,LucideMailbox:q4,LucideMails:W4,LucideMap:X4,LucideMapPin:Z4,LucideMapPinOff:G4,LucideMapPinned:K4,LucideMartini:Y4,LucideMaximize:J4,LucideMaximize2:Q4,LucideMedal:e5,LucideMegaphone:a5,LucideMegaphoneOff:t5,LucideMeh:n5,LucideMemoryStick:s5,LucideMenu:r5,LucideMenuSquare:o5,LucideMerge:i5,LucideMessageCircle:_5,LucideMessageCircleCode:l5,LucideMessageCircleDashed:c5,LucideMessageCircleHeart:d5,LucideMessageCircleMore:u5,LucideMessageCircleOff:p5,LucideMessageCirclePlus:h5,LucideMessageCircleQuestion:f5,LucideMessageCircleReply:m5,LucideMessageCircleWarning:v5,LucideMessageCircleX:y5,LucideMessageSquare:P5,LucideMessageSquareCode:g5,LucideMessageSquareDashed:k5,LucideMessageSquareDiff:b5,LucideMessageSquareDot:w5,LucideMessageSquareHeart:x5,LucideMessageSquareMore:M5,LucideMessageSquareOff:C5,LucideMessageSquarePlus:S5,LucideMessageSquareQuote:I5,LucideMessageSquareReply:L5,LucideMessageSquareShare:$5,LucideMessageSquareText:A5,LucideMessageSquareWarning:E5,LucideMessageSquareX:T5,LucideMessagesSquare:D5,LucideMic:V5,LucideMic2:R5,LucideMicOff:O5,LucideMicroscope:U5,LucideMicrowave:F5,LucideMilestone:j5,LucideMilk:N5,LucideMilkOff:H5,LucideMinimize:B5,LucideMinimize2:z5,LucideMinus:G5,LucideMinusCircle:q5,LucideMinusSquare:W5,LucideMonitor:o3,LucideMonitorCheck:Z5,LucideMonitorDot:K5,LucideMonitorDown:X5,LucideMonitorOff:Y5,LucideMonitorPause:Q5,LucideMonitorPlay:J5,LucideMonitorSmartphone:e3,LucideMonitorSpeaker:t3,LucideMonitorStop:a3,LucideMonitorUp:n3,LucideMonitorX:s3,LucideMoon:i3,LucideMoonStar:r3,LucideMoreHorizontal:l3,LucideMoreVertical:c3,LucideMountain:u3,LucideMountainSnow:d3,LucideMouse:v3,LucideMousePointer:m3,LucideMousePointer2:p3,LucideMousePointerClick:h3,LucideMousePointerSquare:Wi,LucideMousePointerSquareDashed:f3,LucideMove:$3,LucideMove3D:Gi,LucideMove3d:Gi,LucideMoveDiagonal:_3,LucideMoveDiagonal2:y3,LucideMoveDown:b3,LucideMoveDownLeft:g3,LucideMoveDownRight:k3,LucideMoveHorizontal:w3,LucideMoveLeft:x3,LucideMoveRight:M3,LucideMoveUp:I3,LucideMoveUpLeft:C3,LucideMoveUpRight:S3,LucideMoveVertical:L3,LucideMusic:P3,LucideMusic2:A3,LucideMusic3:E3,LucideMusic4:T3,LucideNavigation:V3,LucideNavigation2:R3,LucideNavigation2Off:D3,LucideNavigationOff:O3,LucideNetwork:U3,LucideNewspaper:F3,LucideNfc:j3,LucideNut:N3,LucideNutOff:H3,LucideOctagon:z3,LucideOption:B3,LucideOrbit:q3,LucideOutdent:W3,LucidePackage:ex,LucidePackage2:G3,LucidePackageCheck:Z3,LucidePackageMinus:K3,LucidePackageOpen:X3,LucidePackagePlus:Y3,LucidePackageSearch:Q3,LucidePackageX:J3,LucidePaintBucket:tx,LucidePaintbrush:nx,LucidePaintbrush2:ax,LucidePalette:sx,LucidePalmtree:ox,LucidePanelBottom:lx,LucidePanelBottomClose:rx,LucidePanelBottomDashed:Zi,LucidePanelBottomInactive:Zi,LucidePanelBottomOpen:ix,LucidePanelLeft:Qi,LucidePanelLeftClose:Ki,LucidePanelLeftDashed:Xi,LucidePanelLeftInactive:Xi,LucidePanelLeftOpen:Yi,LucidePanelRight:ux,LucidePanelRightClose:cx,LucidePanelRightDashed:Ji,LucidePanelRightInactive:Ji,LucidePanelRightOpen:dx,LucidePanelTop:fx,LucidePanelTopClose:px,LucidePanelTopDashed:el,LucidePanelTopInactive:el,LucidePanelTopOpen:hx,LucidePanelsLeftBottom:mx,LucidePanelsLeftRight:Vi,LucidePanelsRightBottom:vx,LucidePanelsTopBottom:rl,LucidePanelsTopLeft:tl,LucidePaperclip:yx,LucideParentheses:_x,LucideParkingCircle:kx,LucideParkingCircleOff:gx,LucideParkingMeter:bx,LucideParkingSquare:xx,LucideParkingSquareOff:wx,LucidePartyPopper:Mx,LucidePause:Ix,LucidePauseCircle:Cx,LucidePauseOctagon:Sx,LucidePawPrint:Lx,LucidePcCase:$x,LucidePen:nl,LucidePenBox:_o,LucidePenLine:al,LucidePenSquare:_o,LucidePenTool:Ax,LucidePencil:Px,LucidePencilLine:Ex,LucidePencilRuler:Tx,LucidePentagon:Dx,LucidePercent:Ux,LucidePercentCircle:Rx,LucidePercentDiamond:Ox,LucidePercentSquare:Vx,LucidePersonStanding:Fx,LucidePhone:Wx,LucidePhoneCall:jx,LucidePhoneForwarded:Hx,LucidePhoneIncoming:Nx,LucidePhoneMissed:zx,LucidePhoneOff:Bx,LucidePhoneOutgoing:qx,LucidePi:Zx,LucidePiSquare:Gx,LucidePiano:Kx,LucidePictureInPicture:Yx,LucidePictureInPicture2:Xx,LucidePieChart:Qx,LucidePiggyBank:Jx,LucidePilcrow:t8,LucidePilcrowSquare:e8,LucidePill:a8,LucidePin:s8,LucidePinOff:n8,LucidePipette:o8,LucidePizza:r8,LucidePlane:c8,LucidePlaneLanding:i8,LucidePlaneTakeoff:l8,LucidePlay:p8,LucidePlayCircle:d8,LucidePlaySquare:u8,LucidePlug:v8,LucidePlug2:h8,LucidePlugZap:m8,LucidePlugZap2:f8,LucidePlus:g8,LucidePlusCircle:y8,LucidePlusSquare:_8,LucidePocket:b8,LucidePocketKnife:k8,LucidePodcast:w8,LucidePointer:M8,LucidePointerOff:x8,LucidePopcorn:C8,LucidePopsicle:S8,LucidePoundSterling:I8,LucidePower:E8,LucidePowerCircle:L8,LucidePowerOff:$8,LucidePowerSquare:A8,LucidePresentation:T8,LucidePrinter:P8,LucideProjector:D8,LucidePuzzle:R8,LucidePyramid:O8,LucideQrCode:V8,LucideQuote:U8,LucideRabbit:F8,LucideRadar:j8,LucideRadiation:H8,LucideRadio:B8,LucideRadioReceiver:N8,LucideRadioTower:z8,LucideRadius:q8,LucideRailSymbol:W8,LucideRainbow:G8,LucideRat:Z8,LucideRatio:K8,LucideReceipt:X8,LucideRectangleHorizontal:Y8,LucideRectangleVertical:Q8,LucideRecycle:J8,LucideRedo:a6,LucideRedo2:e6,LucideRedoDot:t6,LucideRefreshCcw:s6,LucideRefreshCcwDot:n6,LucideRefreshCw:r6,LucideRefreshCwOff:o6,LucideRefrigerator:i6,LucideRegex:l6,LucideRemoveFormatting:c6,LucideRepeat:p6,LucideRepeat1:d6,LucideRepeat2:u6,LucideReplace:f6,LucideReplaceAll:h6,LucideReply:v6,LucideReplyAll:m6,LucideRewind:y6,LucideRibbon:_6,LucideRocket:g6,LucideRockingChair:k6,LucideRollerCoaster:b6,LucideRotate3D:sl,LucideRotate3d:sl,LucideRotateCcw:w6,LucideRotateCw:x6,LucideRoute:C6,LucideRouteOff:M6,LucideRouter:S6,LucideRows:ol,LucideRows2:ol,LucideRows3:rl,LucideRows4:I6,LucideRss:L6,LucideRuler:$6,LucideRussianRuble:A6,LucideSailboat:E6,LucideSalad:T6,LucideSandwich:P6,LucideSatellite:R6,LucideSatelliteDish:D6,LucideSave:V6,LucideSaveAll:O6,LucideScale:U6,LucideScale3D:il,LucideScale3d:il,LucideScaling:F6,LucideScan:W6,LucideScanBarcode:j6,LucideScanEye:H6,LucideScanFace:N6,LucideScanLine:z6,LucideScanSearch:B6,LucideScanText:q6,LucideScatterChart:G6,LucideSchool:K6,LucideSchool2:Z6,LucideScissors:J6,LucideScissorsLineDashed:X6,LucideScissorsSquare:Q6,LucideScissorsSquareDashedBottom:Y6,LucideScreenShare:tM,LucideScreenShareOff:eM,LucideScroll:nM,LucideScrollText:aM,LucideSearch:lM,LucideSearchCheck:sM,LucideSearchCode:oM,LucideSearchSlash:rM,LucideSearchX:iM,LucideSend:dM,LucideSendHorizonal:ll,LucideSendHorizontal:ll,LucideSendToBack:cM,LucideSeparatorHorizontal:uM,LucideSeparatorVertical:pM,LucideServer:vM,LucideServerCog:hM,LucideServerCrash:fM,LucideServerOff:mM,LucideSettings:_M,LucideSettings2:yM,LucideShapes:gM,LucideShare:bM,LucideShare2:kM,LucideSheet:wM,LucideShell:xM,LucideShield:PM,LucideShieldAlert:MM,LucideShieldBan:CM,LucideShieldCheck:SM,LucideShieldClose:cl,LucideShieldEllipsis:IM,LucideShieldHalf:LM,LucideShieldMinus:$M,LucideShieldOff:AM,LucideShieldPlus:EM,LucideShieldQuestion:TM,LucideShieldX:cl,LucideShip:RM,LucideShipWheel:DM,LucideShirt:OM,LucideShoppingBag:VM,LucideShoppingBasket:UM,LucideShoppingCart:FM,LucideShovel:jM,LucideShowerHead:HM,LucideShrink:NM,LucideShrub:zM,LucideShuffle:BM,LucideSidebar:Qi,LucideSidebarClose:Ki,LucideSidebarOpen:Yi,LucideSigma:WM,LucideSigmaSquare:qM,LucideSignal:YM,LucideSignalHigh:GM,LucideSignalLow:ZM,LucideSignalMedium:KM,LucideSignalZero:XM,LucideSignpost:JM,LucideSignpostBig:QM,LucideSiren:e7,LucideSkipBack:t7,LucideSkipForward:a7,LucideSkull:n7,LucideSlack:s7,LucideSlash:o7,LucideSlice:r7,LucideSliders:l7,LucideSlidersHorizontal:i7,LucideSmartphone:u7,LucideSmartphoneCharging:c7,LucideSmartphoneNfc:d7,LucideSmile:h7,LucideSmilePlus:p7,LucideSnail:f7,LucideSnowflake:m7,LucideSofa:v7,LucideSortAsc:Ii,LucideSortDesc:Mi,LucideSoup:y7,LucideSpace:_7,LucideSpade:g7,LucideSparkle:k7,LucideSparkles:dl,LucideSpeaker:b7,LucideSpeech:w7,LucideSpellCheck:M7,LucideSpellCheck2:x7,LucideSpline:C7,LucideSplit:L7,LucideSplitSquareHorizontal:S7,LucideSplitSquareVertical:I7,LucideSprayCan:$7,LucideSprout:A7,LucideSquare:F7,LucideSquareAsterisk:E7,LucideSquareCode:T7,LucideSquareDashedBottom:D7,LucideSquareDashedBottomCode:P7,LucideSquareDot:R7,LucideSquareEqual:O7,LucideSquareGantt:Hi,LucideSquareKanban:qi,LucideSquareKanbanDashed:Bi,LucideSquareSlash:V7,LucideSquareStack:U7,LucideSquareUser:pl,LucideSquareUserRound:ul,LucideSquircle:j7,LucideSquirrel:H7,LucideStamp:N7,LucideStar:q7,LucideStarHalf:z7,LucideStarOff:B7,LucideStars:dl,LucideStepBack:W7,LucideStepForward:G7,LucideStethoscope:Z7,LucideSticker:K7,LucideStickyNote:X7,LucideStopCircle:Y7,LucideStore:Q7,LucideStretchHorizontal:J7,LucideStretchVertical:eC,LucideStrikethrough:tC,LucideSubscript:aC,LucideSubtitles:nC,LucideSun:lC,LucideSunDim:sC,LucideSunMedium:oC,LucideSunMoon:rC,LucideSunSnow:iC,LucideSunrise:cC,LucideSunset:dC,LucideSuperscript:uC,LucideSwissFranc:pC,LucideSwitchCamera:hC,LucideSword:fC,LucideSwords:mC,LucideSyringe:vC,LucideTable:gC,LucideTable2:yC,LucideTableProperties:_C,LucideTablet:bC,LucideTabletSmartphone:kC,LucideTablets:wC,LucideTag:xC,LucideTags:MC,LucideTally1:CC,LucideTally2:SC,LucideTally3:IC,LucideTally4:LC,LucideTally5:$C,LucideTangent:AC,LucideTarget:EC,LucideTent:PC,LucideTentTree:TC,LucideTerminal:RC,LucideTerminalSquare:DC,LucideTestTube:VC,LucideTestTube2:OC,LucideTestTubes:UC,LucideText:NC,LucideTextCursor:jC,LucideTextCursorInput:FC,LucideTextQuote:HC,LucideTextSelect:hl,LucideTextSelection:hl,LucideTheater:zC,LucideThermometer:WC,LucideThermometerSnowflake:BC,LucideThermometerSun:qC,LucideThumbsDown:GC,LucideThumbsUp:ZC,LucideTicket:KC,LucideTimer:QC,LucideTimerOff:XC,LucideTimerReset:YC,LucideToggleLeft:JC,LucideToggleRight:eS,LucideTornado:tS,LucideTorus:aS,LucideTouchpad:sS,LucideTouchpadOff:nS,LucideTowerControl:oS,LucideToyBrick:rS,LucideTractor:iS,LucideTrafficCone:lS,LucideTrain:fl,LucideTrainFront:dS,LucideTrainFrontTunnel:cS,LucideTrainTrack:uS,LucideTramFront:fl,LucideTrash:hS,LucideTrash2:pS,LucideTreeDeciduous:fS,LucideTreePine:mS,LucideTrees:vS,LucideTrello:yS,LucideTrendingDown:_S,LucideTrendingUp:gS,LucideTriangle:bS,LucideTriangleRight:kS,LucideTrophy:wS,LucideTruck:xS,LucideTurtle:MS,LucideTv:SS,LucideTv2:CS,LucideTwitch:IS,LucideTwitter:LS,LucideType:$S,LucideUmbrella:ES,LucideUmbrellaOff:AS,LucideUnderline:TS,LucideUndo:RS,LucideUndo2:PS,LucideUndoDot:DS,LucideUnfoldHorizontal:OS,LucideUnfoldVertical:VS,LucideUngroup:US,LucideUnlink:jS,LucideUnlink2:FS,LucideUnlock:NS,LucideUnlockKeyhole:HS,LucideUnplug:zS,LucideUpload:qS,LucideUploadCloud:BS,LucideUsb:WS,LucideUser:eI,LucideUser2:kl,LucideUserCheck:GS,LucideUserCheck2:ml,LucideUserCircle:Ri,LucideUserCircle2:Di,LucideUserCog:ZS,LucideUserCog2:vl,LucideUserMinus:KS,LucideUserMinus2:yl,LucideUserPlus:XS,LucideUserPlus2:_l,LucideUserRound:kl,LucideUserRoundCheck:ml,LucideUserRoundCog:vl,LucideUserRoundMinus:yl,LucideUserRoundPlus:_l,LucideUserRoundSearch:YS,LucideUserRoundX:gl,LucideUserSearch:QS,LucideUserSquare:pl,LucideUserSquare2:ul,LucideUserX:JS,LucideUserX2:gl,LucideUsers:tI,LucideUsers2:bl,LucideUsersRound:bl,LucideUtensils:nI,LucideUtensilsCrossed:aI,LucideUtilityPole:sI,LucideVariable:oI,LucideVegan:rI,LucideVenetianMask:iI,LucideVerified:Ai,LucideVibrate:cI,LucideVibrateOff:lI,LucideVideo:uI,LucideVideoOff:dI,LucideVideotape:pI,LucideView:hI,LucideVoicemail:fI,LucideVolume:_I,LucideVolume1:mI,LucideVolume2:vI,LucideVolumeX:yI,LucideVote:gI,LucideWallet:wI,LucideWallet2:kI,LucideWalletCards:bI,LucideWallpaper:xI,LucideWand:CI,LucideWand2:MI,LucideWarehouse:SI,LucideWatch:II,LucideWaves:LI,LucideWaypoints:$I,LucideWebcam:AI,LucideWebhook:EI,LucideWeight:TI,LucideWheat:DI,LucideWheatOff:PI,LucideWholeWord:RI,LucideWifi:VI,LucideWifiOff:OI,LucideWind:UI,LucideWine:jI,LucideWineOff:FI,LucideWorkflow:HI,LucideWrapText:NI,LucideWrench:zI,LucideX:GI,LucideXCircle:BI,LucideXOctagon:qI,LucideXSquare:WI,LucideYoutube:ZI,LucideZap:XI,LucideZapOff:KI,LucideZoomIn:YI,LucideZoomOut:QI,Luggage:P4,LuggageIcon:P4,MSquare:D4,MSquareIcon:D4,Magnet:R4,MagnetIcon:R4,Mail:B4,MailCheck:O4,MailCheckIcon:O4,MailIcon:B4,MailMinus:V4,MailMinusIcon:V4,MailOpen:U4,MailOpenIcon:U4,MailPlus:F4,MailPlusIcon:F4,MailQuestion:j4,MailQuestionIcon:j4,MailSearch:H4,MailSearchIcon:H4,MailWarning:N4,MailWarningIcon:N4,MailX:z4,MailXIcon:z4,Mailbox:q4,MailboxIcon:q4,Mails:W4,MailsIcon:W4,Map:X4,MapIcon:X4,MapPin:Z4,MapPinIcon:Z4,MapPinOff:G4,MapPinOffIcon:G4,MapPinned:K4,MapPinnedIcon:K4,Martini:Y4,MartiniIcon:Y4,Maximize:J4,Maximize2:Q4,Maximize2Icon:Q4,MaximizeIcon:J4,Medal:e5,MedalIcon:e5,Megaphone:a5,MegaphoneIcon:a5,MegaphoneOff:t5,MegaphoneOffIcon:t5,Meh:n5,MehIcon:n5,MemoryStick:s5,MemoryStickIcon:s5,Menu:r5,MenuIcon:r5,MenuSquare:o5,MenuSquareIcon:o5,Merge:i5,MergeIcon:i5,MessageCircle:_5,MessageCircleCode:l5,MessageCircleCodeIcon:l5,MessageCircleDashed:c5,MessageCircleDashedIcon:c5,MessageCircleHeart:d5,MessageCircleHeartIcon:d5,MessageCircleIcon:_5,MessageCircleMore:u5,MessageCircleMoreIcon:u5,MessageCircleOff:p5,MessageCircleOffIcon:p5,MessageCirclePlus:h5,MessageCirclePlusIcon:h5,MessageCircleQuestion:f5,MessageCircleQuestionIcon:f5,MessageCircleReply:m5,MessageCircleReplyIcon:m5,MessageCircleWarning:v5,MessageCircleWarningIcon:v5,MessageCircleX:y5,MessageCircleXIcon:y5,MessageSquare:P5,MessageSquareCode:g5,MessageSquareCodeIcon:g5,MessageSquareDashed:k5,MessageSquareDashedIcon:k5,MessageSquareDiff:b5,MessageSquareDiffIcon:b5,MessageSquareDot:w5,MessageSquareDotIcon:w5,MessageSquareHeart:x5,MessageSquareHeartIcon:x5,MessageSquareIcon:P5,MessageSquareMore:M5,MessageSquareMoreIcon:M5,MessageSquareOff:C5,MessageSquareOffIcon:C5,MessageSquarePlus:S5,MessageSquarePlusIcon:S5,MessageSquareQuote:I5,MessageSquareQuoteIcon:I5,MessageSquareReply:L5,MessageSquareReplyIcon:L5,MessageSquareShare:$5,MessageSquareShareIcon:$5,MessageSquareText:A5,MessageSquareTextIcon:A5,MessageSquareWarning:E5,MessageSquareWarningIcon:E5,MessageSquareX:T5,MessageSquareXIcon:T5,MessagesSquare:D5,MessagesSquareIcon:D5,Mic:V5,Mic2:R5,Mic2Icon:R5,MicIcon:V5,MicOff:O5,MicOffIcon:O5,Microscope:U5,MicroscopeIcon:U5,Microwave:F5,MicrowaveIcon:F5,Milestone:j5,MilestoneIcon:j5,Milk:N5,MilkIcon:N5,MilkOff:H5,MilkOffIcon:H5,Minimize:B5,Minimize2:z5,Minimize2Icon:z5,MinimizeIcon:B5,Minus:G5,MinusCircle:q5,MinusCircleIcon:q5,MinusIcon:G5,MinusSquare:W5,MinusSquareIcon:W5,Monitor:o3,MonitorCheck:Z5,MonitorCheckIcon:Z5,MonitorDot:K5,MonitorDotIcon:K5,MonitorDown:X5,MonitorDownIcon:X5,MonitorIcon:o3,MonitorOff:Y5,MonitorOffIcon:Y5,MonitorPause:Q5,MonitorPauseIcon:Q5,MonitorPlay:J5,MonitorPlayIcon:J5,MonitorSmartphone:e3,MonitorSmartphoneIcon:e3,MonitorSpeaker:t3,MonitorSpeakerIcon:t3,MonitorStop:a3,MonitorStopIcon:a3,MonitorUp:n3,MonitorUpIcon:n3,MonitorX:s3,MonitorXIcon:s3,Moon:i3,MoonIcon:i3,MoonStar:r3,MoonStarIcon:r3,MoreHorizontal:l3,MoreHorizontalIcon:l3,MoreVertical:c3,MoreVerticalIcon:c3,Mountain:u3,MountainIcon:u3,MountainSnow:d3,MountainSnowIcon:d3,Mouse:v3,MouseIcon:v3,MousePointer:m3,MousePointer2:p3,MousePointer2Icon:p3,MousePointerClick:h3,MousePointerClickIcon:h3,MousePointerIcon:m3,MousePointerSquare:Wi,MousePointerSquareDashed:f3,MousePointerSquareDashedIcon:f3,MousePointerSquareIcon:Wi,Move:$3,Move3D:Gi,Move3DIcon:Gi,Move3d:Gi,Move3dIcon:Gi,MoveDiagonal:_3,MoveDiagonal2:y3,MoveDiagonal2Icon:y3,MoveDiagonalIcon:_3,MoveDown:b3,MoveDownIcon:b3,MoveDownLeft:g3,MoveDownLeftIcon:g3,MoveDownRight:k3,MoveDownRightIcon:k3,MoveHorizontal:w3,MoveHorizontalIcon:w3,MoveIcon:$3,MoveLeft:x3,MoveLeftIcon:x3,MoveRight:M3,MoveRightIcon:M3,MoveUp:I3,MoveUpIcon:I3,MoveUpLeft:C3,MoveUpLeftIcon:C3,MoveUpRight:S3,MoveUpRightIcon:S3,MoveVertical:L3,MoveVerticalIcon:L3,Music:P3,Music2:A3,Music2Icon:A3,Music3:E3,Music3Icon:E3,Music4:T3,Music4Icon:T3,MusicIcon:P3,Navigation:V3,Navigation2:R3,Navigation2Icon:R3,Navigation2Off:D3,Navigation2OffIcon:D3,NavigationIcon:V3,NavigationOff:O3,NavigationOffIcon:O3,Network:U3,NetworkIcon:U3,Newspaper:F3,NewspaperIcon:F3,Nfc:j3,NfcIcon:j3,Nut:N3,NutIcon:N3,NutOff:H3,NutOffIcon:H3,Octagon:z3,OctagonIcon:z3,Option:B3,OptionIcon:B3,Orbit:q3,OrbitIcon:q3,Outdent:W3,OutdentIcon:W3,Package:ex,Package2:G3,Package2Icon:G3,PackageCheck:Z3,PackageCheckIcon:Z3,PackageIcon:ex,PackageMinus:K3,PackageMinusIcon:K3,PackageOpen:X3,PackageOpenIcon:X3,PackagePlus:Y3,PackagePlusIcon:Y3,PackageSearch:Q3,PackageSearchIcon:Q3,PackageX:J3,PackageXIcon:J3,PaintBucket:tx,PaintBucketIcon:tx,Paintbrush:nx,Paintbrush2:ax,Paintbrush2Icon:ax,PaintbrushIcon:nx,Palette:sx,PaletteIcon:sx,Palmtree:ox,PalmtreeIcon:ox,PanelBottom:lx,PanelBottomClose:rx,PanelBottomCloseIcon:rx,PanelBottomDashed:Zi,PanelBottomDashedIcon:Zi,PanelBottomIcon:lx,PanelBottomInactive:Zi,PanelBottomInactiveIcon:Zi,PanelBottomOpen:ix,PanelBottomOpenIcon:ix,PanelLeft:Qi,PanelLeftClose:Ki,PanelLeftCloseIcon:Ki,PanelLeftDashed:Xi,PanelLeftDashedIcon:Xi,PanelLeftIcon:Qi,PanelLeftInactive:Xi,PanelLeftInactiveIcon:Xi,PanelLeftOpen:Yi,PanelLeftOpenIcon:Yi,PanelRight:ux,PanelRightClose:cx,PanelRightCloseIcon:cx,PanelRightDashed:Ji,PanelRightDashedIcon:Ji,PanelRightIcon:ux,PanelRightInactive:Ji,PanelRightInactiveIcon:Ji,PanelRightOpen:dx,PanelRightOpenIcon:dx,PanelTop:fx,PanelTopClose:px,PanelTopCloseIcon:px,PanelTopDashed:el,PanelTopDashedIcon:el,PanelTopIcon:fx,PanelTopInactive:el,PanelTopInactiveIcon:el,PanelTopOpen:hx,PanelTopOpenIcon:hx,PanelsLeftBottom:mx,PanelsLeftBottomIcon:mx,PanelsLeftRight:Vi,PanelsLeftRightIcon:Vi,PanelsRightBottom:vx,PanelsRightBottomIcon:vx,PanelsTopBottom:rl,PanelsTopBottomIcon:rl,PanelsTopLeft:tl,PanelsTopLeftIcon:tl,Paperclip:yx,PaperclipIcon:yx,Parentheses:_x,ParenthesesIcon:_x,ParkingCircle:kx,ParkingCircleIcon:kx,ParkingCircleOff:gx,ParkingCircleOffIcon:gx,ParkingMeter:bx,ParkingMeterIcon:bx,ParkingSquare:xx,ParkingSquareIcon:xx,ParkingSquareOff:wx,ParkingSquareOffIcon:wx,PartyPopper:Mx,PartyPopperIcon:Mx,Pause:Ix,PauseCircle:Cx,PauseCircleIcon:Cx,PauseIcon:Ix,PauseOctagon:Sx,PauseOctagonIcon:Sx,PawPrint:Lx,PawPrintIcon:Lx,PcCase:$x,PcCaseIcon:$x,Pen:nl,PenBox:_o,PenBoxIcon:_o,PenIcon:nl,PenLine:al,PenLineIcon:al,PenSquare:_o,PenSquareIcon:_o,PenTool:Ax,PenToolIcon:Ax,Pencil:Px,PencilIcon:Px,PencilLine:Ex,PencilLineIcon:Ex,PencilRuler:Tx,PencilRulerIcon:Tx,Pentagon:Dx,PentagonIcon:Dx,Percent:Ux,PercentCircle:Rx,PercentCircleIcon:Rx,PercentDiamond:Ox,PercentDiamondIcon:Ox,PercentIcon:Ux,PercentSquare:Vx,PercentSquareIcon:Vx,PersonStanding:Fx,PersonStandingIcon:Fx,Phone:Wx,PhoneCall:jx,PhoneCallIcon:jx,PhoneForwarded:Hx,PhoneForwardedIcon:Hx,PhoneIcon:Wx,PhoneIncoming:Nx,PhoneIncomingIcon:Nx,PhoneMissed:zx,PhoneMissedIcon:zx,PhoneOff:Bx,PhoneOffIcon:Bx,PhoneOutgoing:qx,PhoneOutgoingIcon:qx,Pi:Zx,PiIcon:Zx,PiSquare:Gx,PiSquareIcon:Gx,Piano:Kx,PianoIcon:Kx,PictureInPicture:Yx,PictureInPicture2:Xx,PictureInPicture2Icon:Xx,PictureInPictureIcon:Yx,PieChart:Qx,PieChartIcon:Qx,PiggyBank:Jx,PiggyBankIcon:Jx,Pilcrow:t8,PilcrowIcon:t8,PilcrowSquare:e8,PilcrowSquareIcon:e8,Pill:a8,PillIcon:a8,Pin:s8,PinIcon:s8,PinOff:n8,PinOffIcon:n8,Pipette:o8,PipetteIcon:o8,Pizza:r8,PizzaIcon:r8,Plane:c8,PlaneIcon:c8,PlaneLanding:i8,PlaneLandingIcon:i8,PlaneTakeoff:l8,PlaneTakeoffIcon:l8,Play:p8,PlayCircle:d8,PlayCircleIcon:d8,PlayIcon:p8,PlaySquare:u8,PlaySquareIcon:u8,Plug:v8,Plug2:h8,Plug2Icon:h8,PlugIcon:v8,PlugZap:m8,PlugZap2:f8,PlugZap2Icon:f8,PlugZapIcon:m8,Plus:g8,PlusCircle:y8,PlusCircleIcon:y8,PlusIcon:g8,PlusSquare:_8,PlusSquareIcon:_8,Pocket:b8,PocketIcon:b8,PocketKnife:k8,PocketKnifeIcon:k8,Podcast:w8,PodcastIcon:w8,Pointer:M8,PointerIcon:M8,PointerOff:x8,PointerOffIcon:x8,Popcorn:C8,PopcornIcon:C8,Popsicle:S8,PopsicleIcon:S8,PoundSterling:I8,PoundSterlingIcon:I8,Power:E8,PowerCircle:L8,PowerCircleIcon:L8,PowerIcon:E8,PowerOff:$8,PowerOffIcon:$8,PowerSquare:A8,PowerSquareIcon:A8,Presentation:T8,PresentationIcon:T8,Printer:P8,PrinterIcon:P8,Projector:D8,ProjectorIcon:D8,Puzzle:R8,PuzzleIcon:R8,Pyramid:O8,PyramidIcon:O8,QrCode:V8,QrCodeIcon:V8,Quote:U8,QuoteIcon:U8,Rabbit:F8,RabbitIcon:F8,Radar:j8,RadarIcon:j8,Radiation:H8,RadiationIcon:H8,Radio:B8,RadioIcon:B8,RadioReceiver:N8,RadioReceiverIcon:N8,RadioTower:z8,RadioTowerIcon:z8,Radius:q8,RadiusIcon:q8,RailSymbol:W8,RailSymbolIcon:W8,Rainbow:G8,RainbowIcon:G8,Rat:Z8,RatIcon:Z8,Ratio:K8,RatioIcon:K8,Receipt:X8,ReceiptIcon:X8,RectangleHorizontal:Y8,RectangleHorizontalIcon:Y8,RectangleVertical:Q8,RectangleVerticalIcon:Q8,Recycle:J8,RecycleIcon:J8,Redo:a6,Redo2:e6,Redo2Icon:e6,RedoDot:t6,RedoDotIcon:t6,RedoIcon:a6,RefreshCcw:s6,RefreshCcwDot:n6,RefreshCcwDotIcon:n6,RefreshCcwIcon:s6,RefreshCw:r6,RefreshCwIcon:r6,RefreshCwOff:o6,RefreshCwOffIcon:o6,Refrigerator:i6,RefrigeratorIcon:i6,Regex:l6,RegexIcon:l6,RemoveFormatting:c6,RemoveFormattingIcon:c6,Repeat:p6,Repeat1:d6,Repeat1Icon:d6,Repeat2:u6,Repeat2Icon:u6,RepeatIcon:p6,Replace:f6,ReplaceAll:h6,ReplaceAllIcon:h6,ReplaceIcon:f6,Reply:v6,ReplyAll:m6,ReplyAllIcon:m6,ReplyIcon:v6,Rewind:y6,RewindIcon:y6,Ribbon:_6,RibbonIcon:_6,Rocket:g6,RocketIcon:g6,RockingChair:k6,RockingChairIcon:k6,RollerCoaster:b6,RollerCoasterIcon:b6,Rotate3D:sl,Rotate3DIcon:sl,Rotate3d:sl,Rotate3dIcon:sl,RotateCcw:w6,RotateCcwIcon:w6,RotateCw:x6,RotateCwIcon:x6,Route:C6,RouteIcon:C6,RouteOff:M6,RouteOffIcon:M6,Router:S6,RouterIcon:S6,Rows:ol,Rows2:ol,Rows2Icon:ol,Rows3:rl,Rows3Icon:rl,Rows4:I6,Rows4Icon:I6,RowsIcon:ol,Rss:L6,RssIcon:L6,Ruler:$6,RulerIcon:$6,RussianRuble:A6,RussianRubleIcon:A6,Sailboat:E6,SailboatIcon:E6,Salad:T6,SaladIcon:T6,Sandwich:P6,SandwichIcon:P6,Satellite:R6,SatelliteDish:D6,SatelliteDishIcon:D6,SatelliteIcon:R6,Save:V6,SaveAll:O6,SaveAllIcon:O6,SaveIcon:V6,Scale:U6,Scale3D:il,Scale3DIcon:il,Scale3d:il,Scale3dIcon:il,ScaleIcon:U6,Scaling:F6,ScalingIcon:F6,Scan:W6,ScanBarcode:j6,ScanBarcodeIcon:j6,ScanEye:H6,ScanEyeIcon:H6,ScanFace:N6,ScanFaceIcon:N6,ScanIcon:W6,ScanLine:z6,ScanLineIcon:z6,ScanSearch:B6,ScanSearchIcon:B6,ScanText:q6,ScanTextIcon:q6,ScatterChart:G6,ScatterChartIcon:G6,School:K6,School2:Z6,School2Icon:Z6,SchoolIcon:K6,Scissors:J6,ScissorsIcon:J6,ScissorsLineDashed:X6,ScissorsLineDashedIcon:X6,ScissorsSquare:Q6,ScissorsSquareDashedBottom:Y6,ScissorsSquareDashedBottomIcon:Y6,ScissorsSquareIcon:Q6,ScreenShare:tM,ScreenShareIcon:tM,ScreenShareOff:eM,ScreenShareOffIcon:eM,Scroll:nM,ScrollIcon:nM,ScrollText:aM,ScrollTextIcon:aM,Search:lM,SearchCheck:sM,SearchCheckIcon:sM,SearchCode:oM,SearchCodeIcon:oM,SearchIcon:lM,SearchSlash:rM,SearchSlashIcon:rM,SearchX:iM,SearchXIcon:iM,Send:dM,SendHorizonal:ll,SendHorizonalIcon:ll,SendHorizontal:ll,SendHorizontalIcon:ll,SendIcon:dM,SendToBack:cM,SendToBackIcon:cM,SeparatorHorizontal:uM,SeparatorHorizontalIcon:uM,SeparatorVertical:pM,SeparatorVerticalIcon:pM,Server:vM,ServerCog:hM,ServerCogIcon:hM,ServerCrash:fM,ServerCrashIcon:fM,ServerIcon:vM,ServerOff:mM,ServerOffIcon:mM,Settings:_M,Settings2:yM,Settings2Icon:yM,SettingsIcon:_M,Shapes:gM,ShapesIcon:gM,Share:bM,Share2:kM,Share2Icon:kM,ShareIcon:bM,Sheet:wM,SheetIcon:wM,Shell:xM,ShellIcon:xM,Shield:PM,ShieldAlert:MM,ShieldAlertIcon:MM,ShieldBan:CM,ShieldBanIcon:CM,ShieldCheck:SM,ShieldCheckIcon:SM,ShieldClose:cl,ShieldCloseIcon:cl,ShieldEllipsis:IM,ShieldEllipsisIcon:IM,ShieldHalf:LM,ShieldHalfIcon:LM,ShieldIcon:PM,ShieldMinus:$M,ShieldMinusIcon:$M,ShieldOff:AM,ShieldOffIcon:AM,ShieldPlus:EM,ShieldPlusIcon:EM,ShieldQuestion:TM,ShieldQuestionIcon:TM,ShieldX:cl,ShieldXIcon:cl,Ship:RM,ShipIcon:RM,ShipWheel:DM,ShipWheelIcon:DM,Shirt:OM,ShirtIcon:OM,ShoppingBag:VM,ShoppingBagIcon:VM,ShoppingBasket:UM,ShoppingBasketIcon:UM,ShoppingCart:FM,ShoppingCartIcon:FM,Shovel:jM,ShovelIcon:jM,ShowerHead:HM,ShowerHeadIcon:HM,Shrink:NM,ShrinkIcon:NM,Shrub:zM,ShrubIcon:zM,Shuffle:BM,ShuffleIcon:BM,Sidebar:Qi,SidebarClose:Ki,SidebarCloseIcon:Ki,SidebarIcon:Qi,SidebarOpen:Yi,SidebarOpenIcon:Yi,Sigma:WM,SigmaIcon:WM,SigmaSquare:qM,SigmaSquareIcon:qM,Signal:YM,SignalHigh:GM,SignalHighIcon:GM,SignalIcon:YM,SignalLow:ZM,SignalLowIcon:ZM,SignalMedium:KM,SignalMediumIcon:KM,SignalZero:XM,SignalZeroIcon:XM,Signpost:JM,SignpostBig:QM,SignpostBigIcon:QM,SignpostIcon:JM,Siren:e7,SirenIcon:e7,SkipBack:t7,SkipBackIcon:t7,SkipForward:a7,SkipForwardIcon:a7,Skull:n7,SkullIcon:n7,Slack:s7,SlackIcon:s7,Slash:o7,SlashIcon:o7,Slice:r7,SliceIcon:r7,Sliders:l7,SlidersHorizontal:i7,SlidersHorizontalIcon:i7,SlidersIcon:l7,Smartphone:u7,SmartphoneCharging:c7,SmartphoneChargingIcon:c7,SmartphoneIcon:u7,SmartphoneNfc:d7,SmartphoneNfcIcon:d7,Smile:h7,SmileIcon:h7,SmilePlus:p7,SmilePlusIcon:p7,Snail:f7,SnailIcon:f7,Snowflake:m7,SnowflakeIcon:m7,Sofa:v7,SofaIcon:v7,SortAsc:Ii,SortAscIcon:Ii,SortDesc:Mi,SortDescIcon:Mi,Soup:y7,SoupIcon:y7,Space:_7,SpaceIcon:_7,Spade:g7,SpadeIcon:g7,Sparkle:k7,SparkleIcon:k7,Sparkles:dl,SparklesIcon:dl,Speaker:b7,SpeakerIcon:b7,Speech:w7,SpeechIcon:w7,SpellCheck:M7,SpellCheck2:x7,SpellCheck2Icon:x7,SpellCheckIcon:M7,Spline:C7,SplineIcon:C7,Split:L7,SplitIcon:L7,SplitSquareHorizontal:S7,SplitSquareHorizontalIcon:S7,SplitSquareVertical:I7,SplitSquareVerticalIcon:I7,SprayCan:$7,SprayCanIcon:$7,Sprout:A7,SproutIcon:A7,Square:F7,SquareAsterisk:E7,SquareAsteriskIcon:E7,SquareCode:T7,SquareCodeIcon:T7,SquareDashedBottom:D7,SquareDashedBottomCode:P7,SquareDashedBottomCodeIcon:P7,SquareDashedBottomIcon:D7,SquareDot:R7,SquareDotIcon:R7,SquareEqual:O7,SquareEqualIcon:O7,SquareGantt:Hi,SquareGanttIcon:Hi,SquareIcon:F7,SquareKanban:qi,SquareKanbanDashed:Bi,SquareKanbanDashedIcon:Bi,SquareKanbanIcon:qi,SquareSlash:V7,SquareSlashIcon:V7,SquareStack:U7,SquareStackIcon:U7,SquareUser:pl,SquareUserIcon:pl,SquareUserRound:ul,SquareUserRoundIcon:ul,Squircle:j7,SquircleIcon:j7,Squirrel:H7,SquirrelIcon:H7,Stamp:N7,StampIcon:N7,Star:q7,StarHalf:z7,StarHalfIcon:z7,StarIcon:q7,StarOff:B7,StarOffIcon:B7,Stars:dl,StarsIcon:dl,StepBack:W7,StepBackIcon:W7,StepForward:G7,StepForwardIcon:G7,Stethoscope:Z7,StethoscopeIcon:Z7,Sticker:K7,StickerIcon:K7,StickyNote:X7,StickyNoteIcon:X7,StopCircle:Y7,StopCircleIcon:Y7,Store:Q7,StoreIcon:Q7,StretchHorizontal:J7,StretchHorizontalIcon:J7,StretchVertical:eC,StretchVerticalIcon:eC,Strikethrough:tC,StrikethroughIcon:tC,Subscript:aC,SubscriptIcon:aC,Subtitles:nC,SubtitlesIcon:nC,Sun:lC,SunDim:sC,SunDimIcon:sC,SunIcon:lC,SunMedium:oC,SunMediumIcon:oC,SunMoon:rC,SunMoonIcon:rC,SunSnow:iC,SunSnowIcon:iC,Sunrise:cC,SunriseIcon:cC,Sunset:dC,SunsetIcon:dC,Superscript:uC,SuperscriptIcon:uC,SwissFranc:pC,SwissFrancIcon:pC,SwitchCamera:hC,SwitchCameraIcon:hC,Sword:fC,SwordIcon:fC,Swords:mC,SwordsIcon:mC,Syringe:vC,SyringeIcon:vC,Table:gC,Table2:yC,Table2Icon:yC,TableIcon:gC,TableProperties:_C,TablePropertiesIcon:_C,Tablet:bC,TabletIcon:bC,TabletSmartphone:kC,TabletSmartphoneIcon:kC,Tablets:wC,TabletsIcon:wC,Tag:xC,TagIcon:xC,Tags:MC,TagsIcon:MC,Tally1:CC,Tally1Icon:CC,Tally2:SC,Tally2Icon:SC,Tally3:IC,Tally3Icon:IC,Tally4:LC,Tally4Icon:LC,Tally5:$C,Tally5Icon:$C,Tangent:AC,TangentIcon:AC,Target:EC,TargetIcon:EC,Tent:PC,TentIcon:PC,TentTree:TC,TentTreeIcon:TC,Terminal:RC,TerminalIcon:RC,TerminalSquare:DC,TerminalSquareIcon:DC,TestTube:VC,TestTube2:OC,TestTube2Icon:OC,TestTubeIcon:VC,TestTubes:UC,TestTubesIcon:UC,Text:NC,TextCursor:jC,TextCursorIcon:jC,TextCursorInput:FC,TextCursorInputIcon:FC,TextIcon:NC,TextQuote:HC,TextQuoteIcon:HC,TextSelect:hl,TextSelectIcon:hl,TextSelection:hl,TextSelectionIcon:hl,Theater:zC,TheaterIcon:zC,Thermometer:WC,ThermometerIcon:WC,ThermometerSnowflake:BC,ThermometerSnowflakeIcon:BC,ThermometerSun:qC,ThermometerSunIcon:qC,ThumbsDown:GC,ThumbsDownIcon:GC,ThumbsUp:ZC,ThumbsUpIcon:ZC,Ticket:KC,TicketIcon:KC,Timer:QC,TimerIcon:QC,TimerOff:XC,TimerOffIcon:XC,TimerReset:YC,TimerResetIcon:YC,ToggleLeft:JC,ToggleLeftIcon:JC,ToggleRight:eS,ToggleRightIcon:eS,Tornado:tS,TornadoIcon:tS,Torus:aS,TorusIcon:aS,Touchpad:sS,TouchpadIcon:sS,TouchpadOff:nS,TouchpadOffIcon:nS,TowerControl:oS,TowerControlIcon:oS,ToyBrick:rS,ToyBrickIcon:rS,Tractor:iS,TractorIcon:iS,TrafficCone:lS,TrafficConeIcon:lS,Train:fl,TrainFront:dS,TrainFrontIcon:dS,TrainFrontTunnel:cS,TrainFrontTunnelIcon:cS,TrainIcon:fl,TrainTrack:uS,TrainTrackIcon:uS,TramFront:fl,TramFrontIcon:fl,Trash:hS,Trash2:pS,Trash2Icon:pS,TrashIcon:hS,TreeDeciduous:fS,TreeDeciduousIcon:fS,TreePine:mS,TreePineIcon:mS,Trees:vS,TreesIcon:vS,Trello:yS,TrelloIcon:yS,TrendingDown:_S,TrendingDownIcon:_S,TrendingUp:gS,TrendingUpIcon:gS,Triangle:bS,TriangleIcon:bS,TriangleRight:kS,TriangleRightIcon:kS,Trophy:wS,TrophyIcon:wS,Truck:xS,TruckIcon:xS,Turtle:MS,TurtleIcon:MS,Tv:SS,Tv2:CS,Tv2Icon:CS,TvIcon:SS,Twitch:IS,TwitchIcon:IS,Twitter:LS,TwitterIcon:LS,Type:$S,TypeIcon:$S,Umbrella:ES,UmbrellaIcon:ES,UmbrellaOff:AS,UmbrellaOffIcon:AS,Underline:TS,UnderlineIcon:TS,Undo:RS,Undo2:PS,Undo2Icon:PS,UndoDot:DS,UndoDotIcon:DS,UndoIcon:RS,UnfoldHorizontal:OS,UnfoldHorizontalIcon:OS,UnfoldVertical:VS,UnfoldVerticalIcon:VS,Ungroup:US,UngroupIcon:US,Unlink:jS,Unlink2:FS,Unlink2Icon:FS,UnlinkIcon:jS,Unlock:NS,UnlockIcon:NS,UnlockKeyhole:HS,UnlockKeyholeIcon:HS,Unplug:zS,UnplugIcon:zS,Upload:qS,UploadCloud:BS,UploadCloudIcon:BS,UploadIcon:qS,Usb:WS,UsbIcon:WS,User:eI,User2:kl,User2Icon:kl,UserCheck:GS,UserCheck2:ml,UserCheck2Icon:ml,UserCheckIcon:GS,UserCircle:Ri,UserCircle2:Di,UserCircle2Icon:Di,UserCircleIcon:Ri,UserCog:ZS,UserCog2:vl,UserCog2Icon:vl,UserCogIcon:ZS,UserIcon:eI,UserMinus:KS,UserMinus2:yl,UserMinus2Icon:yl,UserMinusIcon:KS,UserPlus:XS,UserPlus2:_l,UserPlus2Icon:_l,UserPlusIcon:XS,UserRound:kl,UserRoundCheck:ml,UserRoundCheckIcon:ml,UserRoundCog:vl,UserRoundCogIcon:vl,UserRoundIcon:kl,UserRoundMinus:yl,UserRoundMinusIcon:yl,UserRoundPlus:_l,UserRoundPlusIcon:_l,UserRoundSearch:YS,UserRoundSearchIcon:YS,UserRoundX:gl,UserRoundXIcon:gl,UserSearch:QS,UserSearchIcon:QS,UserSquare:pl,UserSquare2:ul,UserSquare2Icon:ul,UserSquareIcon:pl,UserX:JS,UserX2:gl,UserX2Icon:gl,UserXIcon:JS,Users:tI,Users2:bl,Users2Icon:bl,UsersIcon:tI,UsersRound:bl,UsersRoundIcon:bl,Utensils:nI,UtensilsCrossed:aI,UtensilsCrossedIcon:aI,UtensilsIcon:nI,UtilityPole:sI,UtilityPoleIcon:sI,Variable:oI,VariableIcon:oI,Vegan:rI,VeganIcon:rI,VenetianMask:iI,VenetianMaskIcon:iI,Verified:Ai,VerifiedIcon:Ai,Vibrate:cI,VibrateIcon:cI,VibrateOff:lI,VibrateOffIcon:lI,Video:uI,VideoIcon:uI,VideoOff:dI,VideoOffIcon:dI,Videotape:pI,VideotapeIcon:pI,View:hI,ViewIcon:hI,Voicemail:fI,VoicemailIcon:fI,Volume:_I,Volume1:mI,Volume1Icon:mI,Volume2:vI,Volume2Icon:vI,VolumeIcon:_I,VolumeX:yI,VolumeXIcon:yI,Vote:gI,VoteIcon:gI,Wallet:wI,Wallet2:kI,Wallet2Icon:kI,WalletCards:bI,WalletCardsIcon:bI,WalletIcon:wI,Wallpaper:xI,WallpaperIcon:xI,Wand:CI,Wand2:MI,Wand2Icon:MI,WandIcon:CI,Warehouse:SI,WarehouseIcon:SI,Watch:II,WatchIcon:II,Waves:LI,WavesIcon:LI,Waypoints:$I,WaypointsIcon:$I,Webcam:AI,WebcamIcon:AI,Webhook:EI,WebhookIcon:EI,Weight:TI,WeightIcon:TI,Wheat:DI,WheatIcon:DI,WheatOff:PI,WheatOffIcon:PI,WholeWord:RI,WholeWordIcon:RI,Wifi:VI,WifiIcon:VI,WifiOff:OI,WifiOffIcon:OI,Wind:UI,WindIcon:UI,Wine:jI,WineIcon:jI,WineOff:FI,WineOffIcon:FI,Workflow:HI,WorkflowIcon:HI,WrapText:NI,WrapTextIcon:NI,Wrench:zI,WrenchIcon:zI,X:GI,XCircle:BI,XCircleIcon:BI,XIcon:GI,XOctagon:qI,XOctagonIcon:qI,XSquare:WI,XSquareIcon:WI,Youtube:ZI,YoutubeIcon:ZI,Zap:XI,ZapIcon:XI,ZapOff:KI,ZapOffIcon:KI,ZoomIn:YI,ZoomInIcon:YI,ZoomOut:QI,ZoomOutIcon:QI,icons:Dne},Symbol.toStringTag,{value:"Module"})),RT="-";function One(n){const e=Une(n),{conflictingClassGroups:a,conflictingClassGroupModifiers:s}=n;function o(i){const u=i.split(RT);return u[0]===""&&u.length!==1&&u.shift(),DH(u,e)||Vne(i)}function r(i,u){const h=a[i]||[];return u&&s[i]?[...h,...s[i]]:h}return{getClassGroupId:o,getConflictingClassGroupIds:r}}function DH(n,e){var i;if(n.length===0)return e.classGroupId;const a=n[0],s=e.nextPart.get(a),o=s?DH(n.slice(1),s):void 0;if(o)return o;if(e.validators.length===0)return;const r=n.join(RT);return(i=e.validators.find(({validator:u})=>u(r)))==null?void 0:i.classGroupId}const TV=/^\[(.+)\]$/;function Vne(n){if(TV.test(n)){const e=TV.exec(n)[1],a=e==null?void 0:e.substring(0,e.indexOf(":"));if(a)return"arbitrary.."+a}}function Une(n){const{theme:e,prefix:a}=n,s={nextPart:new Map,validators:[]};return jne(Object.entries(n.classGroups),a).forEach(([r,i])=>{sE(i,s,r,e)}),s}function sE(n,e,a,s){n.forEach(o=>{if(typeof o=="string"){const r=o===""?e:PV(e,o);r.classGroupId=a;return}if(typeof o=="function"){if(Fne(o)){sE(o(s),e,a,s);return}e.validators.push({validator:o,classGroupId:a});return}Object.entries(o).forEach(([r,i])=>{sE(i,PV(e,r),a,s)})})}function PV(n,e){let a=n;return e.split(RT).forEach(s=>{a.nextPart.has(s)||a.nextPart.set(s,{nextPart:new Map,validators:[]}),a=a.nextPart.get(s)}),a}function Fne(n){return n.isThemeGetter}function jne(n,e){return e?n.map(([a,s])=>{const o=s.map(r=>typeof r=="string"?e+r:typeof r=="object"?Object.fromEntries(Object.entries(r).map(([i,u])=>[e+i,u])):r);return[a,o]}):n}function Hne(n){if(n<1)return{get:()=>{},set:()=>{}};let e=0,a=new Map,s=new Map;function o(r,i){a.set(r,i),e++,e>n&&(e=0,s=a,a=new Map)}return{get(r){let i=a.get(r);if(i!==void 0)return i;if((i=s.get(r))!==void 0)return o(r,i),i},set(r,i){a.has(r)?a.set(r,i):o(r,i)}}}const RH="!";function Nne(n){const e=n.separator,a=e.length===1,s=e[0],o=e.length;return function(i){const u=[];let h=0,m=0,p;for(let D=0;Dm?p-m:void 0;return{modifiers:u,hasImportantModifier:x,baseClassName:w,maybePostfixModifierPosition:$}}}function zne(n){if(n.length<=1)return n;const e=[];let a=[];return n.forEach(s=>{s[0]==="["?(e.push(...a.sort(),s),a=[]):a.push(s)}),e.push(...a.sort()),e}function Bne(n){return{cache:Hne(n.cacheSize),splitModifiers:Nne(n),...One(n)}}const qne=/\s+/;function Wne(n,e){const{splitModifiers:a,getClassGroupId:s,getConflictingClassGroupIds:o}=e,r=new Set;return n.trim().split(qne).map(i=>{const{modifiers:u,hasImportantModifier:h,baseClassName:m,maybePostfixModifierPosition:p}=a(i);let b=s(p?m.substring(0,p):m),x=!!p;if(!b){if(!p)return{isTailwindClass:!1,originalClassName:i};if(b=s(m),!b)return{isTailwindClass:!1,originalClassName:i};x=!1}const w=zne(u).join(":");return{isTailwindClass:!0,modifierId:h?w+RH:w,classGroupId:b,originalClassName:i,hasPostfixModifier:x}}).reverse().filter(i=>{if(!i.isTailwindClass)return!0;const{modifierId:u,classGroupId:h,hasPostfixModifier:m}=i,p=u+h;return r.has(p)?!1:(r.add(p),o(h,m).forEach(b=>r.add(u+b)),!0)}).reverse().map(i=>i.originalClassName).join(" ")}function Gne(){let n=0,e,a,s="";for(;nb(p),n());return a=Bne(m),s=a.cache.get,o=a.cache.set,r=u,u(h)}function u(h){const m=s(h);if(m)return m;const p=Wne(h,a);return o(h,p),p}return function(){return r(Gne.apply(null,arguments))}}function Na(n){const e=a=>a[n]||[];return e.isThemeGetter=!0,e}const VH=/^\[(?:([a-z-]+):)?(.+)\]$/i,Kne=/^\d+\/\d+$/,Xne=new Set(["px","full","screen"]),Yne=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Qne=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Jne=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,ese=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,tse=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;function Wo(n){return $l(n)||Xne.has(n)||Kne.test(n)}function Cr(n){return Rc(n,"length",cse)}function $l(n){return!!n&&!Number.isNaN(Number(n))}function b1(n){return Rc(n,"number",$l)}function cd(n){return!!n&&Number.isInteger(Number(n))}function ase(n){return n.endsWith("%")&&$l(n.slice(0,-1))}function ta(n){return VH.test(n)}function Sr(n){return Yne.test(n)}const nse=new Set(["length","size","percentage"]);function sse(n){return Rc(n,nse,UH)}function ose(n){return Rc(n,"position",UH)}const rse=new Set(["image","url"]);function ise(n){return Rc(n,rse,use)}function lse(n){return Rc(n,"",dse)}function dd(){return!0}function Rc(n,e,a){const s=VH.exec(n);return s?s[1]?typeof e=="string"?s[1]===e:e.has(s[1]):a(s[2]):!1}function cse(n){return Qne.test(n)&&!Jne.test(n)}function UH(){return!1}function dse(n){return ese.test(n)}function use(n){return tse.test(n)}function pse(){const n=Na("colors"),e=Na("spacing"),a=Na("blur"),s=Na("brightness"),o=Na("borderColor"),r=Na("borderRadius"),i=Na("borderSpacing"),u=Na("borderWidth"),h=Na("contrast"),m=Na("grayscale"),p=Na("hueRotate"),b=Na("invert"),x=Na("gap"),w=Na("gradientColorStops"),$=Na("gradientColorStopPositions"),D=Na("inset"),V=Na("margin"),R=Na("opacity"),E=Na("padding"),P=Na("saturate"),S=Na("scale"),C=Na("sepia"),M=Na("skew"),g=Na("space"),v=Na("translate"),T=()=>["auto","contain","none"],j=()=>["auto","hidden","clip","visible","scroll"],B=()=>["auto",ta,e],oe=()=>[ta,e],be=()=>["",Wo,Cr],$e=()=>["auto",$l,ta],Le=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],de=()=>["solid","dashed","dotted","double","none"],J=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity","plus-lighter"],G=()=>["start","end","center","between","around","evenly","stretch"],ce=()=>["","0",ta],Ee=()=>["auto","avoid","all","avoid-page","page","left","right","column"],He=()=>[$l,b1],Ke=()=>[$l,ta];return{cacheSize:500,separator:":",theme:{colors:[dd],spacing:[Wo,Cr],blur:["none","",Sr,ta],brightness:He(),borderColor:[n],borderRadius:["none","","full",Sr,ta],borderSpacing:oe(),borderWidth:be(),contrast:He(),grayscale:ce(),hueRotate:Ke(),invert:ce(),gap:oe(),gradientColorStops:[n],gradientColorStopPositions:[ase,Cr],inset:B(),margin:B(),opacity:He(),padding:oe(),saturate:He(),scale:He(),sepia:ce(),skew:Ke(),space:oe(),translate:oe()},classGroups:{aspect:[{aspect:["auto","square","video",ta]}],container:["container"],columns:[{columns:[Sr]}],"break-after":[{"break-after":Ee()}],"break-before":[{"break-before":Ee()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...Le(),ta]}],overflow:[{overflow:j()}],"overflow-x":[{"overflow-x":j()}],"overflow-y":[{"overflow-y":j()}],overscroll:[{overscroll:T()}],"overscroll-x":[{"overscroll-x":T()}],"overscroll-y":[{"overscroll-y":T()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[D]}],"inset-x":[{"inset-x":[D]}],"inset-y":[{"inset-y":[D]}],start:[{start:[D]}],end:[{end:[D]}],top:[{top:[D]}],right:[{right:[D]}],bottom:[{bottom:[D]}],left:[{left:[D]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",cd,ta]}],basis:[{basis:B()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",ta]}],grow:[{grow:ce()}],shrink:[{shrink:ce()}],order:[{order:["first","last","none",cd,ta]}],"grid-cols":[{"grid-cols":[dd]}],"col-start-end":[{col:["auto",{span:["full",cd,ta]},ta]}],"col-start":[{"col-start":$e()}],"col-end":[{"col-end":$e()}],"grid-rows":[{"grid-rows":[dd]}],"row-start-end":[{row:["auto",{span:[cd,ta]},ta]}],"row-start":[{"row-start":$e()}],"row-end":[{"row-end":$e()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",ta]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",ta]}],gap:[{gap:[x]}],"gap-x":[{"gap-x":[x]}],"gap-y":[{"gap-y":[x]}],"justify-content":[{justify:["normal",...G()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...G(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...G(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[E]}],px:[{px:[E]}],py:[{py:[E]}],ps:[{ps:[E]}],pe:[{pe:[E]}],pt:[{pt:[E]}],pr:[{pr:[E]}],pb:[{pb:[E]}],pl:[{pl:[E]}],m:[{m:[V]}],mx:[{mx:[V]}],my:[{my:[V]}],ms:[{ms:[V]}],me:[{me:[V]}],mt:[{mt:[V]}],mr:[{mr:[V]}],mb:[{mb:[V]}],ml:[{ml:[V]}],"space-x":[{"space-x":[g]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[g]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",ta,e]}],"min-w":[{"min-w":[ta,e,"min","max","fit"]}],"max-w":[{"max-w":[ta,e,"none","full","min","max","fit","prose",{screen:[Sr]},Sr]}],h:[{h:[ta,e,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[ta,e,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[ta,e,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[ta,e,"auto","min","max","fit"]}],"font-size":[{text:["base",Sr,Cr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",b1]}],"font-family":[{font:[dd]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",ta]}],"line-clamp":[{"line-clamp":["none",$l,b1]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Wo,ta]}],"list-image":[{"list-image":["none",ta]}],"list-style-type":[{list:["none","disc","decimal",ta]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[n]}],"placeholder-opacity":[{"placeholder-opacity":[R]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[n]}],"text-opacity":[{"text-opacity":[R]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...de(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Wo,Cr]}],"underline-offset":[{"underline-offset":["auto",Wo,ta]}],"text-decoration-color":[{decoration:[n]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:oe()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ta]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ta]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[R]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...Le(),ose]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",sse]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},ise]}],"bg-color":[{bg:[n]}],"gradient-from-pos":[{from:[$]}],"gradient-via-pos":[{via:[$]}],"gradient-to-pos":[{to:[$]}],"gradient-from":[{from:[w]}],"gradient-via":[{via:[w]}],"gradient-to":[{to:[w]}],rounded:[{rounded:[r]}],"rounded-s":[{"rounded-s":[r]}],"rounded-e":[{"rounded-e":[r]}],"rounded-t":[{"rounded-t":[r]}],"rounded-r":[{"rounded-r":[r]}],"rounded-b":[{"rounded-b":[r]}],"rounded-l":[{"rounded-l":[r]}],"rounded-ss":[{"rounded-ss":[r]}],"rounded-se":[{"rounded-se":[r]}],"rounded-ee":[{"rounded-ee":[r]}],"rounded-es":[{"rounded-es":[r]}],"rounded-tl":[{"rounded-tl":[r]}],"rounded-tr":[{"rounded-tr":[r]}],"rounded-br":[{"rounded-br":[r]}],"rounded-bl":[{"rounded-bl":[r]}],"border-w":[{border:[u]}],"border-w-x":[{"border-x":[u]}],"border-w-y":[{"border-y":[u]}],"border-w-s":[{"border-s":[u]}],"border-w-e":[{"border-e":[u]}],"border-w-t":[{"border-t":[u]}],"border-w-r":[{"border-r":[u]}],"border-w-b":[{"border-b":[u]}],"border-w-l":[{"border-l":[u]}],"border-opacity":[{"border-opacity":[R]}],"border-style":[{border:[...de(),"hidden"]}],"divide-x":[{"divide-x":[u]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[u]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[R]}],"divide-style":[{divide:de()}],"border-color":[{border:[o]}],"border-color-x":[{"border-x":[o]}],"border-color-y":[{"border-y":[o]}],"border-color-t":[{"border-t":[o]}],"border-color-r":[{"border-r":[o]}],"border-color-b":[{"border-b":[o]}],"border-color-l":[{"border-l":[o]}],"divide-color":[{divide:[o]}],"outline-style":[{outline:["",...de()]}],"outline-offset":[{"outline-offset":[Wo,ta]}],"outline-w":[{outline:[Wo,Cr]}],"outline-color":[{outline:[n]}],"ring-w":[{ring:be()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[n]}],"ring-opacity":[{"ring-opacity":[R]}],"ring-offset-w":[{"ring-offset":[Wo,Cr]}],"ring-offset-color":[{"ring-offset":[n]}],shadow:[{shadow:["","inner","none",Sr,lse]}],"shadow-color":[{shadow:[dd]}],opacity:[{opacity:[R]}],"mix-blend":[{"mix-blend":J()}],"bg-blend":[{"bg-blend":J()}],filter:[{filter:["","none"]}],blur:[{blur:[a]}],brightness:[{brightness:[s]}],contrast:[{contrast:[h]}],"drop-shadow":[{"drop-shadow":["","none",Sr,ta]}],grayscale:[{grayscale:[m]}],"hue-rotate":[{"hue-rotate":[p]}],invert:[{invert:[b]}],saturate:[{saturate:[P]}],sepia:[{sepia:[C]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[a]}],"backdrop-brightness":[{"backdrop-brightness":[s]}],"backdrop-contrast":[{"backdrop-contrast":[h]}],"backdrop-grayscale":[{"backdrop-grayscale":[m]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[p]}],"backdrop-invert":[{"backdrop-invert":[b]}],"backdrop-opacity":[{"backdrop-opacity":[R]}],"backdrop-saturate":[{"backdrop-saturate":[P]}],"backdrop-sepia":[{"backdrop-sepia":[C]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",ta]}],duration:[{duration:Ke()}],ease:[{ease:["linear","in","out","in-out",ta]}],delay:[{delay:Ke()}],animate:[{animate:["none","spin","ping","pulse","bounce",ta]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[S]}],"scale-x":[{"scale-x":[S]}],"scale-y":[{"scale-y":[S]}],rotate:[{rotate:[cd,ta]}],"translate-x":[{"translate-x":[v]}],"translate-y":[{"translate-y":[v]}],"skew-x":[{"skew-x":[M]}],"skew-y":[{"skew-y":[M]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",ta]}],accent:[{accent:["auto",n]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ta]}],"caret-color":[{caret:[n]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":oe()}],"scroll-mx":[{"scroll-mx":oe()}],"scroll-my":[{"scroll-my":oe()}],"scroll-ms":[{"scroll-ms":oe()}],"scroll-me":[{"scroll-me":oe()}],"scroll-mt":[{"scroll-mt":oe()}],"scroll-mr":[{"scroll-mr":oe()}],"scroll-mb":[{"scroll-mb":oe()}],"scroll-ml":[{"scroll-ml":oe()}],"scroll-p":[{"scroll-p":oe()}],"scroll-px":[{"scroll-px":oe()}],"scroll-py":[{"scroll-py":oe()}],"scroll-ps":[{"scroll-ps":oe()}],"scroll-pe":[{"scroll-pe":oe()}],"scroll-pt":[{"scroll-pt":oe()}],"scroll-pr":[{"scroll-pr":oe()}],"scroll-pb":[{"scroll-pb":oe()}],"scroll-pl":[{"scroll-pl":oe()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ta]}],fill:[{fill:[n,"none"]}],"stroke-w":[{stroke:[Wo,Cr,b1]}],stroke:[{stroke:[n,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}}const At=Zne(pse),re=Ce({__name:"Lucide",props:{icon:{},title:{}},setup(n){const e=n,a=Ot(),s=ee(()=>At(["stroke-1.5 w-5 h-5",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(Da(Rne[e.icon]),{class:F(s.value)},null,8,["class"]))}}),hse={class:"flex","aria-label":"breadcrumb"},fse=Ce({__name:"Breadcrumb",props:{light:{type:Boolean}},setup(n){const e=Oj(),{light:a}=n;return St("breadcrumb",{light:a}),(s,o)=>(L(),U("nav",hse,[c("ol",{class:F(["flex items-center text-primary dark:text-slate-300",{"text-white/90":s.light}])},[(L(!0),U(ke,null,Fe(t(e).default&&t(e).default(),(r,i)=>(L(),ge(Da(r),{index:i},null,8,["index"]))),256))],2)]))}}),mse=Ce({__name:"Link",props:{to:{default:""},active:{type:Boolean,default:!1},index:{default:0}},setup(n){const{to:e,active:a,index:s}=n,o=xt("breadcrumb"),r=ee(()=>[s>0&&"relative ml-5 pl-0.5",o&&!o.light&&s>0&&"before:content-[''] before:w-[14px] before:h-[14px] before:bg-chevron-black before:transform before:rotate-[-90deg] before:bg-[length:100%] before:-ml-[1.125rem] before:absolute before:my-auto before:inset-y-0",o&&o.light&&s>0&&"before:content-[''] before:w-[14px] before:h-[14px] before:bg-chevron-white before:transform before:rotate-[-90deg] before:bg-[length:100%] before:-ml-[1.125rem] before:absolute before:my-auto before:inset-y-0",s>0&&"dark:before:bg-chevron-white",o&&!o.light&&a&&"text-slate-800 cursor-text dark:text-slate-400",o&&o.light&&a&&"text-white/70"]);return(i,u)=>{const h=Qt("RouterLink");return L(),U("li",{class:F(r.value)},[l(h,{to:e},{default:f(()=>[Lt(i.$slots,"default")]),_:3})],2)}}}),vse=Ce({__name:"Text",props:{active:{type:Boolean,default:!1},index:{default:0}},setup(n){const{active:e,index:a}=n,s=xt("breadcrumb"),o=ee(()=>[a>0&&"relative ml-5 pl-0.5",s&&!s.light&&a>0&&"before:content-[''] before:w-[14px] before:h-[14px] before:bg-chevron-black before:transform before:rotate-[-90deg] before:bg-[length:100%] before:-ml-[1.125rem] before:absolute before:my-auto before:inset-y-0",s&&s.light&&a>0&&"before:content-[''] before:w-[14px] before:h-[14px] before:bg-chevron-white before:transform before:rotate-[-90deg] before:bg-[length:100%] before:-ml-[1.125rem] before:absolute before:my-auto before:inset-y-0",a>0&&"dark:before:bg-chevron-white",s&&!s.light&&e&&"text-slate-800 cursor-text dark:text-slate-400",s&&s.light&&e&&"text-white/70"]);return(r,i)=>(L(),U("li",{class:F(o.value)},[Lt(r.$slots,"default")],2))}}),Y$=Object.assign({},fse,{Link:mse,Text:vse});var Ur=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function cu(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var _L={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */_L.exports;(function(n,e){(function(){var a,s="4.17.21",o=200,r="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",u="Invalid `variable` option passed into `_.template`",h="__lodash_hash_undefined__",m=500,p="__lodash_placeholder__",b=1,x=2,w=4,$=1,D=2,V=1,R=2,E=4,P=8,S=16,C=32,M=64,g=128,v=256,T=512,j=30,B="...",oe=800,be=16,$e=1,Le=2,de=3,J=1/0,G=9007199254740991,ce=17976931348623157e292,Ee=NaN,He=4294967295,Ke=He-1,pt=He>>>1,ut=[["ary",g],["bind",V],["bindKey",R],["curry",P],["curryRight",S],["flip",T],["partial",C],["partialRight",M],["rearg",v]],ft="[object Arguments]",kt="[object Array]",Ae="[object AsyncFunction]",Xe="[object Boolean]",ie="[object Date]",Y="[object DOMException]",ue="[object Error]",pe="[object Function]",H="[object GeneratorFunction]",N="[object Map]",Q="[object Number]",he="[object Null]",Se="[object Object]",Re="[object Promise]",Ze="[object Proxy]",ze="[object RegExp]",qe="[object Set]",Be="[object String]",lt="[object Symbol]",yt="[object Undefined]",it="[object WeakMap]",Pe="[object WeakSet]",Ue="[object ArrayBuffer]",ht="[object DataView]",Mt="[object Float32Array]",Et="[object Float64Array]",Jt="[object Int8Array]",ae="[object Int16Array]",W="[object Int32Array]",q="[object Uint8Array]",ve="[object Uint8ClampedArray]",te="[object Uint16Array]",ne="[object Uint32Array]",ye=/\b__p \+= '';/g,Ve=/\b(__p \+=) '' \+/g,We=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ga=/&(?:amp|lt|gt|quot|#39);/g,_t=/[&<>"']/g,Wt=RegExp(ga.source),oa=RegExp(_t.source),Oa=/<%-([\s\S]+?)%>/g,Cn=/<%([\s\S]+?)%>/g,ku=/<%=([\s\S]+?)%>/g,Bc=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ql=/^\w*$/,UB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,x9=/[\\^$.*+?()[\]{}|]/g,FB=RegExp(x9.source),M9=/^\s+/,jB=/\s/,HB=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,NB=/\{\n\/\* \[wrapped with (.+)\] \*/,zB=/,? & /,BB=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,qB=/[()=,{}\[\]\/\s]/,WB=/\\(\\)?/g,GB=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,OP=/\w*$/,ZB=/^[-+]0x[0-9a-f]+$/i,KB=/^0b[01]+$/i,XB=/^\[object .+?Constructor\]$/,YB=/^0o[0-7]+$/i,QB=/^(?:0|[1-9]\d*)$/,JB=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,bu=/($^)/,eq=/['\n\r\u2028\u2029\\]/g,wu="\\ud800-\\udfff",tq="\\u0300-\\u036f",aq="\\ufe20-\\ufe2f",nq="\\u20d0-\\u20ff",VP=tq+aq+nq,UP="\\u2700-\\u27bf",FP="a-z\\xdf-\\xf6\\xf8-\\xff",sq="\\xac\\xb1\\xd7\\xf7",oq="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",rq="\\u2000-\\u206f",iq=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",jP="A-Z\\xc0-\\xd6\\xd8-\\xde",HP="\\ufe0e\\ufe0f",NP=sq+oq+rq+iq,C9="['’]",lq="["+wu+"]",zP="["+NP+"]",xu="["+VP+"]",BP="\\d+",cq="["+UP+"]",qP="["+FP+"]",WP="[^"+wu+NP+BP+UP+FP+jP+"]",S9="\\ud83c[\\udffb-\\udfff]",dq="(?:"+xu+"|"+S9+")",GP="[^"+wu+"]",I9="(?:\\ud83c[\\udde6-\\uddff]){2}",L9="[\\ud800-\\udbff][\\udc00-\\udfff]",Wl="["+jP+"]",ZP="\\u200d",KP="(?:"+qP+"|"+WP+")",uq="(?:"+Wl+"|"+WP+")",XP="(?:"+C9+"(?:d|ll|m|re|s|t|ve))?",YP="(?:"+C9+"(?:D|LL|M|RE|S|T|VE))?",QP=dq+"?",JP="["+HP+"]?",pq="(?:"+ZP+"(?:"+[GP,I9,L9].join("|")+")"+JP+QP+")*",hq="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",fq="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",eD=JP+QP+pq,mq="(?:"+[cq,I9,L9].join("|")+")"+eD,vq="(?:"+[GP+xu+"?",xu,I9,L9,lq].join("|")+")",yq=RegExp(C9,"g"),_q=RegExp(xu,"g"),$9=RegExp(S9+"(?="+S9+")|"+vq+eD,"g"),gq=RegExp([Wl+"?"+qP+"+"+XP+"(?="+[zP,Wl,"$"].join("|")+")",uq+"+"+YP+"(?="+[zP,Wl+KP,"$"].join("|")+")",Wl+"?"+KP+"+"+XP,Wl+"+"+YP,fq,hq,BP,mq].join("|"),"g"),kq=RegExp("["+ZP+wu+VP+HP+"]"),bq=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,wq=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],xq=-1,Ha={};Ha[Mt]=Ha[Et]=Ha[Jt]=Ha[ae]=Ha[W]=Ha[q]=Ha[ve]=Ha[te]=Ha[ne]=!0,Ha[ft]=Ha[kt]=Ha[Ue]=Ha[Xe]=Ha[ht]=Ha[ie]=Ha[ue]=Ha[pe]=Ha[N]=Ha[Q]=Ha[Se]=Ha[ze]=Ha[qe]=Ha[Be]=Ha[it]=!1;var Va={};Va[ft]=Va[kt]=Va[Ue]=Va[ht]=Va[Xe]=Va[ie]=Va[Mt]=Va[Et]=Va[Jt]=Va[ae]=Va[W]=Va[N]=Va[Q]=Va[Se]=Va[ze]=Va[qe]=Va[Be]=Va[lt]=Va[q]=Va[ve]=Va[te]=Va[ne]=!0,Va[ue]=Va[pe]=Va[it]=!1;var Mq={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Cq={"&":"&","<":"<",">":">",'"':""","'":"'"},Sq={"&":"&","<":"<",">":">",""":'"',"'":"'"},Iq={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Lq=parseFloat,$q=parseInt,tD=typeof Ur=="object"&&Ur&&Ur.Object===Object&&Ur,Aq=typeof self=="object"&&self&&self.Object===Object&&self,Pn=tD||Aq||Function("return this")(),A9=e&&!e.nodeType&&e,ai=A9&&!0&&n&&!n.nodeType&&n,aD=ai&&ai.exports===A9,E9=aD&&tD.process,Ms=function(){try{var Te=ai&&ai.require&&ai.require("util").types;return Te||E9&&E9.binding&&E9.binding("util")}catch{}}(),nD=Ms&&Ms.isArrayBuffer,sD=Ms&&Ms.isDate,oD=Ms&&Ms.isMap,rD=Ms&&Ms.isRegExp,iD=Ms&&Ms.isSet,lD=Ms&&Ms.isTypedArray;function ds(Te,Ge,Ne){switch(Ne.length){case 0:return Te.call(Ge);case 1:return Te.call(Ge,Ne[0]);case 2:return Te.call(Ge,Ne[0],Ne[1]);case 3:return Te.call(Ge,Ne[0],Ne[1],Ne[2])}return Te.apply(Ge,Ne)}function Eq(Te,Ge,Ne,Ct){for(var Kt=-1,xa=Te==null?0:Te.length;++Kt-1}function T9(Te,Ge,Ne){for(var Ct=-1,Kt=Te==null?0:Te.length;++Ct-1;);return Ne}function vD(Te,Ge){for(var Ne=Te.length;Ne--&&Gl(Ge,Te[Ne],0)>-1;);return Ne}function jq(Te,Ge){for(var Ne=Te.length,Ct=0;Ne--;)Te[Ne]===Ge&&++Ct;return Ct}var Hq=O9(Mq),Nq=O9(Cq);function zq(Te){return"\\"+Iq[Te]}function Bq(Te,Ge){return Te==null?a:Te[Ge]}function Zl(Te){return kq.test(Te)}function qq(Te){return bq.test(Te)}function Wq(Te){for(var Ge,Ne=[];!(Ge=Te.next()).done;)Ne.push(Ge.value);return Ne}function j9(Te){var Ge=-1,Ne=Array(Te.size);return Te.forEach(function(Ct,Kt){Ne[++Ge]=[Kt,Ct]}),Ne}function yD(Te,Ge){return function(Ne){return Te(Ge(Ne))}}function fr(Te,Ge){for(var Ne=-1,Ct=Te.length,Kt=0,xa=[];++Ne-1}function PW(d,y){var I=this.__data__,z=Hu(I,d);return z<0?(++this.size,I.push([d,y])):I[z][1]=y,this}Oo.prototype.clear=$W,Oo.prototype.delete=AW,Oo.prototype.get=EW,Oo.prototype.has=TW,Oo.prototype.set=PW;function Vo(d){var y=-1,I=d==null?0:d.length;for(this.clear();++y=y?d:y)),d}function Ls(d,y,I,z,Z,le){var we,Ie=y&b,De=y&x,Ye=y&w;if(I&&(we=Z?I(d,z,Z,le):I(d)),we!==a)return we;if(!Ja(d))return d;var Qe=Xt(d);if(Qe){if(we=VG(d),!Ie)return Xn(d,we)}else{var st=jn(d),gt=st==pe||st==H;if(kr(d))return JD(d,Ie);if(st==Se||st==ft||gt&&!Z){if(we=De||gt?{}:_R(d),!Ie)return De?SG(d,KW(we,d)):CG(d,$D(we,d))}else{if(!Va[st])return Z?d:{};we=UG(d,st,Ie)}}le||(le=new Qs);var It=le.get(d);if(It)return It;le.set(d,we),GR(d)?d.forEach(function(Ht){we.add(Ls(Ht,y,I,Ht,d,le))}):qR(d)&&d.forEach(function(Ht,ca){we.set(ca,Ls(Ht,y,I,ca,d,le))});var jt=Ye?De?p$:u$:De?Qn:Sn,na=Qe?a:jt(d);return Cs(na||d,function(Ht,ca){na&&(ca=Ht,Ht=d[ca]),Yc(we,ca,Ls(Ht,y,I,ca,d,le))}),we}function XW(d){var y=Sn(d);return function(I){return AD(I,d,y)}}function AD(d,y,I){var z=I.length;if(d==null)return!z;for(d=Ra(d);z--;){var Z=I[z],le=y[Z],we=d[Z];if(we===a&&!(Z in d)||!le(we))return!1}return!0}function ED(d,y,I){if(typeof d!="function")throw new Ss(i);return sd(function(){d.apply(a,I)},y)}function Qc(d,y,I,z){var Z=-1,le=Mu,we=!0,Ie=d.length,De=[],Ye=y.length;if(!Ie)return De;I&&(y=Ka(y,us(I))),z?(le=T9,we=!1):y.length>=o&&(le=qc,we=!1,y=new oi(y));e:for(;++ZZ?0:Z+I),z=z===a||z>Z?Z:ea(z),z<0&&(z+=Z),z=I>z?0:KR(z);I0&&I(Ie)?y>1?Dn(Ie,y-1,I,z,Z):hr(Z,Ie):z||(Z[Z.length]=Ie)}return Z}var G9=oR(),DD=oR(!0);function uo(d,y){return d&&G9(d,y,Sn)}function Z9(d,y){return d&&DD(d,y,Sn)}function zu(d,y){return pr(y,function(I){return No(d[I])})}function ii(d,y){y=_r(y,d);for(var I=0,z=y.length;d!=null&&Iy}function JW(d,y){return d!=null&&Ia.call(d,y)}function eG(d,y){return d!=null&&y in Ra(d)}function tG(d,y,I){return d>=Fn(y,I)&&d=120&&Qe.length>=120)?new oi(we&&Qe):a}Qe=d[0];var st=-1,gt=Ie[0];e:for(;++st-1;)Ie!==d&&Du.call(Ie,De,1),Du.call(d,De,1);return d}function qD(d,y){for(var I=d?y.length:0,z=I-1;I--;){var Z=y[I];if(I==z||Z!==le){var le=Z;Ho(Z)?Du.call(d,Z,1):s$(d,Z)}}return d}function t$(d,y){return d+Vu(CD()*(y-d+1))}function fG(d,y,I,z){for(var Z=-1,le=bn(Ou((y-d)/(I||1)),0),we=Ne(le);le--;)we[z?le:++Z]=d,d+=I;return we}function a$(d,y){var I="";if(!d||y<1||y>G)return I;do y%2&&(I+=d),y=Vu(y/2),y&&(d+=d);while(y);return I}function ra(d,y){return g$(bR(d,y,Jn),d+"")}function mG(d){return LD(oc(d))}function vG(d,y){var I=oc(d);return e1(I,ri(y,0,I.length))}function td(d,y,I,z){if(!Ja(d))return d;y=_r(y,d);for(var Z=-1,le=y.length,we=le-1,Ie=d;Ie!=null&&++ZZ?0:Z+y),I=I>Z?Z:I,I<0&&(I+=Z),Z=y>I?0:I-y>>>0,y>>>=0;for(var le=Ne(Z);++z>>1,we=d[le];we!==null&&!hs(we)&&(I?we<=y:we=o){var Ye=y?null:AG(d);if(Ye)return Su(Ye);we=!1,Z=qc,De=new oi}else De=y?[]:Ie;e:for(;++z=z?d:$s(d,y,I)}var QD=iW||function(d){return Pn.clearTimeout(d)};function JD(d,y){if(y)return d.slice();var I=d.length,z=kD?kD(I):new d.constructor(I);return d.copy(z),z}function l$(d){var y=new d.constructor(d.byteLength);return new Tu(y).set(new Tu(d)),y}function bG(d,y){var I=y?l$(d.buffer):d.buffer;return new d.constructor(I,d.byteOffset,d.byteLength)}function wG(d){var y=new d.constructor(d.source,OP.exec(d));return y.lastIndex=d.lastIndex,y}function xG(d){return Xc?Ra(Xc.call(d)):{}}function eR(d,y){var I=y?l$(d.buffer):d.buffer;return new d.constructor(I,d.byteOffset,d.length)}function tR(d,y){if(d!==y){var I=d!==a,z=d===null,Z=d===d,le=hs(d),we=y!==a,Ie=y===null,De=y===y,Ye=hs(y);if(!Ie&&!Ye&&!le&&d>y||le&&we&&De&&!Ie&&!Ye||z&&we&&De||!I&&De||!Z)return 1;if(!z&&!le&&!Ye&&d=Ie)return De;var Ye=I[z];return De*(Ye=="desc"?-1:1)}}return d.index-y.index}function aR(d,y,I,z){for(var Z=-1,le=d.length,we=I.length,Ie=-1,De=y.length,Ye=bn(le-we,0),Qe=Ne(De+Ye),st=!z;++Ie1?I[Z-1]:a,we=Z>2?I[2]:a;for(le=d.length>3&&typeof le=="function"?(Z--,le):a,we&&Bn(I[0],I[1],we)&&(le=Z<3?a:le,Z=1),y=Ra(y);++z-1?Z[le?y[we]:we]:a}}function lR(d){return jo(function(y){var I=y.length,z=I,Z=Is.prototype.thru;for(d&&y.reverse();z--;){var le=y[z];if(typeof le!="function")throw new Ss(i);if(Z&&!we&&Qu(le)=="wrapper")var we=new Is([],!0)}for(z=we?z:I;++z1&&fa.reverse(),Qe&&DeIe))return!1;var Ye=le.get(d),Qe=le.get(y);if(Ye&&Qe)return Ye==y&&Qe==d;var st=-1,gt=!0,It=I&D?new oi:a;for(le.set(d,y),le.set(y,d);++st1?"& ":"")+y[z],y=y.join(I>2?", ":" "),d.replace(HB,`{ +/* [wrapped with `+y+`] */ +`)}function jG(d){return Xt(d)||di(d)||!!(xD&&d&&d[xD])}function Ho(d,y){var I=typeof d;return y=y??G,!!y&&(I=="number"||I!="symbol"&&QB.test(d))&&d>-1&&d%1==0&&d0){if(++y>=oe)return arguments[0]}else y=0;return d.apply(a,arguments)}}function e1(d,y){var I=-1,z=d.length,Z=z-1;for(y=y===a?z:y;++I1?d[y-1]:a;return I=typeof I=="function"?(d.pop(),I):a,PR(d,I)});function DR(d){var y=se(d);return y.__chain__=!0,y}function YZ(d,y){return y(d),d}function t1(d,y){return y(d)}var QZ=jo(function(d){var y=d.length,I=y?d[0]:0,z=this.__wrapped__,Z=function(le){return W9(le,d)};return y>1||this.__actions__.length||!(z instanceof ua)||!Ho(I)?this.thru(Z):(z=z.slice(I,+I+(y?1:0)),z.__actions__.push({func:t1,args:[Z],thisArg:a}),new Is(z,this.__chain__).thru(function(le){return y&&!le.length&&le.push(a),le}))});function JZ(){return DR(this)}function eK(){return new Is(this.value(),this.__chain__)}function tK(){this.__values__===a&&(this.__values__=ZR(this.value()));var d=this.__index__>=this.__values__.length,y=d?a:this.__values__[this.__index__++];return{done:d,value:y}}function aK(){return this}function nK(d){for(var y,I=this;I instanceof ju;){var z=IR(I);z.__index__=0,z.__values__=a,y?Z.__wrapped__=z:y=z;var Z=z;I=I.__wrapped__}return Z.__wrapped__=d,y}function sK(){var d=this.__wrapped__;if(d instanceof ua){var y=d;return this.__actions__.length&&(y=new ua(this)),y=y.reverse(),y.__actions__.push({func:t1,args:[k$],thisArg:a}),new Is(y,this.__chain__)}return this.thru(k$)}function oK(){return XD(this.__wrapped__,this.__actions__)}var rK=Gu(function(d,y,I){Ia.call(d,I)?++d[I]:Uo(d,I,1)});function iK(d,y,I){var z=Xt(d)?cD:YW;return I&&Bn(d,y,I)&&(y=a),z(d,Vt(y,3))}function lK(d,y){var I=Xt(d)?pr:PD;return I(d,Vt(y,3))}var cK=iR(LR),dK=iR($R);function uK(d,y){return Dn(a1(d,y),1)}function pK(d,y){return Dn(a1(d,y),J)}function hK(d,y,I){return I=I===a?1:ea(I),Dn(a1(d,y),I)}function RR(d,y){var I=Xt(d)?Cs:vr;return I(d,Vt(y,3))}function OR(d,y){var I=Xt(d)?Tq:TD;return I(d,Vt(y,3))}var fK=Gu(function(d,y,I){Ia.call(d,I)?d[I].push(y):Uo(d,I,[y])});function mK(d,y,I,z){d=Yn(d)?d:oc(d),I=I&&!z?ea(I):0;var Z=d.length;return I<0&&(I=bn(Z+I,0)),i1(d)?I<=Z&&d.indexOf(y,I)>-1:!!Z&&Gl(d,y,I)>-1}var vK=ra(function(d,y,I){var z=-1,Z=typeof y=="function",le=Yn(d)?Ne(d.length):[];return vr(d,function(we){le[++z]=Z?ds(y,we,I):Jc(we,y,I)}),le}),yK=Gu(function(d,y,I){Uo(d,I,y)});function a1(d,y){var I=Xt(d)?Ka:FD;return I(d,Vt(y,3))}function _K(d,y,I,z){return d==null?[]:(Xt(y)||(y=y==null?[]:[y]),I=z?a:I,Xt(I)||(I=I==null?[]:[I]),zD(d,y,I))}var gK=Gu(function(d,y,I){d[I?0:1].push(y)},function(){return[[],[]]});function kK(d,y,I){var z=Xt(d)?P9:hD,Z=arguments.length<3;return z(d,Vt(y,4),I,Z,vr)}function bK(d,y,I){var z=Xt(d)?Pq:hD,Z=arguments.length<3;return z(d,Vt(y,4),I,Z,TD)}function wK(d,y){var I=Xt(d)?pr:PD;return I(d,o1(Vt(y,3)))}function xK(d){var y=Xt(d)?LD:mG;return y(d)}function MK(d,y,I){(I?Bn(d,y,I):y===a)?y=1:y=ea(y);var z=Xt(d)?WW:vG;return z(d,y)}function CK(d){var y=Xt(d)?GW:_G;return y(d)}function SK(d){if(d==null)return 0;if(Yn(d))return i1(d)?Kl(d):d.length;var y=jn(d);return y==N||y==qe?d.size:Q9(d).length}function IK(d,y,I){var z=Xt(d)?D9:gG;return I&&Bn(d,y,I)&&(y=a),z(d,Vt(y,3))}var LK=ra(function(d,y){if(d==null)return[];var I=y.length;return I>1&&Bn(d,y[0],y[1])?y=[]:I>2&&Bn(y[0],y[1],y[2])&&(y=[y[0]]),zD(d,Dn(y,1),[])}),n1=lW||function(){return Pn.Date.now()};function $K(d,y){if(typeof y!="function")throw new Ss(i);return d=ea(d),function(){if(--d<1)return y.apply(this,arguments)}}function VR(d,y,I){return y=I?a:y,y=d&&y==null?d.length:y,Fo(d,g,a,a,a,a,y)}function UR(d,y){var I;if(typeof y!="function")throw new Ss(i);return d=ea(d),function(){return--d>0&&(I=y.apply(this,arguments)),d<=1&&(y=a),I}}var w$=ra(function(d,y,I){var z=V;if(I.length){var Z=fr(I,nc(w$));z|=C}return Fo(d,z,y,I,Z)}),FR=ra(function(d,y,I){var z=V|R;if(I.length){var Z=fr(I,nc(FR));z|=C}return Fo(y,z,d,I,Z)});function jR(d,y,I){y=I?a:y;var z=Fo(d,P,a,a,a,a,a,y);return z.placeholder=jR.placeholder,z}function HR(d,y,I){y=I?a:y;var z=Fo(d,S,a,a,a,a,a,y);return z.placeholder=HR.placeholder,z}function NR(d,y,I){var z,Z,le,we,Ie,De,Ye=0,Qe=!1,st=!1,gt=!0;if(typeof d!="function")throw new Ss(i);y=Es(y)||0,Ja(I)&&(Qe=!!I.leading,st="maxWait"in I,le=st?bn(Es(I.maxWait)||0,y):le,gt="trailing"in I?!!I.trailing:gt);function It(pn){var eo=z,Bo=Z;return z=Z=a,Ye=pn,we=d.apply(Bo,eo),we}function jt(pn){return Ye=pn,Ie=sd(ca,y),Qe?It(pn):we}function na(pn){var eo=pn-De,Bo=pn-Ye,iO=y-eo;return st?Fn(iO,le-Bo):iO}function Ht(pn){var eo=pn-De,Bo=pn-Ye;return De===a||eo>=y||eo<0||st&&Bo>=le}function ca(){var pn=n1();if(Ht(pn))return fa(pn);Ie=sd(ca,na(pn))}function fa(pn){return Ie=a,gt&&z?It(pn):(z=Z=a,we)}function fs(){Ie!==a&&QD(Ie),Ye=0,z=De=Z=Ie=a}function qn(){return Ie===a?we:fa(n1())}function ms(){var pn=n1(),eo=Ht(pn);if(z=arguments,Z=this,De=pn,eo){if(Ie===a)return jt(De);if(st)return QD(Ie),Ie=sd(ca,y),It(De)}return Ie===a&&(Ie=sd(ca,y)),we}return ms.cancel=fs,ms.flush=qn,ms}var AK=ra(function(d,y){return ED(d,1,y)}),EK=ra(function(d,y,I){return ED(d,Es(y)||0,I)});function TK(d){return Fo(d,T)}function s1(d,y){if(typeof d!="function"||y!=null&&typeof y!="function")throw new Ss(i);var I=function(){var z=arguments,Z=y?y.apply(this,z):z[0],le=I.cache;if(le.has(Z))return le.get(Z);var we=d.apply(this,z);return I.cache=le.set(Z,we)||le,we};return I.cache=new(s1.Cache||Vo),I}s1.Cache=Vo;function o1(d){if(typeof d!="function")throw new Ss(i);return function(){var y=arguments;switch(y.length){case 0:return!d.call(this);case 1:return!d.call(this,y[0]);case 2:return!d.call(this,y[0],y[1]);case 3:return!d.call(this,y[0],y[1],y[2])}return!d.apply(this,y)}}function PK(d){return UR(2,d)}var DK=kG(function(d,y){y=y.length==1&&Xt(y[0])?Ka(y[0],us(Vt())):Ka(Dn(y,1),us(Vt()));var I=y.length;return ra(function(z){for(var Z=-1,le=Fn(z.length,I);++Z=y}),di=OD(function(){return arguments}())?OD:function(d){return nn(d)&&Ia.call(d,"callee")&&!wD.call(d,"callee")},Xt=Ne.isArray,KK=nD?us(nD):nG;function Yn(d){return d!=null&&r1(d.length)&&!No(d)}function un(d){return nn(d)&&Yn(d)}function XK(d){return d===!0||d===!1||nn(d)&&zn(d)==Xe}var kr=dW||D$,YK=sD?us(sD):sG;function QK(d){return nn(d)&&d.nodeType===1&&!od(d)}function JK(d){if(d==null)return!0;if(Yn(d)&&(Xt(d)||typeof d=="string"||typeof d.splice=="function"||kr(d)||sc(d)||di(d)))return!d.length;var y=jn(d);if(y==N||y==qe)return!d.size;if(nd(d))return!Q9(d).length;for(var I in d)if(Ia.call(d,I))return!1;return!0}function eX(d,y){return ed(d,y)}function tX(d,y,I){I=typeof I=="function"?I:a;var z=I?I(d,y):a;return z===a?ed(d,y,a,I):!!z}function M$(d){if(!nn(d))return!1;var y=zn(d);return y==ue||y==Y||typeof d.message=="string"&&typeof d.name=="string"&&!od(d)}function aX(d){return typeof d=="number"&&MD(d)}function No(d){if(!Ja(d))return!1;var y=zn(d);return y==pe||y==H||y==Ae||y==Ze}function BR(d){return typeof d=="number"&&d==ea(d)}function r1(d){return typeof d=="number"&&d>-1&&d%1==0&&d<=G}function Ja(d){var y=typeof d;return d!=null&&(y=="object"||y=="function")}function nn(d){return d!=null&&typeof d=="object"}var qR=oD?us(oD):rG;function nX(d,y){return d===y||Y9(d,y,f$(y))}function sX(d,y,I){return I=typeof I=="function"?I:a,Y9(d,y,f$(y),I)}function oX(d){return WR(d)&&d!=+d}function rX(d){if(zG(d))throw new Kt(r);return VD(d)}function iX(d){return d===null}function lX(d){return d==null}function WR(d){return typeof d=="number"||nn(d)&&zn(d)==Q}function od(d){if(!nn(d)||zn(d)!=Se)return!1;var y=Pu(d);if(y===null)return!0;var I=Ia.call(y,"constructor")&&y.constructor;return typeof I=="function"&&I instanceof I&&$u.call(I)==sW}var C$=rD?us(rD):iG;function cX(d){return BR(d)&&d>=-G&&d<=G}var GR=iD?us(iD):lG;function i1(d){return typeof d=="string"||!Xt(d)&&nn(d)&&zn(d)==Be}function hs(d){return typeof d=="symbol"||nn(d)&&zn(d)==lt}var sc=lD?us(lD):cG;function dX(d){return d===a}function uX(d){return nn(d)&&jn(d)==it}function pX(d){return nn(d)&&zn(d)==Pe}var hX=Yu(J9),fX=Yu(function(d,y){return d<=y});function ZR(d){if(!d)return[];if(Yn(d))return i1(d)?Ys(d):Xn(d);if(Wc&&d[Wc])return Wq(d[Wc]());var y=jn(d),I=y==N?j9:y==qe?Su:oc;return I(d)}function zo(d){if(!d)return d===0?d:0;if(d=Es(d),d===J||d===-J){var y=d<0?-1:1;return y*ce}return d===d?d:0}function ea(d){var y=zo(d),I=y%1;return y===y?I?y-I:y:0}function KR(d){return d?ri(ea(d),0,He):0}function Es(d){if(typeof d=="number")return d;if(hs(d))return Ee;if(Ja(d)){var y=typeof d.valueOf=="function"?d.valueOf():d;d=Ja(y)?y+"":y}if(typeof d!="string")return d===0?d:+d;d=fD(d);var I=KB.test(d);return I||YB.test(d)?$q(d.slice(2),I?2:8):ZB.test(d)?Ee:+d}function XR(d){return po(d,Qn(d))}function mX(d){return d?ri(ea(d),-G,G):d===0?d:0}function Ma(d){return d==null?"":ps(d)}var vX=tc(function(d,y){if(nd(y)||Yn(y)){po(y,Sn(y),d);return}for(var I in y)Ia.call(y,I)&&Yc(d,I,y[I])}),YR=tc(function(d,y){po(y,Qn(y),d)}),l1=tc(function(d,y,I,z){po(y,Qn(y),d,z)}),yX=tc(function(d,y,I,z){po(y,Sn(y),d,z)}),_X=jo(W9);function gX(d,y){var I=ec(d);return y==null?I:$D(I,y)}var kX=ra(function(d,y){d=Ra(d);var I=-1,z=y.length,Z=z>2?y[2]:a;for(Z&&Bn(y[0],y[1],Z)&&(z=1);++I1),le}),po(d,p$(d),I),z&&(I=Ls(I,b|x|w,EG));for(var Z=y.length;Z--;)s$(I,y[Z]);return I});function UX(d,y){return JR(d,o1(Vt(y)))}var FX=jo(function(d,y){return d==null?{}:pG(d,y)});function JR(d,y){if(d==null)return{};var I=Ka(p$(d),function(z){return[z]});return y=Vt(y),BD(d,I,function(z,Z){return y(z,Z[0])})}function jX(d,y,I){y=_r(y,d);var z=-1,Z=y.length;for(Z||(Z=1,d=a);++zy){var z=d;d=y,y=z}if(I||d%1||y%1){var Z=CD();return Fn(d+Z*(y-d+Lq("1e-"+((Z+"").length-1))),y)}return t$(d,y)}var YX=ac(function(d,y,I){return y=y.toLowerCase(),d+(I?aO(y):y)});function aO(d){return L$(Ma(d).toLowerCase())}function nO(d){return d=Ma(d),d&&d.replace(JB,Hq).replace(_q,"")}function QX(d,y,I){d=Ma(d),y=ps(y);var z=d.length;I=I===a?z:ri(ea(I),0,z);var Z=I;return I-=y.length,I>=0&&d.slice(I,Z)==y}function JX(d){return d=Ma(d),d&&oa.test(d)?d.replace(_t,Nq):d}function eY(d){return d=Ma(d),d&&FB.test(d)?d.replace(x9,"\\$&"):d}var tY=ac(function(d,y,I){return d+(I?"-":"")+y.toLowerCase()}),aY=ac(function(d,y,I){return d+(I?" ":"")+y.toLowerCase()}),nY=rR("toLowerCase");function sY(d,y,I){d=Ma(d),y=ea(y);var z=y?Kl(d):0;if(!y||z>=y)return d;var Z=(y-z)/2;return Xu(Vu(Z),I)+d+Xu(Ou(Z),I)}function oY(d,y,I){d=Ma(d),y=ea(y);var z=y?Kl(d):0;return y&&z>>0,I?(d=Ma(d),d&&(typeof y=="string"||y!=null&&!C$(y))&&(y=ps(y),!y&&Zl(d))?gr(Ys(d),0,I):d.split(y,I)):[]}var pY=ac(function(d,y,I){return d+(I?" ":"")+L$(y)});function hY(d,y,I){return d=Ma(d),I=I==null?0:ri(ea(I),0,d.length),y=ps(y),d.slice(I,I+y.length)==y}function fY(d,y,I){var z=se.templateSettings;I&&Bn(d,y,I)&&(y=a),d=Ma(d),y=l1({},y,z,hR);var Z=l1({},y.imports,z.imports,hR),le=Sn(Z),we=F9(Z,le),Ie,De,Ye=0,Qe=y.interpolate||bu,st="__p += '",gt=H9((y.escape||bu).source+"|"+Qe.source+"|"+(Qe===ku?GB:bu).source+"|"+(y.evaluate||bu).source+"|$","g"),It="//# sourceURL="+(Ia.call(y,"sourceURL")?(y.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++xq+"]")+` +`;d.replace(gt,function(Ht,ca,fa,fs,qn,ms){return fa||(fa=fs),st+=d.slice(Ye,ms).replace(eq,zq),ca&&(Ie=!0,st+=`' + +__e(`+ca+`) + +'`),qn&&(De=!0,st+=`'; +`+qn+`; +__p += '`),fa&&(st+=`' + +((__t = (`+fa+`)) == null ? '' : __t) + +'`),Ye=ms+Ht.length,Ht}),st+=`'; +`;var jt=Ia.call(y,"variable")&&y.variable;if(!jt)st=`with (obj) { +`+st+` +} +`;else if(qB.test(jt))throw new Kt(u);st=(De?st.replace(ye,""):st).replace(Ve,"$1").replace(We,"$1;"),st="function("+(jt||"obj")+`) { +`+(jt?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(Ie?", __e = _.escape":"")+(De?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+st+`return __p +}`;var na=oO(function(){return xa(le,It+"return "+st).apply(a,we)});if(na.source=st,M$(na))throw na;return na}function mY(d){return Ma(d).toLowerCase()}function vY(d){return Ma(d).toUpperCase()}function yY(d,y,I){if(d=Ma(d),d&&(I||y===a))return fD(d);if(!d||!(y=ps(y)))return d;var z=Ys(d),Z=Ys(y),le=mD(z,Z),we=vD(z,Z)+1;return gr(z,le,we).join("")}function _Y(d,y,I){if(d=Ma(d),d&&(I||y===a))return d.slice(0,_D(d)+1);if(!d||!(y=ps(y)))return d;var z=Ys(d),Z=vD(z,Ys(y))+1;return gr(z,0,Z).join("")}function gY(d,y,I){if(d=Ma(d),d&&(I||y===a))return d.replace(M9,"");if(!d||!(y=ps(y)))return d;var z=Ys(d),Z=mD(z,Ys(y));return gr(z,Z).join("")}function kY(d,y){var I=j,z=B;if(Ja(y)){var Z="separator"in y?y.separator:Z;I="length"in y?ea(y.length):I,z="omission"in y?ps(y.omission):z}d=Ma(d);var le=d.length;if(Zl(d)){var we=Ys(d);le=we.length}if(I>=le)return d;var Ie=I-Kl(z);if(Ie<1)return z;var De=we?gr(we,0,Ie).join(""):d.slice(0,Ie);if(Z===a)return De+z;if(we&&(Ie+=De.length-Ie),C$(Z)){if(d.slice(Ie).search(Z)){var Ye,Qe=De;for(Z.global||(Z=H9(Z.source,Ma(OP.exec(Z))+"g")),Z.lastIndex=0;Ye=Z.exec(Qe);)var st=Ye.index;De=De.slice(0,st===a?Ie:st)}}else if(d.indexOf(ps(Z),Ie)!=Ie){var gt=De.lastIndexOf(Z);gt>-1&&(De=De.slice(0,gt))}return De+z}function bY(d){return d=Ma(d),d&&Wt.test(d)?d.replace(ga,Xq):d}var wY=ac(function(d,y,I){return d+(I?" ":"")+y.toUpperCase()}),L$=rR("toUpperCase");function sO(d,y,I){return d=Ma(d),y=I?a:y,y===a?qq(d)?Jq(d):Oq(d):d.match(y)||[]}var oO=ra(function(d,y){try{return ds(d,a,y)}catch(I){return M$(I)?I:new Kt(I)}}),xY=jo(function(d,y){return Cs(y,function(I){I=ho(I),Uo(d,I,w$(d[I],d))}),d});function MY(d){var y=d==null?0:d.length,I=Vt();return d=y?Ka(d,function(z){if(typeof z[1]!="function")throw new Ss(i);return[I(z[0]),z[1]]}):[],ra(function(z){for(var Z=-1;++ZG)return[];var I=He,z=Fn(d,He);y=Vt(y),d-=He;for(var Z=U9(z,y);++I0||y<0)?new ua(I):(d<0?I=I.takeRight(-d):d&&(I=I.drop(d)),y!==a&&(y=ea(y),I=y<0?I.dropRight(-y):I.take(y-d)),I)},ua.prototype.takeRightWhile=function(d){return this.reverse().takeWhile(d).reverse()},ua.prototype.toArray=function(){return this.take(He)},uo(ua.prototype,function(d,y){var I=/^(?:filter|find|map|reject)|While$/.test(y),z=/^(?:head|last)$/.test(y),Z=se[z?"take"+(y=="last"?"Right":""):y],le=z||/^find/.test(y);Z&&(se.prototype[y]=function(){var we=this.__wrapped__,Ie=z?[1]:arguments,De=we instanceof ua,Ye=Ie[0],Qe=De||Xt(we),st=function(ca){var fa=Z.apply(se,hr([ca],Ie));return z&>?fa[0]:fa};Qe&&I&&typeof Ye=="function"&&Ye.length!=1&&(De=Qe=!1);var gt=this.__chain__,It=!!this.__actions__.length,jt=le&&!gt,na=De&&!It;if(!le&&Qe){we=na?we:new ua(this);var Ht=d.apply(we,Ie);return Ht.__actions__.push({func:t1,args:[st],thisArg:a}),new Is(Ht,gt)}return jt&&na?d.apply(this,Ie):(Ht=this.thru(st),jt?z?Ht.value()[0]:Ht.value():Ht)})}),Cs(["pop","push","shift","sort","splice","unshift"],function(d){var y=Iu[d],I=/^(?:push|sort|unshift)$/.test(d)?"tap":"thru",z=/^(?:pop|shift)$/.test(d);se.prototype[d]=function(){var Z=arguments;if(z&&!this.__chain__){var le=this.value();return y.apply(Xt(le)?le:[],Z)}return this[I](function(we){return y.apply(Xt(we)?we:[],Z)})}}),uo(ua.prototype,function(d,y){var I=se[y];if(I){var z=I.name+"";Ia.call(Jl,z)||(Jl[z]=[]),Jl[z].push({name:y,func:I})}}),Jl[Zu(a,R).name]=[{name:"wrapper",func:a}],ua.prototype.clone=bW,ua.prototype.reverse=wW,ua.prototype.value=xW,se.prototype.at=QZ,se.prototype.chain=JZ,se.prototype.commit=eK,se.prototype.next=tK,se.prototype.plant=nK,se.prototype.reverse=sK,se.prototype.toJSON=se.prototype.valueOf=se.prototype.value=oK,se.prototype.first=se.prototype.head,Wc&&(se.prototype[Wc]=aK),se},Xl=eW();ai?((ai.exports=Xl)._=Xl,A9._=Xl):Pn._=Xl}).call(Ur)})(_L,_L.exports);var ma=_L.exports;const Pt=cu(ma);let yse=Symbol("headlessui.useid"),_se=0;function Vn(){return xt(yse,()=>`${++_se}`)()}function rt(n){var e;if(n==null||n.value==null)return null;let a=(e=n.value.$el)!=null?e:n.value;return a instanceof Node?a:null}function en(n,e,...a){if(n in e){let o=e[n];return typeof o=="function"?o(...a):o}let s=new Error(`Tried to handle "${n}" but there is no handler defined. Only defined handlers are: ${Object.keys(e).map(o=>`"${o}"`).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(s,en),s}var gse=Object.defineProperty,kse=(n,e,a)=>e in n?gse(n,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):n[e]=a,DV=(n,e,a)=>(kse(n,typeof e!="symbol"?e+"":e,a),a);let bse=class{constructor(){DV(this,"current",this.detect()),DV(this,"currentId",0)}set(e){this.current!==e&&(this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current==="server"}get isClient(){return this.current==="client"}detect(){return typeof window>"u"||typeof document>"u"?"server":"client"}},du=new bse;function Ws(n){if(du.isServer)return null;if(n instanceof Node)return n.ownerDocument;if(n!=null&&n.hasOwnProperty("value")){let e=rt(n);if(e)return e.ownerDocument}return document}let oE=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map(n=>`${n}:not([tabindex='-1'])`).join(",");var Ea=(n=>(n[n.First=1]="First",n[n.Previous=2]="Previous",n[n.Next=4]="Next",n[n.Last=8]="Last",n[n.WrapAround=16]="WrapAround",n[n.NoScroll=32]="NoScroll",n))(Ea||{}),Jo=(n=>(n[n.Error=0]="Error",n[n.Overflow=1]="Overflow",n[n.Success=2]="Success",n[n.Underflow=3]="Underflow",n))(Jo||{}),wse=(n=>(n[n.Previous=-1]="Previous",n[n.Next=1]="Next",n))(wse||{});function uu(n=document.body){return n==null?[]:Array.from(n.querySelectorAll(oE)).sort((e,a)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(a.tabIndex||Number.MAX_SAFE_INTEGER)))}var YL=(n=>(n[n.Strict=0]="Strict",n[n.Loose=1]="Loose",n))(YL||{});function QL(n,e=0){var a;return n===((a=Ws(n))==null?void 0:a.body)?!1:en(e,{0(){return n.matches(oE)},1(){let s=n;for(;s!==null;){if(s.matches(oE))return!0;s=s.parentElement}return!1}})}function FH(n){let e=Ws(n);En(()=>{e&&!QL(e.activeElement,0)&&zr(n)})}var xse=(n=>(n[n.Keyboard=0]="Keyboard",n[n.Mouse=1]="Mouse",n))(xse||{});typeof window<"u"&&typeof document<"u"&&(document.addEventListener("keydown",n=>{n.metaKey||n.altKey||n.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible="")},!0),document.addEventListener("click",n=>{n.detail===1?delete document.documentElement.dataset.headlessuiFocusVisible:n.detail===0&&(document.documentElement.dataset.headlessuiFocusVisible="")},!0));function zr(n){n==null||n.focus({preventScroll:!0})}let Mse=["textarea","input"].join(",");function Cse(n){var e,a;return(a=(e=n==null?void 0:n.matches)==null?void 0:e.call(n,Mse))!=null?a:!1}function Cl(n,e=a=>a){return n.slice().sort((a,s)=>{let o=e(a),r=e(s);if(o===null||r===null)return 0;let i=o.compareDocumentPosition(r);return i&Node.DOCUMENT_POSITION_FOLLOWING?-1:i&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function Sse(n,e){return Ln(uu(),e,{relativeTo:n})}function Ln(n,e,{sorted:a=!0,relativeTo:s=null,skipElements:o=[]}={}){var r;let i=(r=Array.isArray(n)?n.length>0?n[0].ownerDocument:document:n==null?void 0:n.ownerDocument)!=null?r:document,u=Array.isArray(n)?a?Cl(n):n:uu(n);o.length>0&&u.length>1&&(u=u.filter($=>!o.includes($))),s=s??i.activeElement;let h=(()=>{if(e&5)return 1;if(e&10)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),m=(()=>{if(e&1)return 0;if(e&2)return Math.max(0,u.indexOf(s))-1;if(e&4)return Math.max(0,u.indexOf(s))+1;if(e&8)return u.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),p=e&32?{preventScroll:!0}:{},b=0,x=u.length,w;do{if(b>=x||b+x<=0)return 0;let $=m+b;if(e&16)$=($+x)%x;else{if($<0)return 3;if($>=x)return 1}w=u[$],w==null||w.focus(p),b+=h}while(w!==i.activeElement);return e&6&&Cse(w)&&w.select(),2}function jH(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}function Ise(){return/Android/gi.test(window.navigator.userAgent)}function Lse(){return jH()||Ise()}function w1(n,e,a){du.isServer||yn(s=>{document.addEventListener(n,e,a),s(()=>document.removeEventListener(n,e,a))})}function HH(n,e,a){du.isServer||yn(s=>{window.addEventListener(n,e,a),s(()=>window.removeEventListener(n,e,a))})}function OT(n,e,a=ee(()=>!0)){function s(r,i){if(!a.value||r.defaultPrevented)return;let u=i(r);if(u===null||!u.getRootNode().contains(u))return;let h=function m(p){return typeof p=="function"?m(p()):Array.isArray(p)||p instanceof Set?p:[p]}(n);for(let m of h){if(m===null)continue;let p=m instanceof HTMLElement?m:rt(m);if(p!=null&&p.contains(u)||r.composed&&r.composedPath().includes(p))return}return!QL(u,YL.Loose)&&u.tabIndex!==-1&&r.preventDefault(),e(r,u)}let o=O(null);w1("pointerdown",r=>{var i,u;a.value&&(o.value=((u=(i=r.composedPath)==null?void 0:i.call(r))==null?void 0:u[0])||r.target)},!0),w1("mousedown",r=>{var i,u;a.value&&(o.value=((u=(i=r.composedPath)==null?void 0:i.call(r))==null?void 0:u[0])||r.target)},!0),w1("click",r=>{Lse()||o.value&&(s(r,()=>o.value),o.value=null)},!0),w1("touchend",r=>s(r,()=>r.target instanceof HTMLElement?r.target:null),!0),HH("blur",r=>s(r,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}function RV(n,e){if(n)return n;let a=e??"button";if(typeof a=="string"&&a.toLowerCase()==="button")return"button"}function JL(n,e){let a=O(RV(n.value.type,n.value.as));return at(()=>{a.value=RV(n.value.type,n.value.as)}),yn(()=>{var s;a.value||rt(e)&&rt(e)instanceof HTMLButtonElement&&!((s=rt(e))!=null&&s.hasAttribute("type"))&&(a.value="button")}),a}function OV(n){return[n.screenX,n.screenY]}function $se(){let n=O([-1,-1]);return{wasMoved(e){let a=OV(e);return n.value[0]===a[0]&&n.value[1]===a[1]?!1:(n.value=a,!0)},update(e){n.value=OV(e)}}}function Ase({container:n,accept:e,walk:a,enabled:s}){yn(()=>{let o=n.value;if(!o||s!==void 0&&!s.value)return;let r=Ws(n);if(!r)return;let i=Object.assign(h=>e(h),{acceptNode:e}),u=r.createTreeWalker(o,NodeFilter.SHOW_ELEMENT,i,!1);for(;u.nextNode();)a(u.currentNode)})}var Bs=(n=>(n[n.None=0]="None",n[n.RenderStrategy=1]="RenderStrategy",n[n.Static=2]="Static",n))(Bs||{}),jr=(n=>(n[n.Unmount=0]="Unmount",n[n.Hidden=1]="Hidden",n))(jr||{});function ja({visible:n=!0,features:e=0,ourProps:a,theirProps:s,...o}){var r;let i=zH(s,a),u=Object.assign(o,{props:i});if(n||e&2&&i.static)return Q$(u);if(e&1){let h=(r=i.unmount)==null||r?0:1;return en(h,{0(){return null},1(){return Q$({...o,props:{...i,hidden:!0,style:{display:"none"}}})}})}return Q$(u)}function Q$({props:n,attrs:e,slots:a,slot:s,name:o}){var r,i;let{as:u,...h}=VT(n,["unmount","static"]),m=(r=a.default)==null?void 0:r.call(a,s),p={};if(s){let b=!1,x=[];for(let[w,$]of Object.entries(s))typeof $=="boolean"&&(b=!0),$===!0&&x.push(w);b&&(p["data-headlessui-state"]=x.join(" "))}if(u==="template"){if(m=NH(m??[]),Object.keys(h).length>0||Object.keys(e).length>0){let[b,...x]=m??[];if(!Ese(b)||x.length>0)throw new Error(['Passing props on "template"!',"",`The current component <${o} /> is rendering a "template".`,"However we need to passthrough the following props:",Object.keys(h).concat(Object.keys(e)).map(D=>D.trim()).filter((D,V,R)=>R.indexOf(D)===V).sort((D,V)=>D.localeCompare(V)).map(D=>` - ${D}`).join(` +`),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "template".',"Render a single element as the child so that we can forward the props onto that element."].map(D=>` - ${D}`).join(` +`)].join(` +`));let w=zH((i=b.props)!=null?i:{},h,p),$=nr(b,w,!0);for(let D in w)D.startsWith("on")&&($.props||($.props={}),$.props[D]=w[D]);return $}return Array.isArray(m)&&m.length===1?m[0]:m}return ya(u,Object.assign({},h,p),{default:()=>m})}function NH(n){return n.flatMap(e=>e.type===ke?NH(e.children):[e])}function zH(...n){if(n.length===0)return{};if(n.length===1)return n[0];let e={},a={};for(let s of n)for(let o in s)o.startsWith("on")&&typeof s[o]=="function"?(a[o]!=null||(a[o]=[]),a[o].push(s[o])):e[o]=s[o];if(e.disabled||e["aria-disabled"])return Object.assign(e,Object.fromEntries(Object.keys(a).map(s=>[s,void 0])));for(let s in a)Object.assign(e,{[s](o,...r){let i=a[s];for(let u of i){if(o instanceof Event&&o.defaultPrevented)return;u(o,...r)}}});return e}function VT(n,e=[]){let a=Object.assign({},n);for(let s of e)s in a&&delete a[s];return a}function Ese(n){return n==null?!1:typeof n.type=="string"||typeof n.type=="object"||typeof n.type=="function"}var Zr=(n=>(n[n.None=1]="None",n[n.Focusable=2]="Focusable",n[n.Hidden=4]="Hidden",n))(Zr||{});let Kr=Ce({name:"Hidden",props:{as:{type:[Object,String],default:"div"},features:{type:Number,default:1}},setup(n,{slots:e,attrs:a}){return()=>{var s;let{features:o,...r}=n,i={"aria-hidden":(o&2)===2?!0:(s=r["aria-hidden"])!=null?s:void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...(o&4)===4&&(o&2)!==2&&{display:"none"}}};return ja({ourProps:i,theirProps:r,slot:{},attrs:a,slots:e,name:"Hidden"})}}}),BH=Symbol("Context");var Wa=(n=>(n[n.Open=1]="Open",n[n.Closed=2]="Closed",n[n.Closing=4]="Closing",n[n.Opening=8]="Opening",n))(Wa||{});function Tse(){return Oc()!==null}function Oc(){return xt(BH,null)}function e9(n){St(BH,n)}var sa=(n=>(n.Space=" ",n.Enter="Enter",n.Escape="Escape",n.Backspace="Backspace",n.Delete="Delete",n.ArrowLeft="ArrowLeft",n.ArrowUp="ArrowUp",n.ArrowRight="ArrowRight",n.ArrowDown="ArrowDown",n.Home="Home",n.End="End",n.PageUp="PageUp",n.PageDown="PageDown",n.Tab="Tab",n))(sa||{});function Pse(n){function e(){document.readyState!=="loading"&&(n(),document.removeEventListener("DOMContentLoaded",e))}typeof window<"u"&&typeof document<"u"&&(document.addEventListener("DOMContentLoaded",e),e())}let Sl=[];Pse(()=>{function n(e){e.target instanceof HTMLElement&&e.target!==document.body&&Sl[0]!==e.target&&(Sl.unshift(e.target),Sl=Sl.filter(a=>a!=null&&a.isConnected),Sl.splice(10))}window.addEventListener("click",n,{capture:!0}),window.addEventListener("mousedown",n,{capture:!0}),window.addEventListener("focus",n,{capture:!0}),document.body.addEventListener("click",n,{capture:!0}),document.body.addEventListener("mousedown",n,{capture:!0}),document.body.addEventListener("focus",n,{capture:!0})});function Dse(n){throw new Error("Unexpected object: "+n)}var _s=(n=>(n[n.First=0]="First",n[n.Previous=1]="Previous",n[n.Next=2]="Next",n[n.Last=3]="Last",n[n.Specific=4]="Specific",n[n.Nothing=5]="Nothing",n))(_s||{});function Rse(n,e){let a=e.resolveItems();if(a.length<=0)return null;let s=e.resolveActiveIndex(),o=s??-1;switch(n.focus){case 0:{for(let r=0;r=0;--r)if(!e.resolveDisabled(a[r],r,a))return r;return s}case 2:{for(let r=o+1;r=0;--r)if(!e.resolveDisabled(a[r],r,a))return r;return s}case 4:{for(let r=0;rsetTimeout(()=>{throw e}))}function pu(){let n=[],e={addEventListener(a,s,o,r){return a.addEventListener(s,o,r),e.add(()=>a.removeEventListener(s,o,r))},requestAnimationFrame(...a){let s=requestAnimationFrame(...a);e.add(()=>cancelAnimationFrame(s))},nextFrame(...a){e.requestAnimationFrame(()=>{e.requestAnimationFrame(...a)})},setTimeout(...a){let s=setTimeout(...a);e.add(()=>clearTimeout(s))},microTask(...a){let s={current:!0};return t9(()=>{s.current&&a[0]()}),e.add(()=>{s.current=!1})},style(a,s,o){let r=a.style.getPropertyValue(s);return Object.assign(a.style,{[s]:o}),this.add(()=>{Object.assign(a.style,{[s]:r})})},group(a){let s=pu();return a(s),this.add(()=>s.dispose())},add(a){return n.push(a),()=>{let s=n.indexOf(a);if(s>=0)for(let o of n.splice(s,1))o()}},dispose(){for(let a of n.splice(0))a()}};return e}function UT(n,e,a,s){du.isServer||yn(o=>{n=n??window,n.addEventListener(e,a,s),o(()=>n.removeEventListener(e,a,s))})}var gs=(n=>(n[n.Forwards=0]="Forwards",n[n.Backwards=1]="Backwards",n))(gs||{});function FT(){let n=O(0);return HH("keydown",e=>{e.key==="Tab"&&(n.value=e.shiftKey?1:0)}),n}function qH(n){if(!n)return new Set;if(typeof n=="function")return new Set(n());let e=new Set;for(let a of n.value){let s=rt(a);s instanceof HTMLElement&&e.add(s)}return e}var WH=(n=>(n[n.None=1]="None",n[n.InitialFocus=2]="InitialFocus",n[n.TabLock=4]="TabLock",n[n.FocusLock=8]="FocusLock",n[n.RestoreFocus=16]="RestoreFocus",n[n.All=30]="All",n))(WH||{});let ud=Object.assign(Ce({name:"FocusTrap",props:{as:{type:[Object,String],default:"div"},initialFocus:{type:Object,default:null},features:{type:Number,default:30},containers:{type:[Object,Function],default:O(new Set)}},inheritAttrs:!1,setup(n,{attrs:e,slots:a,expose:s}){let o=O(null);s({el:o,$el:o});let r=ee(()=>Ws(o)),i=O(!1);at(()=>i.value=!0),rn(()=>i.value=!1),Vse({ownerDocument:r},ee(()=>i.value&&!!(n.features&16)));let u=Use({ownerDocument:r,container:o,initialFocus:ee(()=>n.initialFocus)},ee(()=>i.value&&!!(n.features&2)));Fse({ownerDocument:r,container:o,containers:n.containers,previousActiveElement:u},ee(()=>i.value&&!!(n.features&8)));let h=FT();function m(w){let $=rt(o);$&&(D=>D())(()=>{en(h.value,{[gs.Forwards]:()=>{Ln($,Ea.First,{skipElements:[w.relatedTarget]})},[gs.Backwards]:()=>{Ln($,Ea.Last,{skipElements:[w.relatedTarget]})}})})}let p=O(!1);function b(w){w.key==="Tab"&&(p.value=!0,requestAnimationFrame(()=>{p.value=!1}))}function x(w){if(!i.value)return;let $=qH(n.containers);rt(o)instanceof HTMLElement&&$.add(rt(o));let D=w.relatedTarget;D instanceof HTMLElement&&D.dataset.headlessuiFocusGuard!=="true"&&(GH($,D)||(p.value?Ln(rt(o),en(h.value,{[gs.Forwards]:()=>Ea.Next,[gs.Backwards]:()=>Ea.Previous})|Ea.WrapAround,{relativeTo:w.target}):w.target instanceof HTMLElement&&zr(w.target)))}return()=>{let w={},$={ref:o,onKeydown:b,onFocusout:x},{features:D,initialFocus:V,containers:R,...E}=n;return ya(ke,[!!(D&4)&&ya(Kr,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:m,features:Zr.Focusable}),ja({ourProps:$,theirProps:{...e,...E},slot:w,attrs:e,slots:a,name:"FocusTrap"}),!!(D&4)&&ya(Kr,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:m,features:Zr.Focusable})])}}}),{features:WH});function Ose(n){let e=O(Sl.slice());return dt([n],([a],[s])=>{s===!0&&a===!1?t9(()=>{e.value.splice(0)}):s===!1&&a===!0&&(e.value=Sl.slice())},{flush:"post"}),()=>{var a;return(a=e.value.find(s=>s!=null&&s.isConnected))!=null?a:null}}function Vse({ownerDocument:n},e){let a=Ose(e);at(()=>{yn(()=>{var s,o;e.value||((s=n.value)==null?void 0:s.activeElement)===((o=n.value)==null?void 0:o.body)&&zr(a())},{flush:"post"})}),rn(()=>{e.value&&zr(a())})}function Use({ownerDocument:n,container:e,initialFocus:a},s){let o=O(null),r=O(!1);return at(()=>r.value=!0),rn(()=>r.value=!1),at(()=>{dt([e,a,s],(i,u)=>{if(i.every((m,p)=>(u==null?void 0:u[p])===m)||!s.value)return;let h=rt(e);h&&t9(()=>{var m,p;if(!r.value)return;let b=rt(a),x=(m=n.value)==null?void 0:m.activeElement;if(b){if(b===x){o.value=x;return}}else if(h.contains(x)){o.value=x;return}b?zr(b):Ln(h,Ea.First|Ea.NoScroll)===Jo.Error&&console.warn("There are no focusable elements inside the "),o.value=(p=n.value)==null?void 0:p.activeElement})},{immediate:!0,flush:"post"})}),o}function Fse({ownerDocument:n,container:e,containers:a,previousActiveElement:s},o){var r;UT((r=n.value)==null?void 0:r.defaultView,"focus",i=>{if(!o.value)return;let u=qH(a);rt(e)instanceof HTMLElement&&u.add(rt(e));let h=s.value;if(!h)return;let m=i.target;m&&m instanceof HTMLElement?GH(u,m)?(s.value=m,zr(m)):(i.preventDefault(),i.stopPropagation(),zr(h)):zr(s.value)},!0)}function GH(n,e){for(let a of n)if(a.contains(e))return!0;return!1}function jse(n){let e=UL(n.getSnapshot());return rn(n.subscribe(()=>{e.value=n.getSnapshot()})),e}function Hse(n,e){let a=n(),s=new Set;return{getSnapshot(){return a},subscribe(o){return s.add(o),()=>s.delete(o)},dispatch(o,...r){let i=e[o].call(a,...r);i&&(a=i,s.forEach(u=>u()))}}}function Nse(){let n;return{before({doc:e}){var a;let s=e.documentElement;n=((a=e.defaultView)!=null?a:window).innerWidth-s.clientWidth},after({doc:e,d:a}){let s=e.documentElement,o=s.clientWidth-s.offsetWidth,r=n-o;a.style(s,"paddingRight",`${r}px`)}}}function zse(){return jH()?{before({doc:n,d:e,meta:a}){function s(o){return a.containers.flatMap(r=>r()).some(r=>r.contains(o))}e.microTask(()=>{var o;if(window.getComputedStyle(n.documentElement).scrollBehavior!=="auto"){let u=pu();u.style(n.documentElement,"scrollBehavior","auto"),e.add(()=>e.microTask(()=>u.dispose()))}let r=(o=window.scrollY)!=null?o:window.pageYOffset,i=null;e.addEventListener(n,"click",u=>{if(u.target instanceof HTMLElement)try{let h=u.target.closest("a");if(!h)return;let{hash:m}=new URL(h.href),p=n.querySelector(m);p&&!s(p)&&(i=p)}catch{}},!0),e.addEventListener(n,"touchstart",u=>{if(u.target instanceof HTMLElement)if(s(u.target)){let h=u.target;for(;h.parentElement&&s(h.parentElement);)h=h.parentElement;e.style(h,"overscrollBehavior","contain")}else e.style(u.target,"touchAction","none")}),e.addEventListener(n,"touchmove",u=>{if(u.target instanceof HTMLElement)if(s(u.target)){let h=u.target;for(;h.parentElement&&h.dataset.headlessuiPortal!==""&&!(h.scrollHeight>h.clientHeight||h.scrollWidth>h.clientWidth);)h=h.parentElement;h.dataset.headlessuiPortal===""&&u.preventDefault()}else u.preventDefault()},{passive:!1}),e.add(()=>{var u;let h=(u=window.scrollY)!=null?u:window.pageYOffset;r!==h&&window.scrollTo(0,r),i&&i.isConnected&&(i.scrollIntoView({block:"nearest"}),i=null)})})}}:{}}function Bse(){return{before({doc:n,d:e}){e.style(n.documentElement,"overflow","hidden")}}}function qse(n){let e={};for(let a of n)Object.assign(e,a(e));return e}let Al=Hse(()=>new Map,{PUSH(n,e){var a;let s=(a=this.get(n))!=null?a:{doc:n,count:0,d:pu(),meta:new Set};return s.count++,s.meta.add(e),this.set(n,s),this},POP(n,e){let a=this.get(n);return a&&(a.count--,a.meta.delete(e)),this},SCROLL_PREVENT({doc:n,d:e,meta:a}){let s={doc:n,d:e,meta:qse(a)},o=[zse(),Nse(),Bse()];o.forEach(({before:r})=>r==null?void 0:r(s)),o.forEach(({after:r})=>r==null?void 0:r(s))},SCROLL_ALLOW({d:n}){n.dispose()},TEARDOWN({doc:n}){this.delete(n)}});Al.subscribe(()=>{let n=Al.getSnapshot(),e=new Map;for(let[a]of n)e.set(a,a.documentElement.style.overflow);for(let a of n.values()){let s=e.get(a.doc)==="hidden",o=a.count!==0;(o&&!s||!o&&s)&&Al.dispatch(a.count>0?"SCROLL_PREVENT":"SCROLL_ALLOW",a),a.count===0&&Al.dispatch("TEARDOWN",a)}});function Wse(n,e,a){let s=jse(Al),o=ee(()=>{let r=n.value?s.value.get(n.value):void 0;return r?r.count>0:!1});return dt([n,e],([r,i],[u],h)=>{if(!r||!i)return;Al.dispatch("PUSH",r,a);let m=!1;h(()=>{m||(Al.dispatch("POP",u??r,a),m=!0)})},{immediate:!0}),o}let J$=new Map,pd=new Map;function VV(n,e=O(!0)){yn(a=>{var s;if(!e.value)return;let o=rt(n);if(!o)return;a(function(){var i;if(!o)return;let u=(i=pd.get(o))!=null?i:1;if(u===1?pd.delete(o):pd.set(o,u-1),u!==1)return;let h=J$.get(o);h&&(h["aria-hidden"]===null?o.removeAttribute("aria-hidden"):o.setAttribute("aria-hidden",h["aria-hidden"]),o.inert=h.inert,J$.delete(o))});let r=(s=pd.get(o))!=null?s:0;pd.set(o,r+1),r===0&&(J$.set(o,{"aria-hidden":o.getAttribute("aria-hidden"),inert:o.inert}),o.setAttribute("aria-hidden","true"),o.inert=!0)})}function ZH({defaultContainers:n=[],portals:e,mainTreeNodeRef:a}={}){let s=O(null),o=Ws(s);function r(){var i,u,h;let m=[];for(let p of n)p!==null&&(p instanceof HTMLElement?m.push(p):"value"in p&&p.value instanceof HTMLElement&&m.push(p.value));if(e!=null&&e.value)for(let p of e.value)m.push(p);for(let p of(i=o==null?void 0:o.querySelectorAll("html > *, body > *"))!=null?i:[])p!==document.body&&p!==document.head&&p instanceof HTMLElement&&p.id!=="headlessui-portal-root"&&(p.contains(rt(s))||p.contains((h=(u=rt(s))==null?void 0:u.getRootNode())==null?void 0:h.host)||m.some(b=>p.contains(b))||m.push(p));return m}return{resolveContainers:r,contains(i){return r().some(u=>u.contains(i))},mainTreeNodeRef:s,MainTreeNode(){return a!=null?null:ya(Kr,{features:Zr.Hidden,ref:s})}}}let KH=Symbol("ForcePortalRootContext");function Gse(){return xt(KH,!1)}let UV=Ce({name:"ForcePortalRoot",props:{as:{type:[Object,String],default:"template"},force:{type:Boolean,default:!1}},setup(n,{slots:e,attrs:a}){return St(KH,n.force),()=>{let{force:s,...o}=n;return ja({theirProps:o,ourProps:{},slot:{},slots:e,attrs:a,name:"ForcePortalRoot"})}}}),XH=Symbol("StackContext");var rE=(n=>(n[n.Add=0]="Add",n[n.Remove=1]="Remove",n))(rE||{});function Zse(){return xt(XH,()=>{})}function Kse({type:n,enabled:e,element:a,onUpdate:s}){let o=Zse();function r(...i){s==null||s(...i),o(...i)}at(()=>{dt(e,(i,u)=>{i?r(0,n,a):u===!0&&r(1,n,a)},{immediate:!0,flush:"sync"})}),rn(()=>{e.value&&r(1,n,a)}),St(XH,r)}let YH=Symbol("DescriptionContext");function Xse(){let n=xt(YH,null);if(n===null)throw new Error("Missing parent");return n}function Yse({slot:n=O({}),name:e="Description",props:a={}}={}){let s=O([]);function o(r){return s.value.push(r),()=>{let i=s.value.indexOf(r);i!==-1&&s.value.splice(i,1)}}return St(YH,{register:o,slot:n,name:e,props:a}),ee(()=>s.value.length>0?s.value.join(" "):void 0)}let Qse=Ce({name:"Description",props:{as:{type:[Object,String],default:"p"},id:{type:String,default:null}},setup(n,{attrs:e,slots:a}){var s;let o=(s=n.id)!=null?s:`headlessui-description-${Vn()}`,r=Xse();return at(()=>rn(r.register(o))),()=>{let{name:i="Description",slot:u=O({}),props:h={}}=r,{...m}=n,p={...Object.entries(h).reduce((b,[x,w])=>Object.assign(b,{[x]:t(w)}),{}),id:o};return ja({ourProps:p,theirProps:m,slot:u.value,attrs:e,slots:a,name:i})}}});function Jse(n){let e=Ws(n);if(!e){if(n===null)return null;throw new Error(`[Headless UI]: Cannot find ownerDocument for contextElement: ${n}`)}let a=e.getElementById("headlessui-portal-root");if(a)return a;let s=e.createElement("div");return s.setAttribute("id","headlessui-portal-root"),e.body.appendChild(s)}let eoe=Ce({name:"Portal",props:{as:{type:[Object,String],default:"div"}},setup(n,{slots:e,attrs:a}){let s=O(null),o=ee(()=>Ws(s)),r=Gse(),i=xt(JH,null),u=O(r===!0||i==null?Jse(s.value):i.resolveTarget()),h=O(!1);at(()=>{h.value=!0}),yn(()=>{r||i!=null&&(u.value=i.resolveTarget())});let m=xt(iE,null),p=!1,b=Wr();return dt(s,()=>{if(p||!m)return;let x=rt(s);x&&(rn(m.register(x),b),p=!0)}),rn(()=>{var x,w;let $=(x=o.value)==null?void 0:x.getElementById("headlessui-portal-root");$&&u.value===$&&u.value.children.length<=0&&((w=u.value.parentElement)==null||w.removeChild(u.value))}),()=>{if(!h.value||u.value===null)return null;let x={ref:s,"data-headlessui-portal":""};return ya(WJ,{to:u.value},ja({ourProps:x,theirProps:n,slot:{},attrs:a,slots:e,name:"Portal"}))}}}),iE=Symbol("PortalParentContext");function QH(){let n=xt(iE,null),e=O([]);function a(r){return e.value.push(r),n&&n.register(r),()=>s(r)}function s(r){let i=e.value.indexOf(r);i!==-1&&e.value.splice(i,1),n&&n.unregister(r)}let o={register:a,unregister:s,portals:e};return[e,Ce({name:"PortalWrapper",setup(r,{slots:i}){return St(iE,o),()=>{var u;return(u=i.default)==null?void 0:u.call(i)}}})]}let JH=Symbol("PortalGroupContext"),toe=Ce({name:"PortalGroup",props:{as:{type:[Object,String],default:"template"},target:{type:Object,default:null}},setup(n,{attrs:e,slots:a}){let s=gn({resolveTarget(){return n.target}});return St(JH,s),()=>{let{target:o,...r}=n;return ja({theirProps:r,ourProps:{},slot:{},attrs:e,slots:a,name:"PortalGroup"})}}});var aoe=(n=>(n[n.Open=0]="Open",n[n.Closed=1]="Closed",n))(aoe||{});let lE=Symbol("DialogContext");function jT(n){let e=xt(lE,null);if(e===null){let a=new Error(`<${n} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(a,jT),a}return e}let x1="DC8F892D-2EBD-447C-A4C8-A03058436FF4",eN=Ce({name:"Dialog",inheritAttrs:!1,props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},open:{type:[Boolean,String],default:x1},initialFocus:{type:Object,default:null},id:{type:String,default:null},role:{type:String,default:"dialog"}},emits:{close:n=>!0},setup(n,{emit:e,attrs:a,slots:s,expose:o}){var r,i;let u=(r=n.id)!=null?r:`headlessui-dialog-${Vn()}`,h=O(!1);at(()=>{h.value=!0});let m=!1,p=ee(()=>n.role==="dialog"||n.role==="alertdialog"?n.role:(m||(m=!0,console.warn(`Invalid role [${p}] passed to . Only \`dialog\` and and \`alertdialog\` are supported. Using \`dialog\` instead.`)),"dialog")),b=O(0),x=Oc(),w=ee(()=>n.open===x1&&x!==null?(x.value&Wa.Open)===Wa.Open:n.open),$=O(null),D=ee(()=>Ws($));if(o({el:$,$el:$}),!(n.open!==x1||x!==null))throw new Error("You forgot to provide an `open` prop to the `Dialog`.");if(typeof w.value!="boolean")throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${w.value===x1?void 0:n.open}`);let V=ee(()=>h.value&&w.value?0:1),R=ee(()=>V.value===0),E=ee(()=>b.value>1),P=xt(lE,null)!==null,[S,C]=QH(),{resolveContainers:M,mainTreeNodeRef:g,MainTreeNode:v}=ZH({portals:S,defaultContainers:[ee(()=>{var He;return(He=J.panelRef.value)!=null?He:$.value})]}),T=ee(()=>E.value?"parent":"leaf"),j=ee(()=>x!==null?(x.value&Wa.Closing)===Wa.Closing:!1),B=ee(()=>P||j.value?!1:R.value),oe=ee(()=>{var He,Ke,pt;return(pt=Array.from((Ke=(He=D.value)==null?void 0:He.querySelectorAll("body > *"))!=null?Ke:[]).find(ut=>ut.id==="headlessui-portal-root"?!1:ut.contains(rt(g))&&ut instanceof HTMLElement))!=null?pt:null});VV(oe,B);let be=ee(()=>E.value?!0:R.value),$e=ee(()=>{var He,Ke,pt;return(pt=Array.from((Ke=(He=D.value)==null?void 0:He.querySelectorAll("[data-headlessui-portal]"))!=null?Ke:[]).find(ut=>ut.contains(rt(g))&&ut instanceof HTMLElement))!=null?pt:null});VV($e,be),Kse({type:"Dialog",enabled:ee(()=>V.value===0),element:$,onUpdate:(He,Ke)=>{if(Ke==="Dialog")return en(He,{[rE.Add]:()=>b.value+=1,[rE.Remove]:()=>b.value-=1})}});let Le=Yse({name:"DialogDescription",slot:ee(()=>({open:w.value}))}),de=O(null),J={titleId:de,panelRef:O(null),dialogState:V,setTitleId(He){de.value!==He&&(de.value=He)},close(){e("close",!1)}};St(lE,J);let G=ee(()=>!(!R.value||E.value));OT(M,(He,Ke)=>{J.close(),En(()=>Ke==null?void 0:Ke.focus())},G);let ce=ee(()=>!(E.value||V.value!==0));UT((i=D.value)==null?void 0:i.defaultView,"keydown",He=>{ce.value&&(He.defaultPrevented||He.key===sa.Escape&&(He.preventDefault(),He.stopPropagation(),J.close()))});let Ee=ee(()=>!(j.value||V.value!==0||P));return Wse(D,Ee,He=>{var Ke;return{containers:[...(Ke=He.containers)!=null?Ke:[],M]}}),yn(He=>{if(V.value!==0)return;let Ke=rt($);if(!Ke)return;let pt=new ResizeObserver(ut=>{for(let ft of ut){let kt=ft.target.getBoundingClientRect();kt.x===0&&kt.y===0&&kt.width===0&&kt.height===0&&J.close()}});pt.observe(Ke),He(()=>pt.disconnect())}),()=>{let{open:He,initialFocus:Ke,...pt}=n,ut={...a,ref:$,id:u,role:p.value,"aria-modal":V.value===0?!0:void 0,"aria-labelledby":de.value,"aria-describedby":Le.value},ft={open:V.value===0};return ya(UV,{force:!0},()=>[ya(eoe,()=>ya(toe,{target:$.value},()=>ya(UV,{force:!1},()=>ya(ud,{initialFocus:Ke,containers:M,features:R.value?en(T.value,{parent:ud.features.RestoreFocus,leaf:ud.features.All&~ud.features.FocusLock}):ud.features.None},()=>ya(C,{},()=>ja({ourProps:ut,theirProps:{...pt,...a},slot:ft,attrs:a,slots:s,visible:V.value===0,features:Bs.RenderStrategy|Bs.Static,name:"Dialog"})))))),ya(v)])}}}),tN=Ce({name:"DialogPanel",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:null}},setup(n,{attrs:e,slots:a,expose:s}){var o;let r=(o=n.id)!=null?o:`headlessui-dialog-panel-${Vn()}`,i=jT("DialogPanel");s({el:i.panelRef,$el:i.panelRef});function u(h){h.stopPropagation()}return()=>{let{...h}=n,m={id:r,ref:i.panelRef,onClick:u};return ja({ourProps:m,theirProps:h,slot:{open:i.dialogState.value===0},attrs:e,slots:a,name:"DialogPanel"})}}}),aN=Ce({name:"DialogTitle",props:{as:{type:[Object,String],default:"h2"},id:{type:String,default:null}},setup(n,{attrs:e,slots:a}){var s;let o=(s=n.id)!=null?s:`headlessui-dialog-title-${Vn()}`,r=jT("DialogTitle");return at(()=>{r.setTitleId(o),rn(()=>r.setTitleId(null))}),()=>{let{...i}=n;return ja({ourProps:{id:o},theirProps:i,slot:{open:r.dialogState.value===0},attrs:e,slots:a,name:"DialogTitle"})}}}),nN=Qse;var noe=(n=>(n[n.Open=0]="Open",n[n.Closed=1]="Closed",n))(noe||{});let sN=Symbol("DisclosureContext");function HT(n){let e=xt(sN,null);if(e===null){let a=new Error(`<${n} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(a,HT),a}return e}let oN=Symbol("DisclosurePanelContext");function soe(){return xt(oN,null)}let ooe=Ce({name:"Disclosure",props:{as:{type:[Object,String],default:"template"},defaultOpen:{type:[Boolean],default:!1}},setup(n,{slots:e,attrs:a}){let s=O(n.defaultOpen?0:1),o=O(null),r=O(null),i={buttonId:O(`headlessui-disclosure-button-${Vn()}`),panelId:O(`headlessui-disclosure-panel-${Vn()}`),disclosureState:s,panel:o,button:r,toggleDisclosure(){s.value=en(s.value,{0:1,1:0})},closeDisclosure(){s.value!==1&&(s.value=1)},close(u){i.closeDisclosure();let h=u?u instanceof HTMLElement?u:u.value instanceof HTMLElement?rt(u):rt(i.button):rt(i.button);h==null||h.focus()}};return St(sN,i),e9(ee(()=>en(s.value,{0:Wa.Open,1:Wa.Closed}))),()=>{let{defaultOpen:u,...h}=n,m={open:s.value===0,close:i.close};return ja({theirProps:h,ourProps:{},slot:m,slots:e,attrs:a,name:"Disclosure"})}}}),roe=Ce({name:"DisclosureButton",props:{as:{type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(n,{attrs:e,slots:a,expose:s}){let o=HT("DisclosureButton"),r=soe(),i=ee(()=>r===null?!1:r.value===o.panelId.value);at(()=>{i.value||n.id!==null&&(o.buttonId.value=n.id)}),rn(()=>{i.value||(o.buttonId.value=null)});let u=O(null);s({el:u,$el:u}),i.value||yn(()=>{o.button.value=u.value});let h=JL(ee(()=>({as:n.as,type:e.type})),u);function m(){var x;n.disabled||(i.value?(o.toggleDisclosure(),(x=rt(o.button))==null||x.focus()):o.toggleDisclosure())}function p(x){var w;if(!n.disabled)if(i.value)switch(x.key){case sa.Space:case sa.Enter:x.preventDefault(),x.stopPropagation(),o.toggleDisclosure(),(w=rt(o.button))==null||w.focus();break}else switch(x.key){case sa.Space:case sa.Enter:x.preventDefault(),x.stopPropagation(),o.toggleDisclosure();break}}function b(x){switch(x.key){case sa.Space:x.preventDefault();break}}return()=>{var x;let w={open:o.disclosureState.value===0},{id:$,...D}=n,V=i.value?{ref:u,type:h.value,onClick:m,onKeydown:p}:{id:(x=o.buttonId.value)!=null?x:$,ref:u,type:h.value,"aria-expanded":o.disclosureState.value===0,"aria-controls":o.disclosureState.value===0||rt(o.panel)?o.panelId.value:void 0,disabled:n.disabled?!0:void 0,onClick:m,onKeydown:p,onKeyup:b};return ja({ourProps:V,theirProps:D,slot:w,attrs:e,slots:a,name:"DisclosureButton"})}}}),ioe=Ce({name:"DisclosurePanel",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(n,{attrs:e,slots:a,expose:s}){let o=HT("DisclosurePanel");at(()=>{n.id!==null&&(o.panelId.value=n.id)}),rn(()=>{o.panelId.value=null}),s({el:o.panel,$el:o.panel}),St(oN,o.panelId);let r=Oc(),i=ee(()=>r!==null?(r.value&Wa.Open)===Wa.Open:o.disclosureState.value===0);return()=>{var u;let h={open:o.disclosureState.value===0,close:o.close},{id:m,...p}=n,b={id:(u=o.panelId.value)!=null?u:m,ref:o.panel};return ja({ourProps:b,theirProps:p,slot:h,attrs:e,slots:a,features:Bs.RenderStrategy|Bs.Static,visible:i.value,name:"DisclosurePanel"})}}}),FV=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;function jV(n){var e,a;let s=(e=n.innerText)!=null?e:"",o=n.cloneNode(!0);if(!(o instanceof HTMLElement))return s;let r=!1;for(let u of o.querySelectorAll('[hidden],[aria-hidden],[role="img"]'))u.remove(),r=!0;let i=r?(a=o.innerText)!=null?a:"":s;return FV.test(i)&&(i=i.replace(FV,"")),i}function loe(n){let e=n.getAttribute("aria-label");if(typeof e=="string")return e.trim();let a=n.getAttribute("aria-labelledby");if(a){let s=a.split(" ").map(o=>{let r=document.getElementById(o);if(r){let i=r.getAttribute("aria-label");return typeof i=="string"?i.trim():jV(r).trim()}return null}).filter(Boolean);if(s.length>0)return s.join(", ")}return jV(n).trim()}function coe(n){let e=O(""),a=O("");return()=>{let s=rt(n);if(!s)return"";let o=s.innerText;if(e.value===o)return a.value;let r=loe(s).trim().toLowerCase();return e.value=o,a.value=r,r}}var doe=(n=>(n[n.Open=0]="Open",n[n.Closed=1]="Closed",n))(doe||{}),uoe=(n=>(n[n.Pointer=0]="Pointer",n[n.Other=1]="Other",n))(uoe||{});function poe(n){requestAnimationFrame(()=>requestAnimationFrame(n))}let rN=Symbol("MenuContext");function a9(n){let e=xt(rN,null);if(e===null){let a=new Error(`<${n} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(a,a9),a}return e}let hoe=Ce({name:"Menu",props:{as:{type:[Object,String],default:"template"}},setup(n,{slots:e,attrs:a}){let s=O(1),o=O(null),r=O(null),i=O([]),u=O(""),h=O(null),m=O(1);function p(x=w=>w){let w=h.value!==null?i.value[h.value]:null,$=Cl(x(i.value.slice()),V=>rt(V.dataRef.domRef)),D=w?$.indexOf(w):null;return D===-1&&(D=null),{items:$,activeItemIndex:D}}let b={menuState:s,buttonRef:o,itemsRef:r,items:i,searchQuery:u,activeItemIndex:h,activationTrigger:m,closeMenu:()=>{s.value=1,h.value=null},openMenu:()=>s.value=0,goToItem(x,w,$){let D=p(),V=Rse(x===_s.Specific?{focus:_s.Specific,id:w}:{focus:x},{resolveItems:()=>D.items,resolveActiveIndex:()=>D.activeItemIndex,resolveId:R=>R.id,resolveDisabled:R=>R.dataRef.disabled});u.value="",h.value=V,m.value=$??1,i.value=D.items},search(x){let w=u.value!==""?0:1;u.value+=x.toLowerCase();let $=(h.value!==null?i.value.slice(h.value+w).concat(i.value.slice(0,h.value+w)):i.value).find(V=>V.dataRef.textValue.startsWith(u.value)&&!V.dataRef.disabled),D=$?i.value.indexOf($):-1;D===-1||D===h.value||(h.value=D,m.value=1)},clearSearch(){u.value=""},registerItem(x,w){let $=p(D=>[...D,{id:x,dataRef:w}]);i.value=$.items,h.value=$.activeItemIndex,m.value=1},unregisterItem(x){let w=p($=>{let D=$.findIndex(V=>V.id===x);return D!==-1&&$.splice(D,1),$});i.value=w.items,h.value=w.activeItemIndex,m.value=1}};return OT([o,r],(x,w)=>{var $;b.closeMenu(),QL(w,YL.Loose)||(x.preventDefault(),($=rt(o))==null||$.focus())},ee(()=>s.value===0)),St(rN,b),e9(ee(()=>en(s.value,{0:Wa.Open,1:Wa.Closed}))),()=>{let x={open:s.value===0,close:b.closeMenu};return ja({ourProps:{},theirProps:n,slot:x,slots:e,attrs:a,name:"Menu"})}}}),foe=Ce({name:"MenuButton",props:{disabled:{type:Boolean,default:!1},as:{type:[Object,String],default:"button"},id:{type:String,default:null}},setup(n,{attrs:e,slots:a,expose:s}){var o;let r=(o=n.id)!=null?o:`headlessui-menu-button-${Vn()}`,i=a9("MenuButton");s({el:i.buttonRef,$el:i.buttonRef});function u(b){switch(b.key){case sa.Space:case sa.Enter:case sa.ArrowDown:b.preventDefault(),b.stopPropagation(),i.openMenu(),En(()=>{var x;(x=rt(i.itemsRef))==null||x.focus({preventScroll:!0}),i.goToItem(_s.First)});break;case sa.ArrowUp:b.preventDefault(),b.stopPropagation(),i.openMenu(),En(()=>{var x;(x=rt(i.itemsRef))==null||x.focus({preventScroll:!0}),i.goToItem(_s.Last)});break}}function h(b){switch(b.key){case sa.Space:b.preventDefault();break}}function m(b){n.disabled||(i.menuState.value===0?(i.closeMenu(),En(()=>{var x;return(x=rt(i.buttonRef))==null?void 0:x.focus({preventScroll:!0})})):(b.preventDefault(),i.openMenu(),poe(()=>{var x;return(x=rt(i.itemsRef))==null?void 0:x.focus({preventScroll:!0})})))}let p=JL(ee(()=>({as:n.as,type:e.type})),i.buttonRef);return()=>{var b;let x={open:i.menuState.value===0},{...w}=n,$={ref:i.buttonRef,id:r,type:p.value,"aria-haspopup":"menu","aria-controls":(b=rt(i.itemsRef))==null?void 0:b.id,"aria-expanded":i.menuState.value===0,onKeydown:u,onKeyup:h,onClick:m};return ja({ourProps:$,theirProps:w,slot:x,attrs:e,slots:a,name:"MenuButton"})}}}),moe=Ce({name:"MenuItems",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(n,{attrs:e,slots:a,expose:s}){var o;let r=(o=n.id)!=null?o:`headlessui-menu-items-${Vn()}`,i=a9("MenuItems"),u=O(null);s({el:i.itemsRef,$el:i.itemsRef}),Ase({container:ee(()=>rt(i.itemsRef)),enabled:ee(()=>i.menuState.value===0),accept(x){return x.getAttribute("role")==="menuitem"?NodeFilter.FILTER_REJECT:x.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(x){x.setAttribute("role","none")}});function h(x){var w;switch(u.value&&clearTimeout(u.value),x.key){case sa.Space:if(i.searchQuery.value!=="")return x.preventDefault(),x.stopPropagation(),i.search(x.key);case sa.Enter:if(x.preventDefault(),x.stopPropagation(),i.activeItemIndex.value!==null){let $=i.items.value[i.activeItemIndex.value];(w=rt($.dataRef.domRef))==null||w.click()}i.closeMenu(),FH(rt(i.buttonRef));break;case sa.ArrowDown:return x.preventDefault(),x.stopPropagation(),i.goToItem(_s.Next);case sa.ArrowUp:return x.preventDefault(),x.stopPropagation(),i.goToItem(_s.Previous);case sa.Home:case sa.PageUp:return x.preventDefault(),x.stopPropagation(),i.goToItem(_s.First);case sa.End:case sa.PageDown:return x.preventDefault(),x.stopPropagation(),i.goToItem(_s.Last);case sa.Escape:x.preventDefault(),x.stopPropagation(),i.closeMenu(),En(()=>{var $;return($=rt(i.buttonRef))==null?void 0:$.focus({preventScroll:!0})});break;case sa.Tab:x.preventDefault(),x.stopPropagation(),i.closeMenu(),En(()=>Sse(rt(i.buttonRef),x.shiftKey?Ea.Previous:Ea.Next));break;default:x.key.length===1&&(i.search(x.key),u.value=setTimeout(()=>i.clearSearch(),350));break}}function m(x){switch(x.key){case sa.Space:x.preventDefault();break}}let p=Oc(),b=ee(()=>p!==null?(p.value&Wa.Open)===Wa.Open:i.menuState.value===0);return()=>{var x,w;let $={open:i.menuState.value===0},{...D}=n,V={"aria-activedescendant":i.activeItemIndex.value===null||(x=i.items.value[i.activeItemIndex.value])==null?void 0:x.id,"aria-labelledby":(w=rt(i.buttonRef))==null?void 0:w.id,id:r,onKeydown:h,onKeyup:m,role:"menu",tabIndex:0,ref:i.itemsRef};return ja({ourProps:V,theirProps:D,slot:$,attrs:e,slots:a,features:Bs.RenderStrategy|Bs.Static,visible:b.value,name:"MenuItems"})}}}),voe=Ce({name:"MenuItem",inheritAttrs:!1,props:{as:{type:[Object,String],default:"template"},disabled:{type:Boolean,default:!1},id:{type:String,default:null}},setup(n,{slots:e,attrs:a,expose:s}){var o;let r=(o=n.id)!=null?o:`headlessui-menu-item-${Vn()}`,i=a9("MenuItem"),u=O(null);s({el:u,$el:u});let h=ee(()=>i.activeItemIndex.value!==null?i.items.value[i.activeItemIndex.value].id===r:!1),m=coe(u),p=ee(()=>({disabled:n.disabled,get textValue(){return m()},domRef:u}));at(()=>i.registerItem(r,p)),rn(()=>i.unregisterItem(r)),yn(()=>{i.menuState.value===0&&h.value&&i.activationTrigger.value!==0&&En(()=>{var R,E;return(E=(R=rt(u))==null?void 0:R.scrollIntoView)==null?void 0:E.call(R,{block:"nearest"})})});function b(R){if(n.disabled)return R.preventDefault();i.closeMenu(),FH(rt(i.buttonRef))}function x(){if(n.disabled)return i.goToItem(_s.Nothing);i.goToItem(_s.Specific,r)}let w=$se();function $(R){w.update(R)}function D(R){w.wasMoved(R)&&(n.disabled||h.value||i.goToItem(_s.Specific,r,0))}function V(R){w.wasMoved(R)&&(n.disabled||h.value&&i.goToItem(_s.Nothing))}return()=>{let{disabled:R}=n,E={active:h.value,disabled:R,close:i.closeMenu},{...P}=n;return ja({ourProps:{id:r,ref:u,role:"menuitem",tabIndex:R===!0?void 0:-1,"aria-disabled":R===!0?!0:void 0,disabled:void 0,onClick:b,onFocus:x,onPointerenter:$,onMouseenter:$,onPointermove:D,onMousemove:D,onPointerleave:V,onMouseleave:V},theirProps:{...a,...P},slot:E,attrs:a,slots:e,name:"MenuItem"})}}});var yoe=(n=>(n[n.Open=0]="Open",n[n.Closed=1]="Closed",n))(yoe||{});let iN=Symbol("PopoverContext");function NT(n){let e=xt(iN,null);if(e===null){let a=new Error(`<${n} /> is missing a parent <${dN.name} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(a,NT),a}return e}let _oe=Symbol("PopoverGroupContext");function lN(){return xt(_oe,null)}let cN=Symbol("PopoverPanelContext");function goe(){return xt(cN,null)}let dN=Ce({name:"Popover",inheritAttrs:!1,props:{as:{type:[Object,String],default:"div"}},setup(n,{slots:e,attrs:a,expose:s}){var o;let r=O(null);s({el:r,$el:r});let i=O(1),u=O(null),h=O(null),m=O(null),p=O(null),b=ee(()=>Ws(r)),x=ee(()=>{var C,M;if(!rt(u)||!rt(p))return!1;for(let be of document.querySelectorAll("body > *"))if(Number(be==null?void 0:be.contains(rt(u)))^Number(be==null?void 0:be.contains(rt(p))))return!0;let g=uu(),v=g.indexOf(rt(u)),T=(v+g.length-1)%g.length,j=(v+1)%g.length,B=g[T],oe=g[j];return!((C=rt(p))!=null&&C.contains(B))&&!((M=rt(p))!=null&&M.contains(oe))}),w={popoverState:i,buttonId:O(null),panelId:O(null),panel:p,button:u,isPortalled:x,beforePanelSentinel:h,afterPanelSentinel:m,togglePopover(){i.value=en(i.value,{0:1,1:0})},closePopover(){i.value!==1&&(i.value=1)},close(C){w.closePopover();let M=C?C instanceof HTMLElement?C:C.value instanceof HTMLElement?rt(C):rt(w.button):rt(w.button);M==null||M.focus()}};St(iN,w),e9(ee(()=>en(i.value,{0:Wa.Open,1:Wa.Closed})));let $={buttonId:w.buttonId,panelId:w.panelId,close(){w.closePopover()}},D=lN(),V=D==null?void 0:D.registerPopover,[R,E]=QH(),P=ZH({mainTreeNodeRef:D==null?void 0:D.mainTreeNodeRef,portals:R,defaultContainers:[u,p]});function S(){var C,M,g,v;return(v=D==null?void 0:D.isFocusWithinPopoverGroup())!=null?v:((C=b.value)==null?void 0:C.activeElement)&&(((M=rt(u))==null?void 0:M.contains(b.value.activeElement))||((g=rt(p))==null?void 0:g.contains(b.value.activeElement)))}return yn(()=>V==null?void 0:V($)),UT((o=b.value)==null?void 0:o.defaultView,"focus",C=>{var M,g;C.target!==window&&C.target instanceof HTMLElement&&i.value===0&&(S()||u&&p&&(P.contains(C.target)||(M=rt(w.beforePanelSentinel))!=null&&M.contains(C.target)||(g=rt(w.afterPanelSentinel))!=null&&g.contains(C.target)||w.closePopover()))},!0),OT(P.resolveContainers,(C,M)=>{var g;w.closePopover(),QL(M,YL.Loose)||(C.preventDefault(),(g=rt(u))==null||g.focus())},ee(()=>i.value===0)),()=>{let C={open:i.value===0,close:w.close};return ya(ke,[ya(E,{},()=>ja({theirProps:{...n,...a},ourProps:{ref:r},slot:C,slots:e,attrs:a,name:"Popover"})),ya(P.MainTreeNode)])}}}),koe=Ce({name:"PopoverButton",props:{as:{type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},inheritAttrs:!1,setup(n,{attrs:e,slots:a,expose:s}){var o;let r=(o=n.id)!=null?o:`headlessui-popover-button-${Vn()}`,i=NT("PopoverButton"),u=ee(()=>Ws(i.button));s({el:i.button,$el:i.button}),at(()=>{i.buttonId.value=r}),rn(()=>{i.buttonId.value=null});let h=lN(),m=h==null?void 0:h.closeOthers,p=goe(),b=ee(()=>p===null?!1:p.value===i.panelId.value),x=O(null),w=`headlessui-focus-sentinel-${Vn()}`;b.value||yn(()=>{i.button.value=rt(x)});let $=JL(ee(()=>({as:n.as,type:e.type})),x);function D(C){var M,g,v,T,j;if(b.value){if(i.popoverState.value===1)return;switch(C.key){case sa.Space:case sa.Enter:C.preventDefault(),(g=(M=C.target).click)==null||g.call(M),i.closePopover(),(v=rt(i.button))==null||v.focus();break}}else switch(C.key){case sa.Space:case sa.Enter:C.preventDefault(),C.stopPropagation(),i.popoverState.value===1&&(m==null||m(i.buttonId.value)),i.togglePopover();break;case sa.Escape:if(i.popoverState.value!==0)return m==null?void 0:m(i.buttonId.value);if(!rt(i.button)||(T=u.value)!=null&&T.activeElement&&!((j=rt(i.button))!=null&&j.contains(u.value.activeElement)))return;C.preventDefault(),C.stopPropagation(),i.closePopover();break}}function V(C){b.value||C.key===sa.Space&&C.preventDefault()}function R(C){var M,g;n.disabled||(b.value?(i.closePopover(),(M=rt(i.button))==null||M.focus()):(C.preventDefault(),C.stopPropagation(),i.popoverState.value===1&&(m==null||m(i.buttonId.value)),i.togglePopover(),(g=rt(i.button))==null||g.focus()))}function E(C){C.preventDefault(),C.stopPropagation()}let P=FT();function S(){let C=rt(i.panel);if(!C)return;function M(){en(P.value,{[gs.Forwards]:()=>Ln(C,Ea.First),[gs.Backwards]:()=>Ln(C,Ea.Last)})===Jo.Error&&Ln(uu().filter(g=>g.dataset.headlessuiFocusGuard!=="true"),en(P.value,{[gs.Forwards]:Ea.Next,[gs.Backwards]:Ea.Previous}),{relativeTo:rt(i.button)})}M()}return()=>{let C=i.popoverState.value===0,M={open:C},{...g}=n,v=b.value?{ref:x,type:$.value,onKeydown:D,onClick:R}:{ref:x,id:r,type:$.value,"aria-expanded":i.popoverState.value===0,"aria-controls":rt(i.panel)?i.panelId.value:void 0,disabled:n.disabled?!0:void 0,onKeydown:D,onKeyup:V,onClick:R,onMousedown:E};return ya(ke,[ja({ourProps:v,theirProps:{...e,...g},slot:M,attrs:e,slots:a,name:"PopoverButton"}),C&&!b.value&&i.isPortalled.value&&ya(Kr,{id:w,features:Zr.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:S})])}}}),boe=Ce({name:"PopoverPanel",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},focus:{type:Boolean,default:!1},id:{type:String,default:null}},inheritAttrs:!1,setup(n,{attrs:e,slots:a,expose:s}){var o;let r=(o=n.id)!=null?o:`headlessui-popover-panel-${Vn()}`,{focus:i}=n,u=NT("PopoverPanel"),h=ee(()=>Ws(u.panel)),m=`headlessui-focus-sentinel-before-${Vn()}`,p=`headlessui-focus-sentinel-after-${Vn()}`;s({el:u.panel,$el:u.panel}),at(()=>{u.panelId.value=r}),rn(()=>{u.panelId.value=null}),St(cN,u.panelId),yn(()=>{var E,P;if(!i||u.popoverState.value!==0||!u.panel)return;let S=(E=h.value)==null?void 0:E.activeElement;(P=rt(u.panel))!=null&&P.contains(S)||Ln(rt(u.panel),Ea.First)});let b=Oc(),x=ee(()=>b!==null?(b.value&Wa.Open)===Wa.Open:u.popoverState.value===0);function w(E){var P,S;switch(E.key){case sa.Escape:if(u.popoverState.value!==0||!rt(u.panel)||h.value&&!((P=rt(u.panel))!=null&&P.contains(h.value.activeElement)))return;E.preventDefault(),E.stopPropagation(),u.closePopover(),(S=rt(u.button))==null||S.focus();break}}function $(E){var P,S,C,M,g;let v=E.relatedTarget;v&&rt(u.panel)&&((P=rt(u.panel))!=null&&P.contains(v)||(u.closePopover(),((C=(S=rt(u.beforePanelSentinel))==null?void 0:S.contains)!=null&&C.call(S,v)||(g=(M=rt(u.afterPanelSentinel))==null?void 0:M.contains)!=null&&g.call(M,v))&&v.focus({preventScroll:!0})))}let D=FT();function V(){let E=rt(u.panel);if(!E)return;function P(){en(D.value,{[gs.Forwards]:()=>{var S;Ln(E,Ea.First)===Jo.Error&&((S=rt(u.afterPanelSentinel))==null||S.focus())},[gs.Backwards]:()=>{var S;(S=rt(u.button))==null||S.focus({preventScroll:!0})}})}P()}function R(){let E=rt(u.panel);if(!E)return;function P(){en(D.value,{[gs.Forwards]:()=>{let S=rt(u.button),C=rt(u.panel);if(!S)return;let M=uu(),g=M.indexOf(S),v=M.slice(0,g+1),T=[...M.slice(g+1),...v];for(let j of T.slice())if(j.dataset.headlessuiFocusGuard==="true"||C!=null&&C.contains(j)){let B=T.indexOf(j);B!==-1&&T.splice(B,1)}Ln(T,Ea.First,{sorted:!1})},[gs.Backwards]:()=>{var S;Ln(E,Ea.Previous)===Jo.Error&&((S=rt(u.button))==null||S.focus())}})}P()}return()=>{let E={open:u.popoverState.value===0,close:u.close},{focus:P,...S}=n,C={ref:u.panel,id:r,onKeydown:w,onFocusout:i&&u.popoverState.value===0?$:void 0,tabIndex:-1};return ja({ourProps:C,theirProps:{...e,...S},attrs:e,slot:E,slots:{...a,default:(...M)=>{var g;return[ya(ke,[x.value&&u.isPortalled.value&&ya(Kr,{id:m,ref:u.beforePanelSentinel,features:Zr.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:V}),(g=a.default)==null?void 0:g.call(a,...M),x.value&&u.isPortalled.value&&ya(Kr,{id:p,ref:u.afterPanelSentinel,features:Zr.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:R})])]}},features:Bs.RenderStrategy|Bs.Static,visible:x.value,name:"PopoverPanel"})}}}),woe=Ce({props:{onFocus:{type:Function,required:!0}},setup(n){let e=O(!0);return()=>e.value?ya(Kr,{as:"button",type:"button",features:Zr.Focusable,onFocus(a){a.preventDefault();let s,o=50;function r(){var i;if(o--<=0){s&&cancelAnimationFrame(s);return}if((i=n.onFocus)!=null&&i.call(n)){e.value=!1,cancelAnimationFrame(s);return}s=requestAnimationFrame(r)}s=requestAnimationFrame(r)}}):null}});var xoe=(n=>(n[n.Forwards=0]="Forwards",n[n.Backwards=1]="Backwards",n))(xoe||{}),Moe=(n=>(n[n.Less=-1]="Less",n[n.Equal=0]="Equal",n[n.Greater=1]="Greater",n))(Moe||{});let uN=Symbol("TabsContext");function hu(n){let e=xt(uN,null);if(e===null){let a=new Error(`<${n} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(a,hu),a}return e}let zT=Symbol("TabsSSRContext"),Coe=Ce({name:"TabGroup",emits:{change:n=>!0},props:{as:{type:[Object,String],default:"template"},selectedIndex:{type:[Number],default:null},defaultIndex:{type:[Number],default:0},vertical:{type:[Boolean],default:!1},manual:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(n,{slots:e,attrs:a,emit:s}){var o;let r=O((o=n.selectedIndex)!=null?o:n.defaultIndex),i=O([]),u=O([]),h=ee(()=>n.selectedIndex!==null),m=ee(()=>h.value?n.selectedIndex:r.value);function p(D){var V;let R=Cl(b.tabs.value,rt),E=Cl(b.panels.value,rt),P=R.filter(S=>{var C;return!((C=rt(S))!=null&&C.hasAttribute("disabled"))});if(D<0||D>R.length-1){let S=en(r.value===null?0:Math.sign(D-r.value),{[-1]:()=>1,0:()=>en(Math.sign(D),{[-1]:()=>0,0:()=>0,1:()=>1}),1:()=>0}),C=en(S,{0:()=>R.indexOf(P[0]),1:()=>R.indexOf(P[P.length-1])});C!==-1&&(r.value=C),b.tabs.value=R,b.panels.value=E}else{let S=R.slice(0,D),C=[...R.slice(D),...S].find(g=>P.includes(g));if(!C)return;let M=(V=R.indexOf(C))!=null?V:b.selectedIndex.value;M===-1&&(M=b.selectedIndex.value),r.value=M,b.tabs.value=R,b.panels.value=E}}let b={selectedIndex:ee(()=>{var D,V;return(V=(D=r.value)!=null?D:n.defaultIndex)!=null?V:null}),orientation:ee(()=>n.vertical?"vertical":"horizontal"),activation:ee(()=>n.manual?"manual":"auto"),tabs:i,panels:u,setSelectedIndex(D){m.value!==D&&s("change",D),h.value||p(D)},registerTab(D){var V;if(i.value.includes(D))return;let R=i.value[r.value];i.value.push(D),i.value=Cl(i.value,rt);let E=(V=i.value.indexOf(R))!=null?V:r.value;E!==-1&&(r.value=E)},unregisterTab(D){let V=i.value.indexOf(D);V!==-1&&i.value.splice(V,1)},registerPanel(D){u.value.includes(D)||(u.value.push(D),u.value=Cl(u.value,rt))},unregisterPanel(D){let V=u.value.indexOf(D);V!==-1&&u.value.splice(V,1)}};St(uN,b);let x=O({tabs:[],panels:[]}),w=O(!1);at(()=>{w.value=!0}),St(zT,ee(()=>w.value?null:x.value));let $=ee(()=>n.selectedIndex);return at(()=>{dt([$],()=>{var D;return p((D=n.selectedIndex)!=null?D:n.defaultIndex)},{immediate:!0})}),yn(()=>{if(!h.value||m.value==null||b.tabs.value.length<=0)return;let D=Cl(b.tabs.value,rt);D.some((V,R)=>rt(b.tabs.value[R])!==rt(V))&&b.setSelectedIndex(D.findIndex(V=>rt(V)===rt(b.tabs.value[m.value])))}),()=>{let D={selectedIndex:r.value};return ya(ke,[i.value.length<=0&&ya(woe,{onFocus:()=>{for(let V of i.value){let R=rt(V);if((R==null?void 0:R.tabIndex)===0)return R.focus(),!0}return!1}}),ja({theirProps:{...a,...VT(n,["selectedIndex","defaultIndex","manual","vertical","onChange"])},ourProps:{},slot:D,slots:e,attrs:a,name:"TabGroup"})])}}}),Soe=Ce({name:"TabList",props:{as:{type:[Object,String],default:"div"}},setup(n,{attrs:e,slots:a}){let s=hu("TabList");return()=>{let o={selectedIndex:s.selectedIndex.value},r={role:"tablist","aria-orientation":s.orientation.value};return ja({ourProps:r,theirProps:n,slot:o,attrs:e,slots:a,name:"TabList"})}}}),Ioe=Ce({name:"Tab",props:{as:{type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(n,{attrs:e,slots:a,expose:s}){var o;let r=(o=n.id)!=null?o:`headlessui-tabs-tab-${Vn()}`,i=hu("Tab"),u=O(null);s({el:u,$el:u}),at(()=>i.registerTab(u)),rn(()=>i.unregisterTab(u));let h=xt(zT),m=ee(()=>{if(h.value){let E=h.value.tabs.indexOf(r);return E===-1?h.value.tabs.push(r)-1:E}return-1}),p=ee(()=>{let E=i.tabs.value.indexOf(u);return E===-1?m.value:E}),b=ee(()=>p.value===i.selectedIndex.value);function x(E){var P;let S=E();if(S===Jo.Success&&i.activation.value==="auto"){let C=(P=Ws(u))==null?void 0:P.activeElement,M=i.tabs.value.findIndex(g=>rt(g)===C);M!==-1&&i.setSelectedIndex(M)}return S}function w(E){let P=i.tabs.value.map(S=>rt(S)).filter(Boolean);if(E.key===sa.Space||E.key===sa.Enter){E.preventDefault(),E.stopPropagation(),i.setSelectedIndex(p.value);return}switch(E.key){case sa.Home:case sa.PageUp:return E.preventDefault(),E.stopPropagation(),x(()=>Ln(P,Ea.First));case sa.End:case sa.PageDown:return E.preventDefault(),E.stopPropagation(),x(()=>Ln(P,Ea.Last))}if(x(()=>en(i.orientation.value,{vertical(){return E.key===sa.ArrowUp?Ln(P,Ea.Previous|Ea.WrapAround):E.key===sa.ArrowDown?Ln(P,Ea.Next|Ea.WrapAround):Jo.Error},horizontal(){return E.key===sa.ArrowLeft?Ln(P,Ea.Previous|Ea.WrapAround):E.key===sa.ArrowRight?Ln(P,Ea.Next|Ea.WrapAround):Jo.Error}}))===Jo.Success)return E.preventDefault()}let $=O(!1);function D(){var E;$.value||($.value=!0,!n.disabled&&((E=rt(u))==null||E.focus({preventScroll:!0}),i.setSelectedIndex(p.value),t9(()=>{$.value=!1})))}function V(E){E.preventDefault()}let R=JL(ee(()=>({as:n.as,type:e.type})),u);return()=>{var E;let P={selected:b.value},{...S}=n,C={ref:u,onKeydown:w,onMousedown:V,onClick:D,id:r,role:"tab",type:R.value,"aria-controls":(E=rt(i.panels.value[p.value]))==null?void 0:E.id,"aria-selected":b.value,tabIndex:b.value?0:-1,disabled:n.disabled?!0:void 0};return ja({ourProps:C,theirProps:S,slot:P,attrs:e,slots:a,name:"Tab"})}}}),Loe=Ce({name:"TabPanels",props:{as:{type:[Object,String],default:"div"}},setup(n,{slots:e,attrs:a}){let s=hu("TabPanels");return()=>{let o={selectedIndex:s.selectedIndex.value};return ja({theirProps:n,ourProps:{},slot:o,attrs:a,slots:e,name:"TabPanels"})}}}),$oe=Ce({name:"TabPanel",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null},tabIndex:{type:Number,default:0}},setup(n,{attrs:e,slots:a,expose:s}){var o;let r=(o=n.id)!=null?o:`headlessui-tabs-panel-${Vn()}`,i=hu("TabPanel"),u=O(null);s({el:u,$el:u}),at(()=>i.registerPanel(u)),rn(()=>i.unregisterPanel(u));let h=xt(zT),m=ee(()=>{if(h.value){let x=h.value.panels.indexOf(r);return x===-1?h.value.panels.push(r)-1:x}return-1}),p=ee(()=>{let x=i.panels.value.indexOf(u);return x===-1?m.value:x}),b=ee(()=>p.value===i.selectedIndex.value);return()=>{var x;let w={selected:b.value},{tabIndex:$,...D}=n,V={ref:u,id:r,role:"tabpanel","aria-labelledby":(x=rt(i.tabs.value[p.value]))==null?void 0:x.id,tabIndex:b.value?$:-1};return!b.value&&n.unmount&&!n.static?ya(Kr,{as:"span","aria-hidden":!0,...V}):ja({ourProps:V,theirProps:D,slot:w,attrs:e,slots:a,features:Bs.Static|Bs.RenderStrategy,visible:b.value,name:"TabPanel"})}}});function Aoe(n){let e={called:!1};return(...a)=>{if(!e.called)return e.called=!0,n(...a)}}function eA(n,...e){n&&e.length>0&&n.classList.add(...e)}function M1(n,...e){n&&e.length>0&&n.classList.remove(...e)}var cE=(n=>(n.Finished="finished",n.Cancelled="cancelled",n))(cE||{});function Eoe(n,e){let a=pu();if(!n)return a.dispose;let{transitionDuration:s,transitionDelay:o}=getComputedStyle(n),[r,i]=[s,o].map(u=>{let[h=0]=u.split(",").filter(Boolean).map(m=>m.includes("ms")?parseFloat(m):parseFloat(m)*1e3).sort((m,p)=>p-m);return h});return r!==0?a.setTimeout(()=>e("finished"),r+i):e("finished"),a.add(()=>e("cancelled")),a.dispose}function HV(n,e,a,s,o,r){let i=pu(),u=r!==void 0?Aoe(r):()=>{};return M1(n,...o),eA(n,...e,...a),i.nextFrame(()=>{M1(n,...a),eA(n,...s),i.add(Eoe(n,h=>(M1(n,...s,...e),eA(n,...o),u(h))))}),i.add(()=>M1(n,...e,...a,...s,...o)),i.add(()=>u("cancelled")),i.dispose}function mi(n=""){return n.split(/\s+/).filter(e=>e.length>1)}let BT=Symbol("TransitionContext");var Toe=(n=>(n.Visible="visible",n.Hidden="hidden",n))(Toe||{});function Poe(){return xt(BT,null)!==null}function Doe(){let n=xt(BT,null);if(n===null)throw new Error("A is used but it is missing a parent .");return n}function Roe(){let n=xt(qT,null);if(n===null)throw new Error("A is used but it is missing a parent .");return n}let qT=Symbol("NestingContext");function n9(n){return"children"in n?n9(n.children):n.value.filter(({state:e})=>e==="visible").length>0}function pN(n){let e=O([]),a=O(!1);at(()=>a.value=!0),rn(()=>a.value=!1);function s(r,i=jr.Hidden){let u=e.value.findIndex(({id:h})=>h===r);u!==-1&&(en(i,{[jr.Unmount](){e.value.splice(u,1)},[jr.Hidden](){e.value[u].state="hidden"}}),!n9(e)&&a.value&&(n==null||n()))}function o(r){let i=e.value.find(({id:u})=>u===r);return i?i.state!=="visible"&&(i.state="visible"):e.value.push({id:r,state:"visible"}),()=>s(r,jr.Unmount)}return{children:e,register:o,unregister:s}}let hN=Bs.RenderStrategy,Gd=Ce({props:{as:{type:[Object,String],default:"div"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:""},enterFrom:{type:[String],default:""},enterTo:{type:[String],default:""},entered:{type:[String],default:""},leave:{type:[String],default:""},leaveFrom:{type:[String],default:""},leaveTo:{type:[String],default:""}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(n,{emit:e,attrs:a,slots:s,expose:o}){let r=O(0);function i(){r.value|=Wa.Opening,e("beforeEnter")}function u(){r.value&=~Wa.Opening,e("afterEnter")}function h(){r.value|=Wa.Closing,e("beforeLeave")}function m(){r.value&=~Wa.Closing,e("afterLeave")}if(!Poe()&&Tse())return()=>ya(rr,{...n,onBeforeEnter:i,onAfterEnter:u,onBeforeLeave:h,onAfterLeave:m},s);let p=O(null),b=ee(()=>n.unmount?jr.Unmount:jr.Hidden);o({el:p,$el:p});let{show:x,appear:w}=Doe(),{register:$,unregister:D}=Roe(),V=O(x.value?"visible":"hidden"),R={value:!0},E=Vn(),P={value:!1},S=pN(()=>{!P.value&&V.value!=="hidden"&&(V.value="hidden",D(E),m())});at(()=>{let be=$(E);rn(be)}),yn(()=>{if(b.value===jr.Hidden&&E){if(x.value&&V.value!=="visible"){V.value="visible";return}en(V.value,{hidden:()=>D(E),visible:()=>$(E)})}});let C=mi(n.enter),M=mi(n.enterFrom),g=mi(n.enterTo),v=mi(n.entered),T=mi(n.leave),j=mi(n.leaveFrom),B=mi(n.leaveTo);at(()=>{yn(()=>{if(V.value==="visible"){let be=rt(p);if(be instanceof Comment&&be.data==="")throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")}})});function oe(be){let $e=R.value&&!w.value,Le=rt(p);!Le||!(Le instanceof HTMLElement)||$e||(P.value=!0,x.value&&i(),x.value||h(),be(x.value?HV(Le,C,M,g,v,de=>{P.value=!1,de===cE.Finished&&u()}):HV(Le,T,j,B,v,de=>{P.value=!1,de===cE.Finished&&(n9(S)||(V.value="hidden",D(E),m()))})))}return at(()=>{dt([x],(be,$e,Le)=>{oe(Le),R.value=!1},{immediate:!0})}),St(qT,S),e9(ee(()=>en(V.value,{visible:Wa.Open,hidden:Wa.Closed})|r.value)),()=>{let{appear:be,show:$e,enter:Le,enterFrom:de,enterTo:J,entered:G,leave:ce,leaveFrom:Ee,leaveTo:He,...Ke}=n,pt={ref:p},ut={...Ke,...w.value&&x.value&&du.isServer?{class:F([a.class,Ke.class,...C,...M])}:{}};return ja({theirProps:ut,ourProps:pt,slot:{},slots:s,attrs:a,features:hN,visible:V.value==="visible",name:"TransitionChild"})}}}),Ooe=Gd,rr=Ce({inheritAttrs:!1,props:{as:{type:[Object,String],default:"div"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:""},enterFrom:{type:[String],default:""},enterTo:{type:[String],default:""},entered:{type:[String],default:""},leave:{type:[String],default:""},leaveFrom:{type:[String],default:""},leaveTo:{type:[String],default:""}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(n,{emit:e,attrs:a,slots:s}){let o=Oc(),r=ee(()=>n.show===null&&o!==null?(o.value&Wa.Open)===Wa.Open:n.show);yn(()=>{if(![!0,!1].includes(r.value))throw new Error('A is used but it is missing a `:show="true | false"` prop.')});let i=O(r.value?"visible":"hidden"),u=pN(()=>{i.value="hidden"}),h=O(!0),m={show:r,appear:ee(()=>n.appear||!h.value)};return at(()=>{yn(()=>{h.value=!1,r.value?i.value="visible":n9(u)||(i.value="hidden")})}),St(qT,u),St(BT,m),()=>{let p=VT(n,["show","appear","unmount","onBeforeEnter","onBeforeLeave","onAfterEnter","onAfterLeave"]),b={unmount:n.unmount};return ja({ourProps:{...b,as:"template"},theirProps:{},slot:{},slots:{...s,default:()=>[ya(Ooe,{onBeforeEnter:()=>e("beforeEnter"),onAfterEnter:()=>e("afterEnter"),onBeforeLeave:()=>e("beforeLeave"),onAfterLeave:()=>e("afterLeave"),...a,...b,...p},s.default)]},attrs:{},features:hN,visible:i.value==="visible",name:"Transition"})}}});const Voe={inheritAttrs:!1},Uoe=Ce({...Voe,__name:"Menu",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["relative",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(hoe),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3}))}}),Foe={inheritAttrs:!1},joe=Ce({...Foe,__name:"Button",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["cursor-pointer",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(foe),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3}))}}),Hoe={inheritAttrs:!1},Noe=Ce({...Hoe,__name:"Items",props:{as:{default:"div"},placement:{default:"bottom-end"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["p-2 shadow-[0px_3px_10px_#00000017] bg-white border-transparent rounded-md dark:bg-darkmode-600 dark:border-transparent",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(rr),{as:"template",enter:"transition-all ease-linear duration-150",enterFrom:"mt-5 invisible opacity-0 translate-y-1",enterTo:"mt-1 visible opacity-100 translate-y-0",entered:"mt-1",leave:"transition-all ease-linear duration-150",leaveFrom:"mt-1 visible opacity-100 translate-y-0",leaveTo:"mt-5 invisible opacity-0 translate-y-1"},{default:f(()=>[c("div",{class:F(["absolute z-30",{"left-0 bottom-[100%]":o.placement=="top-start"},{"left-[50%] translate-x-[-50%] bottom-[100%]":o.placement=="top"},{"right-0 bottom-[100%]":o.placement=="top-end"},{"left-[100%] translate-y-[-50%]":o.placement=="right-start"},{"left-[100%] top-[50%] translate-y-[-50%]":o.placement=="right"},{"left-[100%] bottom-0":o.placement=="right-end"},{"top-[100%] right-0":o.placement=="bottom-end"},{"top-[100%] left-[50%] translate-x-[-50%]":o.placement=="bottom"},{"top-[100%] left-0":o.placement=="bottom-start"},{"right-[100%] translate-y-[-50%]":o.placement=="left-start"},{"right-[100%] top-[50%] translate-y-[-50%]":o.placement=="left"},{"right-[100%] bottom-0":o.placement=="left-end"}])},[l(t(moe),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3})],2)]),_:3}))}}),zoe={inheritAttrs:!1},Boe=Ce({...zoe,__name:"Item",props:{as:{default:"a"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["cursor-pointer flex items-center p-2 transition duration-300 ease-in-out rounded-md hover:bg-slate-200/60 dark:bg-darkmode-600 dark:hover:bg-darkmode-400",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(voe),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3}))}}),qoe={inheritAttrs:!1},Woe=Ce({...qoe,__name:"Divider",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["h-px my-2 -mx-2 bg-slate-200/60 dark:bg-darkmode-400",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))}}),Goe={inheritAttrs:!1},Zoe=Ce({...Goe,__name:"Header",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["p-2 font-medium",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))}}),Koe={inheritAttrs:!1},Xoe=Ce({...Koe,__name:"Footer",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["flex p-1",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))}}),Xa=Object.assign({},Uoe,{Button:joe,Items:Noe,Item:Boe,Divider:Woe,Header:Zoe,Footer:Xoe}),Yoe={inheritAttrs:!1},Qoe=Ce({...Yoe,__name:"Popover",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["relative",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(dN),{as:"template"},{default:f(({close:i})=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default",{close:i})]),_:2},1040,["class"]))]),_:3}))}}),Joe={inheritAttrs:!1},ere=Ce({...Joe,__name:"Button",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["cursor-pointer",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(koe),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3}))}}),tre={inheritAttrs:!1},are=Ce({...tre,__name:"Panel",props:{as:{default:"div"},placement:{default:"bottom-end"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["p-2 shadow-[0px_3px_20px_#0000000b] bg-white border-transparent rounded-md dark:bg-darkmode-600 dark:border-transparent",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(rr),{as:"template",enter:"transition-all ease-linear duration-150",enterFrom:"mt-5 invisible opacity-0 translate-y-1",enterTo:"mt-1 visible opacity-100 translate-y-0",entered:"mt-1",leave:"transition-all ease-linear duration-150",leaveFrom:"mt-1 visible opacity-100 translate-y-0",leaveTo:"mt-5 invisible opacity-0 translate-y-1"},{default:f(()=>[c("div",{class:F(["absolute z-30",{"left-0 bottom-[100%]":o.placement=="top-start"},{"left-[50%] translate-x-[-50%] bottom-[100%]":o.placement=="top"},{"right-0 bottom-[100%]":o.placement=="top-end"},{"left-[100%] translate-y-[-50%]":o.placement=="right-start"},{"left-[100%] top-[50%] translate-y-[-50%]":o.placement=="right"},{"left-[100%] bottom-0":o.placement=="right-end"},{"top-[100%] right-0":o.placement=="bottom-end"},{"top-[100%] left-[50%] translate-x-[-50%]":o.placement=="bottom"},{"top-[100%] left-0":o.placement=="bottom-start"},{"right-[100%] translate-y-[-50%]":o.placement=="left-start"},{"right-[100%] top-[50%] translate-y-[-50%]":o.placement=="left"},{"right-[100%] bottom-0":o.placement=="left-end"}])},[l(t(boe),Ft({as:e,class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"])],2)]),_:3}))}});Object.assign({},Qoe,{Button:ere,Panel:are});const nre=Ce({__name:"Provider",props:{selected:{type:Boolean,default:!1}},setup(n){const e=n;return St("tab",{selected:ee(()=>e.selected)}),(a,s)=>Lt(a.$slots,"default")}}),sre=Ce({__name:"Tab",props:{fullWidth:{type:Boolean,default:!0}},setup(n){const{fullWidth:e}=n,a=xt("list");return(s,o)=>(L(),ge(t(Ioe),{as:"template"},{default:f(({selected:r})=>[c("li",{class:F(["focus-visible:outline-none",{"flex-1":e},{"-mb-px":t(a)&&t(a).variant=="tabs"}])},[l(nre,{selected:r},{default:f(()=>[Lt(s.$slots,"default",{selected:r})]),_:2},1032,["selected"])],2)]),_:3}))}}),ore={inheritAttrs:!1},rre=Ce({...ore,__name:"Button",props:{as:{default:"a"}},setup(n){const{as:e}=n,a=Ot(),s=xt("tab"),o=xt("list"),r=ee(()=>At(["cursor-pointer block appearance-none px-5 py-2.5 border border-transparent text-slate-700 dark:text-slate-400",(s==null?void 0:s.selected.value)&&"text-slate-800 dark:text-white",(o==null?void 0:o.variant)=="tabs"&&"block border-transparent rounded-t-md dark:border-transparent",(o==null?void 0:o.variant)=="tabs"&&(s==null?void 0:s.selected.value)&&"bg-white border-slate-200 border-b-transparent font-medium dark:bg-transparent dark:border-t-darkmode-400 dark:border-b-darkmode-600 dark:border-x-darkmode-400",(o==null?void 0:o.variant)=="tabs"&&!(s!=null&&s.selected.value)&&"hover:bg-slate-100 dark:hover:bg-darkmode-400 dark:hover:border-transparent",(o==null?void 0:o.variant)=="pills"&&"rounded-md border-0",(o==null?void 0:o.variant)=="pills"&&(s==null?void 0:s.selected.value)&&"bg-primary text-white font-medium",(o==null?void 0:o.variant)=="boxed-tabs"&&"shadow-[0px_3px_20px_#0000000b] rounded-md",(o==null?void 0:o.variant)=="boxed-tabs"&&(s==null?void 0:s.selected.value)&&"bg-primary text-white font-medium",(o==null?void 0:o.variant)=="link-tabs"&&"border-b-2 border-transparent dark:border-transparent",(o==null?void 0:o.variant)=="link-tabs"&&(s==null?void 0:s.selected.value)&&"border-b-primary font-medium dark:border-b-primary",typeof a.class=="string"&&a.class]));return(i,u)=>(L(),ge(Da(e),Ft({class:r.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(i.$slots,"default")]),_:3},16,["class"]))}}),ire=Ce({__name:"Group",setup(n){return(e,a)=>(L(),ge(t(Coe),{as:"div"},{default:f(()=>[Lt(e.$slots,"default")]),_:3}))}}),lre={inheritAttrs:!1},cre=Ce({...lre,__name:"List",props:{variant:{default:"tabs"}},setup(n){const{variant:e}=n,a=Ot(),s=ee(()=>At([e=="tabs"&&"border-b border-slate-200 dark:border-darkmode-400","w-full flex",typeof a.class=="string"&&a.class]));return St("list",{variant:e}),(o,r)=>(L(),ge(t(Soe),Ft({as:"ul",class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))}}),dre=Ce({__name:"Panels",setup(n){return(e,a)=>(L(),ge(t(Loe),{as:"div"},{default:f(()=>[Lt(e.$slots,"default")]),_:3}))}}),ure=Ce({__name:"Panel",setup(n){return(e,a)=>(L(),ge(t($oe),{as:"template"},{default:f(({selected:s})=>[l(t(rr),{appear:"",as:"div",show:s,enter:"transition-opacity duration-300",enterFrom:"opacity-0",enterTo:"opacity-100",leave:"transition-opacity duration-300",leaveFrom:"opacity-100",leaveTo:"opacity-0"},{default:f(()=>[Lt(e.$slots,"default",{selected:s})]),_:2},1032,["show"])]),_:3}))}});Object.assign({},sre,{Button:rre,Group:ire,List:cre,Panels:dre,Panel:ure});const pre={inheritAttrs:!1},hre=Ce({...pre,__name:"Dialog",props:{size:{default:"md"},open:{type:Boolean,default:!1},staticBackdrop:{type:Boolean}},emits:["close","after-leave"],setup(n,{emit:e}){const a=n,{as:s,onClose:o,staticBackdrop:r,size:i}=a,u=ee(()=>a.open),h=Ot(),m=ee(()=>At(["relative z-[60]",typeof h.class=="string"&&h.class])),p=O(!1),b=e,x=()=>{b("after-leave")},w=$=>{r?(p.value=!0,setTimeout(()=>{p.value=!1},300)):(o&&o($),b("close",$))};return St("dialog",{open:u.value,zoom:p,size:i}),($,D)=>(L(),ge(t(rr),{appear:"",as:"template",show:u.value,onAfterLeave:x},{default:f(()=>[l(t(eN),Ft({as:t(s),onClose:D[0]||(D[0]=V=>{w(V)}),class:m.value},t(Pt).omit(t(h),"class","onClose")),{default:f(()=>[Lt($.$slots,"default")]),_:3},16,["as","class"])]),_:3},8,["show"]))}}),fre={inheritAttrs:!1},mre=Ce({...fre,__name:"Description",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["p-5",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(nN),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3}))}}),vre={inheritAttrs:!1},yre=Ce({...vre,__name:"Footer",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["px-5 py-3 text-right border-t border-slate-200/60 dark:border-darkmode-400",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))}}),_re={inheritAttrs:!1},gre=Ce({..._re,__name:"Panel",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=xt("dialog"),s=Ot(),o=ee(()=>At(["w-[90%] mx-auto bg-white relative rounded-md shadow-md transition-transform dark:bg-darkmode-600",(a==null?void 0:a.size)=="md"&&"sm:w-[460px]",(a==null?void 0:a.size)=="sm"&&"sm:w-[300px]",(a==null?void 0:a.size)=="lg"&&"sm:w-[600px]",(a==null?void 0:a.size)=="xl"&&"sm:w-[600px] lg:w-[900px] xl:w-[1100px]",(a==null?void 0:a.zoom.value)&&"scale-105",typeof s.class=="string"&&s.class]));return(r,i)=>(L(),U(ke,null,[l(t(Gd),{as:"div",enter:"ease-in-out duration-500",enterFrom:"opacity-0",enterTo:"opacity-100",leave:"ease-in-out duration-[400ms]",leaveFrom:"opacity-100",leaveTo:"opacity-0",class:"fixed inset-0 bg-black/60","aria-hidden":"true"}),l(t(Gd),{as:"div",enter:"ease-in-out duration-500",enterFrom:"opacity-0 -mt-16",enterTo:"opacity-100 mt-16",entered:"opacity-100 mt-16",leave:"ease-in-out duration-[400ms]",leaveFrom:"opacity-100 mt-16",leaveTo:"opacity-0 -mt-16",class:"fixed inset-0"},{default:f(()=>[l(t(tN),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:o.value},t(Pt).omit(t(s),"class")),{default:f(()=>[Lt(r.$slots,"default")]),_:3},16,["class"]))]),_:3})]),_:3})],64))}}),kre={inheritAttrs:!1},bre=Ce({...kre,__name:"Title",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["flex items-center px-5 py-3 border-b border-slate-200/60 dark:border-darkmode-400",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(aN),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3}))}}),$t=Object.assign({},hre,{Description:mre,Footer:yre,Panel:gre,Title:bre}),wre=Ce({__name:"Provider",props:{open:{type:Boolean,default:!1},close:{type:Function,default:()=>{}},index:{default:0}},setup(n){const e=n;return St("disclosure",ee(()=>({open:e.open,close:e.close,index:e.index}))),(a,s)=>Lt(a.$slots,"default")}}),xre={inheritAttrs:!1},Mre=Ce({...xre,__name:"Disclosure",props:{index:{default:0}},setup(n){const{index:e}=n,a=xt("group"),s=Ot(),o=ee(()=>At(["py-4 first:-mt-4 last:-mb-4","[&:not(:last-child)]:border-b [&:not(:last-child)]:border-slate-200/60 [&:not(:last-child)]:dark:border-darkmode-400",(a==null?void 0:a.value.variant)=="boxed"&&"p-4 first:mt-0 last:mb-0 border border-slate-200/60 mt-3 dark:border-darkmode-400",typeof s.class=="string"&&s.class]));return(r,i)=>{var u;return L(),ge(t(ooe),Ft({as:"div",defaultOpen:((u=t(a))==null?void 0:u.selectedIndex)===e,class:o.value},t(Pt).omit(t(s),"class")),{default:f(({open:h,close:m})=>[l(wre,{open:h,close:m,index:e},{default:f(()=>[Lt(r.$slots,"default",{open:h,close:m})]),_:2},1032,["open","close"])]),_:3},16,["defaultOpen","class"])}}}),Cre=Ce({__name:"Group",props:{as:{default:"div"},selectedIndex:{default:0},variant:{default:"default"}},setup(n){const e=Oj(),{as:a,selectedIndex:s,variant:o}=n,r=O(s),i=u=>{r.value=u};return St("group",ee(()=>({selectedIndex:r.value,setSelectedIndex:i,variant:o}))),(u,h)=>(L(),ge(Da(a),null,{default:f(()=>[(L(!0),U(ke,null,Fe(t(e).default&&t(e).default(),(m,p)=>(L(),ge(Da(m),{index:p},null,8,["index"]))),256))]),_:1}))}}),Sre={inheritAttrs:!1},Ire=Ce({...Sre,__name:"Button",props:{as:{default:"button"}},setup(n){const{as:e}=n,a=xt("disclosure"),s=xt("group");s&&dt(s,()=>{s.value.selectedIndex!==(a==null?void 0:a.value.index)&&(a==null||a.value.close())});const o=Ot(),r=ee(()=>At(["outline-none py-4 -my-4 font-medium w-full text-left dark:text-slate-400",(a==null?void 0:a.value.open)&&"text-primary dark:text-slate-300",typeof o.class=="string"&&o.class]));return(i,u)=>(L(),ge(t(roe),{as:"template",onClick:u[0]||(u[0]=()=>{var h;t(a)&&((h=t(s))==null||h.setSelectedIndex(t(a).index))})},{default:f(()=>[(L(),ge(Da(e),Ft({class:r.value},t(Pt).omit(t(o),"class")),{default:f(()=>[Lt(i.$slots,"default")]),_:3},16,["class"]))]),_:3}))}}),Lre={inheritAttrs:!1},$re=Ce({...Lre,__name:"Panel",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["mt-3 text-slate-700 leading-relaxed dark:text-slate-400",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(rr),{as:"template",enter:"overflow-hidden transition-all linear duration-[400ms]",enterFrom:"mt-0 max-h-0 invisible opacity-0",enterTo:"mt-3 max-h-[2000px] visible opacity-100",entered:"mt-3",leave:"overflow-hidden transition-all linear duration-500",leaveFrom:"mt-3 max-h-[2000px] visible opacity-100",leaveTo:"mt-0 max-h-0 invisible opacity-0"},{default:f(()=>[l(t(ioe),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3})]),_:3}))}});Object.assign({},Mre,{Group:Cre,Button:Ire,Panel:$re});const Are={inheritAttrs:!1},Ere=Ce({...Are,__name:"Slideover",props:{size:{default:"md"},open:{type:Boolean,default:!1},staticBackdrop:{type:Boolean}},emits:["close"],setup(n,{emit:e}){const a=n,{as:s,onClose:o,staticBackdrop:r,size:i}=a,u=ee(()=>a.open),h=Ot(),m=ee(()=>At(["relative z-[60]",typeof h.class=="string"&&h.class])),p=O(!1),b=e,x=w=>{r?(p.value=!0,setTimeout(()=>{p.value=!1},300)):(o&&o(w),b("close",w))};return St("slideover",{open:u.value,zoom:p,size:i}),(w,$)=>(L(),ge(t(rr),{appear:"",as:"template",show:u.value},{default:f(()=>[l(t(eN),Ft({as:t(s),onClose:$[0]||($[0]=D=>{x(D)}),class:m.value},t(Pt).omit(t(h),"class","onClose")),{default:f(()=>[Lt(w.$slots,"default")]),_:3},16,["as","class"])]),_:3},8,["show"]))}}),Tre={inheritAttrs:!1},Pre=Ce({...Tre,__name:"Description",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["p-5 overflow-y-auto flex-1",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(nN),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3}))}}),Dre={inheritAttrs:!1},Rre=Ce({...Dre,__name:"Footer",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["px-5 py-3 text-right border-t border-slate-200/60 dark:border-darkmode-400",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))}}),Ore={inheritAttrs:!1},Vre=Ce({...Ore,__name:"Panel",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=xt("slideover"),s=Ot(),o=ee(()=>At(["w-[90%] ml-auto h-screen flex flex-col bg-white relative shadow-md transition-transform dark:bg-darkmode-600",(a==null?void 0:a.size)=="md"&&"sm:w-[460px]",(a==null?void 0:a.size)=="sm"&&"sm:w-[300px]",(a==null?void 0:a.size)=="lg"&&"sm:w-[600px]",(a==null?void 0:a.size)=="xl"&&"sm:w-[600px] lg:w-[900px]",(a==null?void 0:a.zoom.value)&&"scale-105",typeof s.class=="string"&&s.class]));return(r,i)=>(L(),U(ke,null,[l(t(Gd),{as:"div",enter:"ease-in-out duration-500",enterFrom:"opacity-0",enterTo:"opacity-100",leave:"ease-in-out duration-[400ms]",leaveFrom:"opacity-100",leaveTo:"opacity-0",class:"fixed inset-0 bg-black/60","aria-hidden":"true"}),l(t(Gd),{as:"div",enter:"ease-in-out duration-500",enterFrom:"opacity-0 -mr-[100%]",enterTo:"opacity-100 mr-0",leave:"ease-in-out duration-[400ms]",leaveFrom:"opacity-100 mr-0",leaveTo:"opacity-0 -mr-[100%]",class:"fixed inset-y-0 right-0"},{default:f(()=>[l(t(tN),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:o.value},t(Pt).omit(t(s),"class")),{default:f(()=>[Lt(r.$slots,"default")]),_:3},16,["class"]))]),_:3})]),_:3})],64))}}),Ure={inheritAttrs:!1},Fre=Ce({...Ure,__name:"Title",props:{as:{default:"div"}},setup(n){const{as:e}=n,a=Ot(),s=ee(()=>At(["flex items-center px-5 py-3 border-b border-slate-200/60 dark:border-darkmode-400",typeof a.class=="string"&&a.class]));return(o,r)=>(L(),ge(t(aN),{as:"template"},{default:f(()=>[(L(),ge(Da(e),Ft({class:s.value},t(Pt).omit(t(a),"class")),{default:f(()=>[Lt(o.$slots,"default")]),_:3},16,["class"]))]),_:3}))}}),Fr=Object.assign({},Ere,{Description:Pre,Footer:Rre,Panel:Vre,Title:Fre}),Za=Qr("userContext",{state:()=>({isLoaded:!1,isAuthenticated:!1,userContext:{id:"",ulid:"",name:"",email:"",email_verified:!1,profile:{first_name:"",last_name:"",address:"",city:"",postal_code:"",country:"",status:"",tax_id:0,ic_num:0,img_path:"",remarks:""},roles:[],companies:[],settings:{theme:"",date_format:"",time_format:""},two_factor:!1,personal_access_tokens:0}}),getters:{getIsLoaded:n=>n.isLoaded,getIsAuthenticated:n=>n.isAuthenticated,getUserContext:n=>n.userContext},actions:{setUserContext(n){this.userContext=n,this.isLoaded=!0,this.isAuthenticated=!0}}}),zt=Qr("selectedUserLocation",{state:()=>({isUserLocationSelected:!1,selectedUserLocation:{company:{id:"",ulid:"",code:"",name:""},branch:{id:"",ulid:"",code:"",name:""}}}),getters:{getSelectedUserLocation:n=>{const e=sessionStorage.getItem("selectedUserLocation");if(e){const a=JSON.parse(e);n.selectedUserLocation=a,n.isUserLocationSelected=!0}return n.selectedUserLocation},getSelectedUserCompany:n=>{const e=sessionStorage.getItem("selectedUserLocation");if(e){const a=JSON.parse(e);n.selectedUserLocation=a,n.isUserLocationSelected=!0}return n.selectedUserLocation.company},getSelectedUserBranch:n=>{const e=sessionStorage.getItem("selectedUserLocation");if(e){const a=JSON.parse(e);n.selectedUserLocation=a,n.isUserLocationSelected=!0}return n.selectedUserLocation.branch}},actions:{clearSelectedUserLocation(){this.selectedUserLocation.company={id:"",ulid:"",code:"",name:""},this.selectedUserLocation.branch={id:"",ulid:"",code:"",name:""},this.isUserLocationSelected=!1},setSelectedUserLocation(n,e,a,s,o,r,i,u){this.clearSelectedUserLocation(),this.selectedUserLocation.company.id=n,this.selectedUserLocation.company.ulid=e,this.selectedUserLocation.company.code=a,this.selectedUserLocation.company.name=s,o&&(this.selectedUserLocation.branch.id=o),r&&(this.selectedUserLocation.branch.ulid=r),i&&(this.selectedUserLocation.branch.code=i),u&&(this.selectedUserLocation.branch.name=u),sessionStorage.setItem("selectedUserLocation",JSON.stringify(this.selectedUserLocation)),this.isUserLocationSelected=!0,window.location.reload()}}});/*! + * shared v9.11.0 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */const gL=typeof window<"u",ei=(n,e=!1)=>e?Symbol.for(n):Symbol(n),jre=(n,e,a)=>Hre({l:n,k:e,s:a}),Hre=n=>JSON.stringify(n).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),wn=n=>typeof n=="number"&&isFinite(n),Nre=n=>mN(n)==="[object Date]",Xr=n=>mN(n)==="[object RegExp]",s9=n=>Gt(n)&&Object.keys(n).length===0,Un=Object.assign;let NV;const Yo=()=>NV||(NV=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function zV(n){return n.replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}const zre=Object.prototype.hasOwnProperty;function kL(n,e){return zre.call(n,e)}const Ga=Array.isArray,Fa=n=>typeof n=="function",bt=n=>typeof n=="string",ia=n=>typeof n=="boolean",Ca=n=>n!==null&&typeof n=="object",Bre=n=>Ca(n)&&Fa(n.then)&&Fa(n.catch),fN=Object.prototype.toString,mN=n=>fN.call(n),Gt=n=>{if(!Ca(n))return!1;const e=Object.getPrototypeOf(n);return e===null||e.constructor===Object},qre=n=>n==null?"":Ga(n)||Gt(n)&&n.toString===fN?JSON.stringify(n,null,2):String(n);function Wre(n,e=""){return n.reduce((a,s,o)=>o===0?a+s:a+e+s,"")}function WT(n){let e=n;return()=>++e}function Gre(n,e){typeof console<"u"&&(console.warn("[intlify] "+n),e&&console.warn(e.stack))}const C1=n=>!Ca(n)||Ga(n);function JI(n,e){if(C1(n)||C1(e))throw new Error("Invalid value");const a=[{src:n,des:e}];for(;a.length;){const{src:s,des:o}=a.pop();Object.keys(s).forEach(r=>{C1(s[r])||C1(o[r])?o[r]=s[r]:a.push({src:s[r],des:o[r]})})}}/*! + * message-compiler v9.11.0 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */function Zre(n,e,a){return{line:n,column:e,offset:a}}function dE(n,e,a){const s={start:n,end:e};return a!=null&&(s.source=a),s}const Kre=/\{([0-9a-zA-Z]+)\}/g;function Xre(n,...e){return e.length===1&&Yre(e[0])&&(e=e[0]),(!e||!e.hasOwnProperty)&&(e={}),n.replace(Kre,(a,s)=>e.hasOwnProperty(s)?e[s]:"")}const vN=Object.assign,BV=n=>typeof n=="string",Yre=n=>n!==null&&typeof n=="object";function yN(n,e=""){return n.reduce((a,s,o)=>o===0?a+s:a+e+s,"")}const Nt={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17},Qre={[Nt.EXPECTED_TOKEN]:"Expected token: '{0}'",[Nt.INVALID_TOKEN_IN_PLACEHOLDER]:"Invalid token in placeholder: '{0}'",[Nt.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]:"Unterminated single quote in placeholder",[Nt.UNKNOWN_ESCAPE_SEQUENCE]:"Unknown escape sequence: \\{0}",[Nt.INVALID_UNICODE_ESCAPE_SEQUENCE]:"Invalid unicode escape sequence: {0}",[Nt.UNBALANCED_CLOSING_BRACE]:"Unbalanced closing brace",[Nt.UNTERMINATED_CLOSING_BRACE]:"Unterminated closing brace",[Nt.EMPTY_PLACEHOLDER]:"Empty placeholder",[Nt.NOT_ALLOW_NEST_PLACEHOLDER]:"Not allowed nest placeholder",[Nt.INVALID_LINKED_FORMAT]:"Invalid linked format",[Nt.MUST_HAVE_MESSAGES_IN_PLURAL]:"Plural must have messages",[Nt.UNEXPECTED_EMPTY_LINKED_MODIFIER]:"Unexpected empty linked modifier",[Nt.UNEXPECTED_EMPTY_LINKED_KEY]:"Unexpected empty linked key",[Nt.UNEXPECTED_LEXICAL_ANALYSIS]:"Unexpected lexical analysis in token: '{0}'",[Nt.UNHANDLED_CODEGEN_NODE_TYPE]:"unhandled codegen node type: '{0}'",[Nt.UNHANDLED_MINIFIER_NODE_TYPE]:"unhandled mimifier node type: '{0}'"};function Vc(n,e,a={}){const{domain:s,messages:o,args:r}=a,i=Xre((o||Qre)[n]||"",...r||[]),u=new SyntaxError(String(i));return u.code=n,e&&(u.location=e),u.domain=s,u}function Jre(n){throw n}const Go=" ",eie="\r",Zn=` +`,tie="\u2028",aie="\u2029";function nie(n){const e=n;let a=0,s=1,o=1,r=0;const i=g=>e[g]===eie&&e[g+1]===Zn,u=g=>e[g]===Zn,h=g=>e[g]===aie,m=g=>e[g]===tie,p=g=>i(g)||u(g)||h(g)||m(g),b=()=>a,x=()=>s,w=()=>o,$=()=>r,D=g=>i(g)||h(g)||m(g)?Zn:e[g],V=()=>D(a),R=()=>D(a+r);function E(){return r=0,p(a)&&(s++,o=0),i(a)&&a++,a++,o++,e[a]}function P(){return i(a+r)&&r++,r++,e[a+r]}function S(){a=0,s=1,o=1,r=0}function C(g=0){r=g}function M(){const g=a+r;for(;g!==a;)E();r=0}return{index:b,line:x,column:w,peekOffset:$,charAt:D,currentChar:V,currentPeek:R,next:E,peek:P,reset:S,resetPeek:C,skipToPeek:M}}const Ir=void 0,sie=".",qV="'",oie="tokenizer";function rie(n,e={}){const a=e.location!==!1,s=nie(n),o=()=>s.index(),r=()=>Zre(s.line(),s.column(),s.index()),i=r(),u=o(),h={currentType:14,offset:u,startLoc:i,endLoc:i,lastType:14,lastOffset:u,lastStartLoc:i,lastEndLoc:i,braceNest:0,inLinked:!1,text:""},m=()=>h,{onError:p}=e;function b(H,N,Q,...he){const Se=m();if(N.column+=Q,N.offset+=Q,p){const Re=a?dE(Se.startLoc,N):null,Ze=Vc(H,Re,{domain:oie,args:he});p(Ze)}}function x(H,N,Q){H.endLoc=r(),H.currentType=N;const he={type:N};return a&&(he.loc=dE(H.startLoc,H.endLoc)),Q!=null&&(he.value=Q),he}const w=H=>x(H,14);function $(H,N){return H.currentChar()===N?(H.next(),N):(b(Nt.EXPECTED_TOKEN,r(),0,N),"")}function D(H){let N="";for(;H.currentPeek()===Go||H.currentPeek()===Zn;)N+=H.currentPeek(),H.peek();return N}function V(H){const N=D(H);return H.skipToPeek(),N}function R(H){if(H===Ir)return!1;const N=H.charCodeAt(0);return N>=97&&N<=122||N>=65&&N<=90||N===95}function E(H){if(H===Ir)return!1;const N=H.charCodeAt(0);return N>=48&&N<=57}function P(H,N){const{currentType:Q}=N;if(Q!==2)return!1;D(H);const he=R(H.currentPeek());return H.resetPeek(),he}function S(H,N){const{currentType:Q}=N;if(Q!==2)return!1;D(H);const he=H.currentPeek()==="-"?H.peek():H.currentPeek(),Se=E(he);return H.resetPeek(),Se}function C(H,N){const{currentType:Q}=N;if(Q!==2)return!1;D(H);const he=H.currentPeek()===qV;return H.resetPeek(),he}function M(H,N){const{currentType:Q}=N;if(Q!==8)return!1;D(H);const he=H.currentPeek()===".";return H.resetPeek(),he}function g(H,N){const{currentType:Q}=N;if(Q!==9)return!1;D(H);const he=R(H.currentPeek());return H.resetPeek(),he}function v(H,N){const{currentType:Q}=N;if(!(Q===8||Q===12))return!1;D(H);const he=H.currentPeek()===":";return H.resetPeek(),he}function T(H,N){const{currentType:Q}=N;if(Q!==10)return!1;const he=()=>{const Re=H.currentPeek();return Re==="{"?R(H.peek()):Re==="@"||Re==="%"||Re==="|"||Re===":"||Re==="."||Re===Go||!Re?!1:Re===Zn?(H.peek(),he()):R(Re)},Se=he();return H.resetPeek(),Se}function j(H){D(H);const N=H.currentPeek()==="|";return H.resetPeek(),N}function B(H){const N=D(H),Q=H.currentPeek()==="%"&&H.peek()==="{";return H.resetPeek(),{isModulo:Q,hasSpace:N.length>0}}function oe(H,N=!0){const Q=(Se=!1,Re="",Ze=!1)=>{const ze=H.currentPeek();return ze==="{"?Re==="%"?!1:Se:ze==="@"||!ze?Re==="%"?!0:Se:ze==="%"?(H.peek(),Q(Se,"%",!0)):ze==="|"?Re==="%"||Ze?!0:!(Re===Go||Re===Zn):ze===Go?(H.peek(),Q(!0,Go,Ze)):ze===Zn?(H.peek(),Q(!0,Zn,Ze)):!0},he=Q();return N&&H.resetPeek(),he}function be(H,N){const Q=H.currentChar();return Q===Ir?Ir:N(Q)?(H.next(),Q):null}function $e(H){return be(H,Q=>{const he=Q.charCodeAt(0);return he>=97&&he<=122||he>=65&&he<=90||he>=48&&he<=57||he===95||he===36})}function Le(H){return be(H,Q=>{const he=Q.charCodeAt(0);return he>=48&&he<=57})}function de(H){return be(H,Q=>{const he=Q.charCodeAt(0);return he>=48&&he<=57||he>=65&&he<=70||he>=97&&he<=102})}function J(H){let N="",Q="";for(;N=Le(H);)Q+=N;return Q}function G(H){V(H);const N=H.currentChar();return N!=="%"&&b(Nt.EXPECTED_TOKEN,r(),0,N),H.next(),"%"}function ce(H){let N="";for(;;){const Q=H.currentChar();if(Q==="{"||Q==="}"||Q==="@"||Q==="|"||!Q)break;if(Q==="%")if(oe(H))N+=Q,H.next();else break;else if(Q===Go||Q===Zn)if(oe(H))N+=Q,H.next();else{if(j(H))break;N+=Q,H.next()}else N+=Q,H.next()}return N}function Ee(H){V(H);let N="",Q="";for(;N=$e(H);)Q+=N;return H.currentChar()===Ir&&b(Nt.UNTERMINATED_CLOSING_BRACE,r(),0),Q}function He(H){V(H);let N="";return H.currentChar()==="-"?(H.next(),N+=`-${J(H)}`):N+=J(H),H.currentChar()===Ir&&b(Nt.UNTERMINATED_CLOSING_BRACE,r(),0),N}function Ke(H){V(H),$(H,"'");let N="",Q="";const he=Re=>Re!==qV&&Re!==Zn;for(;N=be(H,he);)N==="\\"?Q+=pt(H):Q+=N;const Se=H.currentChar();return Se===Zn||Se===Ir?(b(Nt.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,r(),0),Se===Zn&&(H.next(),$(H,"'")),Q):($(H,"'"),Q)}function pt(H){const N=H.currentChar();switch(N){case"\\":case"'":return H.next(),`\\${N}`;case"u":return ut(H,N,4);case"U":return ut(H,N,6);default:return b(Nt.UNKNOWN_ESCAPE_SEQUENCE,r(),0,N),""}}function ut(H,N,Q){$(H,N);let he="";for(let Se=0;SeSe!=="{"&&Se!=="}"&&Se!==Go&&Se!==Zn;for(;N=be(H,he);)Q+=N;return Q}function kt(H){let N="",Q="";for(;N=$e(H);)Q+=N;return Q}function Ae(H){const N=(Q=!1,he)=>{const Se=H.currentChar();return Se==="{"||Se==="%"||Se==="@"||Se==="|"||Se==="("||Se===")"||!Se||Se===Go?he:Se===Zn||Se===sie?(he+=Se,H.next(),N(Q,he)):(he+=Se,H.next(),N(!0,he))};return N(!1,"")}function Xe(H){V(H);const N=$(H,"|");return V(H),N}function ie(H,N){let Q=null;switch(H.currentChar()){case"{":return N.braceNest>=1&&b(Nt.NOT_ALLOW_NEST_PLACEHOLDER,r(),0),H.next(),Q=x(N,2,"{"),V(H),N.braceNest++,Q;case"}":return N.braceNest>0&&N.currentType===2&&b(Nt.EMPTY_PLACEHOLDER,r(),0),H.next(),Q=x(N,3,"}"),N.braceNest--,N.braceNest>0&&V(H),N.inLinked&&N.braceNest===0&&(N.inLinked=!1),Q;case"@":return N.braceNest>0&&b(Nt.UNTERMINATED_CLOSING_BRACE,r(),0),Q=Y(H,N)||w(N),N.braceNest=0,Q;default:{let Se=!0,Re=!0,Ze=!0;if(j(H))return N.braceNest>0&&b(Nt.UNTERMINATED_CLOSING_BRACE,r(),0),Q=x(N,1,Xe(H)),N.braceNest=0,N.inLinked=!1,Q;if(N.braceNest>0&&(N.currentType===5||N.currentType===6||N.currentType===7))return b(Nt.UNTERMINATED_CLOSING_BRACE,r(),0),N.braceNest=0,ue(H,N);if(Se=P(H,N))return Q=x(N,5,Ee(H)),V(H),Q;if(Re=S(H,N))return Q=x(N,6,He(H)),V(H),Q;if(Ze=C(H,N))return Q=x(N,7,Ke(H)),V(H),Q;if(!Se&&!Re&&!Ze)return Q=x(N,13,ft(H)),b(Nt.INVALID_TOKEN_IN_PLACEHOLDER,r(),0,Q.value),V(H),Q;break}}return Q}function Y(H,N){const{currentType:Q}=N;let he=null;const Se=H.currentChar();switch((Q===8||Q===9||Q===12||Q===10)&&(Se===Zn||Se===Go)&&b(Nt.INVALID_LINKED_FORMAT,r(),0),Se){case"@":return H.next(),he=x(N,8,"@"),N.inLinked=!0,he;case".":return V(H),H.next(),x(N,9,".");case":":return V(H),H.next(),x(N,10,":");default:return j(H)?(he=x(N,1,Xe(H)),N.braceNest=0,N.inLinked=!1,he):M(H,N)||v(H,N)?(V(H),Y(H,N)):g(H,N)?(V(H),x(N,12,kt(H))):T(H,N)?(V(H),Se==="{"?ie(H,N)||he:x(N,11,Ae(H))):(Q===8&&b(Nt.INVALID_LINKED_FORMAT,r(),0),N.braceNest=0,N.inLinked=!1,ue(H,N))}}function ue(H,N){let Q={type:14};if(N.braceNest>0)return ie(H,N)||w(N);if(N.inLinked)return Y(H,N)||w(N);switch(H.currentChar()){case"{":return ie(H,N)||w(N);case"}":return b(Nt.UNBALANCED_CLOSING_BRACE,r(),0),H.next(),x(N,3,"}");case"@":return Y(H,N)||w(N);default:{if(j(H))return Q=x(N,1,Xe(H)),N.braceNest=0,N.inLinked=!1,Q;const{isModulo:Se,hasSpace:Re}=B(H);if(Se)return Re?x(N,0,ce(H)):x(N,4,G(H));if(oe(H))return x(N,0,ce(H));break}}return Q}function pe(){const{currentType:H,offset:N,startLoc:Q,endLoc:he}=h;return h.lastType=H,h.lastOffset=N,h.lastStartLoc=Q,h.lastEndLoc=he,h.offset=o(),h.startLoc=r(),s.currentChar()===Ir?x(h,14):ue(s,h)}return{nextToken:pe,currentOffset:o,currentPosition:r,context:m}}const iie="parser",lie=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function cie(n,e,a){switch(n){case"\\\\":return"\\";case"\\'":return"'";default:{const s=parseInt(e||a,16);return s<=55295||s>=57344?String.fromCodePoint(s):"�"}}}function die(n={}){const e=n.location!==!1,{onError:a}=n;function s(R,E,P,S,...C){const M=R.currentPosition();if(M.offset+=S,M.column+=S,a){const g=e?dE(P,M):null,v=Vc(E,g,{domain:iie,args:C});a(v)}}function o(R,E,P){const S={type:R};return e&&(S.start=E,S.end=E,S.loc={start:P,end:P}),S}function r(R,E,P,S){S&&(R.type=S),e&&(R.end=E,R.loc&&(R.loc.end=P))}function i(R,E){const P=R.context(),S=o(3,P.offset,P.startLoc);return S.value=E,r(S,R.currentOffset(),R.currentPosition()),S}function u(R,E){const P=R.context(),{lastOffset:S,lastStartLoc:C}=P,M=o(5,S,C);return M.index=parseInt(E,10),R.nextToken(),r(M,R.currentOffset(),R.currentPosition()),M}function h(R,E){const P=R.context(),{lastOffset:S,lastStartLoc:C}=P,M=o(4,S,C);return M.key=E,R.nextToken(),r(M,R.currentOffset(),R.currentPosition()),M}function m(R,E){const P=R.context(),{lastOffset:S,lastStartLoc:C}=P,M=o(9,S,C);return M.value=E.replace(lie,cie),R.nextToken(),r(M,R.currentOffset(),R.currentPosition()),M}function p(R){const E=R.nextToken(),P=R.context(),{lastOffset:S,lastStartLoc:C}=P,M=o(8,S,C);return E.type!==12?(s(R,Nt.UNEXPECTED_EMPTY_LINKED_MODIFIER,P.lastStartLoc,0),M.value="",r(M,S,C),{nextConsumeToken:E,node:M}):(E.value==null&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,P.lastStartLoc,0,mo(E)),M.value=E.value||"",r(M,R.currentOffset(),R.currentPosition()),{node:M})}function b(R,E){const P=R.context(),S=o(7,P.offset,P.startLoc);return S.value=E,r(S,R.currentOffset(),R.currentPosition()),S}function x(R){const E=R.context(),P=o(6,E.offset,E.startLoc);let S=R.nextToken();if(S.type===9){const C=p(R);P.modifier=C.node,S=C.nextConsumeToken||R.nextToken()}switch(S.type!==10&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,mo(S)),S=R.nextToken(),S.type===2&&(S=R.nextToken()),S.type){case 11:S.value==null&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,mo(S)),P.key=b(R,S.value||"");break;case 5:S.value==null&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,mo(S)),P.key=h(R,S.value||"");break;case 6:S.value==null&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,mo(S)),P.key=u(R,S.value||"");break;case 7:S.value==null&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,mo(S)),P.key=m(R,S.value||"");break;default:{s(R,Nt.UNEXPECTED_EMPTY_LINKED_KEY,E.lastStartLoc,0);const C=R.context(),M=o(7,C.offset,C.startLoc);return M.value="",r(M,C.offset,C.startLoc),P.key=M,r(P,C.offset,C.startLoc),{nextConsumeToken:S,node:P}}}return r(P,R.currentOffset(),R.currentPosition()),{node:P}}function w(R){const E=R.context(),P=E.currentType===1?R.currentOffset():E.offset,S=E.currentType===1?E.endLoc:E.startLoc,C=o(2,P,S);C.items=[];let M=null;do{const T=M||R.nextToken();switch(M=null,T.type){case 0:T.value==null&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,mo(T)),C.items.push(i(R,T.value||""));break;case 6:T.value==null&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,mo(T)),C.items.push(u(R,T.value||""));break;case 5:T.value==null&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,mo(T)),C.items.push(h(R,T.value||""));break;case 7:T.value==null&&s(R,Nt.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,mo(T)),C.items.push(m(R,T.value||""));break;case 8:{const j=x(R);C.items.push(j.node),M=j.nextConsumeToken||null;break}}}while(E.currentType!==14&&E.currentType!==1);const g=E.currentType===1?E.lastOffset:R.currentOffset(),v=E.currentType===1?E.lastEndLoc:R.currentPosition();return r(C,g,v),C}function $(R,E,P,S){const C=R.context();let M=S.items.length===0;const g=o(1,E,P);g.cases=[],g.cases.push(S);do{const v=w(R);M||(M=v.items.length===0),g.cases.push(v)}while(C.currentType!==14);return M&&s(R,Nt.MUST_HAVE_MESSAGES_IN_PLURAL,P,0),r(g,R.currentOffset(),R.currentPosition()),g}function D(R){const E=R.context(),{offset:P,startLoc:S}=E,C=w(R);return E.currentType===14?C:$(R,P,S,C)}function V(R){const E=rie(R,vN({},n)),P=E.context(),S=o(0,P.offset,P.startLoc);return e&&S.loc&&(S.loc.source=R),S.body=D(E),n.onCacheKey&&(S.cacheKey=n.onCacheKey(R)),P.currentType!==14&&s(E,Nt.UNEXPECTED_LEXICAL_ANALYSIS,P.lastStartLoc,0,R[P.offset]||""),r(S,E.currentOffset(),E.currentPosition()),S}return{parse:V}}function mo(n){if(n.type===14)return"EOF";const e=(n.value||"").replace(/\r?\n/gu,"\\n");return e.length>10?e.slice(0,9)+"…":e}function uie(n,e={}){const a={ast:n,helpers:new Set};return{context:()=>a,helper:r=>(a.helpers.add(r),r)}}function WV(n,e){for(let a=0;aGV(a)),n}function GV(n){if(n.items.length===1){const e=n.items[0];(e.type===3||e.type===9)&&(n.static=e.value,delete e.value)}else{const e=[];for(let a=0;au;function m(V,R){u.code+=V}function p(V,R=!0){const E=R?o:"";m(r?E+" ".repeat(V):E)}function b(V=!0){const R=++u.indentLevel;V&&p(R)}function x(V=!0){const R=--u.indentLevel;V&&p(R)}function w(){p(u.indentLevel)}return{context:h,push:m,indent:b,deindent:x,newline:w,helper:V=>`_${V}`,needIndent:()=>u.needIndent}}function yie(n,e){const{helper:a}=n;n.push(`${a("linked")}(`),Ic(n,e.key),e.modifier?(n.push(", "),Ic(n,e.modifier),n.push(", _type")):n.push(", undefined, _type"),n.push(")")}function _ie(n,e){const{helper:a,needIndent:s}=n;n.push(`${a("normalize")}([`),n.indent(s());const o=e.items.length;for(let r=0;r1){n.push(`${a("plural")}([`),n.indent(s());const o=e.cases.length;for(let r=0;r{const a=BV(e.mode)?e.mode:"normal",s=BV(e.filename)?e.filename:"message.intl",o=!!e.sourceMap,r=e.breakLineCode!=null?e.breakLineCode:a==="arrow"?";":` +`,i=e.needIndent?e.needIndent:a!=="arrow",u=n.helpers||[],h=vie(n,{mode:a,filename:s,sourceMap:o,breakLineCode:r,needIndent:i});h.push(a==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),h.indent(i),u.length>0&&(h.push(`const { ${yN(u.map(b=>`${b}: _${b}`),", ")} } = ctx`),h.newline()),h.push("return "),Ic(h,n),h.deindent(i),h.push("}"),delete n.helpers;const{code:m,map:p}=h.context();return{ast:n,code:m,map:p?p.toJSON():void 0}};function wie(n,e={}){const a=vN({},e),s=!!a.jit,o=!!a.minify,r=a.optimize==null?!0:a.optimize,u=die(a).parse(n);return s?(r&&hie(u),o&&cc(u),{ast:u,code:""}):(pie(u,a),bie(u,a))}/*! + * core-base v9.11.0 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */function xie(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Yo().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(Yo().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Yo().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}const ti=[];ti[0]={w:[0],i:[3,0],"[":[4],o:[7]};ti[1]={w:[1],".":[2],"[":[4],o:[7]};ti[2]={w:[2],i:[3,0],0:[3,0]};ti[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]};ti[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]};ti[5]={"'":[4,0],o:8,l:[5,0]};ti[6]={'"':[4,0],o:8,l:[6,0]};const Mie=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function Cie(n){return Mie.test(n)}function Sie(n){const e=n.charCodeAt(0),a=n.charCodeAt(n.length-1);return e===a&&(e===34||e===39)?n.slice(1,-1):n}function Iie(n){if(n==null)return"o";switch(n.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return n;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function Lie(n){const e=n.trim();return n.charAt(0)==="0"&&isNaN(parseInt(n))?!1:Cie(e)?Sie(e):"*"+e}function $ie(n){const e=[];let a=-1,s=0,o=0,r,i,u,h,m,p,b;const x=[];x[0]=()=>{i===void 0?i=u:i+=u},x[1]=()=>{i!==void 0&&(e.push(i),i=void 0)},x[2]=()=>{x[0](),o++},x[3]=()=>{if(o>0)o--,s=4,x[0]();else{if(o=0,i===void 0||(i=Lie(i),i===!1))return!1;x[1]()}};function w(){const $=n[a+1];if(s===5&&$==="'"||s===6&&$==='"')return a++,u="\\"+$,x[0](),!0}for(;s!==null;)if(a++,r=n[a],!(r==="\\"&&w())){if(h=Iie(r),b=ti[s],m=b[h]||b.l||8,m===8||(s=m[0],m[1]!==void 0&&(p=x[m[1]],p&&(u=r,p()===!1))))return;if(s===7)return e}}const ZV=new Map;function Aie(n,e){return Ca(n)?n[e]:null}function Eie(n,e){if(!Ca(n))return null;let a=ZV.get(e);if(a||(a=$ie(e),a&&ZV.set(e,a)),!a)return null;const s=a.length;let o=n,r=0;for(;rn,Pie=n=>"",Die="text",Rie=n=>n.length===0?"":Wre(n),Oie=qre;function KV(n,e){return n=Math.abs(n),e===2?n?n>1?1:0:1:n?Math.min(n,2):0}function Vie(n){const e=wn(n.pluralIndex)?n.pluralIndex:-1;return n.named&&(wn(n.named.count)||wn(n.named.n))?wn(n.named.count)?n.named.count:wn(n.named.n)?n.named.n:e:e}function Uie(n,e){e.count||(e.count=n),e.n||(e.n=n)}function Fie(n={}){const e=n.locale,a=Vie(n),s=Ca(n.pluralRules)&&bt(e)&&Fa(n.pluralRules[e])?n.pluralRules[e]:KV,o=Ca(n.pluralRules)&&bt(e)&&Fa(n.pluralRules[e])?KV:void 0,r=R=>R[s(a,R.length,o)],i=n.list||[],u=R=>i[R],h=n.named||{};wn(n.pluralIndex)&&Uie(a,h);const m=R=>h[R];function p(R){const E=Fa(n.messages)?n.messages(R):Ca(n.messages)?n.messages[R]:!1;return E||(n.parent?n.parent.message(R):Pie)}const b=R=>n.modifiers?n.modifiers[R]:Tie,x=Gt(n.processor)&&Fa(n.processor.normalize)?n.processor.normalize:Rie,w=Gt(n.processor)&&Fa(n.processor.interpolate)?n.processor.interpolate:Oie,$=Gt(n.processor)&&bt(n.processor.type)?n.processor.type:Die,V={list:u,named:m,plural:r,linked:(R,...E)=>{const[P,S]=E;let C="text",M="";E.length===1?Ca(P)?(M=P.modifier||M,C=P.type||C):bt(P)&&(M=P||M):E.length===2&&(bt(P)&&(M=P||M),bt(S)&&(C=S||C));const g=p(R)(V),v=C==="vnode"&&Ga(g)&&M?g[0]:g;return M?b(M)(v,C):v},message:p,type:$,interpolate:w,normalize:x,values:Un({},i,h)};return V}let Zd=null;function jie(n){Zd=n}function Hie(n,e,a){Zd&&Zd.emit("i18n:init",{timestamp:Date.now(),i18n:n,version:e,meta:a})}const Nie=zie("function:translate");function zie(n){return e=>Zd&&Zd.emit(n,e)}const Bie={NOT_FOUND_KEY:1,FALLBACK_TO_TRANSLATE:2,CANNOT_FORMAT_NUMBER:3,FALLBACK_TO_NUMBER_FORMAT:4,CANNOT_FORMAT_DATE:5,FALLBACK_TO_DATE_FORMAT:6,EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:7,__EXTEND_POINT__:8},_N=Nt.__EXTEND_POINT__,vi=WT(_N),no={INVALID_ARGUMENT:_N,INVALID_DATE_ARGUMENT:vi(),INVALID_ISO_DATE_ARGUMENT:vi(),NOT_SUPPORT_NON_STRING_MESSAGE:vi(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:vi(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:vi(),NOT_SUPPORT_LOCALE_TYPE:vi(),__EXTEND_POINT__:vi()};function xo(n){return Vc(n,null,void 0)}function ZT(n,e){return e.locale!=null?XV(e.locale):XV(n.locale)}let tA;function XV(n){if(bt(n))return n;if(Fa(n)){if(n.resolvedOnce&&tA!=null)return tA;if(n.constructor.name==="Function"){const e=n();if(Bre(e))throw xo(no.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return tA=e}else throw xo(no.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw xo(no.NOT_SUPPORT_LOCALE_TYPE)}function qie(n,e,a){return[...new Set([a,...Ga(e)?e:Ca(e)?Object.keys(e):bt(e)?[e]:[a]])]}function gN(n,e,a){const s=bt(a)?a:Lc,o=n;o.__localeChainCache||(o.__localeChainCache=new Map);let r=o.__localeChainCache.get(s);if(!r){r=[];let i=[a];for(;Ga(i);)i=YV(r,i,e);const u=Ga(e)||!Gt(e)?e:e.default?e.default:null;i=bt(u)?[u]:u,Ga(i)&&YV(r,i,!1),o.__localeChainCache.set(s,r)}return r}function YV(n,e,a){let s=!0;for(let o=0;o`${n.charAt(0).toLocaleUpperCase()}${n.substr(1)}`;function Kie(){return{upper:(n,e)=>e==="text"&&bt(n)?n.toUpperCase():e==="vnode"&&Ca(n)&&"__v_isVNode"in n?n.children.toUpperCase():n,lower:(n,e)=>e==="text"&&bt(n)?n.toLowerCase():e==="vnode"&&Ca(n)&&"__v_isVNode"in n?n.children.toLowerCase():n,capitalize:(n,e)=>e==="text"&&bt(n)?JV(n):e==="vnode"&&Ca(n)&&"__v_isVNode"in n?JV(n.children):n}}let kN;function eU(n){kN=n}let bN;function Xie(n){bN=n}let wN;function Yie(n){wN=n}let xN=null;const Qie=n=>{xN=n},Jie=()=>xN;let MN=null;const tU=n=>{MN=n},ele=()=>MN;let aU=0;function tle(n={}){const e=Fa(n.onWarn)?n.onWarn:Gre,a=bt(n.version)?n.version:Zie,s=bt(n.locale)||Fa(n.locale)?n.locale:Lc,o=Fa(s)?Lc:s,r=Ga(n.fallbackLocale)||Gt(n.fallbackLocale)||bt(n.fallbackLocale)||n.fallbackLocale===!1?n.fallbackLocale:o,i=Gt(n.messages)?n.messages:{[o]:{}},u=Gt(n.datetimeFormats)?n.datetimeFormats:{[o]:{}},h=Gt(n.numberFormats)?n.numberFormats:{[o]:{}},m=Un({},n.modifiers||{},Kie()),p=n.pluralRules||{},b=Fa(n.missing)?n.missing:null,x=ia(n.missingWarn)||Xr(n.missingWarn)?n.missingWarn:!0,w=ia(n.fallbackWarn)||Xr(n.fallbackWarn)?n.fallbackWarn:!0,$=!!n.fallbackFormat,D=!!n.unresolving,V=Fa(n.postTranslation)?n.postTranslation:null,R=Gt(n.processor)?n.processor:null,E=ia(n.warnHtmlMessage)?n.warnHtmlMessage:!0,P=!!n.escapeParameter,S=Fa(n.messageCompiler)?n.messageCompiler:kN,C=Fa(n.messageResolver)?n.messageResolver:bN||Aie,M=Fa(n.localeFallbacker)?n.localeFallbacker:wN||qie,g=Ca(n.fallbackContext)?n.fallbackContext:void 0,v=n,T=Ca(v.__datetimeFormatters)?v.__datetimeFormatters:new Map,j=Ca(v.__numberFormatters)?v.__numberFormatters:new Map,B=Ca(v.__meta)?v.__meta:{};aU++;const oe={version:a,cid:aU,locale:s,fallbackLocale:r,messages:i,modifiers:m,pluralRules:p,missing:b,missingWarn:x,fallbackWarn:w,fallbackFormat:$,unresolving:D,postTranslation:V,processor:R,warnHtmlMessage:E,escapeParameter:P,messageCompiler:S,messageResolver:C,localeFallbacker:M,fallbackContext:g,onWarn:e,__meta:B};return oe.datetimeFormats=u,oe.numberFormats=h,oe.__datetimeFormatters=T,oe.__numberFormatters=j,__INTLIFY_PROD_DEVTOOLS__&&Hie(oe,a,B),oe}function KT(n,e,a,s,o){const{missing:r,onWarn:i}=n;if(r!==null){const u=r(n,a,e,o);return bt(u)?u:e}else return e}function hd(n,e,a){const s=n;s.__localeChainCache=new Map,n.localeFallbacker(n,a,e)}function aA(n){return a=>ale(a,n)}function ale(n,e){const a=e.b||e.body;if((a.t||a.type)===1){const s=a,o=s.c||s.cases;return n.plural(o.reduce((r,i)=>[...r,nU(n,i)],[]))}else return nU(n,a)}function nU(n,e){const a=e.s||e.static;if(a)return n.type==="text"?a:n.normalize([a]);{const s=(e.i||e.items).reduce((o,r)=>[...o,uE(n,r)],[]);return n.normalize(s)}}function uE(n,e){const a=e.t||e.type;switch(a){case 3:{const s=e;return s.v||s.value}case 9:{const s=e;return s.v||s.value}case 4:{const s=e;return n.interpolate(n.named(s.k||s.key))}case 5:{const s=e;return n.interpolate(n.list(s.i!=null?s.i:s.index))}case 6:{const s=e,o=s.m||s.modifier;return n.linked(uE(n,s.k||s.key),o?uE(n,o):void 0,n.type)}case 7:{const s=e;return s.v||s.value}case 8:{const s=e;return s.v||s.value}default:throw new Error(`unhandled node type on format message part: ${a}`)}}const CN=n=>n;let uc=Object.create(null);const $c=n=>Ca(n)&&(n.t===0||n.type===0)&&("b"in n||"body"in n);function SN(n,e={}){let a=!1;const s=e.onError||Jre;return e.onError=o=>{a=!0,s(o)},{...wie(n,e),detectError:a}}const nle=(n,e)=>{if(!bt(n))throw xo(no.NOT_SUPPORT_NON_STRING_MESSAGE);{ia(e.warnHtmlMessage)&&e.warnHtmlMessage;const s=(e.onCacheKey||CN)(n),o=uc[s];if(o)return o;const{code:r,detectError:i}=SN(n,e),u=new Function(`return ${r}`)();return i?u:uc[s]=u}};function sle(n,e){if(__INTLIFY_JIT_COMPILATION__&&!__INTLIFY_DROP_MESSAGE_COMPILER__&&bt(n)){ia(e.warnHtmlMessage)&&e.warnHtmlMessage;const s=(e.onCacheKey||CN)(n),o=uc[s];if(o)return o;const{ast:r,detectError:i}=SN(n,{...e,location:!1,jit:!0}),u=aA(r);return i?u:uc[s]=u}else{const a=n.cacheKey;if(a){const s=uc[a];return s||(uc[a]=aA(n))}else return aA(n)}}const sU=()=>"",Rs=n=>Fa(n);function oU(n,...e){const{fallbackFormat:a,postTranslation:s,unresolving:o,messageCompiler:r,fallbackLocale:i,messages:u}=n,[h,m]=pE(...e),p=ia(m.missingWarn)?m.missingWarn:n.missingWarn,b=ia(m.fallbackWarn)?m.fallbackWarn:n.fallbackWarn,x=ia(m.escapeParameter)?m.escapeParameter:n.escapeParameter,w=!!m.resolvedMessage,$=bt(m.default)||ia(m.default)?ia(m.default)?r?h:()=>h:m.default:a?r?h:()=>h:"",D=a||$!=="",V=ZT(n,m);x&&ole(m);let[R,E,P]=w?[h,V,u[V]||{}]:IN(n,h,V,i,b,p),S=R,C=h;if(!w&&!(bt(S)||$c(S)||Rs(S))&&D&&(S=$,C=S),!w&&(!(bt(S)||$c(S)||Rs(S))||!bt(E)))return o?o9:h;let M=!1;const g=()=>{M=!0},v=Rs(S)?S:LN(n,h,E,S,C,g);if(M)return S;const T=lle(n,E,P,m),j=Fie(T),B=rle(n,v,j),oe=s?s(B,h):B;if(__INTLIFY_PROD_DEVTOOLS__){const be={timestamp:Date.now(),key:bt(h)?h:Rs(S)?S.key:"",locale:E||(Rs(S)?S.locale:""),format:bt(S)?S:Rs(S)?S.source:"",message:oe};be.meta=Un({},n.__meta,Jie()||{}),Nie(be)}return oe}function ole(n){Ga(n.list)?n.list=n.list.map(e=>bt(e)?zV(e):e):Ca(n.named)&&Object.keys(n.named).forEach(e=>{bt(n.named[e])&&(n.named[e]=zV(n.named[e]))})}function IN(n,e,a,s,o,r){const{messages:i,onWarn:u,messageResolver:h,localeFallbacker:m}=n,p=m(n,s,a);let b={},x,w=null;const $="translate";for(let D=0;Ds;return m.locale=a,m.key=e,m}const h=i(s,ile(n,a,o,s,u,r));return h.locale=a,h.key=e,h.source=s,h}function rle(n,e,a){return e(a)}function pE(...n){const[e,a,s]=n,o={};if(!bt(e)&&!wn(e)&&!Rs(e)&&!$c(e))throw xo(no.INVALID_ARGUMENT);const r=wn(e)?String(e):(Rs(e),e);return wn(a)?o.plural=a:bt(a)?o.default=a:Gt(a)&&!s9(a)?o.named=a:Ga(a)&&(o.list=a),wn(s)?o.plural=s:bt(s)?o.default=s:Gt(s)&&Un(o,s),[r,o]}function ile(n,e,a,s,o,r){return{locale:e,key:a,warnHtmlMessage:o,onError:i=>{throw r&&r(i),i},onCacheKey:i=>jre(e,a,i)}}function lle(n,e,a,s){const{modifiers:o,pluralRules:r,messageResolver:i,fallbackLocale:u,fallbackWarn:h,missingWarn:m,fallbackContext:p}=n,x={locale:e,modifiers:o,pluralRules:r,messages:w=>{let $=i(a,w);if($==null&&p){const[,,D]=IN(p,w,e,u,h,m);$=i(D,w)}if(bt($)||$c($)){let D=!1;const R=LN(n,w,e,$,w,()=>{D=!0});return D?sU:R}else return Rs($)?$:sU}};return n.processor&&(x.processor=n.processor),s.list&&(x.list=s.list),s.named&&(x.named=s.named),wn(s.plural)&&(x.pluralIndex=s.plural),x}function rU(n,...e){const{datetimeFormats:a,unresolving:s,fallbackLocale:o,onWarn:r,localeFallbacker:i}=n,{__datetimeFormatters:u}=n,[h,m,p,b]=hE(...e),x=ia(p.missingWarn)?p.missingWarn:n.missingWarn;ia(p.fallbackWarn)?p.fallbackWarn:n.fallbackWarn;const w=!!p.part,$=ZT(n,p),D=i(n,o,$);if(!bt(h)||h==="")return new Intl.DateTimeFormat($,b).format(m);let V={},R,E=null;const P="datetime format";for(let M=0;M{$N.includes(h)?i[h]=a[h]:r[h]=a[h]}),bt(s)?r.locale=s:Gt(s)&&(i=s),Gt(o)&&(i=o),[r.key||"",u,r,i]}function iU(n,e,a){const s=n;for(const o in a){const r=`${e}__${o}`;s.__datetimeFormatters.has(r)&&s.__datetimeFormatters.delete(r)}}function lU(n,...e){const{numberFormats:a,unresolving:s,fallbackLocale:o,onWarn:r,localeFallbacker:i}=n,{__numberFormatters:u}=n,[h,m,p,b]=fE(...e),x=ia(p.missingWarn)?p.missingWarn:n.missingWarn;ia(p.fallbackWarn)?p.fallbackWarn:n.fallbackWarn;const w=!!p.part,$=ZT(n,p),D=i(n,o,$);if(!bt(h)||h==="")return new Intl.NumberFormat($,b).format(m);let V={},R,E=null;const P="number format";for(let M=0;M{AN.includes(h)?i[h]=a[h]:r[h]=a[h]}),bt(s)?r.locale=s:Gt(s)&&(i=s),Gt(o)&&(i=o),[r.key||"",u,r,i]}function cU(n,e,a){const s=n;for(const o in a){const r=`${e}__${o}`;s.__numberFormatters.has(r)&&s.__numberFormatters.delete(r)}}xie();/*! + * vue-i18n v9.11.0 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */const cle="9.11.0";function dle(){typeof __VUE_I18N_FULL_INSTALL__!="boolean"&&(Yo().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!="boolean"&&(Yo().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(Yo().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Yo().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Yo().__INTLIFY_PROD_DEVTOOLS__=!1)}const EN=Bie.__EXTEND_POINT__,Zo=WT(EN);Zo(),Zo(),Zo(),Zo(),Zo(),Zo(),Zo(),Zo(),Zo();const TN=no.__EXTEND_POINT__,es=WT(TN),xn={UNEXPECTED_RETURN_TYPE:TN,INVALID_ARGUMENT:es(),MUST_BE_CALL_SETUP_TOP:es(),NOT_INSTALLED:es(),NOT_AVAILABLE_IN_LEGACY_MODE:es(),REQUIRED_VALUE:es(),INVALID_VALUE:es(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:es(),NOT_INSTALLED_WITH_PROVIDE:es(),UNEXPECTED_ERROR:es(),NOT_COMPATIBLE_LEGACY_VUE_I18N:es(),BRIDGE_SUPPORT_VUE_2_ONLY:es(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:es(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:es(),__EXTEND_POINT__:es()};function Tn(n,...e){return Vc(n,null,void 0)}const mE=ei("__translateVNode"),vE=ei("__datetimeParts"),yE=ei("__numberParts"),PN=ei("__setPluralRules"),DN=ei("__injectWithOption"),_E=ei("__dispose");function Kd(n){if(!Ca(n))return n;for(const e in n)if(kL(n,e))if(!e.includes("."))Ca(n[e])&&Kd(n[e]);else{const a=e.split("."),s=a.length-1;let o=n,r=!1;for(let i=0;i{if("locale"in u&&"resource"in u){const{locale:h,resource:m}=u;h?(i[h]=i[h]||{},JI(m,i[h])):JI(m,i)}else bt(u)&&JI(JSON.parse(u),i)}),o==null&&r)for(const u in i)kL(i,u)&&Kd(i[u]);return i}function RN(n){return n.type}function ON(n,e,a){let s=Ca(e.messages)?e.messages:{};"__i18nGlobal"in a&&(s=r9(n.locale.value,{messages:s,__i18n:a.__i18nGlobal}));const o=Object.keys(s);o.length&&o.forEach(r=>{n.mergeLocaleMessage(r,s[r])});{if(Ca(e.datetimeFormats)){const r=Object.keys(e.datetimeFormats);r.length&&r.forEach(i=>{n.mergeDateTimeFormat(i,e.datetimeFormats[i])})}if(Ca(e.numberFormats)){const r=Object.keys(e.numberFormats);r.length&&r.forEach(i=>{n.mergeNumberFormat(i,e.numberFormats[i])})}}}function dU(n){return l(su,null,n,0)}const uU="__INTLIFY_META__",pU=()=>[],ule=()=>!1;let hU=0;function fU(n){return(e,a,s,o)=>n(a,s,Wr()||void 0,o)}const ple=()=>{const n=Wr();let e=null;return n&&(e=RN(n)[uU])?{[uU]:e}:null};function XT(n={},e){const{__root:a,__injectWithOption:s}=n,o=a===void 0,r=n.flatJson,i=gL?O:UL,u=!!n.translateExistCompatible;let h=ia(n.inheritLocale)?n.inheritLocale:!0;const m=i(a&&h?a.locale.value:bt(n.locale)?n.locale:Lc),p=i(a&&h?a.fallbackLocale.value:bt(n.fallbackLocale)||Ga(n.fallbackLocale)||Gt(n.fallbackLocale)||n.fallbackLocale===!1?n.fallbackLocale:m.value),b=i(r9(m.value,n)),x=i(Gt(n.datetimeFormats)?n.datetimeFormats:{[m.value]:{}}),w=i(Gt(n.numberFormats)?n.numberFormats:{[m.value]:{}});let $=a?a.missingWarn:ia(n.missingWarn)||Xr(n.missingWarn)?n.missingWarn:!0,D=a?a.fallbackWarn:ia(n.fallbackWarn)||Xr(n.fallbackWarn)?n.fallbackWarn:!0,V=a?a.fallbackRoot:ia(n.fallbackRoot)?n.fallbackRoot:!0,R=!!n.fallbackFormat,E=Fa(n.missing)?n.missing:null,P=Fa(n.missing)?fU(n.missing):null,S=Fa(n.postTranslation)?n.postTranslation:null,C=a?a.warnHtmlMessage:ia(n.warnHtmlMessage)?n.warnHtmlMessage:!0,M=!!n.escapeParameter;const g=a?a.modifiers:Gt(n.modifiers)?n.modifiers:{};let v=n.pluralRules||a&&a.pluralRules,T;T=(()=>{o&&tU(null);const Pe={version:cle,locale:m.value,fallbackLocale:p.value,messages:b.value,modifiers:g,pluralRules:v,missing:P===null?void 0:P,missingWarn:$,fallbackWarn:D,fallbackFormat:R,unresolving:!0,postTranslation:S===null?void 0:S,warnHtmlMessage:C,escapeParameter:M,messageResolver:n.messageResolver,messageCompiler:n.messageCompiler,__meta:{framework:"vue"}};Pe.datetimeFormats=x.value,Pe.numberFormats=w.value,Pe.__datetimeFormatters=Gt(T)?T.__datetimeFormatters:void 0,Pe.__numberFormatters=Gt(T)?T.__numberFormatters:void 0;const Ue=tle(Pe);return o&&tU(Ue),Ue})(),hd(T,m.value,p.value);function B(){return[m.value,p.value,b.value,x.value,w.value]}const oe=ee({get:()=>m.value,set:Pe=>{m.value=Pe,T.locale=m.value}}),be=ee({get:()=>p.value,set:Pe=>{p.value=Pe,T.fallbackLocale=p.value,hd(T,m.value,Pe)}}),$e=ee(()=>b.value),Le=ee(()=>x.value),de=ee(()=>w.value);function J(){return Fa(S)?S:null}function G(Pe){S=Pe,T.postTranslation=Pe}function ce(){return E}function Ee(Pe){Pe!==null&&(P=fU(Pe)),E=Pe,T.missing=P}const He=(Pe,Ue,ht,Mt,Et,Jt)=>{B();let ae;try{__INTLIFY_PROD_DEVTOOLS__,o||(T.fallbackContext=a?ele():void 0),ae=Pe(T)}finally{__INTLIFY_PROD_DEVTOOLS__,o||(T.fallbackContext=void 0)}if(ht!=="translate exists"&&wn(ae)&&ae===o9||ht==="translate exists"&&!ae){const[W,q]=Ue();return a&&V?Mt(a):Et(W)}else{if(Jt(ae))return ae;throw Tn(xn.UNEXPECTED_RETURN_TYPE)}};function Ke(...Pe){return He(Ue=>Reflect.apply(oU,null,[Ue,...Pe]),()=>pE(...Pe),"translate",Ue=>Reflect.apply(Ue.t,Ue,[...Pe]),Ue=>Ue,Ue=>bt(Ue))}function pt(...Pe){const[Ue,ht,Mt]=Pe;if(Mt&&!Ca(Mt))throw Tn(xn.INVALID_ARGUMENT);return Ke(Ue,ht,Un({resolvedMessage:!0},Mt||{}))}function ut(...Pe){return He(Ue=>Reflect.apply(rU,null,[Ue,...Pe]),()=>hE(...Pe),"datetime format",Ue=>Reflect.apply(Ue.d,Ue,[...Pe]),()=>QV,Ue=>bt(Ue))}function ft(...Pe){return He(Ue=>Reflect.apply(lU,null,[Ue,...Pe]),()=>fE(...Pe),"number format",Ue=>Reflect.apply(Ue.n,Ue,[...Pe]),()=>QV,Ue=>bt(Ue))}function kt(Pe){return Pe.map(Ue=>bt(Ue)||wn(Ue)||ia(Ue)?dU(String(Ue)):Ue)}const Xe={normalize:kt,interpolate:Pe=>Pe,type:"vnode"};function ie(...Pe){return He(Ue=>{let ht;const Mt=Ue;try{Mt.processor=Xe,ht=Reflect.apply(oU,null,[Mt,...Pe])}finally{Mt.processor=null}return ht},()=>pE(...Pe),"translate",Ue=>Ue[mE](...Pe),Ue=>[dU(Ue)],Ue=>Ga(Ue))}function Y(...Pe){return He(Ue=>Reflect.apply(lU,null,[Ue,...Pe]),()=>fE(...Pe),"number format",Ue=>Ue[yE](...Pe),pU,Ue=>bt(Ue)||Ga(Ue))}function ue(...Pe){return He(Ue=>Reflect.apply(rU,null,[Ue,...Pe]),()=>hE(...Pe),"datetime format",Ue=>Ue[vE](...Pe),pU,Ue=>bt(Ue)||Ga(Ue))}function pe(Pe){v=Pe,T.pluralRules=v}function H(Pe,Ue){return He(()=>{if(!Pe)return!1;const ht=bt(Ue)?Ue:m.value,Mt=he(ht),Et=T.messageResolver(Mt,Pe);return u?Et!=null:$c(Et)||Rs(Et)||bt(Et)},()=>[Pe],"translate exists",ht=>Reflect.apply(ht.te,ht,[Pe,Ue]),ule,ht=>ia(ht))}function N(Pe){let Ue=null;const ht=gN(T,p.value,m.value);for(let Mt=0;Mt{h&&(m.value=Pe,T.locale=Pe,hd(T,m.value,p.value))}),dt(a.fallbackLocale,Pe=>{h&&(p.value=Pe,T.fallbackLocale=Pe,hd(T,m.value,p.value))}));const it={id:hU,locale:oe,fallbackLocale:be,get inheritLocale(){return h},set inheritLocale(Pe){h=Pe,Pe&&a&&(m.value=a.locale.value,p.value=a.fallbackLocale.value,hd(T,m.value,p.value))},get availableLocales(){return Object.keys(b.value).sort()},messages:$e,get modifiers(){return g},get pluralRules(){return v||{}},get isGlobal(){return o},get missingWarn(){return $},set missingWarn(Pe){$=Pe,T.missingWarn=$},get fallbackWarn(){return D},set fallbackWarn(Pe){D=Pe,T.fallbackWarn=D},get fallbackRoot(){return V},set fallbackRoot(Pe){V=Pe},get fallbackFormat(){return R},set fallbackFormat(Pe){R=Pe,T.fallbackFormat=R},get warnHtmlMessage(){return C},set warnHtmlMessage(Pe){C=Pe,T.warnHtmlMessage=Pe},get escapeParameter(){return M},set escapeParameter(Pe){M=Pe,T.escapeParameter=Pe},t:Ke,getLocaleMessage:he,setLocaleMessage:Se,mergeLocaleMessage:Re,getPostTranslationHandler:J,setPostTranslationHandler:G,getMissingHandler:ce,setMissingHandler:Ee,[PN]:pe};return it.datetimeFormats=Le,it.numberFormats=de,it.rt=pt,it.te=H,it.tm=Q,it.d=ut,it.n=ft,it.getDateTimeFormat=Ze,it.setDateTimeFormat=ze,it.mergeDateTimeFormat=qe,it.getNumberFormat=Be,it.setNumberFormat=lt,it.mergeNumberFormat=yt,it[DN]=s,it[mE]=ie,it[vE]=ue,it[yE]=Y,it}function hle(n){const e=bt(n.locale)?n.locale:Lc,a=bt(n.fallbackLocale)||Ga(n.fallbackLocale)||Gt(n.fallbackLocale)||n.fallbackLocale===!1?n.fallbackLocale:e,s=Fa(n.missing)?n.missing:void 0,o=ia(n.silentTranslationWarn)||Xr(n.silentTranslationWarn)?!n.silentTranslationWarn:!0,r=ia(n.silentFallbackWarn)||Xr(n.silentFallbackWarn)?!n.silentFallbackWarn:!0,i=ia(n.fallbackRoot)?n.fallbackRoot:!0,u=!!n.formatFallbackMessages,h=Gt(n.modifiers)?n.modifiers:{},m=n.pluralizationRules,p=Fa(n.postTranslation)?n.postTranslation:void 0,b=bt(n.warnHtmlInMessage)?n.warnHtmlInMessage!=="off":!0,x=!!n.escapeParameterHtml,w=ia(n.sync)?n.sync:!0;let $=n.messages;if(Gt(n.sharedMessages)){const M=n.sharedMessages;$=Object.keys(M).reduce((v,T)=>{const j=v[T]||(v[T]={});return Un(j,M[T]),v},$||{})}const{__i18n:D,__root:V,__injectWithOption:R}=n,E=n.datetimeFormats,P=n.numberFormats,S=n.flatJson,C=n.translateExistCompatible;return{locale:e,fallbackLocale:a,messages:$,flatJson:S,datetimeFormats:E,numberFormats:P,missing:s,missingWarn:o,fallbackWarn:r,fallbackRoot:i,fallbackFormat:u,modifiers:h,pluralRules:m,postTranslation:p,warnHtmlMessage:b,escapeParameter:x,messageResolver:n.messageResolver,inheritLocale:w,translateExistCompatible:C,__i18n:D,__root:V,__injectWithOption:R}}function gE(n={},e){{const a=XT(hle(n)),{__extender:s}=n,o={id:a.id,get locale(){return a.locale.value},set locale(r){a.locale.value=r},get fallbackLocale(){return a.fallbackLocale.value},set fallbackLocale(r){a.fallbackLocale.value=r},get messages(){return a.messages.value},get datetimeFormats(){return a.datetimeFormats.value},get numberFormats(){return a.numberFormats.value},get availableLocales(){return a.availableLocales},get formatter(){return{interpolate(){return[]}}},set formatter(r){},get missing(){return a.getMissingHandler()},set missing(r){a.setMissingHandler(r)},get silentTranslationWarn(){return ia(a.missingWarn)?!a.missingWarn:a.missingWarn},set silentTranslationWarn(r){a.missingWarn=ia(r)?!r:r},get silentFallbackWarn(){return ia(a.fallbackWarn)?!a.fallbackWarn:a.fallbackWarn},set silentFallbackWarn(r){a.fallbackWarn=ia(r)?!r:r},get modifiers(){return a.modifiers},get formatFallbackMessages(){return a.fallbackFormat},set formatFallbackMessages(r){a.fallbackFormat=r},get postTranslation(){return a.getPostTranslationHandler()},set postTranslation(r){a.setPostTranslationHandler(r)},get sync(){return a.inheritLocale},set sync(r){a.inheritLocale=r},get warnHtmlInMessage(){return a.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(r){a.warnHtmlMessage=r!=="off"},get escapeParameterHtml(){return a.escapeParameter},set escapeParameterHtml(r){a.escapeParameter=r},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(r){},get pluralizationRules(){return a.pluralRules||{}},__composer:a,t(...r){const[i,u,h]=r,m={};let p=null,b=null;if(!bt(i))throw Tn(xn.INVALID_ARGUMENT);const x=i;return bt(u)?m.locale=u:Ga(u)?p=u:Gt(u)&&(b=u),Ga(h)?p=h:Gt(h)&&(b=h),Reflect.apply(a.t,a,[x,p||b||{},m])},rt(...r){return Reflect.apply(a.rt,a,[...r])},tc(...r){const[i,u,h]=r,m={plural:1};let p=null,b=null;if(!bt(i))throw Tn(xn.INVALID_ARGUMENT);const x=i;return bt(u)?m.locale=u:wn(u)?m.plural=u:Ga(u)?p=u:Gt(u)&&(b=u),bt(h)?m.locale=h:Ga(h)?p=h:Gt(h)&&(b=h),Reflect.apply(a.t,a,[x,p||b||{},m])},te(r,i){return a.te(r,i)},tm(r){return a.tm(r)},getLocaleMessage(r){return a.getLocaleMessage(r)},setLocaleMessage(r,i){a.setLocaleMessage(r,i)},mergeLocaleMessage(r,i){a.mergeLocaleMessage(r,i)},d(...r){return Reflect.apply(a.d,a,[...r])},getDateTimeFormat(r){return a.getDateTimeFormat(r)},setDateTimeFormat(r,i){a.setDateTimeFormat(r,i)},mergeDateTimeFormat(r,i){a.mergeDateTimeFormat(r,i)},n(...r){return Reflect.apply(a.n,a,[...r])},getNumberFormat(r){return a.getNumberFormat(r)},setNumberFormat(r,i){a.setNumberFormat(r,i)},mergeNumberFormat(r,i){a.mergeNumberFormat(r,i)},getChoiceIndex(r,i){return-1}};return o.__extender=s,o}}const YT={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:n=>n==="parent"||n==="global",default:"parent"},i18n:{type:Object}};function fle({slots:n},e){return e.length===1&&e[0]==="default"?(n.default?n.default():[]).reduce((s,o)=>[...s,...o.type===ke?o.children:[o]],[]):e.reduce((a,s)=>{const o=n[s];return o&&(a[s]=o()),a},{})}function VN(n){return ke}const mle=Ce({name:"i18n-t",props:Un({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:n=>wn(n)||!isNaN(n)}},YT),setup(n,e){const{slots:a,attrs:s}=e,o=n.i18n||tt({useScope:n.scope,__useComponent:!0});return()=>{const r=Object.keys(a).filter(b=>b!=="_"),i={};n.locale&&(i.locale=n.locale),n.plural!==void 0&&(i.plural=bt(n.plural)?+n.plural:n.plural);const u=fle(e,r),h=o[mE](n.keypath,u,i),m=Un({},s),p=bt(n.tag)||Ca(n.tag)?n.tag:VN();return ya(p,m,h)}}}),mU=mle;function vle(n){return Ga(n)&&!bt(n[0])}function UN(n,e,a,s){const{slots:o,attrs:r}=e;return()=>{const i={part:!0};let u={};n.locale&&(i.locale=n.locale),bt(n.format)?i.key=n.format:Ca(n.format)&&(bt(n.format.key)&&(i.key=n.format.key),u=Object.keys(n.format).reduce((x,w)=>a.includes(w)?Un({},x,{[w]:n.format[w]}):x,{}));const h=s(n.value,i,u);let m=[i.key];Ga(h)?m=h.map((x,w)=>{const $=o[x.type],D=$?$({[x.type]:x.value,index:w,parts:h}):[x.value];return vle(D)&&(D[0].key=`${x.type}-${w}`),D}):bt(h)&&(m=[h]);const p=Un({},r),b=bt(n.tag)||Ca(n.tag)?n.tag:VN();return ya(b,p,m)}}const yle=Ce({name:"i18n-n",props:Un({value:{type:Number,required:!0},format:{type:[String,Object]}},YT),setup(n,e){const a=n.i18n||tt({useScope:n.scope,__useComponent:!0});return UN(n,e,AN,(...s)=>a[yE](...s))}}),vU=yle,_le=Ce({name:"i18n-d",props:Un({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},YT),setup(n,e){const a=n.i18n||tt({useScope:n.scope,__useComponent:!0});return UN(n,e,$N,(...s)=>a[vE](...s))}}),yU=_le;function gle(n,e){const a=n;if(n.mode==="composition")return a.__getInstance(e)||n.global;{const s=a.__getInstance(e);return s!=null?s.__composer:n.global.__composer}}function kle(n){const e=i=>{const{instance:u,modifiers:h,value:m}=i;if(!u||!u.$)throw Tn(xn.UNEXPECTED_ERROR);const p=gle(n,u.$),b=_U(m);return[Reflect.apply(p.t,p,[...gU(b)]),p]};return{created:(i,u)=>{const[h,m]=e(u);gL&&n.global===m&&(i.__i18nWatcher=dt(m.locale,()=>{u.instance&&u.instance.$forceUpdate()})),i.__composer=m,i.textContent=h},unmounted:i=>{gL&&i.__i18nWatcher&&(i.__i18nWatcher(),i.__i18nWatcher=void 0,delete i.__i18nWatcher),i.__composer&&(i.__composer=void 0,delete i.__composer)},beforeUpdate:(i,{value:u})=>{if(i.__composer){const h=i.__composer,m=_U(u);i.textContent=Reflect.apply(h.t,h,[...gU(m)])}},getSSRProps:i=>{const[u]=e(i);return{textContent:u}}}}function _U(n){if(bt(n))return{path:n};if(Gt(n)){if(!("path"in n))throw Tn(xn.REQUIRED_VALUE,"path");return n}else throw Tn(xn.INVALID_VALUE)}function gU(n){const{path:e,locale:a,args:s,choice:o,plural:r}=n,i={},u=s||{};return bt(a)&&(i.locale=a),wn(o)&&(i.plural=o),wn(r)&&(i.plural=r),[e,u,i]}function ble(n,e,...a){const s=Gt(a[0])?a[0]:{},o=!!s.useI18nComponentName;(ia(s.globalInstall)?s.globalInstall:!0)&&([o?"i18n":mU.name,"I18nT"].forEach(i=>n.component(i,mU)),[vU.name,"I18nN"].forEach(i=>n.component(i,vU)),[yU.name,"I18nD"].forEach(i=>n.component(i,yU))),n.directive("t",kle(e))}function wle(n,e,a){return{beforeCreate(){const s=Wr();if(!s)throw Tn(xn.UNEXPECTED_ERROR);const o=this.$options;if(o.i18n){const r=o.i18n;if(o.__i18n&&(r.__i18n=o.__i18n),r.__root=e,this===this.$root)this.$i18n=kU(n,r);else{r.__injectWithOption=!0,r.__extender=a.__vueI18nExtend,this.$i18n=gE(r);const i=this.$i18n;i.__extender&&(i.__disposer=i.__extender(this.$i18n))}}else if(o.__i18n)if(this===this.$root)this.$i18n=kU(n,o);else{this.$i18n=gE({__i18n:o.__i18n,__injectWithOption:!0,__extender:a.__vueI18nExtend,__root:e});const r=this.$i18n;r.__extender&&(r.__disposer=r.__extender(this.$i18n))}else this.$i18n=n;o.__i18nGlobal&&ON(e,o,o),this.$t=(...r)=>this.$i18n.t(...r),this.$rt=(...r)=>this.$i18n.rt(...r),this.$tc=(...r)=>this.$i18n.tc(...r),this.$te=(r,i)=>this.$i18n.te(r,i),this.$d=(...r)=>this.$i18n.d(...r),this.$n=(...r)=>this.$i18n.n(...r),this.$tm=r=>this.$i18n.tm(r),a.__setInstance(s,this.$i18n)},mounted(){},unmounted(){const s=Wr();if(!s)throw Tn(xn.UNEXPECTED_ERROR);const o=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,o.__disposer&&(o.__disposer(),delete o.__disposer,delete o.__extender),a.__deleteInstance(s),delete this.$i18n}}}function kU(n,e){n.locale=e.locale||n.locale,n.fallbackLocale=e.fallbackLocale||n.fallbackLocale,n.missing=e.missing||n.missing,n.silentTranslationWarn=e.silentTranslationWarn||n.silentFallbackWarn,n.silentFallbackWarn=e.silentFallbackWarn||n.silentFallbackWarn,n.formatFallbackMessages=e.formatFallbackMessages||n.formatFallbackMessages,n.postTranslation=e.postTranslation||n.postTranslation,n.warnHtmlInMessage=e.warnHtmlInMessage||n.warnHtmlInMessage,n.escapeParameterHtml=e.escapeParameterHtml||n.escapeParameterHtml,n.sync=e.sync||n.sync,n.__composer[PN](e.pluralizationRules||n.pluralizationRules);const a=r9(n.locale,{messages:e.messages,__i18n:e.__i18n});return Object.keys(a).forEach(s=>n.mergeLocaleMessage(s,a[s])),e.datetimeFormats&&Object.keys(e.datetimeFormats).forEach(s=>n.mergeDateTimeFormat(s,e.datetimeFormats[s])),e.numberFormats&&Object.keys(e.numberFormats).forEach(s=>n.mergeNumberFormat(s,e.numberFormats[s])),n}const xle=ei("global-vue-i18n");function Mle(n={},e){const a=__VUE_I18N_LEGACY_API__&&ia(n.legacy)?n.legacy:__VUE_I18N_LEGACY_API__,s=ia(n.globalInjection)?n.globalInjection:!0,o=__VUE_I18N_LEGACY_API__&&a?!!n.allowComposition:!0,r=new Map,[i,u]=Cle(n,a),h=ei("");function m(x){return r.get(x)||null}function p(x,w){r.set(x,w)}function b(x){r.delete(x)}{const x={get mode(){return __VUE_I18N_LEGACY_API__&&a?"legacy":"composition"},get allowComposition(){return o},async install(w,...$){if(w.__VUE_I18N_SYMBOL__=h,w.provide(w.__VUE_I18N_SYMBOL__,x),Gt($[0])){const R=$[0];x.__composerExtend=R.__composerExtend,x.__vueI18nExtend=R.__vueI18nExtend}let D=null;!a&&s&&(D=Dle(w,x.global)),__VUE_I18N_FULL_INSTALL__&&ble(w,x,...$),__VUE_I18N_LEGACY_API__&&a&&w.mixin(wle(u,u.__composer,x));const V=w.unmount;w.unmount=()=>{D&&D(),x.dispose(),V()}},get global(){return u},dispose(){i.stop()},__instances:r,__getInstance:m,__setInstance:p,__deleteInstance:b};return x}}function tt(n={}){const e=Wr();if(e==null)throw Tn(xn.MUST_BE_CALL_SETUP_TOP);if(!e.isCE&&e.appContext.app!=null&&!e.appContext.app.__VUE_I18N_SYMBOL__)throw Tn(xn.NOT_INSTALLED);const a=Sle(e),s=Lle(a),o=RN(e),r=Ile(n,o);if(__VUE_I18N_LEGACY_API__&&a.mode==="legacy"&&!n.__useComponent){if(!a.allowComposition)throw Tn(xn.NOT_AVAILABLE_IN_LEGACY_MODE);return Tle(e,r,s,n)}if(r==="global")return ON(s,n,o),s;if(r==="parent"){let h=$le(a,e,n.__useComponent);return h==null&&(h=s),h}const i=a;let u=i.__getInstance(e);if(u==null){const h=Un({},n);"__i18n"in o&&(h.__i18n=o.__i18n),s&&(h.__root=s),u=XT(h),i.__composerExtend&&(u[_E]=i.__composerExtend(u)),Ele(i,e,u),i.__setInstance(e,u)}return u}function Cle(n,e,a){const s=iT();{const o=__VUE_I18N_LEGACY_API__&&e?s.run(()=>gE(n)):s.run(()=>XT(n));if(o==null)throw Tn(xn.UNEXPECTED_ERROR);return[s,o]}}function Sle(n){{const e=xt(n.isCE?xle:n.appContext.app.__VUE_I18N_SYMBOL__);if(!e)throw Tn(n.isCE?xn.NOT_INSTALLED_WITH_PROVIDE:xn.UNEXPECTED_ERROR);return e}}function Ile(n,e){return s9(n)?"__i18n"in e?"local":"global":n.useScope?n.useScope:"local"}function Lle(n){return n.mode==="composition"?n.global:n.global.__composer}function $le(n,e,a=!1){let s=null;const o=e.root;let r=Ale(e,a);for(;r!=null;){const i=n;if(n.mode==="composition")s=i.__getInstance(r);else if(__VUE_I18N_LEGACY_API__){const u=i.__getInstance(r);u!=null&&(s=u.__composer,a&&s&&!s[DN]&&(s=null))}if(s!=null||o===r)break;r=r.parent}return s}function Ale(n,e=!1){return n==null?null:e&&n.vnode.ctx||n.parent}function Ele(n,e,a){at(()=>{},e),rn(()=>{const s=a;n.__deleteInstance(e);const o=s[_E];o&&(o(),delete s[_E])},e)}function Tle(n,e,a,s={}){const o=e==="local",r=UL(null);if(o&&n.proxy&&!(n.proxy.$options.i18n||n.proxy.$options.__i18n))throw Tn(xn.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const i=ia(s.inheritLocale)?s.inheritLocale:!bt(s.locale),u=O(!o||i?a.locale.value:bt(s.locale)?s.locale:Lc),h=O(!o||i?a.fallbackLocale.value:bt(s.fallbackLocale)||Ga(s.fallbackLocale)||Gt(s.fallbackLocale)||s.fallbackLocale===!1?s.fallbackLocale:u.value),m=O(r9(u.value,s)),p=O(Gt(s.datetimeFormats)?s.datetimeFormats:{[u.value]:{}}),b=O(Gt(s.numberFormats)?s.numberFormats:{[u.value]:{}}),x=o?a.missingWarn:ia(s.missingWarn)||Xr(s.missingWarn)?s.missingWarn:!0,w=o?a.fallbackWarn:ia(s.fallbackWarn)||Xr(s.fallbackWarn)?s.fallbackWarn:!0,$=o?a.fallbackRoot:ia(s.fallbackRoot)?s.fallbackRoot:!0,D=!!s.fallbackFormat,V=Fa(s.missing)?s.missing:null,R=Fa(s.postTranslation)?s.postTranslation:null,E=o?a.warnHtmlMessage:ia(s.warnHtmlMessage)?s.warnHtmlMessage:!0,P=!!s.escapeParameter,S=o?a.modifiers:Gt(s.modifiers)?s.modifiers:{},C=s.pluralRules||o&&a.pluralRules;function M(){return[u.value,h.value,m.value,p.value,b.value]}const g=ee({get:()=>r.value?r.value.locale.value:u.value,set:N=>{r.value&&(r.value.locale.value=N),u.value=N}}),v=ee({get:()=>r.value?r.value.fallbackLocale.value:h.value,set:N=>{r.value&&(r.value.fallbackLocale.value=N),h.value=N}}),T=ee(()=>r.value?r.value.messages.value:m.value),j=ee(()=>p.value),B=ee(()=>b.value);function oe(){return r.value?r.value.getPostTranslationHandler():R}function be(N){r.value&&r.value.setPostTranslationHandler(N)}function $e(){return r.value?r.value.getMissingHandler():V}function Le(N){r.value&&r.value.setMissingHandler(N)}function de(N){return M(),N()}function J(...N){return r.value?de(()=>Reflect.apply(r.value.t,null,[...N])):de(()=>"")}function G(...N){return r.value?Reflect.apply(r.value.rt,null,[...N]):""}function ce(...N){return r.value?de(()=>Reflect.apply(r.value.d,null,[...N])):de(()=>"")}function Ee(...N){return r.value?de(()=>Reflect.apply(r.value.n,null,[...N])):de(()=>"")}function He(N){return r.value?r.value.tm(N):{}}function Ke(N,Q){return r.value?r.value.te(N,Q):!1}function pt(N){return r.value?r.value.getLocaleMessage(N):{}}function ut(N,Q){r.value&&(r.value.setLocaleMessage(N,Q),m.value[N]=Q)}function ft(N,Q){r.value&&r.value.mergeLocaleMessage(N,Q)}function kt(N){return r.value?r.value.getDateTimeFormat(N):{}}function Ae(N,Q){r.value&&(r.value.setDateTimeFormat(N,Q),p.value[N]=Q)}function Xe(N,Q){r.value&&r.value.mergeDateTimeFormat(N,Q)}function ie(N){return r.value?r.value.getNumberFormat(N):{}}function Y(N,Q){r.value&&(r.value.setNumberFormat(N,Q),b.value[N]=Q)}function ue(N,Q){r.value&&r.value.mergeNumberFormat(N,Q)}const pe={get id(){return r.value?r.value.id:-1},locale:g,fallbackLocale:v,messages:T,datetimeFormats:j,numberFormats:B,get inheritLocale(){return r.value?r.value.inheritLocale:i},set inheritLocale(N){r.value&&(r.value.inheritLocale=N)},get availableLocales(){return r.value?r.value.availableLocales:Object.keys(m.value)},get modifiers(){return r.value?r.value.modifiers:S},get pluralRules(){return r.value?r.value.pluralRules:C},get isGlobal(){return r.value?r.value.isGlobal:!1},get missingWarn(){return r.value?r.value.missingWarn:x},set missingWarn(N){r.value&&(r.value.missingWarn=N)},get fallbackWarn(){return r.value?r.value.fallbackWarn:w},set fallbackWarn(N){r.value&&(r.value.missingWarn=N)},get fallbackRoot(){return r.value?r.value.fallbackRoot:$},set fallbackRoot(N){r.value&&(r.value.fallbackRoot=N)},get fallbackFormat(){return r.value?r.value.fallbackFormat:D},set fallbackFormat(N){r.value&&(r.value.fallbackFormat=N)},get warnHtmlMessage(){return r.value?r.value.warnHtmlMessage:E},set warnHtmlMessage(N){r.value&&(r.value.warnHtmlMessage=N)},get escapeParameter(){return r.value?r.value.escapeParameter:P},set escapeParameter(N){r.value&&(r.value.escapeParameter=N)},t:J,getPostTranslationHandler:oe,setPostTranslationHandler:be,getMissingHandler:$e,setMissingHandler:Le,rt:G,d:ce,n:Ee,tm:He,te:Ke,getLocaleMessage:pt,setLocaleMessage:ut,mergeLocaleMessage:ft,getDateTimeFormat:kt,setDateTimeFormat:Ae,mergeDateTimeFormat:Xe,getNumberFormat:ie,setNumberFormat:Y,mergeNumberFormat:ue};function H(N){N.locale.value=u.value,N.fallbackLocale.value=h.value,Object.keys(m.value).forEach(Q=>{N.mergeLocaleMessage(Q,m.value[Q])}),Object.keys(p.value).forEach(Q=>{N.mergeDateTimeFormat(Q,p.value[Q])}),Object.keys(b.value).forEach(Q=>{N.mergeNumberFormat(Q,b.value[Q])}),N.escapeParameter=P,N.fallbackFormat=D,N.fallbackRoot=$,N.fallbackWarn=w,N.missingWarn=x,N.warnHtmlMessage=E}return Dj(()=>{if(n.proxy==null||n.proxy.$i18n==null)throw Tn(xn.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const N=r.value=n.proxy.$i18n.__composer;e==="global"?(u.value=N.locale.value,h.value=N.fallbackLocale.value,m.value=N.messages.value,p.value=N.datetimeFormats.value,b.value=N.numberFormats.value):o&&H(N)}),pe}const Ple=["locale","fallbackLocale","availableLocales"],bU=["t","rt","d","n","tm","te"];function Dle(n,e){const a=Object.create(null);return Ple.forEach(o=>{const r=Object.getOwnPropertyDescriptor(e,o);if(!r)throw Tn(xn.UNEXPECTED_ERROR);const i=on(r.value)?{get(){return r.value.value},set(u){r.value.value=u}}:{get(){return r.get&&r.get()}};Object.defineProperty(a,o,i)}),n.config.globalProperties.$i18n=a,bU.forEach(o=>{const r=Object.getOwnPropertyDescriptor(e,o);if(!r||!r.value)throw Tn(xn.UNEXPECTED_ERROR);Object.defineProperty(n.config.globalProperties,`$${o}`,r)}),()=>{delete n.config.globalProperties.$i18n,bU.forEach(o=>{delete n.config.globalProperties[`$${o}`]})}}dle();__INTLIFY_JIT_COMPILATION__?eU(sle):eU(nle);Xie(Eie);Yie(gN);if(__INTLIFY_PROD_DEVTOOLS__){const n=Yo();n.__INTLIFY__=!0,jie(n.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}const Rle=c("div",{class:"absolute left-3 top-0 h-full w-px bg-gray-200"},null,-1),Ole=c("div",{class:"absolute left-3 top-1/2 h-px w-3 bg-gray-200"},null,-1),Vle={class:"text-primary"},Uc=Ce({__name:"UserLocation",props:{visible:{type:Boolean,default:!0},theme:{default:"rubick"},layout:{default:"side-menu"}},setup(n){const e=n;An(e,"visible");const a=An(e,"theme"),s=An(e,"layout"),{t:o}=tt(),r=Za(),i=zt(),u=ee(()=>r.userContext),h=ee(()=>i.selectedUserLocation),m=ee(()=>{let $="";return h.value.company.name!=""&&($=h.value.company.name),h.value.branch.name!=""&&($+=" - "+h.value.branch.name),$}),p=ee(()=>{let $=0;return u.value.companies.forEach(D=>{$+=1,D.branches&&($+=D.branches.length)}),$}),b=ee(()=>At([a.value=="rubick"&&(s.value=="side-menu"||s.value=="simple-menu")&&"hidden mr-auto -intro-x sm:flex",a.value=="rubick"&&s.value=="top-menu"&&"h-full md:ml-10 md:pl-10 md:border-l border-white/[0.08] mr-auto -intro-x",a.value=="icewall"&&"h-full md:ml-10 md:pl-10 md:border-l border-white/[0.08] mr-auto -intro-x",a.value=="enigma"&&"h-full md:ml-10 md:pl-10 md:border-l border-white/[0.08] mr-auto -intro-x",a.value=="tinker"&&(s.value=="side-menu"||s.value=="simple-menu")&&"hidden mr-auto -intro-x sm:flex",a.value=="tinker"&&s.value=="top-menu"&&"h-full md:ml-10 md:pl-10 md:border-l border-white/[0.08] mr-auto -intro-x"])),x=ee(()=>{switch(!0){case(a.value=="rubick"&&(s.value=="side-menu"||s.value=="simple-menu")):return!1;case(a.value=="rubick"&&s.value=="top-menu"):return!0;case a.value=="icewall":return!0;case a.value=="enigma":return!0;case(a.value=="tinker"&&(s.value=="side-menu"||s.value=="simple-menu")):return!1;case(a.value=="tinker"&&s.value=="top-menu"):return!0;default:return!1}});at(()=>{i.getSelectedUserLocation});const w=($,D)=>{let V=Pt.find(u.value.companies,{id:$});if(!V)return;let R=D==""?Pt.find(V.branches,{is_main:!0}):Pt.find(V.branches,{id:D});R?(i.clearSelectedUserLocation(),i.setSelectedUserLocation(V.id,V.ulid,V.code,V.name,R.id,R.ulid,R.code,R.name)):(i.clearSelectedUserLocation(),i.setSelectedUserLocation(V.id,V.ulid,V.code,V.name))};return($,D)=>(L(),ge(t(Y$),{light:x.value,class:F(b.value)},{default:f(()=>[l(t(Y$).Text,null,{default:f(()=>[l(t(Xa),null,{default:f(()=>[l(t(Xa).Button,{variant:"primary"},{default:f(()=>[l(t(re),{icon:"Umbrella"})]),_:1}),l(t(Xa).Items,{class:F({"w-96 h-12":p.value==0,"w-96 h-48":p.value>=1&&p.value<=10,"w-96 h-96":p.value&&p.value>10,"overflow-y-auto":!0}),placement:"bottom-start"},{default:f(()=>[u.value.companies&&u.value.companies.length!=0?(L(!0),U(ke,{key:0},Fe(u.value.companies,(V,R)=>(L(),U(ke,{key:R},[l(t(Xa).Item,{onClick:E=>w(V.id,""),class:"relative"},{default:f(()=>[c("span",{class:F({"text-primary font-bold":!0,underline:V.default})},_(V.name),3)]),_:2},1032,["onClick"]),(L(!0),U(ke,null,Fe(V.branches,(E,P)=>(L(),ge(t(Xa).Item,{key:P,onClick:S=>w(V.id,E==null?"":E.id),class:"pl-6 relative"},{default:f(()=>[Rle,Ole,E!=null?(L(),U("span",{key:0,class:F(["pl-1",{"text-primary":!0,underline:E.is_main}])},_(E.name),3)):Me("",!0)]),_:2},1032,["onClick"]))),128)),u.value.companies.length-1!=R?(L(),ge(t(Xa).Divider,{key:0})):Me("",!0)],64))),128)):(L(),ge(t(Xa).Item,{key:1},{default:f(()=>[c("span",Vle,_(t(o)("components.user-location.data_not_found")),1)]),_:1}))]),_:1},8,["class"])]),_:1})]),_:1}),m.value!=""?(L(),ge(t(Y$).Text,{key:0},{default:f(()=>[A(_(m.value),1)]),_:1})):Me("",!0)]),_:1},8,["light","class"]))}}),Ule={inheritAttrs:!1},Fle=Ce({...Ule,__name:"FormCheck",setup(n){const e=Ot(),a=ee(()=>At(["flex items-center",typeof e.class=="string"&&e.class]));return(s,o)=>(L(),U("div",Ft({class:a.value},t(Pt).omit(t(e),"class")),[Lt(s.$slots,"default")],16))}}),jle=["type"],Hle={inheritAttrs:!1},Nle=Ce({...Hle,__name:"Input",props:{modelValue:{},type:{}},emits:["update:modelValue"],setup(n,{emit:e}){const a=n,s=Ot(),o=ee(()=>At(["transition-all duration-100 ease-in-out",a.type=="radio"&&"shadow-sm border-slate-200 cursor-pointer focus:ring-4 focus:ring-offset-0 focus:ring-primary focus:ring-opacity-20 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50",a.type=="checkbox"&&"shadow-sm border-slate-200 cursor-pointer rounded focus:ring-4 focus:ring-offset-0 focus:ring-primary focus:ring-opacity-20 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50","[&[type='radio']]:checked:bg-primary [&[type='radio']]:checked:border-primary [&[type='radio']]:checked:border-opacity-10","[&[type='checkbox']]:checked:bg-primary [&[type='checkbox']]:checked:border-primary [&[type='checkbox']]:checked:border-opacity-10","[&:disabled:not(:checked)]:bg-slate-100 [&:disabled:not(:checked)]:cursor-not-allowed [&:disabled:not(:checked)]:dark:bg-darkmode-800/50","[&:disabled:checked]:opacity-70 [&:disabled:checked]:cursor-not-allowed [&:disabled:checked]:dark:bg-darkmode-800/50",typeof s.class=="string"&&s.class])),r=e,i=ee({get(){return a.modelValue},set(u){r("update:modelValue",u)}});return(u,h)=>rs((L(),U("input",Ft({class:o.value,type:a.type},t(Pt).omit(t(s),"class"),{"onUpdate:modelValue":h[0]||(h[0]=m=>i.value=m)}),null,16,jle)),[[MT,i.value]])}}),zle={inheritAttrs:!1},Ble=Ce({...zle,__name:"Label",setup(n){const e=Ot(),a=ee(()=>At(["cursor-pointer ml-2",typeof e.class=="string"&&e.class]));return(s,o)=>(L(),U("label",Ft({class:a.value},t(Pt).omit(t(e),"class")),[Lt(s.$slots,"default")],16))}}),Nn=Object.assign({},Fle,{Input:Nle,Label:Ble}),qle=["type"],Wle={inheritAttrs:!1},Oe=Ce({...Wle,__name:"FormInput",props:{value:{},modelValue:{},formInputSize:{},rounded:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:e}){const a=n,s=Ot(),o=xt("formInline",!1),r=xt("inputGroup",!1),i=ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed dark:disabled:bg-darkmode-800/50 dark:disabled:border-transparent","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50 [&[readonly]]:dark:border-transparent","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md placeholder:text-slate-400/90 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50 dark:placeholder:text-slate-500/80",a.formInputSize=="sm"&&"text-xs py-1.5 px-2",a.formInputSize=="lg"&&"text-lg py-1.5 px-4",a.rounded&&"rounded-full",o&&"flex-1",r&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r z-10",typeof s.class=="string"&&s.class])),u=e,h=ee({get(){return a.modelValue===void 0?a.value:a.modelValue},set(m){u("update:modelValue",m)}});return(m,p)=>rs((L(),U("input",Ft({class:i.value,type:a.type},t(Pt).omit(t(s),"class"),{"onUpdate:modelValue":p[0]||(p[0]=b=>h.value=b)}),null,16,qle)),[[MT,h.value]])}}),Gle=["type"],Zle={inheritAttrs:!1},la=Ce({...Zle,__name:"FormTextarea",props:{value:{},modelValue:{},formTextareaSize:{},rounded:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:e}){const a=n,s=Ot(),o=xt("formInline",!1),r=xt("inputGroup",!1),i=ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed dark:disabled:bg-darkmode-800/50 dark:disabled:border-transparent","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50 [&[readonly]]:dark:border-transparent","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md placeholder:text-slate-400/90 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50 dark:placeholder:text-slate-500/80",a.formTextareaSize=="sm"&&"text-xs py-1.5 px-2",a.formTextareaSize=="lg"&&"text-lg py-1.5 px-4",a.rounded&&"rounded-full",o&&"flex-1",r&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r z-10",typeof s.class=="string"&&s.class])),u=e,h=ee({get(){return a.modelValue===void 0?a.value:a.modelValue},set(m){u("update:modelValue",m)}});return(m,p)=>rs((L(),U("textarea",Ft({type:a.type,class:i.value},t(Pt).omit(t(s),"class"),{"onUpdate:modelValue":p[0]||(p[0]=b=>h.value=b)}),null,16,Gle)),[[Lo,h.value]])}}),Kle={inheritAttrs:!1},K=Ce({...Kle,__name:"FormLabel",setup(n){const e=Ot(),a=xt("formInline",!1),s=ee(()=>At(["inline-block mb-2",a&&"mb-2 sm:mb-0 sm:mr-5 sm:text-right",typeof e.class=="string"&&e.class]));return(o,r)=>(L(),U("label",Ft({class:s.value},t(Pt).omit(t(e),"class")),[Lt(o.$slots,"default")],16))}}),Xle={inheritAttrs:!1},Zt=Ce({...Xle,__name:"FormSelect",props:{value:{},modelValue:{},formSelectSize:{}},emits:["update:modelValue"],setup(n,{emit:e}){const a=O(),s=n,o=Ot(),r=xt("formInline",!1),i=ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed disabled:dark:bg-darkmode-800/50","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md py-2 px-3 pr-8 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50",s.formSelectSize=="sm"&&"text-xs py-1.5 pl-2 pr-8",s.formSelectSize=="lg"&&"text-lg py-1.5 pl-4 pr-8",r&&"flex-1",typeof o.class=="string"&&o.class])),u=e,h=ee({get(){var m;if(s.modelValue===void 0&&s.value===void 0){const p=(m=a.value)==null?void 0:m.querySelectorAll("option")[0];return p!==void 0&&(p.getAttribute("value")!==null?p.getAttribute("value"):p.text)}return s.modelValue===void 0?s.value:s.modelValue},set(m){u("update:modelValue",m)}});return(m,p)=>rs((L(),U("select",Ft({ref_key:"selectRef",ref:a,class:i.value},t(Pt).omit(t(o),"class"),{"onUpdate:modelValue":p[0]||(p[0]=b=>h.value=b)}),[Lt(m.$slots,"default")],16)),[[Jj,h.value]])}}),Yle={class:"relative"},Qle=["readonly"],Jle={key:1,class:"absolute z-20 mt-1 max-h-60 w-full overflow-auto rounded-md border border-slate-200 bg-white text-sm shadow-lg dark:border-slate-600 dark:bg-darkmode-800"},ece=["onMousedown"],tce={inheritAttrs:!1},Bt=Ce({...tce,__name:"FormSelectSearch",props:{modelValue:{},options:{},formInputSize:{},rounded:{type:Boolean}},emits:["update:modelValue","change","update:search","search","clear"],setup(n,{emit:e}){const a=n,s=e,o=Ot(),r=xt("formInline",!1),i=xt("inputGroup",!1),u=O(null),h=O(!1),m=O(!1),p=O(""),b=ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed dark:disabled:bg-darkmode-800/50 dark:disabled:border-transparent","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50 [&[readonly]]:dark:border-transparent","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md placeholder:text-slate-400/90 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50 dark:placeholder:text-slate-500/80",a.formInputSize=="sm"&&"text-xs py-1.5 px-2",a.formInputSize=="lg"&&"text-lg py-1.5 px-4",a.rounded&&"rounded-full",r&&"flex-1",i&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r z-10","pr-8",typeof o.class=="string"&&o.class])),x=ee(()=>!a.options||a.modelValue===void 0||a.modelValue===null?null:a.options.find(M=>M.value===a.modelValue)??null),w=ee(()=>a.options??[]),$=ee(()=>x.value!==null),D=ee(()=>a.modelValue!==void 0&&a.modelValue!==null&&a.modelValue!=="");dt(()=>[a.modelValue,a.options],()=>{h.value||(p.value=x.value?x.value.label:"")},{immediate:!0});const V=Pt.debounce(M=>{s("update:search",M),s("search",M)},300),R=M=>{if($.value)return;const v=M.target.value;p.value=v,m.value=!0,V(v)},E=()=>{$.value||(h.value=!0,m.value=!0)},P=()=>{h.value=!1,m.value=!1,p.value=x.value?x.value.label:p.value},S=M=>{s("update:modelValue",M.value),s("change",M.value),p.value=M.label,m.value=!1,h.value=!1},C=()=>{s("update:modelValue",null),s("change",null),p.value="",m.value=!1,h.value=!1,s("update:search",""),s("search",""),s("clear")};return(M,g)=>(L(),U("div",Yle,[rs(c("input",Ft({ref_key:"inputRef",ref:u,class:b.value,type:"text"},t(Pt).omit(t(o),"class"),{"onUpdate:modelValue":g[0]||(g[0]=v=>p.value=v),readonly:$.value,onFocus:E,onBlur:P,onInput:R}),null,16,Qle),[[Lo,p.value]]),D.value?(L(),U("button",{key:0,type:"button",class:"absolute inset-y-0 right-0 flex items-center pr-3 text-slate-500 hover:text-danger",onMousedown:Rt(C,["prevent","stop"])},[l(t(re),{icon:"X",class:"w-4 h-4"})],32)):Me("",!0),m.value&&w.value.length>0?(L(),U("ul",Jle,[(L(!0),U(ke,null,Fe(w.value,v=>(L(),U("li",{key:v.value,class:"cursor-pointer px-3 py-2 hover:bg-slate-100 dark:hover:bg-darkmode-700",onMousedown:Rt(T=>S(v),["prevent"])},_(v.label),41,ece))),128))])):Me("",!0)]))}}),ace=Ce({__name:"FormSwitch",setup(n){return(e,a)=>(L(),ge(t(Nn),null,{default:f(()=>[Lt(e.$slots,"default")]),_:3}))}}),nce={inheritAttrs:!1},sce=Ce({...nce,__name:"Input",props:{modelValue:{},type:{}},emits:["update:modelValue"],setup(n,{emit:e}){const a=n,s=Ot(),o=ee(()=>At(["w-[38px] h-[24px] p-px rounded-full relative","before:w-[20px] before:h-[20px] before:shadow-[1px_1px_3px_rgba(0,0,0,0.25)] before:transition-[margin-left] before:duration-200 before:ease-in-out before:absolute before:inset-y-0 before:my-auto before:rounded-full before:dark:bg-darkmode-600","checked:bg-primary checked:border-primary checked:bg-none","before:checked:ml-[14px] before:checked:bg-white",typeof s.class=="string"&&s.class])),r=e,i=ee({get(){return a.modelValue},set(u){r("update:modelValue",u)}});return(u,h)=>(L(),ge(t(Nn).Input,Ft({type:a.type,class:o.value},t(Pt).omit(t(s),"class"),{modelValue:i.value,"onUpdate:modelValue":h[0]||(h[0]=m=>i.value=m)}),null,16,["type","class","modelValue"]))}}),oce=Ce({__name:"Label",setup(n){return(e,a)=>(L(),ge(t(Nn).Label,null,{default:f(()=>[Lt(e.$slots,"default")]),_:3}))}}),wt=Object.assign({},ace,{Input:sce,Label:oce}),rce={inheritAttrs:!1},ice=Ce({...rce,__name:"InputGroup",setup(n){const e=Ot(),a=ee(()=>At(["flex",typeof e.class=="string"&&e.class]));return St("inputGroup",!0),(s,o)=>(L(),U("div",Ft({class:a.value},t(Pt).omit(t(e),"class")),[Lt(s.$slots,"default")],16))}}),lce={inheritAttrs:!1},cce=Ce({...lce,__name:"Text",setup(n){const e=Ot(),a=xt("inputGroup"),s=ee(()=>At(["py-2 px-3 bg-slate-100 border shadow-sm border-slate-200 text-slate-600 dark:bg-darkmode-900/20 dark:border-darkmode-900/20 dark:text-slate-400",a&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r",typeof e.class=="string"&&e.class]));return(o,r)=>(L(),U("div",Ft({class:s.value},t(Pt).omit(t(e),"class")),[Lt(o.$slots,"default")],16))}});Object.assign({},ice,{Text:cce});function FN(n,e){return function(){return n.apply(e,arguments)}}const{toString:dce}=Object.prototype,{getPrototypeOf:QT}=Object,i9=(n=>e=>{const a=dce.call(e);return n[a]||(n[a]=a.slice(8,-1).toLowerCase())})(Object.create(null)),Po=n=>(n=n.toLowerCase(),e=>i9(e)===n),l9=n=>e=>typeof e===n,{isArray:Fc}=Array,Xd=l9("undefined");function uce(n){return n!==null&&!Xd(n)&&n.constructor!==null&&!Xd(n.constructor)&&Hs(n.constructor.isBuffer)&&n.constructor.isBuffer(n)}const jN=Po("ArrayBuffer");function pce(n){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(n):e=n&&n.buffer&&jN(n.buffer),e}const hce=l9("string"),Hs=l9("function"),HN=l9("number"),c9=n=>n!==null&&typeof n=="object",fce=n=>n===!0||n===!1,eL=n=>{if(i9(n)!=="object")return!1;const e=QT(n);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in n)&&!(Symbol.iterator in n)},mce=Po("Date"),vce=Po("File"),yce=Po("Blob"),_ce=Po("FileList"),gce=n=>c9(n)&&Hs(n.pipe),kce=n=>{let e;return n&&(typeof FormData=="function"&&n instanceof FormData||Hs(n.append)&&((e=i9(n))==="formdata"||e==="object"&&Hs(n.toString)&&n.toString()==="[object FormData]"))},bce=Po("URLSearchParams"),wce=n=>n.trim?n.trim():n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function fu(n,e,{allOwnKeys:a=!1}={}){if(n===null||typeof n>"u")return;let s,o;if(typeof n!="object"&&(n=[n]),Fc(n))for(s=0,o=n.length;s0;)if(o=a[s],e===o.toLowerCase())return o;return null}const zN=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,BN=n=>!Xd(n)&&n!==zN;function kE(){const{caseless:n}=BN(this)&&this||{},e={},a=(s,o)=>{const r=n&&NN(e,o)||o;eL(e[r])&&eL(s)?e[r]=kE(e[r],s):eL(s)?e[r]=kE({},s):Fc(s)?e[r]=s.slice():e[r]=s};for(let s=0,o=arguments.length;s(fu(e,(o,r)=>{a&&Hs(o)?n[r]=FN(o,a):n[r]=o},{allOwnKeys:s}),n),Mce=n=>(n.charCodeAt(0)===65279&&(n=n.slice(1)),n),Cce=(n,e,a,s)=>{n.prototype=Object.create(e.prototype,s),n.prototype.constructor=n,Object.defineProperty(n,"super",{value:e.prototype}),a&&Object.assign(n.prototype,a)},Sce=(n,e,a,s)=>{let o,r,i;const u={};if(e=e||{},n==null)return e;do{for(o=Object.getOwnPropertyNames(n),r=o.length;r-- >0;)i=o[r],(!s||s(i,n,e))&&!u[i]&&(e[i]=n[i],u[i]=!0);n=a!==!1&&QT(n)}while(n&&(!a||a(n,e))&&n!==Object.prototype);return e},Ice=(n,e,a)=>{n=String(n),(a===void 0||a>n.length)&&(a=n.length),a-=e.length;const s=n.indexOf(e,a);return s!==-1&&s===a},Lce=n=>{if(!n)return null;if(Fc(n))return n;let e=n.length;if(!HN(e))return null;const a=new Array(e);for(;e-- >0;)a[e]=n[e];return a},$ce=(n=>e=>n&&e instanceof n)(typeof Uint8Array<"u"&&QT(Uint8Array)),Ace=(n,e)=>{const s=(n&&n[Symbol.iterator]).call(n);let o;for(;(o=s.next())&&!o.done;){const r=o.value;e.call(n,r[0],r[1])}},Ece=(n,e)=>{let a;const s=[];for(;(a=n.exec(e))!==null;)s.push(a);return s},Tce=Po("HTMLFormElement"),Pce=n=>n.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(a,s,o){return s.toUpperCase()+o}),wU=(({hasOwnProperty:n})=>(e,a)=>n.call(e,a))(Object.prototype),Dce=Po("RegExp"),qN=(n,e)=>{const a=Object.getOwnPropertyDescriptors(n),s={};fu(a,(o,r)=>{let i;(i=e(o,r,n))!==!1&&(s[r]=i||o)}),Object.defineProperties(n,s)},Rce=n=>{qN(n,(e,a)=>{if(Hs(n)&&["arguments","caller","callee"].indexOf(a)!==-1)return!1;const s=n[a];if(Hs(s)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+a+"'")})}})},Oce=(n,e)=>{const a={},s=o=>{o.forEach(r=>{a[r]=!0})};return Fc(n)?s(n):s(String(n).split(e)),a},Vce=()=>{},Uce=(n,e)=>(n=+n,Number.isFinite(n)?n:e),nA="abcdefghijklmnopqrstuvwxyz",xU="0123456789",WN={DIGIT:xU,ALPHA:nA,ALPHA_DIGIT:nA+nA.toUpperCase()+xU},Fce=(n=16,e=WN.ALPHA_DIGIT)=>{let a="";const{length:s}=e;for(;n--;)a+=e[Math.random()*s|0];return a};function jce(n){return!!(n&&Hs(n.append)&&n[Symbol.toStringTag]==="FormData"&&n[Symbol.iterator])}const Hce=n=>{const e=new Array(10),a=(s,o)=>{if(c9(s)){if(e.indexOf(s)>=0)return;if(!("toJSON"in s)){e[o]=s;const r=Fc(s)?[]:{};return fu(s,(i,u)=>{const h=a(i,o+1);!Xd(h)&&(r[u]=h)}),e[o]=void 0,r}}return s};return a(n,0)},Nce=Po("AsyncFunction"),zce=n=>n&&(c9(n)||Hs(n))&&Hs(n.then)&&Hs(n.catch),Je={isArray:Fc,isArrayBuffer:jN,isBuffer:uce,isFormData:kce,isArrayBufferView:pce,isString:hce,isNumber:HN,isBoolean:fce,isObject:c9,isPlainObject:eL,isUndefined:Xd,isDate:mce,isFile:vce,isBlob:yce,isRegExp:Dce,isFunction:Hs,isStream:gce,isURLSearchParams:bce,isTypedArray:$ce,isFileList:_ce,forEach:fu,merge:kE,extend:xce,trim:wce,stripBOM:Mce,inherits:Cce,toFlatObject:Sce,kindOf:i9,kindOfTest:Po,endsWith:Ice,toArray:Lce,forEachEntry:Ace,matchAll:Ece,isHTMLForm:Tce,hasOwnProperty:wU,hasOwnProp:wU,reduceDescriptors:qN,freezeMethods:Rce,toObjectSet:Oce,toCamelCase:Pce,noop:Vce,toFiniteNumber:Uce,findKey:NN,global:zN,isContextDefined:BN,ALPHABET:WN,generateString:Fce,isSpecCompliantForm:jce,toJSONObject:Hce,isAsyncFn:Nce,isThenable:zce};function va(n,e,a,s,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=n,this.name="AxiosError",e&&(this.code=e),a&&(this.config=a),s&&(this.request=s),o&&(this.response=o)}Je.inherits(va,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Je.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const GN=va.prototype,ZN={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(n=>{ZN[n]={value:n}});Object.defineProperties(va,ZN);Object.defineProperty(GN,"isAxiosError",{value:!0});va.from=(n,e,a,s,o,r)=>{const i=Object.create(GN);return Je.toFlatObject(n,i,function(h){return h!==Error.prototype},u=>u!=="isAxiosError"),va.call(i,n.message,e,a,s,o),i.cause=n,i.name=n.name,r&&Object.assign(i,r),i};const Bce=null;function bE(n){return Je.isPlainObject(n)||Je.isArray(n)}function KN(n){return Je.endsWith(n,"[]")?n.slice(0,-2):n}function MU(n,e,a){return n?n.concat(e).map(function(o,r){return o=KN(o),!a&&r?"["+o+"]":o}).join(a?".":""):e}function qce(n){return Je.isArray(n)&&!n.some(bE)}const Wce=Je.toFlatObject(Je,{},null,function(e){return/^is[A-Z]/.test(e)});function d9(n,e,a){if(!Je.isObject(n))throw new TypeError("target must be an object");e=e||new FormData,a=Je.toFlatObject(a,{metaTokens:!0,dots:!1,indexes:!1},!1,function(D,V){return!Je.isUndefined(V[D])});const s=a.metaTokens,o=a.visitor||p,r=a.dots,i=a.indexes,h=(a.Blob||typeof Blob<"u"&&Blob)&&Je.isSpecCompliantForm(e);if(!Je.isFunction(o))throw new TypeError("visitor must be a function");function m($){if($===null)return"";if(Je.isDate($))return $.toISOString();if(!h&&Je.isBlob($))throw new va("Blob is not supported. Use a Buffer instead.");return Je.isArrayBuffer($)||Je.isTypedArray($)?h&&typeof Blob=="function"?new Blob([$]):Buffer.from($):$}function p($,D,V){let R=$;if($&&!V&&typeof $=="object"){if(Je.endsWith(D,"{}"))D=s?D:D.slice(0,-2),$=JSON.stringify($);else if(Je.isArray($)&&qce($)||(Je.isFileList($)||Je.endsWith(D,"[]"))&&(R=Je.toArray($)))return D=KN(D),R.forEach(function(P,S){!(Je.isUndefined(P)||P===null)&&e.append(i===!0?MU([D],S,r):i===null?D:D+"[]",m(P))}),!1}return bE($)?!0:(e.append(MU(V,D,r),m($)),!1)}const b=[],x=Object.assign(Wce,{defaultVisitor:p,convertValue:m,isVisitable:bE});function w($,D){if(!Je.isUndefined($)){if(b.indexOf($)!==-1)throw Error("Circular reference detected in "+D.join("."));b.push($),Je.forEach($,function(R,E){(!(Je.isUndefined(R)||R===null)&&o.call(e,R,Je.isString(E)?E.trim():E,D,x))===!0&&w(R,D?D.concat(E):[E])}),b.pop()}}if(!Je.isObject(n))throw new TypeError("data must be an object");return w(n),e}function CU(n){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(n).replace(/[!'()~]|%20|%00/g,function(s){return e[s]})}function JT(n,e){this._pairs=[],n&&d9(n,this,e)}const XN=JT.prototype;XN.append=function(e,a){this._pairs.push([e,a])};XN.toString=function(e){const a=e?function(s){return e.call(this,s,CU)}:CU;return this._pairs.map(function(o){return a(o[0])+"="+a(o[1])},"").join("&")};function Gce(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function YN(n,e,a){if(!e)return n;const s=a&&a.encode||Gce,o=a&&a.serialize;let r;if(o?r=o(e,a):r=Je.isURLSearchParams(e)?e.toString():new JT(e,a).toString(s),r){const i=n.indexOf("#");i!==-1&&(n=n.slice(0,i)),n+=(n.indexOf("?")===-1?"?":"&")+r}return n}class SU{constructor(){this.handlers=[]}use(e,a,s){return this.handlers.push({fulfilled:e,rejected:a,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Je.forEach(this.handlers,function(s){s!==null&&e(s)})}}const QN={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Zce=typeof URLSearchParams<"u"?URLSearchParams:JT,Kce=typeof FormData<"u"?FormData:null,Xce=typeof Blob<"u"?Blob:null,Yce={isBrowser:!0,classes:{URLSearchParams:Zce,FormData:Kce,Blob:Xce},protocols:["http","https","file","blob","url","data"]},JN=typeof window<"u"&&typeof document<"u",Qce=(n=>JN&&["ReactNative","NativeScript","NS"].indexOf(n)<0)(typeof navigator<"u"&&navigator.product),Jce=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",ede=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:JN,hasStandardBrowserEnv:Qce,hasStandardBrowserWebWorkerEnv:Jce},Symbol.toStringTag,{value:"Module"})),Mo={...ede,...Yce};function tde(n,e){return d9(n,new Mo.classes.URLSearchParams,Object.assign({visitor:function(a,s,o,r){return Mo.isNode&&Je.isBuffer(a)?(this.append(s,a.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},e))}function ade(n){return Je.matchAll(/\w+|\[(\w*)]/g,n).map(e=>e[0]==="[]"?"":e[1]||e[0])}function nde(n){const e={},a=Object.keys(n);let s;const o=a.length;let r;for(s=0;s=a.length;return i=!i&&Je.isArray(o)?o.length:i,h?(Je.hasOwnProp(o,i)?o[i]=[o[i],s]:o[i]=s,!u):((!o[i]||!Je.isObject(o[i]))&&(o[i]=[]),e(a,s,o[i],r)&&Je.isArray(o[i])&&(o[i]=nde(o[i])),!u)}if(Je.isFormData(n)&&Je.isFunction(n.entries)){const a={};return Je.forEachEntry(n,(s,o)=>{e(ade(s),o,a,0)}),a}return null}function sde(n,e,a){if(Je.isString(n))try{return(e||JSON.parse)(n),Je.trim(n)}catch(s){if(s.name!=="SyntaxError")throw s}return(a||JSON.stringify)(n)}const eP={transitional:QN,adapter:["xhr","http"],transformRequest:[function(e,a){const s=a.getContentType()||"",o=s.indexOf("application/json")>-1,r=Je.isObject(e);if(r&&Je.isHTMLForm(e)&&(e=new FormData(e)),Je.isFormData(e))return o?JSON.stringify(ez(e)):e;if(Je.isArrayBuffer(e)||Je.isBuffer(e)||Je.isStream(e)||Je.isFile(e)||Je.isBlob(e))return e;if(Je.isArrayBufferView(e))return e.buffer;if(Je.isURLSearchParams(e))return a.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let u;if(r){if(s.indexOf("application/x-www-form-urlencoded")>-1)return tde(e,this.formSerializer).toString();if((u=Je.isFileList(e))||s.indexOf("multipart/form-data")>-1){const h=this.env&&this.env.FormData;return d9(u?{"files[]":e}:e,h&&new h,this.formSerializer)}}return r||o?(a.setContentType("application/json",!1),sde(e)):e}],transformResponse:[function(e){const a=this.transitional||eP.transitional,s=a&&a.forcedJSONParsing,o=this.responseType==="json";if(e&&Je.isString(e)&&(s&&!this.responseType||o)){const i=!(a&&a.silentJSONParsing)&&o;try{return JSON.parse(e)}catch(u){if(i)throw u.name==="SyntaxError"?va.from(u,va.ERR_BAD_RESPONSE,this,null,this.response):u}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Mo.classes.FormData,Blob:Mo.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Je.forEach(["delete","get","head","post","put","patch"],n=>{eP.headers[n]={}});const tP=eP,ode=Je.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),rde=n=>{const e={};let a,s,o;return n&&n.split(` +`).forEach(function(i){o=i.indexOf(":"),a=i.substring(0,o).trim().toLowerCase(),s=i.substring(o+1).trim(),!(!a||e[a]&&ode[a])&&(a==="set-cookie"?e[a]?e[a].push(s):e[a]=[s]:e[a]=e[a]?e[a]+", "+s:s)}),e},IU=Symbol("internals");function fd(n){return n&&String(n).trim().toLowerCase()}function tL(n){return n===!1||n==null?n:Je.isArray(n)?n.map(tL):String(n)}function ide(n){const e=Object.create(null),a=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=a.exec(n);)e[s[1]]=s[2];return e}const lde=n=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(n.trim());function sA(n,e,a,s,o){if(Je.isFunction(s))return s.call(this,e,a);if(o&&(e=a),!!Je.isString(e)){if(Je.isString(s))return e.indexOf(s)!==-1;if(Je.isRegExp(s))return s.test(e)}}function cde(n){return n.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,a,s)=>a.toUpperCase()+s)}function dde(n,e){const a=Je.toCamelCase(" "+e);["get","set","has"].forEach(s=>{Object.defineProperty(n,s+a,{value:function(o,r,i){return this[s].call(this,e,o,r,i)},configurable:!0})})}let u9=class{constructor(e){e&&this.set(e)}set(e,a,s){const o=this;function r(u,h,m){const p=fd(h);if(!p)throw new Error("header name must be a non-empty string");const b=Je.findKey(o,p);(!b||o[b]===void 0||m===!0||m===void 0&&o[b]!==!1)&&(o[b||h]=tL(u))}const i=(u,h)=>Je.forEach(u,(m,p)=>r(m,p,h));return Je.isPlainObject(e)||e instanceof this.constructor?i(e,a):Je.isString(e)&&(e=e.trim())&&!lde(e)?i(rde(e),a):e!=null&&r(a,e,s),this}get(e,a){if(e=fd(e),e){const s=Je.findKey(this,e);if(s){const o=this[s];if(!a)return o;if(a===!0)return ide(o);if(Je.isFunction(a))return a.call(this,o,s);if(Je.isRegExp(a))return a.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,a){if(e=fd(e),e){const s=Je.findKey(this,e);return!!(s&&this[s]!==void 0&&(!a||sA(this,this[s],s,a)))}return!1}delete(e,a){const s=this;let o=!1;function r(i){if(i=fd(i),i){const u=Je.findKey(s,i);u&&(!a||sA(s,s[u],u,a))&&(delete s[u],o=!0)}}return Je.isArray(e)?e.forEach(r):r(e),o}clear(e){const a=Object.keys(this);let s=a.length,o=!1;for(;s--;){const r=a[s];(!e||sA(this,this[r],r,e,!0))&&(delete this[r],o=!0)}return o}normalize(e){const a=this,s={};return Je.forEach(this,(o,r)=>{const i=Je.findKey(s,r);if(i){a[i]=tL(o),delete a[r];return}const u=e?cde(r):String(r).trim();u!==r&&delete a[r],a[u]=tL(o),s[u]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const a=Object.create(null);return Je.forEach(this,(s,o)=>{s!=null&&s!==!1&&(a[o]=e&&Je.isArray(s)?s.join(", "):s)}),a}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,a])=>e+": "+a).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...a){const s=new this(e);return a.forEach(o=>s.set(o)),s}static accessor(e){const s=(this[IU]=this[IU]={accessors:{}}).accessors,o=this.prototype;function r(i){const u=fd(i);s[u]||(dde(o,i),s[u]=!0)}return Je.isArray(e)?e.forEach(r):r(e),this}};u9.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Je.reduceDescriptors(u9.prototype,({value:n},e)=>{let a=e[0].toUpperCase()+e.slice(1);return{get:()=>n,set(s){this[a]=s}}});Je.freezeMethods(u9);const ar=u9;function oA(n,e){const a=this||tP,s=e||a,o=ar.from(s.headers);let r=s.data;return Je.forEach(n,function(u){r=u.call(a,r,o.normalize(),e?e.status:void 0)}),o.normalize(),r}function tz(n){return!!(n&&n.__CANCEL__)}function mu(n,e,a){va.call(this,n??"canceled",va.ERR_CANCELED,e,a),this.name="CanceledError"}Je.inherits(mu,va,{__CANCEL__:!0});function ude(n,e,a){const s=a.config.validateStatus;!a.status||!s||s(a.status)?n(a):e(new va("Request failed with status code "+a.status,[va.ERR_BAD_REQUEST,va.ERR_BAD_RESPONSE][Math.floor(a.status/100)-4],a.config,a.request,a))}const pde=Mo.hasStandardBrowserEnv?{write(n,e,a,s,o,r){const i=[n+"="+encodeURIComponent(e)];Je.isNumber(a)&&i.push("expires="+new Date(a).toGMTString()),Je.isString(s)&&i.push("path="+s),Je.isString(o)&&i.push("domain="+o),r===!0&&i.push("secure"),document.cookie=i.join("; ")},read(n){const e=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(n){this.write(n,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function hde(n){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(n)}function fde(n,e){return e?n.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):n}function az(n,e){return n&&!hde(e)?fde(n,e):e}const mde=Mo.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),a=document.createElement("a");let s;function o(r){let i=r;return e&&(a.setAttribute("href",i),i=a.href),a.setAttribute("href",i),{href:a.href,protocol:a.protocol?a.protocol.replace(/:$/,""):"",host:a.host,search:a.search?a.search.replace(/^\?/,""):"",hash:a.hash?a.hash.replace(/^#/,""):"",hostname:a.hostname,port:a.port,pathname:a.pathname.charAt(0)==="/"?a.pathname:"/"+a.pathname}}return s=o(window.location.href),function(i){const u=Je.isString(i)?o(i):i;return u.protocol===s.protocol&&u.host===s.host}}():function(){return function(){return!0}}();function vde(n){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(n);return e&&e[1]||""}function yde(n,e){n=n||10;const a=new Array(n),s=new Array(n);let o=0,r=0,i;return e=e!==void 0?e:1e3,function(h){const m=Date.now(),p=s[r];i||(i=m),a[o]=h,s[o]=m;let b=r,x=0;for(;b!==o;)x+=a[b++],b=b%n;if(o=(o+1)%n,o===r&&(r=(r+1)%n),m-i{const r=o.loaded,i=o.lengthComputable?o.total:void 0,u=r-a,h=s(u),m=r<=i;a=r;const p={loaded:r,total:i,progress:i?r/i:void 0,bytes:u,rate:h||void 0,estimated:h&&i&&m?(i-r)/h:void 0,event:o};p[e?"download":"upload"]=!0,n(p)}}const _de=typeof XMLHttpRequest<"u",gde=_de&&function(n){return new Promise(function(a,s){let o=n.data;const r=ar.from(n.headers).normalize();let{responseType:i,withXSRFToken:u}=n,h;function m(){n.cancelToken&&n.cancelToken.unsubscribe(h),n.signal&&n.signal.removeEventListener("abort",h)}let p;if(Je.isFormData(o)){if(Mo.hasStandardBrowserEnv||Mo.hasStandardBrowserWebWorkerEnv)r.setContentType(!1);else if((p=r.getContentType())!==!1){const[D,...V]=p?p.split(";").map(R=>R.trim()).filter(Boolean):[];r.setContentType([D||"multipart/form-data",...V].join("; "))}}let b=new XMLHttpRequest;if(n.auth){const D=n.auth.username||"",V=n.auth.password?unescape(encodeURIComponent(n.auth.password)):"";r.set("Authorization","Basic "+btoa(D+":"+V))}const x=az(n.baseURL,n.url);b.open(n.method.toUpperCase(),YN(x,n.params,n.paramsSerializer),!0),b.timeout=n.timeout;function w(){if(!b)return;const D=ar.from("getAllResponseHeaders"in b&&b.getAllResponseHeaders()),R={data:!i||i==="text"||i==="json"?b.responseText:b.response,status:b.status,statusText:b.statusText,headers:D,config:n,request:b};ude(function(P){a(P),m()},function(P){s(P),m()},R),b=null}if("onloadend"in b?b.onloadend=w:b.onreadystatechange=function(){!b||b.readyState!==4||b.status===0&&!(b.responseURL&&b.responseURL.indexOf("file:")===0)||setTimeout(w)},b.onabort=function(){b&&(s(new va("Request aborted",va.ECONNABORTED,n,b)),b=null)},b.onerror=function(){s(new va("Network Error",va.ERR_NETWORK,n,b)),b=null},b.ontimeout=function(){let V=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const R=n.transitional||QN;n.timeoutErrorMessage&&(V=n.timeoutErrorMessage),s(new va(V,R.clarifyTimeoutError?va.ETIMEDOUT:va.ECONNABORTED,n,b)),b=null},Mo.hasStandardBrowserEnv&&(u&&Je.isFunction(u)&&(u=u(n)),u||u!==!1&&mde(x))){const D=n.xsrfHeaderName&&n.xsrfCookieName&&pde.read(n.xsrfCookieName);D&&r.set(n.xsrfHeaderName,D)}o===void 0&&r.setContentType(null),"setRequestHeader"in b&&Je.forEach(r.toJSON(),function(V,R){b.setRequestHeader(R,V)}),Je.isUndefined(n.withCredentials)||(b.withCredentials=!!n.withCredentials),i&&i!=="json"&&(b.responseType=n.responseType),typeof n.onDownloadProgress=="function"&&b.addEventListener("progress",LU(n.onDownloadProgress,!0)),typeof n.onUploadProgress=="function"&&b.upload&&b.upload.addEventListener("progress",LU(n.onUploadProgress)),(n.cancelToken||n.signal)&&(h=D=>{b&&(s(!D||D.type?new mu(null,n,b):D),b.abort(),b=null)},n.cancelToken&&n.cancelToken.subscribe(h),n.signal&&(n.signal.aborted?h():n.signal.addEventListener("abort",h)));const $=vde(x);if($&&Mo.protocols.indexOf($)===-1){s(new va("Unsupported protocol "+$+":",va.ERR_BAD_REQUEST,n));return}b.send(o||null)})},wE={http:Bce,xhr:gde};Je.forEach(wE,(n,e)=>{if(n){try{Object.defineProperty(n,"name",{value:e})}catch{}Object.defineProperty(n,"adapterName",{value:e})}});const $U=n=>`- ${n}`,kde=n=>Je.isFunction(n)||n===null||n===!1,nz={getAdapter:n=>{n=Je.isArray(n)?n:[n];const{length:e}=n;let a,s;const o={};for(let r=0;r`adapter ${u} `+(h===!1?"is not supported by the environment":"is not available in the build"));let i=e?r.length>1?`since : +`+r.map($U).join(` +`):" "+$U(r[0]):"as no adapter specified";throw new va("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return s},adapters:wE};function rA(n){if(n.cancelToken&&n.cancelToken.throwIfRequested(),n.signal&&n.signal.aborted)throw new mu(null,n)}function AU(n){return rA(n),n.headers=ar.from(n.headers),n.data=oA.call(n,n.transformRequest),["post","put","patch"].indexOf(n.method)!==-1&&n.headers.setContentType("application/x-www-form-urlencoded",!1),nz.getAdapter(n.adapter||tP.adapter)(n).then(function(s){return rA(n),s.data=oA.call(n,n.transformResponse,s),s.headers=ar.from(s.headers),s},function(s){return tz(s)||(rA(n),s&&s.response&&(s.response.data=oA.call(n,n.transformResponse,s.response),s.response.headers=ar.from(s.response.headers))),Promise.reject(s)})}const EU=n=>n instanceof ar?{...n}:n;function Ac(n,e){e=e||{};const a={};function s(m,p,b){return Je.isPlainObject(m)&&Je.isPlainObject(p)?Je.merge.call({caseless:b},m,p):Je.isPlainObject(p)?Je.merge({},p):Je.isArray(p)?p.slice():p}function o(m,p,b){if(Je.isUndefined(p)){if(!Je.isUndefined(m))return s(void 0,m,b)}else return s(m,p,b)}function r(m,p){if(!Je.isUndefined(p))return s(void 0,p)}function i(m,p){if(Je.isUndefined(p)){if(!Je.isUndefined(m))return s(void 0,m)}else return s(void 0,p)}function u(m,p,b){if(b in e)return s(m,p);if(b in n)return s(void 0,m)}const h={url:r,method:r,data:r,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:u,headers:(m,p)=>o(EU(m),EU(p),!0)};return Je.forEach(Object.keys(Object.assign({},n,e)),function(p){const b=h[p]||o,x=b(n[p],e[p],p);Je.isUndefined(x)&&b!==u||(a[p]=x)}),a}const sz="1.6.8",aP={};["object","boolean","number","function","string","symbol"].forEach((n,e)=>{aP[n]=function(s){return typeof s===n||"a"+(e<1?"n ":" ")+n}});const TU={};aP.transitional=function(e,a,s){function o(r,i){return"[Axios v"+sz+"] Transitional option '"+r+"'"+i+(s?". "+s:"")}return(r,i,u)=>{if(e===!1)throw new va(o(i," has been removed"+(a?" in "+a:"")),va.ERR_DEPRECATED);return a&&!TU[i]&&(TU[i]=!0,console.warn(o(i," has been deprecated since v"+a+" and will be removed in the near future"))),e?e(r,i,u):!0}};function bde(n,e,a){if(typeof n!="object")throw new va("options must be an object",va.ERR_BAD_OPTION_VALUE);const s=Object.keys(n);let o=s.length;for(;o-- >0;){const r=s[o],i=e[r];if(i){const u=n[r],h=u===void 0||i(u,r,n);if(h!==!0)throw new va("option "+r+" must be "+h,va.ERR_BAD_OPTION_VALUE);continue}if(a!==!0)throw new va("Unknown option "+r,va.ERR_BAD_OPTION)}}const xE={assertOptions:bde,validators:aP},Lr=xE.validators;let bL=class{constructor(e){this.defaults=e,this.interceptors={request:new SU,response:new SU}}async request(e,a){try{return await this._request(e,a)}catch(s){if(s instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;const r=o.stack?o.stack.replace(/^.+\n/,""):"";s.stack?r&&!String(s.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+r):s.stack=r}throw s}}_request(e,a){typeof e=="string"?(a=a||{},a.url=e):a=e||{},a=Ac(this.defaults,a);const{transitional:s,paramsSerializer:o,headers:r}=a;s!==void 0&&xE.assertOptions(s,{silentJSONParsing:Lr.transitional(Lr.boolean),forcedJSONParsing:Lr.transitional(Lr.boolean),clarifyTimeoutError:Lr.transitional(Lr.boolean)},!1),o!=null&&(Je.isFunction(o)?a.paramsSerializer={serialize:o}:xE.assertOptions(o,{encode:Lr.function,serialize:Lr.function},!0)),a.method=(a.method||this.defaults.method||"get").toLowerCase();let i=r&&Je.merge(r.common,r[a.method]);r&&Je.forEach(["delete","get","head","post","put","patch","common"],$=>{delete r[$]}),a.headers=ar.concat(i,r);const u=[];let h=!0;this.interceptors.request.forEach(function(D){typeof D.runWhen=="function"&&D.runWhen(a)===!1||(h=h&&D.synchronous,u.unshift(D.fulfilled,D.rejected))});const m=[];this.interceptors.response.forEach(function(D){m.push(D.fulfilled,D.rejected)});let p,b=0,x;if(!h){const $=[AU.bind(this),void 0];for($.unshift.apply($,u),$.push.apply($,m),x=$.length,p=Promise.resolve(a);b{if(!s._listeners)return;let r=s._listeners.length;for(;r-- >0;)s._listeners[r](o);s._listeners=null}),this.promise.then=o=>{let r;const i=new Promise(u=>{s.subscribe(u),r=u}).then(o);return i.cancel=function(){s.unsubscribe(r)},i},e(function(r,i,u){s.reason||(s.reason=new mu(r,i,u),a(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const a=this._listeners.indexOf(e);a!==-1&&this._listeners.splice(a,1)}static source(){let e;return{token:new oz(function(o){e=o}),cancel:e}}};const xde=wde;function Mde(n){return function(a){return n.apply(null,a)}}function Cde(n){return Je.isObject(n)&&n.isAxiosError===!0}const ME={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ME).forEach(([n,e])=>{ME[e]=n});const Sde=ME;function rz(n){const e=new aL(n),a=FN(aL.prototype.request,e);return Je.extend(a,aL.prototype,e,{allOwnKeys:!0}),Je.extend(a,e,null,{allOwnKeys:!0}),a.create=function(o){return rz(Ac(n,o))},a}const _n=rz(tP);_n.Axios=aL;_n.CanceledError=mu;_n.CancelToken=xde;_n.isCancel=tz;_n.VERSION=sz;_n.toFormData=d9;_n.AxiosError=va;_n.Cancel=_n.CanceledError;_n.all=function(e){return Promise.all(e)};_n.spread=Mde;_n.isAxiosError=Cde;_n.mergeConfig=Ac;_n.AxiosHeaders=ar;_n.formToJSON=n=>ez(Je.isHTMLForm(n)?new FormData(n):n);_n.getAdapter=nz.getAdapter;_n.HttpStatusCode=Sde;_n.default=_n;const vu=_n,{Axios:Xot,AxiosError:Yot,CanceledError:Qot,isCancel:Ide,CancelToken:Jot,VERSION:ert,all:trt,Cancel:art,isAxiosError:ot,spread:nrt,toFormData:srt,AxiosHeaders:ort,HttpStatusCode:rrt,formToJSON:irt,getAdapter:lrt,mergeConfig:crt}=vu,Qo=()=>typeof window<"u"&&window.APP_CONFIG&&window.APP_CONFIG.VITE_BACKEND_URL?window.APP_CONFIG.VITE_BACKEND_URL:"http://localhost:8000",nt=vu.create({baseURL:Qo(),headers:{"X-Requested-With":"XMLHttpRequest",Accept:"application/json","X-LogRequestResponse":"false","X-Sanitizer-Mode":""}});nt.defaults.withCredentials=!0;nt.defaults.withXSRFToken=!0;nt.interceptors.request.use(function(n){return n.headers["X-Localization"]=localStorage.getItem("DCSLAB_LANG")==null?document.documentElement.lang:localStorage.getItem("DCSLAB_LANG"),n.headers["X-Timezone"]=Intl.DateTimeFormat().resolvedOptions().timeZone,n});nt.interceptors.response.use(n=>n,n=>{if(n.response==null||n.response.status==null)return Promise.reject(n);switch(n.response.status){case 401:window.location.replace("/auth/login");break}return Promise.reject(n)});const nP=vu.create({baseURL:Qo(),headers:{"X-Requested-With":"XMLHttpRequest",Accept:"application/json"}});nP.defaults.withCredentials=!0;nP.interceptors.request.use(function(n){return n.headers["X-Timezone"]=Intl.DateTimeFormat().resolvedOptions().timeZone,n});vu.create();const Lde=()=>{const n=new URL(Qo());return n?n.hostname:"localhost"},$de=()=>{const n=new URL(Qo());return n?Number(n.port):8e3},ha=Qr("ziggyRoute",{state:()=>({ziggyRoute:{url:Lde(),port:$de(),defaults:{},routes:{"api.get.db.module.profile.read":{uri:"api/get/dashboard/module/profile/read",methods:["GET","HEAD"]},"api.get.db.core.user.menu":{uri:"api/get/dashboard/core/user/menu",methods:["GET","HEAD"]},"api.get.db.core.user.api":{uri:"api/get/dashboard/core/user/api",methods:["GET","HEAD"]}}}}),getters:{getZiggy(n){const e=sessionStorage.getItem("ziggyRoute");if(e){const a=JSON.parse(e);this.ziggyRoute=a}return n.ziggyRoute}},actions:{setZiggy(n){n!=null&&(sessionStorage.setItem("ziggyRoute",JSON.stringify(n)),this.ziggyRoute=n)}}});var Ade=String.prototype.replace,Ede=/%20/g,iA={RFC1738:"RFC1738",RFC3986:"RFC3986"},sP={default:iA.RFC3986,formatters:{RFC1738:function(n){return Ade.call(n,Ede,"+")},RFC3986:function(n){return String(n)}},RFC1738:iA.RFC1738,RFC3986:iA.RFC3986},Tde=sP,lA=Object.prototype.hasOwnProperty,Il=Array.isArray,vo=function(){for(var n=[],e=0;e<256;++e)n.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return n}(),Pde=function(e){for(;e.length>1;){var a=e.pop(),s=a.obj[a.prop];if(Il(s)){for(var o=[],r=0;r=48&&m<=57||m>=65&&m<=90||m>=97&&m<=122||r===Tde.RFC1738&&(m===40||m===41)){u+=i.charAt(h);continue}if(m<128){u=u+vo[m];continue}if(m<2048){u=u+(vo[192|m>>6]+vo[128|m&63]);continue}if(m<55296||m>=57344){u=u+(vo[224|m>>12]+vo[128|m>>6&63]+vo[128|m&63]);continue}h+=1,m=65536+((m&1023)<<10|i.charCodeAt(h)&1023),u+=vo[240|m>>18]+vo[128|m>>12&63]+vo[128|m>>6&63]+vo[128|m&63]}return u},Ude=function(e){for(var a=[{obj:{o:e},prop:"o"}],s=[],o=0;o"u")return S;var C;if(s==="comma"&&El(D))C=[{value:D.length>0?D.join(",")||null:void 0}];else if(El(u))C=u;else{var M=Object.keys(D);C=h?M.sort(h):M}for(var g=0;g"u"?On.allowDots:!!e.allowDots,charset:a,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:On.charsetSentinel,delimiter:typeof e.delimiter>"u"?On.delimiter:e.delimiter,encode:typeof e.encode=="boolean"?e.encode:On.encode,encoder:typeof e.encoder=="function"?e.encoder:On.encoder,encodeValuesOnly:typeof e.encodeValuesOnly=="boolean"?e.encodeValuesOnly:On.encodeValuesOnly,filter:r,format:s,formatter:o,serializeDate:typeof e.serializeDate=="function"?e.serializeDate:On.serializeDate,skipNulls:typeof e.skipNulls=="boolean"?e.skipNulls:On.skipNulls,sort:typeof e.sort=="function"?e.sort:null,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:On.strictNullHandling}},Xde=function(n,e){var a=n,s=Kde(e),o,r;typeof s.filter=="function"?(r=s.filter,a=r("",a)):El(s.filter)&&(r=s.filter,o=r);var i=[];if(typeof a!="object"||a===null)return"";var u;e&&e.arrayFormat in PU?u=e.arrayFormat:e&&"indices"in e?u=e.indices?"indices":"repeat":u="indices";var h=PU[u];o||(o=Object.keys(a)),s.sort&&o.sort(s.sort);for(var m=0;m0?x+b:""},Ec=lz,SE=Object.prototype.hasOwnProperty,Yde=Array.isArray,Rn={allowDots:!1,allowPrototypes:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:Ec.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},Qde=function(n){return n.replace(/&#(\d+);/g,function(e,a){return String.fromCharCode(parseInt(a,10))})},dz=function(n,e){return n&&typeof n=="string"&&e.comma&&n.indexOf(",")>-1?n.split(","):n},Jde="utf8=%26%2310003%3B",eue="utf8=%E2%9C%93",tue=function(e,a){var s={},o=a.ignoreQueryPrefix?e.replace(/^\?/,""):e,r=a.parameterLimit===1/0?void 0:a.parameterLimit,i=o.split(a.delimiter,r),u=-1,h,m=a.charset;if(a.charsetSentinel)for(h=0;h-1&&($=Yde($)?[$]:$),SE.call(s,w)?s[w]=Ec.combine(s[w],$):s[w]=$}return s},aue=function(n,e,a,s){for(var o=s?e:dz(e,a),r=n.length-1;r>=0;--r){var i,u=n[r];if(u==="[]"&&a.parseArrays)i=[].concat(o);else{i=a.plainObjects?Object.create(null):{};var h=u.charAt(0)==="["&&u.charAt(u.length-1)==="]"?u.slice(1,-1):u,m=parseInt(h,10);!a.parseArrays&&h===""?i={0:o}:!isNaN(m)&&u!==h&&String(m)===h&&m>=0&&a.parseArrays&&m<=a.arrayLimit?(i=[],i[m]=o):h!=="__proto__"&&(i[h]=o)}o=i}return o},nue=function(e,a,s,o){if(e){var r=s.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/,u=/(\[[^[\]]*])/g,h=s.depth>0&&i.exec(r),m=h?r.slice(0,h.index):r,p=[];if(m){if(!s.plainObjects&&SE.call(Object.prototype,m)&&!s.allowPrototypes)return;p.push(m)}for(var b=0;s.depth>0&&(h=u.exec(r))!==null&&b"u"?Rn.charset:e.charset;return{allowDots:typeof e.allowDots>"u"?Rn.allowDots:!!e.allowDots,allowPrototypes:typeof e.allowPrototypes=="boolean"?e.allowPrototypes:Rn.allowPrototypes,arrayLimit:typeof e.arrayLimit=="number"?e.arrayLimit:Rn.arrayLimit,charset:a,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:Rn.charsetSentinel,comma:typeof e.comma=="boolean"?e.comma:Rn.comma,decoder:typeof e.decoder=="function"?e.decoder:Rn.decoder,delimiter:typeof e.delimiter=="string"||Ec.isRegExp(e.delimiter)?e.delimiter:Rn.delimiter,depth:typeof e.depth=="number"||e.depth===!1?+e.depth:Rn.depth,ignoreQueryPrefix:e.ignoreQueryPrefix===!0,interpretNumericEntities:typeof e.interpretNumericEntities=="boolean"?e.interpretNumericEntities:Rn.interpretNumericEntities,parameterLimit:typeof e.parameterLimit=="number"?e.parameterLimit:Rn.parameterLimit,parseArrays:e.parseArrays!==!1,plainObjects:typeof e.plainObjects=="boolean"?e.plainObjects:Rn.plainObjects,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:Rn.strictNullHandling}},oue=function(n,e){var a=sue(e);if(n===""||n===null||typeof n>"u")return a.plainObjects?Object.create(null):{};for(var s=typeof n=="string"?tue(n,a):n,o=a.plainObjects?Object.create(null):{},r=Object.keys(s),i=0;i({name:s.replace(/{|\??}/g,""),required:!/\?}$/.test(s)})))!=null?e:[]}matchesUrl(e){if(!this.definition.methods.includes("GET"))return!1;const a=this.template.replace(/(\/?){([^}?]*)(\??)}/g,(i,u,h,m)=>{var p;const b=`(?<${h}>${((p=this.wheres[h])==null?void 0:p.replace(/(^\^)|(\$$)/g,""))||"[^/?]+"})`;return m?`(${u}${b})?`:`${u}${b}`}).replace(/^\w+:\/\//,""),[s,o]=e.replace(/^\w+:\/\//,"").split("?"),r=new RegExp(`^${a}/?$`).exec(decodeURI(s));if(r){for(const i in r.groups)r.groups[i]=typeof r.groups[i]=="string"?decodeURIComponent(r.groups[i]):r.groups[i];return{params:r.groups,query:uz.parse(o)}}return!1}compile(e){return this.parameterSegments.length?this.template.replace(/{([^}?]+)(\??)}/g,(a,s,o)=>{var r,i;if(!o&&[null,void 0].includes(e[s]))throw new Error(`Ziggy error: '${s}' parameter is required for route '${this.name}'.`);if(this.wheres[s]&&!new RegExp(`^${o?`(${this.wheres[s]})?`:this.wheres[s]}$`).test((i=e[s])!=null?i:""))throw new Error(`Ziggy error: '${s}' parameter does not match required format '${this.wheres[s]}' for route '${this.name}'.`);return encodeURI((r=e[s])!=null?r:"").replace(/%7C/g,"|").replace(/%25/g,"%").replace(/\$/g,"%24")}).replace(`${this.origin}//`,`${this.origin}/`).replace(/\/+$/,""):this.template}}class cue extends String{constructor(e,a,s=!0,o){if(super(),this.t=o??(typeof Ziggy<"u"?Ziggy:globalThis==null?void 0:globalThis.Ziggy),this.t=vs({},this.t,{absolute:s}),e){if(!this.t.routes[e])throw new Error(`Ziggy error: route '${e}' is not in the route list.`);this.i=new cA(e,this.t.routes[e],this.t),this.o=this.h(a)}}toString(){const e=Object.keys(this.o).filter(a=>!this.i.parameterSegments.some(({name:s})=>s===a)).filter(a=>a!=="_query").reduce((a,s)=>vs({},a,{[s]:this.o[s]}),{});return this.i.compile(this.o)+uz.stringify(vs({},e,this.o._query),{addQueryPrefix:!0,arrayFormat:"indices",encodeValuesOnly:!0,skipNulls:!0,encoder:(a,s)=>typeof a=="boolean"?Number(a):s(a)})}u(e){e?this.t.absolute&&e.startsWith("/")&&(e=this.l().host+e):e=this.m();let a={};const[s,o]=Object.entries(this.t.routes).find(([r,i])=>a=new cA(r,i,this.t).matchesUrl(e))||[void 0,void 0];return vs({name:s},a,{route:o})}m(){const{host:e,pathname:a,search:s}=this.l();return(this.t.absolute?e+a:a.replace(this.t.url.replace(/^\w*:\/\/[^/]+/,""),"").replace(/^\/+/,"/"))+s}current(e,a){const{name:s,params:o,query:r,route:i}=this.u();if(!e)return s;const u=new RegExp(`^${e.replace(/\./g,"\\.").replace(/\*/g,".*")}$`).test(s);if([null,void 0].includes(a)||!u)return u;const h=new cA(s,i,this.t);a=this.h(a,h);const m=vs({},o,r);if(Object.values(a).every(b=>!b)&&!Object.values(m).some(b=>b!==void 0))return!0;const p=(b,x)=>Object.entries(b).every(([w,$])=>Array.isArray($)&&Array.isArray(x[w])?$.every(D=>x[w].includes(D)):typeof $=="object"&&typeof x[w]=="object"&&$!==null&&x[w]!==null?p($,x[w]):x[w]==$);return p(a,m)}l(){var e,a,s,o,r,i;const{host:u="",pathname:h="",search:m=""}=typeof window<"u"?window.location:{};return{host:(e=(a=this.t.location)==null?void 0:a.host)!=null?e:u,pathname:(s=(o=this.t.location)==null?void 0:o.pathname)!=null?s:h,search:(r=(i=this.t.location)==null?void 0:i.search)!=null?r:m}}get params(){const{params:e,query:a}=this.u();return vs({},e,a)}has(e){return Object.keys(this.t.routes).includes(e)}h(e={},a=this.i){e!=null||(e={}),e=["string","number"].includes(typeof e)?[e]:e;const s=a.parameterSegments.filter(({name:o})=>!this.t.defaults[o]);return Array.isArray(e)?e=e.reduce((o,r,i)=>vs({},o,s[i]?{[s[i].name]:r}:typeof r=="object"?r:{[r]:""}),{}):s.length!==1||e[s[0].name]||!e.hasOwnProperty(Object.values(a.bindings)[0])&&!e.hasOwnProperty("id")||(e={[s[0].name]:e}),vs({},this.p(a),this.$(e,a))}p(e){return e.parameterSegments.filter(({name:a})=>this.t.defaults[a]).reduce((a,{name:s},o)=>vs({},a,{[s]:this.t.defaults[s]}),{})}$(e,{bindings:a,parameterSegments:s}){return Object.entries(e).reduce((o,[r,i])=>{if(!i||typeof i!="object"||Array.isArray(i)||!s.some(({name:u})=>u===r))return vs({},o,{[r]:i});if(!i.hasOwnProperty(a[r])){if(!i.hasOwnProperty("id"))throw new Error(`Ziggy error: object passed as '${r}' parameter is missing route model binding key '${a[r]}'.`);a[r]="id"}return vs({},o,{[r]:i[a[r]]})},{})}valueOf(){return this.toString()}}function je(n,e,a,s){const o=new cue(n,e,a,s);return n?o.toString():o}class Dt{constructor(){mt(this,"debugMode",!1);mt(this,"DCSLAB_SYSTEM_KEY","DCSLAB_SYSTEM");mt(this,"DCSLAB_LAST_ENTITY_KEY","DCSLAB_LAST_ENTITY");this.debugMode="true"}getCachedDDL(e){const a=sessionStorage.getItem(this.DCSLAB_SYSTEM_KEY);if(a==null)return null;const s=this.debugMode?JSON.parse(a):JSON.parse(atob(a));return Object.hasOwnProperty.call(s,e)?s[e]:null}setCachedDDL(e,a){if(a==null)return;let s=sessionStorage.getItem(this.DCSLAB_SYSTEM_KEY);s==null&&(s=JSON.stringify(new Object));const o=this.debugMode?JSON.parse(s):JSON.parse(atob(s));o[e]=a,this.debugMode?sessionStorage.setItem(this.DCSLAB_SYSTEM_KEY,JSON.stringify(o)):sessionStorage.setItem(this.DCSLAB_SYSTEM_KEY,btoa(JSON.stringify(o)))}getLastEntity(e){const a=sessionStorage.getItem(this.DCSLAB_LAST_ENTITY_KEY);if(a==null)return null;const s=this.debugMode?JSON.parse(a):JSON.parse(atob(a));return s==null||(e=e.toUpperCase(),!Object.hasOwnProperty.call(s,e))?null:s[e]}setLastEntity(e,a){if(e=e.toUpperCase(),a==null)return;const s={};s[e]=a,this.debugMode?sessionStorage.setItem(this.DCSLAB_LAST_ENTITY_KEY,JSON.stringify(s)):sessionStorage.setItem(this.DCSLAB_LAST_ENTITY_KEY,btoa(JSON.stringify(s)))}removeLastEntity(e){const a=sessionStorage.getItem(this.DCSLAB_LAST_ENTITY_KEY);if(a==null)return;const s=this.debugMode?JSON.parse(a):JSON.parse(atob(a));if(s==null||(e=e.toUpperCase(),!Object.hasOwnProperty.call(s,e)))return;let r={};r=ma.omit(s,[e]),this.debugMode?sessionStorage.setItem(this.DCSLAB_LAST_ENTITY_KEY,JSON.stringify(r)):sessionStorage.setItem(this.DCSLAB_LAST_ENTITY_KEY,btoa(JSON.stringify(r)))}isLastEntity(e){const a=sessionStorage.getItem(this.DCSLAB_LAST_ENTITY_KEY);if(a==null)return!1;const s=this.debugMode?JSON.parse(a):JSON.parse(atob(a));return s==null?!1:(e=e.toUpperCase(),e in s)}}class tn{generateZiggyUrlErrorServiceResponse(e){return{success:!1,errors:{ziggy:[e||"Ziggy error: unknown"]}}}generateAxiosValidationErrorServiceResponse(e){const a={success:!1},s=e.response,o=Object.keys(s.data.errors);for(const r of o)a.errors==null&&(a.errors={}),a.errors[r]=s.data.errors[r];return a}generateAxiosErrorServiceResponse(e){const a=e.response;return{success:!1,errors:{axios:[a.data.message+" ("+a.status+":"+a.statusText+")"]}}}}class aa{constructor(){mt(this,"ziggyRoute");mt(this,"ziggyRouteStore",ha());mt(this,"cacheService");mt(this,"errorHandlerService");this.ziggyRoute=this.ziggyRouteStore.getZiggy,this.cacheService=new Dt,this.errorHandlerService=new tn}async readUserMenu(){const e={success:!1};try{const a=je("api.get.db.core.user.menu",void 0,!1,this.ziggyRoute),s=await nt.get(a);return e.success=!0,e.data=s.data,e}catch(a){return a instanceof Error&&a.message.includes("Ziggy error")?this.errorHandlerService.generateZiggyUrlErrorServiceResponse(a.message):ot(a)?this.errorHandlerService.generateAxiosErrorServiceResponse(a):e}}async readUserApi(){const e={success:!1};try{const a=je("api.get.db.core.user.api",void 0,!1,this.ziggyRoute),s=await nt.get(a);return e.success=!0,e.data=s.data,e}catch(a){return a instanceof Error&&a.message.includes("Ziggy error")?this.errorHandlerService.generateZiggyUrlErrorServiceResponse(a.message):ot(a)?this.errorHandlerService.generateAxiosErrorServiceResponse(a):e}}async getStatusDDL(e=!0){const a=e?"statusDDL_with_deleted":"statusDDL_no_deleted";let s=[];try{if(this.cacheService.getCachedDDL(a)==null){const r=je("api.get.db.common.ddl.list.statuses",{show_deleted:e},!1,this.ziggyRoute),i=await nt.get(r);this.cacheService.setCachedDDL(a,i.data)}const o=this.cacheService.getCachedDDL(a);return o!=null&&(s=o),s}catch{return s}}async getCountriesDDL(){const e="countriesDDL";let a=[];try{if(this.cacheService.getCachedDDL(e)==null){const o=je("api.get.db.common.ddl.list.countries",void 0,!1,this.ziggyRoute),r=await nt.get(o);this.cacheService.setCachedDDL(e,r.data)}const s=this.cacheService.getCachedDDL(e);return s!=null&&(a=s),a}catch{return a}}async getPaymentTermTypesDDL(){const e="paymentTermTypesDDL";let a=[];try{if(this.cacheService.getCachedDDL(e)==null){const o=je("api.get.db.common.ddl.list.payment_term_types",void 0,!1,this.ziggyRoute),r=await nt.get(o);this.cacheService.setCachedDDL(e,r.data)}const s=this.cacheService.getCachedDDL(e);return s!=null&&(a=s),a}catch{return a}}async getRoundingTypesDDL(){const e="roundingTypesDDL";let a=[];try{if(this.cacheService.getCachedDDL(e)==null){const o=je("api.get.db.common.ddl.list.rounding_types",void 0,!1,this.ziggyRoute),r=await nt.get(o);this.cacheService.setCachedDDL(e,r.data)}const s=this.cacheService.getCachedDDL(e);return s!=null&&(a=s),a}catch{return a}}async uploadFile(e){const a={success:!1};try{const s=new FormData;s.append("file",e);const o=je("api.post.db.core.user.upload",void 0,!1,this.ziggyRoute);nt.defaults.headers.common["Content-Type"]="multipart/form-data";const r=await nt.post(o,s);return a.success=!0,a.data=r.data.data,a}catch(s){return s instanceof Error&&s.message.includes("Ziggy error")?this.errorHandlerService.generateZiggyUrlErrorServiceResponse(s.message):ot(s)?this.errorHandlerService.generateAxiosErrorServiceResponse(s):a}}}const due="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQgAAAC/CAMAAAA1kLK0AAAAVFBMVEX////MzMyZmZn39/fHx8fExMTJycmRkZGOjo7Pz8/n5+fT09Pq6url5eX8/PyUlJTw8PDa2tqJiYm+vr7X19eurq6oqKjf39+FhYW4uLienp5+fn553DI2AAAJJElEQVR4nO2d14KrOAyGQ+i9hEySnfd/z6XIxrgQmMgEdvVfnZNMDHzIklwQl8oldaou7oXUySUQowgEiECACASIQIAIBIhAgAgEiECACASIQIAIBIhAgAgEiECACASIQIAIBIhAgAgEiECACASIQIAIBIhAgAgEiECACASIQIC+DaIo2Lp8UXz1RL4GonCrvG5TJ+By0rbOK/dLPL4CoqgerRN4/cXP1H3gBU77qL4AY38Qbt4GnichmOHovm3z3U9rXxBFki5CEGCkya52sSuIqvW89xCYPK+t9ju3HUEkjr/CFmZ24TvJXme3G4jcYAy9g+ykOE5uFvk+57cTiETF0F9/EKf1I0865Y86jYePVBS7WMUuICrHUyDEdaJGyaJK6liB4Tk7+IodQLitJ1Fw6mzhqG5WOxILr7V/ltZBJLPe31FYkS91GdecRRDY7h+2QRSpN8OQZiuzgyJLZyi81G5aYRlEJZpDENSbDubW3uzXVj2FXRC5L1rDNgy95ih8m5HUKohW4OD/zd+58zawz1A4kD0QRTzdTe/vdl0Fk5cJYmuOwh4IV3APnxm10MGCwNrp2gLhTvfRiz88hhsLjdk6X0sgqunU/cfnzT0mo/DsBA9LIER7yDAazGzbhB0QAgcHqX3B5VghYQVEESDbw9DoFIQCC7HDCohUzILQSFw4iSBFa5PLBoh6NtpEJMEBezVam0wWQCS+49gm4aMPRvFBVBIHO73Dxw6i6CAKfv2Tm8cjUTi8UWSHiQ6i5h6tmPoI3rSjy5tHdhPYIHhG2SeA0yABL4rODoAoZBDF3AYmEni9Y7Iz1M6BDIJ1jABmDmyQaNkxUDsHLgieWnvsbuUeOgmet6Km2rggWJwXgpsFEixAoyaYqCD4GYpTahZItCrvj4UKgl/xzI1Z8BOcLVJ7F1wQzCDkrEEggZRPJB66SWCCiE33SSFRDQu/Jq3YLcMOFaOdPCIIbhDqbcqlHPPxGy2oub8/FrpJIIIAF6b15bJN5NF1QdF7XwLxKUBb6cADwXIIfeore8xFEuV6k0DLJfBAsDBp6LabSKwwCfASaBtq0EAU7MxMgUEh0XxkEixwYK19oYFgtmqeWJVJJAskmrdOkCXaWINQNBAP8F4LqzkKied4+/tIUW42iRUH3CIsEGz8rXFej9ft9hp7gxQ7kiZsyh8/bdvU/ymbUCAR3mZ6qZfLB3g4fQMLhGt2lU5TluVo64kcRW+CV6yCUugs5UyNJpmOjej/dAFIICBm6Jx4HE69XiYhqb4aYkmoAbxwyD8ICwQkOLrbM4KAkPiGxMWfe9DOe4QmEGCESINxJBB8skTzHYBYSSIvJ79ZXuMsf0UGEGywi7MAiAQCgqd29oyBuIajh5RiR/G6//zcbykLg9WVkSj/GT5LIwMImBfECaBIIPJAuDRJHASQkKPoo3emYRTeobNzEhGEip9SDyIbGwpQnAQSiNrsIgQQ11COomJmVTb38ecZeMwSWktDPQh3wQw3CwkEhLJA+52QH0RaEtkTrrwZLaoFjwmn1hpAXAJjyN4uHBDMV2oduAji2ugzKyBx/R3N/D50jghs/m7oGpcU0VvigGBGqk13ZyCAhBw7MhY1n4Pnq5rRWQ6/b03OkmXZKCkVDggIGvqR5xzE9aklkbBMqhxu76scw2ddZTdj+GQbq1DCBg6IBIKG9owkENdmOKKJROT3/6vAQthwTA8CJgdRdu7jgAAb9bVtySCu48fKuAP+LBwakX6iB+H6Cz1yo3BAsOip9VoSiNCHzw0koiE79cIVIArE+IkDAuZtPe2XEoiG5z9yjjn2jvKn/7c0f6UHAQs9KDO4qCC0aYQCoj+gO9BQouhIYviDVSAQp7JxQLDFX+2XctfoP8ue2nxiiKJj0rWma8CwC2X8uT+IwVc+IiXHHEk82RBjjbP8D4CoQ3NmFQ6+738C4hFpMqvBb2TR/8UiRh/Ru0XFJkYSzxP7iO1RYxxVyTM1Yyw5cdTYnkf8CCQyzezdSfOITZnlgMsZhxbhQEUzj+mfM7PcPtZw2cjCQEL6yVnGGttGn8Nf+Wy0KfuJ4f+SizjN6JPNR2hX82UQ5av/tGBz1XoSbPZuEURyuPmIDTNU3CQqdqlv5qwWQBxvhmr9nOVgEuNSd/4L/39qo+iMxFnmLFfPYoMNjPEua6B7jClUpuSY70AcbxZ77boGE2wNcu+AopHziZFEuAziiOsa61a6ps5xBf+W38Mo7Jf9B+8ik0jCRRBHXOlatfapI3Gp0lu/9vka+rmcY3ISp1n7XLMaPidRau+jEjuiBRAOoq/ccX+E4jF99U+NJE6zP+L9jhlV0VXXkWQS4wrHeXbMLOyhMoHojKIUC41kN+24YyChA3HMPVQLu+rMILoLnO2qa7SZVU9CA+Kgu+oWtj0ugRj85rTP8qnNJ6pIB+Kg+ywXdt6+AzHrLIbMKlJAHHbnrXkvtvNcejhD0u/gQBUSjZK8H3Yvtnl3fhanG+TImdXoQRW8h92d/+Z5ja2SScg68PMai0/wbJccOyQd+AmepWe6/iLmBLQkDv1MF/ajd0s24eAe6rLPc59/lZnEwZ/75PdJv9CzXSaPWfDPkQ502ePZ8E80kZiFycM/G66rFvCZtCSOXy1gGgih1Q7TkCh4kYrj1o9QKop8LtVPnKGiyFRjBq9ilpJt8/ziyDVmbBQFymaZ1UmqDol1qNAaFnLMhM8SH70O1dQ5AjzTnXqHUEf36JXJplp1AV7+O5HgtnH4WnVCZowY52USZ6heKNSztEbiHPUshbKTlnrHWSqcCjVvEUubC3WQT1PzVqiCjFba3BU6xmmqIFNd7ElUKZ03TLXzWcv0NgUQvV+Di964wkTv4GGav5VpIwq3nr/T6cRvZaL3dAmiN7fxQ9C7/Jjo7Y5c9L5PLnoDLBe9E5iL3hLNRe8NF45Ib5Ln6vKltrtexUH2jjNw2hUZF76+AqJX4VZ53ab9xYOctK3zyv0ChF5fAwEqChdUfIkA6NsgDiMCASIQIAIBIhAgAgEiECACASIQIAIBIhAgAgEiECACASIQIAIBIhAgAgEiECACASIQIAIBIhAgAgEiECACASIQIAIBIhAgAgFyL5VL6lT9C86bdxzAdoHwAAAAAElFTkSuQmCC",uue=["src"],pue={class:"flex gap-2 mt-4"},hue=["type"],fue={class:"border-slate-200 border w-[15%] rounded bg-slate-100 cursor-pointer flex justify-center items-center",for:"upload"},mue={inheritAttrs:!1},pz=Ce({...mue,__name:"FormFileUpload",props:{value:{},modelValue:{},formInputSize:{},rounded:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:e}){const{t:a}=tt(),s=n,o=Ot(),r=xt("formInline",!1),i=xt("inputGroup",!1),u=O(""),h=new aa,m=ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed dark:disabled:bg-darkmode-800/50 dark:disabled:border-transparent","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50 [&[readonly]]:dark:border-transparent","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md placeholder:text-slate-400/90 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50 dark:placeholder:text-slate-500/80",s.formInputSize=="sm"&&"text-xs py-1.5 px-2",s.formInputSize=="lg"&&"text-lg py-1.5 px-4",s.rounded&&"rounded-full",r&&"flex-1",i&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r z-10",typeof o.class=="string"&&o.class])),p=e,b=ee({get(){return s.modelValue===void 0?s.value:s.modelValue},set(w){p("update:modelValue",w)}}),x=async w=>{const D=w.target.files,V=new FileReader;if(D){let R=D[0].name;V.readAsDataURL(D[0]),b.value=R;let E=await h.uploadFile(D[0]);E&&E.data&&(u.value=E.data.url)}};return at(()=>{u.value||(u.value=due)}),(w,$)=>(L(),U(ke,null,[u.value?(L(),U("div",{key:0,class:F(["flex","justify-center","mt-2","w-full","align-center",{"bg-slate-100":u.value},"rounded","p-4"])},[c("img",{class:"rounded aspect-auto",src:u.value?u.value:"",alt:"Image Preview"},null,8,uue)],2)):Me("",!0),c("div",pue,[c("input",Ft({disabled:"",class:m.value,type:s.type},t(Pt).omit(t(o),"class")),null,16,hue),c("input",{id:"upload",type:"file",hidden:"",onChange:$[0]||($[0]=D=>x(D))},null,32),c("label",fue,_(t(a)("components.file-upload.browse")),1)])],64))}});class vue{constructor(){mt(this,"ziggyRoute");mt(this,"ziggyRouteStore",ha());mt(this,"errorHandlerService");this.ziggyRoute=this.ziggyRouteStore.getZiggy,this.errorHandlerService=new tn}async upload(e){const a={success:!1};try{const s=new FormData;s.append("image",e);const o=je("api.post.product.image.upload",void 0,!1,this.ziggyRoute);nt.defaults.headers.common["Content-Type"]="multipart/form-data";const r=await nt.post(o,s);return a.success=!0,a.data=r.data.data,a}catch(s){return s instanceof Error&&s.message.includes("Ziggy error")?this.errorHandlerService.generateZiggyUrlErrorServiceResponse(s.message):ot(s)?this.errorHandlerService.generateAxiosErrorServiceResponse(s):a}}}const yue={inheritAttrs:!1},me=Ce({...yue,__name:"Button",props:{as:{default:"button"},variant:{},elevated:{type:Boolean},size:{},rounded:{type:Boolean}},setup(n){const{as:e,size:a,variant:s,elevated:o,rounded:r}=n,i=Ot(),u=["transition duration-200 border shadow-sm inline-flex items-center justify-center py-2 px-3 rounded-md font-medium cursor-pointer","focus:ring-4 focus:ring-primary focus:ring-opacity-20","focus-visible:outline-none","dark:focus:ring-slate-700 dark:focus:ring-opacity-50","[&:hover:not(:disabled)]:bg-opacity-90 [&:hover:not(:disabled)]:border-opacity-90","[&:not(button)]:text-center","disabled:opacity-70 disabled:cursor-not-allowed"],h=["text-xs py-1.5 px-2"],m=["text-lg py-1.5 px-4"],p=["bg-primary border-primary text-white dark:border-primary"],b=["bg-secondary/70 border-secondary/70 text-slate-500","dark:border-darkmode-400 dark:bg-darkmode-400 dark:text-slate-300","[&:hover:not(:disabled)]:bg-slate-100 [&:hover:not(:disabled)]:border-slate-100","[&:hover:not(:disabled)]:dark:border-darkmode-300/80 [&:hover:not(:disabled)]:dark:bg-darkmode-300/80"],x=["bg-success border-success text-slate-900","dark:border-success"],w=["bg-warning border-warning text-slate-900","dark:border-warning"],$=["bg-pending border-pending text-white","dark:border-pending"],D=["bg-danger border-danger text-white","dark:border-danger"],V=["bg-dark border-dark text-white","dark:bg-darkmode-800 dark:border-transparent dark:text-slate-300","[&:hover:not(:disabled)]:dark:dark:bg-darkmode-800/70"],R=["bg-[#3b5998] border-[#3b5998] text-white dark:border-[#3b5998]"],E=["bg-[#4ab3f4] border-[#4ab3f4] text-white dark:border-[#4ab3f4]"],P=["bg-[#517fa4] border-[#517fa4] text-white dark:border-[#517fa4]"],S=["bg-[#0077b5] border-[#0077b5] text-white dark:border-[#0077b5]"],C=["border-primary text-primary","dark:border-primary","[&:hover:not(:disabled)]:bg-primary/10"],M=["border-secondary text-slate-500","dark:border-darkmode-100/40 dark:text-slate-300","[&:hover:not(:disabled)]:bg-secondary/20","[&:hover:not(:disabled)]:dark:bg-darkmode-100/10"],g=["border-success text-success","dark:border-success","[&:hover:not(:disabled)]:bg-success/10"],v=["border-warning text-warning","dark:border-warning","[&:hover:not(:disabled)]:bg-warning/10"],T=["border-pending text-pending","dark:border-pending","[&:hover:not(:disabled)]:bg-pending/10"],j=["border-danger text-danger","dark:border-danger","[&:hover:not(:disabled)]:bg-danger/10"],B=["border-dark text-dark","dark:border-darkmode-800 dark:text-slate-300","[&:hover:not(:disabled)]:bg-darkmode-800/30","[&:hover:not(:disabled)]:dark:bg-opacity-30"],oe=["bg-primary border-primary bg-opacity-20 border-opacity-5 text-primary","dark:border-opacity-100 dark:bg-opacity-20 dark:border-primary","[&:hover:not(:disabled)]:bg-opacity-10 [&:hover:not(:disabled)]:border-opacity-10","[&:hover:not(:disabled)]:dark:border-opacity-60"],be=["bg-slate-300 border-secondary bg-opacity-20 text-slate-500","dark:bg-darkmode-100/20 dark:border-darkmode-100/30 dark:text-slate-300","[&:hover:not(:disabled)]:bg-opacity-10","[&:hover:not(:disabled)]:dark:bg-darkmode-100/10 [&:hover:not(:disabled)]:dark:border-darkmode-100/20"],$e=["bg-success border-success bg-opacity-20 border-opacity-5 text-success","dark:border-success dark:border-opacity-20","[&:hover:not(:disabled)]:bg-opacity-10 [&:hover:not(:disabled)]:border-opacity-10"],Le=["bg-warning border-warning bg-opacity-20 border-opacity-5 text-warning","dark:border-warning dark:border-opacity-20","[&:hover:not(:disabled)]:bg-opacity-10 [&:hover:not(:disabled)]:border-opacity-10"],de=["bg-pending border-pending bg-opacity-20 border-opacity-5 text-pending","dark:border-pending dark:border-opacity-20","[&:hover:not(:disabled)]:bg-opacity-10 [&:hover:not(:disabled)]:border-opacity-10"],J=["bg-danger border-danger bg-opacity-20 border-opacity-5 text-danger","dark:border-danger dark:border-opacity-20","[&:hover:not(:disabled)]:bg-opacity-10 [&:hover:not(:disabled)]:border-opacity-10"],G=["bg-dark border-dark bg-opacity-20 border-opacity-5 text-dark","dark:bg-darkmode-800/30 dark:border-darkmode-800/60 dark:text-slate-300","[&:hover:not(:disabled)]:bg-opacity-10 [&:hover:not(:disabled)]:border-opacity-10","[&:hover:not(:disabled)]:dark:bg-darkmode-800/50 [&:hover:not(:disabled)]:dark:border-darkmode-800"],ce=ee(()=>At([u,a=="sm"&&h,a=="lg"&&m,s=="primary"&&p,s=="secondary"&&b,s=="success"&&x,s=="warning"&&w,s=="pending"&&$,s=="danger"&&D,s=="dark"&&V,s=="outline-primary"&&C,s=="outline-secondary"&&M,s=="outline-success"&&g,s=="outline-warning"&&v,s=="outline-pending"&&T,s=="outline-danger"&&j,s=="outline-dark"&&B,s=="soft-primary"&&oe,s=="soft-secondary"&&be,s=="soft-success"&&$e,s=="soft-warning"&&Le,s=="soft-pending"&&de,s=="soft-danger"&&J,s=="soft-dark"&&G,s=="facebook"&&R,s=="twitter"&&E,s=="instagram"&&P,s=="linkedin"&&S,r&&"rounded-full",o&&"shadow-md",typeof i.class=="string"&&i.class]));return(Ee,He)=>(L(),ge(Da(e),Ft({class:ce.value},t(Pt).omit(t(i),"class")),{default:f(()=>[Lt(Ee.$slots,"default")]),_:3},16,["class"]))}}),_ue={class:"flex flex-col gap-4"},gue={class:"text-slate-500 text-center"},kue={class:"font-medium text-primary"},bue=c("div",{class:"text-slate-400 text-xs mt-1"}," JPG, PNG ",-1),wue={class:"flex gap-2"},xue={key:0,class:"flex justify-center p-2"},Mue={class:"mr-auto text-base font-medium"},Cue={class:"relative w-full aspect-video bg-black rounded overflow-hidden"},Sue={inheritAttrs:!1},Iue=Ce({...Sue,__name:"FormImageUpload",props:{value:{},modelValue:{},formInputSize:{},rounded:{type:Boolean}},emits:["uploaded"],setup(n,{emit:e}){const{t:a}=tt(),s=n,o=Ot(),r=xt("formInline",!1),i=xt("inputGroup",!1),u=new vue,h=O(!1),m=O(null),p=O(!1),b=O(null),x=O(null),w=O(null);ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed dark:disabled:bg-darkmode-800/50 dark:disabled:border-transparent","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50 [&[readonly]]:dark:border-transparent","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md placeholder:text-slate-400/90 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50 dark:placeholder:text-slate-500/80",s.formInputSize=="sm"&&"text-xs py-1.5 px-2",s.formInputSize=="lg"&&"text-lg py-1.5 px-4",s.rounded&&"rounded-full",r&&"flex-1",i&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r z-10",typeof o.class=="string"&&o.class]));const $=e,D=async M=>{h.value=!0;try{let g=await u.upload(M);g.success&&g.data&&$("uploaded",g.data)}finally{h.value=!1}},V=M=>{const v=M.target.files;v&&v.length>0&&D(v[0])},R=M=>{var v;const g=(v=M.dataTransfer)==null?void 0:v.files;g&&g.length>0&&D(g[0])},E=()=>{var M;(M=m.value)==null||M.click()},P=async()=>{p.value=!0;try{w.value=await navigator.mediaDevices.getUserMedia({video:!0}),b.value&&(b.value.srcObject=w.value)}catch(M){console.error("Error accessing camera:",M)}},S=()=>{w.value&&(w.value.getTracks().forEach(M=>M.stop()),w.value=null),p.value=!1},C=()=>{if(b.value&&x.value){const M=b.value,g=x.value;g.width=M.videoWidth,g.height=M.videoHeight;const v=g.getContext("2d");v&&(v.drawImage(M,0,0,g.width,g.height),g.toBlob(T=>{if(T){const j=new File([T],`camera_${Date.now()}.jpg`,{type:"image/jpeg"});D(j),S()}},"image/jpeg"))}};return rn(()=>{S()}),(M,g)=>(L(),U("div",_ue,[c("div",{class:"border-2 border-dashed border-slate-300 dark:border-darkmode-400 rounded-md p-6 flex flex-col justify-center items-center cursor-pointer hover:bg-slate-50 dark:hover:bg-darkmode-600/50 transition-colors",onDragover:g[0]||(g[0]=Rt(()=>{},["prevent"])),onDrop:Rt(R,["prevent"]),onClick:E},[l(t(re),{icon:"UploadCloud",class:"w-10 h-10 text-slate-400 mb-2"}),c("div",gue,[c("span",kue,_(t(a)("components.file-upload.browse")),1),A(" "+_(t(a)("components.file-upload.or_drag_drop")),1)]),bue,c("input",{ref_key:"fileInput",ref:m,type:"file",accept:"image/*",class:"hidden",onChange:V},null,544)],32),c("div",wue,[l(t(me),{type:"button",variant:"outline-primary",class:"w-full",onClick:P},{default:f(()=>[l(t(re),{icon:"Camera",class:"w-4 h-4 mr-2"}),A(" "+_(t(a)("components.file-upload.camera")),1)]),_:1})]),h.value?(L(),U("div",xue,[l(t(re),{icon:"Loader2",class:"w-6 h-6 animate-spin text-primary"})])):Me("",!0),l(t($t),{open:p.value,onClose:S},{default:f(()=>[l(t($t).Panel,null,{default:f(()=>[l(t($t).Title,null,{default:f(()=>[c("h2",Mue,_(t(a)("components.file-upload.camera")),1)]),_:1}),l(t($t).Description,null,{default:f(()=>[c("div",Cue,[c("video",{ref_key:"videoRef",ref:b,autoplay:"",playsinline:"",class:"w-full h-full object-cover"},null,512),c("canvas",{ref_key:"canvasRef",ref:x,class:"hidden"},null,512)])]),_:1}),l(t($t).Footer,null,{default:f(()=>[l(t(me),{type:"button",variant:"outline-secondary",onClick:S,class:"w-24 mr-1"},{default:f(()=>[A(_(t(a)("components.buttons.cancel")),1)]),_:1}),l(t(me),{type:"button",variant:"primary",onClick:C,class:"w-24"},{default:f(()=>[A(_(t(a)("components.file-upload.capture")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["open"])]))}}),Lue={class:"flex items-center gap-2"},$ue={class:"flex-1"},Aue=["disabled","type"],Eue={inheritAttrs:!1},wa=Ce({...Eue,__name:"FormInputCode",props:{value:{},modelValue:{},formInputSize:{},rounded:{type:Boolean}},emits:["setAuto","update:modelValue"],setup(n,{emit:e}){const a=n,s=Ot(),o=xt("formInline",!1),r=xt("inputGroup",!1),i=e,u=ee(()=>a.modelValue=="_AUTO_"),h=ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed dark:disabled:bg-darkmode-800/50 dark:disabled:border-transparent","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50 [&[readonly]]:dark:border-transparent","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md placeholder:text-slate-400/90 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50 dark:placeholder:text-slate-500/80",a.formInputSize=="sm"&&"text-xs py-1.5 px-2",a.formInputSize=="lg"&&"text-lg py-1.5 px-4",a.rounded&&"rounded-full",o&&"flex-1",r&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r z-10",typeof s.class=="string"&&s.class])),m=ee({get(){return a.modelValue===void 0?a.value:a.modelValue},set(b){i("update:modelValue",b)}}),p=()=>{i("setAuto")};return(b,x)=>(L(),U("div",Lue,[c("div",$ue,[rs(c("input",Ft({disabled:u.value,class:h.value,type:a.type},t(Pt).omit(t(s),"class"),{"onUpdate:modelValue":x[0]||(x[0]=w=>m.value=w)}),null,16,Aue),[[MT,m.value]])]),c("button",{type:"button",class:"px-3 py-2.5 text-xs font-medium border border-slate-200 rounded-md bg-slate-100 text-slate-600 hover:bg-slate-200 whitespace-nowrap",onClick:p}," Auto ")]))}});var hz={exports:{}};(function(n,e){(function(a,s){n.exports=s()})(Ur,function(){var a=1e3,s=6e4,o=36e5,r="millisecond",i="second",u="minute",h="hour",m="day",p="week",b="month",x="quarter",w="year",$="date",D="Invalid Date",V=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,R=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,E={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function($e){var Le=["th","st","nd","rd"],de=$e%100;return"["+$e+(Le[(de-20)%10]||Le[de]||Le[0])+"]"}},P=function($e,Le,de){var J=String($e);return!J||J.length>=Le?$e:""+Array(Le+1-J.length).join(de)+$e},S={s:P,z:function($e){var Le=-$e.utcOffset(),de=Math.abs(Le),J=Math.floor(de/60),G=de%60;return(Le<=0?"+":"-")+P(J,2,"0")+":"+P(G,2,"0")},m:function $e(Le,de){if(Le.date()1)return $e(Ee[0])}else{var He=Le.name;M[He]=Le,G=He}return!J&&G&&(C=G),G||!J&&C},j=function($e,Le){if(v($e))return $e.clone();var de=typeof Le=="object"?Le:{};return de.date=$e,de.args=arguments,new oe(de)},B=S;B.l=T,B.i=v,B.w=function($e,Le){return j($e,{locale:Le.$L,utc:Le.$u,x:Le.$x,$offset:Le.$offset})};var oe=function(){function $e(de){this.$L=T(de.locale,null,!0),this.parse(de),this.$x=this.$x||de.x||{},this[g]=!0}var Le=$e.prototype;return Le.parse=function(de){this.$d=function(J){var G=J.date,ce=J.utc;if(G===null)return new Date(NaN);if(B.u(G))return new Date;if(G instanceof Date)return new Date(G);if(typeof G=="string"&&!/Z$/i.test(G)){var Ee=G.match(V);if(Ee){var He=Ee[2]-1||0,Ke=(Ee[7]||"0").substring(0,3);return ce?new Date(Date.UTC(Ee[1],He,Ee[3]||1,Ee[4]||0,Ee[5]||0,Ee[6]||0,Ke)):new Date(Ee[1],He,Ee[3]||1,Ee[4]||0,Ee[5]||0,Ee[6]||0,Ke)}}return new Date(G)}(de),this.init()},Le.init=function(){var de=this.$d;this.$y=de.getFullYear(),this.$M=de.getMonth(),this.$D=de.getDate(),this.$W=de.getDay(),this.$H=de.getHours(),this.$m=de.getMinutes(),this.$s=de.getSeconds(),this.$ms=de.getMilliseconds()},Le.$utils=function(){return B},Le.isValid=function(){return this.$d.toString()!==D},Le.isSame=function(de,J){var G=j(de);return this.startOf(J)<=G&&G<=this.endOf(J)},Le.isAfter=function(de,J){return j(de)M.toString())};let E=$.replace(r,(M,g,v,T,j)=>["#",g,g,v,v,T,T,j?j+j:""].join("")).match(o);if(E!==null)return{mode:"rgb",color:[parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16)].map(M=>M.toString()),alpha:E[4]?(parseInt(E[4],16)/255).toString():void 0};var P;let S=(P=$.match(p))!==null&&P!==void 0?P:$.match(b);if(S===null)return null;let C=[S[2],S[3],S[4]].filter(Boolean).map(M=>M.toString());return C.length===2&&C[0].startsWith("var(")?{mode:S[1],color:[C[0]],alpha:C[1]}:!D&&C.length!==3||C.length<3&&!C.some(M=>/^var\(.*?\)$/.test(M))?null:{mode:S[1],color:C,alpha:(V=S[5])===null||V===void 0||(R=V.toString)===null||R===void 0?void 0:R.call(V)}}function w({mode:$,color:D,alpha:V}){let R=V!==void 0;return $==="rgba"||$==="hsla"?`${$}(${D.join(", ")}${R?`, ${V}`:""})`:`${$}(${D.join(" ")}${R?` / ${V}`:""})`}})(Rue);fz.extend(Due);const Ya=(n,e)=>fz(n).format(e),_a=n=>{if(n!=null&&n!==""){let e=n.toString(),[a,s]=e.split(".");a=a.replace(/\D/g,"");const o=a.length%3;let r=a.substr(0,o);const i=a.substr(o).match(/\d{3}/g);let u;return i&&(u=o?".":"",r+=u+i.join(".")),s&&(s=s.replace(/0+$/,""),s.length>0&&(r+=","+s)),r}else return""},ir=(n,e=300,a=s=>{})=>{n.style.transitionProperty="height, margin, padding",n.style.transitionDuration=e+"ms",n.style.height=n.offsetHeight+"px",n.offsetHeight,n.style.overflow="hidden",n.style.height="0",n.style.paddingTop="0",n.style.paddingBottom="0",n.style.marginTop="0",n.style.marginBottom="0",window.setTimeout(()=>{n.style.display="none",n.style.removeProperty("height"),n.style.removeProperty("padding-top"),n.style.removeProperty("padding-bottom"),n.style.removeProperty("margin-top"),n.style.removeProperty("margin-bottom"),n.style.removeProperty("overflow"),n.style.removeProperty("transition-duration"),n.style.removeProperty("transition-property"),a(n)},e)},lr=(n,e=300,a=s=>{})=>{n.style.removeProperty("display");let s=window.getComputedStyle(n).display;s==="none"&&(s="block"),n.style.display=s;let o=n.offsetHeight;n.style.overflow="hidden",n.style.height="0",n.style.paddingTop="0",n.style.paddingBottom="0",n.style.marginTop="0",n.style.marginBottom="0",n.offsetHeight,n.style.transitionProperty="height, margin, padding",n.style.transitionDuration=e+"ms",n.style.height=o+"px",n.style.removeProperty("padding-top"),n.style.removeProperty("padding-bottom"),n.style.removeProperty("margin-top"),n.style.removeProperty("margin-bottom"),window.setTimeout(()=>{n.style.removeProperty("height"),n.style.removeProperty("overflow"),n.style.removeProperty("transition-duration"),n.style.removeProperty("transition-property"),a(n)},e)},ln=n=>{const e={},a=n,s=ot(n)?n.response:a==null?void 0:a.response;if(s&&s.data){const o=s.data;if(o.errors&&typeof o.errors=="object"){for(const r of Object.keys(o.errors)){const i=o.errors[r];Array.isArray(i)?e[r]=i:i!=null&&(e[r]=[String(i)])}return e}if(o.message)return e.error=[String(o.message)],e}return n instanceof Error&&n.message?e.error=[n.message]:a!=null&&a.message?e.error=[String(a.message)]:e.error=["Unknown error"],e},Ta=Ce({__name:"FormInputCurrency",props:{modelValue:{},formInputSize:{},rounded:{type:Boolean}},emits:["update:modelValue","change"],setup(n,{emit:e}){const a=n,s=e,o=Ot(),r=xt("formInline",!1),i=xt("inputGroup",!1),u=O(null),h=O(!1),m=ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed dark:disabled:bg-darkmode-800/50 dark:disabled:border-transparent","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50 [&[readonly]]:dark:border-transparent","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md placeholder:text-slate-400/90 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50 dark:placeholder:text-slate-500/80",a.formInputSize=="sm"&&"text-xs py-1.5 px-2",a.formInputSize=="lg"&&"text-lg py-1.5 px-4",a.rounded&&"rounded-full",r&&"flex-1",i&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r z-10",typeof o.class=="string"&&o.class,"text-right"])),p=O("");dt(()=>a.modelValue,$=>{h.value||(p.value=_a($??""))},{immediate:!0});const b=$=>{let V=$.target.value;const R=V.replace(/\./g,"").replace(",","."),E=parseFloat(R);isNaN(E)?(V===""||V==="-")&&s("update:modelValue",0):s("update:modelValue",E)},x=()=>{h.value=!0,a.modelValue!==void 0&&a.modelValue!==null&&(p.value=a.modelValue.toString().replace(".",","))},w=()=>{h.value=!1,p.value=_a(a.modelValue??"");const $=p.value.replace(/\./g,"").replace(",","."),D=parseFloat($);isNaN(D)||s("change",D)};return($,D)=>rs((L(),U("input",Ft({ref_key:"inputRef",ref:u,class:m.value,type:"text"},t(Pt).omit(t(o),"class"),{"onUpdate:modelValue":D[0]||(D[0]=V=>p.value=V),onInput:b,onFocus:x,onBlur:w}),null,16)),[[Lo,p.value]])}}),oo=Ce({__name:"FormInputDateTime",props:{modelValue:{},formInputSize:{},rounded:{type:Boolean}},emits:["update:modelValue","change"],setup(n,{emit:e}){const a=n,s=e,o=Ot(),r=xt("formInline",!1),i=xt("inputGroup",!1),u=O(null),h=O(!1),m=O(""),p=ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed dark:disabled:bg-darkmode-800/50 dark:disabled:border-transparent","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50 [&[readonly]]:dark:border-transparent","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md placeholder:text-slate-400/90 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50 dark:placeholder:text-slate-500/80",a.formInputSize=="sm"&&"text-xs py-1.5 px-2",a.formInputSize=="lg"&&"text-lg py-1.5 px-4",a.rounded&&"rounded-full",r&&"flex-1",i&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r z-10",typeof o.class=="string"&&o.class]));dt(()=>a.modelValue,D=>{if(!h.value){if(!D){m.value="";return}m.value=Ya(D,"YYYY-MM-DDTHH:mm:ss")}},{immediate:!0});const b=D=>{const V=D.target;m.value=V.value},x=D=>{const R=D.target.value;if(!R){s("update:modelValue",null),s("change",null);return}const[E,P]=R.split("T");let S=P??"";S&&S.split(":").length===2&&(S=`${S}:00`);const C=`${E} ${S}`;s("update:modelValue",C),s("change",C)},w=()=>{h.value=!0},$=()=>{h.value=!1};return(D,V)=>rs((L(),U("input",Ft({ref_key:"inputRef",ref:u,class:p.value,type:"datetime-local",step:"1"},t(Pt).omit(t(o),"class"),{"onUpdate:modelValue":V[0]||(V[0]=R=>m.value=R),onInput:b,onChange:x,onFocus:w,onBlur:$}),null,16)),[[Lo,m.value]])}}),Oue={class:"flex items-center gap-2"},Vue={class:"flex-1"},Uue=["disabled"],md="_AUTO_",yz=Ce({__name:"FormInputDateTimeAuto",props:{modelValue:{},formInputSize:{},rounded:{type:Boolean}},emits:["update:modelValue","change"],setup(n,{emit:e}){const a=n,s=e,o=Ot(),r=xt("formInline",!1),i=xt("inputGroup",!1),u=O(null),h=O(!1),m=O(""),p=ee(()=>a.modelValue===md),b=ee(()=>At(["disabled:bg-slate-100 disabled:cursor-not-allowed dark:disabled:bg-darkmode-800/50 dark:disabled:border-transparent","[&[readonly]]:bg-slate-100 [&[readonly]]:cursor-not-allowed [&[readonly]]:dark:bg-darkmode-800/50 [&[readonly]]:dark:border-transparent","transition duration-200 ease-in-out w-full text-sm border-slate-200 shadow-sm rounded-md placeholder:text-slate-400/90 focus:ring-4 focus:ring-primary focus:ring-opacity-20 focus:border-primary focus:border-opacity-40 dark:bg-darkmode-800 dark:border-transparent dark:focus:ring-slate-700 dark:focus:ring-opacity-50 dark:placeholder:text-slate-500/80",a.formInputSize=="sm"&&"text-xs py-1.5 px-2",a.formInputSize=="lg"&&"text-lg py-1.5 px-4",a.rounded&&"rounded-full",r&&"flex-1",i&&"rounded-none [&:not(:first-child)]:border-l-transparent first:rounded-l last:rounded-r z-10",typeof o.class=="string"&&o.class])),x=ee(()=>!!o.disabled||p.value);dt(()=>a.modelValue,C=>{if(!h.value){if(!C||C===md){m.value="";return}m.value=Ya(C,"YYYY-MM-DDTHH:mm:ss")}},{immediate:!0});let w=null;const $=()=>{w!==null&&(window.clearInterval(w),w=null)},D=()=>{$(),w=window.setInterval(()=>{if(!p.value)return;const C=new Date().toString();m.value=Ya(C,"YYYY-MM-DDTHH:mm:ss")},1e3)};dt(p,C=>{if(C)D();else{$();const M=a.modelValue;!M||M===md?m.value="":m.value=Ya(M,"YYYY-MM-DDTHH:mm:ss")}},{immediate:!0});const V=C=>{const M=C.target;m.value=M.value},R=C=>{const g=C.target.value;if(!g){s("update:modelValue",null),s("change",null);return}const[v,T]=g.split("T");let j=T??"";j&&j.split(":").length===2&&(j=`${j}:00`);const B=`${v} ${j}`;s("update:modelValue",B),s("change",B)},E=()=>{p.value?(s("update:modelValue",null),s("change",null)):(s("update:modelValue",md),s("change",md))};gT(()=>{$()});const P=()=>{h.value=!0},S=()=>{h.value=!1};return(C,M)=>(L(),U("div",Oue,[c("div",Vue,[rs(c("input",Ft({ref_key:"inputRef",ref:u,class:b.value,type:"datetime-local",step:"1"},t(Pt).omit(t(o),"class"),{"onUpdate:modelValue":M[0]||(M[0]=g=>m.value=g),disabled:x.value,onInput:V,onChange:R,onFocus:P,onBlur:S}),null,16,Uue),[[Lo,m.value]])]),c("button",{type:"button",class:"px-3 py-2.5 text-xs font-medium border border-slate-200 rounded-md bg-slate-100 text-slate-600 hover:bg-slate-200 whitespace-nowrap",onClick:E}," Auto ")]))}}),Fue={key:0,class:"mt-1 text-danger"},_e=Ce({__name:"FormErrorMessages",props:{messages:{default:""}},setup(n){const a=An(n,"messages"),s=ee(()=>a.value.length!=0);return(o,r)=>s.value?(L(),U("span",Fue,_(a.value),1)):Me("",!0)}});function dA(n,e){n.split(/\s+/).forEach(a=>{e(a)})}class jue{constructor(){this._events=void 0,this._events={}}on(e,a){dA(e,s=>{const o=this._events[s]||[];o.push(a),this._events[s]=o})}off(e,a){var s=arguments.length;if(s===0){this._events={};return}dA(e,o=>{if(s===1){delete this._events[o];return}const r=this._events[o];r!==void 0&&(r.splice(r.indexOf(a),1),this._events[o]=r)})}trigger(e,...a){var s=this;dA(e,o=>{const r=s._events[o];r!==void 0&&r.forEach(i=>{i.apply(s,a)})})}}function Hue(n){return n.plugins={},class extends n{constructor(...e){super(...e),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(e,a){n.plugins[e]={name:e,fn:a}}initializePlugins(e){var a,s;const o=this,r=[];if(Array.isArray(e))e.forEach(i=>{typeof i=="string"?r.push(i):(o.plugins.settings[i.name]=i.options,r.push(i.name))});else if(e)for(a in e)e.hasOwnProperty(a)&&(o.plugins.settings[a]=e[a],r.push(a));for(;s=r.shift();)o.require(s)}loadPlugin(e){var a=this,s=a.plugins,o=n.plugins[e];if(!n.plugins.hasOwnProperty(e))throw new Error('Unable to find "'+e+'" plugin');s.requested[e]=!0,s.loaded[e]=o.fn.apply(a,[a.plugins.settings[e]||{}]),s.names.push(e)}require(e){var a=this,s=a.plugins;if(!a.plugins.loaded.hasOwnProperty(e)){if(s.requested[e])throw new Error('Plugin has circular dependency ("'+e+'")');a.loadPlugin(e)}return s.loaded[e]}}}/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */const p9=n=>(n=n.filter(Boolean),n.length<2?n[0]||"":zue(n)==1?"["+n.join("")+"]":"(?:"+n.join("|")+")"),_z=n=>{if(!Nue(n))return n.join("");let e="",a=0;const s=()=>{a>1&&(e+="{"+a+"}")};return n.forEach((o,r)=>{if(o===n[r-1]){a++;return}s(),e+=o,a=1}),s(),e},gz=n=>{let e=oP(n);return p9(e)},Nue=n=>new Set(n).size!==n.length,Yd=n=>(n+"").replace(/([\$\(\)\*\+\.\?\[\]\^\{\|\}\\])/gu,"\\$1"),zue=n=>n.reduce((e,a)=>Math.max(e,Bue(a)),0),Bue=n=>oP(n).length,oP=n=>Array.from(n);/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */const kz=n=>{if(n.length===1)return[[n]];let e=[];const a=n.substring(1);return kz(a).forEach(function(o){let r=o.slice(0);r[0]=n.charAt(0)+r[0],e.push(r),r=o.slice(0),r.unshift(n.charAt(0)),e.push(r)}),e};/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */const que=[[0,65535]],Wue="[̀-ͯ·ʾʼ]";let wL,bz;const Gue=3,rP={},RU={"/":"⁄∕",0:"߀",a:"ⱥɐɑ",aa:"ꜳ",ae:"æǽǣ",ao:"ꜵ",au:"ꜷ",av:"ꜹꜻ",ay:"ꜽ",b:"ƀɓƃ",c:"ꜿƈȼↄ",d:"đɗɖᴅƌꮷԁɦ",e:"ɛǝᴇɇ",f:"ꝼƒ",g:"ǥɠꞡᵹꝿɢ",h:"ħⱨⱶɥ",i:"ɨı",j:"ɉȷ",k:"ƙⱪꝁꝃꝅꞣ",l:"łƚɫⱡꝉꝇꞁɭ",m:"ɱɯϻ",n:"ꞥƞɲꞑᴎлԉ",o:"øǿɔɵꝋꝍᴑ",oe:"œ",oi:"ƣ",oo:"ꝏ",ou:"ȣ",p:"ƥᵽꝑꝓꝕρ",q:"ꝗꝙɋ",r:"ɍɽꝛꞧꞃ",s:"ßȿꞩꞅʂ",t:"ŧƭʈⱦꞇ",th:"þ",tz:"ꜩ",u:"ʉ",v:"ʋꝟʌ",vy:"ꝡ",w:"ⱳ",y:"ƴɏỿ",z:"ƶȥɀⱬꝣ",hv:"ƕ"};for(let n in RU){let e=RU[n]||"";for(let a=0;a{wL===void 0&&(wL=Jue(n||que))},OU=(n,e="NFKD")=>n.normalize(e),xL=n=>oP(n).reduce((e,a)=>e+Xue(a),""),Xue=n=>(n=OU(n).toLowerCase().replace(Zue,e=>rP[e]||""),OU(n,"NFC"));function*Yue(n){for(const[e,a]of n)for(let s=e;s<=a;s++){let o=String.fromCharCode(s),r=xL(o);r!=o.toLowerCase()&&(r.length>Gue||r.length!=0&&(yield{folded:r,composed:o,code_point:s}))}}const Que=n=>{const e={},a=(s,o)=>{const r=e[s]||new Set,i=new RegExp("^"+gz(r)+"$","iu");o.match(i)||(r.add(Yd(o)),e[s]=r)};for(let s of Yue(n))a(s.folded,s.folded),a(s.folded,s.composed);return e},Jue=n=>{const e=Que(n),a={};let s=[];for(let r in e){let i=e[r];i&&(a[r]=gz(i)),r.length>1&&s.push(Yd(r))}s.sort((r,i)=>i.length-r.length);const o=p9(s);return bz=new RegExp("^"+o,"u"),a},e1e=(n,e=1)=>{let a=0;return n=n.map(s=>(wL[s]&&(a+=s.length),wL[s]||s)),a>=e?_z(n):""},t1e=(n,e=1)=>(e=Math.max(e,n.length-1),p9(kz(n).map(a=>e1e(a,e)))),VU=(n,e=!0)=>{let a=n.length>1?1:0;return p9(n.map(s=>{let o=[];const r=e?s.length():s.length()-1;for(let i=0;i{for(const a of e){if(a.start!=n.start||a.end!=n.end||a.substrs.join("")!==n.substrs.join(""))continue;let s=n.parts;const o=i=>{for(const u of s){if(u.start===i.start&&u.substr===i.substr)return!1;if(!(i.length==1||u.length==1)&&(i.startu.start||u.starti.start))return!0}return!1};if(!(a.parts.filter(o).length>0))return!0}return!1};class ML{constructor(){this.parts=[],this.substrs=[],this.start=0,this.end=0}add(e){e&&(this.parts.push(e),this.substrs.push(e.substr),this.start=Math.min(e.start,this.start),this.end=Math.max(e.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(e,a){let s=new ML,o=JSON.parse(JSON.stringify(this.parts)),r=o.pop();for(const h of o)s.add(h);let i=a.substr.substring(0,e-r.start),u=i.length;return s.add({start:r.start,end:r.start+u,length:u,substr:i}),s}}const n1e=n=>{Kue(),n=xL(n);let e="",a=[new ML];for(let s=0;s0){h=h.sort((p,b)=>p.length()-b.length());for(let p of h)a1e(p,a)||a.push(p);continue}if(s>0&&m.size==1&&!m.has("3")){e+=VU(a,!1);let p=new ML;const b=a[0];b&&p.add(b.last()),a=[p]}}return e+=VU(a,!0),e};/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */const s1e=(n,e)=>{if(n)return n[e]},o1e=(n,e)=>{if(n){for(var a,s=e.split(".");(a=s.shift())&&(n=n[a]););return n}},uA=(n,e,a)=>{var s,o;return!n||(n=n+"",e.regex==null)||(o=n.search(e.regex),o===-1)?0:(s=e.string.length/n.length,o===0&&(s+=.5),s*a)},pA=(n,e)=>{var a=n[e];if(typeof a=="function")return a;a&&!Array.isArray(a)&&(n[e]=[a])},Kn=(n,e)=>{if(Array.isArray(n))n.forEach(e);else for(var a in n)n.hasOwnProperty(a)&&e(n[a],a)},r1e=(n,e)=>typeof n=="number"&&typeof e=="number"?n>e?1:ne?1:e>n?-1:0);/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */class i1e{constructor(e,a){this.items=void 0,this.settings=void 0,this.items=e,this.settings=a||{diacritics:!0}}tokenize(e,a,s){if(!e||!e.length)return[];const o=[],r=e.split(/\s+/);var i;return s&&(i=new RegExp("^("+Object.keys(s).map(Yd).join("|")+"):(.*)$")),r.forEach(u=>{let h,m=null,p=null;i&&(h=u.match(i))&&(m=h[1],u=h[2]),u.length>0&&(this.settings.diacritics?p=n1e(u)||null:p=Yd(u),p&&a&&(p="\\b"+p)),o.push({string:u,regex:p?new RegExp(p,"iu"):null,field:m})}),o}getScoreFunction(e,a){var s=this.prepareSearch(e,a);return this._getScoreFunction(s)}_getScoreFunction(e){const a=e.tokens,s=a.length;if(!s)return function(){return 0};const o=e.options.fields,r=e.weights,i=o.length,u=e.getAttrFn;if(!i)return function(){return 1};const h=function(){return i===1?function(m,p){const b=o[0].field;return uA(u(p,b),m,r[b]||1)}:function(m,p){var b=0;if(m.field){const x=u(p,m.field);!m.regex&&x?b+=1/i:b+=uA(x,m,1)}else Kn(r,(x,w)=>{b+=uA(u(p,w),m,x)});return b/i}}();return s===1?function(m){return h(a[0],m)}:e.options.conjunction==="and"?function(m){var p,b=0;for(let x of a){if(p=h(x,m),p<=0)return 0;b+=p}return b/s}:function(m){var p=0;return Kn(a,b=>{p+=h(b,m)}),p/s}}getSortFunction(e,a){var s=this.prepareSearch(e,a);return this._getSortFunction(s)}_getSortFunction(e){var a,s=[];const o=this,r=e.options,i=!e.query&&r.sort_empty?r.sort_empty:r.sort;if(typeof i=="function")return i.bind(this);const u=function(p,b){return p==="$score"?b.score:e.getAttrFn(o.items[b.id],p)};if(i)for(let m of i)(e.query||m.field!=="$score")&&s.push(m);if(e.query){a=!0;for(let m of s)if(m.field==="$score"){a=!1;break}a&&s.unshift({field:"$score",direction:"desc"})}else s=s.filter(m=>m.field!=="$score");return s.length?function(m,p){var b,x;for(let w of s)if(x=w.field,b=(w.direction==="desc"?-1:1)*r1e(u(x,m),u(x,p)),b)return b;return 0}:null}prepareSearch(e,a){const s={};var o=Object.assign({},a);if(pA(o,"sort"),pA(o,"sort_empty"),o.fields){pA(o,"fields");const r=[];o.fields.forEach(i=>{typeof i=="string"&&(i={field:i,weight:1}),r.push(i),s[i.field]="weight"in i?i.weight:1}),o.fields=r}return{options:o,query:e.toLowerCase().trim(),tokens:this.tokenize(e,o.respect_word_boundaries,s),total:0,items:[],weights:s,getAttrFn:o.nesting?o1e:s1e}}search(e,a){var s=this,o,r;r=this.prepareSearch(e,a),a=r.options,e=r.query;const i=a.score||s._getScoreFunction(r);e.length?Kn(s.items,(h,m)=>{o=i(h),(a.filter===!1||o>0)&&r.items.push({score:o,id:m})}):Kn(s.items,(h,m)=>{r.items.push({score:1,id:m})});const u=s._getSortFunction(r);return u&&r.items.sort(u),r.total=r.items.length,typeof a.limit=="number"&&(r.items=r.items.slice(0,a.limit)),r}}const pc=(n,e)=>{if(Array.isArray(n))n.forEach(e);else for(var a in n)n.hasOwnProperty(a)&&e(n[a],a)},In=n=>{if(n.jquery)return n[0];if(n instanceof HTMLElement)return n;if(wz(n)){var e=document.createElement("template");return e.innerHTML=n.trim(),e.content.firstChild}return document.querySelector(n)},wz=n=>typeof n=="string"&&n.indexOf("<")>-1,l1e=n=>n.replace(/['"\\]/g,"\\$&"),hA=(n,e)=>{var a=document.createEvent("HTMLEvents");a.initEvent(e,!0,!1),n.dispatchEvent(a)},S1=(n,e)=>{Object.assign(n.style,e)},Gn=(n,...e)=>{var a=xz(e);n=Mz(n),n.map(s=>{a.map(o=>{s.classList.add(o)})})},Ko=(n,...e)=>{var a=xz(e);n=Mz(n),n.map(s=>{a.map(o=>{s.classList.remove(o)})})},xz=n=>{var e=[];return pc(n,a=>{typeof a=="string"&&(a=a.trim().split(/[\11\12\14\15\40]/)),Array.isArray(a)&&(e=e.concat(a))}),e.filter(Boolean)},Mz=n=>(Array.isArray(n)||(n=[n]),n),nL=(n,e,a)=>{if(!(a&&!a.contains(n)))for(;n&&n.matches;){if(n.matches(e))return n;n=n.parentNode}},UU=(n,e=0)=>e>0?n[n.length-1]:n[0],c1e=n=>Object.keys(n).length===0,CL=(n,e)=>{if(!n)return-1;e=e||n.nodeName;for(var a=0;n=n.previousElementSibling;)n.matches(e)&&a++;return a},za=(n,e)=>{pc(e,(a,s)=>{a==null?n.removeAttribute(s):n.setAttribute(s,""+a)})},IE=(n,e)=>{n.parentNode&&n.parentNode.replaceChild(e,n)},d1e=(n,e)=>{if(e===null)return;if(typeof e=="string"){if(!e.length)return;e=new RegExp(e,"i")}const a=r=>{var i=r.data.match(e);if(i&&r.data.length>0){var u=document.createElement("span");u.className="highlight";var h=r.splitText(i.index);h.splitText(i[0].length);var m=h.cloneNode(!0);return u.appendChild(m),IE(h,u),1}return 0},s=r=>{r.nodeType===1&&r.childNodes&&!/(script|style)/i.test(r.tagName)&&(r.className!=="highlight"||r.tagName!=="SPAN")&&Array.from(r.childNodes).forEach(i=>{o(i)})},o=r=>r.nodeType===3?a(r):(s(r),0);o(n)},u1e=n=>{var e=n.querySelectorAll("span.highlight");Array.prototype.forEach.call(e,function(a){var s=a.parentNode;s.replaceChild(a.firstChild,a),s.normalize()})},p1e=65,h1e=13,Cz=27,LE=37,f1e=38,Sz=39,m1e=40,FU=8,v1e=46,$E=9,y1e=typeof navigator>"u"?!1:/Mac/.test(navigator.userAgent),I1=y1e?"metaKey":"ctrlKey";var jU={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:"loading",dataAttr:null,optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"ts-wrapper",controlClass:"ts-control",dropdownClass:"ts-dropdown",dropdownContentClass:"ts-dropdown-content",itemClass:"item",optionClass:"option",dropdownParent:null,controlInput:'',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(n){return n.length>0},render:{}};const Ds=n=>typeof n>"u"||n===null?null:sL(n),sL=n=>typeof n=="boolean"?n?"1":"0":n+"",oL=n=>(n+"").replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),_1e=(n,e)=>e>0?setTimeout(n,e):(n.call(null),null),g1e=(n,e)=>{var a;return function(s,o){var r=this;a&&(r.loading=Math.max(r.loading-1,0),clearTimeout(a)),a=setTimeout(function(){a=null,r.loadedSearches[s]=!0,n.call(r,s,o)},e)}},HU=(n,e,a)=>{var s,o=n.trigger,r={};n.trigger=function(){var i=arguments[0];if(e.indexOf(i)!==-1)r[i]=arguments;else return o.apply(n,arguments)},a.apply(n,[]),n.trigger=o;for(s of e)s in r&&o.apply(n,r[s])},k1e=n=>({start:n.selectionStart||0,length:(n.selectionEnd||0)-(n.selectionStart||0)}),La=(n,e=!1)=>{n&&(n.preventDefault(),e&&n.stopPropagation())},Aa=(n,e,a,s)=>{n.addEventListener(e,a,s)},yi=(n,e)=>{if(!e||!e[n])return!1;var a=(e.altKey?1:0)+(e.ctrlKey?1:0)+(e.shiftKey?1:0)+(e.metaKey?1:0);return a===1},fA=(n,e)=>{const a=n.getAttribute("id");return a||(n.setAttribute("id",e),e)},NU=n=>n.replace(/[\\"']/g,"\\$&"),_i=(n,e)=>{e&&n.append(e)};function zU(n,e){var a=Object.assign({},jU,e),s=a.dataAttr,o=a.labelField,r=a.valueField,i=a.disabledField,u=a.optgroupField,h=a.optgroupLabelField,m=a.optgroupValueField,p=n.tagName.toLowerCase(),b=n.getAttribute("placeholder")||n.getAttribute("data-placeholder");if(!b&&!a.allowEmptyOption){let D=n.querySelector('option[value=""]');D&&(b=D.textContent)}var x={placeholder:b,options:[],optgroups:[],items:[],maxItems:null},w=()=>{var D,V=x.options,R={},E=1;let P=0;var S=g=>{var v=Object.assign({},g.dataset),T=s&&v[s];return typeof T=="string"&&T.length&&(v=Object.assign(v,JSON.parse(T))),v},C=(g,v)=>{var T=Ds(g.value);if(T!=null&&!(!T&&!a.allowEmptyOption)){if(R.hasOwnProperty(T)){if(v){var j=R[T][u];j?Array.isArray(j)?j.push(v):R[T][u]=[j,v]:R[T][u]=v}}else{var B=S(g);B[o]=B[o]||g.textContent,B[r]=B[r]||T,B[i]=B[i]||g.disabled,B[u]=B[u]||v,B.$option=g,B.$order=B.$order||++P,R[T]=B,V.push(B)}g.selected&&x.items.push(T)}},M=g=>{var v,T;T=S(g),T[h]=T[h]||g.getAttribute("label")||"",T[m]=T[m]||E++,T[i]=T[i]||g.disabled,T.$order=T.$order||++P,x.optgroups.push(T),v=T[m],pc(g.children,j=>{C(j,v)})};x.maxItems=n.hasAttribute("multiple")?null:1,pc(n.children,g=>{D=g.tagName.toLowerCase(),D==="optgroup"?M(g):D==="option"&&C(g)})},$=()=>{const D=n.getAttribute(s);if(D)x.options=JSON.parse(D),pc(x.options,R=>{x.items.push(R[r])});else{var V=n.value.trim()||"";if(!a.allowEmptyOption&&!V.length)return;const R=V.split(a.delimiter);pc(R,E=>{const P={};P[o]=E,P[r]=E,x.options.push(P)}),x.items=R}};return p==="select"?w():$(),Object.assign({},jU,x,e)}var BU=0;class ls extends Hue(jue){constructor(e,a){super(),this.control_input=void 0,this.wrapper=void 0,this.dropdown=void 0,this.control=void 0,this.dropdown_content=void 0,this.focus_node=void 0,this.order=0,this.settings=void 0,this.input=void 0,this.tabIndex=void 0,this.is_select_tag=void 0,this.rtl=void 0,this.inputId=void 0,this._destroy=void 0,this.sifter=void 0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isRequired=void 0,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.currentResults=void 0,this.lastValue="",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,BU++;var s,o=In(e);if(o.tomselect)throw new Error("Tom Select already initialized on this element");o.tomselect=this;var r=window.getComputedStyle&&window.getComputedStyle(o,null);s=r.getPropertyValue("direction");const i=zU(o,a);this.settings=i,this.input=o,this.tabIndex=o.tabIndex||0,this.is_select_tag=o.tagName.toLowerCase()==="select",this.rtl=/rtl/i.test(s),this.inputId=fA(o,"tomselect-"+BU),this.isRequired=o.required,this.sifter=new i1e(this.options,{diacritics:i.diacritics}),i.mode=i.mode||(i.maxItems===1?"single":"multi"),typeof i.hideSelected!="boolean"&&(i.hideSelected=i.mode==="multi"),typeof i.hidePlaceholder!="boolean"&&(i.hidePlaceholder=i.mode!=="multi");var u=i.createFilter;typeof u!="function"&&(typeof u=="string"&&(u=new RegExp(u)),u instanceof RegExp?i.createFilter=V=>u.test(V):i.createFilter=V=>this.settings.duplicates||!this.options[V]),this.initializePlugins(i.plugins),this.setupCallbacks(),this.setupTemplates();const h=In("
"),m=In("
"),p=this._render("dropdown"),b=In('
'),x=this.input.getAttribute("class")||"",w=i.mode;var $;if(Gn(h,i.wrapperClass,x,w),Gn(m,i.controlClass),_i(h,m),Gn(p,i.dropdownClass,w),i.copyClassesToDropdown&&Gn(p,x),Gn(b,i.dropdownContentClass),_i(p,b),In(i.dropdownParent||h).appendChild(p),wz(i.controlInput)){$=In(i.controlInput);var D=["autocorrect","autocapitalize","autocomplete","spellcheck"];Kn(D,V=>{o.getAttribute(V)&&za($,{[V]:o.getAttribute(V)})}),$.tabIndex=-1,m.appendChild($),this.focus_node=$}else i.controlInput?($=In(i.controlInput),this.focus_node=$):($=In(""),this.focus_node=m);this.wrapper=h,this.dropdown=p,this.dropdown_content=b,this.control=m,this.control_input=$,this.setup()}setup(){const e=this,a=e.settings,s=e.control_input,o=e.dropdown,r=e.dropdown_content,i=e.wrapper,u=e.control,h=e.input,m=e.focus_node,p={passive:!0},b=e.inputId+"-ts-dropdown";za(r,{id:b}),za(m,{role:"combobox","aria-haspopup":"listbox","aria-expanded":"false","aria-controls":b});const x=fA(m,e.inputId+"-ts-control"),w="label[for='"+l1e(e.inputId)+"']",$=document.querySelector(w),D=e.focus.bind(e);if($){Aa($,"click",D),za($,{for:x});const E=fA($,e.inputId+"-ts-label");za(m,{"aria-labelledby":E}),za(r,{"aria-labelledby":E})}if(i.style.width=h.style.width,e.plugins.names.length){const E="plugin-"+e.plugins.names.join(" plugin-");Gn([i,o],E)}(a.maxItems===null||a.maxItems>1)&&e.is_select_tag&&za(h,{multiple:"multiple"}),a.placeholder&&za(s,{placeholder:a.placeholder}),!a.splitOn&&a.delimiter&&(a.splitOn=new RegExp("\\s*"+Yd(a.delimiter)+"+\\s*")),a.load&&a.loadThrottle&&(a.load=g1e(a.load,a.loadThrottle)),Aa(o,"mousemove",()=>{e.ignoreHover=!1}),Aa(o,"mouseenter",E=>{var P=nL(E.target,"[data-selectable]",o);P&&e.onOptionHover(E,P)},{capture:!0}),Aa(o,"click",E=>{const P=nL(E.target,"[data-selectable]");P&&(e.onOptionSelect(E,P),La(E,!0))}),Aa(u,"click",E=>{var P=nL(E.target,"[data-ts-item]",u);if(P&&e.onItemSelect(E,P)){La(E,!0);return}s.value==""&&(e.onClick(),La(E,!0))}),Aa(m,"keydown",E=>e.onKeyDown(E)),Aa(s,"keypress",E=>e.onKeyPress(E)),Aa(s,"input",E=>e.onInput(E)),Aa(m,"blur",E=>e.onBlur(E)),Aa(m,"focus",E=>e.onFocus(E)),Aa(s,"paste",E=>e.onPaste(E));const V=E=>{const P=E.composedPath()[0];if(!i.contains(P)&&!o.contains(P)){e.isFocused&&e.blur(),e.inputState();return}P==s&&e.isOpen?E.stopPropagation():La(E,!0)},R=()=>{e.isOpen&&e.positionDropdown()};Aa(document,"mousedown",V),Aa(window,"scroll",R,p),Aa(window,"resize",R,p),this._destroy=()=>{document.removeEventListener("mousedown",V),window.removeEventListener("scroll",R),window.removeEventListener("resize",R),$&&$.removeEventListener("click",D)},this.revertSettings={innerHTML:h.innerHTML,tabIndex:h.tabIndex},h.tabIndex=-1,h.insertAdjacentElement("afterend",e.wrapper),e.sync(!1),a.items=[],delete a.optgroups,delete a.options,Aa(h,"invalid",()=>{e.isValid&&(e.isValid=!1,e.isInvalid=!0,e.refreshState())}),e.updateOriginalInput(),e.refreshItems(),e.close(!1),e.inputState(),e.isSetup=!0,h.disabled?e.disable():h.readOnly?e.setReadOnly(!0):e.enable(),e.on("change",this.onChange),Gn(h,"tomselected","ts-hidden-accessible"),e.trigger("initialize"),a.preload===!0&&e.preload()}setupOptions(e=[],a=[]){this.addOptions(e),Kn(a,s=>{this.registerOptionGroup(s)})}setupTemplates(){var e=this,a=e.settings.labelField,s=e.settings.optgroupLabelField,o={optgroup:r=>{let i=document.createElement("div");return i.className="optgroup",i.appendChild(r.options),i},optgroup_header:(r,i)=>'
'+i(r[s])+"
",option:(r,i)=>"
"+i(r[a])+"
",item:(r,i)=>"
"+i(r[a])+"
",option_create:(r,i)=>'
Add '+i(r.input)+"
",no_results:()=>'
No results found
',loading:()=>'
',not_loading:()=>{},dropdown:()=>"
"};e.settings.render=Object.assign({},o,e.settings.render)}setupCallbacks(){var e,a,s={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",item_select:"onItemSelect",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(e in s)a=this.settings[s[e]],a&&this.on(e,a)}sync(e=!0){const a=this,s=e?zU(a.input,{delimiter:a.settings.delimiter}):a.settings;a.setupOptions(s.options,s.optgroups),a.setValue(s.items||[],!0),a.lastQuery=null}onClick(){var e=this;if(e.activeItems.length>0){e.clearActiveItems(),e.focus();return}e.isFocused&&e.isOpen?e.blur():e.focus()}onMouseDown(){}onChange(){hA(this.input,"input"),hA(this.input,"change")}onPaste(e){var a=this;if(a.isInputHidden||a.isLocked){La(e);return}a.settings.splitOn&&setTimeout(()=>{var s=a.inputValue();if(s.match(a.settings.splitOn)){var o=s.trim().split(a.settings.splitOn);Kn(o,r=>{Ds(r)&&(this.options[r]?a.addItem(r):a.createItem(r))})}},0)}onKeyPress(e){var a=this;if(a.isLocked){La(e);return}var s=String.fromCharCode(e.keyCode||e.which);if(a.settings.create&&a.settings.mode==="multi"&&s===a.settings.delimiter){a.createItem(),La(e);return}}onKeyDown(e){var a=this;if(a.ignoreHover=!0,a.isLocked){e.keyCode!==$E&&La(e);return}switch(e.keyCode){case p1e:if(yi(I1,e)&&a.control_input.value==""){La(e),a.selectAll();return}break;case Cz:a.isOpen&&(La(e,!0),a.close()),a.clearActiveItems();return;case m1e:if(!a.isOpen&&a.hasOptions)a.open();else if(a.activeOption){let s=a.getAdjacent(a.activeOption,1);s&&a.setActiveOption(s)}La(e);return;case f1e:if(a.activeOption){let s=a.getAdjacent(a.activeOption,-1);s&&a.setActiveOption(s)}La(e);return;case h1e:a.canSelect(a.activeOption)?(a.onOptionSelect(e,a.activeOption),La(e)):(a.settings.create&&a.createItem()||document.activeElement==a.control_input&&a.isOpen)&&La(e);return;case LE:a.advanceSelection(-1,e);return;case Sz:a.advanceSelection(1,e);return;case $E:a.settings.selectOnTab&&(a.canSelect(a.activeOption)&&(a.onOptionSelect(e,a.activeOption),La(e)),a.settings.create&&a.createItem()&&La(e));return;case FU:case v1e:a.deleteSelection(e);return}a.isInputHidden&&!yi(I1,e)&&La(e)}onInput(e){if(this.isLocked)return;const a=this.inputValue();if(this.lastValue!==a){if(this.lastValue=a,a==""){this._onInput();return}this.refreshTimeout&&clearTimeout(this.refreshTimeout),this.refreshTimeout=_1e(()=>{this.refreshTimeout=null,this._onInput()},this.settings.refreshThrottle)}}_onInput(){const e=this.lastValue;this.settings.shouldLoad.call(this,e)&&this.load(e),this.refreshOptions(),this.trigger("type",e)}onOptionHover(e,a){this.ignoreHover||this.setActiveOption(a,!1)}onFocus(e){var a=this,s=a.isFocused;if(a.isDisabled||a.isReadOnly){a.blur(),La(e);return}a.ignoreFocus||(a.isFocused=!0,a.settings.preload==="focus"&&a.preload(),s||a.trigger("focus"),a.activeItems.length||(a.inputState(),a.refreshOptions(!!a.settings.openOnFocus)),a.refreshState())}onBlur(e){if(document.hasFocus()!==!1){var a=this;if(a.isFocused){a.isFocused=!1,a.ignoreFocus=!1;var s=()=>{a.close(),a.setActiveItem(),a.setCaret(a.items.length),a.trigger("blur")};a.settings.create&&a.settings.createOnBlur?a.createItem(null,s):s()}}}onOptionSelect(e,a){var s,o=this;a.parentElement&&a.parentElement.matches("[data-disabled]")||(a.classList.contains("create")?o.createItem(null,()=>{o.settings.closeAfterSelect&&o.close()}):(s=a.dataset.value,typeof s<"u"&&(o.lastQuery=null,o.addItem(s),o.settings.closeAfterSelect&&o.close(),!o.settings.hideSelected&&e.type&&/click/.test(e.type)&&o.setActiveOption(a))))}canSelect(e){return!!(this.isOpen&&e&&this.dropdown_content.contains(e))}onItemSelect(e,a){var s=this;return!s.isLocked&&s.settings.mode==="multi"?(La(e),s.setActiveItem(a,e),!0):!1}canLoad(e){return!(!this.settings.load||this.loadedSearches.hasOwnProperty(e))}load(e){const a=this;if(!a.canLoad(e))return;Gn(a.wrapper,a.settings.loadingClass),a.loading++;const s=a.loadCallback.bind(a);a.settings.load.call(a,e,s)}loadCallback(e,a){const s=this;s.loading=Math.max(s.loading-1,0),s.lastQuery=null,s.clearActiveOption(),s.setupOptions(e,a),s.refreshOptions(s.isFocused&&!s.isInputHidden),s.loading||Ko(s.wrapper,s.settings.loadingClass),s.trigger("load",e,a)}preload(){var e=this.wrapper.classList;e.contains("preloaded")||(e.add("preloaded"),this.load(""))}setTextboxValue(e=""){var a=this.control_input,s=a.value!==e;s&&(a.value=e,hA(a,"update"),this.lastValue=e)}getValue(){return this.is_select_tag&&this.input.hasAttribute("multiple")?this.items:this.items.join(this.settings.delimiter)}setValue(e,a){var s=a?[]:["change"];HU(this,s,()=>{this.clear(a),this.addItems(e,a)})}setMaxItems(e){e===0&&(e=null),this.settings.maxItems=e,this.refreshState()}setActiveItem(e,a){var s=this,o,r,i,u,h,m;if(s.settings.mode!=="single"){if(!e){s.clearActiveItems(),s.isFocused&&s.inputState();return}if(o=a&&a.type.toLowerCase(),o==="click"&&yi("shiftKey",a)&&s.activeItems.length){for(m=s.getLastActive(),i=Array.prototype.indexOf.call(s.control.children,m),u=Array.prototype.indexOf.call(s.control.children,e),i>u&&(h=i,i=u,u=h),r=i;r<=u;r++)e=s.control.children[r],s.activeItems.indexOf(e)===-1&&s.setActiveItemClass(e);La(a)}else o==="click"&&yi(I1,a)||o==="keydown"&&yi("shiftKey",a)?e.classList.contains("active")?s.removeActiveItem(e):s.setActiveItemClass(e):(s.clearActiveItems(),s.setActiveItemClass(e));s.inputState(),s.isFocused||s.focus()}}setActiveItemClass(e){const a=this,s=a.control.querySelector(".last-active");s&&Ko(s,"last-active"),Gn(e,"active last-active"),a.trigger("item_select",e),a.activeItems.indexOf(e)==-1&&a.activeItems.push(e)}removeActiveItem(e){var a=this.activeItems.indexOf(e);this.activeItems.splice(a,1),Ko(e,"active")}clearActiveItems(){Ko(this.activeItems,"active"),this.activeItems=[]}setActiveOption(e,a=!0){e!==this.activeOption&&(this.clearActiveOption(),e&&(this.activeOption=e,za(this.focus_node,{"aria-activedescendant":e.getAttribute("id")}),za(e,{"aria-selected":"true"}),Gn(e,"active"),a&&this.scrollToOption(e)))}scrollToOption(e,a){if(!e)return;const s=this.dropdown_content,o=s.clientHeight,r=s.scrollTop||0,i=e.offsetHeight,u=e.getBoundingClientRect().top-s.getBoundingClientRect().top+r;u+i>o+r?this.scroll(u-o+i,a):u{e.setActiveItemClass(s)}))}inputState(){var e=this;e.control.contains(e.control_input)&&(za(e.control_input,{placeholder:e.settings.placeholder}),e.activeItems.length>0||!e.isFocused&&e.settings.hidePlaceholder&&e.items.length>0?(e.setTextboxValue(),e.isInputHidden=!0):(e.settings.hidePlaceholder&&e.items.length>0&&za(e.control_input,{placeholder:""}),e.isInputHidden=!1),e.wrapper.classList.toggle("input-hidden",e.isInputHidden))}inputValue(){return this.control_input.value.trim()}focus(){var e=this;e.isDisabled||e.isReadOnly||(e.ignoreFocus=!0,e.control_input.offsetWidth?e.control_input.focus():e.focus_node.focus(),setTimeout(()=>{e.ignoreFocus=!1,e.onFocus()},0))}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(e){return this.sifter.getScoreFunction(e,this.getSearchOptions())}getSearchOptions(){var e=this.settings,a=e.sortField;return typeof e.sortField=="string"&&(a=[{field:e.sortField}]),{fields:e.searchField,conjunction:e.searchConjunction,sort:a,nesting:e.nesting}}search(e){var a,s,o=this,r=this.getSearchOptions();if(o.settings.score&&(s=o.settings.score.call(o,e),typeof s!="function"))throw new Error('Tom Select "score" setting must be a function that returns a function');return e!==o.lastQuery?(o.lastQuery=e,a=o.sifter.search(e,Object.assign(r,{score:s})),o.currentResults=a):a=Object.assign({},o.currentResults),o.settings.hideSelected&&(a.items=a.items.filter(i=>{let u=Ds(i.id);return!(u&&o.items.indexOf(u)!==-1)})),a}refreshOptions(e=!0){var a,s,o,r,i,u,h,m,p,b;const x={},w=[];var $=this,D=$.inputValue();const V=D===$.lastQuery||D==""&&$.lastQuery==null;var R=$.search(D),E=null,P=$.settings.shouldOpen||!1,S=$.dropdown_content;V&&(E=$.activeOption,E&&(p=E.closest("[data-group]"))),r=R.items.length,typeof $.settings.maxOptions=="number"&&(r=Math.min(r,$.settings.maxOptions)),r>0&&(P=!0);const C=(g,v)=>{let T=x[g];if(T!==void 0){let B=w[T];if(B!==void 0)return[T,B.fragment]}let j=document.createDocumentFragment();return T=w.length,w.push({fragment:j,order:v,optgroup:g}),[T,j]};for(a=0;a0&&(B=B.cloneNode(!0),za(B,{id:T.$id+"-clone-"+s,"aria-selected":null}),B.classList.add("ts-cloned"),Ko(B,"active"),$.activeOption&&$.activeOption.dataset.value==v&&p&&p.dataset.group===i.toString()&&(E=B)),Le.appendChild(B),i!=""&&(x[i]=$e)}}$.settings.lockOptgroupOrder&&w.sort((g,v)=>g.order-v.order),h=document.createDocumentFragment(),Kn(w,g=>{let v=g.fragment,T=g.optgroup;if(!v||!v.children.length)return;let j=$.optgroups[T];if(j!==void 0){let B=document.createDocumentFragment(),oe=$.render("optgroup_header",j);_i(B,oe),_i(B,v);let be=$.render("optgroup",{group:j,options:B});_i(h,be)}else _i(h,v)}),S.innerHTML="",_i(S,h),$.settings.highlight&&(u1e(S),R.query.length&&R.tokens.length&&Kn(R.tokens,g=>{d1e(S,g.regex)}));var M=g=>{let v=$.render(g,{input:D});return v&&(P=!0,S.insertBefore(v,S.firstChild)),v};if($.loading?M("loading"):$.settings.shouldLoad.call($,D)?R.items.length===0&&M("no_results"):M("not_loading"),m=$.canCreate(D),m&&(b=M("option_create")),$.hasOptions=R.items.length>0||m,P){if(R.items.length>0){if(!E&&$.settings.mode==="single"&&$.items[0]!=null&&(E=$.getOption($.items[0])),!S.contains(E)){let g=0;b&&!$.settings.addPrecedence&&(g=1),E=$.selectable()[g]}}else b&&(E=b);e&&!$.isOpen&&($.open(),$.scrollToOption(E,"auto")),$.setActiveOption(E)}else $.clearActiveOption(),e&&$.isOpen&&$.close(!1)}selectable(){return this.dropdown_content.querySelectorAll("[data-selectable]")}addOption(e,a=!1){const s=this;if(Array.isArray(e))return s.addOptions(e,a),!1;const o=Ds(e[s.settings.valueField]);return o===null||s.options.hasOwnProperty(o)?!1:(e.$order=e.$order||++s.order,e.$id=s.inputId+"-opt-"+e.$order,s.options[o]=e,s.lastQuery=null,a&&(s.userOptions[o]=a,s.trigger("option_add",o,e)),o)}addOptions(e,a=!1){Kn(e,s=>{this.addOption(s,a)})}registerOption(e){return this.addOption(e)}registerOptionGroup(e){var a=Ds(e[this.settings.optgroupValueField]);return a===null?!1:(e.$order=e.$order||++this.order,this.optgroups[a]=e,a)}addOptionGroup(e,a){var s;a[this.settings.optgroupValueField]=e,(s=this.registerOptionGroup(a))&&this.trigger("optgroup_add",s,a)}removeOptionGroup(e){this.optgroups.hasOwnProperty(e)&&(delete this.optgroups[e],this.clearCache(),this.trigger("optgroup_remove",e))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger("optgroup_clear")}updateOption(e,a){const s=this;var o,r;const i=Ds(e),u=Ds(a[s.settings.valueField]);if(i===null)return;const h=s.options[i];if(h==null)return;if(typeof u!="string")throw new Error("Value must be set in option data");const m=s.getOption(i),p=s.getItem(i);if(a.$order=a.$order||h.$order,delete s.options[i],s.uncacheValue(u),s.options[u]=a,m){if(s.dropdown_content.contains(m)){const b=s._render("option",a);IE(m,b),s.activeOption===m&&s.setActiveOption(b)}m.remove()}p&&(r=s.items.indexOf(i),r!==-1&&s.items.splice(r,1,u),o=s._render("item",a),p.classList.contains("active")&&Gn(o,"active"),IE(p,o)),s.lastQuery=null}removeOption(e,a){const s=this;e=sL(e),s.uncacheValue(e),delete s.userOptions[e],delete s.options[e],s.lastQuery=null,s.trigger("option_remove",e),s.removeItem(e,a)}clearOptions(e){const a=(e||this.clearFilter).bind(this);this.loadedSearches={},this.userOptions={},this.clearCache();const s={};Kn(this.options,(o,r)=>{a(o,r)&&(s[r]=o)}),this.options=this.sifter.items=s,this.lastQuery=null,this.trigger("option_clear")}clearFilter(e,a){return this.items.indexOf(a)>=0}getOption(e,a=!1){const s=Ds(e);if(s===null)return null;const o=this.options[s];if(o!=null){if(o.$div)return o.$div;if(a)return this._render("option",o)}return null}getAdjacent(e,a,s="option"){var o=this,r;if(!e)return null;s=="item"?r=o.controlChildren():r=o.dropdown_content.querySelectorAll("[data-selectable]");for(let i=0;i0?r[i+1]:r[i-1];return null}getItem(e){if(typeof e=="object")return e;var a=Ds(e);return a!==null?this.control.querySelector(`[data-value="${NU(a)}"]`):null}addItems(e,a){var s=this,o=Array.isArray(e)?e:[e];o=o.filter(i=>s.items.indexOf(i)===-1);const r=o[o.length-1];o.forEach(i=>{s.isPending=i!==r,s.addItem(i,a)})}addItem(e,a){var s=a?[]:["change","dropdown_close"];HU(this,s,()=>{var o,r;const i=this,u=i.settings.mode,h=Ds(e);if(!(h&&i.items.indexOf(h)!==-1&&(u==="single"&&i.close(),u==="single"||!i.settings.duplicates))&&!(h===null||!i.options.hasOwnProperty(h))&&(u==="single"&&i.clear(a),!(u==="multi"&&i.isFull()))){if(o=i._render("item",i.options[h]),i.control.contains(o)&&(o=o.cloneNode(!0)),r=i.isFull(),i.items.splice(i.caretPos,0,h),i.insertAtCaret(o),i.isSetup){if(!i.isPending&&i.settings.hideSelected){let m=i.getOption(h),p=i.getAdjacent(m,1);p&&i.setActiveOption(p)}!i.isPending&&!i.settings.closeAfterSelect&&i.refreshOptions(i.isFocused&&u!=="single"),i.settings.closeAfterSelect!=!1&&i.isFull()?i.close():i.isPending||i.positionDropdown(),i.trigger("item_add",h,o),i.isPending||i.updateOriginalInput({silent:a})}(!i.isPending||!r&&i.isFull())&&(i.inputState(),i.refreshState())}})}removeItem(e=null,a){const s=this;if(e=s.getItem(e),!e)return;var o,r;const i=e.dataset.value;o=CL(e),e.remove(),e.classList.contains("active")&&(r=s.activeItems.indexOf(e),s.activeItems.splice(r,1),Ko(e,"active")),s.items.splice(o,1),s.lastQuery=null,!s.settings.persist&&s.userOptions.hasOwnProperty(i)&&s.removeOption(i,a),o{}){arguments.length===3&&(a=arguments[2]),typeof a!="function"&&(a=()=>{});var s=this,o=s.caretPos,r;if(e=e||s.inputValue(),!s.canCreate(e))return a(),!1;s.lock();var i=!1,u=h=>{if(s.unlock(),!h||typeof h!="object")return a();var m=Ds(h[s.settings.valueField]);if(typeof m!="string")return a();s.setTextboxValue(),s.addOption(h,!0),s.setCaret(o),s.addItem(m),a(h),i=!0};return typeof s.settings.create=="function"?r=s.settings.create.call(this,e,u):r={[s.settings.labelField]:e,[s.settings.valueField]:e},i||u(r),!0}refreshItems(){var e=this;e.lastQuery=null,e.isSetup&&e.addItems(e.items),e.updateOriginalInput(),e.refreshState()}refreshState(){const e=this;e.refreshValidityState();const a=e.isFull(),s=e.isLocked;e.wrapper.classList.toggle("rtl",e.rtl);const o=e.wrapper.classList;o.toggle("focus",e.isFocused),o.toggle("disabled",e.isDisabled),o.toggle("readonly",e.isReadOnly),o.toggle("required",e.isRequired),o.toggle("invalid",!e.isValid),o.toggle("locked",s),o.toggle("full",a),o.toggle("input-active",e.isFocused&&!e.isInputHidden),o.toggle("dropdown-active",e.isOpen),o.toggle("has-options",c1e(e.options)),o.toggle("has-items",e.items.length>0)}refreshValidityState(){var e=this;e.input.validity&&(e.isValid=e.input.validity.valid,e.isInvalid=!e.isValid)}isFull(){return this.settings.maxItems!==null&&this.items.length>=this.settings.maxItems}updateOriginalInput(e={}){const a=this;var s,o;const r=a.input.querySelector('option[value=""]');if(a.is_select_tag){let m=function(p,b,x){return p||(p=In('")),p!=r&&a.input.append(p),u.push(p),(p!=r||h>0)&&(p.selected=!0),p};var i=m;const u=[],h=a.input.querySelectorAll("option:checked").length;a.input.querySelectorAll("option:checked").forEach(p=>{p.selected=!1}),a.items.length==0&&a.settings.mode=="single"?m(r,"",""):a.items.forEach(p=>{if(s=a.options[p],o=s[a.settings.labelField]||"",u.includes(s.$option)){const b=a.input.querySelector(`option[value="${NU(p)}"]:not(:checked)`);m(b,p,o)}else s.$option=m(s.$option,p,o)})}else a.input.value=a.getValue();a.isSetup&&(e.silent||a.trigger("change",a.getValue()))}open(){var e=this;e.isLocked||e.isOpen||e.settings.mode==="multi"&&e.isFull()||(e.isOpen=!0,za(e.focus_node,{"aria-expanded":"true"}),e.refreshState(),S1(e.dropdown,{visibility:"hidden",display:"block"}),e.positionDropdown(),S1(e.dropdown,{visibility:"visible",display:"block"}),e.focus(),e.trigger("dropdown_open",e.dropdown))}close(e=!0){var a=this,s=a.isOpen;e&&(a.setTextboxValue(),a.settings.mode==="single"&&a.items.length&&a.inputState()),a.isOpen=!1,za(a.focus_node,{"aria-expanded":"false"}),S1(a.dropdown,{display:"none"}),a.settings.hideSelected&&a.clearActiveOption(),a.refreshState(),s&&a.trigger("dropdown_close",a.dropdown)}positionDropdown(){if(this.settings.dropdownParent==="body"){var e=this.control,a=e.getBoundingClientRect(),s=e.offsetHeight+a.top+window.scrollY,o=a.left+window.scrollX;S1(this.dropdown,{width:a.width+"px",top:s+"px",left:o+"px"})}}clear(e){var a=this;if(a.items.length){var s=a.controlChildren();Kn(s,o=>{a.removeItem(o,!0)}),a.inputState(),e||a.updateOriginalInput(),a.trigger("clear")}}insertAtCaret(e){const a=this,s=a.caretPos,o=a.control;o.insertBefore(e,o.children[s]||null),a.setCaret(s+1)}deleteSelection(e){var a,s,o,r,i=this;a=e&&e.keyCode===FU?-1:1,s=k1e(i.control_input);const u=[];if(i.activeItems.length)r=UU(i.activeItems,a),o=CL(r),a>0&&o++,Kn(i.activeItems,h=>u.push(h));else if((i.isFocused||i.settings.mode==="single")&&i.items.length){const h=i.controlChildren();let m;a<0&&s.start===0&&s.length===0?m=h[i.caretPos-1]:a>0&&s.start===i.inputValue().length&&(m=h[i.caretPos]),m!==void 0&&u.push(m)}if(!i.shouldDelete(u,e))return!1;for(La(e,!0),typeof o<"u"&&i.setCaret(o);u.length;)i.removeItem(u.pop());return i.inputState(),i.positionDropdown(),i.refreshOptions(!1),!0}shouldDelete(e,a){const s=e.map(o=>o.dataset.value);return!(!s.length||typeof this.settings.onDelete=="function"&&this.settings.onDelete(s,a)===!1)}advanceSelection(e,a){var s,o,r=this;r.rtl&&(e*=-1),!r.inputValue().length&&(yi(I1,a)||yi("shiftKey",a)?(s=r.getLastActive(e),s?s.classList.contains("active")?o=r.getAdjacent(s,e,"item"):o=s:e>0?o=r.control_input.nextElementSibling:o=r.control_input.previousElementSibling,o&&(o.classList.contains("active")&&r.removeActiveItem(s),r.setActiveItemClass(o))):r.moveCaret(e))}moveCaret(e){}getLastActive(e){let a=this.control.querySelector(".last-active");if(a)return a;var s=this.control.querySelectorAll(".active");if(s)return UU(s,e)}setCaret(e){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll("[data-ts-item]"))}lock(){this.setLocked(!0)}unlock(){this.setLocked(!1)}setLocked(e=this.isReadOnly||this.isDisabled){this.isLocked=e,this.refreshState()}disable(){this.setDisabled(!0),this.close()}enable(){this.setDisabled(!1)}setDisabled(e){this.focus_node.tabIndex=e?-1:this.tabIndex,this.isDisabled=e,this.input.disabled=e,this.control_input.disabled=e,this.setLocked()}setReadOnly(e){this.isReadOnly=e,this.input.readOnly=e,this.control_input.readOnly=e,this.setLocked()}destroy(){var e=this,a=e.revertSettings;e.trigger("destroy"),e.off(),e.wrapper.remove(),e.dropdown.remove(),e.input.innerHTML=a.innerHTML,e.input.tabIndex=a.tabIndex,Ko(e.input,"tomselected","ts-hidden-accessible"),e._destroy(),delete e.input.tomselect}render(e,a){var s,o;const r=this;if(typeof this.settings.render[e]!="function"||(o=r.settings.render[e].call(this,a,oL),!o))return null;if(o=In(o),e==="option"||e==="option_create"?a[r.settings.disabledField]?za(o,{"aria-disabled":"true"}):za(o,{"data-selectable":""}):e==="optgroup"&&(s=a.group[r.settings.optgroupValueField],za(o,{"data-group":s}),a.group[r.settings.disabledField]&&za(o,{"data-disabled":""})),e==="option"||e==="item"){const i=sL(a[r.settings.valueField]);za(o,{"data-value":i}),e==="item"?(Gn(o,r.settings.itemClass),za(o,{"data-ts-item":""})):(Gn(o,r.settings.optionClass),za(o,{role:"option",id:a.$id}),a.$div=o,r.options[i]=a)}return o}_render(e,a){const s=this.render(e,a);if(s==null)throw"HTMLElement expected";return s}clearCache(){Kn(this.options,e=>{e.$div&&(e.$div.remove(),delete e.$div)})}uncacheValue(e){const a=this.getOption(e);a&&a.remove()}canCreate(e){return this.settings.create&&e.length>0&&this.settings.createFilter.call(this,e)}hook(e,a,s){var o=this,r=o[a];o[a]=function(){var i,u;return e==="after"&&(i=r.apply(o,arguments)),u=s.apply(o,arguments),e==="instead"?u:(e==="before"&&(i=r.apply(o,arguments)),i)}}}function b1e(){Aa(this.input,"change",()=>{this.sync()})}function w1e(n){var e=this,a=e.onOptionSelect;e.settings.hideSelected=!1;const s=Object.assign({className:"tomselect-checkbox",checkedClassNames:void 0,uncheckedClassNames:void 0},n);var o=function(u,h){h?(u.checked=!0,s.uncheckedClassNames&&u.classList.remove(...s.uncheckedClassNames),s.checkedClassNames&&u.classList.add(...s.checkedClassNames)):(u.checked=!1,s.checkedClassNames&&u.classList.remove(...s.checkedClassNames),s.uncheckedClassNames&&u.classList.add(...s.uncheckedClassNames))},r=function(u){setTimeout(()=>{var h=u.querySelector("input."+s.className);h instanceof HTMLInputElement&&o(h,u.classList.contains("selected"))},1)};e.hook("after","setupTemplates",()=>{var i=e.settings.render.option;e.settings.render.option=(u,h)=>{var m=In(i.call(e,u,h)),p=document.createElement("input");s.className&&p.classList.add(s.className),p.addEventListener("click",function(x){La(x)}),p.type="checkbox";const b=Ds(u[e.settings.valueField]);return o(p,!!(b&&e.items.indexOf(b)>-1)),m.prepend(p),m}}),e.on("item_remove",i=>{var u=e.getOption(i);u&&(u.classList.remove("selected"),r(u))}),e.on("item_add",i=>{var u=e.getOption(i);u&&r(u)}),e.hook("instead","onOptionSelect",(i,u)=>{if(u.classList.contains("selected")){u.classList.remove("selected"),e.removeItem(u.dataset.value),e.refreshOptions(),La(i,!0);return}a.call(e,i,u),r(u)})}function x1e(n){const e=this,a=Object.assign({className:"clear-button",title:"Clear All",html:s=>`
`},n);e.on("initialize",()=>{var s=In(a.html(a));s.addEventListener("click",o=>{e.isLocked||(e.clear(),e.settings.mode==="single"&&e.settings.allowEmptyOption&&e.addItem(""),o.preventDefault(),o.stopPropagation())}),e.control.appendChild(s)})}const M1e=(n,e)=>{var a;(a=n.parentNode)==null||a.insertBefore(e,n.nextSibling)},C1e=(n,e)=>{var a;(a=n.parentNode)==null||a.insertBefore(e,n)},S1e=(n,e)=>{do{var a;if(e=(a=e)==null?void 0:a.previousElementSibling,n==e)return!0}while(e&&e.previousElementSibling);return!1};function I1e(){var n=this;if(n.settings.mode!=="multi")return;var e=n.lock,a=n.unlock;let s=!0,o;n.hook("after","setupTemplates",()=>{var r=n.settings.render.item;n.settings.render.item=(i,u)=>{const h=In(r.call(n,i,u));za(h,{draggable:"true"});const m=D=>{s||La(D),D.stopPropagation()},p=D=>{o=h,setTimeout(()=>{h.classList.add("ts-dragging")},0)},b=D=>{D.preventDefault(),h.classList.add("ts-drag-over"),w(h,o)},x=()=>{h.classList.remove("ts-drag-over")},w=(D,V)=>{V!==void 0&&(S1e(V,h)?M1e(D,V):C1e(D,V))},$=()=>{var D;document.querySelectorAll(".ts-drag-over").forEach(R=>R.classList.remove("ts-drag-over")),(D=o)==null||D.classList.remove("ts-dragging"),o=void 0;var V=[];n.control.querySelectorAll("[data-value]").forEach(R=>{if(R.dataset.value){let E=R.dataset.value;E&&V.push(E)}}),n.setValue(V)};return Aa(h,"mousedown",m),Aa(h,"dragstart",p),Aa(h,"dragenter",b),Aa(h,"dragover",b),Aa(h,"dragleave",x),Aa(h,"dragend",$),h}}),n.hook("instead","lock",()=>(s=!1,e.call(n))),n.hook("instead","unlock",()=>(s=!0,a.call(n)))}function L1e(n){const e=this,a=Object.assign({title:"Untitled",headerClass:"dropdown-header",titleRowClass:"dropdown-header-title",labelClass:"dropdown-header-label",closeClass:"dropdown-header-close",html:s=>'
'+s.title+'×
'},n);e.on("initialize",()=>{var s=In(a.html(a)),o=s.querySelector("."+a.closeClass);o&&o.addEventListener("click",r=>{La(r,!0),e.close()}),e.dropdown.insertBefore(s,e.dropdown.firstChild)})}function $1e(){var n=this;n.hook("instead","setCaret",e=>{n.settings.mode==="single"||!n.control.contains(n.control_input)?e=n.items.length:(e=Math.max(0,Math.min(n.items.length,e)),e!=n.caretPos&&!n.isPending&&n.controlChildren().forEach((a,s)=>{s{if(!n.isFocused)return;const a=n.getLastActive(e);if(a){const s=CL(a);n.setCaret(e>0?s+1:s),n.setActiveItem(),Ko(a,"last-active")}else n.setCaret(n.caretPos+e)})}function A1e(){const n=this;n.settings.shouldOpen=!0,n.hook("before","setup",()=>{n.focus_node=n.control,Gn(n.control_input,"dropdown-input");const e=In('