chore: clean up repo root — remove obsolete files, organize infra into docs/
Remove 21MB Vuexy theme directory (replaced by custom EZSCALE design system), old session logs, patch notes, screenshots, and discovery artifacts. Move infrastructure files (Horizon config, install script, VirtFusion API spec, discover script) into docs/ subdirectories. Update CLAUDE.md reference docs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@@ -278,4 +278,3 @@ google-chrome --headless=new --disable-gpu --no-sandbox --screenshot=/tmp/screen
|
||||
- `GETTING_STARTED.md` — Development setup guide
|
||||
- `IDEAS.md` — Future feature ideas
|
||||
- `website/CLAUDE.md` — Laravel Boost guidelines (auto-generated, Laravel/Pest/Pint conventions)
|
||||
- `SESSION_LOG_2026-03-14.md` — Full frontend redesign session log (design system, bug fixes)
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
# Provisioning & Service Termination Fix - 2026-02-10
|
||||
|
||||
## Issues Fixed
|
||||
|
||||
### Issue #1: VPS Not Being Provisioned
|
||||
**Root Cause:** All provisioning services (VirtFusion, Pterodactyl, SynergyCP, Enhance) were reading credentials from `config('services.*')` which pulls from `.env`, but the actual credentials are stored in the **database** via the `settings` table (configured in Admin → Settings → API).
|
||||
|
||||
**What Happened:**
|
||||
- User configured VirtFusion API URL/token via admin panel settings (stored in DB)
|
||||
- VirtFusionService was reading from `.env` (empty values)
|
||||
- HTTP client tried to connect to relative hostnames like `sanctum`, `users`, `servers`
|
||||
- cURL errors: "Could not resolve host: users"
|
||||
|
||||
**Files Updated:**
|
||||
- `app/Services/Provisioning/VirtFusionService.php`
|
||||
- `app/Services/Provisioning/PterodactylService.php`
|
||||
- `app/Services/Provisioning/SynergyCPService.php`
|
||||
- `app/Services/Provisioning/EnhanceService.php`
|
||||
|
||||
**Change:** All services now use `\App\Models\Setting::get('provider_api_url')` instead of `config('services.provider.url')`
|
||||
|
||||
### Issue #2: Services Not Terminated on Subscription Cancellation
|
||||
**Root Cause:** `HandleSubscriptionCancelled` listener only sent a notification - it didn't call the provisioning service's `terminate()` method.
|
||||
|
||||
**What Happened:**
|
||||
- User canceled subscription with "immediate" setting
|
||||
- Subscription canceled in Stripe
|
||||
- Service remained active on VirtFusion panel
|
||||
- No cleanup of provisioned resources
|
||||
|
||||
**Files Updated:**
|
||||
- `app/Listeners/HandleSubscriptionCancelled.php`
|
||||
|
||||
**Changes:**
|
||||
- Made listener implement `ShouldQueue` (background job with retries)
|
||||
- Added logic to find all active/suspended services for the subscription
|
||||
- Call `terminate()` on each service via ProvisioningFactory
|
||||
- Proper error handling and logging
|
||||
- Service status updated to "terminated" in database
|
||||
|
||||
## Current State
|
||||
|
||||
### VirtFusion Configuration (Database)
|
||||
```
|
||||
virtfusion_api_url: https://cp.vps.ezscale.tech/api/v1
|
||||
virtfusion_api_token: (encrypted in DB)
|
||||
```
|
||||
|
||||
### How It Works Now
|
||||
|
||||
**Subscription Created:**
|
||||
1. HandleSubscriptionCreated listener queued
|
||||
2. Reads plan from database
|
||||
3. Gets provisioning service (VirtFusionService for VPS)
|
||||
4. **VirtFusionService reads URL/token from settings table**
|
||||
5. Ensures user exists on VirtFusion panel
|
||||
6. Creates server (package ID 43)
|
||||
7. Changes package to match plan specs
|
||||
8. Updates service record with IP, hostname, etc.
|
||||
9. Sends credentials email to customer
|
||||
|
||||
**Subscription Canceled:**
|
||||
1. HandleSubscriptionCancelled listener queued
|
||||
2. Finds all active/suspended services for subscription
|
||||
3. Gets provisioning service for each
|
||||
4. Calls `terminate()` on VirtFusion (DELETE /servers/{id})
|
||||
5. Updates service status to "terminated"
|
||||
6. Sends cancellation email to customer
|
||||
|
||||
## Testing Needed
|
||||
|
||||
1. ✅ Horizon restarted to reload code changes
|
||||
2. ⏳ Create a new VPS subscription and verify:
|
||||
- Service is provisioned on VirtFusion
|
||||
- Credentials email is sent
|
||||
- Service appears in customer dashboard
|
||||
3. ⏳ Cancel the subscription and verify:
|
||||
- Service is terminated on VirtFusion
|
||||
- Service status updates to "terminated"
|
||||
- Cancellation email is sent
|
||||
|
||||
## Environment Variables (No Longer Used)
|
||||
|
||||
The following `.env` variables are **no longer used** for provisioning (database settings take precedence):
|
||||
- ~~VIRTFUSION_API_URL~~
|
||||
- ~~VIRTFUSION_API_TOKEN~~
|
||||
- ~~PTERODACTYL_PANEL_URL~~
|
||||
- ~~PTERODACTYL_API_KEY~~
|
||||
- ~~SYNERGYCP_API_URL~~
|
||||
- ~~SYNERGYCP_API_TOKEN~~
|
||||
- ~~ENHANCE_API_URL~~
|
||||
- ~~ENHANCE_API_TOKEN~~
|
||||
|
||||
**Configure all provisioning credentials in:** Admin Panel → Settings → API Integrations
|
||||
|
||||
## Migration Notes
|
||||
|
||||
If you have provisioning credentials in `.env`, migrate them to the database:
|
||||
1. Go to Admin → Settings → API
|
||||
2. Enter the URL and token for each provider
|
||||
3. Click "Save" to encrypt and store in database
|
||||
4. Remove from `.env` (optional, but recommended to avoid confusion)
|
||||
@@ -1,133 +0,0 @@
|
||||
# Session Log — 2026-03-14
|
||||
|
||||
## Overview
|
||||
|
||||
Major frontend redesign session replacing the Vuexy-based design system with a custom EZSCALE design system. Also fixed several critical backend bugs related to billing, provisioning, and security. The redesign touched all 4 layouts, created new shared components, replaced the SCSS foundation, updated the color palette from purple (#7367F0) to navy blue (#1d4ed8), and migrated fonts to Plus Jakarta Sans + JetBrains Mono.
|
||||
|
||||
---
|
||||
|
||||
## Frontend Redesign
|
||||
|
||||
### Phase 0: Foundation
|
||||
|
||||
- Installed `echarts`, `vue-echarts`, `@vueuse/core`; removed `@mdi/font`
|
||||
- Replaced Inter/Public Sans fonts with **Plus Jakarta Sans** (UI) + **JetBrains Mono** (code) via Bunny Fonts
|
||||
- Deleted all 38 Vuexy `@core` SCSS files
|
||||
- Created 8 new SCSS design system files:
|
||||
- `_variables.scss`, `_mixins.scss`, `_animations.scss`, `_typography.scss`
|
||||
- `_component-overrides.scss`, `_marketing.scss`, `_layouts.scss`, `styles.scss`
|
||||
- Rewrote Vuetify config: navy blue palette (`#1d4ed8` primary, `#3b82f6` primary-light), pill buttons, subdomain-aware theming (light for marketing, dark for admin/account)
|
||||
- Updated `vite.config.ts`: removed `@core-scss` and `@configured-variables` aliases
|
||||
- Updated `variables/_vuetify.scss` and `variables/_template.scss`
|
||||
|
||||
### Phase 1: Layout Infrastructure
|
||||
|
||||
- Deleted 5 old VerticalNav* components and 4 `@layouts/styles` SCSS files
|
||||
- Created 8 new shared components:
|
||||
- `AppSidebar` — collapsible sidebar for admin/account layouts
|
||||
- `AppTopNavbar` — top navigation bar with search, theme switcher, notifications
|
||||
- `CommandPalette` — Cmd+K command palette for quick navigation
|
||||
- `ToastStack` — toast notification display (uses Pinia store)
|
||||
- `NotificationPanel` — slide-out notification panel
|
||||
- `SkeletonLoader` — loading placeholder component
|
||||
- `EmptyState` — empty state with icon/message/action
|
||||
- `Breadcrumbs` — breadcrumb navigation component
|
||||
- Created Pinia toast store (`stores/toast.ts`)
|
||||
- Rebuilt all 4 layouts:
|
||||
- `AdminLayout` — sidebar + navbar + command palette + notifications + toasts
|
||||
- `AccountLayout` — same pattern + impersonation banner
|
||||
- `MarketingLayout` — transparent navbar + mega footer + mobile drawer
|
||||
- `AuthLayout` — split-screen with gradient art panel
|
||||
- Updated admin navigation (reorganized groups) and marketing navigation (removed BattlefieldAcp)
|
||||
|
||||
### Phase 2: Marketing Components
|
||||
|
||||
Created 9 marketing components:
|
||||
- `HeroSection` — reusable hero with gradient background and CTA buttons
|
||||
- `NetworkHero` — animated SVG network visualization
|
||||
- `VpsHero`, `DedicatedHero`, `WebHostingHero`, `GameServerHero` — product-specific animated heroes
|
||||
- `GlassCard` — glassmorphism card component
|
||||
- `ScrollReveal` — intersection observer scroll animation wrapper
|
||||
- `PricingCard` — pricing plan card with feature list and CTA
|
||||
|
||||
### Phase 3: Page Migration
|
||||
|
||||
- Replaced `AppTextField`/`AppSelect`/`AppTextarea` with native `VTextField`/`VSelect`/`VTextarea` across all 28 pages
|
||||
- Updated 5 marketing page heroes to use `HeroSection` + animated SVGs
|
||||
- Merged `Products.vue` into `Home.vue`, `BattlefieldAcp.vue` into `GameServers.vue` (with featured section)
|
||||
- Added 301 redirects for `/products` -> `/` and `/battlefield-acp` -> `/game-servers`
|
||||
- Deleted old wrapper components (`AppTextField`, `AppSelect`, `AppTextarea`, `FlashMessages`, `NotificationBell`)
|
||||
|
||||
### Phase 4: Polish
|
||||
|
||||
- Theme persistence: `ThemeSwitcher` saves to localStorage (`ezscale-theme` key), Vuetify reads on init
|
||||
- Theme-aware styles: navbar/footer use CSS custom properties, hero sections force white text
|
||||
- Fixed `About.vue` sections (`bg-surface-variant` -> `section-alt-bg`)
|
||||
- Set default VChip size to `small` globally
|
||||
- Visual verification via headless Chrome screenshots
|
||||
|
||||
---
|
||||
|
||||
## Critical Bug Fixes
|
||||
|
||||
1. **placeOrder() column fixes** — Fixed wrong column names: `payment_method` -> `payment_gateway`, removed non-existent `order_id` on Service/Invoice, removed non-existent `subtotal` on Invoice, added `service_id`/`completed_at` on Order, added `service_type`/`platform` on Service
|
||||
|
||||
2. **VirtFusion provisioning_info** — Changed from non-existent column to storing in credentials via `array_merge`
|
||||
|
||||
3. **PayPal webhook verification** — Added header verification for `PAYPAL-TRANSMISSION-*` headers
|
||||
|
||||
4. **VPS root password exposure** — Moved from success flash to separate `new_password` flash key with secure dialog
|
||||
|
||||
5. **ensure_not_suspended middleware** — Applied to account routes, added bypass for impersonation stop, added banned check
|
||||
|
||||
6. **User::invoices() override** — Renamed to `billingInvoices()` to avoid conflict with Laravel Cashier's `invoices()` method, updated all 7+ call sites, aliased `withCount`
|
||||
|
||||
---
|
||||
|
||||
## Important Fixes
|
||||
|
||||
7. **Impersonation stop** — Added route on account subdomain, fixed AccountLayout link to use account domain
|
||||
|
||||
8. **Performance indexes** — Migration adding indexes on `invoices.status`, `orders.status`, `audit_logs.action`, `audit_logs.created_at`
|
||||
|
||||
9. **Invoice number collisions** — Replaced `count()+1` and `rand()` with `Str::random(6)`
|
||||
|
||||
10. **Dashboard caching** — Wrapped stats in `Cache::remember` with 5-min TTL
|
||||
|
||||
11. **last_four -> last4** — Fixed Stripe property name in BillingController
|
||||
|
||||
12. **FlashProps type** — Added `info` and `new_password` keys
|
||||
|
||||
---
|
||||
|
||||
## Files Changed Summary
|
||||
|
||||
### New Files
|
||||
- 8 SCSS design system files (`resources/styles/`)
|
||||
- 8 shared Vue components (`resources/ts/Components/`)
|
||||
- 9 marketing Vue components (`resources/ts/Components/marketing/`)
|
||||
- 1 Pinia store (`resources/ts/stores/toast.ts`)
|
||||
- 1 migration (performance indexes)
|
||||
|
||||
### Deleted Files
|
||||
- 38 Vuexy `@core` SCSS files
|
||||
- 5 VerticalNav* components
|
||||
- 4 `@layouts/styles` SCSS files
|
||||
- 3 app-form-elements wrapper components (`AppTextField`, `AppSelect`, `AppTextarea`)
|
||||
- `FlashMessages.vue`, `NotificationBell.vue`
|
||||
- `Products.vue`, `BattlefieldAcp.vue` (merged into other pages)
|
||||
|
||||
### Modified Files
|
||||
- All 4 layouts rebuilt
|
||||
- 28+ Vue pages updated (component replacements)
|
||||
- Vuetify plugin config rewritten
|
||||
- `vite.config.ts` updated
|
||||
- Navigation configs updated
|
||||
- Multiple PHP controllers/models (bug fixes)
|
||||
- `bootstrap/app.php` (middleware changes)
|
||||
|
||||
---
|
||||
|
||||
## Test Results
|
||||
|
||||
Tests were not re-run as part of this documentation session. Previous count: 347 tests, 1866 assertions.
|
||||
|
Before Width: | Height: | Size: 496 KiB |
|
Before Width: | Height: | Size: 648 KiB |
@@ -1,132 +0,0 @@
|
||||
# VirtFusion V6 API Integration
|
||||
|
||||
## Overview
|
||||
EZSCALE uses VirtFusion V6 for VPS provisioning and management. This document outlines the correct API endpoints and parameters.
|
||||
|
||||
## API Reference
|
||||
**OpenAPI Spec**: `virtfusion-api-spec.yaml` (8,309 lines)
|
||||
**Base URL**: Configured in `.env` as `VIRTFUSION_API_URL`
|
||||
**Authentication**: Bearer token (configured as `VIRTFUSION_API_TOKEN`)
|
||||
|
||||
## Correct API Endpoints (V6)
|
||||
|
||||
### Connection Test
|
||||
```http
|
||||
GET /connect
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
**Response**: Returns VirtFusion version and connection status
|
||||
|
||||
### Create Server
|
||||
```http
|
||||
POST /servers
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer {token}
|
||||
|
||||
{
|
||||
"packageId": 1, // Required: VirtFusion package ID
|
||||
"userId": 1, // Required: VirtFusion user ID (not email!)
|
||||
"hypervisorId": 1 // Required: Hypervisor group ID
|
||||
}
|
||||
```
|
||||
**Response**: Returns server object with ID, UUID, state, IP addresses, etc.
|
||||
|
||||
### Get Server Details
|
||||
```http
|
||||
GET /servers/{serverId}
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
**Response**: Full server details including state, suspended status, traffic, etc.
|
||||
|
||||
### Suspend Server
|
||||
```http
|
||||
POST /servers/{serverId}/suspend
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
**Response**: 204 No Content on success
|
||||
|
||||
### Unsuspend Server
|
||||
```http
|
||||
POST /servers/{serverId}/unsuspend
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
**Response**: 204 No Content on success
|
||||
|
||||
### Delete Server
|
||||
```http
|
||||
DELETE /servers/{serverId}?delay=0
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
**Query Parameters**:
|
||||
- `delay`: Minutes to wait before deletion (0-43800), optional
|
||||
|
||||
**Response**: 204 No Content on success
|
||||
|
||||
## Plan Configuration
|
||||
|
||||
VPS plans in the database need these feature keys:
|
||||
|
||||
```json
|
||||
{
|
||||
"virtfusion_package_id": 1, // Required: VirtFusion package ID
|
||||
"virtfusion_user_id": 1, // Required: VirtFusion user ID for server owner
|
||||
"virtfusion_hypervisor_id": 1 // Required: Hypervisor group ID
|
||||
}
|
||||
```
|
||||
|
||||
## Key Differences from Other Versions
|
||||
|
||||
1. **No `/api/v1` prefix** - V6 endpoints start directly with resource names
|
||||
2. **camelCase parameters** - Use `packageId` not `package_id`
|
||||
3. **userId not email** - Must provide VirtFusion user ID, not email address
|
||||
4. **Suspend returns 204** - No response body, check for 204 status code
|
||||
|
||||
## Implementation Files
|
||||
|
||||
- **Service**: `app/Services/Provisioning/VirtFusionService.php`
|
||||
- **Settings Controller**: `app/Http/Controllers/Admin/SettingsController.php` (testVirtFusion method)
|
||||
- **Config**: `config/services.php` (virtfusion section)
|
||||
|
||||
## Testing
|
||||
|
||||
Test connection via Admin Settings page:
|
||||
1. Navigate to Admin → Settings → API Credentials
|
||||
2. Enter VirtFusion API URL and Token
|
||||
3. Click "Test Connection"
|
||||
4. Should return: "VirtFusion connection successful. Version: X.X.X"
|
||||
|
||||
## API Restrictions
|
||||
|
||||
According to deployment notes, the VirtFusion API token is restricted to:
|
||||
- ✅ Create server
|
||||
- ✅ Create user
|
||||
- ✅ Authenticate user
|
||||
|
||||
Ensure the token has appropriate permissions for these operations.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### 404 Errors
|
||||
- ❌ Using `/api/v1/servers` (old format)
|
||||
- ✅ Use `/servers` (V6 format)
|
||||
|
||||
### 400 Bad Request
|
||||
- Check parameter names are camelCase (`packageId` not `package_id`)
|
||||
- Ensure `userId` is an integer, not an email
|
||||
- Verify `packageId` and `hypervisorId` exist in VirtFusion
|
||||
|
||||
### 401 Unauthorized
|
||||
- Verify `VIRTFUSION_API_TOKEN` is correct
|
||||
- Check token has required permissions
|
||||
- Ensure `Authorization: Bearer` header is included
|
||||
|
||||
### Server Creation Fails
|
||||
- Verify plan features include `virtfusion_package_id`, `virtfusion_user_id`, and `virtfusion_hypervisor_id`
|
||||
- Check VirtFusion has available resources (RAM, storage, IP addresses)
|
||||
- Review `provisioning_logs` table for detailed error messages
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- VirtFusion Official Docs: https://docs.virtfusion.com/api/
|
||||
- OpenAPI Spec: `/virtfusion-api-spec.yaml`
|
||||
- Project Integration: `CLAUDE.md` → Provisioning Services section
|
||||
@@ -1,211 +0,0 @@
|
||||
# VPS Checkout Enhancement - 2026-02-10
|
||||
|
||||
## Overview
|
||||
Enhanced the VPS checkout flow with OS selection, SSH key configuration, and automatic server building. Created a premium ordering experience matching modern cloud platforms.
|
||||
|
||||
## Frontend Changes
|
||||
|
||||
### Enhanced Checkout Page (`resources/ts/Pages/Checkout/Show.vue`)
|
||||
|
||||
**New Features:**
|
||||
1. **Server Configuration Card** (VPS only)
|
||||
- Operating System selection dropdown with 9 options:
|
||||
- Ubuntu 24.04 LTS, 22.04 LTS, 20.04 LTS
|
||||
- Debian 12, 11
|
||||
- AlmaLinux 9
|
||||
- Rocky Linux 9
|
||||
- CentOS Stream 9
|
||||
- Fedora 39
|
||||
- Each OS has an icon (Ubuntu, Debian, RedHat, Fedora)
|
||||
|
||||
2. **Authentication Method Toggle**
|
||||
- **Auto-Generated Password** (default): VirtFusion generates and emails password
|
||||
- **SSH Key**: User pastes their SSH public key
|
||||
- Smooth transitions between modes
|
||||
- Helpful tooltips and documentation links
|
||||
|
||||
3. **Configuration Preview** (Sidebar)
|
||||
- Shows selected OS and auth method
|
||||
- Updates in real-time
|
||||
- Compact, professional display
|
||||
|
||||
4. **Visual Enhancements**
|
||||
- Premium card design with hover effects
|
||||
- Purple theme gradient on primary button
|
||||
- Smooth expand/collapse animations
|
||||
- Professional icons throughout
|
||||
- Enhanced spacing and typography
|
||||
- Secure checkout badge at bottom
|
||||
|
||||
## Backend Changes
|
||||
|
||||
### 1. Checkout Controller (`app/Http/Controllers/Account/CheckoutController.php`)
|
||||
```php
|
||||
// Added validation for configuration
|
||||
'configuration' => ['nullable', 'array'],
|
||||
'configuration.os_template_id' => ['nullable', 'integer'],
|
||||
'configuration.auth_method' => ['nullable', 'in:password,ssh'],
|
||||
'configuration.ssh_key' => ['nullable', 'string', 'max:4096'],
|
||||
|
||||
// Store configuration in session for provisioning
|
||||
if ($request->has('configuration')) {
|
||||
session(['subscription_config_'.$subscription->id => $request->input('configuration')]);
|
||||
}
|
||||
```
|
||||
|
||||
### 2. VirtFusion Service (`app/Services/Provisioning/VirtFusionService.php`)
|
||||
|
||||
**New Build Step:**
|
||||
After creating server and changing package, now automatically builds with:
|
||||
- Selected OS template
|
||||
- SSH key (if provided)
|
||||
- Stores provisioning info in service record
|
||||
|
||||
```php
|
||||
// Build server with OS template and SSH key
|
||||
$config = session('subscription_config_'.$subscription->id, []);
|
||||
$templateId = $config['os_template_id'] ?? 1; // Default to Ubuntu 24.04
|
||||
$sshKey = $config['auth_method'] === 'ssh' && !empty($config['ssh_key']) ? $config['ssh_key'] : null;
|
||||
|
||||
$buildPayload = ['templateId' => $templateId];
|
||||
if ($sshKey) {
|
||||
$buildPayload['sshKeys'] = [$sshKey];
|
||||
}
|
||||
|
||||
$buildResponse = $this->client()->post("/servers/{$serverId}/build", $buildPayload);
|
||||
```
|
||||
|
||||
**Complete Provisioning Flow:**
|
||||
1. Create server (package 43)
|
||||
2. Change package to match plan specs
|
||||
3. **Build server with selected OS + SSH key**
|
||||
4. Send credentials email
|
||||
|
||||
### 3. Subscription Cancellation (`app/Listeners/HandleSubscriptionCancelled.php`)
|
||||
|
||||
**Added 5-Minute Grace Period:**
|
||||
```php
|
||||
// Wait 5 minutes before terminating services (grace period)
|
||||
sleep(300);
|
||||
```
|
||||
|
||||
This prevents accidental immediate termination and gives users time to reconsider.
|
||||
|
||||
## User Experience Flow
|
||||
|
||||
### Ordering VPS
|
||||
|
||||
1. **Select Plan** → Navigate to checkout
|
||||
2. **Configure Server**:
|
||||
- Choose operating system from dropdown
|
||||
- Select authentication method (password or SSH key)
|
||||
- If SSH: paste public key with helpful instructions
|
||||
- See live preview in sidebar
|
||||
3. **Choose Payment Method**
|
||||
- Stripe (saved cards) or PayPal
|
||||
- Apply coupon if available
|
||||
4. **Complete Order**
|
||||
- Premium gradient button with security badge
|
||||
- Processing state with loading indicator
|
||||
5. **Provisioning** (background):
|
||||
- Create VirtFusion user (if needed)
|
||||
- Create server
|
||||
- Change to correct package specs
|
||||
- **Build with selected OS and SSH key**
|
||||
- Email credentials to customer
|
||||
|
||||
### Canceling Subscription
|
||||
|
||||
1. Cancel subscription via dashboard
|
||||
2. **5-minute grace period** before termination
|
||||
3. Service terminated on VirtFusion
|
||||
4. Service status updated to "terminated"
|
||||
5. Cancellation notification sent
|
||||
|
||||
## Configuration Storage
|
||||
|
||||
- **Frontend → Backend**: Passed in `configuration` object
|
||||
- **Backend → Session**: Stored temporarily during checkout
|
||||
- **Session → Provisioning**: Read during VirtFusion provisioning
|
||||
- **Service Record**: Final config saved to `provisioning_info` JSON field
|
||||
|
||||
## VirtFusion API Calls
|
||||
|
||||
### Complete Provisioning Sequence:
|
||||
```
|
||||
POST /sanctum/csrf-cookie # Get CSRF token
|
||||
GET /users?email={email} # Check if user exists
|
||||
POST /users # Create user (if needed)
|
||||
POST /servers # Create server (package 43)
|
||||
POST /servers/{id}/changePackage # Change to plan specs
|
||||
POST /servers/{id}/build # Build with OS + SSH key ← NEW
|
||||
```
|
||||
|
||||
### Build Payload:
|
||||
```json
|
||||
{
|
||||
"templateId": 1,
|
||||
"sshKeys": ["ssh-rsa AAAAB3NzaC1yc2E..."] // optional
|
||||
}
|
||||
```
|
||||
|
||||
## Database Schema
|
||||
|
||||
### Services Table
|
||||
- `provisioning_info` (JSON): Stores OS template ID and auth method
|
||||
```json
|
||||
{
|
||||
"os_template_id": 1,
|
||||
"auth_method": "ssh"
|
||||
}
|
||||
```
|
||||
|
||||
### Provisioning Logs
|
||||
New entries for `build` action:
|
||||
- `provision` → `change_package` → **`build`** → complete
|
||||
|
||||
## Testing
|
||||
|
||||
1. ✅ Frontend builds without errors
|
||||
2. ✅ Horizon restarted to reload code
|
||||
3. ⏳ Create VPS subscription with:
|
||||
- Ubuntu 24.04 + Password
|
||||
- Debian 12 + SSH Key
|
||||
4. ⏳ Verify VirtFusion server is actually built and installed
|
||||
5. ⏳ Cancel subscription and verify 5-minute delay
|
||||
|
||||
## Default Values
|
||||
|
||||
- **Default OS**: Ubuntu 24.04 LTS (template ID 1)
|
||||
- **Default Auth**: Auto-generated password
|
||||
- **Grace Period**: 5 minutes (300 seconds)
|
||||
|
||||
## Visual Design
|
||||
|
||||
**Aesthetic**: Refined, professional cloud platform
|
||||
- Clean card layout with subtle shadows
|
||||
- Purple accent color (#7367F0)
|
||||
- Smooth transitions and hover effects
|
||||
- Professional icons (Material Design Icons)
|
||||
- Monospace font for SSH key input
|
||||
- Security badges and trust indicators
|
||||
- Responsive layout (mobile-friendly)
|
||||
|
||||
**Key Design Elements:**
|
||||
- Server config card has purple top border
|
||||
- OS dropdown with icons for each option
|
||||
- Toggle button for auth method selection
|
||||
- Expandable SSH key textarea
|
||||
- Live configuration preview in sidebar
|
||||
- Gradient on checkout button
|
||||
- Secure checkout badge
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
1. **Fetch Templates from VirtFusion API** (currently hardcoded)
|
||||
2. **Show available templates per hypervisor**
|
||||
3. **SSH key validation** (format checking)
|
||||
4. **Multiple SSH keys** support
|
||||
5. **Save SSH keys** to user profile for reuse
|
||||
6. **OS logos** instead of generic icons
|
||||
7. **Template descriptions** with tooltips
|
||||
@@ -1,255 +0,0 @@
|
||||
# EZSCALE VPS PLAN REBUILD - UPDATED WITH REAL INFRASTRUCTURE
|
||||
|
||||
**Based on Actual Discovery Data from 3 Production Nodes**
|
||||
|
||||
*Generated: February 9, 2026*
|
||||
|
||||
---
|
||||
|
||||
## CRITICAL UPDATE: YOUR INFRASTRUCTURE IS BETTER THAN ASSUMED
|
||||
|
||||
### What We Thought You Had:
|
||||
- 6 servers with E5-2670 v2 CPUs
|
||||
- ~150-200GB RAM per server
|
||||
- SATA SSD storage only
|
||||
- 25 VPS per server capacity
|
||||
|
||||
### What You ACTUALLY Have:
|
||||
- **3 powerful servers with E5-2680 v2/v4 CPUs (faster)**
|
||||
- **1,320GB total RAM** (503GB + 377GB + 440GB)
|
||||
- **Mixed storage: 931GB NVMe + 13TB SATA SSD**
|
||||
- **Only 60 VMs running** (massive capacity available)
|
||||
|
||||
**This changes EVERYTHING. You can be much more competitive.**
|
||||
|
||||
---
|
||||
|
||||
## YOUR REAL COMPETITIVE ADVANTAGES
|
||||
|
||||
### 1. RAM DENSITY - You're RAM-RICH
|
||||
- Node 1: 503GB RAM (only using 272GB = 54% free)
|
||||
- Node 2: 377GB RAM (only using 225GB = 40% free)
|
||||
- Node 3: 440GB RAM (only using 112GB = 75% free)
|
||||
|
||||
**You can offer 2-4x more RAM than budget competitors at the same price.**
|
||||
|
||||
### 2. NVMe Storage Available
|
||||
- Node 1 has 931GB NVMe RAID1 (currently using only 6.6GB!)
|
||||
- **You can offer REAL NVMe VPS** (not just SATA like I assumed)
|
||||
|
||||
### 3. Massive Storage Capacity
|
||||
- Node 2: 11.2TB SATA SSD RAID10 (64% used, 4.1TB free)
|
||||
- Node 1: 7.3TB HDD RAID10 (1% used, 7.3TB free!)
|
||||
|
||||
**You can offer 500GB-1TB storage plans easily.**
|
||||
|
||||
### 4. Low Density = Better Performance
|
||||
- Currently: ~20 VMs per server (not oversold)
|
||||
- Competitors run 50-100 VMs per server
|
||||
- **Your VMs will perform better with less noisy neighbors**
|
||||
|
||||
---
|
||||
|
||||
## NEW VPS PLAN LINEUP (Updated for Real Hardware)
|
||||
|
||||
### Strategy Shift: **RAM + NVMe as Primary Differentiators**
|
||||
|
||||
Since you have abundant RAM and NVMe, position yourself as:
|
||||
> **"Premium Specs at Budget Prices - We're not oversold like Hetzner"**
|
||||
|
||||
| Plan | vCPU | RAM | Storage | Type | BW | Price/Mo | Target Margin | Note |
|
||||
|------|------|-----|---------|------|----|---------| --------------|------|
|
||||
| **Nano** | 1 | 1GB | 15GB | NVMe | 2TB | **$3.50** | 25% | Entry (compete with Vultr) |
|
||||
| **Micro** | 1 | 2GB | 30GB | NVMe | 3TB | **$5.95** | 35% | ⭐ Budget hero |
|
||||
| **Mini** | 2 | 4GB | 50GB | NVMe | 4TB | **$8.95** | 40% | ⭐⭐ MAIN HERO (RAM advantage) |
|
||||
| **Standard** | 2 | 8GB | 80GB | NVMe | 6TB | **$14.95** | 45% | RAM beast (8GB @ $15!) |
|
||||
| **Plus** | 4 | 12GB | 120GB | NVMe | 8TB | **$22.95** | 48% | High-RAM power user |
|
||||
| **Pro** | 4 | 16GB | 160GB | NVMe | 10TB | **$29.95** | 50% | Ultimate RAM |
|
||||
| **Storage-500** | 2 | 4GB | 500GB | SSD | 8TB | **$24.95** | 45% | Storage-focused |
|
||||
| **Storage-1TB** | 4 | 8GB | 1TB | SSD | 12TB | **$44.95** | 50% | Mass storage |
|
||||
|
||||
### Why This Lineup Wins
|
||||
|
||||
**vs. Hetzner CX22 (€3.79 for 2vCPU/4GB/40GB SSD):**
|
||||
- Our **Micro** ($5.95): 1vCPU/**2GB**/30GB **NVMe** - same RAM density, NVMe storage, US-based
|
||||
- Our **Mini** ($8.95): 2vCPU/**4GB**/50GB **NVMe** - match their specs + NVMe + US-based for just $5 more
|
||||
- Our **Standard** ($14.95): 2vCPU/**8GB**/80GB **NVMe** - **DOUBLE their RAM** for $11 more
|
||||
|
||||
**vs. Contabo ($4.95 for 4 cores/8GB/50GB NVMe):**
|
||||
- We can't beat them on core count, BUT:
|
||||
- Our **Mini** ($8.95): 2vCPU/4GB/50GB NVMe - same storage, half RAM, but US-based + support
|
||||
- Our **Standard** ($14.95): 2vCPU/8GB/80GB NVMe - match RAM, more storage, US-based + support
|
||||
|
||||
**vs. DigitalOcean ($12 for 1vCPU/2GB/50GB):**
|
||||
- Our **Mini** ($8.95): 2vCPU/**4GB**/50GB NVMe - **2x CPU, 2x RAM** for $3 less
|
||||
- Our **Standard** ($14.95): 2vCPU/**8GB**/80GB NVMe - **4x RAM** for just $3 more
|
||||
|
||||
---
|
||||
|
||||
## REVISED POSITIONING: "RAM + NVMe BEAST"
|
||||
|
||||
### Marketing Angle
|
||||
> **"Why settle for 2GB when you can have 4GB? Or 8GB for $15? We're not oversold."**
|
||||
|
||||
### Hero Plans
|
||||
|
||||
**Primary Hero: MINI ($8.95/mo)**
|
||||
- 2 vCPU, **4GB RAM**, 50GB **NVMe**, 4TB bandwidth
|
||||
- **Beats Hetzner CX22 specs** (same CPU/RAM, +10GB storage, NVMe vs SSD)
|
||||
- **Beats DigitalOcean $12 plan** (2x CPU, 2x RAM, same storage, $3 less)
|
||||
- US-based, <2hr support, VirtFusion
|
||||
|
||||
**Secondary Hero: STANDARD ($14.95/mo)**
|
||||
- 2 vCPU, **8GB RAM**, 80GB **NVMe**, 6TB bandwidth
|
||||
- **8GB for $15** - this is INSANE value (Hetzner charges €6.80 for 8GB)
|
||||
- Target: Developers who need RAM (databases, caching, Docker)
|
||||
|
||||
**Entry Hero: MICRO ($5.95/mo)**
|
||||
- 1 vCPU, **2GB RAM**, 30GB **NVMe**, 3TB bandwidth
|
||||
- Beats Vultr $5 plan (1vCPU/1GB) - we give **2x RAM**
|
||||
- Competes with Hetzner CX11 (€4.15 for 2GB) - we're $2 more but NVMe + US
|
||||
|
||||
---
|
||||
|
||||
## CAPACITY PLANNING (Real Numbers)
|
||||
|
||||
### Current State
|
||||
- **60 VMs running** across 3 nodes
|
||||
- **609GB RAM allocated** out of 1,320GB (only 46% utilization!)
|
||||
- **Tons of room to grow**
|
||||
|
||||
### Realistic Capacity Per Node
|
||||
|
||||
**Node 1 (503GB RAM, 931GB NVMe):**
|
||||
- Can host: **40-50 VMs** on NVMe storage
|
||||
- Current: 28 VMs (28% of capacity)
|
||||
- **Room for 12-22 more NVMe VMs**
|
||||
|
||||
**Node 2 (377GB RAM, 11.2TB SSD):**
|
||||
- Can host: **30-40 VMs** (RAM-limited)
|
||||
- Current: 22 VMs (55% capacity)
|
||||
- **Room for 8-18 more VMs**
|
||||
|
||||
**Node 3 (440GB RAM, 1.8TB SSD):**
|
||||
- Can host: **35-45 VMs** (storage-limited)
|
||||
- Current: 10 VMs (22% capacity!)
|
||||
- **Room for 25-35 more VMs**
|
||||
|
||||
**Total Capacity:** 105-135 VMs across 3 nodes (you're at 60 now)
|
||||
**Growth Headroom:** 45-75 more VPS before needing new hardware
|
||||
|
||||
### If LowEndBox Launch Brings 200 Signups
|
||||
- You'd hit ~260 total VMs
|
||||
- You'd need to add 1-2 more servers (~$6-12k)
|
||||
- This is MUCH better than my original projection (which assumed 6 servers already)
|
||||
|
||||
---
|
||||
|
||||
## COST ANALYSIS (Real Hardware)
|
||||
|
||||
### Per-Server Operating Cost
|
||||
|
||||
**Node 1 (atl-01):**
|
||||
- Power: ~180W avg × 24h × 30d = 129.6 kWh/mo × $0.12 = $15.55/mo
|
||||
- Cooling: $15.55 × 30% = $4.67/mo
|
||||
- Datacenter: $50/mo (rack space)
|
||||
- Network: $20/mo (1Gbps port)
|
||||
- **Total: $90.22/month**
|
||||
|
||||
**Node 2 (atl-02):**
|
||||
- Power: ~200W avg (more drives) × 24h × 30d = 144 kWh/mo × $0.12 = $17.28/mo
|
||||
- Cooling: $17.28 × 30% = $5.18/mo
|
||||
- Datacenter: $50/mo
|
||||
- Network: $20/mo (1Gbps port)
|
||||
- **Total: $92.46/month**
|
||||
|
||||
**Node 3 (atl-03):**
|
||||
- Power: ~150W avg × 24h × 30d = 108 kWh/mo × $0.12 = $12.96/mo
|
||||
- Cooling: $12.96 × 30% = $3.89/mo
|
||||
- Datacenter: $50/mo
|
||||
- Network: $20/mo (1Gbps port)
|
||||
- **Total: $86.85/month**
|
||||
|
||||
**Total Operating Cost: $269.53/month** for all 3 nodes
|
||||
|
||||
### Per-VPS Economics (60 VMs currently)
|
||||
|
||||
**Current State:**
|
||||
- Total cost: $269.53/month
|
||||
- 60 VMs running
|
||||
- **Cost per VPS: $4.49/month** (infrastructure only)
|
||||
|
||||
**At Full Capacity (120 VMs):**
|
||||
- Total cost: $269.53/month (same hardware)
|
||||
- 120 VMs running
|
||||
- **Cost per VPS: $2.25/month** (infrastructure only)
|
||||
|
||||
### Margin Analysis by Plan (at 120 VPS density)
|
||||
|
||||
| Plan | Price | Infra Cost | BW Cost | Support | Total Cost | Margin | Margin % |
|
||||
|------|-------|------------|---------|---------|------------|--------|----------|
|
||||
| Nano | $3.50 | $2.25 | $0.50 | $0.50 | $3.25 | $0.25 | 7% (loss leader) |
|
||||
| Micro | $5.95 | $2.25 | $0.75 | $0.75 | $3.75 | $2.20 | 37% |
|
||||
| **Mini** | **$8.95** | **$2.25** | **$1.00** | **$1.00** | **$4.25** | **$4.70** | **53%** |
|
||||
| **Standard** | **$14.95** | **$2.25** | **$1.50** | **$1.25** | **$5.00** | **$9.95** | **67%** |
|
||||
| Plus | $22.95 | $2.25 | $2.00 | $1.50 | $5.75 | $17.20 | 75% |
|
||||
| Pro | $29.95 | $2.25 | $2.50 | $1.75 | $6.50 | $23.45 | 78% |
|
||||
|
||||
**Key Insight:** Your margins are MUCH HIGHER than I originally calculated because:
|
||||
1. You have bigger servers (fewer servers needed = lower cost per VPS)
|
||||
2. You have tons of RAM (can run more VPS per server)
|
||||
3. Hardware is paid off (no depreciation cost)
|
||||
|
||||
---
|
||||
|
||||
## GRANDFATHERING STRATEGY (Same as Before)
|
||||
|
||||
The grandfathering strategy from the original plan still applies, but you have MORE flexibility now because your margins are better.
|
||||
|
||||
**You can afford to be generous:**
|
||||
- Give existing customers free RAM upgrades (you have 711GB free RAM!)
|
||||
- Grandfather ALL old plans at old pricing
|
||||
- Offer free NVMe migrations (move customers from HDD to NVMe)
|
||||
|
||||
---
|
||||
|
||||
## LAUNCH STRATEGY (Updated)
|
||||
|
||||
### Phase 1: NVMe Migration for Existing Customers (Week 1)
|
||||
|
||||
**Offer:** Free migration to NVMe for all existing customers on Node 1
|
||||
- "We just added 931GB of NVMe storage - want faster disks for free?"
|
||||
- This will fill up Node 1's NVMe quickly and show goodwill
|
||||
|
||||
### Phase 2: Soft Launch with RAM Focus (Week 2)
|
||||
|
||||
**Hero Plan Promo:**
|
||||
- Mini: $6.95 for first 3 months (vs $8.95 regular) - "4GB for $7"
|
||||
- Standard: $11.95 for first 3 months (vs $14.95 regular) - "8GB for $12"
|
||||
|
||||
**Marketing Message:**
|
||||
> "Tired of 1GB VPS? Get 4GB for $7. Or 8GB for $12. NVMe included."
|
||||
|
||||
### Phase 3: LowEndBox Launch (Week 3)
|
||||
|
||||
**Post Title:**
|
||||
> [EZSCALE] NVMe VPS with DOUBLE the RAM - Starting $5.95/mo | US-Based with Real Support
|
||||
|
||||
**Promo Code: `LEB2026RAM`**
|
||||
- Micro: $4.95 for first 3 months (2GB NVMe for $5)
|
||||
- Mini: $6.95 for first 3 months (4GB NVMe for $7)
|
||||
- Standard: $11.95 for first 3 months (8GB NVMe for $12)
|
||||
|
||||
**Positioning:**
|
||||
- Lead with RAM (you have tons of it)
|
||||
- Highlight NVMe (real competitive advantage)
|
||||
- Show Hetzner/DO comparison table (you win on RAM)
|
||||
|
||||
---
|
||||
|
||||
## UPDATED COMPETITIVE COMPARISON
|
||||
|
||||
### Head-to-Head: EZSCALE vs Market Leaders
|
||||
|
||||
| Provider | Price | vCPU | RAM | Storage | BW | Notes |
|
||||
|----------|-------|------|-----|---------|----|-EOFPLAN
|
||||
@@ -1,278 +0,0 @@
|
||||
# EZSCALE VPS PLAN UPDATE - Real Infrastructure Analysis
|
||||
|
||||
**Critical Update Based on Discovery Data (Feb 9, 2026)**
|
||||
|
||||
---
|
||||
|
||||
## YOUR ACTUAL INFRASTRUCTURE IS MUCH BETTER
|
||||
|
||||
### What the Original Plan Assumed:
|
||||
- 6 budget servers with E5-2670 v2 CPUs
|
||||
- ~150GB RAM per server
|
||||
- SATA SSD storage only
|
||||
- Conservative capacity
|
||||
|
||||
### What You ACTUALLY Have:
|
||||
✅ **3 powerful nodes** with E5-2680 v2/v4 CPUs (28-40 cores each)
|
||||
✅ **1,320GB total RAM** (503GB + 377GB + 440GB) - **You're RAM-RICH!**
|
||||
✅ **931GB NVMe** + **13TB SATA SSD** storage
|
||||
✅ **Only 60 VMs running** (massive growth capacity)
|
||||
✅ **Low density** (20 VMs/server vs competitors' 50-100)
|
||||
|
||||
---
|
||||
|
||||
## MAJOR STRATEGY CHANGES
|
||||
|
||||
### 1. Position on RAM + NVMe (Not Just Support)
|
||||
|
||||
**OLD Strategy:** "We can't beat Hetzner on specs, compete on support"
|
||||
**NEW Strategy:** "We CAN beat them - we have NVMe + tons of RAM + support"
|
||||
|
||||
### 2. NEW Competitive Advantages
|
||||
|
||||
**RAM Abundance:**
|
||||
- 711GB RAM currently unused (54% free!)
|
||||
- Can offer 2-4x more RAM than competitors at same price
|
||||
- **8GB for $15** beats Hetzner's €6.80 pricing
|
||||
|
||||
**NVMe Storage:**
|
||||
- Node 1: 931GB NVMe (only 6.6GB used - 99% free!)
|
||||
- Can offer real NVMe VPS (not just marketing)
|
||||
- Competitors charge premium for NVMe, you have it built-in
|
||||
|
||||
**Low Density = Performance:**
|
||||
- 60 VMs on 1,320GB RAM = very comfortable
|
||||
- Competitors oversell 50-100 VMs per server
|
||||
- Your customers get better performance (less noisy neighbors)
|
||||
|
||||
---
|
||||
|
||||
## REVISED VPS LINEUP
|
||||
|
||||
### New 8-Tier Plan (RAM-Focused)
|
||||
|
||||
| Plan | vCPU | RAM | Storage | Type | BW | Price/Mo | vs Competitors |
|
||||
|------|------|-----|---------|------|----|---------| ---------------|
|
||||
| **Nano** | 1 | 1GB | 15GB | NVMe | 2TB | **$3.50** | Entry price point |
|
||||
| **Micro** | 1 | **2GB** | 30GB | NVMe | 3TB | **$5.95** | 2x RAM of Vultr $5 |
|
||||
| **Mini** | 2 | **4GB** | 50GB | NVMe | 4TB | **$8.95** | ⭐ Hero (matches Hetzner CX22 + NVMe) |
|
||||
| **Standard** | 2 | **8GB** | 80GB | NVMe | 6TB | **$14.95** | ⭐⭐ Main Hero (8GB for $15!) |
|
||||
| **Plus** | 4 | **12GB** | 120GB | NVMe | 8TB | **$22.95** | High-RAM option |
|
||||
| **Pro** | 4 | **16GB** | 160GB | NVMe | 10TB | **$29.95** | Ultimate RAM |
|
||||
| **Storage-500** | 2 | 4GB | **500GB** | SSD | 8TB | **$24.95** | Storage-focused |
|
||||
| **Storage-1TB** | 4 | 8GB | **1TB** | SSD | 12TB | **$44.95** | Mass storage |
|
||||
|
||||
### Hero Plan Analysis
|
||||
|
||||
**MINI ($8.95/mo) - Primary Hero:**
|
||||
- 2 vCPU, 4GB RAM, 50GB NVMe, 4TB BW
|
||||
- **vs Hetzner CX22** (€3.79/$4): Same specs + NVMe + US location for +$5
|
||||
- **vs DigitalOcean** ($12): 2x CPU, 2x RAM for -$3
|
||||
- **Target:** 40% of new signups
|
||||
|
||||
**STANDARD ($14.95/mo) - Secondary Hero:**
|
||||
- 2 vCPU, **8GB RAM**, 80GB NVMe, 6TB BW
|
||||
- **8GB for $15** - Hetzner charges €6.80 (~$7.20) for just 4GB
|
||||
- **vs DigitalOcean** ($24): Same specs for -$9
|
||||
- **Target:** 25% of new signups
|
||||
|
||||
---
|
||||
|
||||
## CAPACITY ANALYSIS
|
||||
|
||||
### Current Utilization
|
||||
|
||||
| Node | RAM | VMs | RAM Allocated | RAM Free | % Used | Room to Grow |
|
||||
|------|-----|-----|---------------|----------|--------|--------------|
|
||||
| Node 1 | 503GB | 28 | 272GB | 231GB | 54% | +20-25 VMs |
|
||||
| Node 2 | 377GB | 22 | 225GB | 152GB | 60% | +12-15 VMs |
|
||||
| Node 3 | 440GB | 10 | 112GB | 328GB | 25% | +30-35 VMs |
|
||||
| **Total** | **1,320GB** | **60** | **609GB** | **711GB** | **46%** | **+62-75 VMs** |
|
||||
|
||||
**Current Capacity:** 60 VMs running
|
||||
**Realistic Max:** 120-135 VMs (before needing new hardware)
|
||||
**Growth Headroom:** 62-75 more VPS
|
||||
|
||||
### LowEndBox Launch Scenario
|
||||
|
||||
If 200 signups in month 1:
|
||||
- Total VMs: 260 (60 existing + 200 new)
|
||||
- You'd need: 1-2 additional servers (~$6-12k investment)
|
||||
- This is MUCH better than original projection (which assumed 6 servers already)
|
||||
|
||||
---
|
||||
|
||||
## UPDATED MARGINS (Much Better!)
|
||||
|
||||
### Cost Structure (at 120 VPS density)
|
||||
|
||||
**Per-Server Operating Cost:**
|
||||
- All 3 nodes: $269.53/month total
|
||||
- At 120 VPS: **$2.25/VPS infrastructure cost** (vs $5/VPS in original plan)
|
||||
|
||||
**Margin by Plan:**
|
||||
|
||||
| Plan | Price | Cost | Margin | Margin % |
|
||||
|------|-------|------|--------|----------|
|
||||
| Nano | $3.50 | $3.25 | $0.25 | 7% (loss leader) |
|
||||
| **Micro** | **$5.95** | **$3.75** | **$2.20** | **37%** |
|
||||
| **Mini** | **$8.95** | **$4.25** | **$4.70** | **53%** |
|
||||
| **Standard** | **$14.95** | **$5.00** | **$9.95** | **67%** |
|
||||
| Plus | $22.95 | $5.75 | $17.20 | 75% |
|
||||
| Pro | $29.95 | $6.50 | $23.45 | 78% |
|
||||
|
||||
**Key Insight:** Margins are 2-3x better than original plan because:
|
||||
1. Fewer servers needed (3 vs 6 assumed)
|
||||
2. More RAM per server (can run more VPS)
|
||||
3. Better hardware = better efficiency
|
||||
|
||||
---
|
||||
|
||||
## GRANDFATHERING UPDATES
|
||||
|
||||
With better margins, you can be MORE generous:
|
||||
|
||||
1. **Free NVMe migrations** - Move existing customers from Node 1 HDD to NVMe (you have 924GB free!)
|
||||
2. **Free RAM upgrades** - Bump 1GB customers to 2GB, 2GB to 4GB (you have 711GB unused RAM!)
|
||||
3. **All old plans grandfathered** at old pricing forever
|
||||
4. **No forced migrations** - let customers stay on legacy plans indefinitely
|
||||
|
||||
---
|
||||
|
||||
## UPDATED MARKETING MESSAGING
|
||||
|
||||
### OLD Positioning (Based on Wrong Assumptions):
|
||||
> "We can't beat Hetzner on specs, but we have better support and are US-based"
|
||||
|
||||
### NEW Positioning (Based on Real Hardware):
|
||||
> **"Premium Specs at Budget Prices - NVMe + Double RAM + US Support"**
|
||||
|
||||
### Comparison Table for Website
|
||||
|
||||
| Feature | EZSCALE Mini | Hetzner CX22 | DigitalOcean | Winner |
|
||||
|---------|--------------|--------------|--------------|--------|
|
||||
| **Price** | **$8.95/mo** | €3.79 (~$4) | $12/mo | Hetzner (price) |
|
||||
| **vCPU** | 2 | 2 | 1 | EZSCALE/Hetzner |
|
||||
| **RAM** | **4GB** | 4GB | 2GB | **EZSCALE**/Hetzner |
|
||||
| **Storage** | **50GB NVMe** | 40GB SSD | 50GB SSD | **EZSCALE** (NVMe) |
|
||||
| **Bandwidth** | 4TB | 20TB (EU) / 1TB (US) | 2TB | Hetzner (EU) |
|
||||
| **Support** | **<2hr response** | 24-48hr email | 4-12hr | **EZSCALE** |
|
||||
| **Location** | **US East** | Germany | US | **EZSCALE** (latency) |
|
||||
| **Control Panel** | **VirtFusion** | Basic custom | Good custom | **EZSCALE** |
|
||||
|
||||
**Overall:** EZSCALE wins on 4/8 factors (storage type, support, location, control panel)
|
||||
|
||||
---
|
||||
|
||||
## LOWEND BOX POST (Updated)
|
||||
|
||||
```markdown
|
||||
[EZSCALE] NVMe VPS with Double the RAM | Starting $3.50/mo | US-Based | Real Support
|
||||
─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Tired of waiting 48 hours for support? Want NVMe without paying a premium?
|
||||
EZSCALE delivers budget VPS with generous RAM, real NVMe, and <2hr support.
|
||||
|
||||
🎯 LAUNCH SPECIAL (Code: LEB2026RAM)
|
||||
├─ Nano: $3.50/mo (1vCPU, 1GB RAM, 15GB NVMe, 2TB BW)
|
||||
├─ Micro: $4.95/mo first 3mo (1vCPU, 2GB RAM, 30GB NVMe, 3TB BW) - reg $5.95
|
||||
├─ Mini: $6.95/mo first 3mo (2vCPU, 4GB RAM, 50GB NVMe, 4TB BW) - reg $8.95 ⭐
|
||||
└─ Standard: $11.95/mo first 3mo (2vCPU, 8GB RAM, 80GB NVMe, 6TB BW) - reg $14.95
|
||||
|
||||
After promo ends: $3.50, $5.95, $8.95, $14.95 respectively
|
||||
|
||||
✅ Real NVMe storage (not marketing, actual PCIe NVMe drives)
|
||||
✅ <2 hour average ticket response (we track this publicly)
|
||||
✅ Low-density servers (20 VPS/server vs competitors' 50-100)
|
||||
✅ US-based infrastructure (Virginia datacenter, <15ms from NYC)
|
||||
✅ VirtFusion control panel (modern UI, one-click reinstalls, API)
|
||||
✅ 30-day money-back guarantee
|
||||
|
||||
📊 FULL LINEUP:
|
||||
┌──────────┬──────┬─────┬──────────┬──────────┬──────────┐
|
||||
│ Plan │ vCPU │ RAM │ Storage │ Bandwidth│ Price/Mo │
|
||||
├──────────┼──────┼─────┼──────────┼──────────┼──────────┤
|
||||
│ Nano │ 1 │ 1GB │ 15GB NVMe│ 2TB │ $3.50 │
|
||||
│ Micro │ 1 │ 2GB │ 30GB NVMe│ 3TB │ $5.95 │
|
||||
│ Mini │ 2 │ 4GB │ 50GB NVMe│ 4TB │ $8.95 │
|
||||
│ Standard │ 2 │ 8GB │ 80GB NVMe│ 6TB │ $14.95 │
|
||||
│ Plus │ 4 │12GB │120GB NVMe│ 8TB │ $22.95 │
|
||||
│ Pro │ 4 │16GB │160GB NVMe│ 10TB │ $29.95 │
|
||||
└──────────┴──────┴─────┴──────────┴──────────┴──────────┘
|
||||
|
||||
📍 Location: Ashburn, Virginia (US East)
|
||||
🔧 Network: 1Gbps ports, Premium Tier 1 bandwidth
|
||||
💳 Payment: PayPal, Stripe, Bitcoin
|
||||
📊 Uptime: 99.9% SLA with public status page
|
||||
|
||||
🆚 WHY EZSCALE?
|
||||
• Hetzner CX22 is €3.79 for 4GB BUT: 120ms latency from US, 24-48hr support, only 40GB storage
|
||||
• DigitalOcean is $12 for 2GB BUT: 50% more expensive, half the RAM, same storage
|
||||
• We're US-based with NVMe + generous RAM + support that actually responds
|
||||
|
||||
🎁 FREE: Migration assistance from any competitor (we handle everything)
|
||||
|
||||
[ORDER NOW] → https://ezscale.cloud/vps?promo=LEB2026RAM
|
||||
|
||||
──────────────────────────────────────────────────────────
|
||||
ABOUT US:
|
||||
We run 3 high-spec servers (1.3TB total RAM!) with low VPS density, which means
|
||||
your VPS gets real resources. When you open a ticket at 2am, we respond in <2 hours.
|
||||
|
||||
AMA below - I'll answer questions about our infrastructure, NVMe setup, network, etc.
|
||||
|
||||
Offer valid through [2 weeks from post]. Limited to first 150 signups.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ACTION ITEMS (Updated Priority)
|
||||
|
||||
### Week 1: Leverage Your NVMe
|
||||
- [ ] **Offer free NVMe migrations** to existing customers on Node 1
|
||||
- Shows goodwill, fills up NVMe capacity
|
||||
- "We just added 931GB NVMe - want faster disks for free?"
|
||||
|
||||
- [ ] **Update VirtFusion** with new 8-tier plan lineup
|
||||
- Nano through Pro on Node 1/3 (NVMe)
|
||||
- Storage-500/1TB on Node 2 (11.2TB SATA SSD)
|
||||
|
||||
### Week 2: Update Marketing
|
||||
- [ ] **Rewrite pricing page** - lead with RAM + NVMe
|
||||
- "4GB for $9, 8GB for $15 - with NVMe included"
|
||||
- Comparison table vs Hetzner/DO/Vultr
|
||||
|
||||
- [ ] **Create comparison tool** - interactive RAM/storage calculator
|
||||
- "How much RAM do you need? We probably have more for less"
|
||||
|
||||
### Week 3: LowEndBox Launch
|
||||
- [ ] Post with code `LEB2026RAM`
|
||||
- [ ] Focus messaging on RAM + NVMe (not just support)
|
||||
- [ ] Target 100-150 signups (you have capacity!)
|
||||
|
||||
---
|
||||
|
||||
## CONCLUSION
|
||||
|
||||
**Your infrastructure is 2-3x better than I assumed.** This completely changes your competitive positioning:
|
||||
|
||||
1. **You CAN compete on specs** (not just support)
|
||||
2. **You have NVMe** (real competitive advantage)
|
||||
3. **You have tons of RAM** (offer 2-4x more than competitors)
|
||||
4. **Your margins are excellent** (67% on Standard plan!)
|
||||
5. **You have room to grow** (60-75 more VPS before new hardware)
|
||||
|
||||
**Bottom Line:** You're not a "budget specs + good support" provider.
|
||||
You're a **"premium specs at budget prices"** provider.
|
||||
|
||||
Position accordingly.
|
||||
|
||||
---
|
||||
|
||||
## Files to Reference
|
||||
|
||||
1. Original full strategy: `VPS_PLAN_REBUILD_2026.md`
|
||||
2. This update: `VPS_PLAN_UPDATE_REAL_INFRASTRUCTURE.md`
|
||||
3. Infrastructure discovery: `ezscale-discovery-20260208-163247/`
|
||||
|
||||
**Next:** Update Laravel seeders with new 8-tier plan lineup?
|
||||
@@ -1,53 +0,0 @@
|
||||
============================================
|
||||
EzScale Infrastructure Discovery Summary
|
||||
Generated: Sun Feb 8 16:33:12 UTC 2026
|
||||
============================================
|
||||
|
||||
============================================
|
||||
NODE: vf-node-01
|
||||
============================================
|
||||
|
||||
OS:
|
||||
Kernel: 5.14.0-611.11.1.el9_7.x86_64
|
||||
CPU: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|
||||
Sockets: 2
|
||||
Cores: 14
|
||||
Threads: 56
|
||||
RAM: 503Gi total, 212Gi used
|
||||
VMs: 28 running
|
||||
Alloc: 108 vCPUs, 278528 MB (272 GB) RAM
|
||||
CPU overcommit: 1.92x
|
||||
RAM utilization: 50.0%
|
||||
|
||||
============================================
|
||||
NODE: vf-node-02
|
||||
============================================
|
||||
|
||||
OS:
|
||||
Kernel: 5.14.0-611.11.1.el9_7.x86_64
|
||||
CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
|
||||
Sockets: 2
|
||||
Cores: 10
|
||||
Threads: 40
|
||||
RAM: 377Gi total, 189Gi used
|
||||
VMs: 22 running
|
||||
Alloc: 93 vCPUs, 230400 MB (225 GB) RAM
|
||||
CPU overcommit: N/Ax
|
||||
RAM utilization: N/A%
|
||||
|
||||
============================================
|
||||
NODE: vf-node-03
|
||||
============================================
|
||||
|
||||
OS:
|
||||
Kernel: 5.14.0-570.49.1.el9_6.x86_64
|
||||
CPU: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|
||||
Sockets: 2
|
||||
Cores: 14
|
||||
Threads: 56
|
||||
RAM: 440Gi total, 180Gi used
|
||||
VMs: 10 running
|
||||
Alloc: 46 vCPUs, 114688 MB (112 GB) RAM
|
||||
CPU overcommit: .82x
|
||||
RAM utilization: 20.0%
|
||||
|
||||
@@ -1,525 +0,0 @@
|
||||
===== SYSTEM INFO =====
|
||||
--- Hostname ---
|
||||
atl-01.node.vps.ezscale.tech
|
||||
|
||||
--- OS ---
|
||||
NAME="AlmaLinux"
|
||||
VERSION="9.7 (Moss Jungle Cat)"
|
||||
VERSION_ID="9.7"
|
||||
PRETTY_NAME="AlmaLinux 9.7 (Moss Jungle Cat)"
|
||||
|
||||
--- Kernel ---
|
||||
5.14.0-611.11.1.el9_7.x86_64
|
||||
|
||||
--- Uptime ---
|
||||
11:32:47 up 59 days, 13:24, 0 users, load average: 5.82, 6.17, 6.34
|
||||
|
||||
===== CPU =====
|
||||
--- Model ---
|
||||
Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|
||||
|
||||
--- Physical CPUs ---
|
||||
2
|
||||
|
||||
--- Cores per CPU ---
|
||||
14
|
||||
|
||||
--- Total Threads ---
|
||||
56
|
||||
|
||||
--- CPU Flags (virt) ---
|
||||
ept vmx
|
||||
|
||||
--- lscpu summary ---
|
||||
CPU(s): 56
|
||||
On-line CPU(s) list: 0-55
|
||||
Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|
||||
BIOS Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|
||||
Thread(s) per core: 2
|
||||
Core(s) per socket: 14
|
||||
Socket(s): 2
|
||||
CPU(s) scaling MHz: 97%
|
||||
CPU max MHz: 2900.0000
|
||||
CPU min MHz: 1200.0000
|
||||
L1d cache: 896 KiB (28 instances)
|
||||
L1i cache: 896 KiB (28 instances)
|
||||
L2 cache: 7 MiB (28 instances)
|
||||
L3 cache: 70 MiB (2 instances)
|
||||
NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54
|
||||
NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55
|
||||
Vulnerability L1tf: Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable
|
||||
|
||||
===== MEMORY =====
|
||||
--- Total / Used / Free ---
|
||||
total used free shared buff/cache available
|
||||
Mem: 503Gi 212Gi 2.9Gi 627Mi 291Gi 290Gi
|
||||
Swap: 4.0Gi 4.0Gi 0.0Ki
|
||||
|
||||
--- DIMM Details ---
|
||||
Error Correction Type: Multi-bit ECC
|
||||
Size: 64 GB
|
||||
Locator: A1
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR4
|
||||
Type Detail: Synchronous Registered (Buffered) LRDIMM
|
||||
Speed: 2400 MT/s
|
||||
Configured Memory Speed: 2400 MT/s
|
||||
Size: 64 GB
|
||||
Locator: A2
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR4
|
||||
Type Detail: Synchronous Registered (Buffered) LRDIMM
|
||||
Speed: 2400 MT/s
|
||||
Configured Memory Speed: 2400 MT/s
|
||||
Size: 64 GB
|
||||
Locator: A3
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR4
|
||||
Type Detail: Synchronous Registered (Buffered) LRDIMM
|
||||
Speed: 2400 MT/s
|
||||
Configured Memory Speed: 2400 MT/s
|
||||
Locator: A4
|
||||
Bank Locator: Not Specified
|
||||
Type: Unknown
|
||||
Type Detail: None
|
||||
Size: 64 GB
|
||||
Locator: A5
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR4
|
||||
Type Detail: Synchronous Registered (Buffered) LRDIMM
|
||||
Speed: 2400 MT/s
|
||||
Configured Memory Speed: 2400 MT/s
|
||||
Locator: A6
|
||||
Bank Locator: Not Specified
|
||||
Type: Unknown
|
||||
Type Detail: None
|
||||
Locator: A7
|
||||
Bank Locator: Not Specified
|
||||
Type: Unknown
|
||||
|
||||
===== STORAGE - BLOCK DEVICES =====
|
||||
--- lsblk ---
|
||||
NAME SIZE TYPE FSTYPE MOUNTPOINT ROTA MODEL
|
||||
sda 223.6G disk 0 MTFDDAK240MBP 01EJ260 01EJ260IBM
|
||||
├─sda1 1G part xfs /boot 0
|
||||
└─sda2 222.6G part LVM2_member 0
|
||||
├─almalinux-root 70G lvm xfs / 0
|
||||
├─almalinux-swap 4G lvm swap [SWAP] 0
|
||||
└─almalinux-home 148.6G lvm xfs /home 0
|
||||
sdb 3.6T disk linux_raid_member 1 MG04SCA40EN
|
||||
└─md1 7.3T raid10 xfs /mnt/bulk_vms 1
|
||||
sdc 3.6T disk linux_raid_member 1 MG04SCA40EN
|
||||
└─md1 7.3T raid10 xfs /mnt/bulk_vms 1
|
||||
sdd 3.6T disk linux_raid_member 1 MG04SCA40EN
|
||||
└─md1 7.3T raid10 xfs /mnt/bulk_vms 1
|
||||
sde 3.6T disk linux_raid_member 1 MG04SCA40EN
|
||||
└─md1 7.3T raid10 xfs /mnt/bulk_vms 1
|
||||
nvme1n1 931.5G disk linux_raid_member 0 Sabrent Rocket 4.0 1TB
|
||||
└─md0 931.4G raid1 xfs /mnt/nvme_vms 0
|
||||
nvme2n1 931.5G disk linux_raid_member 0 Sabrent Rocket 4.0 1TB
|
||||
└─md0 931.4G raid1 xfs /mnt/nvme_vms 0
|
||||
nvme0n1 465.8G disk 0 Sabrent Rocket 4.0 500GB
|
||||
|
||||
--- Disk Models ---
|
||||
NAME SIZE MODEL ROTA TRAN
|
||||
sda 223.6G MTFDDAK240MBP 01EJ260 01EJ260IBM 0 sas
|
||||
sdb 3.6T MG04SCA40EN 1 sas
|
||||
sdc 3.6T MG04SCA40EN 1 sas
|
||||
sdd 3.6T MG04SCA40EN 1 sas
|
||||
sde 3.6T MG04SCA40EN 1 sas
|
||||
nvme1n1 931.5G Sabrent Rocket 4.0 1TB 0 nvme
|
||||
nvme2n1 931.5G Sabrent Rocket 4.0 1TB 0 nvme
|
||||
nvme0n1 465.8G Sabrent Rocket 4.0 500GB 0 nvme
|
||||
|
||||
===== STORAGE - FILESYSTEM =====
|
||||
--- df -h ---
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/mapper/almalinux-root 70G 5.4G 65G 8% /
|
||||
/dev/sda1 960M 463M 498M 49% /boot
|
||||
/dev/mapper/almalinux-home 149G 57G 92G 39% /home
|
||||
/dev/md0 931G 6.6G 925G 1% /mnt/nvme_vms
|
||||
/dev/md1 7.3T 52G 7.3T 1% /mnt/bulk_vms
|
||||
192.168.10.3:/mnt/data/vms 12T 7.2T 4.1T 64% /mnt/vms
|
||||
|
||||
===== STORAGE - ZFS =====
|
||||
ZFS not installed
|
||||
|
||||
===== STORAGE - LVM =====
|
||||
--- Physical Volumes ---
|
||||
PV VG Fmt Attr PSize PFree
|
||||
/dev/sda2 almalinux lvm2 a-- <222.57g 0
|
||||
|
||||
--- Volume Groups ---
|
||||
VG #PV #LV #SN Attr VSize VFree
|
||||
almalinux 1 3 0 wz--n- <222.57g 0
|
||||
|
||||
--- Logical Volumes ---
|
||||
LV VG LSize Attr
|
||||
home almalinux <148.57g -wi-ao----
|
||||
root almalinux 70.00g -wi-ao----
|
||||
swap almalinux 4.00g -wi-ao----
|
||||
|
||||
===== STORAGE - MDADM (Software RAID) =====
|
||||
Personalities : [raid1] [raid10]
|
||||
md1 : active raid10 sdd[0] sde[3] sdc[2] sdb[1]
|
||||
7813772288 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
|
||||
bitmap: 0/59 pages [0KB], 65536KB chunk
|
||||
|
||||
md0 : active raid1 nvme1n1[1] nvme2n1[0]
|
||||
976630464 blocks super 1.2 [2/2] [UU]
|
||||
bitmap: 0/8 pages [0KB], 65536KB chunk
|
||||
|
||||
unused devices: <none>
|
||||
|
||||
===== NETWORK =====
|
||||
--- Interfaces ---
|
||||
lo UNKNOWN 127.0.0.1/8 ::1/128
|
||||
eno3 DOWN
|
||||
eno4 DOWN
|
||||
eno1 UP
|
||||
eno2 UP 192.168.10.2/29
|
||||
br0 UP 66.186.37.253/25 2602:2f3:ff:105::b/64 fe80::6240:606f:8445:594f/64
|
||||
5668246001 UNKNOWN fe80::fc5a:41ff:fe05:483/64
|
||||
7952655313 UNKNOWN fe80::fcd9:1fff:fef5:7fdc/64
|
||||
9669788654 UNKNOWN fe80::fc6e:f4ff:fe67:347a/64
|
||||
1585574411 UNKNOWN fe80::fc67:96ff:feea:ce07/64
|
||||
6538424133 UNKNOWN fe80::fc95:9eff:fe0c:7ae0/64
|
||||
7575455714 UNKNOWN fe80::fcce:70ff:fed5:3823/64
|
||||
1900074498 UNKNOWN fe80::fc2f:2dff:fe1c:6f20/64
|
||||
6868627519 UNKNOWN fe80::fc2c:a0ff:fed3:f24b/64
|
||||
8290678221 UNKNOWN fe80::fcd2:6aff:fea2:c868/64
|
||||
3144884207 UNKNOWN fe80::fcd2:c1ff:fe4f:da96/64
|
||||
9864921145 UNKNOWN fe80::fc90:ceff:febd:8a83/64
|
||||
3854082875 UNKNOWN fe80::fc08:cbff:fe96:16e/64
|
||||
2847939492 UNKNOWN fe80::fc9f:1cff:fe83:6e3f/64
|
||||
2270446172 UNKNOWN fe80::fced:2cff:feab:d352/64
|
||||
5375909748 UNKNOWN fe80::fc57:c6ff:fe73:57ae/64
|
||||
9709633390 UNKNOWN fe80::fcd1:aff:fead:7805/64
|
||||
6686699813 UNKNOWN fe80::fc65:61ff:fea3:754/64
|
||||
2577660031 UNKNOWN fe80::fc8b:12ff:fe20:fc7d/64
|
||||
1873685436 UNKNOWN fe80::fc94:5cff:fe67:d27a/64
|
||||
8339041496 UNKNOWN fe80::fc75:bdff:fee4:e7b0/64
|
||||
4635498757 UNKNOWN fe80::fcd6:e1ff:fe7f:d368/64
|
||||
2739236756 UNKNOWN fe80::fcdb:1cff:fefe:6d6/64
|
||||
5274046373 UNKNOWN fe80::fc85:cbff:fe49:5b14/64
|
||||
2672200667 UNKNOWN fe80::fcfb:32ff:fe12:73ae/64
|
||||
1473682335 UNKNOWN fe80::fcf6:edff:fe0a:4fc2/64
|
||||
1197738280 UNKNOWN fe80::fcd0:98ff:fe65:c3d3/64
|
||||
7928453883 UNKNOWN fe80::fc26:13ff:fed4:b9eb/64
|
||||
4723927902 UNKNOWN fe80::fc7a:57ff:fea1:32b6/64
|
||||
6775358137 UNKNOWN fe80::fcb4:d2ff:fed9:2709/64
|
||||
|
||||
--- Interface Speeds ---
|
||||
1197738280: 10Mbps (driver: tun)
|
||||
1473682335: 10Mbps (driver: tun)
|
||||
1585574411: 10Mbps (driver: tun)
|
||||
1873685436: 10Mbps (driver: tun)
|
||||
1900074498: 10Mbps (driver: tun)
|
||||
2270446172: 10Mbps (driver: tun)
|
||||
2577660031: 10Mbps (driver: tun)
|
||||
2672200667: 10Mbps (driver: tun)
|
||||
2739236756: 10Mbps (driver: tun)
|
||||
2847939492: 10Mbps (driver: tun)
|
||||
3144884207: 10Mbps (driver: tun)
|
||||
3854082875: 10Mbps (driver: tun)
|
||||
4635498757: 10Mbps (driver: tun)
|
||||
4723927902: 10Mbps (driver: tun)
|
||||
5274046373: 10Mbps (driver: tun)
|
||||
5375909748: 10Mbps (driver: tun)
|
||||
5668246001: 10Mbps (driver: tun)
|
||||
6538424133: 10Mbps (driver: tun)
|
||||
6686699813: 10Mbps (driver: tun)
|
||||
6775358137: 10Mbps (driver: tun)
|
||||
6868627519: 10Mbps (driver: tun)
|
||||
7575455714: 10Mbps (driver: tun)
|
||||
7928453883: 10Mbps (driver: tun)
|
||||
7952655313: 10Mbps (driver: tun)
|
||||
8290678221: 10Mbps (driver: tun)
|
||||
8339041496: 10Mbps (driver: tun)
|
||||
9669788654: 10Mbps (driver: tun)
|
||||
9709633390: 10Mbps (driver: tun)
|
||||
9864921145: 10Mbps (driver: tun)
|
||||
br0: 10000Mbps (driver: bridge)
|
||||
eno1: 10000Mbps (driver: ixgbe)
|
||||
eno2: 10000Mbps (driver: ixgbe)
|
||||
eno3: -1Mbps (driver: igb)
|
||||
eno4: -1Mbps (driver: igb)
|
||||
|
||||
--- Default Route ---
|
||||
default via 66.186.37.129 dev br0 proto static metric 10
|
||||
|
||||
--- Bridge / Bond Config ---
|
||||
bridge name bridge id STP enabled interfaces
|
||||
br0 8000.246e96a63f40 yes 1197738280
|
||||
1473682335
|
||||
1585574411
|
||||
1873685436
|
||||
1900074498
|
||||
2270446172
|
||||
2577660031
|
||||
2672200667
|
||||
2739236756
|
||||
2847939492
|
||||
3144884207
|
||||
3854082875
|
||||
4635498757
|
||||
4723927902
|
||||
5274046373
|
||||
5375909748
|
||||
5668246001
|
||||
6538424133
|
||||
6686699813
|
||||
6775358137
|
||||
6868627519
|
||||
7575455714
|
||||
7928453883
|
||||
7952655313
|
||||
8290678221
|
||||
8339041496
|
||||
9669788654
|
||||
9709633390
|
||||
9864921145
|
||||
eno1
|
||||
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
|
||||
|
||||
|
||||
===== LIBVIRT / KVM =====
|
||||
--- Libvirt Version ---
|
||||
Compiled against library: libvirt 10.10.0
|
||||
Using library: libvirt 10.10.0
|
||||
Using API: QEMU 10.10.0
|
||||
Running hypervisor: QEMU 9.1.0
|
||||
Running against daemon: 10.10.0
|
||||
|
||||
|
||||
--- All VMs (running + stopped) ---
|
||||
Id Name State
|
||||
------------------------------------------------------
|
||||
6 b5d24674-c0e6-487f-94b6-d3c378108244 running
|
||||
9 b6a57a3b-d4f9-4804-aa2a-fd5c40514e86 running
|
||||
10 203239a0-3222-42bc-aace-2f9633ae91b3 running
|
||||
11 47bb28c5-cedb-425d-97fa-c71321481b19 running
|
||||
14 4a951d30-4aea-4f13-b591-8d6ef3d15bac running
|
||||
18 85a274bd-a625-4301-8975-1040ebb0111e running
|
||||
19 33c942cf-f311-428b-bbdc-6808bc0c4de0 running
|
||||
21 409c693b-d165-4bdb-81af-d7a7ce23eaa7 running
|
||||
25 b7dc324d-9b3b-41c7-a572-57bef6874c84 running
|
||||
27 c434d488-44a6-4d76-8530-818a086b0b3c running
|
||||
29 8babf155-7b38-490b-815b-faf507cd0cdc running
|
||||
30 4b16b482-d871-4404-b641-b33d4103fa00 running
|
||||
31 415c3951-acf3-411f-ae3f-a8a4456b8e92 running
|
||||
34 4a56b2e2-1655-4893-8f2a-e909be9f5d5a running
|
||||
35 95e44451-1bce-4270-82d1-2f29a404d9dd running
|
||||
36 6e50481d-ac2d-4492-a44e-19fa1da29bd6 running
|
||||
48 2d704a2a-3a0a-432e-89b4-2f04516b771e paused
|
||||
50 41b20d00-f4c4-4064-8e1d-7bd284bcb773 running
|
||||
53 3c0b6c1a-a6b5-4522-b458-31e3773b3d0d running
|
||||
54 83deb44e-acf3-4631-b757-44c00b88b256 running
|
||||
56 88fef797-3629-4e09-85a7-500ff6d7b05c running
|
||||
57 dddeb4bf-149b-4271-af3e-9125bcad38a8 running
|
||||
60 0df53bc1-d5bd-4843-87c0-32a81bb9afcc running
|
||||
61 44caf596-e1ca-43cc-a44f-576441be8c48 running
|
||||
62 2fbf4caf-e7c0-4874-9f41-71555b593de0 running
|
||||
64 1e6bc3e6-9044-489a-92dc-243f929d2d05 running
|
||||
67 068bafe5-f180-4763-b1c0-a1a75028929f running
|
||||
68 be0cfe25-04af-4865-afd3-eb5796f7e018 running
|
||||
69 fbc7f30d-df58-4f86-b36b-608bfbf2c483 running
|
||||
|
||||
|
||||
--- Running VM Count ---
|
||||
28
|
||||
|
||||
--- VM Resource Usage ---
|
||||
VM_NAME | vCPUs | RAM_MAX | STATE
|
||||
--------|-------|---------|------
|
||||
b5d24674-c0e6-487f-94b6-d3c378108244 | 4 | 8388608 KiB | running
|
||||
b6a57a3b-d4f9-4804-aa2a-fd5c40514e86 | 1 | 1048576 KiB | running
|
||||
203239a0-3222-42bc-aace-2f9633ae91b3 | 4 | 8388608 KiB | running
|
||||
47bb28c5-cedb-425d-97fa-c71321481b19 | 6 | 16777216 KiB | running
|
||||
4a951d30-4aea-4f13-b591-8d6ef3d15bac | 4 | 8388608 KiB | running
|
||||
85a274bd-a625-4301-8975-1040ebb0111e | 6 | 16777216 KiB | running
|
||||
33c942cf-f311-428b-bbdc-6808bc0c4de0 | 8 | 33554432 KiB | running
|
||||
409c693b-d165-4bdb-81af-d7a7ce23eaa7 | 1 | 2097152 KiB | running
|
||||
b7dc324d-9b3b-41c7-a572-57bef6874c84 | 4 | 8388608 KiB | running
|
||||
c434d488-44a6-4d76-8530-818a086b0b3c | 4 | 8388608 KiB | running
|
||||
8babf155-7b38-490b-815b-faf507cd0cdc | 1 | 1048576 KiB | running
|
||||
4b16b482-d871-4404-b641-b33d4103fa00 | 8 | 33554432 KiB | running
|
||||
415c3951-acf3-411f-ae3f-a8a4456b8e92 | 2 | 2097152 KiB | running
|
||||
4a56b2e2-1655-4893-8f2a-e909be9f5d5a | 2 | 2097152 KiB | running
|
||||
95e44451-1bce-4270-82d1-2f29a404d9dd | 2 | 8388608 KiB | running
|
||||
6e50481d-ac2d-4492-a44e-19fa1da29bd6 | 2 | 4194304 KiB | running
|
||||
41b20d00-f4c4-4064-8e1d-7bd284bcb773 | 1 | 1048576 KiB | running
|
||||
3c0b6c1a-a6b5-4522-b458-31e3773b3d0d | 4 | 8388608 KiB | running
|
||||
83deb44e-acf3-4631-b757-44c00b88b256 | 4 | 8388608 KiB | running
|
||||
88fef797-3629-4e09-85a7-500ff6d7b05c | 8 | 33554432 KiB | running
|
||||
dddeb4bf-149b-4271-af3e-9125bcad38a8 | 4 | 8388608 KiB | running
|
||||
0df53bc1-d5bd-4843-87c0-32a81bb9afcc | 8 | 16777216 KiB | running
|
||||
44caf596-e1ca-43cc-a44f-576441be8c48 | 4 | 8388608 KiB | running
|
||||
2fbf4caf-e7c0-4874-9f41-71555b593de0 | 6 | 16777216 KiB | running
|
||||
1e6bc3e6-9044-489a-92dc-243f929d2d05 | 1 | 2097152 KiB | running
|
||||
068bafe5-f180-4763-b1c0-a1a75028929f | 1 | 1048576 KiB | running
|
||||
be0cfe25-04af-4865-afd3-eb5796f7e018 | 4 | 8388608 KiB | running
|
||||
fbc7f30d-df58-4f86-b36b-608bfbf2c483 | 4 | 8388608 KiB | running
|
||||
|
||||
--- Total Allocated vCPUs (running VMs) ---
|
||||
108
|
||||
|
||||
--- Total Allocated RAM (running VMs) ---
|
||||
278528 MB (272 GB)
|
||||
|
||||
--- VM Disk Locations ---
|
||||
[b5d24674-c0e6-487f-94b6-d3c378108244]
|
||||
file disk vda /mnt/vms/b5d24674-c0e6-487f-94b6-d3c378108244_1.img
|
||||
file disk sdx /home/vf-data/server/b5d24674-c0e6-487f-94b6-d3c378108244/cloud-drive.img
|
||||
[b6a57a3b-d4f9-4804-aa2a-fd5c40514e86]
|
||||
file disk vda /mnt/vms/b6a57a3b-d4f9-4804-aa2a-fd5c40514e86_1.img
|
||||
file disk sdx /home/vf-data/server/b6a57a3b-d4f9-4804-aa2a-fd5c40514e86/cloud-drive.img
|
||||
[203239a0-3222-42bc-aace-2f9633ae91b3]
|
||||
file disk vda /mnt/vms/203239a0-3222-42bc-aace-2f9633ae91b3_1.img
|
||||
file disk sdx /home/vf-data/server/203239a0-3222-42bc-aace-2f9633ae91b3/cloud-drive.img
|
||||
[47bb28c5-cedb-425d-97fa-c71321481b19]
|
||||
file disk vda /mnt/vms/47bb28c5-cedb-425d-97fa-c71321481b19_1.img
|
||||
file disk sdx /home/vf-data/server/47bb28c5-cedb-425d-97fa-c71321481b19/cloud-drive.img
|
||||
[4a951d30-4aea-4f13-b591-8d6ef3d15bac]
|
||||
file disk vda /mnt/vms/4a951d30-4aea-4f13-b591-8d6ef3d15bac_1.img
|
||||
file disk sdx /home/vf-data/server/4a951d30-4aea-4f13-b591-8d6ef3d15bac/cloud-drive.img
|
||||
[85a274bd-a625-4301-8975-1040ebb0111e]
|
||||
file disk vda /mnt/vms/85a274bd-a625-4301-8975-1040ebb0111e_1.img
|
||||
file disk sdx /home/vf-data/server/85a274bd-a625-4301-8975-1040ebb0111e/cloud-drive.img
|
||||
[33c942cf-f311-428b-bbdc-6808bc0c4de0]
|
||||
file disk vda /mnt/vms/33c942cf-f311-428b-bbdc-6808bc0c4de0_1.img
|
||||
file disk sdx /home/vf-data/server/33c942cf-f311-428b-bbdc-6808bc0c4de0/cloud-drive.img
|
||||
[409c693b-d165-4bdb-81af-d7a7ce23eaa7]
|
||||
file disk vda /mnt/vms/409c693b-d165-4bdb-81af-d7a7ce23eaa7_1.img
|
||||
file disk sdx /home/vf-data/server/409c693b-d165-4bdb-81af-d7a7ce23eaa7/cloud-drive.img
|
||||
[b7dc324d-9b3b-41c7-a572-57bef6874c84]
|
||||
file disk vda /mnt/vms/b7dc324d-9b3b-41c7-a572-57bef6874c84_1.img
|
||||
file disk sdx /home/vf-data/server/b7dc324d-9b3b-41c7-a572-57bef6874c84/cloud-drive.img
|
||||
[c434d488-44a6-4d76-8530-818a086b0b3c]
|
||||
file disk vda /mnt/vms/c434d488-44a6-4d76-8530-818a086b0b3c_1.img
|
||||
file disk sdx /home/vf-data/server/c434d488-44a6-4d76-8530-818a086b0b3c/cloud-drive.img
|
||||
[8babf155-7b38-490b-815b-faf507cd0cdc]
|
||||
file disk vda /mnt/vms/8babf155-7b38-490b-815b-faf507cd0cdc_1.img
|
||||
file disk sdx /home/vf-data/server/8babf155-7b38-490b-815b-faf507cd0cdc/cloud-drive.img
|
||||
[4b16b482-d871-4404-b641-b33d4103fa00]
|
||||
file disk vda /mnt/vms/4b16b482-d871-4404-b641-b33d4103fa00_1.img
|
||||
file disk sdx /home/vf-data/server/4b16b482-d871-4404-b641-b33d4103fa00/cloud-drive.img
|
||||
[415c3951-acf3-411f-ae3f-a8a4456b8e92]
|
||||
file disk vda /mnt/vms/415c3951-acf3-411f-ae3f-a8a4456b8e92_1.img
|
||||
file disk sdx /home/vf-data/server/415c3951-acf3-411f-ae3f-a8a4456b8e92/cloud-drive.img
|
||||
[4a56b2e2-1655-4893-8f2a-e909be9f5d5a]
|
||||
file disk vda /mnt/vms/4a56b2e2-1655-4893-8f2a-e909be9f5d5a_1.img
|
||||
file disk sdx /home/vf-data/server/4a56b2e2-1655-4893-8f2a-e909be9f5d5a/cloud-drive.img
|
||||
[95e44451-1bce-4270-82d1-2f29a404d9dd]
|
||||
file disk vda /mnt/vms/95e44451-1bce-4270-82d1-2f29a404d9dd_1.img
|
||||
file disk sdx /home/vf-data/server/95e44451-1bce-4270-82d1-2f29a404d9dd/cloud-drive.img
|
||||
[6e50481d-ac2d-4492-a44e-19fa1da29bd6]
|
||||
file disk vda /mnt/vms/6e50481d-ac2d-4492-a44e-19fa1da29bd6_1.img
|
||||
file disk sdx /home/vf-data/server/6e50481d-ac2d-4492-a44e-19fa1da29bd6/cloud-drive.img
|
||||
[2d704a2a-3a0a-432e-89b4-2f04516b771e]
|
||||
file disk vda /mnt/vms/2d704a2a-3a0a-432e-89b4-2f04516b771e_1.img
|
||||
file disk sdx /home/vf-data/server/2d704a2a-3a0a-432e-89b4-2f04516b771e/cloud-drive.img
|
||||
[41b20d00-f4c4-4064-8e1d-7bd284bcb773]
|
||||
file disk vda /mnt/vms/41b20d00-f4c4-4064-8e1d-7bd284bcb773_1.img
|
||||
file disk sdx /home/vf-data/server/41b20d00-f4c4-4064-8e1d-7bd284bcb773/cloud-drive.img
|
||||
[3c0b6c1a-a6b5-4522-b458-31e3773b3d0d]
|
||||
file disk vda /mnt/vms/3c0b6c1a-a6b5-4522-b458-31e3773b3d0d_1.img
|
||||
file disk sdx /home/vf-data/server/3c0b6c1a-a6b5-4522-b458-31e3773b3d0d/cloud-drive.img
|
||||
[83deb44e-acf3-4631-b757-44c00b88b256]
|
||||
file disk vda /mnt/vms/83deb44e-acf3-4631-b757-44c00b88b256_1.img
|
||||
file disk sdx /home/vf-data/server/83deb44e-acf3-4631-b757-44c00b88b256/cloud-drive.img
|
||||
[88fef797-3629-4e09-85a7-500ff6d7b05c]
|
||||
file disk vda /mnt/vms/88fef797-3629-4e09-85a7-500ff6d7b05c_1.img
|
||||
file disk sdx /home/vf-data/server/88fef797-3629-4e09-85a7-500ff6d7b05c/cloud-drive.img
|
||||
[dddeb4bf-149b-4271-af3e-9125bcad38a8]
|
||||
file disk vda /mnt/vms/dddeb4bf-149b-4271-af3e-9125bcad38a8_1.img
|
||||
file disk sdx /home/vf-data/server/dddeb4bf-149b-4271-af3e-9125bcad38a8/cloud-drive.img
|
||||
[0df53bc1-d5bd-4843-87c0-32a81bb9afcc]
|
||||
file disk vda /mnt/vms/0df53bc1-d5bd-4843-87c0-32a81bb9afcc_1.img
|
||||
file disk sdx /home/vf-data/server/0df53bc1-d5bd-4843-87c0-32a81bb9afcc/cloud-drive.img
|
||||
[44caf596-e1ca-43cc-a44f-576441be8c48]
|
||||
file disk vda /mnt/vms/44caf596-e1ca-43cc-a44f-576441be8c48_1.img
|
||||
file disk sdx /home/vf-data/server/44caf596-e1ca-43cc-a44f-576441be8c48/cloud-drive.img
|
||||
[2fbf4caf-e7c0-4874-9f41-71555b593de0]
|
||||
file disk vda /mnt/vms/2fbf4caf-e7c0-4874-9f41-71555b593de0_1.img
|
||||
file disk sdx /home/vf-data/server/2fbf4caf-e7c0-4874-9f41-71555b593de0/cloud-drive.img
|
||||
[1e6bc3e6-9044-489a-92dc-243f929d2d05]
|
||||
file disk vda /mnt/vms/1e6bc3e6-9044-489a-92dc-243f929d2d05_1.img
|
||||
file disk sdx /home/vf-data/server/1e6bc3e6-9044-489a-92dc-243f929d2d05/cloud-drive.img
|
||||
[068bafe5-f180-4763-b1c0-a1a75028929f]
|
||||
file disk vda /mnt/vms/068bafe5-f180-4763-b1c0-a1a75028929f_1.img
|
||||
file disk sdx /home/vf-data/server/068bafe5-f180-4763-b1c0-a1a75028929f/cloud-drive.img
|
||||
[be0cfe25-04af-4865-afd3-eb5796f7e018]
|
||||
file disk vda /mnt/vms/be0cfe25-04af-4865-afd3-eb5796f7e018_1.img
|
||||
file disk sdx /home/vf-data/server/be0cfe25-04af-4865-afd3-eb5796f7e018/cloud-drive.img
|
||||
[fbc7f30d-df58-4f86-b36b-608bfbf2c483]
|
||||
file disk vda /mnt/vms/fbc7f30d-df58-4f86-b36b-608bfbf2c483_1.img
|
||||
file disk sdx /home/vf-data/server/fbc7f30d-df58-4f86-b36b-608bfbf2c483/cloud-drive.img
|
||||
|
||||
--- Storage Pools ---
|
||||
Name State Autostart
|
||||
---------------------------
|
||||
|
||||
|
||||
===== QEMU =====
|
||||
--- QEMU Version ---
|
||||
QEMU emulator version 9.1.0 (qemu-kvm-9.1.0-29.el9_7.alma.1)
|
||||
|
||||
===== DISK USAGE BY VM IMAGES =====
|
||||
--- qcow2 files ---
|
||||
/home/vf-data/os/template/almalinux-9-gnome-x86_64-2023-04-25.qcow2 (actual: 1.1G, virtual: 4.88 GiB)
|
||||
/home/vf-data/os/template/cloudlinux-9-latest-x86_64.qcow2 (actual: 1.1G, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/ubuntu-jammy-server-cloudimg-amd64-2023-04-25.qcow2 (actual: 643M, virtual: 2.2 GiB)
|
||||
/home/vf-data/os/template/ubuntu-lunar-server-cloudimg-amd64.qcow2 (actual: 722M, virtual: 3.5 GiB)
|
||||
/home/vf-data/os/template/ubuntu-bionic-server-cloudimg-amd64-2023-04-25.qcow2 (actual: 387M, virtual: 2.2 GiB)
|
||||
/home/vf-data/os/template/ubuntu-focal-server-cloudimg-amd64-2023-04-25.qcow2 (actual: 613M, virtual: 2.2 GiB)
|
||||
/home/vf-data/os/template/debian-12-x86_64-2023-06-11.qcow2 (actual: 441M, virtual: 1.95 GiB)
|
||||
/home/vf-data/os/template/alma-linux-8-minimal-x86_64-2024-01-27.qcow2 (actual: 666M, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/windows_server_2012_r2_standard.qcow2 (actual: 12G, virtual: 12.2 GiB)
|
||||
/home/vf-data/os/template/ubuntu-noble-server-cloudimg-amd64-2024-04-25.qcow2 (actual: 558M, virtual: 3.5 GiB)
|
||||
/home/vf-data/os/template/centos-7-minimal-x86-64.qcow2 (actual: 446M, virtual: 1.95 GiB)
|
||||
/home/vf-data/os/template/debian-11-xfce-x86_64-2023-04-25.qcow2 (actual: 1.3G, virtual: 4.88 GiB)
|
||||
/home/vf-data/os/template/fedora-40-x86-64.qcow2 (actual: 380M, virtual: 5 GiB)
|
||||
/home/vf-data/os/template/debian-11-x86_64-2023-04-25.qcow2 (actual: 373M, virtual: 1.95 GiB)
|
||||
/home/vf-data/os/template/debian-12-ext4-x86_64-2025-03-13.qcow2 (actual: 403M, virtual: 1.95 GiB)
|
||||
/home/vf-data/os/template/windows-server-2025-standard-2024-11-06.qcow2 (actual: 5.9G, virtual: 12.2 GiB)
|
||||
/home/vf-data/os/template/centos-8-3-x86-64.qcow2 (actual: 1.3G, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/windows-server-2019-standard-2024-03-06.qcow2 (actual: 5.8G, virtual: 13.7 GiB)
|
||||
/home/vf-data/os/template/almalinux-9-x86_64-2024-11-20.qcow2 (actual: 507M, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/centos-stream-8-minimal-x86_64.qcow2 (actual: 486M, virtual: 3.61 GiB)
|
||||
/home/vf-data/os/template/almalinux-10-x86-64.qcow2 (actual: 439M, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/fedora-42-x86-64.qcow2 (actual: 508M, virtual: 5 GiB)
|
||||
/home/vf-data/os/template/windows-server-2022-standard-2024-03-06.qcow2 (actual: 5.5G, virtual: 12.2 GiB)
|
||||
|
||||
--- raw disk files ---
|
||||
|
||||
===== SERVICES =====
|
||||
--- Key Services Status ---
|
||||
libvirtd: inactive
|
||||
not-found
|
||||
qemu-guest-agent: inactive
|
||||
not-found
|
||||
virtfusion: inactive
|
||||
not-found
|
||||
virtfusion-agent: inactive
|
||||
not-found
|
||||
zfs-zed: inactive
|
||||
not-found
|
||||
zfs-import-cache: inactive
|
||||
not-found
|
||||
zfs-mount: inactive
|
||||
not-found
|
||||
|
||||
===== RESOURCE SUMMARY =====
|
||||
--- CPU ---
|
||||
Total threads: 56
|
||||
Allocated vCPUs: 108
|
||||
Overcommit ratio: 1.92
|
||||
|
||||
--- RAM ---
|
||||
Total RAM: 515361 MB (503 GB)
|
||||
Allocated to VMs: 278528 MB (272 GB)
|
||||
Free for host/new VMs: 236833 MB
|
||||
Utilization: 50.0%
|
||||
|
||||
===== END =====
|
||||
@@ -1,514 +0,0 @@
|
||||
===== SYSTEM INFO =====
|
||||
--- Hostname ---
|
||||
atl-02.node.vps.ezscale.tech
|
||||
|
||||
--- OS ---
|
||||
NAME="AlmaLinux"
|
||||
VERSION="9.7 (Moss Jungle Cat)"
|
||||
VERSION_ID="9.7"
|
||||
PRETTY_NAME="AlmaLinux 9.7 (Moss Jungle Cat)"
|
||||
|
||||
--- Kernel ---
|
||||
5.14.0-611.11.1.el9_7.x86_64
|
||||
|
||||
--- Uptime ---
|
||||
11:32:57 up 59 days, 13:42, 0 users, load average: 5.48, 6.85, 6.74
|
||||
|
||||
===== CPU =====
|
||||
--- Model ---
|
||||
Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
|
||||
|
||||
--- Physical CPUs ---
|
||||
2
|
||||
|
||||
--- Cores per CPU ---
|
||||
10
|
||||
|
||||
--- Total Threads ---
|
||||
40
|
||||
|
||||
--- CPU Flags (virt) ---
|
||||
ept vmx
|
||||
|
||||
--- lscpu summary ---
|
||||
CPU(s): 40
|
||||
On-line CPU(s) list: 0-39
|
||||
Model name: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
|
||||
BIOS Model name: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
|
||||
Thread(s) per core: 2
|
||||
Core(s) per socket: 10
|
||||
Socket(s): 2
|
||||
CPU(s) scaling MHz: 86%
|
||||
CPU max MHz: 3600.0000
|
||||
CPU min MHz: 1200.0000
|
||||
L1d cache: 640 KiB (20 instances)
|
||||
L1i cache: 640 KiB (20 instances)
|
||||
L2 cache: 5 MiB (20 instances)
|
||||
L3 cache: 50 MiB (2 instances)
|
||||
NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38
|
||||
NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39
|
||||
Vulnerability L1tf: Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable
|
||||
|
||||
===== MEMORY =====
|
||||
--- Total / Used / Free ---
|
||||
total used free shared buff/cache available
|
||||
Mem: 377Gi 189Gi 2.7Gi 1.6Gi 189Gi 188Gi
|
||||
Swap: 4.0Gi 4.0Gi 5.0Mi
|
||||
|
||||
--- DIMM Details ---
|
||||
Error Correction Type: Multi-bit ECC
|
||||
Size: 16 GB
|
||||
Locator: DIMM_A1
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR3
|
||||
Type Detail: Synchronous Registered (Buffered)
|
||||
Speed: 1600 MT/s
|
||||
Configured Memory Speed: 1333 MT/s
|
||||
Size: 16 GB
|
||||
Locator: DIMM_A2
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR3
|
||||
Type Detail: Synchronous Registered (Buffered)
|
||||
Speed: 1600 MT/s
|
||||
Configured Memory Speed: 1333 MT/s
|
||||
Size: 16 GB
|
||||
Locator: DIMM_A3
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR3
|
||||
Type Detail: Synchronous Registered (Buffered)
|
||||
Speed: 1600 MT/s
|
||||
Configured Memory Speed: 1333 MT/s
|
||||
Size: 16 GB
|
||||
Locator: DIMM_A4
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR3
|
||||
Type Detail: Synchronous Registered (Buffered)
|
||||
Speed: 1600 MT/s
|
||||
Configured Memory Speed: 1333 MT/s
|
||||
Size: 16 GB
|
||||
Locator: DIMM_A5
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR3
|
||||
Type Detail: Synchronous Registered (Buffered)
|
||||
Speed: 1600 MT/s
|
||||
Configured Memory Speed: 1333 MT/s
|
||||
Size: 16 GB
|
||||
Locator: DIMM_A6
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR3
|
||||
|
||||
===== STORAGE - BLOCK DEVICES =====
|
||||
--- lsblk ---
|
||||
NAME SIZE TYPE FSTYPE MOUNTPOINT ROTA MODEL
|
||||
sda 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdb 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdc 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdd 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sde 279.4G disk ddf_raid_member 1 AL13SEB300
|
||||
├─md126 278.9G raid1 1
|
||||
│ ├─md126p1 1G part xfs /boot 1
|
||||
│ └─md126p2 277.9G part LVM2_member 1
|
||||
│ ├─almalinux-root 70G lvm xfs / 1
|
||||
│ ├─almalinux-swap 4G lvm swap [SWAP] 1
|
||||
│ └─almalinux-home 203.9G lvm xfs /home 1
|
||||
└─md127 0B md 0
|
||||
sdf 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdg 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdh 279.4G disk ddf_raid_member 1 AL13SEB300
|
||||
├─md126 278.9G raid1 1
|
||||
│ ├─md126p1 1G part xfs /boot 1
|
||||
│ └─md126p2 277.9G part LVM2_member 1
|
||||
│ ├─almalinux-root 70G lvm xfs / 1
|
||||
│ ├─almalinux-swap 4G lvm swap [SWAP] 1
|
||||
│ └─almalinux-home 203.9G lvm xfs /home 1
|
||||
└─md127 0B md 0
|
||||
sdi 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdj 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdk 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdl 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdm 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
sdn 1.9T disk linux_raid_member 0 Micron_1100_MTFDDAK2T0TBN
|
||||
└─md0 11.2T raid10 LVM2_member 0
|
||||
└─vg_vm-lv_vm 11.2T lvm xfs /mnt/data 0
|
||||
|
||||
--- Disk Models ---
|
||||
NAME SIZE MODEL ROTA TRAN
|
||||
sda 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdb 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdc 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdd 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sde 279.4G AL13SEB300 1 sas
|
||||
sdf 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdg 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdh 279.4G AL13SEB300 1 sas
|
||||
sdi 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdj 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdk 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdl 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdm 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
sdn 1.9T Micron_1100_MTFDDAK2T0TBN 0 sas
|
||||
|
||||
===== STORAGE - FILESYSTEM =====
|
||||
--- df -h ---
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/mapper/almalinux-root 70G 9.8G 61G 15% /
|
||||
/dev/md126p1 960M 397M 564M 42% /boot
|
||||
/dev/mapper/almalinux-home 204G 45G 160G 22% /home
|
||||
/dev/mapper/vg_vm-lv_vm 12T 7.2T 4.1T 64% /mnt/data
|
||||
localhost:/mnt/data/vms 12T 7.2T 4.1T 64% /mnt/vms
|
||||
|
||||
===== STORAGE - ZFS =====
|
||||
ZFS not installed
|
||||
|
||||
===== STORAGE - LVM =====
|
||||
--- Physical Volumes ---
|
||||
PV VG Fmt Attr PSize PFree
|
||||
/dev/md0 vg_vm lvm2 a-- <11.18t 0
|
||||
/dev/md126p2 almalinux lvm2 a-- 277.87g 0
|
||||
|
||||
--- Volume Groups ---
|
||||
VG #PV #LV #SN Attr VSize VFree
|
||||
almalinux 1 3 0 wz--n- 277.87g 0
|
||||
vg_vm 1 1 0 wz--n- <11.18t 0
|
||||
|
||||
--- Logical Volumes ---
|
||||
LV VG LSize Attr
|
||||
home almalinux 203.87g -wi-ao----
|
||||
root almalinux 70.00g -wi-ao----
|
||||
swap almalinux 4.00g -wi-ao----
|
||||
lv_vm vg_vm <11.18t -wi-ao----
|
||||
|
||||
===== STORAGE - MDADM (Software RAID) =====
|
||||
Personalities : [raid1] [raid10]
|
||||
md0 : active raid10 sdk[1] sdn[0] sdg[2] sdd[5] sdj[11] sdi[8] sdf[6] sdc[4] sdm[3] sdb[9] sda[10] sdl[7]
|
||||
12001597440 blocks super 1.2 512K chunks 2 near-copies [12/12] [UUUUUUUUUUUU]
|
||||
bitmap: 36/90 pages [144KB], 65536KB chunk
|
||||
|
||||
md126 : active raid1 sdh[1] sde[0]
|
||||
292421632 blocks super external:/md127/0 [2/2] [UU]
|
||||
|
||||
md127 : inactive sdh[1](S) sde[0](S)
|
||||
1094236 blocks super external:ddf
|
||||
|
||||
unused devices: <none>
|
||||
|
||||
===== NETWORK =====
|
||||
--- Interfaces ---
|
||||
lo UNKNOWN 127.0.0.1/8 ::1/128
|
||||
eno1 UP
|
||||
eno2 DOWN
|
||||
eno3 UP 172.20.254.253/16
|
||||
enp68s0f0 UP 192.168.10.3/29 fe80::a236:9fff:fe42:febc/64
|
||||
eno4 DOWN
|
||||
enp68s0f1 DOWN
|
||||
br0 UP 66.186.37.254/25 2605:bb00:c010:4::3/64 fe80::dbb6:6f64:abf5:c9a4/64
|
||||
4142776250 UNKNOWN fe80::fcae:98ff:fe9b:9169/64
|
||||
3687292804@eno3 UP fe80::2c0:21ff:fe51:49c7/64
|
||||
9865730239 UNKNOWN fe80::fcc8:51ff:fe9e:f946/64
|
||||
4480397161 UNKNOWN fe80::fc41:37ff:fef7:544a/64
|
||||
6226104096 UNKNOWN fe80::fc4c:25ff:fede:57d6/64
|
||||
1512514452 UNKNOWN fe80::fc37:dfff:fec2:e703/64
|
||||
5691952363 UNKNOWN fe80::fc94:5cff:fe53:23b/64
|
||||
4793215883 UNKNOWN fe80::fc3e:3aff:fe53:690c/64
|
||||
9065882520 UNKNOWN fe80::fc25:f3ff:fe86:256c/64
|
||||
8232538989 UNKNOWN fe80::fc5d:f2ff:feba:3b6d/64
|
||||
1876239691 UNKNOWN fe80::fc89:cdff:feb1:f4ea/64
|
||||
5579955486 UNKNOWN fe80::fc20:26ff:feab:ace1/64
|
||||
1384622875 UNKNOWN fe80::fc37:94ff:fee9:6f46/64
|
||||
3473746128 UNKNOWN fe80::fc62:fcff:fe5b:656a/64
|
||||
6844105562 UNKNOWN fe80::fc69:e3ff:fe51:837c/64
|
||||
2285253971 UNKNOWN fe80::fc43:26ff:feea:ec4f/64
|
||||
4965374655 UNKNOWN fe80::fce8:fff:fe38:5de7/64
|
||||
3975024440 UNKNOWN fe80::fcf9:f2ff:fe93:87b6/64
|
||||
8318991295 UNKNOWN fe80::fc16:faff:feeb:fc18/64
|
||||
6899839531 UNKNOWN fe80::fcbf:b3ff:fe7f:faa6/64
|
||||
5136141790 UNKNOWN fe80::fc7a:b2ff:fee9:f0fa/64
|
||||
6945298055 UNKNOWN fe80::fce2:d3ff:fed8:fc28/64
|
||||
6641190120 UNKNOWN fe80::fc4f:73ff:fea1:71c/64
|
||||
|
||||
--- Interface Speeds ---
|
||||
1384622875: 10Mbps (driver: tun)
|
||||
1512514452: 10Mbps (driver: tun)
|
||||
1876239691: 10Mbps (driver: tun)
|
||||
2285253971: 10Mbps (driver: tun)
|
||||
3473746128: 10Mbps (driver: tun)
|
||||
3687292804: 1000Mbps (driver: macvlan)
|
||||
3975024440: 10Mbps (driver: tun)
|
||||
4142776250: 10Mbps (driver: tun)
|
||||
4480397161: 10Mbps (driver: tun)
|
||||
4793215883: 10Mbps (driver: tun)
|
||||
4965374655: 10Mbps (driver: tun)
|
||||
5136141790: 10Mbps (driver: tun)
|
||||
5579955486: 10Mbps (driver: tun)
|
||||
5691952363: 10Mbps (driver: tun)
|
||||
6226104096: 10Mbps (driver: tun)
|
||||
6641190120: 10Mbps (driver: tun)
|
||||
6844105562: 10Mbps (driver: tun)
|
||||
6899839531: 10Mbps (driver: tun)
|
||||
6945298055: 10Mbps (driver: tun)
|
||||
8232538989: 10Mbps (driver: tun)
|
||||
8318991295: 10Mbps (driver: tun)
|
||||
9065882520: 10Mbps (driver: tun)
|
||||
9865730239: 10Mbps (driver: tun)
|
||||
br0: 1000Mbps (driver: bridge)
|
||||
eno1: 1000Mbps (driver: igb)
|
||||
eno2: -1Mbps (driver: igb)
|
||||
eno3: 1000Mbps (driver: igb)
|
||||
eno4: -1Mbps (driver: igb)
|
||||
enp68s0f0: 10000Mbps (driver: ixgbe)
|
||||
enp68s0f1: -1Mbps (driver: ixgbe)
|
||||
|
||||
--- Default Route ---
|
||||
default via 66.186.37.129 dev br0 proto static metric 10
|
||||
|
||||
--- Bridge / Bond Config ---
|
||||
bridge name bridge id STP enabled interfaces
|
||||
br0 8000.b8ca3a6ec5cc yes 1384622875
|
||||
1512514452
|
||||
1876239691
|
||||
2285253971
|
||||
3473746128
|
||||
3975024440
|
||||
4142776250
|
||||
4480397161
|
||||
4793215883
|
||||
4965374655
|
||||
5136141790
|
||||
5579955486
|
||||
5691952363
|
||||
6226104096
|
||||
6641190120
|
||||
6844105562
|
||||
6899839531
|
||||
6945298055
|
||||
8232538989
|
||||
8318991295
|
||||
9065882520
|
||||
9865730239
|
||||
eno1
|
||||
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
|
||||
|
||||
|
||||
===== LIBVIRT / KVM =====
|
||||
--- Libvirt Version ---
|
||||
Compiled against library: libvirt 10.10.0
|
||||
Using library: libvirt 10.10.0
|
||||
Using API: QEMU 10.10.0
|
||||
Running hypervisor: QEMU 9.1.0
|
||||
Running against daemon: 10.10.0
|
||||
|
||||
|
||||
--- All VMs (running + stopped) ---
|
||||
Id Name State
|
||||
------------------------------------------------------
|
||||
1 82e3ea29-a7eb-49eb-ad66-2a7523359408 running
|
||||
2 0ad0f8f8-c784-4cd7-a885-064fd5dec42b running
|
||||
5 c163a847-d2cf-489a-b2ae-402daa0fb880 running
|
||||
6 571fa5af-f75c-4f6e-95b7-c0e68200a9ae running
|
||||
10 9469dd33-0d1e-460e-9674-94508798497c running
|
||||
11 0ce20a29-bf89-4095-9abc-1e148613d2a7 running
|
||||
12 40631bb2-34fc-42ea-b58c-60506d1adb09 running
|
||||
13 98268e4a-7812-43a7-bbd1-b1cc4e366368 running
|
||||
14 99a23167-132c-49b8-8203-7529077b135e running
|
||||
15 2dd34cb1-8faa-4448-a5b8-21bbd1104459 running
|
||||
18 4d4689a2-543c-4543-b501-31828c9c6564 running
|
||||
22 bbb290fa-2a94-408a-904c-b96140034807 running
|
||||
25 8e3d0c3a-2a70-4c6b-9030-057300cb5e47 running
|
||||
26 e028b84c-5a0d-427d-bd98-efb178826072 running
|
||||
27 3579b300-eac8-4e7f-b6fa-d3c11b63c062 running
|
||||
28 5cf90f68-657c-41af-a96d-ddc7b2c3e0b8 running
|
||||
34 594ffdd9-06dd-4183-b956-21a601edfef1 running
|
||||
35 721de6e8-0e3c-490b-aab6-4daa7aed7f35 running
|
||||
36 680f78b5-d774-4aa9-a12b-3c6aaa9f4aae running
|
||||
38 95b968e8-1975-4de1-85bb-9c521486d431 running
|
||||
39 e8fac828-9665-42b1-bde0-a46d63e67e60 running
|
||||
40 716d7378-9108-4b12-afef-cd1af4448c25 running
|
||||
|
||||
|
||||
--- Running VM Count ---
|
||||
22
|
||||
|
||||
--- VM Resource Usage ---
|
||||
VM_NAME | vCPUs | RAM_MAX | STATE
|
||||
--------|-------|---------|------
|
||||
82e3ea29-a7eb-49eb-ad66-2a7523359408 | 1 | 1048576 KiB | running
|
||||
0ad0f8f8-c784-4cd7-a885-064fd5dec42b | 6 | 16777216 KiB | running
|
||||
c163a847-d2cf-489a-b2ae-402daa0fb880 | 4 | 8388608 KiB | running
|
||||
571fa5af-f75c-4f6e-95b7-c0e68200a9ae | 4 | 8388608 KiB | running
|
||||
9469dd33-0d1e-460e-9674-94508798497c | 6 | 16777216 KiB | running
|
||||
0ce20a29-bf89-4095-9abc-1e148613d2a7 | 6 | 16777216 KiB | running
|
||||
40631bb2-34fc-42ea-b58c-60506d1adb09 | 6 | 16777216 KiB | running
|
||||
98268e4a-7812-43a7-bbd1-b1cc4e366368 | 6 | 16777216 KiB | running
|
||||
99a23167-132c-49b8-8203-7529077b135e | 4 | 8388608 KiB | running
|
||||
2dd34cb1-8faa-4448-a5b8-21bbd1104459 | 4 | 8388608 KiB | running
|
||||
4d4689a2-543c-4543-b501-31828c9c6564 | 4 | 8388608 KiB | running
|
||||
bbb290fa-2a94-408a-904c-b96140034807 | 1 | 1048576 KiB | running
|
||||
8e3d0c3a-2a70-4c6b-9030-057300cb5e47 | 4 | 2097152 KiB | running
|
||||
e028b84c-5a0d-427d-bd98-efb178826072 | 6 | 16777216 KiB | running
|
||||
3579b300-eac8-4e7f-b6fa-d3c11b63c062 | 1 | 2097152 KiB | running
|
||||
5cf90f68-657c-41af-a96d-ddc7b2c3e0b8 | 6 | 16777216 KiB | running
|
||||
594ffdd9-06dd-4183-b956-21a601edfef1 | 1 | 2097152 KiB | running
|
||||
721de6e8-0e3c-490b-aab6-4daa7aed7f35 | 1 | 1048576 KiB | running
|
||||
680f78b5-d774-4aa9-a12b-3c6aaa9f4aae | 6 | 16777216 KiB | running
|
||||
95b968e8-1975-4de1-85bb-9c521486d431 | 4 | 8388608 KiB | running
|
||||
e8fac828-9665-42b1-bde0-a46d63e67e60 | 8 | 33554432 KiB | running
|
||||
716d7378-9108-4b12-afef-cd1af4448c25 | 4 | 8388608 KiB | running
|
||||
|
||||
--- Total Allocated vCPUs (running VMs) ---
|
||||
93
|
||||
|
||||
--- Total Allocated RAM (running VMs) ---
|
||||
230400 MB (225 GB)
|
||||
|
||||
--- VM Disk Locations ---
|
||||
[82e3ea29-a7eb-49eb-ad66-2a7523359408]
|
||||
file disk vda /mnt/vms/82e3ea29-a7eb-49eb-ad66-2a7523359408_1.img
|
||||
file disk sdx /home/vf-data/server/82e3ea29-a7eb-49eb-ad66-2a7523359408/cloud-drive.img
|
||||
[0ad0f8f8-c784-4cd7-a885-064fd5dec42b]
|
||||
file disk vda /mnt/vms/0ad0f8f8-c784-4cd7-a885-064fd5dec42b_1.img
|
||||
file disk sdx /home/vf-data/server/0ad0f8f8-c784-4cd7-a885-064fd5dec42b/cloud-drive.img
|
||||
[c163a847-d2cf-489a-b2ae-402daa0fb880]
|
||||
file disk vda /mnt/vms/c163a847-d2cf-489a-b2ae-402daa0fb880_1.img
|
||||
file disk sdx /home/vf-data/server/c163a847-d2cf-489a-b2ae-402daa0fb880/cloud-drive.img
|
||||
[571fa5af-f75c-4f6e-95b7-c0e68200a9ae]
|
||||
file disk vda /mnt/vms/571fa5af-f75c-4f6e-95b7-c0e68200a9ae_1.img
|
||||
file disk sdx /home/vf-data/server/571fa5af-f75c-4f6e-95b7-c0e68200a9ae/cloud-drive.img
|
||||
[9469dd33-0d1e-460e-9674-94508798497c]
|
||||
file disk vda /mnt/vms/9469dd33-0d1e-460e-9674-94508798497c_1.img
|
||||
file disk sdx /home/vf-data/server/9469dd33-0d1e-460e-9674-94508798497c/cloud-drive.img
|
||||
[0ce20a29-bf89-4095-9abc-1e148613d2a7]
|
||||
file disk vda /mnt/vms/0ce20a29-bf89-4095-9abc-1e148613d2a7_1.img
|
||||
file disk sdx /home/vf-data/server/0ce20a29-bf89-4095-9abc-1e148613d2a7/cloud-drive.img
|
||||
[40631bb2-34fc-42ea-b58c-60506d1adb09]
|
||||
file disk vda /mnt/vms/40631bb2-34fc-42ea-b58c-60506d1adb09_1.img
|
||||
file disk sdx /home/vf-data/server/40631bb2-34fc-42ea-b58c-60506d1adb09/cloud-drive.img
|
||||
[98268e4a-7812-43a7-bbd1-b1cc4e366368]
|
||||
file disk vda /mnt/vms/98268e4a-7812-43a7-bbd1-b1cc4e366368_1.img
|
||||
file disk sdx /home/vf-data/server/98268e4a-7812-43a7-bbd1-b1cc4e366368/cloud-drive.img
|
||||
[99a23167-132c-49b8-8203-7529077b135e]
|
||||
file disk vda /mnt/vms/99a23167-132c-49b8-8203-7529077b135e_1.img
|
||||
file disk sdx /home/vf-data/server/99a23167-132c-49b8-8203-7529077b135e/cloud-drive.img
|
||||
[2dd34cb1-8faa-4448-a5b8-21bbd1104459]
|
||||
file disk vda /mnt/vms/2dd34cb1-8faa-4448-a5b8-21bbd1104459_1.img
|
||||
file disk sdx /home/vf-data/server/2dd34cb1-8faa-4448-a5b8-21bbd1104459/cloud-drive.img
|
||||
[4d4689a2-543c-4543-b501-31828c9c6564]
|
||||
file disk vda /mnt/vms/4d4689a2-543c-4543-b501-31828c9c6564_1.img
|
||||
file disk sdx /home/vf-data/server/4d4689a2-543c-4543-b501-31828c9c6564/cloud-drive.img
|
||||
[bbb290fa-2a94-408a-904c-b96140034807]
|
||||
file disk vda /mnt/vms/bbb290fa-2a94-408a-904c-b96140034807_1.img
|
||||
file disk sdx /home/vf-data/server/bbb290fa-2a94-408a-904c-b96140034807/cloud-drive.img
|
||||
[8e3d0c3a-2a70-4c6b-9030-057300cb5e47]
|
||||
file disk vda /mnt/vms/8e3d0c3a-2a70-4c6b-9030-057300cb5e47_1.img
|
||||
file disk vdb /mnt/vms/8e3d0c3a-2a70-4c6b-9030-057300cb5e47_2.img
|
||||
file disk sdx /home/vf-data/server/8e3d0c3a-2a70-4c6b-9030-057300cb5e47/cloud-drive.img
|
||||
[e028b84c-5a0d-427d-bd98-efb178826072]
|
||||
file disk vda /mnt/vms/e028b84c-5a0d-427d-bd98-efb178826072_1.img
|
||||
file disk sdx /home/vf-data/server/e028b84c-5a0d-427d-bd98-efb178826072/cloud-drive.img
|
||||
[3579b300-eac8-4e7f-b6fa-d3c11b63c062]
|
||||
file disk vda /mnt/vms/3579b300-eac8-4e7f-b6fa-d3c11b63c062_1.img
|
||||
file disk sdx /home/vf-data/server/3579b300-eac8-4e7f-b6fa-d3c11b63c062/cloud-drive.img
|
||||
[5cf90f68-657c-41af-a96d-ddc7b2c3e0b8]
|
||||
file disk vda /mnt/vms/5cf90f68-657c-41af-a96d-ddc7b2c3e0b8_1.img
|
||||
file disk vdd /mnt/vms/5cf90f68-657c-41af-a96d-ddc7b2c3e0b8_4.img
|
||||
file disk sdx /home/vf-data/server/5cf90f68-657c-41af-a96d-ddc7b2c3e0b8/cloud-drive.img
|
||||
[594ffdd9-06dd-4183-b956-21a601edfef1]
|
||||
file disk vda /mnt/vms/594ffdd9-06dd-4183-b956-21a601edfef1_1.img
|
||||
file disk sdx /home/vf-data/server/594ffdd9-06dd-4183-b956-21a601edfef1/cloud-drive.img
|
||||
[721de6e8-0e3c-490b-aab6-4daa7aed7f35]
|
||||
file disk vda /mnt/vms/721de6e8-0e3c-490b-aab6-4daa7aed7f35_1.img
|
||||
file disk sdx /home/vf-data/server/721de6e8-0e3c-490b-aab6-4daa7aed7f35/cloud-drive.img
|
||||
[680f78b5-d774-4aa9-a12b-3c6aaa9f4aae]
|
||||
file disk vda /mnt/vms/680f78b5-d774-4aa9-a12b-3c6aaa9f4aae_1.img
|
||||
file disk sdx /home/vf-data/server/680f78b5-d774-4aa9-a12b-3c6aaa9f4aae/cloud-drive.img
|
||||
[95b968e8-1975-4de1-85bb-9c521486d431]
|
||||
file disk vda /mnt/vms/95b968e8-1975-4de1-85bb-9c521486d431_1.img
|
||||
file disk sdx /home/vf-data/server/95b968e8-1975-4de1-85bb-9c521486d431/cloud-drive.img
|
||||
[e8fac828-9665-42b1-bde0-a46d63e67e60]
|
||||
file disk vda /mnt/vms/e8fac828-9665-42b1-bde0-a46d63e67e60_1.img
|
||||
file disk sdx /home/vf-data/server/e8fac828-9665-42b1-bde0-a46d63e67e60/cloud-drive.img
|
||||
[716d7378-9108-4b12-afef-cd1af4448c25]
|
||||
file disk vda /mnt/vms/716d7378-9108-4b12-afef-cd1af4448c25_1.img
|
||||
file disk sdx /home/vf-data/server/716d7378-9108-4b12-afef-cd1af4448c25/cloud-drive.img
|
||||
|
||||
--- Storage Pools ---
|
||||
Name State Autostart
|
||||
---------------------------
|
||||
|
||||
|
||||
===== QEMU =====
|
||||
--- QEMU Version ---
|
||||
QEMU emulator version 9.1.0 (qemu-kvm-9.1.0-29.el9_7.alma.1)
|
||||
|
||||
===== DISK USAGE BY VM IMAGES =====
|
||||
--- qcow2 files ---
|
||||
/home/vf-data/os/template/ubuntu-lunar-server-cloudimg-amd64.qcow2 (actual: 722M, virtual: 3.5 GiB)
|
||||
/home/vf-data/os/template/ubuntu-focal-server-cloudimg-amd64-2023-04-25.qcow2 (actual: 613M, virtual: 2.2 GiB)
|
||||
/home/vf-data/os/template/ubuntu-noble-server-cloudimg-amd64-2024-04-25.qcow2 (actual: 557M, virtual: 3.5 GiB)
|
||||
/home/vf-data/os/template/windows_server_2012_r2_standard.qcow2 (actual: 12G, virtual: 12.2 GiB)
|
||||
/home/vf-data/os/template/centos-7-minimal-x86-64.qcow2 (actual: 446M, virtual: 1.95 GiB)
|
||||
/home/vf-data/os/template/alma-linux-8-minimal-x86_64-2024-01-27.qcow2 (actual: 679M, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/centos-stream-8-minimal-x86_64.qcow2 (actual: 486M, virtual: 3.61 GiB)
|
||||
/home/vf-data/os/template/debian-12-x86_64-2023-06-11.qcow2 (actual: 441M, virtual: 1.95 GiB)
|
||||
/home/vf-data/os/template/ubuntu-jammy-server-cloudimg-amd64-2023-04-25.qcow2 (actual: 646M, virtual: 2.2 GiB)
|
||||
/home/vf-data/os/template/almalinux-9-x86_64-2024-11-20.qcow2 (actual: 507M, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/windows-server-2025-standard-2024-11-06.qcow2 (actual: 5.9G, virtual: 12.2 GiB)
|
||||
/home/vf-data/os/template/windows-server-2019-standard-2024-03-06.qcow2 (actual: 5.8G, virtual: 13.7 GiB)
|
||||
/home/vf-data/os/template/windows-server-2022-standard-2024-03-06.qcow2 (actual: 5.5G, virtual: 12.2 GiB)
|
||||
/home/vf-data/os/template/centos-8-3-x86-64.qcow2 (actual: 1.3G, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/almalinux-10-x86-64.qcow2 (actual: 439M, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/fedora-42-x86-64.qcow2 (actual: 508M, virtual: 5 GiB)
|
||||
/mnt/data/windows_10_template_v1.qcow2 (actual: 11G, virtual: 25 GiB)
|
||||
|
||||
--- raw disk files ---
|
||||
|
||||
===== SERVICES =====
|
||||
--- Key Services Status ---
|
||||
libvirtd: active
|
||||
qemu-guest-agent: inactive
|
||||
not-found
|
||||
virtfusion: inactive
|
||||
not-found
|
||||
virtfusion-agent: inactive
|
||||
not-found
|
||||
zfs-zed: inactive
|
||||
not-found
|
||||
zfs-import-cache: inactive
|
||||
not-found
|
||||
zfs-mount: inactive
|
||||
not-found
|
||||
|
||||
===== RESOURCE SUMMARY =====
|
||||
--- CPU ---
|
||||
Total threads: 40
|
||||
Allocated vCPUs: 93
|
||||
Overcommit ratio: N/A
|
||||
|
||||
--- RAM ---
|
||||
Total RAM: 386388 MB (377 GB)
|
||||
Allocated to VMs: 230400 MB (225 GB)
|
||||
Free for host/new VMs: 155988 MB
|
||||
Utilization: N/A%
|
||||
|
||||
===== END =====
|
||||
@@ -1,374 +0,0 @@
|
||||
===== SYSTEM INFO =====
|
||||
--- Hostname ---
|
||||
atl-03.node.vps.ezscale.tech
|
||||
|
||||
--- OS ---
|
||||
NAME="AlmaLinux"
|
||||
VERSION="9.6 (Sage Margay)"
|
||||
VERSION_ID="9.6"
|
||||
PRETTY_NAME="AlmaLinux 9.6 (Sage Margay)"
|
||||
|
||||
--- Kernel ---
|
||||
5.14.0-570.49.1.el9_6.x86_64
|
||||
|
||||
--- Uptime ---
|
||||
11:33:06 up 99 days, 4:43, 0 users, load average: 1.41, 1.92, 1.97
|
||||
|
||||
===== CPU =====
|
||||
--- Model ---
|
||||
Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|
||||
|
||||
--- Physical CPUs ---
|
||||
2
|
||||
|
||||
--- Cores per CPU ---
|
||||
14
|
||||
|
||||
--- Total Threads ---
|
||||
56
|
||||
|
||||
--- CPU Flags (virt) ---
|
||||
ept vmx
|
||||
|
||||
--- lscpu summary ---
|
||||
CPU(s): 56
|
||||
On-line CPU(s) list: 0-55
|
||||
Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|
||||
BIOS Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|
||||
Thread(s) per core: 2
|
||||
Core(s) per socket: 14
|
||||
Socket(s): 2
|
||||
CPU(s) scaling MHz: 100%
|
||||
CPU max MHz: 2900.0000
|
||||
CPU min MHz: 1200.0000
|
||||
L1d cache: 896 KiB (28 instances)
|
||||
L1i cache: 896 KiB (28 instances)
|
||||
L2 cache: 7 MiB (28 instances)
|
||||
L3 cache: 70 MiB (2 instances)
|
||||
NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54
|
||||
NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55
|
||||
Vulnerability L1tf: Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable
|
||||
|
||||
===== MEMORY =====
|
||||
--- Total / Used / Free ---
|
||||
total used free shared buff/cache available
|
||||
Mem: 440Gi 180Gi 238Gi 4.0Gi 27Gi 259Gi
|
||||
Swap: 15Gi 0B 15Gi
|
||||
|
||||
--- DIMM Details ---
|
||||
Error Correction Type: Multi-bit ECC
|
||||
Locator: A1
|
||||
Bank Locator: Not Specified
|
||||
Type: Unknown
|
||||
Type Detail: None
|
||||
Size: 32 GB
|
||||
Locator: A2
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR4
|
||||
Type Detail: Synchronous Registered (Buffered)
|
||||
Speed: 2400 MT/s
|
||||
Configured Memory Speed: 1866 MT/s
|
||||
Size: 32 GB
|
||||
Locator: A3
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR4
|
||||
Type Detail: Synchronous Registered (Buffered)
|
||||
Speed: 2400 MT/s
|
||||
Configured Memory Speed: 1866 MT/s
|
||||
Size: 32 GB
|
||||
Locator: A4
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR4
|
||||
Type Detail: Synchronous Registered (Buffered)
|
||||
Speed: 2400 MT/s
|
||||
Configured Memory Speed: 1866 MT/s
|
||||
Locator: A5
|
||||
Bank Locator: Not Specified
|
||||
Type: Unknown
|
||||
Type Detail: None
|
||||
Size: 32 GB
|
||||
Locator: A6
|
||||
Bank Locator: Not Specified
|
||||
Type: DDR4
|
||||
Type Detail: Synchronous Registered (Buffered)
|
||||
Speed: 2400 MT/s
|
||||
Configured Memory Speed: 1866 MT/s
|
||||
Size: 32 GB
|
||||
Locator: A7
|
||||
Bank Locator: Not Specified
|
||||
|
||||
===== STORAGE - BLOCK DEVICES =====
|
||||
--- lsblk ---
|
||||
NAME SIZE TYPE FSTYPE MOUNTPOINT ROTA MODEL
|
||||
sda 223.6G disk 0 KINGSTON SA400S37240G
|
||||
├─sda1 1G part xfs /boot 0
|
||||
└─sda2 222.6G part linux_raid_member 0
|
||||
└─md127 222.4G raid1 ext4 / 0
|
||||
sdb 0B disk 0 STORAGE DEVICE
|
||||
sdc 1.9T disk 0 Micron_1100_MTFDDAK2T0TBN
|
||||
├─sdc1 1.9T part zfs_member 0
|
||||
└─sdc9 8M part 0
|
||||
sdd 1.9T disk 0 Micron_1100_MTFDDAK2T0TBN
|
||||
├─sdd1 1.9T part zfs_member 0
|
||||
└─sdd9 8M part 0
|
||||
sde 223.6G disk 0 KINGSTON SA400S37240G
|
||||
└─sde1 222.6G part linux_raid_member 0
|
||||
└─md127 222.4G raid1 ext4 / 0
|
||||
|
||||
--- Disk Models ---
|
||||
NAME SIZE MODEL ROTA TRAN
|
||||
sda 223.6G KINGSTON SA400S37240G 0 sata
|
||||
sdb 0B STORAGE DEVICE 0 usb
|
||||
sdc 1.9T Micron_1100_MTFDDAK2T0TBN 0 sata
|
||||
sdd 1.9T Micron_1100_MTFDDAK2T0TBN 0 sata
|
||||
sde 223.6G KINGSTON SA400S37240G 0 sata
|
||||
|
||||
===== STORAGE - FILESYSTEM =====
|
||||
--- df -h ---
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/md127 218G 113G 95G 55% /
|
||||
/dev/sda1 960M 330M 631M 35% /boot
|
||||
tank 1.7T 128K 1.7T 1% /tank
|
||||
tank/vms 1.8T 165G 1.7T 10% /tank/vms
|
||||
|
||||
===== STORAGE - ZFS =====
|
||||
--- ZFS Pools ---
|
||||
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
|
||||
tank 1.86T 197G 1.67T - - 35% 10% 1.00x ONLINE -
|
||||
mirror-0 1.86T 197G 1.67T - - 35% 10.3% - ONLINE
|
||||
ata-Micron_1100_MTFDDAK2T0TBN_17021569179A 1.86T - - - - - - - ONLINE
|
||||
ata-Micron_1100_MTFDDAK2T0TBN_1711166E8924 1.86T - - - - - - - ONLINE
|
||||
|
||||
--- ZFS Pool Status ---
|
||||
pool: tank
|
||||
state: ONLINE
|
||||
config:
|
||||
|
||||
NAME STATE READ WRITE CKSUM
|
||||
tank ONLINE 0 0 0
|
||||
mirror-0 ONLINE 0 0 0
|
||||
ata-Micron_1100_MTFDDAK2T0TBN_17021569179A ONLINE 0 0 0
|
||||
ata-Micron_1100_MTFDDAK2T0TBN_1711166E8924 ONLINE 0 0 0
|
||||
|
||||
errors: No known data errors
|
||||
|
||||
--- ZFS Datasets ---
|
||||
NAME USED AVAIL REFER MOUNTPOINT
|
||||
tank 197G 1.61T 96K /tank
|
||||
tank/vms 196G 1.61T 165G /tank/vms
|
||||
|
||||
--- ZFS Properties (compression, ashift, recordsize) ---
|
||||
|
||||
===== STORAGE - LVM =====
|
||||
--- Physical Volumes ---
|
||||
|
||||
--- Volume Groups ---
|
||||
|
||||
--- Logical Volumes ---
|
||||
|
||||
===== STORAGE - MDADM (Software RAID) =====
|
||||
Personalities : [raid1]
|
||||
md127 : active raid1 sde1[0] sda2[1]
|
||||
233248768 blocks super 1.2 [2/2] [UU]
|
||||
bitmap: 2/2 pages [8KB], 65536KB chunk
|
||||
|
||||
unused devices: <none>
|
||||
|
||||
===== NETWORK =====
|
||||
--- Interfaces ---
|
||||
lo UNKNOWN 127.0.0.1/8 ::1/128
|
||||
enp3s0f0 DOWN
|
||||
eno1 DOWN
|
||||
enp3s0f1 DOWN
|
||||
eno2 DOWN
|
||||
eno3 UP
|
||||
eno4 UP
|
||||
enp129s0f0 DOWN
|
||||
enp129s0f1 DOWN
|
||||
br0 UP 66.186.37.252/25 fe80::1c0c:69a9:ca9b:f163/64
|
||||
6676408128 UNKNOWN fe80::fc30:1cff:fe10:3959/64
|
||||
4794906989 UNKNOWN fe80::fc98:3ff:fe85:6a2e/64
|
||||
8901578154 UNKNOWN fe80::fcf0:2cff:fe63:ba26/64
|
||||
1787749754 UNKNOWN fe80::fce5:fcff:fe53:513f/64
|
||||
3327536383 UNKNOWN fe80::fc0d:1aff:fe42:94c0/64
|
||||
5326490493 UNKNOWN fe80::fce3:fbff:fec0:f4cd/64
|
||||
2313996727 UNKNOWN fe80::fc19:21ff:fe56:f471/64
|
||||
9265995741 UNKNOWN fe80::fc02:3dff:fe83:2d3f/64
|
||||
7640912805 UNKNOWN fe80::fc9b:fff:fe23:46be/64
|
||||
4655817081 UNKNOWN fe80::fc0d:d7ff:fea6:e089/64
|
||||
7771553970 UNKNOWN fe80::fcb8:dfff:fe7b:492e/64
|
||||
|
||||
--- Interface Speeds ---
|
||||
1787749754: 10Mbps (driver: tun)
|
||||
2313996727: 10Mbps (driver: tun)
|
||||
3327536383: 10Mbps (driver: tun)
|
||||
4655817081: 10Mbps (driver: tun)
|
||||
4794906989: 10Mbps (driver: tun)
|
||||
5326490493: 10Mbps (driver: tun)
|
||||
6676408128: 10Mbps (driver: tun)
|
||||
7640912805: 10Mbps (driver: tun)
|
||||
7771553970: 10Mbps (driver: tun)
|
||||
8901578154: 10Mbps (driver: tun)
|
||||
9265995741: 10Mbps (driver: tun)
|
||||
br0: 1000Mbps (driver: bridge)
|
||||
eno1: -1Mbps (driver: bnx2x)
|
||||
eno2: -1Mbps (driver: bnx2x)
|
||||
eno3: 1000Mbps (driver: bnx2x)
|
||||
eno4: 1000Mbps (driver: bnx2x)
|
||||
enp129s0f0: -1Mbps (driver: bnx2x)
|
||||
enp129s0f1: -1Mbps (driver: bnx2x)
|
||||
enp3s0f0: -1Mbps (driver: ixgbe)
|
||||
enp3s0f1: -1Mbps (driver: ixgbe)
|
||||
|
||||
--- Default Route ---
|
||||
default via 66.186.37.129 dev br0 proto static metric 425
|
||||
|
||||
--- Bridge / Bond Config ---
|
||||
bridge name bridge id STP enabled interfaces
|
||||
br0 8000.1866da8ba8ee yes 1787749754
|
||||
2313996727
|
||||
3327536383
|
||||
4655817081
|
||||
4794906989
|
||||
5326490493
|
||||
6676408128
|
||||
7640912805
|
||||
7771553970
|
||||
8901578154
|
||||
9265995741
|
||||
eno4
|
||||
10: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
|
||||
|
||||
|
||||
===== LIBVIRT / KVM =====
|
||||
--- Libvirt Version ---
|
||||
Compiled against library: libvirt 10.10.0
|
||||
Using library: libvirt 10.10.0
|
||||
Using API: QEMU 10.10.0
|
||||
Running hypervisor: QEMU 9.1.0
|
||||
Running against daemon: 10.10.0
|
||||
|
||||
|
||||
--- All VMs (running + stopped) ---
|
||||
Id Name State
|
||||
-------------------------------------------------------
|
||||
4 2ce09938-9aa6-44cc-9a58-a52a9f717c5e running
|
||||
8 5e134a7a-728e-4fec-bf37-7e6e4649904c running
|
||||
28 b69ff6b7-5145-4254-9013-6ce723a68c40 running
|
||||
44 1f192a2c-0ef2-4b2d-9722-db4914b4efaa running
|
||||
81 9b8b3835-192e-4f81-ada6-ba3c4b6b6bfc paused
|
||||
85 192e4df7-d1ce-40e9-b4f5-ad8c69ce97dd running
|
||||
86 5cf0eb8f-dd1a-43cf-a3ea-c618484d6aa6 running
|
||||
97 d779c625-55e4-4e3e-8d37-a374d8715c37 running
|
||||
100 cb1e6977-93ef-4fd7-a48e-850eb6dc08e7 running
|
||||
101 7fe23def-a545-4f65-ac5a-9ff570efaabe running
|
||||
102 fff80538-33cd-46a2-a29c-bafbe08eb507 running
|
||||
|
||||
|
||||
--- Running VM Count ---
|
||||
10
|
||||
|
||||
--- VM Resource Usage ---
|
||||
VM_NAME | vCPUs | RAM_MAX | STATE
|
||||
--------|-------|---------|------
|
||||
2ce09938-9aa6-44cc-9a58-a52a9f717c5e | 8 | 33554432 KiB | running
|
||||
5e134a7a-728e-4fec-bf37-7e6e4649904c | 6 | 16777216 KiB | running
|
||||
b69ff6b7-5145-4254-9013-6ce723a68c40 | 4 | 8388608 KiB | running
|
||||
1f192a2c-0ef2-4b2d-9722-db4914b4efaa | 4 | 8388608 KiB | running
|
||||
192e4df7-d1ce-40e9-b4f5-ad8c69ce97dd | 4 | 8388608 KiB | running
|
||||
5cf0eb8f-dd1a-43cf-a3ea-c618484d6aa6 | 4 | 8388608 KiB | running
|
||||
d779c625-55e4-4e3e-8d37-a374d8715c37 | 4 | 8388608 KiB | running
|
||||
cb1e6977-93ef-4fd7-a48e-850eb6dc08e7 | 4 | 8388608 KiB | running
|
||||
7fe23def-a545-4f65-ac5a-9ff570efaabe | 4 | 8388608 KiB | running
|
||||
fff80538-33cd-46a2-a29c-bafbe08eb507 | 4 | 8388608 KiB | running
|
||||
|
||||
--- Total Allocated vCPUs (running VMs) ---
|
||||
46
|
||||
|
||||
--- Total Allocated RAM (running VMs) ---
|
||||
114688 MB (112 GB)
|
||||
|
||||
--- VM Disk Locations ---
|
||||
[2ce09938-9aa6-44cc-9a58-a52a9f717c5e]
|
||||
file disk vda /tank/vms/2ce09938-9aa6-44cc-9a58-a52a9f717c5e_1.img
|
||||
[5e134a7a-728e-4fec-bf37-7e6e4649904c]
|
||||
file disk vda /tank/vms/5e134a7a-728e-4fec-bf37-7e6e4649904c_1.img
|
||||
[b69ff6b7-5145-4254-9013-6ce723a68c40]
|
||||
file disk vda /tank/vms/b69ff6b7-5145-4254-9013-6ce723a68c40_1.img
|
||||
file disk sdx /home/vf-data/server/b69ff6b7-5145-4254-9013-6ce723a68c40/cloud-drive.img
|
||||
[1f192a2c-0ef2-4b2d-9722-db4914b4efaa]
|
||||
file disk vda /tank/vms/1f192a2c-0ef2-4b2d-9722-db4914b4efaa_1.img
|
||||
file disk sdx /home/vf-data/server/1f192a2c-0ef2-4b2d-9722-db4914b4efaa/cloud-drive.img
|
||||
[9b8b3835-192e-4f81-ada6-ba3c4b6b6bfc]
|
||||
file disk vda /tank/vms/9b8b3835-192e-4f81-ada6-ba3c4b6b6bfc_1.img
|
||||
file disk sdx /home/vf-data/server/9b8b3835-192e-4f81-ada6-ba3c4b6b6bfc/cloud-drive.img
|
||||
[192e4df7-d1ce-40e9-b4f5-ad8c69ce97dd]
|
||||
file disk vda /tank/vms/192e4df7-d1ce-40e9-b4f5-ad8c69ce97dd_1.img
|
||||
file disk sdx /home/vf-data/server/192e4df7-d1ce-40e9-b4f5-ad8c69ce97dd/cloud-drive.img
|
||||
[5cf0eb8f-dd1a-43cf-a3ea-c618484d6aa6]
|
||||
file disk vda /tank/vms/5cf0eb8f-dd1a-43cf-a3ea-c618484d6aa6_1.img
|
||||
file disk sdx /home/vf-data/server/5cf0eb8f-dd1a-43cf-a3ea-c618484d6aa6/cloud-drive.img
|
||||
[d779c625-55e4-4e3e-8d37-a374d8715c37]
|
||||
file disk vda /tank/vms/d779c625-55e4-4e3e-8d37-a374d8715c37_1.img
|
||||
file disk sdx /home/vf-data/server/d779c625-55e4-4e3e-8d37-a374d8715c37/cloud-drive.img
|
||||
[cb1e6977-93ef-4fd7-a48e-850eb6dc08e7]
|
||||
file disk vda /tank/vms/cb1e6977-93ef-4fd7-a48e-850eb6dc08e7_1.img
|
||||
file disk sdx /home/vf-data/server/cb1e6977-93ef-4fd7-a48e-850eb6dc08e7/cloud-drive.img
|
||||
[7fe23def-a545-4f65-ac5a-9ff570efaabe]
|
||||
file disk vda /tank/vms/7fe23def-a545-4f65-ac5a-9ff570efaabe_1.img
|
||||
file disk sdx /home/vf-data/server/7fe23def-a545-4f65-ac5a-9ff570efaabe/cloud-drive.img
|
||||
[fff80538-33cd-46a2-a29c-bafbe08eb507]
|
||||
file disk vda /tank/vms/fff80538-33cd-46a2-a29c-bafbe08eb507_1.img
|
||||
file disk sdx /home/vf-data/server/fff80538-33cd-46a2-a29c-bafbe08eb507/cloud-drive.img
|
||||
|
||||
--- Storage Pools ---
|
||||
Name State Autostart
|
||||
---------------------------
|
||||
|
||||
|
||||
===== QEMU =====
|
||||
--- QEMU Version ---
|
||||
QEMU emulator version 9.1.0 (qemu-kvm-9.1.0-15.el9_6.9.alma.1)
|
||||
|
||||
===== DISK USAGE BY VM IMAGES =====
|
||||
--- qcow2 files ---
|
||||
/home/vf-data/os/template/windows-server-2025-standard-2024-11-06.qcow2 (actual: 5.9G, virtual: 12.2 GiB)
|
||||
/home/vf-data/os/template/ubuntu-noble-server-cloudimg-amd64-2024-04-25.qcow2 (actual: 592M, virtual: 3.5 GiB)
|
||||
/home/vf-data/os/template/ubuntu-focal-server-cloudimg-amd64-2023-04-25.qcow2 (actual: 618M, virtual: 2.2 GiB)
|
||||
/home/vf-data/os/template/almalinux-10-x86-64.qcow2 (actual: 439M, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/ubuntu-jammy-server-cloudimg-amd64-2023-04-25.qcow2 (actual: 655M, virtual: 2.2 GiB)
|
||||
/home/vf-data/os/template/windows-server-2019-standard-2024-03-06.qcow2 (actual: 5.8G, virtual: 13.7 GiB)
|
||||
/home/vf-data/os/template/windows-server-2022-standard-2024-03-06.qcow2 (actual: 5.5G, virtual: 12.2 GiB)
|
||||
/home/vf-data/os/template/centos-8-3-x86-64.qcow2 (actual: 1.3G, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/almalinux-9-x86_64-2024-11-20.qcow2 (actual: 507M, virtual: 10 GiB)
|
||||
/home/vf-data/os/template/alma-linux-8-minimal-x86_64-2024-01-27.qcow2 (actual: 679M, virtual: 10 GiB)
|
||||
|
||||
--- raw disk files ---
|
||||
|
||||
===== SERVICES =====
|
||||
--- Key Services Status ---
|
||||
libvirtd: inactive
|
||||
not-found
|
||||
qemu-guest-agent: inactive
|
||||
not-found
|
||||
virtfusion: inactive
|
||||
not-found
|
||||
virtfusion-agent: inactive
|
||||
not-found
|
||||
zfs-zed: active
|
||||
zfs-import-cache: active
|
||||
zfs-mount: active
|
||||
|
||||
===== RESOURCE SUMMARY =====
|
||||
--- CPU ---
|
||||
Total threads: 56
|
||||
Allocated vCPUs: 46
|
||||
Overcommit ratio: .82
|
||||
|
||||
--- RAM ---
|
||||
Total RAM: 450850 MB (440 GB)
|
||||
Allocated to VMs: 114688 MB (112 GB)
|
||||
Free for host/new VMs: 336162 MB
|
||||
Utilization: 20.0%
|
||||
|
||||
===== END =====
|
||||
@@ -1,38 +0,0 @@
|
||||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
||||
# Matches multiple files with brace expansion notation
|
||||
# Set default charset
|
||||
[*.{js,py}]
|
||||
charset = utf-8
|
||||
|
||||
# 4 space indentation
|
||||
[*.py]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# 2 space indentation
|
||||
[*.{vue,scss,ts}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# Tab indentation (no size specified)
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
|
||||
# Indentation override for all JS under lib directory
|
||||
[lib/**.js]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# Matches the exact files either package.json or .travis.yml
|
||||
[{package.json,.travis.yml}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
@@ -1,67 +0,0 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
|
||||
APP_LOCALE=en
|
||||
APP_FALLBACK_LOCALE=en
|
||||
APP_FAKER_LOCALE=en_US
|
||||
|
||||
APP_MAINTENANCE_DRIVER=file
|
||||
# APP_MAINTENANCE_STORE=database
|
||||
|
||||
# PHP_CLI_SERVER_WORKERS=4
|
||||
|
||||
BCRYPT_ROUNDS=12
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_STACK=single
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
# DB_HOST=127.0.0.1
|
||||
# DB_PORT=3306
|
||||
# DB_DATABASE=laravel
|
||||
# DB_USERNAME=root
|
||||
# DB_PASSWORD=
|
||||
|
||||
SESSION_DRIVER=database
|
||||
SESSION_LIFETIME=120
|
||||
SESSION_ENCRYPT=false
|
||||
SESSION_PATH=/
|
||||
SESSION_DOMAIN=null
|
||||
|
||||
BROADCAST_CONNECTION=log
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=database
|
||||
|
||||
CACHE_STORE=database
|
||||
# CACHE_PREFIX=
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_CLIENT=phpredis
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=log
|
||||
MAIL_SCHEME=null
|
||||
MAIL_HOST=127.0.0.1
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
VITE_APP_NAME="${APP_NAME}"
|
||||
VITE_API_BASE_URL=
|
||||
VITE_MAPBOX_ACCESS_TOKEN=
|
||||
@@ -1,242 +0,0 @@
|
||||
module.exports = {
|
||||
env: {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
},
|
||||
extends: [
|
||||
'@antfu/eslint-config-vue',
|
||||
'plugin:vue/vue3-recommended',
|
||||
'plugin:import/recommended',
|
||||
'plugin:import/typescript',
|
||||
'plugin:promise/recommended',
|
||||
'plugin:sonarjs/recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:case-police/recommended',
|
||||
'plugin:regexp/recommended',
|
||||
|
||||
// 'plugin:unicorn/recommended',
|
||||
],
|
||||
parser: 'vue-eslint-parser',
|
||||
parserOptions: {
|
||||
ecmaVersion: 13,
|
||||
parser: '@typescript-eslint/parser',
|
||||
sourceType: 'module',
|
||||
},
|
||||
plugins: [
|
||||
'vue',
|
||||
'@typescript-eslint',
|
||||
'regex',
|
||||
'regexp',
|
||||
],
|
||||
ignorePatterns: ['resources/ts/plugins/iconify/*.js', 'node_modules', 'dist', '*.d.ts', 'vendor', '*.json'],
|
||||
rules: {
|
||||
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
|
||||
// indentation (Already present in TypeScript)
|
||||
'comma-spacing': ['error', { before: false, after: true }],
|
||||
'key-spacing': ['error', { afterColon: true }],
|
||||
'n/prefer-global/process': ['off'],
|
||||
'sonarjs/cognitive-complexity': ['off'],
|
||||
|
||||
'vue/first-attribute-linebreak': ['error', {
|
||||
singleline: 'beside',
|
||||
multiline: 'below',
|
||||
}],
|
||||
|
||||
'antfu/top-level-function': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
|
||||
// indentation (Already present in TypeScript)
|
||||
'indent': ['error', 2],
|
||||
|
||||
// Enforce trailing comma (Already present in TypeScript)
|
||||
'comma-dangle': ['error', 'always-multiline'],
|
||||
|
||||
// Enforce consistent spacing inside braces of object (Already present in TypeScript)
|
||||
'object-curly-spacing': ['error', 'always'],
|
||||
|
||||
// Enforce camelCase naming convention
|
||||
'camelcase': 'error',
|
||||
|
||||
// Disable max-len
|
||||
'max-len': 'off',
|
||||
|
||||
// we don't want it
|
||||
'semi': ['error', 'never'],
|
||||
|
||||
// add parens ony when required in arrow function
|
||||
'arrow-parens': ['error', 'as-needed'],
|
||||
|
||||
// add new line above comment
|
||||
'newline-before-return': 'error',
|
||||
|
||||
// add new line above comment
|
||||
'lines-around-comment': [
|
||||
'error',
|
||||
{
|
||||
beforeBlockComment: true,
|
||||
beforeLineComment: true,
|
||||
allowBlockStart: true,
|
||||
allowClassStart: true,
|
||||
allowObjectStart: true,
|
||||
allowArrayStart: true,
|
||||
|
||||
// We don't want to add extra space above closing SECTION
|
||||
ignorePattern: '!SECTION',
|
||||
},
|
||||
],
|
||||
|
||||
// Ignore _ as unused variable
|
||||
'@typescript-eslint/no-unused-vars': ['error', { varsIgnorePattern: '^_+$', argsIgnorePattern: '^_+$' }],
|
||||
|
||||
'array-element-newline': ['error', 'consistent'],
|
||||
'array-bracket-newline': ['error', 'consistent'],
|
||||
|
||||
'vue/multi-word-component-names': 'off',
|
||||
|
||||
'padding-line-between-statements': [
|
||||
'error',
|
||||
{ blankLine: 'always', prev: 'expression', next: 'const' },
|
||||
{ blankLine: 'always', prev: 'const', next: 'expression' },
|
||||
{ blankLine: 'always', prev: 'multiline-const', next: '*' },
|
||||
{ blankLine: 'always', prev: '*', next: 'multiline-const' },
|
||||
],
|
||||
|
||||
// Plugin: eslint-plugin-import
|
||||
'import/prefer-default-export': 'off',
|
||||
'import/newline-after-import': ['error', { count: 1 }],
|
||||
'no-restricted-imports': ['error', 'vuetify/components', {
|
||||
name: 'vue3-apexcharts',
|
||||
message: 'apexcharts are auto imported',
|
||||
}],
|
||||
|
||||
// For omitting extension for ts files
|
||||
'import/extensions': [
|
||||
'error',
|
||||
'ignorePackages',
|
||||
{
|
||||
js: 'never',
|
||||
jsx: 'never',
|
||||
ts: 'never',
|
||||
tsx: 'never',
|
||||
},
|
||||
],
|
||||
|
||||
// ignore virtual files
|
||||
'import/no-unresolved': [2, {
|
||||
ignore: [
|
||||
'~pages$',
|
||||
'virtual:meta-layouts',
|
||||
'#auth$',
|
||||
'#components$',
|
||||
|
||||
// Ignore vite's ?raw imports
|
||||
'.*\?raw',
|
||||
],
|
||||
}],
|
||||
|
||||
// Thanks: https://stackoverflow.com/a/63961972/10796681
|
||||
'no-shadow': 'off',
|
||||
'@typescript-eslint/no-shadow': ['error'],
|
||||
|
||||
'@typescript-eslint/consistent-type-imports': 'error',
|
||||
|
||||
// Plugin: eslint-plugin-promise
|
||||
'promise/always-return': 'off',
|
||||
'promise/catch-or-return': 'off',
|
||||
|
||||
// ESLint plugin vue
|
||||
'vue/block-tag-newline': 'error',
|
||||
'vue/component-api-style': 'error',
|
||||
'vue/component-name-in-template-casing': ['error', 'PascalCase', { registeredComponentsOnly: false, ignores: ['/^swiper-/'] }],
|
||||
'vue/custom-event-name-casing': ['error', 'camelCase', {
|
||||
ignores: [
|
||||
'/^(click):[a-z]+((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?/',
|
||||
],
|
||||
}],
|
||||
'vue/define-macros-order': 'error',
|
||||
'vue/html-comment-content-newline': 'error',
|
||||
'vue/html-comment-content-spacing': 'error',
|
||||
'vue/html-comment-indent': 'error',
|
||||
'vue/match-component-file-name': 'error',
|
||||
'vue/no-child-content': 'error',
|
||||
'vue/require-default-prop': 'off',
|
||||
|
||||
'vue/no-duplicate-attr-inheritance': 'error',
|
||||
'vue/no-empty-component-block': 'error',
|
||||
'vue/no-multiple-objects-in-class': 'error',
|
||||
'vue/no-reserved-component-names': 'error',
|
||||
'vue/no-template-target-blank': 'error',
|
||||
'vue/no-useless-mustaches': 'error',
|
||||
'vue/no-useless-v-bind': 'error',
|
||||
'vue/padding-line-between-blocks': 'error',
|
||||
'vue/prefer-separate-static-class': 'error',
|
||||
'vue/prefer-true-attribute-shorthand': 'error',
|
||||
'vue/v-on-function-call': 'error',
|
||||
'vue/no-restricted-class': ['error', '/^(p|m)(l|r)-/'],
|
||||
'vue/valid-v-slot': ['error', {
|
||||
allowModifiers: true,
|
||||
}],
|
||||
|
||||
// -- Extension Rules
|
||||
'vue/no-irregular-whitespace': 'error',
|
||||
'vue/template-curly-spacing': 'error',
|
||||
|
||||
// -- Sonarlint
|
||||
'sonarjs/no-duplicate-string': 'off',
|
||||
'sonarjs/no-nested-template-literals': 'off',
|
||||
|
||||
// -- Unicorn
|
||||
// 'unicorn/filename-case': 'off',
|
||||
// 'unicorn/prevent-abbreviations': ['error', {
|
||||
// replacements: {
|
||||
// props: false,
|
||||
// },
|
||||
// }],
|
||||
|
||||
// Internal Rules
|
||||
'valid-appcardcode-code-prop': 'error',
|
||||
'valid-appcardcode-demo-sfc': 'error',
|
||||
|
||||
// https://github.com/gmullerb/eslint-plugin-regex
|
||||
'regex/invalid': [
|
||||
'error',
|
||||
[
|
||||
{
|
||||
regex: '@/assets/images',
|
||||
replacement: '@images',
|
||||
message: 'Use \'@images\' path alias for image imports',
|
||||
},
|
||||
{
|
||||
regex: '@/assets/styles',
|
||||
replacement: '@styles',
|
||||
message: 'Use \'@styles\' path alias for importing styles from \'resources/ts/assets/styles\'',
|
||||
},
|
||||
{
|
||||
regex: '@core/\\w',
|
||||
message: 'You can\'t use @core when you are in @layouts module',
|
||||
files: {
|
||||
inspect: '@layouts/.*',
|
||||
},
|
||||
},
|
||||
{
|
||||
regex: 'useLayouts\\(',
|
||||
message: '`useLayouts` composable is only allowed in @layouts & @core directory. Please use `useThemeConfig` composable instead.',
|
||||
files: {
|
||||
inspect: '^(?!.*(@core|@layouts)).*',
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
// Ignore files
|
||||
'\.eslintrc\.cjs',
|
||||
],
|
||||
},
|
||||
settings: {
|
||||
'import/resolver': {
|
||||
node: true,
|
||||
typescript: {},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,207 +0,0 @@
|
||||
## GITATTRIBUTES FOR WEB PROJECTS
|
||||
#
|
||||
# These settings are for any web project.
|
||||
#
|
||||
# Details per file setting:
|
||||
# text These files should be normalized (i.e. convert CRLF to LF).
|
||||
# binary These files are binary and should be left untouched.
|
||||
#
|
||||
# Note that binary is a macro for -text -diff.
|
||||
######################################################################
|
||||
|
||||
# Auto detect
|
||||
## Handle line endings automatically for files detected as
|
||||
## text and leave all files detected as binary untouched.
|
||||
## This will handle all files NOT defined below.
|
||||
* text=auto
|
||||
|
||||
# Source code
|
||||
*.bash text eol=lf
|
||||
*.bat text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
*.coffee text
|
||||
*.css text diff=css
|
||||
*.htm text diff=html
|
||||
*.html text diff=html
|
||||
*.inc text
|
||||
*.ini text
|
||||
*.js text
|
||||
*.json text
|
||||
*.jsx text
|
||||
*.less text
|
||||
*.ls text
|
||||
*.map text -diff
|
||||
*.od text
|
||||
*.onlydata text
|
||||
*.php text diff=php
|
||||
*.pl text
|
||||
*.ps1 text eol=crlf
|
||||
*.py text diff=python
|
||||
*.rb text diff=ruby
|
||||
*.sass text
|
||||
*.scm text
|
||||
*.scss text diff=css
|
||||
*.sh text eol=lf
|
||||
.husky/* text eol=lf
|
||||
*.sql text
|
||||
*.styl text
|
||||
*.tag text
|
||||
*.ts text
|
||||
*.tsx text
|
||||
*.xml text
|
||||
*.xhtml text diff=html
|
||||
|
||||
# Docker
|
||||
Dockerfile text
|
||||
|
||||
# Documentation
|
||||
*.ipynb text eol=lf
|
||||
*.markdown text diff=markdown
|
||||
*.md text diff=markdown
|
||||
*.mdwn text diff=markdown
|
||||
*.mdown text diff=markdown
|
||||
*.mkd text diff=markdown
|
||||
*.mkdn text diff=markdown
|
||||
*.mdtxt text
|
||||
*.mdtext text
|
||||
*.txt text
|
||||
AUTHORS text
|
||||
CHANGELOG text
|
||||
CHANGES text
|
||||
CONTRIBUTING text
|
||||
COPYING text
|
||||
copyright text
|
||||
*COPYRIGHT* text
|
||||
INSTALL text
|
||||
license text
|
||||
LICENSE text
|
||||
NEWS text
|
||||
readme text
|
||||
*README* text
|
||||
TODO text
|
||||
|
||||
# Templates
|
||||
*.dot text
|
||||
*.ejs text
|
||||
*.erb text
|
||||
*.haml text
|
||||
*.handlebars text
|
||||
*.hbs text
|
||||
*.hbt text
|
||||
*.jade text
|
||||
*.latte text
|
||||
*.mustache text
|
||||
*.njk text
|
||||
*.phtml text
|
||||
*.svelte text
|
||||
*.tmpl text
|
||||
*.tpl text
|
||||
*.twig text
|
||||
*.vue text
|
||||
|
||||
# Configs
|
||||
*.cnf text
|
||||
*.conf text
|
||||
*.config text
|
||||
.editorconfig text
|
||||
.env text
|
||||
.gitattributes text
|
||||
.gitconfig text
|
||||
.htaccess text
|
||||
*.lock text -diff
|
||||
package.json text eol=lf
|
||||
package-lock.json text eol=lf -diff
|
||||
pnpm-lock.yaml text eol=lf -diff
|
||||
.prettierrc text
|
||||
yarn.lock text -diff
|
||||
*.toml text
|
||||
*.yaml text
|
||||
*.yml text
|
||||
browserslist text
|
||||
Makefile text
|
||||
makefile text
|
||||
|
||||
# Heroku
|
||||
Procfile text
|
||||
|
||||
# Graphics
|
||||
*.ai binary
|
||||
*.bmp binary
|
||||
*.eps binary
|
||||
*.gif binary
|
||||
*.gifv binary
|
||||
*.ico binary
|
||||
*.jng binary
|
||||
*.jp2 binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.jpx binary
|
||||
*.jxr binary
|
||||
*.pdf binary
|
||||
*.png binary
|
||||
*.psb binary
|
||||
*.psd binary
|
||||
# SVG treated as an asset (binary) by default.
|
||||
*.svg text
|
||||
# If you want to treat it as binary,
|
||||
# use the following line instead.
|
||||
# *.svg binary
|
||||
*.svgz binary
|
||||
*.tif binary
|
||||
*.tiff binary
|
||||
*.wbmp binary
|
||||
*.webp binary
|
||||
|
||||
# Audio
|
||||
*.kar binary
|
||||
*.m4a binary
|
||||
*.mid binary
|
||||
*.midi binary
|
||||
*.mp3 binary
|
||||
*.ogg binary
|
||||
*.ra binary
|
||||
|
||||
# Video
|
||||
*.3gpp binary
|
||||
*.3gp binary
|
||||
*.as binary
|
||||
*.asf binary
|
||||
*.asx binary
|
||||
*.avi binary
|
||||
*.fla binary
|
||||
*.flv binary
|
||||
*.m4v binary
|
||||
*.mng binary
|
||||
*.mov binary
|
||||
*.mp4 binary
|
||||
*.mpeg binary
|
||||
*.mpg binary
|
||||
*.ogv binary
|
||||
*.swc binary
|
||||
*.swf binary
|
||||
*.webm binary
|
||||
|
||||
# Archives
|
||||
*.7z binary
|
||||
*.gz binary
|
||||
*.jar binary
|
||||
*.rar binary
|
||||
*.tar binary
|
||||
*.zip binary
|
||||
|
||||
# Fonts
|
||||
*.ttf binary
|
||||
*.eot binary
|
||||
*.otf binary
|
||||
*.woff binary
|
||||
*.woff2 binary
|
||||
|
||||
# Executables
|
||||
*.exe binary
|
||||
*.pyc binary
|
||||
|
||||
# RC files (like .babelrc or .eslintrc)
|
||||
*.*rc text
|
||||
|
||||
# Ignore files (like .npmignore or .gitignore)
|
||||
*.*ignore text
|
||||
@@ -1,67 +0,0 @@
|
||||
*.log
|
||||
.DS_Store
|
||||
.env
|
||||
.env.backup
|
||||
.env.production
|
||||
.phpactor.json
|
||||
.phpunit.result.cache
|
||||
/.fleet
|
||||
/.idea
|
||||
/.nova
|
||||
/.phpunit.cache
|
||||
/.zed
|
||||
/auth.json
|
||||
/node_modules
|
||||
/public/build
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/storage/pail
|
||||
/vendor
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
Thumbs.db
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
/cypress/videos/
|
||||
/cypress/screenshots/
|
||||
|
||||
# 👉 Custom Git ignores
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
!.vscode/settings.json
|
||||
!.vscode/*.code-snippets
|
||||
!.vscode/tours
|
||||
.idea
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
.yarn
|
||||
|
||||
# iconify dist files
|
||||
resources/ts/plugins/iconify/icons.css
|
||||
|
||||
# Ignore MSW script
|
||||
public/mockServiceWorker.js
|
||||
|
||||
# Env files
|
||||
.env*
|
||||
!.env.example
|
||||
@@ -1,2 +0,0 @@
|
||||
auto-install-peers=true
|
||||
shamefully-hoist=true
|
||||
@@ -1 +0,0 @@
|
||||
lts/*
|
||||
@@ -1,46 +0,0 @@
|
||||
{
|
||||
"extends": [
|
||||
"stylelint-config-standard-scss",
|
||||
"stylelint-config-idiomatic-order",
|
||||
"@stylistic/stylelint-config"
|
||||
],
|
||||
"plugins": [
|
||||
"stylelint-use-logical-spec",
|
||||
"@stylistic/stylelint-plugin"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"**/*.scss"
|
||||
],
|
||||
"customSyntax": "postcss-scss"
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"**/*.vue"
|
||||
],
|
||||
"customSyntax": "postcss-html"
|
||||
}
|
||||
],
|
||||
"rules": {
|
||||
"@stylistic/max-line-length": [
|
||||
220,
|
||||
{
|
||||
"ignore": "comments"
|
||||
}
|
||||
],
|
||||
"@stylistic/indentation": 2,
|
||||
"liberty/use-logical-spec": true,
|
||||
"selector-class-pattern": null,
|
||||
"color-function-notation": null,
|
||||
"annotation-no-unknown": [
|
||||
true,
|
||||
{
|
||||
"ignoreAnnotations": [
|
||||
"default"
|
||||
]
|
||||
}
|
||||
],
|
||||
"media-feature-range-notation": null
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"Add hand emoji": {
|
||||
"prefix": "cm-hand-emoji",
|
||||
"body": [
|
||||
"👉"
|
||||
],
|
||||
"description": "Add hand emoji"
|
||||
},
|
||||
"Add info emoji": {
|
||||
"prefix": "cm-info-emoji",
|
||||
"body": [
|
||||
"ℹ️"
|
||||
],
|
||||
"description": "Add info emoji"
|
||||
},
|
||||
"Add warning emoji": {
|
||||
"prefix": "cm-warning-emoji",
|
||||
"body": [
|
||||
"❗"
|
||||
],
|
||||
"description": "Add warning emoji"
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"dbaeumer.vscode-eslint",
|
||||
"editorconfig.editorconfig",
|
||||
"xabikos.javascriptsnippets",
|
||||
"stylelint.vscode-stylelint",
|
||||
"fabiospampinato.vscode-highlight",
|
||||
"github.vscode-pull-request-github",
|
||||
"vue.volar",
|
||||
"antfu.iconify",
|
||||
"cipchk.cssrem",
|
||||
"matijao.vue-nuxt-snippets",
|
||||
"dongido.sync-env"
|
||||
]
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
{
|
||||
"editor.formatOnSave": true,
|
||||
"files.insertFinalNewline": true,
|
||||
"javascript.updateImportsOnFileMove.enabled": "always",
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
|
||||
"editor.autoClosingBrackets": "always"
|
||||
},
|
||||
"[markdown]": {
|
||||
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
|
||||
},
|
||||
// SCSS
|
||||
"[scss]": {
|
||||
"editor.defaultFormatter": "stylelint.vscode-stylelint"
|
||||
},
|
||||
// JSON
|
||||
"[json]": {
|
||||
"editor.defaultFormatter": "vscode.json-language-features"
|
||||
},
|
||||
"[jsonc]": {
|
||||
"editor.defaultFormatter": "vscode.json-language-features"
|
||||
},
|
||||
// Vue
|
||||
"[vue]": {
|
||||
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
|
||||
},
|
||||
// Extension: Volar
|
||||
"volar.preview.port": 3000,
|
||||
"volar.completion.preferredTagNameCase": "pascal",
|
||||
// Extension: ESLint
|
||||
"eslint.options": {
|
||||
"rulePaths": [
|
||||
"eslint-internal-rules"
|
||||
]
|
||||
},
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.fixAll.stylelint": "explicit",
|
||||
"source.organizeImports": "explicit"
|
||||
},
|
||||
"eslint.alwaysShowStatus": true,
|
||||
"eslint.format.enable": true,
|
||||
"eslint.packageManager": "pnpm",
|
||||
// Extension: Stylelint
|
||||
"stylelint.packageManager": "pnpm",
|
||||
"stylelint.validate": [
|
||||
"css",
|
||||
"scss",
|
||||
"vue"
|
||||
],
|
||||
// Extension: Spell Checker
|
||||
"cSpell.words": [
|
||||
"addressline",
|
||||
"Composables",
|
||||
"Customizer",
|
||||
"destr",
|
||||
"flagpack",
|
||||
"Iconify",
|
||||
"nuxt",
|
||||
"ofetch",
|
||||
"psudo",
|
||||
"stylelint",
|
||||
"touchless",
|
||||
"triggerer",
|
||||
"vuetify"
|
||||
],
|
||||
// Extension: Comment Anchors
|
||||
"commentAnchors.tags.anchors": {
|
||||
"ℹ️": {
|
||||
"scope": "hidden",
|
||||
// This color is taken from "Better Comments" Extension (?)
|
||||
"highlightColor": "#3498DB",
|
||||
"styleComment": true,
|
||||
"isItalic": false,
|
||||
},
|
||||
"👉": {
|
||||
"scope": "file",
|
||||
// This color is taken from "Better Comments" Extension (*)
|
||||
"highlightColor": "#98C379",
|
||||
"styleComment": true,
|
||||
"isItalic": false
|
||||
},
|
||||
"❗": {
|
||||
"scope": "hidden",
|
||||
// This color is taken from "Better Comments" Extension (*)
|
||||
"highlightColor": "#FF2D00",
|
||||
"styleComment": true,
|
||||
"isItalic": false,
|
||||
},
|
||||
},
|
||||
// Extension: fabiospampinato.vscode-highlight
|
||||
"highlight.regexFlags": "gi",
|
||||
"highlight.regexes": {
|
||||
// We flaged this for enforcing logical CSS properties
|
||||
"(100vh|translate|margin:|padding:|margin-left|margin-right|rotate|text-align|border-top|border-right|border-bottom|border-left|float|background-position|transform|width|height|top|left|bottom|right|float|clear|(p|m)(l|r)-|border-(start|end)-(start|end)-radius)": [
|
||||
{
|
||||
// "rangeBehavior": 1,
|
||||
"borderWidth": "1px",
|
||||
"borderColor": "tomato",
|
||||
"borderStyle": "solid"
|
||||
}
|
||||
],
|
||||
"(overflow-x:|overflow-y:)": [
|
||||
{
|
||||
// "rangeBehavior": 1,
|
||||
"borderWidth": "1px",
|
||||
"borderColor": "green",
|
||||
"borderStyle": "solid"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"Vue TS - DefineProps": {
|
||||
"prefix": "dprops",
|
||||
"body": [
|
||||
"defineProps<${1:Props}>()"
|
||||
],
|
||||
"description": "DefineProps in script setup"
|
||||
},
|
||||
"Vue TS - Props interface": {
|
||||
"prefix": "iprops",
|
||||
"body": [
|
||||
"interface Props {",
|
||||
" ${1}",
|
||||
"}"
|
||||
],
|
||||
"description": "Create props interface in script setup"
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
{
|
||||
"script": {
|
||||
"prefix": "vue-sfc-ts",
|
||||
"body": [
|
||||
"<script lang=\"ts\" setup>",
|
||||
"",
|
||||
"</script>",
|
||||
"",
|
||||
"<template>",
|
||||
" ",
|
||||
"</template>",
|
||||
"",
|
||||
"<style lang=\"scss\">",
|
||||
"",
|
||||
"</style>",
|
||||
""
|
||||
],
|
||||
"description": "Vue SFC Typescript"
|
||||
},
|
||||
"template": {
|
||||
"scope": "vue",
|
||||
"prefix": "template",
|
||||
"body": [
|
||||
"<template>",
|
||||
" $1",
|
||||
"</template>"
|
||||
],
|
||||
"description": "Create <template> block"
|
||||
},
|
||||
"Script setup + TS": {
|
||||
"prefix": "script-setup-ts",
|
||||
"body": [
|
||||
"<script setup lang=\"ts\">",
|
||||
"${1}",
|
||||
"</script>"
|
||||
],
|
||||
"description": "Script setup + TS"
|
||||
},
|
||||
"style": {
|
||||
"scope": "vue",
|
||||
"prefix": "style",
|
||||
"body": [
|
||||
"<style lang=\"scss\">",
|
||||
"$1",
|
||||
"</style>"
|
||||
],
|
||||
"description": "Create <style> block"
|
||||
},
|
||||
"use composable": {
|
||||
"prefix": "use-composable",
|
||||
"body": [
|
||||
"const { $2 } = ${1:useComposable}()"
|
||||
],
|
||||
"description": "We frequently uses composable in our components and writing const {} = useModule() is tedious. This snippet helps you to write it quickly."
|
||||
},
|
||||
"template interpolation": {
|
||||
"prefix": "cc",
|
||||
"body": [
|
||||
"{{ ${1} }}"
|
||||
],
|
||||
"description": "We are just making writing template interpolation easier."
|
||||
}
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
{
|
||||
"Vuetify Menu -- Parent Activator": {
|
||||
"prefix": "v-menu",
|
||||
"body": [
|
||||
"<v-btn color=\"primary\">",
|
||||
" Activator",
|
||||
" <v-menu activator=\"parent\">",
|
||||
" <v-list>",
|
||||
" <v-list-item",
|
||||
" v-for=\"(item, index) in ['apple', 'banana', 'cherry']\"",
|
||||
" :key=\"index\"",
|
||||
" :value=\"index\"",
|
||||
" >",
|
||||
" <v-list-item-title>{{ item }}</v-list-item-title>",
|
||||
" </v-list-item>",
|
||||
" </v-list>",
|
||||
" </v-menu>",
|
||||
"</v-btn>"
|
||||
],
|
||||
"description": "We use menu component with parent activator mostly because it is compact and easy to understand."
|
||||
},
|
||||
"Vuetify CSS variable": {
|
||||
"prefix": "v-css-var",
|
||||
"body": [
|
||||
"rgb(var(--v-${1:theme}))"
|
||||
],
|
||||
"description": "Vuetify CSS variable"
|
||||
},
|
||||
"Icon only button": {
|
||||
"prefix": "IconBtn",
|
||||
"body": [
|
||||
"<IconBtn>",
|
||||
" <VIcon icon=\"tabler-${1}\" />",
|
||||
"</IconBtn>"
|
||||
],
|
||||
"description": "Icon only button"
|
||||
},
|
||||
"Radio Group": {
|
||||
"prefix": "v-radio-grp",
|
||||
"body": [
|
||||
"<v-radio-group v-model=\"${1:modelValue}\">",
|
||||
" <v-radio",
|
||||
" v-for=\"item in ['apple', 'banana', 'cherry']\"",
|
||||
" :key=\"item\"",
|
||||
" :label=\"item\"",
|
||||
" :value=\"item\"",
|
||||
" />",
|
||||
"</v-radio-group>"
|
||||
],
|
||||
"description": "Radio Group"
|
||||
}
|
||||
}
|
||||
@@ -1,670 +0,0 @@
|
||||
# CLAUDE.md - Vuexy Theme Reference
|
||||
|
||||
This is the **Vuexy Vue 3 + Laravel Admin Dashboard Template** (TypeScript edition). It serves as the UI reference for the EZSCALE billing application at `../website/`. Do NOT modify files in this directory — use it as a read-only reference for components, patterns, layouts, and styling conventions.
|
||||
|
||||
## Purpose
|
||||
|
||||
When building UI for the EZSCALE site (`../website/`), consult this theme for:
|
||||
- Component patterns and TypeScript conventions
|
||||
- Vuetify component usage and defaults
|
||||
- Layout structure (vertical nav, navbar, footer)
|
||||
- Dashboard widget composition
|
||||
- Data table patterns with server-side pagination
|
||||
- Form validation patterns
|
||||
- Navigation item structure
|
||||
- Color system and theming
|
||||
- Icon usage (Tabler icons)
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Vue 3.5** with Composition API (`<script setup lang="ts">`)
|
||||
- **TypeScript 5.9** (strict mode)
|
||||
- **Vuetify 3.10** — Material Design component library
|
||||
- **Vite 7** with laravel-vite-plugin
|
||||
- **Pinia 3** — State management
|
||||
- **Vue Router 4** — File-based routing via unplugin-vue-router
|
||||
- **Vue-i18n 11** — Internationalization (en, fr, ar with RTL)
|
||||
- **CASL** — Access control (action + subject permissions)
|
||||
- **ApexCharts + Chart.js** — Charting
|
||||
- **Tabler Icons** via @iconify/vue
|
||||
- **SCSS/Sass** — Styling with Vuetify variable overrides
|
||||
- **VueUse** — Composition utilities
|
||||
- **MSW (Mock Service Worker)** — API mocking for development
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
resources/ts/ # All TypeScript source code
|
||||
├── main.ts # Entry point (creates app, registers plugins)
|
||||
├── App.vue # Root component (VApp wrapper, theme CSS vars)
|
||||
│
|
||||
├── @core/ # Core theme utilities (DO NOT MODIFY)
|
||||
│ ├── initCore.ts # Theme initialization (sync loader theme, skin changes, RTL)
|
||||
│ ├── enums.ts # Skins (Default, Bordered), Theme (light, dark, system)
|
||||
│ ├── types.ts # ExplicitThemeConfig, Options, SortItem, CustomInputContent
|
||||
│ ├── stores/config.ts # ConfigStore (theme, skin, isVerticalNavSemiDark)
|
||||
│ ├── composable/
|
||||
│ │ ├── useSkins.ts # Skin CSS class injection, layout attributes
|
||||
│ │ ├── useCookie.ts # Reactive cookie read/write
|
||||
│ │ └── createUrl.ts # Query string builder for API calls
|
||||
│ ├── components/
|
||||
│ │ └── cards/
|
||||
│ │ ├── CardStatisticsHorizontal.vue # Metric + icon (horizontal)
|
||||
│ │ └── CardStatisticsVertical.vue # Metric + icon + chart (vertical)
|
||||
│ ├── utils/
|
||||
│ │ ├── plugins.ts # Auto-registers all plugins from plugins/ directory
|
||||
│ │ ├── validators.ts # Form validators (required, email, password, url, between)
|
||||
│ │ ├── helpers.ts # isEmpty, isNullOrUndefined, isEmptyArray, isObject, isToday
|
||||
│ │ └── colorConverter.ts # hexToRgb, rgbaToHex
|
||||
│ └── libs/ # Chart.js and ApexCharts wrapper configs
|
||||
│
|
||||
├── @layouts/ # Layout system (DO NOT MODIFY)
|
||||
│ ├── config.ts # Default layout configuration
|
||||
│ ├── enums.ts # ContentWidth, NavbarType, FooterType, AppContentLayoutNav
|
||||
│ ├── types.ts # NavLink, NavGroup, NavSectionTitle, VerticalNavItems
|
||||
│ ├── symbols.ts # Vue injection symbols
|
||||
│ ├── utils.ts # Layout utility functions
|
||||
│ ├── stores/config.ts # LayoutConfigStore (navbarType, isVerticalNavCollapsed, etc.)
|
||||
│ └── components/
|
||||
│ ├── VerticalNavLayout.vue # Main layout wrapper
|
||||
│ ├── DefaultLayoutWithVerticalNav.vue # Vertical nav + navbar + content + footer
|
||||
│ ├── DefaultLayoutWithHorizontalNav.vue
|
||||
│ ├── VerticalNav.vue # Sidebar navigation
|
||||
│ ├── VerticalNavLink.vue # Single nav link item
|
||||
│ ├── VerticalNavGroup.vue # Collapsible nav group
|
||||
│ ├── VerticalNavSectionTitle.vue # Section heading/divider
|
||||
│ ├── HorizontalNav.vue # Top bar navigation
|
||||
│ ├── HorizontalNavLink.vue
|
||||
│ ├── HorizontalNavGroup.vue
|
||||
│ └── HorizontalNavPopper.vue # Dropdown for horizontal nav
|
||||
│
|
||||
├── layouts/ # Page layout templates
|
||||
│ ├── default.vue # Main layout (navbar + sidebar + content + footer)
|
||||
│ ├── blank.vue # Blank layout (auth pages, no nav)
|
||||
│ └── components/
|
||||
│ ├── DefaultLayoutWithVerticalNav.vue # Composes navbar items (search, theme switcher, notifications, user profile)
|
||||
│ ├── Footer.vue
|
||||
│ ├── NavBarNotifications.vue
|
||||
│ ├── NavSearchBar.vue
|
||||
│ ├── NavbarShortcuts.vue
|
||||
│ ├── NavbarThemeSwitcher.vue
|
||||
│ └── UserProfile.vue
|
||||
│
|
||||
├── pages/ # File-based routing (auto-generates routes)
|
||||
│ ├── login.vue # → /login (uses blank layout)
|
||||
│ ├── register.vue # → /register (uses blank layout)
|
||||
│ ├── dashboards/
|
||||
│ │ ├── analytics.vue # → /dashboards/analytics
|
||||
│ │ ├── crm.vue # → /dashboards/crm
|
||||
│ │ └── ecommerce.vue # → /dashboards/ecommerce
|
||||
│ ├── apps/
|
||||
│ │ ├── invoice/
|
||||
│ │ │ ├── list/index.vue # → /apps/invoice/list (data table + filters)
|
||||
│ │ │ ├── add/index.vue # → /apps/invoice/add (form)
|
||||
│ │ │ ├── edit/[id].vue # → /apps/invoice/edit/:id
|
||||
│ │ │ └── preview/[id].vue # → /apps/invoice/preview/:id
|
||||
│ │ ├── email/index.vue
|
||||
│ │ └── chat/index.vue
|
||||
│ └── front-pages/ # Marketing pages
|
||||
│
|
||||
├── views/ # Reusable view components (used by pages)
|
||||
│ └── dashboards/
|
||||
│ ├── analytics/ # Widget components for analytics dashboard
|
||||
│ └── ecommerce/ # Widget components for ecommerce dashboard
|
||||
│
|
||||
├── plugins/ # Vue plugins (loaded alphabetically)
|
||||
│ ├── 1.router/
|
||||
│ │ ├── index.ts # Vue Router setup with file-based routing
|
||||
│ │ ├── guards.ts # Auth guards, CASL permission checks
|
||||
│ │ └── additional-routes.ts
|
||||
│ ├── 2.pinia.ts # Pinia store initialization
|
||||
│ ├── vuetify/
|
||||
│ │ ├── index.ts # Vuetify plugin setup
|
||||
│ │ ├── theme.ts # Light/dark theme color definitions
|
||||
│ │ ├── defaults.ts # Component defaults (variants, colors, densities)
|
||||
│ │ └── icons.ts # Icon aliases (Tabler icons)
|
||||
│ ├── i18n/
|
||||
│ │ ├── index.ts # Vue-i18n setup
|
||||
│ │ └── locales/ # en.json, fr.json, ar.json
|
||||
│ ├── casl/index.ts # CASL access control plugin
|
||||
│ ├── fake-api/ # MSW mock API handlers
|
||||
│ │ ├── index.ts
|
||||
│ │ └── handlers/ # Mock endpoints by domain (invoice, auth, etc.)
|
||||
│ ├── iconify/index.ts # Iconify icon registration
|
||||
│ └── layouts.ts # Layout plugin setup
|
||||
│
|
||||
├── navigation/ # Sidebar/navbar item definitions
|
||||
│ ├── vertical/
|
||||
│ │ ├── index.ts # Exports all vertical nav items
|
||||
│ │ ├── dashboard.ts # Dashboard nav section
|
||||
│ │ └── apps-and-pages.ts # Apps & pages nav section
|
||||
│ └── horizontal/
|
||||
│ └── index.ts
|
||||
│
|
||||
├── composables/
|
||||
│ └── useApi.ts # HTTP client (createFetch + Bearer auth + JSON parsing)
|
||||
│
|
||||
└── utils/ # App-level utilities
|
||||
|
||||
resources/styles/ # SCSS stylesheets
|
||||
├── @core/
|
||||
│ ├── base/ # Global styles, Vuetify component overrides, skins
|
||||
│ └── template/ # Template-specific styles, page styles
|
||||
├── variables/
|
||||
│ └── _vuetify.scss # Vuetify SCSS variable overrides
|
||||
└── styles.scss # Main stylesheet
|
||||
|
||||
themeConfig.ts # Global theme config (title, logo, layout, navbar, footer, i18n)
|
||||
vite.config.ts # Vite build config with 10 plugins
|
||||
tsconfig.json # Strict TypeScript with path aliases
|
||||
```
|
||||
|
||||
## Color System
|
||||
|
||||
### Primary Colors
|
||||
| Color | Light | Dark | Usage |
|
||||
|-----------|-------------|-------------|--------------------------|
|
||||
| primary | `#7367F0` | `#7367F0` | Buttons, links, accents |
|
||||
| secondary | `#808390` | `#808390` | Secondary actions |
|
||||
| success | `#28C76F` | `#28C76F` | Success states, paid |
|
||||
| info | `#00BAD1` | `#00BAD1` | Info badges |
|
||||
| warning | `#FF9F43` | `#FF9F43` | Warnings, pending |
|
||||
| error | `#FF4C51` | `#FF4C51` | Errors, overdue |
|
||||
|
||||
### Background Colors
|
||||
| Surface | Light | Dark |
|
||||
|---------------|-------------|-------------|
|
||||
| background | `#F8F7FA` | `#25293C` |
|
||||
| surface | `#FFFFFF` | `#2F3349` |
|
||||
| on-background | `#2F2B3D` | `#E1DEF5` |
|
||||
| on-surface | `#2F2B3D` | `#E1DEF5` |
|
||||
|
||||
### Skins
|
||||
- **Default** — Standard background colors
|
||||
- **Bordered** — Flat backgrounds with visible borders on cards
|
||||
|
||||
## Vuetify Component Defaults
|
||||
|
||||
All components have pre-configured defaults (see `plugins/vuetify/defaults.ts`):
|
||||
|
||||
```
|
||||
VBtn → color: 'primary'
|
||||
VTextField → variant: 'outlined', density: 'comfortable', color: 'primary', hideDetails: 'auto'
|
||||
VSelect → variant: 'outlined', density: 'comfortable', color: 'primary', hideDetails: 'auto'
|
||||
VCheckbox → color: 'primary', density: 'comfortable', hideDetails: 'auto'
|
||||
VChip → label: true (square corners)
|
||||
VAvatar → variant: 'flat'
|
||||
VPagination → density: 'comfortable', variant: 'tonal'
|
||||
```
|
||||
|
||||
## Component Patterns
|
||||
|
||||
### Vue Component Structure
|
||||
```vue
|
||||
<script lang="ts" setup>
|
||||
// 1. Imports
|
||||
import { computed, ref, watch } from 'vue'
|
||||
|
||||
// 2. Type definitions
|
||||
interface Props {
|
||||
title: string
|
||||
color?: string
|
||||
items: Item[]
|
||||
}
|
||||
|
||||
interface Item {
|
||||
id: number
|
||||
name: string
|
||||
status: 'active' | 'inactive'
|
||||
}
|
||||
|
||||
// 3. Props & Emits
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
color: 'primary',
|
||||
})
|
||||
|
||||
const emit = defineEmits<{
|
||||
'update:modelValue': [value: string]
|
||||
'submit': []
|
||||
}>()
|
||||
|
||||
// 4. State
|
||||
const isLoading = ref(false)
|
||||
const searchQuery = ref('')
|
||||
|
||||
// 5. Computed
|
||||
const filteredItems = computed(() =>
|
||||
props.items.filter(item => item.name.includes(searchQuery.value))
|
||||
)
|
||||
|
||||
// 6. Methods
|
||||
const handleSubmit = async () => {
|
||||
isLoading.value = true
|
||||
try {
|
||||
await $api('/endpoint', { method: 'POST' })
|
||||
} finally {
|
||||
isLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 7. Watchers
|
||||
watch(() => props.title, (newVal) => { /* react */ })
|
||||
|
||||
// 8. Lifecycle
|
||||
onMounted(() => { /* init */ })
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<!-- Template -->
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/* Component styles */
|
||||
</style>
|
||||
```
|
||||
|
||||
### Stat Card (Horizontal)
|
||||
```vue
|
||||
<CardStatisticsHorizontal
|
||||
title="Total Revenue"
|
||||
stats="$42,389"
|
||||
icon="tabler-currency-dollar"
|
||||
color="success"
|
||||
/>
|
||||
```
|
||||
|
||||
### Stat Card (Vertical with Chart)
|
||||
```vue
|
||||
<CardStatisticsVertical
|
||||
title="Sales"
|
||||
stats="$4,679"
|
||||
icon="tabler-chart-bar"
|
||||
color="primary"
|
||||
:height="80"
|
||||
:series="[{ data: [40, 20, 65, 50, 30, 60] }]"
|
||||
:chart-options="chartOptions"
|
||||
/>
|
||||
```
|
||||
|
||||
### Dashboard Page Layout
|
||||
```vue
|
||||
<template>
|
||||
<VRow class="match-height">
|
||||
<!-- Full width chart -->
|
||||
<VCol cols="12" md="6">
|
||||
<WidgetChart />
|
||||
</VCol>
|
||||
|
||||
<!-- Two metric cards side by side -->
|
||||
<VCol cols="12" md="3" sm="6">
|
||||
<CardStatisticsHorizontal title="Revenue" stats="$42k" icon="tabler-chart-bar" color="success" />
|
||||
</VCol>
|
||||
<VCol cols="12" md="3" sm="6">
|
||||
<CardStatisticsHorizontal title="Customers" stats="1,234" icon="tabler-users" color="primary" />
|
||||
</VCol>
|
||||
|
||||
<!-- Data table -->
|
||||
<VCol cols="12">
|
||||
<RecentOrdersTable />
|
||||
</VCol>
|
||||
</VRow>
|
||||
</template>
|
||||
```
|
||||
|
||||
### Data Table (Server-Side Pagination)
|
||||
```vue
|
||||
<script lang="ts" setup>
|
||||
const searchQuery = ref('')
|
||||
const itemsPerPage = ref(10)
|
||||
const page = ref(1)
|
||||
const sortBy = ref<string>()
|
||||
const orderBy = ref<string>()
|
||||
|
||||
const headers = [
|
||||
{ title: '#', key: 'id' },
|
||||
{ title: 'Client', key: 'client' },
|
||||
{ title: 'Status', key: 'status', sortable: false },
|
||||
{ title: 'Total', key: 'total' },
|
||||
{ title: 'Actions', key: 'actions', sortable: false },
|
||||
]
|
||||
|
||||
const { data } = await useApi<any>(createUrl('/invoices', {
|
||||
query: { q: searchQuery, itemsPerPage, page, sortBy, orderBy },
|
||||
}))
|
||||
|
||||
const items = computed(() => data.value?.items ?? [])
|
||||
const totalItems = computed(() => data.value?.total ?? 0)
|
||||
|
||||
const updateOptions = (options: any) => {
|
||||
sortBy.value = options.sortBy[0]?.key
|
||||
orderBy.value = options.sortBy[0]?.order
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<VCard>
|
||||
<VCardText class="d-flex justify-space-between align-center flex-wrap gap-4">
|
||||
<AppTextField v-model="searchQuery" placeholder="Search..." style="inline-size: 250px;" />
|
||||
</VCardText>
|
||||
|
||||
<VDataTableServer
|
||||
v-model:items-per-page="itemsPerPage"
|
||||
v-model:page="page"
|
||||
:items="items"
|
||||
:items-length="totalItems"
|
||||
:headers="headers"
|
||||
class="text-no-wrap"
|
||||
@update:options="updateOptions"
|
||||
>
|
||||
<template #item.status="{ item }">
|
||||
<VChip :color="resolveStatusColor(item.status)" size="small">
|
||||
{{ item.status }}
|
||||
</VChip>
|
||||
</template>
|
||||
|
||||
<template #item.actions="{ item }">
|
||||
<IconBtn size="small">
|
||||
<VIcon icon="tabler-eye" />
|
||||
</IconBtn>
|
||||
<IconBtn size="small">
|
||||
<VIcon icon="tabler-pencil" />
|
||||
</IconBtn>
|
||||
<IconBtn size="small" color="error">
|
||||
<VIcon icon="tabler-trash" />
|
||||
</IconBtn>
|
||||
</template>
|
||||
</VDataTableServer>
|
||||
</VCard>
|
||||
</template>
|
||||
```
|
||||
|
||||
### Form with Validation
|
||||
```vue
|
||||
<script lang="ts" setup>
|
||||
import { VForm } from 'vuetify/components/VForm'
|
||||
import { emailValidator, requiredValidator } from '@validators'
|
||||
|
||||
const refForm = ref<VForm>()
|
||||
const formData = ref({
|
||||
email: '',
|
||||
password: '',
|
||||
name: '',
|
||||
})
|
||||
|
||||
const onSubmit = () => {
|
||||
refForm.value?.validate().then(({ valid }) => {
|
||||
if (valid) {
|
||||
// Submit form
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<VForm ref="refForm" @submit.prevent="onSubmit">
|
||||
<VRow>
|
||||
<VCol cols="12" md="6">
|
||||
<AppTextField
|
||||
v-model="formData.name"
|
||||
label="Name"
|
||||
:rules="[requiredValidator]"
|
||||
/>
|
||||
</VCol>
|
||||
<VCol cols="12" md="6">
|
||||
<AppTextField
|
||||
v-model="formData.email"
|
||||
label="Email"
|
||||
type="email"
|
||||
:rules="[requiredValidator, emailValidator]"
|
||||
/>
|
||||
</VCol>
|
||||
<VCol cols="12">
|
||||
<VBtn type="submit" color="primary">
|
||||
Submit
|
||||
</VBtn>
|
||||
</VCol>
|
||||
</VRow>
|
||||
</VForm>
|
||||
</template>
|
||||
```
|
||||
|
||||
### Status Resolver Pattern
|
||||
```typescript
|
||||
const resolveStatusVariant = (status: string): { color: string; icon: string } => {
|
||||
const map: Record<string, { color: string; icon: string }> = {
|
||||
active: { color: 'success', icon: 'tabler-check' },
|
||||
pending: { color: 'warning', icon: 'tabler-clock' },
|
||||
suspended: { color: 'error', icon: 'tabler-ban' },
|
||||
canceled: { color: 'secondary', icon: 'tabler-x' },
|
||||
}
|
||||
return map[status] ?? { color: 'secondary', icon: 'tabler-circle' }
|
||||
}
|
||||
```
|
||||
|
||||
## Navigation Item Types
|
||||
|
||||
```typescript
|
||||
// Single clickable link
|
||||
interface NavLink {
|
||||
title: string
|
||||
to?: string | RouteLocationRaw // Route name or object
|
||||
href?: string // External URL
|
||||
icon?: { icon: string } // Tabler icon
|
||||
badgeContent?: string // Badge text
|
||||
badgeClass?: string // Badge CSS class (e.g., 'bg-error')
|
||||
target?: '_blank' | '_self'
|
||||
action?: string // CASL action
|
||||
subject?: string // CASL subject
|
||||
disable?: boolean
|
||||
}
|
||||
|
||||
// Collapsible group with children
|
||||
interface NavGroup {
|
||||
title: string
|
||||
icon?: { icon: string }
|
||||
children: (NavLink | NavGroup)[]
|
||||
badgeContent?: string
|
||||
badgeClass?: string
|
||||
action?: string
|
||||
subject?: string
|
||||
disable?: boolean
|
||||
}
|
||||
|
||||
// Section heading/divider
|
||||
interface NavSectionTitle {
|
||||
heading: string
|
||||
action?: string
|
||||
subject?: string
|
||||
}
|
||||
```
|
||||
|
||||
### Navigation Example
|
||||
```typescript
|
||||
// navigation/vertical/dashboard.ts
|
||||
export default [
|
||||
{
|
||||
title: 'Dashboards',
|
||||
icon: { icon: 'tabler-smart-home' },
|
||||
children: [
|
||||
{ title: 'Analytics', to: 'dashboards-analytics' },
|
||||
{ title: 'CRM', to: 'dashboards-crm' },
|
||||
],
|
||||
badgeContent: '2',
|
||||
badgeClass: 'bg-error',
|
||||
},
|
||||
]
|
||||
|
||||
// navigation/vertical/apps.ts
|
||||
export default [
|
||||
{ heading: 'Apps & Pages' }, // Section title
|
||||
{
|
||||
title: 'Invoice',
|
||||
icon: { icon: 'tabler-file-invoice' },
|
||||
children: [
|
||||
{ title: 'List', to: 'apps-invoice-list' },
|
||||
{ title: 'Add', to: 'apps-invoice-add' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Users',
|
||||
icon: { icon: 'tabler-users' },
|
||||
to: 'apps-users-list',
|
||||
action: 'read', // CASL permission
|
||||
subject: 'User',
|
||||
},
|
||||
]
|
||||
```
|
||||
|
||||
## API Integration
|
||||
|
||||
### useApi Composable
|
||||
```typescript
|
||||
// Reactive fetch with Bearer token from cookie
|
||||
const { data, execute: refetch } = await useApi<ResponseType>(
|
||||
createUrl('/endpoint', {
|
||||
query: { q: searchQuery, page, itemsPerPage, status: selectedStatus },
|
||||
})
|
||||
)
|
||||
|
||||
// Non-reactive one-off request
|
||||
const response = await $api('/endpoint', {
|
||||
method: 'POST',
|
||||
body: { key: 'value' },
|
||||
onResponseError({ response }) {
|
||||
errors.value = response._data.errors
|
||||
},
|
||||
})
|
||||
|
||||
// Delete with refetch
|
||||
const deleteItem = async (id: number) => {
|
||||
await $api(`/items/${id}`, { method: 'DELETE' })
|
||||
refetch()
|
||||
}
|
||||
```
|
||||
|
||||
## Validators
|
||||
|
||||
Available at `@validators` (auto-imported):
|
||||
|
||||
| Validator | Usage |
|
||||
|------------------------|-------------------------------------------|
|
||||
| `requiredValidator` | Field is not empty |
|
||||
| `emailValidator` | Valid email format |
|
||||
| `passwordValidator` | Min 8 chars, upper, lower, digit, special |
|
||||
| `confirmedValidator` | Matches another field value |
|
||||
| `betweenValidator` | Number within min/max range |
|
||||
| `urlValidator` | Valid URL format |
|
||||
| `integerValidator` | Integer only |
|
||||
| `regexValidator` | Matches regex pattern |
|
||||
| `alphaValidator` | Alpha characters only |
|
||||
| `lengthValidator` | Exact string length |
|
||||
|
||||
## Layout Selection
|
||||
|
||||
Pages use `definePage()` macro for meta configuration:
|
||||
|
||||
```vue
|
||||
<script lang="ts" setup>
|
||||
// Use blank layout (no sidebar/navbar) — for auth pages
|
||||
definePage({
|
||||
meta: {
|
||||
layout: 'blank',
|
||||
unauthenticatedOnly: true,
|
||||
},
|
||||
})
|
||||
</script>
|
||||
```
|
||||
|
||||
Default layout (with sidebar + navbar) is used when no layout is specified.
|
||||
|
||||
## Route Guards
|
||||
|
||||
Authentication flow (`plugins/1.router/guards.ts`):
|
||||
|
||||
1. **Public routes** (`meta.public: true`) — No auth check
|
||||
2. **Unauthenticated-only** (`meta.unauthenticatedOnly: true`) — Redirect to `/` if logged in
|
||||
3. **CASL permission check** — If `canNavigate(to)` fails:
|
||||
- Logged in → redirect to `/not-authorized`
|
||||
- Not logged in → redirect to `/login?to=<path>`
|
||||
|
||||
## Auto-Imports (No Explicit Import Needed)
|
||||
|
||||
### From Vue
|
||||
`ref`, `computed`, `watch`, `watchEffect`, `onMounted`, `onUnmounted`, `h`, `nextTick`, `defineProps`, `defineEmits`, `withDefaults`, `defineAsyncComponent`
|
||||
|
||||
### From Vue Router
|
||||
`useRouter()`, `useRoute()`
|
||||
|
||||
### From VueUse
|
||||
`useWindowSize()`, `useElementHover()`, `useMediaQuery()`, `useToggle()`, `useStorage()`, `usePreferredColorScheme()`, `useWindowScroll()`
|
||||
|
||||
### From Pinia
|
||||
`defineStore()`, `storeToRefs()`
|
||||
|
||||
### From Vue-i18n
|
||||
`useI18n()`
|
||||
|
||||
### From Theme
|
||||
`useSkins()`, `useCookie()`, `createUrl()`, validators, helpers
|
||||
|
||||
## Icons
|
||||
|
||||
Uses **Tabler Icons** via Iconify. Common icons:
|
||||
|
||||
| Icon Name | Usage |
|
||||
|--------------------------|--------------------|
|
||||
| `tabler-smart-home` | Dashboard |
|
||||
| `tabler-users` | Users/customers |
|
||||
| `tabler-file-invoice` | Invoices |
|
||||
| `tabler-shopping-cart` | Orders/commerce |
|
||||
| `tabler-chart-bar` | Analytics/charts |
|
||||
| `tabler-currency-dollar` | Revenue/billing |
|
||||
| `tabler-server` | Servers/services |
|
||||
| `tabler-shield-check` | Security |
|
||||
| `tabler-settings` | Settings |
|
||||
| `tabler-bell` | Notifications |
|
||||
| `tabler-check` | Success/confirmed |
|
||||
| `tabler-x` | Close/cancel |
|
||||
| `tabler-pencil` | Edit |
|
||||
| `tabler-trash` | Delete |
|
||||
| `tabler-eye` | View/preview |
|
||||
| `tabler-plus` | Add/create |
|
||||
| `tabler-chevron-down` | Dropdown |
|
||||
| `tabler-chevron-right` | Navigate |
|
||||
| `tabler-menu-2` | Mobile menu toggle |
|
||||
| `tabler-circle` | Default nav icon |
|
||||
|
||||
Usage: `<VIcon icon="tabler-smart-home" size="26" />`
|
||||
|
||||
## TypeScript Path Aliases
|
||||
|
||||
```
|
||||
@/* → resources/ts/*
|
||||
@themeConfig → themeConfig.ts
|
||||
@layouts/* → resources/ts/@layouts/*
|
||||
@core/* → resources/ts/@core/*
|
||||
@images/* → resources/images/*
|
||||
@styles/* → resources/styles/*
|
||||
@validators → resources/ts/@core/utils/validators
|
||||
```
|
||||
|
||||
## Key Files to Reference
|
||||
|
||||
| Need | Look at |
|
||||
|-------------------------------|------------------------------------------------------|
|
||||
| Dashboard layout | `pages/dashboards/analytics.vue` |
|
||||
| Data table with filters | `pages/apps/invoice/list/index.vue` |
|
||||
| Form with validation | `pages/apps/invoice/add/index.vue` |
|
||||
| Auth page (login) | `pages/login.vue` |
|
||||
| Stat cards | `@core/components/cards/CardStatistics*.vue` |
|
||||
| Sidebar navigation | `layouts/components/DefaultLayoutWithVerticalNav.vue` |
|
||||
| Nav item definitions | `navigation/vertical/dashboard.ts` |
|
||||
| Theme colors | `plugins/vuetify/theme.ts` |
|
||||
| Component defaults | `plugins/vuetify/defaults.ts` |
|
||||
| API fetching | `composables/useApi.ts` |
|
||||
| Form validators | `@core/utils/validators.ts` |
|
||||
| Type definitions | `@core/types.ts`, `views/apps/invoice/types.ts` |
|
||||
| Route guards | `plugins/1.router/guards.ts` |
|
||||
| Theme config | `themeConfig.ts` |
|
||||
| Blank layout (auth) | `layouts/blank.vue` |
|
||||
| Main layout | `layouts/default.vue` |
|
||||
@@ -1,33 +0,0 @@
|
||||
# vue
|
||||
|
||||
This template should help get you started developing with Vue 3 in Vite.
|
||||
|
||||
## Recommended IDE Setup
|
||||
|
||||
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
|
||||
|
||||
## Type Support for `.vue` Imports in TS
|
||||
|
||||
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types.
|
||||
|
||||
## Customize configuration
|
||||
|
||||
See [Vite Configuration Reference](https://vite.dev/config/).
|
||||
|
||||
## Project Setup
|
||||
|
||||
```sh
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### Compile and Hot-Reload for Development
|
||||
|
||||
```sh
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
### Type-Check, Compile and Minify for Production
|
||||
|
||||
```sh
|
||||
pnpm build
|
||||
```
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
/** @use HasFactory<\Database\Factories\UserFactory> */
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var list<string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'email',
|
||||
'password',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var list<string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'password',
|
||||
'remember_token',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the attributes that should be cast.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
// Register the Composer autoloader...
|
||||
require __DIR__.'/vendor/autoload.php';
|
||||
|
||||
// Bootstrap Laravel and handle the command...
|
||||
/** @var Application $app */
|
||||
$app = require_once __DIR__.'/bootstrap/app.php';
|
||||
|
||||
$status = $app->handleCommand(new ArgvInput);
|
||||
|
||||
exit($status);
|
||||
@@ -1,726 +0,0 @@
|
||||
/* eslint-disable */
|
||||
/* prettier-ignore */
|
||||
// @ts-nocheck
|
||||
// noinspection JSUnusedGlobalSymbols
|
||||
// Generated by unplugin-auto-import
|
||||
// biome-ignore lint: disable
|
||||
export {}
|
||||
declare global {
|
||||
const $api: typeof import('./src/utils/api')['$api']
|
||||
const COOKIE_MAX_AGE_1_YEAR: typeof import('./src/utils/constants')['COOKIE_MAX_AGE_1_YEAR']
|
||||
const CreateUrl: typeof import('./src/@core/composable/CreateUrl')['CreateUrl']
|
||||
const EffectScope: typeof import('vue')['EffectScope']
|
||||
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
|
||||
const alphaDashValidator: typeof import('./src/@core/utils/validators')['alphaDashValidator']
|
||||
const alphaValidator: typeof import('./src/@core/utils/validators')['alphaValidator']
|
||||
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
|
||||
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
|
||||
const avatarText: typeof import('./src/@core/utils/formatters')['avatarText']
|
||||
const betweenValidator: typeof import('./src/@core/utils/validators')['betweenValidator']
|
||||
const computed: typeof import('vue')['computed']
|
||||
const computedAsync: typeof import('@vueuse/core')['computedAsync']
|
||||
const computedEager: typeof import('@vueuse/core')['computedEager']
|
||||
const computedInject: typeof import('@vueuse/core')['computedInject']
|
||||
const computedWithControl: typeof import('@vueuse/core')['computedWithControl']
|
||||
const confirmedValidator: typeof import('./src/@core/utils/validators')['confirmedValidator']
|
||||
const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
|
||||
const controlledRef: typeof import('@vueuse/core')['controlledRef']
|
||||
const createApp: typeof import('vue')['createApp']
|
||||
const createEventHook: typeof import('@vueuse/core')['createEventHook']
|
||||
const createGenericProjection: typeof import('@vueuse/math')['createGenericProjection']
|
||||
const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
|
||||
const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
|
||||
const createPinia: typeof import('pinia')['createPinia']
|
||||
const createProjection: typeof import('@vueuse/math')['createProjection']
|
||||
const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
|
||||
const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate']
|
||||
const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
|
||||
const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise']
|
||||
const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
|
||||
const createUrl: typeof import('./src/@core/composable/createUrl')['createUrl']
|
||||
const customRef: typeof import('vue')['customRef']
|
||||
const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
|
||||
const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
|
||||
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
||||
const defineComponent: typeof import('vue')['defineComponent']
|
||||
const defineLoader: typeof import('vue-router/auto')['defineLoader']
|
||||
const definePage: typeof import('unplugin-vue-router/runtime')['definePage']
|
||||
const defineStore: typeof import('pinia')['defineStore']
|
||||
const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
|
||||
const effectScope: typeof import('vue')['effectScope']
|
||||
const emailValidator: typeof import('./src/@core/utils/validators')['emailValidator']
|
||||
const extendRef: typeof import('@vueuse/core')['extendRef']
|
||||
const formatDate: typeof import('./src/@core/utils/formatters')['formatDate']
|
||||
const formatDateToMonthShort: typeof import('./src/@core/utils/formatters')['formatDateToMonthShort']
|
||||
const getActivePinia: typeof import('pinia')['getActivePinia']
|
||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
||||
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
||||
const h: typeof import('vue')['h']
|
||||
const hexToRgb: typeof import('./src/@core/utils/colorConverter')['hexToRgb']
|
||||
const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
|
||||
const inject: typeof import('vue')['inject']
|
||||
const injectLocal: typeof import('@vueuse/core')['injectLocal']
|
||||
const integerValidator: typeof import('./src/@core/utils/validators')['integerValidator']
|
||||
const isDarkPreferred: typeof import('./src/@core/composable/useThemeConfig')['isDarkPreferred']
|
||||
const isDefined: typeof import('@vueuse/core')['isDefined']
|
||||
const isEmpty: typeof import('./src/@core/utils/helpers')['isEmpty']
|
||||
const isEmptyArray: typeof import('./src/@core/utils/helpers')['isEmptyArray']
|
||||
const isNullOrUndefined: typeof import('./src/@core/utils/helpers')['isNullOrUndefined']
|
||||
const isObject: typeof import('./src/@core/utils/helpers')['isObject']
|
||||
const isProxy: typeof import('vue')['isProxy']
|
||||
const isReactive: typeof import('vue')['isReactive']
|
||||
const isReadonly: typeof import('vue')['isReadonly']
|
||||
const isRef: typeof import('vue')['isRef']
|
||||
const isToday: typeof import('./src/@core/utils/helpers')['isToday']
|
||||
const kFormatter: typeof import('./src/@core/utils/formatters')['kFormatter']
|
||||
const lengthValidator: typeof import('./src/@core/utils/validators')['lengthValidator']
|
||||
const logicAnd: typeof import('@vueuse/math')['logicAnd']
|
||||
const logicNot: typeof import('@vueuse/math')['logicNot']
|
||||
const logicOr: typeof import('@vueuse/math')['logicOr']
|
||||
const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
|
||||
const mapActions: typeof import('pinia')['mapActions']
|
||||
const mapGetters: typeof import('pinia')['mapGetters']
|
||||
const mapState: typeof import('pinia')['mapState']
|
||||
const mapStores: typeof import('pinia')['mapStores']
|
||||
const mapWritableState: typeof import('pinia')['mapWritableState']
|
||||
const markRaw: typeof import('vue')['markRaw']
|
||||
const nextTick: typeof import('vue')['nextTick']
|
||||
const onActivated: typeof import('vue')['onActivated']
|
||||
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
||||
const onBeforeRouteLeave: typeof import('vue-router/auto')['onBeforeRouteLeave']
|
||||
const onBeforeRouteUpdate: typeof import('vue-router/auto')['onBeforeRouteUpdate']
|
||||
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
||||
const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
|
||||
const onDeactivated: typeof import('vue')['onDeactivated']
|
||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
||||
const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
|
||||
const onLongPress: typeof import('@vueuse/core')['onLongPress']
|
||||
const onMounted: typeof import('vue')['onMounted']
|
||||
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
||||
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
||||
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
||||
const onStartTyping: typeof import('@vueuse/core')['onStartTyping']
|
||||
const onUnmounted: typeof import('vue')['onUnmounted']
|
||||
const onUpdated: typeof import('vue')['onUpdated']
|
||||
const onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
|
||||
const paginationMeta: typeof import('./src/utils/paginationMeta')['paginationMeta']
|
||||
const passwordValidator: typeof import('./src/@core/utils/validators')['passwordValidator']
|
||||
const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
|
||||
const prefixWithPlus: typeof import('./src/@core/utils/formatters')['prefixWithPlus']
|
||||
const provide: typeof import('vue')['provide']
|
||||
const provideLocal: typeof import('@vueuse/core')['provideLocal']
|
||||
const reactify: typeof import('@vueuse/core')['reactify']
|
||||
const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
|
||||
const reactive: typeof import('vue')['reactive']
|
||||
const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']
|
||||
const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']
|
||||
const reactivePick: typeof import('@vueuse/core')['reactivePick']
|
||||
const readonly: typeof import('vue')['readonly']
|
||||
const ref: typeof import('vue')['ref']
|
||||
const refAutoReset: typeof import('@vueuse/core')['refAutoReset']
|
||||
const refDebounced: typeof import('@vueuse/core')['refDebounced']
|
||||
const refDefault: typeof import('@vueuse/core')['refDefault']
|
||||
const refThrottled: typeof import('@vueuse/core')['refThrottled']
|
||||
const refWithControl: typeof import('@vueuse/core')['refWithControl']
|
||||
const regexValidator: typeof import('./src/@core/utils/validators')['regexValidator']
|
||||
const registerPlugins: typeof import('./src/@core/utils/plugins')['registerPlugins']
|
||||
const registerPlugins_: typeof import('./src/@core/utils/plugins')['registerPlugins_']
|
||||
const requiredValidator: typeof import('./src/@core/utils/validators')['requiredValidator']
|
||||
const resolveComponent: typeof import('vue')['resolveComponent']
|
||||
const resolveRef: typeof import('@vueuse/core')['resolveRef']
|
||||
const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
|
||||
const resolveVuetifyTheme: typeof import('./src/@core/utils/vuetify')['resolveVuetifyTheme']
|
||||
const rgbaToHex: typeof import('./src/@core/utils/colorConverter')['rgbaToHex']
|
||||
const setActivePinia: typeof import('pinia')['setActivePinia']
|
||||
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
|
||||
const shallowReactive: typeof import('vue')['shallowReactive']
|
||||
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
||||
const shallowRef: typeof import('vue')['shallowRef']
|
||||
const storeToRefs: typeof import('pinia')['storeToRefs']
|
||||
const syncRef: typeof import('@vueuse/core')['syncRef']
|
||||
const syncRefs: typeof import('@vueuse/core')['syncRefs']
|
||||
const templateRef: typeof import('@vueuse/core')['templateRef']
|
||||
const throttledRef: typeof import('@vueuse/core')['throttledRef']
|
||||
const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
|
||||
const toRaw: typeof import('vue')['toRaw']
|
||||
const toReactive: typeof import('@vueuse/core')['toReactive']
|
||||
const toRef: typeof import('vue')['toRef']
|
||||
const toRefs: typeof import('vue')['toRefs']
|
||||
const toValue: typeof import('vue')['toValue']
|
||||
const triggerRef: typeof import('vue')['triggerRef']
|
||||
const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
|
||||
const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
|
||||
const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
|
||||
const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
|
||||
const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
|
||||
const unref: typeof import('vue')['unref']
|
||||
const unrefElement: typeof import('@vueuse/core')['unrefElement']
|
||||
const until: typeof import('@vueuse/core')['until']
|
||||
const urlValidator: typeof import('./src/@core/utils/validators')['urlValidator']
|
||||
const useAbility: typeof import('./src/plugins/casl/composables/useAbility')['useAbility']
|
||||
const useAbs: typeof import('@vueuse/math')['useAbs']
|
||||
const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
|
||||
const useAnimate: typeof import('@vueuse/core')['useAnimate']
|
||||
const useApi: typeof import('./src/composables/useApi')['useApi']
|
||||
const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference']
|
||||
const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
|
||||
const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
|
||||
const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
|
||||
const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
|
||||
const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast']
|
||||
const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes']
|
||||
const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
|
||||
const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
|
||||
const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
|
||||
const useArraySome: typeof import('@vueuse/core')['useArraySome']
|
||||
const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique']
|
||||
const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
|
||||
const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
|
||||
const useAttrs: typeof import('vue')['useAttrs']
|
||||
const useAverage: typeof import('@vueuse/math')['useAverage']
|
||||
const useBase64: typeof import('@vueuse/core')['useBase64']
|
||||
const useBattery: typeof import('@vueuse/core')['useBattery']
|
||||
const useBluetooth: typeof import('@vueuse/core')['useBluetooth']
|
||||
const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
|
||||
const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']
|
||||
const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
|
||||
const useCached: typeof import('@vueuse/core')['useCached']
|
||||
const useCeil: typeof import('@vueuse/math')['useCeil']
|
||||
const useClamp: typeof import('@vueuse/math')['useClamp']
|
||||
const useClipboard: typeof import('@vueuse/core')['useClipboard']
|
||||
const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems']
|
||||
const useCloned: typeof import('@vueuse/core')['useCloned']
|
||||
const useColorMode: typeof import('@vueuse/core')['useColorMode']
|
||||
const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
|
||||
const useCookie: typeof import('./src/@core/composable/useCookie')['useCookie']
|
||||
const useCounter: typeof import('@vueuse/core')['useCounter']
|
||||
const useCssModule: typeof import('vue')['useCssModule']
|
||||
const useCssVar: typeof import('@vueuse/core')['useCssVar']
|
||||
const useCssVars: typeof import('vue')['useCssVars']
|
||||
const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']
|
||||
const useCustomFetch: typeof import('./src/composables/useFetch')['useCustomFetch']
|
||||
const useCycleList: typeof import('@vueuse/core')['useCycleList']
|
||||
const useDark: typeof import('@vueuse/core')['useDark']
|
||||
const useDateFormat: typeof import('@vueuse/core')['useDateFormat']
|
||||
const useDebounce: typeof import('@vueuse/core')['useDebounce']
|
||||
const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
|
||||
const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
|
||||
const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
|
||||
const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
|
||||
const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
|
||||
const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
|
||||
const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
|
||||
const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
|
||||
const useDraggable: typeof import('@vueuse/core')['useDraggable']
|
||||
const useDropZone: typeof import('@vueuse/core')['useDropZone']
|
||||
const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
|
||||
const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']
|
||||
const useElementHover: typeof import('@vueuse/core')['useElementHover']
|
||||
const useElementSize: typeof import('@vueuse/core')['useElementSize']
|
||||
const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
|
||||
const useEventBus: typeof import('@vueuse/core')['useEventBus']
|
||||
const useEventListener: typeof import('@vueuse/core')['useEventListener']
|
||||
const useEventSource: typeof import('@vueuse/core')['useEventSource']
|
||||
const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
|
||||
const useFavicon: typeof import('@vueuse/core')['useFavicon']
|
||||
const useFetch: typeof import('@vueuse/core')['useFetch']
|
||||
const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
|
||||
const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
|
||||
const useFloor: typeof import('@vueuse/math')['useFloor']
|
||||
const useFocus: typeof import('@vueuse/core')['useFocus']
|
||||
const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
|
||||
const useFps: typeof import('@vueuse/core')['useFps']
|
||||
const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
|
||||
const useGamepad: typeof import('@vueuse/core')['useGamepad']
|
||||
const useGenerateImageVariant: typeof import('./src/@core/composable/useGenerateImageVariant')['useGenerateImageVariant']
|
||||
const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
|
||||
const useI18n: typeof import('vue-i18n')['useI18n']
|
||||
const useId: typeof import('vue')['useId']
|
||||
const useIdle: typeof import('@vueuse/core')['useIdle']
|
||||
const useImage: typeof import('@vueuse/core')['useImage']
|
||||
const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
|
||||
const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
|
||||
const useInterval: typeof import('@vueuse/core')['useInterval']
|
||||
const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
|
||||
const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
|
||||
const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
|
||||
const useLink: typeof import('vue-router/auto')['useLink']
|
||||
const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
|
||||
const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
|
||||
const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
|
||||
const useMath: typeof import('@vueuse/math')['useMath']
|
||||
const useMax: typeof import('@vueuse/math')['useMax']
|
||||
const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
|
||||
const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
|
||||
const useMemoize: typeof import('@vueuse/core')['useMemoize']
|
||||
const useMemory: typeof import('@vueuse/core')['useMemory']
|
||||
const useMin: typeof import('@vueuse/math')['useMin']
|
||||
const useModel: typeof import('vue')['useModel']
|
||||
const useMounted: typeof import('@vueuse/core')['useMounted']
|
||||
const useMouse: typeof import('@vueuse/core')['useMouse']
|
||||
const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
|
||||
const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
|
||||
const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
|
||||
const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']
|
||||
const useNetwork: typeof import('@vueuse/core')['useNetwork']
|
||||
const useNow: typeof import('@vueuse/core')['useNow']
|
||||
const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']
|
||||
const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']
|
||||
const useOnline: typeof import('@vueuse/core')['useOnline']
|
||||
const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
|
||||
const useParallax: typeof import('@vueuse/core')['useParallax']
|
||||
const useParentElement: typeof import('@vueuse/core')['useParentElement']
|
||||
const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver']
|
||||
const usePermission: typeof import('@vueuse/core')['usePermission']
|
||||
const usePointer: typeof import('@vueuse/core')['usePointer']
|
||||
const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
|
||||
const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
|
||||
const usePrecision: typeof import('@vueuse/math')['usePrecision']
|
||||
const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
|
||||
const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']
|
||||
const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
|
||||
const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
|
||||
const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
|
||||
const usePrevious: typeof import('@vueuse/core')['usePrevious']
|
||||
const useProjection: typeof import('@vueuse/math')['useProjection']
|
||||
const useRafFn: typeof import('@vueuse/core')['useRafFn']
|
||||
const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
|
||||
const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
|
||||
const useResponsiveLeftSidebar: typeof import('./src/@core/composable/useResponsiveSidebar')['useResponsiveLeftSidebar']
|
||||
const useRound: typeof import('@vueuse/math')['useRound']
|
||||
const useRoute: typeof import('vue-router/auto')['useRoute']
|
||||
const useRouter: typeof import('vue-router/auto')['useRouter']
|
||||
const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
|
||||
const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
|
||||
const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
|
||||
const useScroll: typeof import('@vueuse/core')['useScroll']
|
||||
const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
|
||||
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
|
||||
const useShare: typeof import('@vueuse/core')['useShare']
|
||||
const useSkins: typeof import('./src/@core/composable/useSkins')['useSkins']
|
||||
const useSlots: typeof import('vue')['useSlots']
|
||||
const useSorted: typeof import('@vueuse/core')['useSorted']
|
||||
const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
|
||||
const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
|
||||
const useStepper: typeof import('@vueuse/core')['useStepper']
|
||||
const useStorage: typeof import('@vueuse/core')['useStorage']
|
||||
const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']
|
||||
const useStyleTag: typeof import('@vueuse/core')['useStyleTag']
|
||||
const useSum: typeof import('@vueuse/math')['useSum']
|
||||
const useSupported: typeof import('@vueuse/core')['useSupported']
|
||||
const useSwipe: typeof import('@vueuse/core')['useSwipe']
|
||||
const useTemplateRef: typeof import('vue')['useTemplateRef']
|
||||
const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
|
||||
const useTextDirection: typeof import('@vueuse/core')['useTextDirection']
|
||||
const useTextSelection: typeof import('@vueuse/core')['useTextSelection']
|
||||
const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']
|
||||
const useThemeConfig: typeof import('./src/@core/composable/useThemeConfig')['useThemeConfig']
|
||||
const useThrottle: typeof import('@vueuse/core')['useThrottle']
|
||||
const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
|
||||
const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
|
||||
const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
|
||||
const useTimeout: typeof import('@vueuse/core')['useTimeout']
|
||||
const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
|
||||
const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']
|
||||
const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
|
||||
const useTitle: typeof import('@vueuse/core')['useTitle']
|
||||
const useToNumber: typeof import('@vueuse/core')['useToNumber']
|
||||
const useToString: typeof import('@vueuse/core')['useToString']
|
||||
const useToggle: typeof import('@vueuse/core')['useToggle']
|
||||
const useTransition: typeof import('@vueuse/core')['useTransition']
|
||||
const useTrunc: typeof import('@vueuse/math')['useTrunc']
|
||||
const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
|
||||
const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
|
||||
const useVModel: typeof import('@vueuse/core')['useVModel']
|
||||
const useVModels: typeof import('@vueuse/core')['useVModels']
|
||||
const useVibrate: typeof import('@vueuse/core')['useVibrate']
|
||||
const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
|
||||
const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
|
||||
const useWebNotification: typeof import('@vueuse/core')['useWebNotification']
|
||||
const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
|
||||
const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
|
||||
const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
|
||||
const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
|
||||
const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
|
||||
const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
|
||||
const usecreateUrl: typeof import('./src/@core/composable/usecreateUrl')['usecreateUrl']
|
||||
const watch: typeof import('vue')['watch']
|
||||
const watchArray: typeof import('@vueuse/core')['watchArray']
|
||||
const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
|
||||
const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
|
||||
const watchDeep: typeof import('@vueuse/core')['watchDeep']
|
||||
const watchEffect: typeof import('vue')['watchEffect']
|
||||
const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
|
||||
const watchImmediate: typeof import('@vueuse/core')['watchImmediate']
|
||||
const watchOnce: typeof import('@vueuse/core')['watchOnce']
|
||||
const watchPausable: typeof import('@vueuse/core')['watchPausable']
|
||||
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
||||
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
||||
const watchThrottled: typeof import('@vueuse/core')['watchThrottled']
|
||||
const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']
|
||||
const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
|
||||
const whenever: typeof import('@vueuse/core')['whenever']
|
||||
}
|
||||
// for type re-export
|
||||
declare global {
|
||||
// @ts-ignore
|
||||
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
||||
import('vue')
|
||||
}
|
||||
|
||||
// for vue template auto import
|
||||
import { UnwrapRef } from 'vue'
|
||||
declare module 'vue' {
|
||||
interface GlobalComponents {}
|
||||
interface ComponentCustomProperties {
|
||||
readonly $api: UnwrapRef<typeof import('./src/utils/api')['$api']>
|
||||
readonly COOKIE_MAX_AGE_1_YEAR: UnwrapRef<typeof import('./src/utils/constants')['COOKIE_MAX_AGE_1_YEAR']>
|
||||
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
|
||||
readonly acceptHMRUpdate: UnwrapRef<typeof import('pinia')['acceptHMRUpdate']>
|
||||
readonly alphaDashValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['alphaDashValidator']>
|
||||
readonly alphaValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['alphaValidator']>
|
||||
readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']>
|
||||
readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']>
|
||||
readonly avatarText: UnwrapRef<typeof import('./src/@core/utils/formatters')['avatarText']>
|
||||
readonly betweenValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['betweenValidator']>
|
||||
readonly computed: UnwrapRef<typeof import('vue')['computed']>
|
||||
readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']>
|
||||
readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']>
|
||||
readonly computedInject: UnwrapRef<typeof import('@vueuse/core')['computedInject']>
|
||||
readonly computedWithControl: UnwrapRef<typeof import('@vueuse/core')['computedWithControl']>
|
||||
readonly confirmedValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['confirmedValidator']>
|
||||
readonly controlledComputed: UnwrapRef<typeof import('@vueuse/core')['controlledComputed']>
|
||||
readonly controlledRef: UnwrapRef<typeof import('@vueuse/core')['controlledRef']>
|
||||
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
|
||||
readonly createEventHook: UnwrapRef<typeof import('@vueuse/core')['createEventHook']>
|
||||
readonly createGenericProjection: UnwrapRef<typeof import('@vueuse/math')['createGenericProjection']>
|
||||
readonly createGlobalState: UnwrapRef<typeof import('@vueuse/core')['createGlobalState']>
|
||||
readonly createInjectionState: UnwrapRef<typeof import('@vueuse/core')['createInjectionState']>
|
||||
readonly createPinia: UnwrapRef<typeof import('pinia')['createPinia']>
|
||||
readonly createProjection: UnwrapRef<typeof import('@vueuse/math')['createProjection']>
|
||||
readonly createReactiveFn: UnwrapRef<typeof import('@vueuse/core')['createReactiveFn']>
|
||||
readonly createReusableTemplate: UnwrapRef<typeof import('@vueuse/core')['createReusableTemplate']>
|
||||
readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']>
|
||||
readonly createTemplatePromise: UnwrapRef<typeof import('@vueuse/core')['createTemplatePromise']>
|
||||
readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']>
|
||||
readonly createUrl: UnwrapRef<typeof import('./src/@core/composable/createUrl')['createUrl']>
|
||||
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
|
||||
readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']>
|
||||
readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']>
|
||||
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
|
||||
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
|
||||
readonly definePage: UnwrapRef<typeof import('unplugin-vue-router/runtime')['definePage']>
|
||||
readonly defineStore: UnwrapRef<typeof import('pinia')['defineStore']>
|
||||
readonly eagerComputed: UnwrapRef<typeof import('@vueuse/core')['eagerComputed']>
|
||||
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
|
||||
readonly emailValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['emailValidator']>
|
||||
readonly extendRef: UnwrapRef<typeof import('@vueuse/core')['extendRef']>
|
||||
readonly formatDate: UnwrapRef<typeof import('./src/@core/utils/formatters')['formatDate']>
|
||||
readonly formatDateToMonthShort: UnwrapRef<typeof import('./src/@core/utils/formatters')['formatDateToMonthShort']>
|
||||
readonly getActivePinia: UnwrapRef<typeof import('pinia')['getActivePinia']>
|
||||
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
|
||||
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
|
||||
readonly h: UnwrapRef<typeof import('vue')['h']>
|
||||
readonly hexToRgb: UnwrapRef<typeof import('./src/@core/utils/colorConverter')['hexToRgb']>
|
||||
readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
|
||||
readonly inject: UnwrapRef<typeof import('vue')['inject']>
|
||||
readonly injectLocal: UnwrapRef<typeof import('@vueuse/core')['injectLocal']>
|
||||
readonly integerValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['integerValidator']>
|
||||
readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']>
|
||||
readonly isEmpty: UnwrapRef<typeof import('./src/@core/utils/helpers')['isEmpty']>
|
||||
readonly isEmptyArray: UnwrapRef<typeof import('./src/@core/utils/helpers')['isEmptyArray']>
|
||||
readonly isNullOrUndefined: UnwrapRef<typeof import('./src/@core/utils/helpers')['isNullOrUndefined']>
|
||||
readonly isObject: UnwrapRef<typeof import('./src/@core/utils/helpers')['isObject']>
|
||||
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
|
||||
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
|
||||
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
|
||||
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
|
||||
readonly isToday: UnwrapRef<typeof import('./src/@core/utils/helpers')['isToday']>
|
||||
readonly kFormatter: UnwrapRef<typeof import('./src/@core/utils/formatters')['kFormatter']>
|
||||
readonly lengthValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['lengthValidator']>
|
||||
readonly logicAnd: UnwrapRef<typeof import('@vueuse/math')['logicAnd']>
|
||||
readonly logicNot: UnwrapRef<typeof import('@vueuse/math')['logicNot']>
|
||||
readonly logicOr: UnwrapRef<typeof import('@vueuse/math')['logicOr']>
|
||||
readonly makeDestructurable: UnwrapRef<typeof import('@vueuse/core')['makeDestructurable']>
|
||||
readonly mapActions: UnwrapRef<typeof import('pinia')['mapActions']>
|
||||
readonly mapGetters: UnwrapRef<typeof import('pinia')['mapGetters']>
|
||||
readonly mapState: UnwrapRef<typeof import('pinia')['mapState']>
|
||||
readonly mapStores: UnwrapRef<typeof import('pinia')['mapStores']>
|
||||
readonly mapWritableState: UnwrapRef<typeof import('pinia')['mapWritableState']>
|
||||
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
|
||||
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
|
||||
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
|
||||
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
|
||||
readonly onBeforeRouteLeave: UnwrapRef<typeof import('vue-router/auto')['onBeforeRouteLeave']>
|
||||
readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router/auto')['onBeforeRouteUpdate']>
|
||||
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
|
||||
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
|
||||
readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']>
|
||||
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
|
||||
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
|
||||
readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']>
|
||||
readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']>
|
||||
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
|
||||
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
|
||||
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
|
||||
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
|
||||
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
|
||||
readonly onStartTyping: UnwrapRef<typeof import('@vueuse/core')['onStartTyping']>
|
||||
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
|
||||
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
|
||||
readonly onWatcherCleanup: UnwrapRef<typeof import('vue')['onWatcherCleanup']>
|
||||
readonly paginationMeta: UnwrapRef<typeof import('./src/utils/paginationMeta')['paginationMeta']>
|
||||
readonly passwordValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['passwordValidator']>
|
||||
readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
|
||||
readonly prefixWithPlus: UnwrapRef<typeof import('./src/@core/utils/formatters')['prefixWithPlus']>
|
||||
readonly provide: UnwrapRef<typeof import('vue')['provide']>
|
||||
readonly provideLocal: UnwrapRef<typeof import('@vueuse/core')['provideLocal']>
|
||||
readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']>
|
||||
readonly reactifyObject: UnwrapRef<typeof import('@vueuse/core')['reactifyObject']>
|
||||
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
|
||||
readonly reactiveComputed: UnwrapRef<typeof import('@vueuse/core')['reactiveComputed']>
|
||||
readonly reactiveOmit: UnwrapRef<typeof import('@vueuse/core')['reactiveOmit']>
|
||||
readonly reactivePick: UnwrapRef<typeof import('@vueuse/core')['reactivePick']>
|
||||
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
|
||||
readonly ref: UnwrapRef<typeof import('vue')['ref']>
|
||||
readonly refAutoReset: UnwrapRef<typeof import('@vueuse/core')['refAutoReset']>
|
||||
readonly refDebounced: UnwrapRef<typeof import('@vueuse/core')['refDebounced']>
|
||||
readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']>
|
||||
readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']>
|
||||
readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']>
|
||||
readonly regexValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['regexValidator']>
|
||||
readonly registerPlugins: UnwrapRef<typeof import('./src/@core/utils/plugins')['registerPlugins']>
|
||||
readonly requiredValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['requiredValidator']>
|
||||
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
|
||||
readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']>
|
||||
readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']>
|
||||
readonly resolveVuetifyTheme: UnwrapRef<typeof import('./src/@core/utils/vuetify')['resolveVuetifyTheme']>
|
||||
readonly rgbaToHex: UnwrapRef<typeof import('./src/@core/utils/colorConverter')['rgbaToHex']>
|
||||
readonly setActivePinia: UnwrapRef<typeof import('pinia')['setActivePinia']>
|
||||
readonly setMapStoreSuffix: UnwrapRef<typeof import('pinia')['setMapStoreSuffix']>
|
||||
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
|
||||
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
|
||||
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
|
||||
readonly storeToRefs: UnwrapRef<typeof import('pinia')['storeToRefs']>
|
||||
readonly syncRef: UnwrapRef<typeof import('@vueuse/core')['syncRef']>
|
||||
readonly syncRefs: UnwrapRef<typeof import('@vueuse/core')['syncRefs']>
|
||||
readonly templateRef: UnwrapRef<typeof import('@vueuse/core')['templateRef']>
|
||||
readonly throttledRef: UnwrapRef<typeof import('@vueuse/core')['throttledRef']>
|
||||
readonly throttledWatch: UnwrapRef<typeof import('@vueuse/core')['throttledWatch']>
|
||||
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
|
||||
readonly toReactive: UnwrapRef<typeof import('@vueuse/core')['toReactive']>
|
||||
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
|
||||
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
|
||||
readonly toValue: UnwrapRef<typeof import('vue')['toValue']>
|
||||
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
|
||||
readonly tryOnBeforeMount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeMount']>
|
||||
readonly tryOnBeforeUnmount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeUnmount']>
|
||||
readonly tryOnMounted: UnwrapRef<typeof import('@vueuse/core')['tryOnMounted']>
|
||||
readonly tryOnScopeDispose: UnwrapRef<typeof import('@vueuse/core')['tryOnScopeDispose']>
|
||||
readonly tryOnUnmounted: UnwrapRef<typeof import('@vueuse/core')['tryOnUnmounted']>
|
||||
readonly unref: UnwrapRef<typeof import('vue')['unref']>
|
||||
readonly unrefElement: UnwrapRef<typeof import('@vueuse/core')['unrefElement']>
|
||||
readonly until: UnwrapRef<typeof import('@vueuse/core')['until']>
|
||||
readonly urlValidator: UnwrapRef<typeof import('./src/@core/utils/validators')['urlValidator']>
|
||||
readonly useAbility: UnwrapRef<typeof import('./src/plugins/casl/composables/useAbility')['useAbility']>
|
||||
readonly useAbs: UnwrapRef<typeof import('@vueuse/math')['useAbs']>
|
||||
readonly useActiveElement: UnwrapRef<typeof import('@vueuse/core')['useActiveElement']>
|
||||
readonly useAnimate: UnwrapRef<typeof import('@vueuse/core')['useAnimate']>
|
||||
readonly useApi: UnwrapRef<typeof import('./src/composables/useApi')['useApi']>
|
||||
readonly useArrayDifference: UnwrapRef<typeof import('@vueuse/core')['useArrayDifference']>
|
||||
readonly useArrayEvery: UnwrapRef<typeof import('@vueuse/core')['useArrayEvery']>
|
||||
readonly useArrayFilter: UnwrapRef<typeof import('@vueuse/core')['useArrayFilter']>
|
||||
readonly useArrayFind: UnwrapRef<typeof import('@vueuse/core')['useArrayFind']>
|
||||
readonly useArrayFindIndex: UnwrapRef<typeof import('@vueuse/core')['useArrayFindIndex']>
|
||||
readonly useArrayFindLast: UnwrapRef<typeof import('@vueuse/core')['useArrayFindLast']>
|
||||
readonly useArrayIncludes: UnwrapRef<typeof import('@vueuse/core')['useArrayIncludes']>
|
||||
readonly useArrayJoin: UnwrapRef<typeof import('@vueuse/core')['useArrayJoin']>
|
||||
readonly useArrayMap: UnwrapRef<typeof import('@vueuse/core')['useArrayMap']>
|
||||
readonly useArrayReduce: UnwrapRef<typeof import('@vueuse/core')['useArrayReduce']>
|
||||
readonly useArraySome: UnwrapRef<typeof import('@vueuse/core')['useArraySome']>
|
||||
readonly useArrayUnique: UnwrapRef<typeof import('@vueuse/core')['useArrayUnique']>
|
||||
readonly useAsyncQueue: UnwrapRef<typeof import('@vueuse/core')['useAsyncQueue']>
|
||||
readonly useAsyncState: UnwrapRef<typeof import('@vueuse/core')['useAsyncState']>
|
||||
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
|
||||
readonly useAverage: UnwrapRef<typeof import('@vueuse/math')['useAverage']>
|
||||
readonly useBase64: UnwrapRef<typeof import('@vueuse/core')['useBase64']>
|
||||
readonly useBattery: UnwrapRef<typeof import('@vueuse/core')['useBattery']>
|
||||
readonly useBluetooth: UnwrapRef<typeof import('@vueuse/core')['useBluetooth']>
|
||||
readonly useBreakpoints: UnwrapRef<typeof import('@vueuse/core')['useBreakpoints']>
|
||||
readonly useBroadcastChannel: UnwrapRef<typeof import('@vueuse/core')['useBroadcastChannel']>
|
||||
readonly useBrowserLocation: UnwrapRef<typeof import('@vueuse/core')['useBrowserLocation']>
|
||||
readonly useCached: UnwrapRef<typeof import('@vueuse/core')['useCached']>
|
||||
readonly useCeil: UnwrapRef<typeof import('@vueuse/math')['useCeil']>
|
||||
readonly useClamp: UnwrapRef<typeof import('@vueuse/math')['useClamp']>
|
||||
readonly useClipboard: UnwrapRef<typeof import('@vueuse/core')['useClipboard']>
|
||||
readonly useClipboardItems: UnwrapRef<typeof import('@vueuse/core')['useClipboardItems']>
|
||||
readonly useCloned: UnwrapRef<typeof import('@vueuse/core')['useCloned']>
|
||||
readonly useColorMode: UnwrapRef<typeof import('@vueuse/core')['useColorMode']>
|
||||
readonly useConfirmDialog: UnwrapRef<typeof import('@vueuse/core')['useConfirmDialog']>
|
||||
readonly useCookie: UnwrapRef<typeof import('./src/@core/composable/useCookie')['useCookie']>
|
||||
readonly useCounter: UnwrapRef<typeof import('@vueuse/core')['useCounter']>
|
||||
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
|
||||
readonly useCssVar: UnwrapRef<typeof import('@vueuse/core')['useCssVar']>
|
||||
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
|
||||
readonly useCurrentElement: UnwrapRef<typeof import('@vueuse/core')['useCurrentElement']>
|
||||
readonly useCycleList: UnwrapRef<typeof import('@vueuse/core')['useCycleList']>
|
||||
readonly useDark: UnwrapRef<typeof import('@vueuse/core')['useDark']>
|
||||
readonly useDateFormat: UnwrapRef<typeof import('@vueuse/core')['useDateFormat']>
|
||||
readonly useDebounce: UnwrapRef<typeof import('@vueuse/core')['useDebounce']>
|
||||
readonly useDebounceFn: UnwrapRef<typeof import('@vueuse/core')['useDebounceFn']>
|
||||
readonly useDebouncedRefHistory: UnwrapRef<typeof import('@vueuse/core')['useDebouncedRefHistory']>
|
||||
readonly useDeviceMotion: UnwrapRef<typeof import('@vueuse/core')['useDeviceMotion']>
|
||||
readonly useDeviceOrientation: UnwrapRef<typeof import('@vueuse/core')['useDeviceOrientation']>
|
||||
readonly useDevicePixelRatio: UnwrapRef<typeof import('@vueuse/core')['useDevicePixelRatio']>
|
||||
readonly useDevicesList: UnwrapRef<typeof import('@vueuse/core')['useDevicesList']>
|
||||
readonly useDisplayMedia: UnwrapRef<typeof import('@vueuse/core')['useDisplayMedia']>
|
||||
readonly useDocumentVisibility: UnwrapRef<typeof import('@vueuse/core')['useDocumentVisibility']>
|
||||
readonly useDraggable: UnwrapRef<typeof import('@vueuse/core')['useDraggable']>
|
||||
readonly useDropZone: UnwrapRef<typeof import('@vueuse/core')['useDropZone']>
|
||||
readonly useElementBounding: UnwrapRef<typeof import('@vueuse/core')['useElementBounding']>
|
||||
readonly useElementByPoint: UnwrapRef<typeof import('@vueuse/core')['useElementByPoint']>
|
||||
readonly useElementHover: UnwrapRef<typeof import('@vueuse/core')['useElementHover']>
|
||||
readonly useElementSize: UnwrapRef<typeof import('@vueuse/core')['useElementSize']>
|
||||
readonly useElementVisibility: UnwrapRef<typeof import('@vueuse/core')['useElementVisibility']>
|
||||
readonly useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']>
|
||||
readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']>
|
||||
readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']>
|
||||
readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']>
|
||||
readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']>
|
||||
readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']>
|
||||
readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']>
|
||||
readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']>
|
||||
readonly useFloor: UnwrapRef<typeof import('@vueuse/math')['useFloor']>
|
||||
readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']>
|
||||
readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']>
|
||||
readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']>
|
||||
readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']>
|
||||
readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']>
|
||||
readonly useGenerateImageVariant: UnwrapRef<typeof import('./src/@core/composable/useGenerateImageVariant')['useGenerateImageVariant']>
|
||||
readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']>
|
||||
readonly useI18n: UnwrapRef<typeof import('vue-i18n')['useI18n']>
|
||||
readonly useId: UnwrapRef<typeof import('vue')['useId']>
|
||||
readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']>
|
||||
readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']>
|
||||
readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']>
|
||||
readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']>
|
||||
readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']>
|
||||
readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']>
|
||||
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
|
||||
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
|
||||
readonly useLocalStorage: UnwrapRef<typeof import('@vueuse/core')['useLocalStorage']>
|
||||
readonly useMagicKeys: UnwrapRef<typeof import('@vueuse/core')['useMagicKeys']>
|
||||
readonly useManualRefHistory: UnwrapRef<typeof import('@vueuse/core')['useManualRefHistory']>
|
||||
readonly useMath: UnwrapRef<typeof import('@vueuse/math')['useMath']>
|
||||
readonly useMax: UnwrapRef<typeof import('@vueuse/math')['useMax']>
|
||||
readonly useMediaControls: UnwrapRef<typeof import('@vueuse/core')['useMediaControls']>
|
||||
readonly useMediaQuery: UnwrapRef<typeof import('@vueuse/core')['useMediaQuery']>
|
||||
readonly useMemoize: UnwrapRef<typeof import('@vueuse/core')['useMemoize']>
|
||||
readonly useMemory: UnwrapRef<typeof import('@vueuse/core')['useMemory']>
|
||||
readonly useMin: UnwrapRef<typeof import('@vueuse/math')['useMin']>
|
||||
readonly useModel: UnwrapRef<typeof import('vue')['useModel']>
|
||||
readonly useMounted: UnwrapRef<typeof import('@vueuse/core')['useMounted']>
|
||||
readonly useMouse: UnwrapRef<typeof import('@vueuse/core')['useMouse']>
|
||||
readonly useMouseInElement: UnwrapRef<typeof import('@vueuse/core')['useMouseInElement']>
|
||||
readonly useMousePressed: UnwrapRef<typeof import('@vueuse/core')['useMousePressed']>
|
||||
readonly useMutationObserver: UnwrapRef<typeof import('@vueuse/core')['useMutationObserver']>
|
||||
readonly useNavigatorLanguage: UnwrapRef<typeof import('@vueuse/core')['useNavigatorLanguage']>
|
||||
readonly useNetwork: UnwrapRef<typeof import('@vueuse/core')['useNetwork']>
|
||||
readonly useNow: UnwrapRef<typeof import('@vueuse/core')['useNow']>
|
||||
readonly useObjectUrl: UnwrapRef<typeof import('@vueuse/core')['useObjectUrl']>
|
||||
readonly useOffsetPagination: UnwrapRef<typeof import('@vueuse/core')['useOffsetPagination']>
|
||||
readonly useOnline: UnwrapRef<typeof import('@vueuse/core')['useOnline']>
|
||||
readonly usePageLeave: UnwrapRef<typeof import('@vueuse/core')['usePageLeave']>
|
||||
readonly useParallax: UnwrapRef<typeof import('@vueuse/core')['useParallax']>
|
||||
readonly useParentElement: UnwrapRef<typeof import('@vueuse/core')['useParentElement']>
|
||||
readonly usePerformanceObserver: UnwrapRef<typeof import('@vueuse/core')['usePerformanceObserver']>
|
||||
readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']>
|
||||
readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']>
|
||||
readonly usePointerLock: UnwrapRef<typeof import('@vueuse/core')['usePointerLock']>
|
||||
readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']>
|
||||
readonly usePrecision: UnwrapRef<typeof import('@vueuse/math')['usePrecision']>
|
||||
readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']>
|
||||
readonly usePreferredContrast: UnwrapRef<typeof import('@vueuse/core')['usePreferredContrast']>
|
||||
readonly usePreferredDark: UnwrapRef<typeof import('@vueuse/core')['usePreferredDark']>
|
||||
readonly usePreferredLanguages: UnwrapRef<typeof import('@vueuse/core')['usePreferredLanguages']>
|
||||
readonly usePreferredReducedMotion: UnwrapRef<typeof import('@vueuse/core')['usePreferredReducedMotion']>
|
||||
readonly usePrevious: UnwrapRef<typeof import('@vueuse/core')['usePrevious']>
|
||||
readonly useProjection: UnwrapRef<typeof import('@vueuse/math')['useProjection']>
|
||||
readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']>
|
||||
readonly useRefHistory: UnwrapRef<typeof import('@vueuse/core')['useRefHistory']>
|
||||
readonly useResizeObserver: UnwrapRef<typeof import('@vueuse/core')['useResizeObserver']>
|
||||
readonly useResponsiveLeftSidebar: UnwrapRef<typeof import('./src/@core/composable/useResponsiveSidebar')['useResponsiveLeftSidebar']>
|
||||
readonly useRound: UnwrapRef<typeof import('@vueuse/math')['useRound']>
|
||||
readonly useRoute: UnwrapRef<typeof import('vue-router/auto')['useRoute']>
|
||||
readonly useRouter: UnwrapRef<typeof import('vue-router/auto')['useRouter']>
|
||||
readonly useScreenOrientation: UnwrapRef<typeof import('@vueuse/core')['useScreenOrientation']>
|
||||
readonly useScreenSafeArea: UnwrapRef<typeof import('@vueuse/core')['useScreenSafeArea']>
|
||||
readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']>
|
||||
readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']>
|
||||
readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']>
|
||||
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
|
||||
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
|
||||
readonly useSkins: UnwrapRef<typeof import('./src/@core/composable/useSkins')['useSkins']>
|
||||
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
|
||||
readonly useSorted: UnwrapRef<typeof import('@vueuse/core')['useSorted']>
|
||||
readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']>
|
||||
readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']>
|
||||
readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']>
|
||||
readonly useStorageAsync: UnwrapRef<typeof import('@vueuse/core')['useStorageAsync']>
|
||||
readonly useStyleTag: UnwrapRef<typeof import('@vueuse/core')['useStyleTag']>
|
||||
readonly useSum: UnwrapRef<typeof import('@vueuse/math')['useSum']>
|
||||
readonly useSupported: UnwrapRef<typeof import('@vueuse/core')['useSupported']>
|
||||
readonly useSwipe: UnwrapRef<typeof import('@vueuse/core')['useSwipe']>
|
||||
readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']>
|
||||
readonly useTemplateRefsList: UnwrapRef<typeof import('@vueuse/core')['useTemplateRefsList']>
|
||||
readonly useTextDirection: UnwrapRef<typeof import('@vueuse/core')['useTextDirection']>
|
||||
readonly useTextSelection: UnwrapRef<typeof import('@vueuse/core')['useTextSelection']>
|
||||
readonly useTextareaAutosize: UnwrapRef<typeof import('@vueuse/core')['useTextareaAutosize']>
|
||||
readonly useThrottle: UnwrapRef<typeof import('@vueuse/core')['useThrottle']>
|
||||
readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']>
|
||||
readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']>
|
||||
readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']>
|
||||
readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']>
|
||||
readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']>
|
||||
readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']>
|
||||
readonly useTimestamp: UnwrapRef<typeof import('@vueuse/core')['useTimestamp']>
|
||||
readonly useTitle: UnwrapRef<typeof import('@vueuse/core')['useTitle']>
|
||||
readonly useToNumber: UnwrapRef<typeof import('@vueuse/core')['useToNumber']>
|
||||
readonly useToString: UnwrapRef<typeof import('@vueuse/core')['useToString']>
|
||||
readonly useToggle: UnwrapRef<typeof import('@vueuse/core')['useToggle']>
|
||||
readonly useTransition: UnwrapRef<typeof import('@vueuse/core')['useTransition']>
|
||||
readonly useTrunc: UnwrapRef<typeof import('@vueuse/math')['useTrunc']>
|
||||
readonly useUrlSearchParams: UnwrapRef<typeof import('@vueuse/core')['useUrlSearchParams']>
|
||||
readonly useUserMedia: UnwrapRef<typeof import('@vueuse/core')['useUserMedia']>
|
||||
readonly useVModel: UnwrapRef<typeof import('@vueuse/core')['useVModel']>
|
||||
readonly useVModels: UnwrapRef<typeof import('@vueuse/core')['useVModels']>
|
||||
readonly useVibrate: UnwrapRef<typeof import('@vueuse/core')['useVibrate']>
|
||||
readonly useVirtualList: UnwrapRef<typeof import('@vueuse/core')['useVirtualList']>
|
||||
readonly useWakeLock: UnwrapRef<typeof import('@vueuse/core')['useWakeLock']>
|
||||
readonly useWebNotification: UnwrapRef<typeof import('@vueuse/core')['useWebNotification']>
|
||||
readonly useWebSocket: UnwrapRef<typeof import('@vueuse/core')['useWebSocket']>
|
||||
readonly useWebWorker: UnwrapRef<typeof import('@vueuse/core')['useWebWorker']>
|
||||
readonly useWebWorkerFn: UnwrapRef<typeof import('@vueuse/core')['useWebWorkerFn']>
|
||||
readonly useWindowFocus: UnwrapRef<typeof import('@vueuse/core')['useWindowFocus']>
|
||||
readonly useWindowScroll: UnwrapRef<typeof import('@vueuse/core')['useWindowScroll']>
|
||||
readonly useWindowSize: UnwrapRef<typeof import('@vueuse/core')['useWindowSize']>
|
||||
readonly watch: UnwrapRef<typeof import('vue')['watch']>
|
||||
readonly watchArray: UnwrapRef<typeof import('@vueuse/core')['watchArray']>
|
||||
readonly watchAtMost: UnwrapRef<typeof import('@vueuse/core')['watchAtMost']>
|
||||
readonly watchDebounced: UnwrapRef<typeof import('@vueuse/core')['watchDebounced']>
|
||||
readonly watchDeep: UnwrapRef<typeof import('@vueuse/core')['watchDeep']>
|
||||
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
|
||||
readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']>
|
||||
readonly watchImmediate: UnwrapRef<typeof import('@vueuse/core')['watchImmediate']>
|
||||
readonly watchOnce: UnwrapRef<typeof import('@vueuse/core')['watchOnce']>
|
||||
readonly watchPausable: UnwrapRef<typeof import('@vueuse/core')['watchPausable']>
|
||||
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
|
||||
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
|
||||
readonly watchThrottled: UnwrapRef<typeof import('@vueuse/core')['watchThrottled']>
|
||||
readonly watchTriggerable: UnwrapRef<typeof import('@vueuse/core')['watchTriggerable']>
|
||||
readonly watchWithFilter: UnwrapRef<typeof import('@vueuse/core')['watchWithFilter']>
|
||||
readonly whenever: UnwrapRef<typeof import('@vueuse/core')['whenever']>
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Foundation\Configuration\Exceptions;
|
||||
use Illuminate\Foundation\Configuration\Middleware;
|
||||
|
||||
return Application::configure(basePath: dirname(__DIR__))
|
||||
->withRouting(
|
||||
web: __DIR__.'/../routes/web.php',
|
||||
commands: __DIR__.'/../routes/console.php',
|
||||
health: '/up',
|
||||
)
|
||||
->withMiddleware(function (Middleware $middleware): void {
|
||||
//
|
||||
})
|
||||
->withExceptions(function (Exceptions $exceptions): void {
|
||||
//
|
||||
})->create();
|
||||
@@ -1,2 +0,0 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
App\Providers\AppServiceProvider::class,
|
||||
];
|
||||
@@ -1,395 +0,0 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck
|
||||
// Generated by unplugin-vue-components
|
||||
// Read more: https://github.com/vuejs/core/pull/3399
|
||||
export {}
|
||||
|
||||
/* prettier-ignore */
|
||||
declare module 'vue' {
|
||||
export interface GlobalComponents {
|
||||
AddAuthenticatorAppDialog: typeof import('./resources/ts/components/dialogs/AddAuthenticatorAppDialog.vue')['default']
|
||||
AddEditAddressDialog: typeof import('./resources/ts/components/dialogs/AddEditAddressDialog.vue')['default']
|
||||
AddEditPermissionDialog: typeof import('./resources/ts/components/dialogs/AddEditPermissionDialog.vue')['default']
|
||||
AddEditRoleDialog: typeof import('./resources/ts/components/dialogs/AddEditRoleDialog.vue')['default']
|
||||
AddPaymentMethodDialog: typeof import('./resources/ts/components/dialogs/AddPaymentMethodDialog.vue')['default']
|
||||
AppAutocomplete: typeof import('./resources/ts/@core/components/app-form-elements/AppAutocomplete.vue')['default']
|
||||
AppBarSearch: typeof import('./resources/ts/@core/components/AppBarSearch.vue')['default']
|
||||
AppCardActions: typeof import('./resources/ts/@core/components/cards/AppCardActions.vue')['default']
|
||||
AppCardCode: typeof import('./resources/ts/@core/components/cards/AppCardCode.vue')['default']
|
||||
AppCombobox: typeof import('./resources/ts/@core/components/app-form-elements/AppCombobox.vue')['default']
|
||||
AppDateTimePicker: typeof import('./resources/ts/@core/components/app-form-elements/AppDateTimePicker.vue')['default']
|
||||
AppDrawerHeaderSection: typeof import('./resources/ts/@core/components/AppDrawerHeaderSection.vue')['default']
|
||||
AppLoadingIndicator: typeof import('./resources/ts/components/AppLoadingIndicator.vue')['default']
|
||||
AppPricing: typeof import('./resources/ts/components/AppPricing.vue')['default']
|
||||
AppSearchHeader: typeof import('./resources/ts/components/AppSearchHeader.vue')['default']
|
||||
AppSelect: typeof import('./resources/ts/@core/components/app-form-elements/AppSelect.vue')['default']
|
||||
AppStepper: typeof import('./resources/ts/@core/components/AppStepper.vue')['default']
|
||||
AppTextarea: typeof import('./resources/ts/@core/components/app-form-elements/AppTextarea.vue')['default']
|
||||
AppTextField: typeof import('./resources/ts/@core/components/app-form-elements/AppTextField.vue')['default']
|
||||
BuyNow: typeof import('./resources/ts/@core/components/BuyNow.vue')['default']
|
||||
CardAddEditDialog: typeof import('./resources/ts/components/dialogs/CardAddEditDialog.vue')['default']
|
||||
CardStatisticsHorizontal: typeof import('./resources/ts/@core/components/cards/CardStatisticsHorizontal.vue')['default']
|
||||
CardStatisticsVertical: typeof import('./resources/ts/@core/components/cards/CardStatisticsVertical.vue')['default']
|
||||
CardStatisticsVerticalSimple: typeof import('./resources/ts/@core/components/CardStatisticsVerticalSimple.vue')['default']
|
||||
ConfirmDialog: typeof import('./resources/ts/components/dialogs/ConfirmDialog.vue')['default']
|
||||
CreateAppDialog: typeof import('./resources/ts/components/dialogs/CreateAppDialog.vue')['default']
|
||||
CustomCheckboxes: typeof import('./resources/ts/@core/components/app-form-elements/CustomCheckboxes.vue')['default']
|
||||
CustomCheckboxesWithIcon: typeof import('./resources/ts/@core/components/app-form-elements/CustomCheckboxesWithIcon.vue')['default']
|
||||
CustomCheckboxesWithImage: typeof import('./resources/ts/@core/components/app-form-elements/CustomCheckboxesWithImage.vue')['default']
|
||||
CustomizerSection: typeof import('./resources/ts/@core/components/CustomizerSection.vue')['default']
|
||||
CustomRadios: typeof import('./resources/ts/@core/components/app-form-elements/CustomRadios.vue')['default']
|
||||
CustomRadiosWithIcon: typeof import('./resources/ts/@core/components/app-form-elements/CustomRadiosWithIcon.vue')['default']
|
||||
CustomRadiosWithImage: typeof import('./resources/ts/@core/components/app-form-elements/CustomRadiosWithImage.vue')['default']
|
||||
DemoAlertBasic: typeof import('./resources/ts/views/demos/components/alert/DemoAlertBasic.vue')['default']
|
||||
DemoAlertBorder: typeof import('./resources/ts/views/demos/components/alert/DemoAlertBorder.vue')['default']
|
||||
DemoAlertClosable: typeof import('./resources/ts/views/demos/components/alert/DemoAlertClosable.vue')['default']
|
||||
DemoAlertColoredBorder: typeof import('./resources/ts/views/demos/components/alert/DemoAlertColoredBorder.vue')['default']
|
||||
DemoAlertColors: typeof import('./resources/ts/views/demos/components/alert/DemoAlertColors.vue')['default']
|
||||
DemoAlertDensity: typeof import('./resources/ts/views/demos/components/alert/DemoAlertDensity.vue')['default']
|
||||
DemoAlertElevation: typeof import('./resources/ts/views/demos/components/alert/DemoAlertElevation.vue')['default']
|
||||
DemoAlertIcons: typeof import('./resources/ts/views/demos/components/alert/DemoAlertIcons.vue')['default']
|
||||
DemoAlertOutlined: typeof import('./resources/ts/views/demos/components/alert/DemoAlertOutlined.vue')['default']
|
||||
DemoAlertProminent: typeof import('./resources/ts/views/demos/components/alert/DemoAlertProminent.vue')['default']
|
||||
DemoAlertTonal: typeof import('./resources/ts/views/demos/components/alert/DemoAlertTonal.vue')['default']
|
||||
DemoAlertType: typeof import('./resources/ts/views/demos/components/alert/DemoAlertType.vue')['default']
|
||||
DemoAlertVModelSupport: typeof import('./resources/ts/views/demos/components/alert/DemoAlertVModelSupport.vue')['default']
|
||||
DemoAutocompleteAsyncItems: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteAsyncItems.vue')['default']
|
||||
DemoAutocompleteBasic: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteBasic.vue')['default']
|
||||
DemoAutocompleteChips: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteChips.vue')['default']
|
||||
DemoAutocompleteClearable: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteClearable.vue')['default']
|
||||
DemoAutocompleteCustomFilter: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteCustomFilter.vue')['default']
|
||||
DemoAutocompleteDensity: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteDensity.vue')['default']
|
||||
DemoAutocompleteMultiple: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteMultiple.vue')['default']
|
||||
DemoAutocompleteSlots: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteSlots.vue')['default']
|
||||
DemoAutocompleteStateSelector: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteStateSelector.vue')['default']
|
||||
DemoAutocompleteValidation: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteValidation.vue')['default']
|
||||
DemoAutocompleteVariant: typeof import('./resources/ts/views/demos/forms/form-elements/autocomplete/DemoAutocompleteVariant.vue')['default']
|
||||
DemoAvatarColors: typeof import('./resources/ts/views/demos/components/avatar/DemoAvatarColors.vue')['default']
|
||||
DemoAvatarGroup: typeof import('./resources/ts/views/demos/components/avatar/DemoAvatarGroup.vue')['default']
|
||||
DemoAvatarIcons: typeof import('./resources/ts/views/demos/components/avatar/DemoAvatarIcons.vue')['default']
|
||||
DemoAvatarImages: typeof import('./resources/ts/views/demos/components/avatar/DemoAvatarImages.vue')['default']
|
||||
DemoAvatarRounded: typeof import('./resources/ts/views/demos/components/avatar/DemoAvatarRounded.vue')['default']
|
||||
DemoAvatarSizes: typeof import('./resources/ts/views/demos/components/avatar/DemoAvatarSizes.vue')['default']
|
||||
DemoAvatarTonal: typeof import('./resources/ts/views/demos/components/avatar/DemoAvatarTonal.vue')['default']
|
||||
DemoBadgeAvatarStatus: typeof import('./resources/ts/views/demos/components/badge/DemoBadgeAvatarStatus.vue')['default']
|
||||
DemoBadgeColor: typeof import('./resources/ts/views/demos/components/badge/DemoBadgeColor.vue')['default']
|
||||
DemoBadgeDynamicNotifications: typeof import('./resources/ts/views/demos/components/badge/DemoBadgeDynamicNotifications.vue')['default']
|
||||
DemoBadgeIcon: typeof import('./resources/ts/views/demos/components/badge/DemoBadgeIcon.vue')['default']
|
||||
DemoBadgeMaximumValue: typeof import('./resources/ts/views/demos/components/badge/DemoBadgeMaximumValue.vue')['default']
|
||||
DemoBadgePosition: typeof import('./resources/ts/views/demos/components/badge/DemoBadgePosition.vue')['default']
|
||||
DemoBadgeShowOnHover: typeof import('./resources/ts/views/demos/components/badge/DemoBadgeShowOnHover.vue')['default']
|
||||
DemoBadgeStyle: typeof import('./resources/ts/views/demos/components/badge/DemoBadgeStyle.vue')['default']
|
||||
DemoBadgeTabs: typeof import('./resources/ts/views/demos/components/badge/DemoBadgeTabs.vue')['default']
|
||||
DemoBadgeTonal: typeof import('./resources/ts/views/demos/components/badge/DemoBadgeTonal.vue')['default']
|
||||
DemoButtonBlock: typeof import('./resources/ts/views/demos/components/button/DemoButtonBlock.vue')['default']
|
||||
DemoButtonColors: typeof import('./resources/ts/views/demos/components/button/DemoButtonColors.vue')['default']
|
||||
DemoButtonFlat: typeof import('./resources/ts/views/demos/components/button/DemoButtonFlat.vue')['default']
|
||||
DemoButtonGroup: typeof import('./resources/ts/views/demos/components/button/DemoButtonGroup.vue')['default']
|
||||
DemoButtonIcon: typeof import('./resources/ts/views/demos/components/button/DemoButtonIcon.vue')['default']
|
||||
DemoButtonIconOnly: typeof import('./resources/ts/views/demos/components/button/DemoButtonIconOnly.vue')['default']
|
||||
DemoButtonLink: typeof import('./resources/ts/views/demos/components/button/DemoButtonLink.vue')['default']
|
||||
DemoButtonLoaders: typeof import('./resources/ts/views/demos/components/button/DemoButtonLoaders.vue')['default']
|
||||
DemoButtonOutlined: typeof import('./resources/ts/views/demos/components/button/DemoButtonOutlined.vue')['default']
|
||||
DemoButtonPlain: typeof import('./resources/ts/views/demos/components/button/DemoButtonPlain.vue')['default']
|
||||
DemoButtonRounded: typeof import('./resources/ts/views/demos/components/button/DemoButtonRounded.vue')['default']
|
||||
DemoButtonRouter: typeof import('./resources/ts/views/demos/components/button/DemoButtonRouter.vue')['default']
|
||||
DemoButtonSizing: typeof import('./resources/ts/views/demos/components/button/DemoButtonSizing.vue')['default']
|
||||
DemoButtonText: typeof import('./resources/ts/views/demos/components/button/DemoButtonText.vue')['default']
|
||||
DemoButtonTonal: typeof import('./resources/ts/views/demos/components/button/DemoButtonTonal.vue')['default']
|
||||
DemoCheckboxBasic: typeof import('./resources/ts/views/demos/forms/form-elements/checkbox/DemoCheckboxBasic.vue')['default']
|
||||
DemoCheckboxCheckboxValue: typeof import('./resources/ts/views/demos/forms/form-elements/checkbox/DemoCheckboxCheckboxValue.vue')['default']
|
||||
DemoCheckboxColors: typeof import('./resources/ts/views/demos/forms/form-elements/checkbox/DemoCheckboxColors.vue')['default']
|
||||
DemoCheckboxDensity: typeof import('./resources/ts/views/demos/forms/form-elements/checkbox/DemoCheckboxDensity.vue')['default']
|
||||
DemoCheckboxIcon: typeof import('./resources/ts/views/demos/forms/form-elements/checkbox/DemoCheckboxIcon.vue')['default']
|
||||
DemoCheckboxInlineTextField: typeof import('./resources/ts/views/demos/forms/form-elements/checkbox/DemoCheckboxInlineTextField.vue')['default']
|
||||
DemoCheckboxLabelSlot: typeof import('./resources/ts/views/demos/forms/form-elements/checkbox/DemoCheckboxLabelSlot.vue')['default']
|
||||
DemoCheckboxModelAsArray: typeof import('./resources/ts/views/demos/forms/form-elements/checkbox/DemoCheckboxModelAsArray.vue')['default']
|
||||
DemoCheckboxStates: typeof import('./resources/ts/views/demos/forms/form-elements/checkbox/DemoCheckboxStates.vue')['default']
|
||||
DemoChipClosable: typeof import('./resources/ts/views/demos/components/chip/DemoChipClosable.vue')['default']
|
||||
DemoChipColor: typeof import('./resources/ts/views/demos/components/chip/DemoChipColor.vue')['default']
|
||||
DemoChipElevated: typeof import('./resources/ts/views/demos/components/chip/DemoChipElevated.vue')['default']
|
||||
DemoChipExpandable: typeof import('./resources/ts/views/demos/components/chip/DemoChipExpandable.vue')['default']
|
||||
DemoChipInSelects: typeof import('./resources/ts/views/demos/components/chip/DemoChipInSelects.vue')['default']
|
||||
DemoChipOutlined: typeof import('./resources/ts/views/demos/components/chip/DemoChipOutlined.vue')['default']
|
||||
DemoChipRounded: typeof import('./resources/ts/views/demos/components/chip/DemoChipRounded.vue')['default']
|
||||
DemoChipSizes: typeof import('./resources/ts/views/demos/components/chip/DemoChipSizes.vue')['default']
|
||||
DemoChipWithAvatar: typeof import('./resources/ts/views/demos/components/chip/DemoChipWithAvatar.vue')['default']
|
||||
DemoChipWithIcon: typeof import('./resources/ts/views/demos/components/chip/DemoChipWithIcon.vue')['default']
|
||||
DemoComboboxBasic: typeof import('./resources/ts/views/demos/forms/form-elements/combobox/DemoComboboxBasic.vue')['default']
|
||||
DemoComboboxClearable: typeof import('./resources/ts/views/demos/forms/form-elements/combobox/DemoComboboxClearable.vue')['default']
|
||||
DemoComboboxDensity: typeof import('./resources/ts/views/demos/forms/form-elements/combobox/DemoComboboxDensity.vue')['default']
|
||||
DemoComboboxMultiple: typeof import('./resources/ts/views/demos/forms/form-elements/combobox/DemoComboboxMultiple.vue')['default']
|
||||
DemoComboboxNoDataWithChips: typeof import('./resources/ts/views/demos/forms/form-elements/combobox/DemoComboboxNoDataWithChips.vue')['default']
|
||||
DemoComboboxVariant: typeof import('./resources/ts/views/demos/forms/form-elements/combobox/DemoComboboxVariant.vue')['default']
|
||||
DemoCustomInputCustomCheckboxes: typeof import('./resources/ts/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomCheckboxes.vue')['default']
|
||||
DemoCustomInputCustomCheckboxesWithIcon: typeof import('./resources/ts/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomCheckboxesWithIcon.vue')['default']
|
||||
DemoCustomInputCustomCheckboxesWithImage: typeof import('./resources/ts/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomCheckboxesWithImage.vue')['default']
|
||||
DemoCustomInputCustomRadios: typeof import('./resources/ts/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomRadios.vue')['default']
|
||||
DemoCustomInputCustomRadiosWithIcon: typeof import('./resources/ts/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomRadiosWithIcon.vue')['default']
|
||||
DemoCustomInputCustomRadiosWithImage: typeof import('./resources/ts/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomRadiosWithImage.vue')['default']
|
||||
DemoDataTableBasic: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableBasic.vue')['default']
|
||||
DemoDataTableCellSlot: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableCellSlot.vue')['default']
|
||||
DemoDataTableDense: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableDense.vue')['default']
|
||||
DemoDataTableExpandableRows: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableExpandableRows.vue')['default']
|
||||
DemoDataTableExternalPagination: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableExternalPagination.vue')['default']
|
||||
DemoDataTableFixedHeader: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableFixedHeader.vue')['default']
|
||||
DemoDataTableGroupingRows: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableGroupingRows.vue')['default']
|
||||
DemoDataTableKitchenSink: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableKitchenSink.vue')['default']
|
||||
DemoDataTableRowEditingViaDialog: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableRowEditingViaDialog.vue')['default']
|
||||
DemoDataTableRowSelection: typeof import('./resources/ts/views/demos/forms/tables/data-table/DemoDataTableRowSelection.vue')['default']
|
||||
DemoDateTimePickerBasic: typeof import('./resources/ts/views/demos/forms/form-elements/date-time-picker/DemoDateTimePickerBasic.vue')['default']
|
||||
DemoDateTimePickerDateAndTime: typeof import('./resources/ts/views/demos/forms/form-elements/date-time-picker/DemoDateTimePickerDateAndTime.vue')['default']
|
||||
DemoDateTimePickerDisabledRange: typeof import('./resources/ts/views/demos/forms/form-elements/date-time-picker/DemoDateTimePickerDisabledRange.vue')['default']
|
||||
DemoDateTimePickerHumanFriendly: typeof import('./resources/ts/views/demos/forms/form-elements/date-time-picker/DemoDateTimePickerHumanFriendly.vue')['default']
|
||||
DemoDateTimePickerInline: typeof import('./resources/ts/views/demos/forms/form-elements/date-time-picker/DemoDateTimePickerInline.vue')['default']
|
||||
DemoDateTimePickerMultipleDates: typeof import('./resources/ts/views/demos/forms/form-elements/date-time-picker/DemoDateTimePickerMultipleDates.vue')['default']
|
||||
DemoDateTimePickerRange: typeof import('./resources/ts/views/demos/forms/form-elements/date-time-picker/DemoDateTimePickerRange.vue')['default']
|
||||
DemoDateTimePickerTimePicker: typeof import('./resources/ts/views/demos/forms/form-elements/date-time-picker/DemoDateTimePickerTimePicker.vue')['default']
|
||||
DemoDialogBasic: typeof import('./resources/ts/views/demos/components/dialog/DemoDialogBasic.vue')['default']
|
||||
DemoDialogForm: typeof import('./resources/ts/views/demos/components/dialog/DemoDialogForm.vue')['default']
|
||||
DemoDialogFullscreen: typeof import('./resources/ts/views/demos/components/dialog/DemoDialogFullscreen.vue')['default']
|
||||
DemoDialogLoader: typeof import('./resources/ts/views/demos/components/dialog/DemoDialogLoader.vue')['default']
|
||||
DemoDialogNesting: typeof import('./resources/ts/views/demos/components/dialog/DemoDialogNesting.vue')['default']
|
||||
DemoDialogOverflowed: typeof import('./resources/ts/views/demos/components/dialog/DemoDialogOverflowed.vue')['default']
|
||||
DemoDialogPersistent: typeof import('./resources/ts/views/demos/components/dialog/DemoDialogPersistent.vue')['default']
|
||||
DemoDialogScrollable: typeof import('./resources/ts/views/demos/components/dialog/DemoDialogScrollable.vue')['default']
|
||||
DemoEditorBasicEditor: typeof import('./resources/ts/views/demos/forms/form-elements/editor/DemoEditorBasicEditor.vue')['default']
|
||||
DemoEditorCustomEditor: typeof import('./resources/ts/views/demos/forms/form-elements/editor/DemoEditorCustomEditor.vue')['default']
|
||||
DemoExpansionPanelAccordion: typeof import('./resources/ts/views/demos/components/expansion-panel/DemoExpansionPanelAccordion.vue')['default']
|
||||
DemoExpansionPanelBasic: typeof import('./resources/ts/views/demos/components/expansion-panel/DemoExpansionPanelBasic.vue')['default']
|
||||
DemoExpansionPanelCustomIcon: typeof import('./resources/ts/views/demos/components/expansion-panel/DemoExpansionPanelCustomIcon.vue')['default']
|
||||
DemoExpansionPanelInset: typeof import('./resources/ts/views/demos/components/expansion-panel/DemoExpansionPanelInset.vue')['default']
|
||||
DemoExpansionPanelModel: typeof import('./resources/ts/views/demos/components/expansion-panel/DemoExpansionPanelModel.vue')['default']
|
||||
DemoExpansionPanelPopout: typeof import('./resources/ts/views/demos/components/expansion-panel/DemoExpansionPanelPopout.vue')['default']
|
||||
DemoExpansionPanelWithBorder: typeof import('./resources/ts/views/demos/components/expansion-panel/DemoExpansionPanelWithBorder.vue')['default']
|
||||
DemoFileInputAccept: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputAccept.vue')['default']
|
||||
DemoFileInputBasic: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputBasic.vue')['default']
|
||||
DemoFileInputChips: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputChips.vue')['default']
|
||||
DemoFileInputCounter: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputCounter.vue')['default']
|
||||
DemoFileInputDensity: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputDensity.vue')['default']
|
||||
DemoFileInputLoading: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputLoading.vue')['default']
|
||||
DemoFileInputMultiple: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputMultiple.vue')['default']
|
||||
DemoFileInputPrependIcon: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputPrependIcon.vue')['default']
|
||||
DemoFileInputSelectionSlot: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputSelectionSlot.vue')['default']
|
||||
DemoFileInputShowSize: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputShowSize.vue')['default']
|
||||
DemoFileInputValidation: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputValidation.vue')['default']
|
||||
DemoFileInputVariant: typeof import('./resources/ts/views/demos/forms/form-elements/file-input/DemoFileInputVariant.vue')['default']
|
||||
DemoFormLayoutCollapsible: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutCollapsible.vue')['default']
|
||||
DemoFormLayoutFormHint: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutFormHint.vue')['default']
|
||||
DemoFormLayoutFormSticky: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutFormSticky.vue')['default']
|
||||
DemoFormLayoutFormValidation: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutFormValidation.vue')['default']
|
||||
DemoFormLayoutFormWithTabs: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutFormWithTabs.vue')['default']
|
||||
DemoFormLayoutHorizontalForm: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutHorizontalForm.vue')['default']
|
||||
DemoFormLayoutHorizontalFormWithIcons: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutHorizontalFormWithIcons.vue')['default']
|
||||
DemoFormLayoutMultipleColumn: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutMultipleColumn.vue')['default']
|
||||
DemoFormLayoutSticky: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutSticky.vue')['default']
|
||||
DemoFormLayoutVerticalForm: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutVerticalForm.vue')['default']
|
||||
DemoFormLayoutVerticalFormWithIcons: typeof import('./resources/ts/views/demos/forms/form-layout/DemoFormLayoutVerticalFormWithIcons.vue')['default']
|
||||
DemoFormValidationSimpleFormValidation: typeof import('./resources/ts/views/demos/forms/form-validation/DemoFormValidationSimpleFormValidation.vue')['default']
|
||||
DemoFormValidationValidatingMultipleRules: typeof import('./resources/ts/views/demos/forms/form-validation/DemoFormValidationValidatingMultipleRules.vue')['default']
|
||||
DemoFormValidationValidationTypes: typeof import('./resources/ts/views/demos/forms/form-validation/DemoFormValidationValidationTypes.vue')['default']
|
||||
DemoFormWizardIconsBasic: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-icons/DemoFormWizardIconsBasic.vue')['default']
|
||||
DemoFormWizardIconsModernBasic: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-icons/DemoFormWizardIconsModernBasic.vue')['default']
|
||||
DemoFormWizardIconsModernVertical: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-icons/DemoFormWizardIconsModernVertical.vue')['default']
|
||||
DemoFormWizardIconsValidation: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-icons/DemoFormWizardIconsValidation.vue')['default']
|
||||
DemoFormWizardIconsVertical: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-icons/DemoFormWizardIconsVertical.vue')['default']
|
||||
DemoFormWizardNumberedBasic: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-numbered/DemoFormWizardNumberedBasic.vue')['default']
|
||||
DemoFormWizardNumberedModernBasic: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-numbered/DemoFormWizardNumberedModernBasic.vue')['default']
|
||||
DemoFormWizardNumberedModernVertical: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-numbered/DemoFormWizardNumberedModernVertical.vue')['default']
|
||||
DemoFormWizardNumberedValidation: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-numbered/DemoFormWizardNumberedValidation.vue')['default']
|
||||
DemoFormWizardNumberedVertical: typeof import('./resources/ts/views/demos/forms/form-wizard/form-wizard-numbered/DemoFormWizardNumberedVertical.vue')['default']
|
||||
DemoListActionAndItemGroup: typeof import('./resources/ts/views/demos/components/list/DemoListActionAndItemGroup.vue')['default']
|
||||
DemoListBasic: typeof import('./resources/ts/views/demos/components/list/DemoListBasic.vue')['default']
|
||||
DemoListDensity: typeof import('./resources/ts/views/demos/components/list/DemoListDensity.vue')['default']
|
||||
DemoListNav: typeof import('./resources/ts/views/demos/components/list/DemoListNav.vue')['default']
|
||||
DemoListProgressList: typeof import('./resources/ts/views/demos/components/list/DemoListProgressList.vue')['default']
|
||||
DemoListRounded: typeof import('./resources/ts/views/demos/components/list/DemoListRounded.vue')['default']
|
||||
DemoListShaped: typeof import('./resources/ts/views/demos/components/list/DemoListShaped.vue')['default']
|
||||
DemoListSubGroup: typeof import('./resources/ts/views/demos/components/list/DemoListSubGroup.vue')['default']
|
||||
DemoListThreeLine: typeof import('./resources/ts/views/demos/components/list/DemoListThreeLine.vue')['default']
|
||||
DemoListTwoLinesAndSubheader: typeof import('./resources/ts/views/demos/components/list/DemoListTwoLinesAndSubheader.vue')['default']
|
||||
DemoListUserList: typeof import('./resources/ts/views/demos/components/list/DemoListUserList.vue')['default']
|
||||
DemoMenuActivatorAndTooltip: typeof import('./resources/ts/views/demos/components/menu/DemoMenuActivatorAndTooltip.vue')['default']
|
||||
DemoMenuBasic: typeof import('./resources/ts/views/demos/components/menu/DemoMenuBasic.vue')['default']
|
||||
DemoMenuCustomTransitions: typeof import('./resources/ts/views/demos/components/menu/DemoMenuCustomTransitions.vue')['default']
|
||||
DemoMenuLocation: typeof import('./resources/ts/views/demos/components/menu/DemoMenuLocation.vue')['default']
|
||||
DemoMenuOpenOnHover: typeof import('./resources/ts/views/demos/components/menu/DemoMenuOpenOnHover.vue')['default']
|
||||
DemoMenuPopover: typeof import('./resources/ts/views/demos/components/menu/DemoMenuPopover.vue')['default']
|
||||
DemoOtpInputBasic: typeof import('./resources/ts/views/demos/forms/form-elements/otp-input/DemoOtpInputBasic.vue')['default']
|
||||
DemoOtpInputFinish: typeof import('./resources/ts/views/demos/forms/form-elements/otp-input/DemoOtpInputFinish.vue')['default']
|
||||
DemoOtpInputHidden: typeof import('./resources/ts/views/demos/forms/form-elements/otp-input/DemoOtpInputHidden.vue')['default']
|
||||
DemoPaginationBasic: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationBasic.vue')['default']
|
||||
DemoPaginationCircle: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationCircle.vue')['default']
|
||||
DemoPaginationColor: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationColor.vue')['default']
|
||||
DemoPaginationDisabled: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationDisabled.vue')['default']
|
||||
DemoPaginationIcons: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationIcons.vue')['default']
|
||||
DemoPaginationLength: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationLength.vue')['default']
|
||||
DemoPaginationOutline: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationOutline.vue')['default']
|
||||
DemoPaginationOutlineCircle: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationOutlineCircle.vue')['default']
|
||||
DemoPaginationSize: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationSize.vue')['default']
|
||||
DemoPaginationTotalVisible: typeof import('./resources/ts/views/demos/components/pagination/DemoPaginationTotalVisible.vue')['default']
|
||||
DemoProgressCircularColor: typeof import('./resources/ts/views/demos/components/progress-circular/DemoProgressCircularColor.vue')['default']
|
||||
DemoProgressCircularIndeterminate: typeof import('./resources/ts/views/demos/components/progress-circular/DemoProgressCircularIndeterminate.vue')['default']
|
||||
DemoProgressCircularRotate: typeof import('./resources/ts/views/demos/components/progress-circular/DemoProgressCircularRotate.vue')['default']
|
||||
DemoProgressCircularSize: typeof import('./resources/ts/views/demos/components/progress-circular/DemoProgressCircularSize.vue')['default']
|
||||
DemoProgressLinearBuffering: typeof import('./resources/ts/views/demos/components/progress-linear/DemoProgressLinearBuffering.vue')['default']
|
||||
DemoProgressLinearColor: typeof import('./resources/ts/views/demos/components/progress-linear/DemoProgressLinearColor.vue')['default']
|
||||
DemoProgressLinearIndeterminate: typeof import('./resources/ts/views/demos/components/progress-linear/DemoProgressLinearIndeterminate.vue')['default']
|
||||
DemoProgressLinearReversed: typeof import('./resources/ts/views/demos/components/progress-linear/DemoProgressLinearReversed.vue')['default']
|
||||
DemoProgressLinearRounded: typeof import('./resources/ts/views/demos/components/progress-linear/DemoProgressLinearRounded.vue')['default']
|
||||
DemoProgressLinearSlots: typeof import('./resources/ts/views/demos/components/progress-linear/DemoProgressLinearSlots.vue')['default']
|
||||
DemoProgressLinearStriped: typeof import('./resources/ts/views/demos/components/progress-linear/DemoProgressLinearStriped.vue')['default']
|
||||
DemoRadioBasic: typeof import('./resources/ts/views/demos/forms/form-elements/radio/DemoRadioBasic.vue')['default']
|
||||
DemoRadioColors: typeof import('./resources/ts/views/demos/forms/form-elements/radio/DemoRadioColors.vue')['default']
|
||||
DemoRadioDensity: typeof import('./resources/ts/views/demos/forms/form-elements/radio/DemoRadioDensity.vue')['default']
|
||||
DemoRadioIcon: typeof import('./resources/ts/views/demos/forms/form-elements/radio/DemoRadioIcon.vue')['default']
|
||||
DemoRadioInline: typeof import('./resources/ts/views/demos/forms/form-elements/radio/DemoRadioInline.vue')['default']
|
||||
DemoRadioLabelSlot: typeof import('./resources/ts/views/demos/forms/form-elements/radio/DemoRadioLabelSlot.vue')['default']
|
||||
DemoRadioValidation: typeof import('./resources/ts/views/demos/forms/form-elements/radio/DemoRadioValidation.vue')['default']
|
||||
DemoRangeSliderBasic: typeof import('./resources/ts/views/demos/forms/form-elements/range-slider/DemoRangeSliderBasic.vue')['default']
|
||||
DemoRangeSliderColor: typeof import('./resources/ts/views/demos/forms/form-elements/range-slider/DemoRangeSliderColor.vue')['default']
|
||||
DemoRangeSliderDisabled: typeof import('./resources/ts/views/demos/forms/form-elements/range-slider/DemoRangeSliderDisabled.vue')['default']
|
||||
DemoRangeSliderStep: typeof import('./resources/ts/views/demos/forms/form-elements/range-slider/DemoRangeSliderStep.vue')['default']
|
||||
DemoRangeSliderThumbLabel: typeof import('./resources/ts/views/demos/forms/form-elements/range-slider/DemoRangeSliderThumbLabel.vue')['default']
|
||||
DemoRangeSliderVertical: typeof import('./resources/ts/views/demos/forms/form-elements/range-slider/DemoRangeSliderVertical.vue')['default']
|
||||
DemoRatingBasic: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingBasic.vue')['default']
|
||||
DemoRatingClearable: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingClearable.vue')['default']
|
||||
DemoRatingColors: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingColors.vue')['default']
|
||||
DemoRatingDensity: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingDensity.vue')['default']
|
||||
DemoRatingHover: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingHover.vue')['default']
|
||||
DemoRatingIncremented: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingIncremented.vue')['default']
|
||||
DemoRatingItemSlot: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingItemSlot.vue')['default']
|
||||
DemoRatingLength: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingLength.vue')['default']
|
||||
DemoRatingReadonly: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingReadonly.vue')['default']
|
||||
DemoRatingSize: typeof import('./resources/ts/views/demos/forms/form-elements/rating/DemoRatingSize.vue')['default']
|
||||
DemoSelectBasic: typeof import('./resources/ts/views/demos/forms/form-elements/select/DemoSelectBasic.vue')['default']
|
||||
DemoSelectChips: typeof import('./resources/ts/views/demos/forms/form-elements/select/DemoSelectChips.vue')['default']
|
||||
DemoSelectCustomTextAndValue: typeof import('./resources/ts/views/demos/forms/form-elements/select/DemoSelectCustomTextAndValue.vue')['default']
|
||||
DemoSelectDensity: typeof import('./resources/ts/views/demos/forms/form-elements/select/DemoSelectDensity.vue')['default']
|
||||
DemoSelectIcons: typeof import('./resources/ts/views/demos/forms/form-elements/select/DemoSelectIcons.vue')['default']
|
||||
DemoSelectMenuProps: typeof import('./resources/ts/views/demos/forms/form-elements/select/DemoSelectMenuProps.vue')['default']
|
||||
DemoSelectMultiple: typeof import('./resources/ts/views/demos/forms/form-elements/select/DemoSelectMultiple.vue')['default']
|
||||
DemoSelectSelectionSlot: typeof import('./resources/ts/views/demos/forms/form-elements/select/DemoSelectSelectionSlot.vue')['default']
|
||||
DemoSelectVariant: typeof import('./resources/ts/views/demos/forms/form-elements/select/DemoSelectVariant.vue')['default']
|
||||
DemoSimpleTableBasic: typeof import('./resources/ts/views/demos/forms/tables/simple-table/DemoSimpleTableBasic.vue')['default']
|
||||
DemoSimpleTableDensity: typeof import('./resources/ts/views/demos/forms/tables/simple-table/DemoSimpleTableDensity.vue')['default']
|
||||
DemoSimpleTableFixedHeader: typeof import('./resources/ts/views/demos/forms/tables/simple-table/DemoSimpleTableFixedHeader.vue')['default']
|
||||
DemoSimpleTableHeight: typeof import('./resources/ts/views/demos/forms/tables/simple-table/DemoSimpleTableHeight.vue')['default']
|
||||
DemoSimpleTableTheme: typeof import('./resources/ts/views/demos/forms/tables/simple-table/DemoSimpleTableTheme.vue')['default']
|
||||
DemoSliderAppendAndPrepend: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderAppendAndPrepend.vue')['default']
|
||||
DemoSliderAppendTextField: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderAppendTextField.vue')['default']
|
||||
DemoSliderBasic: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderBasic.vue')['default']
|
||||
DemoSliderColors: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderColors.vue')['default']
|
||||
DemoSliderDisabledAndReadonly: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderDisabledAndReadonly.vue')['default']
|
||||
DemoSliderIcons: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderIcons.vue')['default']
|
||||
DemoSliderMinAndMax: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderMinAndMax.vue')['default']
|
||||
DemoSliderSize: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderSize.vue')['default']
|
||||
DemoSliderStep: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderStep.vue')['default']
|
||||
DemoSliderThumb: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderThumb.vue')['default']
|
||||
DemoSliderTicks: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderTicks.vue')['default']
|
||||
DemoSliderValidation: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderValidation.vue')['default']
|
||||
DemoSliderVertical: typeof import('./resources/ts/views/demos/forms/form-elements/slider/DemoSliderVertical.vue')['default']
|
||||
DemoSnackbarBasic: typeof import('./resources/ts/views/demos/components/snackbar/DemoSnackbarBasic.vue')['default']
|
||||
DemoSnackbarMultiLine: typeof import('./resources/ts/views/demos/components/snackbar/DemoSnackbarMultiLine.vue')['default']
|
||||
DemoSnackbarPosition: typeof import('./resources/ts/views/demos/components/snackbar/DemoSnackbarPosition.vue')['default']
|
||||
DemoSnackbarTimeout: typeof import('./resources/ts/views/demos/components/snackbar/DemoSnackbarTimeout.vue')['default']
|
||||
DemoSnackbarTransition: typeof import('./resources/ts/views/demos/components/snackbar/DemoSnackbarTransition.vue')['default']
|
||||
DemoSnackbarVariants: typeof import('./resources/ts/views/demos/components/snackbar/DemoSnackbarVariants.vue')['default']
|
||||
DemoSnackbarVertical: typeof import('./resources/ts/views/demos/components/snackbar/DemoSnackbarVertical.vue')['default']
|
||||
DemoSnackbarWithAction: typeof import('./resources/ts/views/demos/components/snackbar/DemoSnackbarWithAction.vue')['default']
|
||||
DemoSwiperAutoplay: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperAutoplay.vue')['default']
|
||||
DemoSwiperBasic: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperBasic.vue')['default']
|
||||
DemoSwiperCenteredSlidesOption1: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperCenteredSlidesOption1.vue')['default']
|
||||
DemoSwiperCenteredSlidesOption2: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperCenteredSlidesOption2.vue')['default']
|
||||
DemoSwiperCoverflowEffect: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperCoverflowEffect.vue')['default']
|
||||
DemoSwiperCubeEffect: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperCubeEffect.vue')['default']
|
||||
DemoSwiperFade: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperFade.vue')['default']
|
||||
DemoSwiperGallery: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperGallery.vue')['default']
|
||||
DemoSwiperGrid: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperGrid.vue')['default']
|
||||
DemoSwiperLazyLoading: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperLazyLoading.vue')['default']
|
||||
DemoSwiperMultipleSlidesPerView: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperMultipleSlidesPerView.vue')['default']
|
||||
DemoSwiperNavigation: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperNavigation.vue')['default']
|
||||
DemoSwiperPagination: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperPagination.vue')['default']
|
||||
DemoSwiperProgress: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperProgress.vue')['default']
|
||||
DemoSwiperResponsiveBreakpoints: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperResponsiveBreakpoints.vue')['default']
|
||||
DemoSwiperVirtualSlides: typeof import('./resources/ts/views/demos/components/swiper/DemoSwiperVirtualSlides.vue')['default']
|
||||
DemoSwitchBasic: typeof import('./resources/ts/views/demos/forms/form-elements/switch/DemoSwitchBasic.vue')['default']
|
||||
DemoSwitchColors: typeof import('./resources/ts/views/demos/forms/form-elements/switch/DemoSwitchColors.vue')['default']
|
||||
DemoSwitchInset: typeof import('./resources/ts/views/demos/forms/form-elements/switch/DemoSwitchInset.vue')['default']
|
||||
DemoSwitchLabelSlot: typeof import('./resources/ts/views/demos/forms/form-elements/switch/DemoSwitchLabelSlot.vue')['default']
|
||||
DemoSwitchModelAsArray: typeof import('./resources/ts/views/demos/forms/form-elements/switch/DemoSwitchModelAsArray.vue')['default']
|
||||
DemoSwitchStates: typeof import('./resources/ts/views/demos/forms/form-elements/switch/DemoSwitchStates.vue')['default']
|
||||
DemoSwitchTrueAndFalseValue: typeof import('./resources/ts/views/demos/forms/form-elements/switch/DemoSwitchTrueAndFalseValue.vue')['default']
|
||||
DemoTabsAlignment: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsAlignment.vue')['default']
|
||||
DemoTabsBasic: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsBasic.vue')['default']
|
||||
DemoTabsBasicPill: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsBasicPill.vue')['default']
|
||||
DemoTabsCustomIcons: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsCustomIcons.vue')['default']
|
||||
DemoTabsDynamic: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsDynamic.vue')['default']
|
||||
DemoTabsFixed: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsFixed.vue')['default']
|
||||
DemoTabsGrow: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsGrow.vue')['default']
|
||||
DemoTabsPagination: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsPagination.vue')['default']
|
||||
DemoTabsProgrammaticNavigation: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsProgrammaticNavigation.vue')['default']
|
||||
DemoTabsStacked: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsStacked.vue')['default']
|
||||
DemoTabsVertical: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsVertical.vue')['default']
|
||||
DemoTabsVerticalPill: typeof import('./resources/ts/views/demos/components/tabs/DemoTabsVerticalPill.vue')['default']
|
||||
DemoTextareaAutoGrow: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaAutoGrow.vue')['default']
|
||||
DemoTextareaBasic: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaBasic.vue')['default']
|
||||
DemoTextareaBrowserAutocomplete: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaBrowserAutocomplete.vue')['default']
|
||||
DemoTextareaClearable: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaClearable.vue')['default']
|
||||
DemoTextareaCounter: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaCounter.vue')['default']
|
||||
DemoTextareaIcons: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaIcons.vue')['default']
|
||||
DemoTextareaNoResize: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaNoResize.vue')['default']
|
||||
DemoTextareaRows: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaRows.vue')['default']
|
||||
DemoTextareaStates: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaStates.vue')['default']
|
||||
DemoTextareaValidation: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaValidation.vue')['default']
|
||||
DemoTextareaVariant: typeof import('./resources/ts/views/demos/forms/form-elements/textarea/DemoTextareaVariant.vue')['default']
|
||||
DemoTextfieldBasic: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldBasic.vue')['default']
|
||||
DemoTextfieldClearable: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldClearable.vue')['default']
|
||||
DemoTextfieldCounter: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldCounter.vue')['default']
|
||||
DemoTextfieldCustomColors: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldCustomColors.vue')['default']
|
||||
DemoTextfieldDensity: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldDensity.vue')['default']
|
||||
DemoTextfieldIconEvents: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldIconEvents.vue')['default']
|
||||
DemoTextfieldIcons: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldIcons.vue')['default']
|
||||
DemoTextfieldIconSlots: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldIconSlots.vue')['default']
|
||||
DemoTextfieldLabelSlot: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldLabelSlot.vue')['default']
|
||||
DemoTextfieldPasswordInput: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldPasswordInput.vue')['default']
|
||||
DemoTextfieldPrefixesAndSuffixes: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldPrefixesAndSuffixes.vue')['default']
|
||||
DemoTextfieldSingleLine: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldSingleLine.vue')['default']
|
||||
DemoTextfieldState: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldState.vue')['default']
|
||||
DemoTextfieldValidation: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldValidation.vue')['default']
|
||||
DemoTextfieldVariant: typeof import('./resources/ts/views/demos/forms/form-elements/textfield/DemoTextfieldVariant.vue')['default']
|
||||
DemoTooltipDelayOnHover: typeof import('./resources/ts/views/demos/components/tooltip/DemoTooltipDelayOnHover.vue')['default']
|
||||
DemoTooltipEvents: typeof import('./resources/ts/views/demos/components/tooltip/DemoTooltipEvents.vue')['default']
|
||||
DemoTooltipLocation: typeof import('./resources/ts/views/demos/components/tooltip/DemoTooltipLocation.vue')['default']
|
||||
DemoTooltipTooltipOnVariousElements: typeof import('./resources/ts/views/demos/components/tooltip/DemoTooltipTooltipOnVariousElements.vue')['default']
|
||||
DemoTooltipTransition: typeof import('./resources/ts/views/demos/components/tooltip/DemoTooltipTransition.vue')['default']
|
||||
DemoTooltipVModelSupport: typeof import('./resources/ts/views/demos/components/tooltip/DemoTooltipVModelSupport.vue')['default']
|
||||
DialogCloseBtn: typeof import('./resources/ts/@core/components/DialogCloseBtn.vue')['default']
|
||||
DropZone: typeof import('./resources/ts/@core/components/DropZone.vue')['default']
|
||||
EnableOneTimePasswordDialog: typeof import('./resources/ts/components/dialogs/EnableOneTimePasswordDialog.vue')['default']
|
||||
ErrorHeader: typeof import('./resources/ts/components/ErrorHeader.vue')['default']
|
||||
I18n: typeof import('./resources/ts/@core/components/I18n.vue')['default']
|
||||
MoreBtn: typeof import('./resources/ts/@core/components/MoreBtn.vue')['default']
|
||||
Notifications: typeof import('./resources/ts/@core/components/Notifications.vue')['default']
|
||||
PaymentProvidersDialog: typeof import('./resources/ts/components/dialogs/PaymentProvidersDialog.vue')['default']
|
||||
PricingPlanDialog: typeof import('./resources/ts/components/dialogs/PricingPlanDialog.vue')['default']
|
||||
ProductDescriptionEditor: typeof import('./resources/ts/@core/components/ProductDescriptionEditor.vue')['default']
|
||||
ReferAndEarnDialog: typeof import('./resources/ts/components/dialogs/ReferAndEarnDialog.vue')['default']
|
||||
RouterLink: typeof import('vue-router')['RouterLink']
|
||||
RouterView: typeof import('vue-router')['RouterView']
|
||||
ScrollToTop: typeof import('./resources/ts/@core/components/ScrollToTop.vue')['default']
|
||||
ShareProjectDialog: typeof import('./resources/ts/components/dialogs/ShareProjectDialog.vue')['default']
|
||||
Shortcuts: typeof import('./resources/ts/@core/components/Shortcuts.vue')['default']
|
||||
TablePagination: typeof import('./resources/ts/@core/components/TablePagination.vue')['default']
|
||||
TheCustomizer: typeof import('./resources/ts/@core/components/TheCustomizer.vue')['default']
|
||||
ThemeSwitcher: typeof import('./resources/ts/@core/components/ThemeSwitcher.vue')['default']
|
||||
TimelineBasic: typeof import('./resources/ts/views/demos/components/timeline/TimelineBasic.vue')['default']
|
||||
TimelineOutlined: typeof import('./resources/ts/views/demos/components/timeline/TimelineOutlined.vue')['default']
|
||||
TimelineWithIcons: typeof import('./resources/ts/views/demos/components/timeline/TimelineWithIcons.vue')['default']
|
||||
TiptapEditor: typeof import('./resources/ts/@core/components/TiptapEditor.vue')['default']
|
||||
TwoFactorAuthDialog: typeof import('./resources/ts/components/dialogs/TwoFactorAuthDialog.vue')['default']
|
||||
UserInfoEditDialog: typeof import('./resources/ts/components/dialogs/UserInfoEditDialog.vue')['default']
|
||||
UserUpgradePlanDialog: typeof import('./resources/ts/components/dialogs/UserUpgradePlanDialog.vue')['default']
|
||||
VueApexCharts: typeof import('vue3-apexcharts')['default']
|
||||
}
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
services:
|
||||
laravel.test:
|
||||
build:
|
||||
context: './vendor/laravel/sail/runtimes/8.4'
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
WWWGROUP: '${WWWGROUP}'
|
||||
image: 'sail-8.4/app'
|
||||
extra_hosts:
|
||||
- 'host.docker.internal:host-gateway'
|
||||
ports:
|
||||
- '${APP_PORT:-80}:80'
|
||||
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
|
||||
environment:
|
||||
WWWUSER: '${WWWUSER}'
|
||||
LARAVEL_SAIL: 1
|
||||
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
|
||||
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
|
||||
IGNITION_LOCAL_SITES_PATH: '${PWD}'
|
||||
volumes:
|
||||
- '.:/var/www/html'
|
||||
networks:
|
||||
- sail
|
||||
depends_on:
|
||||
- mysql
|
||||
- redis
|
||||
- selenium
|
||||
- mailpit
|
||||
mysql:
|
||||
image: 'mysql/mysql-server:8.0'
|
||||
ports:
|
||||
- '${FORWARD_DB_PORT:-3306}:3306'
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
|
||||
MYSQL_ROOT_HOST: '%'
|
||||
MYSQL_DATABASE: '${DB_DATABASE}'
|
||||
MYSQL_USER: '${DB_USERNAME}'
|
||||
MYSQL_PASSWORD: '${DB_PASSWORD}'
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: 1
|
||||
MYSQL_EXTRA_OPTIONS: '${MYSQL_EXTRA_OPTIONS}'
|
||||
volumes:
|
||||
- 'sail-mysql:/var/lib/mysql'
|
||||
- './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
|
||||
networks:
|
||||
- sail
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- mysqladmin
|
||||
- ping
|
||||
- '-p${DB_PASSWORD}'
|
||||
retries: 3
|
||||
timeout: 5s
|
||||
redis:
|
||||
image: 'redis:alpine'
|
||||
ports:
|
||||
- '${FORWARD_REDIS_PORT:-6379}:6379'
|
||||
volumes:
|
||||
- 'sail-redis:/data'
|
||||
networks:
|
||||
- sail
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- redis-cli
|
||||
- ping
|
||||
retries: 3
|
||||
timeout: 5s
|
||||
selenium:
|
||||
image: selenium/standalone-chromium
|
||||
extra_hosts:
|
||||
- 'host.docker.internal:host-gateway'
|
||||
volumes:
|
||||
- '/dev/shm:/dev/shm'
|
||||
networks:
|
||||
- sail
|
||||
mailpit:
|
||||
image: 'axllent/mailpit:latest'
|
||||
ports:
|
||||
- '${FORWARD_MAILPIT_PORT:-1025}:1025'
|
||||
- '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025'
|
||||
networks:
|
||||
- sail
|
||||
networks:
|
||||
sail:
|
||||
driver: bridge
|
||||
volumes:
|
||||
sail-mysql:
|
||||
driver: local
|
||||
sail-redis:
|
||||
driver: local
|
||||
@@ -1,86 +0,0 @@
|
||||
{
|
||||
"$schema": "https://getcomposer.org/schema.json",
|
||||
"name": "laravel/laravel",
|
||||
"type": "project",
|
||||
"description": "The skeleton application for the Laravel framework.",
|
||||
"keywords": ["laravel", "framework"],
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"laravel/framework": "^12.0",
|
||||
"laravel/tinker": "^2.10.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.23",
|
||||
"laravel/pail": "^1.2.2",
|
||||
"laravel/pint": "^1.24",
|
||||
"laravel/sail": "^1.41",
|
||||
"mockery/mockery": "^1.6",
|
||||
"nunomaduro/collision": "^8.6",
|
||||
"phpunit/phpunit": "^11.5.3"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "app/",
|
||||
"Database\\Factories\\": "database/factories/",
|
||||
"Database\\Seeders\\": "database/seeders/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"setup": [
|
||||
"composer install",
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
|
||||
"@php artisan key:generate",
|
||||
"@php artisan migrate --force",
|
||||
"npm install",
|
||||
"npm run build"
|
||||
],
|
||||
"dev": [
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
|
||||
],
|
||||
"test": [
|
||||
"@php artisan config:clear --ansi",
|
||||
"@php artisan test"
|
||||
],
|
||||
"post-autoload-dump": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||
"@php artisan package:discover --ansi"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
||||
],
|
||||
"post-root-package-install": [
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||
],
|
||||
"post-create-project-cmd": [
|
||||
"@php artisan key:generate --ansi",
|
||||
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
|
||||
"@php artisan migrate --graceful --ansi"
|
||||
],
|
||||
"pre-package-uninstall": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"dont-discover": []
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"pestphp/pest-plugin": true,
|
||||
"php-http/discovery": true
|
||||
}
|
||||
},
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true
|
||||
}
|
||||
@@ -1,126 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is the name of your application, which will be used when the
|
||||
| framework needs to place the application's name in a notification or
|
||||
| other UI elements where an application name needs to be displayed.
|
||||
|
|
||||
*/
|
||||
|
||||
'name' => env('APP_NAME', 'Laravel'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Environment
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value determines the "environment" your application is currently
|
||||
| running in. This may determine how you prefer to configure various
|
||||
| services the application utilizes. Set this in your ".env" file.
|
||||
|
|
||||
*/
|
||||
|
||||
'env' => env('APP_ENV', 'production'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Debug Mode
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When your application is in debug mode, detailed error messages with
|
||||
| stack traces will be shown on every error that occurs within your
|
||||
| application. If disabled, a simple generic error page is shown.
|
||||
|
|
||||
*/
|
||||
|
||||
'debug' => (bool) env('APP_DEBUG', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This URL is used by the console to properly generate URLs when using
|
||||
| the Artisan command line tool. You should set this to the root of
|
||||
| the application so that it's available within Artisan commands.
|
||||
|
|
||||
*/
|
||||
|
||||
'url' => env('APP_URL', 'http://localhost'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Timezone
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default timezone for your application, which
|
||||
| will be used by the PHP date and date-time functions. The timezone
|
||||
| is set to "UTC" by default as it is suitable for most use cases.
|
||||
|
|
||||
*/
|
||||
|
||||
'timezone' => 'UTC',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Locale Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The application locale determines the default locale that will be used
|
||||
| by Laravel's translation / localization methods. This option can be
|
||||
| set to any locale for which you plan to have translation strings.
|
||||
|
|
||||
*/
|
||||
|
||||
'locale' => env('APP_LOCALE', 'en'),
|
||||
|
||||
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
|
||||
|
||||
'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Encryption Key
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This key is utilized by Laravel's encryption services and should be set
|
||||
| to a random, 32 character string to ensure that all encrypted values
|
||||
| are secure. You should do this prior to deploying the application.
|
||||
|
|
||||
*/
|
||||
|
||||
'cipher' => 'AES-256-CBC',
|
||||
|
||||
'key' => env('APP_KEY'),
|
||||
|
||||
'previous_keys' => [
|
||||
...array_filter(
|
||||
explode(',', (string) env('APP_PREVIOUS_KEYS', ''))
|
||||
),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Maintenance Mode Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These configuration options determine the driver used to determine and
|
||||
| manage Laravel's "maintenance mode" status. The "cache" driver will
|
||||
| allow maintenance mode to be controlled across multiple machines.
|
||||
|
|
||||
| Supported drivers: "file", "cache"
|
||||
|
|
||||
*/
|
||||
|
||||
'maintenance' => [
|
||||
'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
|
||||
'store' => env('APP_MAINTENANCE_STORE', 'database'),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -1,115 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Defaults
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option defines the default authentication "guard" and password
|
||||
| reset "broker" for your application. You may change these values
|
||||
| as required, but they're a perfect start for most applications.
|
||||
|
|
||||
*/
|
||||
|
||||
'defaults' => [
|
||||
'guard' => env('AUTH_GUARD', 'web'),
|
||||
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Guards
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Next, you may define every authentication guard for your application.
|
||||
| Of course, a great default configuration has been defined for you
|
||||
| which utilizes session storage plus the Eloquent user provider.
|
||||
|
|
||||
| All authentication guards have a user provider, which defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| system used by the application. Typically, Eloquent is utilized.
|
||||
|
|
||||
| Supported: "session"
|
||||
|
|
||||
*/
|
||||
|
||||
'guards' => [
|
||||
'web' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'users',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| User Providers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| All authentication guards have a user provider, which defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| system used by the application. Typically, Eloquent is utilized.
|
||||
|
|
||||
| If you have multiple user tables or models you may configure multiple
|
||||
| providers to represent the model / table. These providers may then
|
||||
| be assigned to any extra authentication guards you have defined.
|
||||
|
|
||||
| Supported: "database", "eloquent"
|
||||
|
|
||||
*/
|
||||
|
||||
'providers' => [
|
||||
'users' => [
|
||||
'driver' => 'eloquent',
|
||||
'model' => env('AUTH_MODEL', App\Models\User::class),
|
||||
],
|
||||
|
||||
// 'users' => [
|
||||
// 'driver' => 'database',
|
||||
// 'table' => 'users',
|
||||
// ],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Resetting Passwords
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These configuration options specify the behavior of Laravel's password
|
||||
| reset functionality, including the table utilized for token storage
|
||||
| and the user provider that is invoked to actually retrieve users.
|
||||
|
|
||||
| The expiry time is the number of minutes that each reset token will be
|
||||
| considered valid. This security feature keeps tokens short-lived so
|
||||
| they have less time to be guessed. You may change this as needed.
|
||||
|
|
||||
| The throttle setting is the number of seconds a user must wait before
|
||||
| generating more password reset tokens. This prevents the user from
|
||||
| quickly generating a very large amount of password reset tokens.
|
||||
|
|
||||
*/
|
||||
|
||||
'passwords' => [
|
||||
'users' => [
|
||||
'provider' => 'users',
|
||||
'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
|
||||
'expire' => 60,
|
||||
'throttle' => 60,
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Confirmation Timeout
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define the number of seconds before a password confirmation
|
||||
| window expires and users are asked to re-enter their password via the
|
||||
| confirmation screen. By default, the timeout lasts for three hours.
|
||||
|
|
||||
*/
|
||||
|
||||
'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
|
||||
|
||||
];
|
||||
@@ -1,117 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Cache Store
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default cache store that will be used by the
|
||||
| framework. This connection is utilized if another isn't explicitly
|
||||
| specified when running a cache operation inside the application.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('CACHE_STORE', 'database'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Stores
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define all of the cache "stores" for your application as
|
||||
| well as their drivers. You may even define multiple stores for the
|
||||
| same cache driver to group types of items stored in your caches.
|
||||
|
|
||||
| Supported drivers: "array", "database", "file", "memcached",
|
||||
| "redis", "dynamodb", "octane",
|
||||
| "failover", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'stores' => [
|
||||
|
||||
'array' => [
|
||||
'driver' => 'array',
|
||||
'serialize' => false,
|
||||
],
|
||||
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'connection' => env('DB_CACHE_CONNECTION'),
|
||||
'table' => env('DB_CACHE_TABLE', 'cache'),
|
||||
'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
|
||||
'lock_table' => env('DB_CACHE_LOCK_TABLE'),
|
||||
],
|
||||
|
||||
'file' => [
|
||||
'driver' => 'file',
|
||||
'path' => storage_path('framework/cache/data'),
|
||||
'lock_path' => storage_path('framework/cache/data'),
|
||||
],
|
||||
|
||||
'memcached' => [
|
||||
'driver' => 'memcached',
|
||||
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
|
||||
'sasl' => [
|
||||
env('MEMCACHED_USERNAME'),
|
||||
env('MEMCACHED_PASSWORD'),
|
||||
],
|
||||
'options' => [
|
||||
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
|
||||
],
|
||||
'servers' => [
|
||||
[
|
||||
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
|
||||
'port' => env('MEMCACHED_PORT', 11211),
|
||||
'weight' => 100,
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
|
||||
'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
|
||||
],
|
||||
|
||||
'dynamodb' => [
|
||||
'driver' => 'dynamodb',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
|
||||
'endpoint' => env('DYNAMODB_ENDPOINT'),
|
||||
],
|
||||
|
||||
'octane' => [
|
||||
'driver' => 'octane',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'driver' => 'failover',
|
||||
'stores' => [
|
||||
'database',
|
||||
'array',
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Key Prefix
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When utilizing the APC, database, memcached, Redis, and DynamoDB cache
|
||||
| stores, there might be other applications using the same cache. For
|
||||
| that reason, you may prefix every cache key to avoid collisions.
|
||||
|
|
||||
*/
|
||||
|
||||
'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'),
|
||||
|
||||
];
|
||||
@@ -1,183 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Database Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify which of the database connections below you wish
|
||||
| to use as your default connection for database operations. This is
|
||||
| the connection which will be utilized unless another connection
|
||||
| is explicitly specified when you execute a query / statement.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('DB_CONNECTION', 'sqlite'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Database Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Below are all of the database connections defined for your application.
|
||||
| An example configuration is provided for each database system which
|
||||
| is supported by Laravel. You're free to add / remove connections.
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'sqlite' => [
|
||||
'driver' => 'sqlite',
|
||||
'url' => env('DB_URL'),
|
||||
'database' => env('DB_DATABASE', database_path('database.sqlite')),
|
||||
'prefix' => '',
|
||||
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
|
||||
'busy_timeout' => null,
|
||||
'journal_mode' => null,
|
||||
'synchronous' => null,
|
||||
'transaction_mode' => 'DEFERRED',
|
||||
],
|
||||
|
||||
'mysql' => [
|
||||
'driver' => 'mysql',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '3306'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
||||
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
|
||||
]) : [],
|
||||
],
|
||||
|
||||
'mariadb' => [
|
||||
'driver' => 'mariadb',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '3306'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
||||
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
|
||||
]) : [],
|
||||
],
|
||||
|
||||
'pgsql' => [
|
||||
'driver' => 'pgsql',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '5432'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'search_path' => 'public',
|
||||
'sslmode' => 'prefer',
|
||||
],
|
||||
|
||||
'sqlsrv' => [
|
||||
'driver' => 'sqlsrv',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', 'localhost'),
|
||||
'port' => env('DB_PORT', '1433'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
// 'encrypt' => env('DB_ENCRYPT', 'yes'),
|
||||
// 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Migration Repository Table
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This table keeps track of all the migrations that have already run for
|
||||
| your application. Using this information, we can determine which of
|
||||
| the migrations on disk haven't actually been run on the database.
|
||||
|
|
||||
*/
|
||||
|
||||
'migrations' => [
|
||||
'table' => 'migrations',
|
||||
'update_date_on_publish' => true,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Redis Databases
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Redis is an open source, fast, and advanced key-value store that also
|
||||
| provides a richer body of commands than a typical key-value system
|
||||
| such as Memcached. You may define your connection settings here.
|
||||
|
|
||||
*/
|
||||
|
||||
'redis' => [
|
||||
|
||||
'client' => env('REDIS_CLIENT', 'phpredis'),
|
||||
|
||||
'options' => [
|
||||
'cluster' => env('REDIS_CLUSTER', 'redis'),
|
||||
'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
|
||||
'persistent' => env('REDIS_PERSISTENT', false),
|
||||
],
|
||||
|
||||
'default' => [
|
||||
'url' => env('REDIS_URL'),
|
||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||
'username' => env('REDIS_USERNAME'),
|
||||
'password' => env('REDIS_PASSWORD'),
|
||||
'port' => env('REDIS_PORT', '6379'),
|
||||
'database' => env('REDIS_DB', '0'),
|
||||
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
||||
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
||||
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
||||
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
||||
],
|
||||
|
||||
'cache' => [
|
||||
'url' => env('REDIS_URL'),
|
||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||
'username' => env('REDIS_USERNAME'),
|
||||
'password' => env('REDIS_PASSWORD'),
|
||||
'port' => env('REDIS_PORT', '6379'),
|
||||
'database' => env('REDIS_CACHE_DB', '1'),
|
||||
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
||||
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
||||
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
||||
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Filesystem Disk
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default filesystem disk that should be used
|
||||
| by the framework. The "local" disk, as well as a variety of cloud
|
||||
| based disks are available to your application for file storage.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('FILESYSTEM_DISK', 'local'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filesystem Disks
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Below you may configure as many filesystem disks as necessary, and you
|
||||
| may even configure multiple disks for the same driver. Examples for
|
||||
| most supported storage drivers are configured here for reference.
|
||||
|
|
||||
| Supported drivers: "local", "ftp", "sftp", "s3"
|
||||
|
|
||||
*/
|
||||
|
||||
'disks' => [
|
||||
|
||||
'local' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/private'),
|
||||
'serve' => true,
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
'public' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/public'),
|
||||
'url' => env('APP_URL').'/storage',
|
||||
'visibility' => 'public',
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
's3' => [
|
||||
'driver' => 's3',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION'),
|
||||
'bucket' => env('AWS_BUCKET'),
|
||||
'url' => env('AWS_URL'),
|
||||
'endpoint' => env('AWS_ENDPOINT'),
|
||||
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Symbolic Links
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the symbolic links that will be created when the
|
||||
| `storage:link` Artisan command is executed. The array keys should be
|
||||
| the locations of the links and the values should be their targets.
|
||||
|
|
||||
*/
|
||||
|
||||
'links' => [
|
||||
public_path('storage') => storage_path('app/public'),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -1,132 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Monolog\Handler\NullHandler;
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use Monolog\Handler\SyslogUdpHandler;
|
||||
use Monolog\Processor\PsrLogMessageProcessor;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Log Channel
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option defines the default log channel that is utilized to write
|
||||
| messages to your logs. The value provided here should match one of
|
||||
| the channels present in the list of "channels" configured below.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('LOG_CHANNEL', 'stack'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Deprecations Log Channel
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the log channel that should be used to log warnings
|
||||
| regarding deprecated PHP and library features. This allows you to get
|
||||
| your application ready for upcoming major versions of dependencies.
|
||||
|
|
||||
*/
|
||||
|
||||
'deprecations' => [
|
||||
'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
|
||||
'trace' => env('LOG_DEPRECATIONS_TRACE', false),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Channels
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the log channels for your application. Laravel
|
||||
| utilizes the Monolog PHP logging library, which includes a variety
|
||||
| of powerful log handlers and formatters that you're free to use.
|
||||
|
|
||||
| Available drivers: "single", "daily", "slack", "syslog",
|
||||
| "errorlog", "monolog", "custom", "stack"
|
||||
|
|
||||
*/
|
||||
|
||||
'channels' => [
|
||||
|
||||
'stack' => [
|
||||
'driver' => 'stack',
|
||||
'channels' => explode(',', (string) env('LOG_STACK', 'single')),
|
||||
'ignore_exceptions' => false,
|
||||
],
|
||||
|
||||
'single' => [
|
||||
'driver' => 'single',
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'daily' => [
|
||||
'driver' => 'daily',
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'days' => env('LOG_DAILY_DAYS', 14),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'driver' => 'slack',
|
||||
'url' => env('LOG_SLACK_WEBHOOK_URL'),
|
||||
'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),
|
||||
'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
|
||||
'level' => env('LOG_LEVEL', 'critical'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'papertrail' => [
|
||||
'driver' => 'monolog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
|
||||
'handler_with' => [
|
||||
'host' => env('PAPERTRAIL_URL'),
|
||||
'port' => env('PAPERTRAIL_PORT'),
|
||||
'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
|
||||
],
|
||||
'processors' => [PsrLogMessageProcessor::class],
|
||||
],
|
||||
|
||||
'stderr' => [
|
||||
'driver' => 'monolog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'handler' => StreamHandler::class,
|
||||
'handler_with' => [
|
||||
'stream' => 'php://stderr',
|
||||
],
|
||||
'formatter' => env('LOG_STDERR_FORMATTER'),
|
||||
'processors' => [PsrLogMessageProcessor::class],
|
||||
],
|
||||
|
||||
'syslog' => [
|
||||
'driver' => 'syslog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'errorlog' => [
|
||||
'driver' => 'errorlog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => NullHandler::class,
|
||||
],
|
||||
|
||||
'emergency' => [
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
@@ -1,118 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Mailer
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default mailer that is used to send all email
|
||||
| messages unless another mailer is explicitly specified when sending
|
||||
| the message. All additional mailers can be configured within the
|
||||
| "mailers" array. Examples of each type of mailer are provided.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('MAIL_MAILER', 'log'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Mailer Configurations
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure all of the mailers used by your application plus
|
||||
| their respective settings. Several examples have been configured for
|
||||
| you and you are free to add your own as your application requires.
|
||||
|
|
||||
| Laravel supports a variety of mail "transport" drivers that can be used
|
||||
| when delivering an email. You may specify which one you're using for
|
||||
| your mailers below. You may also add additional mailers if needed.
|
||||
|
|
||||
| Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
|
||||
| "postmark", "resend", "log", "array",
|
||||
| "failover", "roundrobin"
|
||||
|
|
||||
*/
|
||||
|
||||
'mailers' => [
|
||||
|
||||
'smtp' => [
|
||||
'transport' => 'smtp',
|
||||
'scheme' => env('MAIL_SCHEME'),
|
||||
'url' => env('MAIL_URL'),
|
||||
'host' => env('MAIL_HOST', '127.0.0.1'),
|
||||
'port' => env('MAIL_PORT', 2525),
|
||||
'username' => env('MAIL_USERNAME'),
|
||||
'password' => env('MAIL_PASSWORD'),
|
||||
'timeout' => null,
|
||||
'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'transport' => 'ses',
|
||||
],
|
||||
|
||||
'postmark' => [
|
||||
'transport' => 'postmark',
|
||||
// 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
|
||||
// 'client' => [
|
||||
// 'timeout' => 5,
|
||||
// ],
|
||||
],
|
||||
|
||||
'resend' => [
|
||||
'transport' => 'resend',
|
||||
],
|
||||
|
||||
'sendmail' => [
|
||||
'transport' => 'sendmail',
|
||||
'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
|
||||
],
|
||||
|
||||
'log' => [
|
||||
'transport' => 'log',
|
||||
'channel' => env('MAIL_LOG_CHANNEL'),
|
||||
],
|
||||
|
||||
'array' => [
|
||||
'transport' => 'array',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'transport' => 'failover',
|
||||
'mailers' => [
|
||||
'smtp',
|
||||
'log',
|
||||
],
|
||||
'retry_after' => 60,
|
||||
],
|
||||
|
||||
'roundrobin' => [
|
||||
'transport' => 'roundrobin',
|
||||
'mailers' => [
|
||||
'ses',
|
||||
'postmark',
|
||||
],
|
||||
'retry_after' => 60,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Global "From" Address
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You may wish for all emails sent by your application to be sent from
|
||||
| the same address. Here you may specify a name and address that is
|
||||
| used globally for all emails that are sent by your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'from' => [
|
||||
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
|
||||
'name' => env('MAIL_FROM_NAME', 'Example'),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -1,125 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Queue Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Laravel's queue supports a variety of backends via a single, unified
|
||||
| API, giving you convenient access to each backend using identical
|
||||
| syntax for each. The default queue connection is defined below.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('QUEUE_CONNECTION', 'database'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Queue Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the connection options for every queue backend
|
||||
| used by your application. An example configuration is provided for
|
||||
| each backend supported by Laravel. You're also free to add more.
|
||||
|
|
||||
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis",
|
||||
| "deferred", "failover", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'sync' => [
|
||||
'driver' => 'sync',
|
||||
],
|
||||
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'connection' => env('DB_QUEUE_CONNECTION'),
|
||||
'table' => env('DB_QUEUE_TABLE', 'jobs'),
|
||||
'queue' => env('DB_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'beanstalkd' => [
|
||||
'driver' => 'beanstalkd',
|
||||
'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
|
||||
'queue' => env('BEANSTALKD_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
|
||||
'block_for' => 0,
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'sqs' => [
|
||||
'driver' => 'sqs',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
|
||||
'queue' => env('SQS_QUEUE', 'default'),
|
||||
'suffix' => env('SQS_SUFFIX'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
|
||||
'queue' => env('REDIS_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
|
||||
'block_for' => null,
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'deferred' => [
|
||||
'driver' => 'deferred',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'driver' => 'failover',
|
||||
'connections' => [
|
||||
'database',
|
||||
'deferred',
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Job Batching
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following options configure the database and table that store job
|
||||
| batching information. These options can be updated to any database
|
||||
| connection and table which has been defined by your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'batching' => [
|
||||
'database' => env('DB_CONNECTION', 'sqlite'),
|
||||
'table' => 'job_batches',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Failed Queue Jobs
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These options configure the behavior of failed queue job logging so you
|
||||
| can control how and where failed jobs are stored. Laravel ships with
|
||||
| support for storing failed jobs in a simple file or in a database.
|
||||
|
|
||||
| Supported drivers: "database-uuids", "dynamodb", "file", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => [
|
||||
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
|
||||
'database' => env('DB_CONNECTION', 'sqlite'),
|
||||
'table' => 'failed_jobs',
|
||||
],
|
||||
|
||||
];
|
||||
@@ -1,38 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Third Party Services
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This file is for storing the credentials for third party services such
|
||||
| as Mailgun, Postmark, AWS and more. This file provides the de facto
|
||||
| location for this type of information, allowing packages to have
|
||||
| a conventional file to locate the various service credentials.
|
||||
|
|
||||
*/
|
||||
|
||||
'postmark' => [
|
||||
'token' => env('POSTMARK_TOKEN'),
|
||||
],
|
||||
|
||||
'resend' => [
|
||||
'key' => env('RESEND_KEY'),
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'notifications' => [
|
||||
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
|
||||
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
|
||||
],
|
||||
],
|
||||
|
||||
];
|
||||
@@ -1,217 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Session Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option determines the default session driver that is utilized for
|
||||
| incoming requests. Laravel supports a variety of storage options to
|
||||
| persist session data. Database storage is a great default choice.
|
||||
|
|
||||
| Supported: "file", "cookie", "database", "memcached",
|
||||
| "redis", "dynamodb", "array"
|
||||
|
|
||||
*/
|
||||
|
||||
'driver' => env('SESSION_DRIVER', 'database'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Lifetime
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the number of minutes that you wish the session
|
||||
| to be allowed to remain idle before it expires. If you want them
|
||||
| to expire immediately when the browser is closed then you may
|
||||
| indicate that via the expire_on_close configuration option.
|
||||
|
|
||||
*/
|
||||
|
||||
'lifetime' => (int) env('SESSION_LIFETIME', 120),
|
||||
|
||||
'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Encryption
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option allows you to easily specify that all of your session data
|
||||
| should be encrypted before it's stored. All encryption is performed
|
||||
| automatically by Laravel and you may use the session like normal.
|
||||
|
|
||||
*/
|
||||
|
||||
'encrypt' => env('SESSION_ENCRYPT', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session File Location
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When utilizing the "file" session driver, the session files are placed
|
||||
| on disk. The default storage location is defined here; however, you
|
||||
| are free to provide another location where they should be stored.
|
||||
|
|
||||
*/
|
||||
|
||||
'files' => storage_path('framework/sessions'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Database Connection
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "database" or "redis" session drivers, you may specify a
|
||||
| connection that should be used to manage these sessions. This should
|
||||
| correspond to a connection in your database configuration options.
|
||||
|
|
||||
*/
|
||||
|
||||
'connection' => env('SESSION_CONNECTION'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Database Table
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "database" session driver, you may specify the table to
|
||||
| be used to store sessions. Of course, a sensible default is defined
|
||||
| for you; however, you're welcome to change this to another table.
|
||||
|
|
||||
*/
|
||||
|
||||
'table' => env('SESSION_TABLE', 'sessions'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cache Store
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using one of the framework's cache driven session backends, you may
|
||||
| define the cache store which should be used to store the session data
|
||||
| between requests. This must match one of your defined cache stores.
|
||||
|
|
||||
| Affects: "dynamodb", "memcached", "redis"
|
||||
|
|
||||
*/
|
||||
|
||||
'store' => env('SESSION_STORE'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Sweeping Lottery
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Some session drivers must manually sweep their storage location to get
|
||||
| rid of old sessions from storage. Here are the chances that it will
|
||||
| happen on a given request. By default, the odds are 2 out of 100.
|
||||
|
|
||||
*/
|
||||
|
||||
'lottery' => [2, 100],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may change the name of the session cookie that is created by
|
||||
| the framework. Typically, you should not need to change this value
|
||||
| since doing so does not grant a meaningful security improvement.
|
||||
|
|
||||
*/
|
||||
|
||||
'cookie' => env(
|
||||
'SESSION_COOKIE',
|
||||
Str::slug((string) env('APP_NAME', 'laravel')).'-session'
|
||||
),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The session cookie path determines the path for which the cookie will
|
||||
| be regarded as available. Typically, this will be the root path of
|
||||
| your application, but you're free to change this when necessary.
|
||||
|
|
||||
*/
|
||||
|
||||
'path' => env('SESSION_PATH', '/'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Domain
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value determines the domain and subdomains the session cookie is
|
||||
| available to. By default, the cookie will be available to the root
|
||||
| domain and all subdomains. Typically, this shouldn't be changed.
|
||||
|
|
||||
*/
|
||||
|
||||
'domain' => env('SESSION_DOMAIN'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| HTTPS Only Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| By setting this option to true, session cookies will only be sent back
|
||||
| to the server if the browser has a HTTPS connection. This will keep
|
||||
| the cookie from being sent to you when it can't be done securely.
|
||||
|
|
||||
*/
|
||||
|
||||
'secure' => env('SESSION_SECURE_COOKIE'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| HTTP Access Only
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Setting this value to true will prevent JavaScript from accessing the
|
||||
| value of the cookie and the cookie will only be accessible through
|
||||
| the HTTP protocol. It's unlikely you should disable this option.
|
||||
|
|
||||
*/
|
||||
|
||||
'http_only' => env('SESSION_HTTP_ONLY', true),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Same-Site Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option determines how your cookies behave when cross-site requests
|
||||
| take place, and can be used to mitigate CSRF attacks. By default, we
|
||||
| will set this value to "lax" to permit secure cross-site requests.
|
||||
|
|
||||
| See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
|
||||
|
|
||||
| Supported: "lax", "strict", "none", null
|
||||
|
|
||||
*/
|
||||
|
||||
'same_site' => env('SESSION_SAME_SITE', 'lax'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Partitioned Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Setting this value to true will tie the cookie to the top-level site for
|
||||
| a cross-site context. Partitioned cookies are accepted by the browser
|
||||
| when flagged "secure" and the Same-Site attribute is set to "none".
|
||||
|
|
||||
*/
|
||||
|
||||
'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
|
||||
|
||||
];
|
||||
@@ -1 +0,0 @@
|
||||
*.sqlite*
|
||||
@@ -1,44 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
/**
|
||||
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
|
||||
*/
|
||||
class UserFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The current password being used by the factory.
|
||||
*/
|
||||
protected static ?string $password;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
'name' => fake()->name(),
|
||||
'email' => fake()->unique()->safeEmail(),
|
||||
'email_verified_at' => now(),
|
||||
'password' => static::$password ??= Hash::make('password'),
|
||||
'remember_token' => Str::random(10),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate that the model's email address should be unverified.
|
||||
*/
|
||||
public function unverified(): static
|
||||
{
|
||||
return $this->state(fn (array $attributes) => [
|
||||
'email_verified_at' => null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('email')->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password');
|
||||
$table->rememberToken();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('password_reset_tokens', function (Blueprint $table) {
|
||||
$table->string('email')->primary();
|
||||
$table->string('token');
|
||||
$table->timestamp('created_at')->nullable();
|
||||
});
|
||||
|
||||
Schema::create('sessions', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->foreignId('user_id')->nullable()->index();
|
||||
$table->string('ip_address', 45)->nullable();
|
||||
$table->text('user_agent')->nullable();
|
||||
$table->longText('payload');
|
||||
$table->integer('last_activity')->index();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('users');
|
||||
Schema::dropIfExists('password_reset_tokens');
|
||||
Schema::dropIfExists('sessions');
|
||||
}
|
||||
};
|
||||
@@ -1,35 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('cache', function (Blueprint $table) {
|
||||
$table->string('key')->primary();
|
||||
$table->mediumText('value');
|
||||
$table->integer('expiration');
|
||||
});
|
||||
|
||||
Schema::create('cache_locks', function (Blueprint $table) {
|
||||
$table->string('key')->primary();
|
||||
$table->string('owner');
|
||||
$table->integer('expiration');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('cache');
|
||||
Schema::dropIfExists('cache_locks');
|
||||
}
|
||||
};
|
||||
@@ -1,57 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedTinyInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
});
|
||||
|
||||
Schema::create('job_batches', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->string('name');
|
||||
$table->integer('total_jobs');
|
||||
$table->integer('pending_jobs');
|
||||
$table->integer('failed_jobs');
|
||||
$table->longText('failed_job_ids');
|
||||
$table->mediumText('options')->nullable();
|
||||
$table->integer('cancelled_at')->nullable();
|
||||
$table->integer('created_at');
|
||||
$table->integer('finished_at')->nullable();
|
||||
});
|
||||
|
||||
Schema::create('failed_jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uuid')->unique();
|
||||
$table->text('connection');
|
||||
$table->text('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('jobs');
|
||||
Schema::dropIfExists('job_batches');
|
||||
Schema::dropIfExists('failed_jobs');
|
||||
}
|
||||
};
|
||||
@@ -1,25 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
use WithoutModelEvents;
|
||||
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// User::factory(10)->create();
|
||||
|
||||
User::factory()->create([
|
||||
'name' => 'Test User',
|
||||
'email' => 'test@example.com',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
import 'vue-router'
|
||||
declare module 'vue-router' {
|
||||
interface RouteMeta {
|
||||
action?: string
|
||||
subject?: string
|
||||
layoutWrapperClasses?: string
|
||||
navActiveLink?: RouteLocationRaw
|
||||
layout?: 'blank' | 'default'
|
||||
unauthenticatedOnly?: boolean
|
||||
public?: boolean
|
||||
}
|
||||
}
|
||||
@@ -1,131 +0,0 @@
|
||||
{
|
||||
"name": "vuexy-vuejs-laravel-admin-template",
|
||||
"version": "9.5.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"typecheck": "vue-tsc --noEmit",
|
||||
"lint": "eslint . -c .eslintrc.cjs --fix --rulesdir eslint-internal-rules/ --ext .ts,.js,.cjs,.vue,.tsx,.jsx",
|
||||
"build:icons": "tsx resources/ts/plugins/iconify/build-icons.ts",
|
||||
"msw:init": "msw init public/ --save",
|
||||
"postinstall": "npm run build:icons && npm run msw:init"
|
||||
},
|
||||
"dependencies": {
|
||||
"@casl/ability": "6.7.3",
|
||||
"@casl/vue": "2.2.2",
|
||||
"@floating-ui/dom": "1.6.8",
|
||||
"@formkit/drag-and-drop": "0.1.6",
|
||||
"@sindresorhus/is": "7.1.0",
|
||||
"@tiptap/extension-highlight": "^2.27.1",
|
||||
"@tiptap/extension-image": "^2.27.1",
|
||||
"@tiptap/extension-link": "^2.27.1",
|
||||
"@tiptap/extension-text-align": "^2.27.1",
|
||||
"@tiptap/pm": "^2.27.1",
|
||||
"@tiptap/starter-kit": "^2.27.1",
|
||||
"@tiptap/vue-3": "^2.27.1",
|
||||
"@vueuse/core": "10.11.1",
|
||||
"@vueuse/math": "10.11.1",
|
||||
"apexcharts": "3.54.1",
|
||||
"chart.js": "4.5.1",
|
||||
"cookie-es": "1.2.2",
|
||||
"destr": "2.0.5",
|
||||
"eslint-plugin-regexp": "2.10.0",
|
||||
"jwt-decode": "4.0.0",
|
||||
"mapbox-gl": "3.5.2",
|
||||
"ofetch": "1.5.0",
|
||||
"pinia": "3.0.3",
|
||||
"prismjs": "1.30.0",
|
||||
"roboto-fontface": "0.10.0",
|
||||
"shepherd.js": "13.0.3",
|
||||
"swiper": "11.2.10",
|
||||
"ufo": "1.6.1",
|
||||
"unplugin-vue-define-options": "1.5.5",
|
||||
"vue": "3.5.22",
|
||||
"vue-chartjs": "5.3.2",
|
||||
"vue-flatpickr-component": "11.0.5",
|
||||
"vue-i18n": "11.1.12",
|
||||
"vue-prism-component": "2.0.0",
|
||||
"vue-router": "4.5.1",
|
||||
"vue3-apexcharts": "1.5.3",
|
||||
"vue3-perfect-scrollbar": "2.0.0",
|
||||
"vuetify": "3.10.8",
|
||||
"webfontloader": "1.6.28"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config-vue": "0.43.1",
|
||||
"@antfu/utils": "0.7.10",
|
||||
"@fullcalendar/core": "6.1.19",
|
||||
"@fullcalendar/daygrid": "6.1.19",
|
||||
"@fullcalendar/interaction": "6.1.19",
|
||||
"@fullcalendar/list": "6.1.19",
|
||||
"@fullcalendar/timegrid": "6.1.19",
|
||||
"@fullcalendar/vue3": "6.1.19",
|
||||
"@iconify-json/mdi": "1.2.3",
|
||||
"@iconify/tools": "4.1.4",
|
||||
"@iconify/utils": "2.3.0",
|
||||
"@iconify-json/fa": "1.2.2",
|
||||
"@iconify-json/tabler": "1.2.23",
|
||||
"@iconify/vue": "4.1.2",
|
||||
"@intlify/unplugin-vue-i18n": "11.0.1",
|
||||
"@stylistic/stylelint-config": "1.0.1",
|
||||
"@stylistic/stylelint-plugin": "2.1.3",
|
||||
"@tiptap/extension-character-count": "^2.27.1",
|
||||
"@tiptap/extension-placeholder": "^2.27.1",
|
||||
"@tiptap/extension-subscript": "^2.27.1",
|
||||
"@tiptap/extension-superscript": "^2.27.1",
|
||||
"@tiptap/extension-underline": "^2.27.1",
|
||||
"@types/mapbox-gl": "3.4.1",
|
||||
"@types/node": "24.9.2",
|
||||
"@types/webfontloader": "1.6.38",
|
||||
"@typescript-eslint/eslint-plugin": "7.18.0",
|
||||
"@typescript-eslint/parser": "7.18.0",
|
||||
"@vitejs/plugin-vue": "6.0.1",
|
||||
"@vitejs/plugin-vue-jsx": "5.1.1",
|
||||
"eslint": "8.57.1",
|
||||
"eslint-config-airbnb-base": "15.0.0",
|
||||
"eslint-import-resolver-typescript": "3.10.1",
|
||||
"eslint-plugin-case-police": "0.6.1",
|
||||
"eslint-plugin-import": "2.32.0",
|
||||
"eslint-plugin-promise": "6.6.0",
|
||||
"eslint-plugin-regex": "1.10.0",
|
||||
"eslint-plugin-sonarjs": "0.24.0",
|
||||
"eslint-plugin-unicorn": "51.0.1",
|
||||
"eslint-plugin-vue": "9.33.0",
|
||||
"msw": "2.6.8",
|
||||
"postcss-html": "1.8.0",
|
||||
"postcss-scss": "4.0.9",
|
||||
"sass": "1.76.0",
|
||||
"shiki": "1.29.2",
|
||||
"stylelint": "16.8.0",
|
||||
"stylelint-config-idiomatic-order": "10.0.0",
|
||||
"stylelint-config-standard-scss": "13.1.0",
|
||||
"stylelint-use-logical-spec": "5.0.1",
|
||||
"tsx": "4.20.6",
|
||||
"type-fest": "5.1.0",
|
||||
"typescript": "5.9.3",
|
||||
"unplugin-auto-import": "0.18.6",
|
||||
"unplugin-vue-components": "0.27.5",
|
||||
"unplugin-vue-router": "0.8.8",
|
||||
"vite": "7.1.12",
|
||||
"vite-plugin-vue-devtools": "8.0.2",
|
||||
"vite-plugin-vue-meta-layouts": "0.6.1",
|
||||
"vite-plugin-vuetify": "2.1.2",
|
||||
"vite-svg-loader": "5.1.0",
|
||||
"vue-shepherd": "3.0.0",
|
||||
"vue-tsc": "3.1.2",
|
||||
"laravel-vite-plugin": "2.0.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"postcss": "^8",
|
||||
"@tiptap/core": "^2"
|
||||
},
|
||||
"overrides": {
|
||||
"postcss": "^8",
|
||||
"@tiptap/core": "^2"
|
||||
},
|
||||
"msw": {
|
||||
"workerDirectory": "public"
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Unit">
|
||||
<directory>tests/Unit</directory>
|
||||
</testsuite>
|
||||
<testsuite name="Feature">
|
||||
<directory>tests/Feature</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<source>
|
||||
<include>
|
||||
<directory>app</directory>
|
||||
</include>
|
||||
</source>
|
||||
<php>
|
||||
<env name="APP_ENV" value="testing"/>
|
||||
<env name="APP_MAINTENANCE_DRIVER" value="file"/>
|
||||
<env name="BCRYPT_ROUNDS" value="4"/>
|
||||
<env name="BROADCAST_CONNECTION" value="null"/>
|
||||
<env name="CACHE_STORE" value="array"/>
|
||||
<env name="DB_DATABASE" value="testing"/>
|
||||
<env name="MAIL_MAILER" value="array"/>
|
||||
<env name="QUEUE_CONNECTION" value="sync"/>
|
||||
<env name="SESSION_DRIVER" value="array"/>
|
||||
<env name="PULSE_ENABLED" value="false"/>
|
||||
<env name="TELESCOPE_ENABLED" value="false"/>
|
||||
<env name="NIGHTWATCH_ENABLED" value="false"/>
|
||||
</php>
|
||||
</phpunit>
|
||||
@@ -1,25 +0,0 @@
|
||||
<IfModule mod_rewrite.c>
|
||||
<IfModule mod_negotiation.c>
|
||||
Options -MultiViews -Indexes
|
||||
</IfModule>
|
||||
|
||||
RewriteEngine On
|
||||
|
||||
# Handle Authorization Header
|
||||
RewriteCond %{HTTP:Authorization} .
|
||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||
|
||||
# Handle X-XSRF-Token Header
|
||||
RewriteCond %{HTTP:x-xsrf-token} .
|
||||
RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]
|
||||
|
||||
# Redirect Trailing Slashes If Not A Folder...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_URI} (.+)/$
|
||||
RewriteRule ^ %1 [L,R=301]
|
||||
|
||||
# Send Requests To Front Controller...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule ^ index.php [L]
|
||||
</IfModule>
|
||||
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 15 KiB |
@@ -1,10 +0,0 @@
|
||||
<svg width="59" height="58" viewBox="0 0 59 58" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g opacity="0.2">
|
||||
<path d="M23.2164 41.2571L20.475 46.6946C20.2986 47.0654 19.9986 47.3632 19.6265 47.5368C19.2544 47.7105 18.8334 47.7491 18.4359 47.6462C12.8852 46.2868 8.08203 43.9305 4.59297 40.8946C4.32992 40.6625 4.1389 40.3599 4.04253 40.0226C3.94616 39.6853 3.94848 39.3275 4.04922 38.9915L11.7297 13.3446C11.8044 13.0821 11.9397 12.8409 12.1247 12.6402C12.3096 12.4395 12.539 12.285 12.7945 12.1891C14.9645 11.2989 17.2085 10.6014 19.5008 10.1047C19.9413 10.0083 20.4019 10.0774 20.7947 10.2988C21.1875 10.5203 21.485 10.8787 21.6305 11.3055L23.4203 16.7204C27.3437 16.1766 31.3234 16.1766 35.2469 16.7204L37.0367 11.3055C37.1822 10.8787 37.4797 10.5203 37.8725 10.2988C38.2653 10.0774 38.7259 10.0083 39.1664 10.1047C41.4587 10.6014 43.7027 11.2989 45.8727 12.1891C46.1282 12.285 46.3576 12.4395 46.5425 12.6402C46.7275 12.8409 46.8628 13.0821 46.9375 13.3446L54.618 38.9915C54.7187 39.3275 54.721 39.6853 54.6247 40.0226C54.5283 40.3599 54.3373 40.6625 54.0742 40.8946C50.5852 43.9305 45.782 46.2868 40.2313 47.6462C39.8338 47.7491 39.4128 47.7105 39.0407 47.5368C38.6686 47.3632 38.3686 47.0654 38.1922 46.6946L35.4508 41.2571C33.4242 41.5421 31.3802 41.6859 29.3336 41.6876C27.287 41.6859 25.243 41.5421 23.2164 41.2571Z" fill="#4B465C"/>
|
||||
<path d="M23.2164 41.2571L20.475 46.6946C20.2986 47.0654 19.9986 47.3632 19.6265 47.5368C19.2544 47.7105 18.8334 47.7491 18.4359 47.6462C12.8852 46.2868 8.08203 43.9305 4.59297 40.8946C4.32992 40.6625 4.1389 40.3599 4.04253 40.0226C3.94616 39.6853 3.94848 39.3275 4.04922 38.9915L11.7297 13.3446C11.8044 13.0821 11.9397 12.8409 12.1247 12.6402C12.3096 12.4395 12.539 12.285 12.7945 12.1891C14.9645 11.2989 17.2085 10.6014 19.5008 10.1047C19.9413 10.0083 20.4019 10.0774 20.7947 10.2988C21.1875 10.5203 21.485 10.8787 21.6305 11.3055L23.4203 16.7204C27.3437 16.1766 31.3234 16.1766 35.2469 16.7204L37.0367 11.3055C37.1822 10.8787 37.4797 10.5203 37.8725 10.2988C38.2653 10.0774 38.7259 10.0083 39.1664 10.1047C41.4587 10.6014 43.7027 11.2989 45.8727 12.1891C46.1282 12.285 46.3576 12.4395 46.5425 12.6402C46.7275 12.8409 46.8628 13.0821 46.9375 13.3446L54.618 38.9915C54.7187 39.3275 54.721 39.6853 54.6247 40.0226C54.5283 40.3599 54.3373 40.6625 54.0742 40.8946C50.5852 43.9305 45.782 46.2868 40.2313 47.6462C39.8338 47.7491 39.4128 47.7105 39.0407 47.5368C38.6686 47.3632 38.3686 47.0654 38.1922 46.6946L35.4508 41.2571C33.4242 41.5421 31.3802 41.6859 29.3336 41.6876C27.287 41.6859 25.243 41.5421 23.2164 41.2571Z" fill="white" fill-opacity="0.2"/>
|
||||
</g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.8022 32.625C24.8022 34.1265 23.585 35.3438 22.0835 35.3438C20.582 35.3438 19.3647 34.1265 19.3647 32.625C19.3647 31.1235 20.582 29.9062 22.0835 29.9062C23.585 29.9062 24.8022 31.1235 24.8022 32.625ZM39.3022 32.625C39.3022 34.1265 38.085 35.3438 36.5835 35.3438C35.082 35.3438 33.8647 34.1265 33.8647 32.625C33.8647 31.1235 35.082 29.9062 36.5835 29.9062C38.085 29.9062 39.3022 31.1235 39.3022 32.625Z" fill="#4B465C"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.8022 32.625C24.8022 34.1265 23.585 35.3438 22.0835 35.3438C20.582 35.3438 19.3647 34.1265 19.3647 32.625C19.3647 31.1235 20.582 29.9062 22.0835 29.9062C23.585 29.9062 24.8022 31.1235 24.8022 32.625ZM39.3022 32.625C39.3022 34.1265 38.085 35.3438 36.5835 35.3438C35.082 35.3438 33.8647 34.1265 33.8647 32.625C33.8647 31.1235 35.082 29.9062 36.5835 29.9062C38.085 29.9062 39.3022 31.1235 39.3022 32.625Z" fill="white" fill-opacity="0.2"/>
|
||||
<path d="M17.1898 18.1251C21.119 16.8936 25.2161 16.2821 29.3336 16.3126C33.4511 16.2821 37.5482 16.8936 41.4773 18.1251M41.4773 39.8751C37.5482 41.1065 33.4511 41.718 29.3336 41.6876C25.2161 41.718 21.119 41.1065 17.1898 39.8751M35.4508 41.2571L38.1922 46.6946C38.3686 47.0654 38.6686 47.3632 39.0407 47.5368C39.4128 47.7105 39.8338 47.7491 40.2313 47.6462C45.782 46.2868 50.5852 43.9305 54.0742 40.8946C54.3373 40.6625 54.5283 40.3599 54.6247 40.0226C54.721 39.6853 54.7187 39.3275 54.618 38.9915L46.9375 13.3446C46.8628 13.0821 46.7275 12.8409 46.5425 12.6402C46.3576 12.4395 46.1282 12.285 45.8727 12.1891C43.7027 11.2989 41.4587 10.6014 39.1664 10.1047C38.7259 10.0083 38.2653 10.0774 37.8725 10.2988C37.4797 10.5203 37.1822 10.8787 37.0367 11.3055L35.2469 16.7204M23.2164 41.2571L20.475 46.6946C20.2986 47.0654 19.9986 47.3632 19.6265 47.5368C19.2544 47.7105 18.8334 47.7491 18.4359 47.6462C12.8852 46.2868 8.08203 43.9305 4.59297 40.8946C4.32992 40.6625 4.1389 40.3599 4.04253 40.0226C3.94616 39.6853 3.94848 39.3275 4.04922 38.9915L11.7297 13.3446C11.8044 13.0821 11.9397 12.8409 12.1247 12.6402C12.3096 12.4395 12.539 12.285 12.7945 12.1891C14.9645 11.2989 17.2085 10.6014 19.5008 10.1047C19.9413 10.0083 20.4019 10.0774 20.7947 10.2988C21.1875 10.5203 21.485 10.8787 21.6305 11.3055L23.4203 16.7204" stroke="#4B465C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M17.1898 18.1251C21.119 16.8936 25.2161 16.2821 29.3336 16.3126C33.4511 16.2821 37.5482 16.8936 41.4773 18.1251M41.4773 39.8751C37.5482 41.1065 33.4511 41.718 29.3336 41.6876C25.2161 41.718 21.119 41.1065 17.1898 39.8751M35.4508 41.2571L38.1922 46.6946C38.3686 47.0654 38.6686 47.3632 39.0407 47.5368C39.4128 47.7105 39.8338 47.7491 40.2313 47.6462C45.782 46.2868 50.5852 43.9305 54.0742 40.8946C54.3373 40.6625 54.5283 40.3599 54.6247 40.0226C54.721 39.6853 54.7187 39.3275 54.618 38.9915L46.9375 13.3446C46.8628 13.0821 46.7275 12.8409 46.5425 12.6402C46.3576 12.4395 46.1282 12.285 45.8727 12.1891C43.7027 11.2989 41.4587 10.6014 39.1664 10.1047C38.7259 10.0083 38.2653 10.0774 37.8725 10.2988C37.4797 10.5203 37.1822 10.8787 37.0367 11.3055L35.2469 16.7204M23.2164 41.2571L20.475 46.6946C20.2986 47.0654 19.9986 47.3632 19.6265 47.5368C19.2544 47.7105 18.8334 47.7491 18.4359 47.6462C12.8852 46.2868 8.08203 43.9305 4.59297 40.8946C4.32992 40.6625 4.1389 40.3599 4.04253 40.0226C3.94616 39.6853 3.94848 39.3275 4.04922 38.9915L11.7297 13.3446C11.8044 13.0821 11.9397 12.8409 12.1247 12.6402C12.3096 12.4395 12.539 12.285 12.7945 12.1891C14.9645 11.2989 17.2085 10.6014 19.5008 10.1047C19.9413 10.0083 20.4019 10.0774 20.7947 10.2988C21.1875 10.5203 21.485 10.8787 21.6305 11.3055L23.4203 16.7204" stroke="white" stroke-opacity="0.2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.2 KiB |
@@ -1,8 +0,0 @@
|
||||
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.2689 8.56722C31.7876 9.05354 31.3688 9.84814 31.029 10.8704C30.6946 11.8767 30.4652 13.0152 30.31 14.1032C30.1553 15.1872 30.0776 16.197 30.0386 16.9371C30.0358 16.991 30.0332 17.0434 30.0307 17.0943C30.0816 17.0918 30.134 17.0892 30.1879 17.0864C30.928 17.0475 31.9378 16.9697 33.0218 16.815C34.1098 16.6598 35.2483 16.4304 36.2546 16.096C37.2769 15.7562 38.0715 15.3374 38.5578 14.8561C39.3907 14.0223 39.8587 12.8919 39.8587 11.7133C39.8587 10.5339 39.3901 9.4028 38.5562 8.56883C37.7222 7.73487 36.5911 7.26636 35.4117 7.26636C34.2331 7.26636 33.1027 7.73427 32.2689 8.56722ZM39.2633 15.5649L39.9704 16.272C41.1794 15.0629 41.8587 13.4231 41.8587 11.7133C41.8587 10.0035 41.1794 8.36365 39.9704 7.15462C38.7614 5.94559 37.1216 5.26636 35.4117 5.26636C33.7019 5.26636 32.0621 5.94559 30.853 7.15461L30.8499 7.15774C30.0518 7.96296 29.5111 9.09639 29.1311 10.2396C29.0855 10.3767 29.0418 10.5154 28.9999 10.6551C28.958 10.5154 28.9143 10.3767 28.8688 10.2396C28.4888 9.09639 27.9481 7.96296 27.1499 7.15774L27.1468 7.15462C25.9378 5.94559 24.298 5.26636 22.5882 5.26636C20.8783 5.26636 19.2385 5.94559 18.0295 7.15462C16.8205 8.36366 16.1412 10.0035 16.1412 11.7133C16.1412 13.4231 16.8205 15.0629 18.0295 16.272L18.7366 15.5649L18.0326 16.2751C18.3589 16.5985 18.7391 16.8797 19.152 17.125H9.0625C7.5092 17.125 6.25 18.3842 6.25 19.9375V27.1875C6.25 28.7408 7.5092 30 9.0625 30H9.875V45.3125C9.875 46.0584 10.1713 46.7738 10.6988 47.3012C11.2262 47.8287 11.9416 48.125 12.6875 48.125H29H45.3125C46.0584 48.125 46.7738 47.8287 47.3012 47.3012C47.8287 46.7738 48.125 46.0584 48.125 45.3125V30H48.9375C50.4908 30 51.75 28.7408 51.75 27.1875V19.9375C51.75 18.3842 50.4908 17.125 48.9375 17.125H38.8479C39.2608 16.8797 39.641 16.5985 39.9673 16.2751L39.2633 15.5649ZM9.0625 19.125C8.61377 19.125 8.25 19.4888 8.25 19.9375V27.1875C8.25 27.6362 8.61377 28 9.0625 28H10.875H28V19.125H9.0625ZM30 19.125V28H47.125H48.9375C49.3862 28 49.75 27.6362 49.75 27.1875V19.9375C49.75 19.4888 49.3862 19.125 48.9375 19.125H30ZM28 30H11.875V45.3125C11.875 45.528 11.9606 45.7347 12.113 45.887C12.2653 46.0394 12.472 46.125 12.6875 46.125H28V30ZM30 46.125V30H46.125V45.3125C46.125 45.528 46.0394 45.7347 45.887 45.887C45.7347 46.0394 45.528 46.125 45.3125 46.125H30ZM21.7452 16.096C20.723 15.7562 19.9284 15.3374 19.4421 14.8562C18.6091 14.0223 18.1412 12.8919 18.1412 11.7133C18.1412 10.5339 18.6097 9.4028 19.4437 8.56883C20.2777 7.73487 21.4088 7.26636 22.5882 7.26636C23.7668 7.26636 24.8972 7.73428 25.731 8.56725C26.2123 9.05357 26.6311 9.84816 26.9708 10.8704C27.3053 11.8767 27.5346 13.0152 27.6899 14.1032C27.8445 15.1872 27.9223 16.197 27.9613 16.9371C27.9641 16.991 27.9667 17.0434 27.9691 17.0943C27.9183 17.0918 27.8659 17.0892 27.812 17.0864C27.0719 17.0475 26.0621 16.9697 24.978 16.815C23.89 16.6598 22.7516 16.4304 21.7452 16.096Z" fill="#4B465C"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.2689 8.56722C31.7876 9.05354 31.3688 9.84814 31.029 10.8704C30.6946 11.8767 30.4652 13.0152 30.31 14.1032C30.1553 15.1872 30.0776 16.197 30.0386 16.9371C30.0358 16.991 30.0332 17.0434 30.0307 17.0943C30.0816 17.0918 30.134 17.0892 30.1879 17.0864C30.928 17.0475 31.9378 16.9697 33.0218 16.815C34.1098 16.6598 35.2483 16.4304 36.2546 16.096C37.2769 15.7562 38.0715 15.3374 38.5578 14.8561C39.3907 14.0223 39.8587 12.8919 39.8587 11.7133C39.8587 10.5339 39.3901 9.4028 38.5562 8.56883C37.7222 7.73487 36.5911 7.26636 35.4117 7.26636C34.2331 7.26636 33.1027 7.73427 32.2689 8.56722ZM39.2633 15.5649L39.9704 16.272C41.1794 15.0629 41.8587 13.4231 41.8587 11.7133C41.8587 10.0035 41.1794 8.36365 39.9704 7.15462C38.7614 5.94559 37.1216 5.26636 35.4117 5.26636C33.7019 5.26636 32.0621 5.94559 30.853 7.15461L30.8499 7.15774C30.0518 7.96296 29.5111 9.09639 29.1311 10.2396C29.0855 10.3767 29.0418 10.5154 28.9999 10.6551C28.958 10.5154 28.9143 10.3767 28.8688 10.2396C28.4888 9.09639 27.9481 7.96296 27.1499 7.15774L27.1468 7.15462C25.9378 5.94559 24.298 5.26636 22.5882 5.26636C20.8783 5.26636 19.2385 5.94559 18.0295 7.15462C16.8205 8.36366 16.1412 10.0035 16.1412 11.7133C16.1412 13.4231 16.8205 15.0629 18.0295 16.272L18.7366 15.5649L18.0326 16.2751C18.3589 16.5985 18.7391 16.8797 19.152 17.125H9.0625C7.5092 17.125 6.25 18.3842 6.25 19.9375V27.1875C6.25 28.7408 7.5092 30 9.0625 30H9.875V45.3125C9.875 46.0584 10.1713 46.7738 10.6988 47.3012C11.2262 47.8287 11.9416 48.125 12.6875 48.125H29H45.3125C46.0584 48.125 46.7738 47.8287 47.3012 47.3012C47.8287 46.7738 48.125 46.0584 48.125 45.3125V30H48.9375C50.4908 30 51.75 28.7408 51.75 27.1875V19.9375C51.75 18.3842 50.4908 17.125 48.9375 17.125H38.8479C39.2608 16.8797 39.641 16.5985 39.9673 16.2751L39.2633 15.5649ZM9.0625 19.125C8.61377 19.125 8.25 19.4888 8.25 19.9375V27.1875C8.25 27.6362 8.61377 28 9.0625 28H10.875H28V19.125H9.0625ZM30 19.125V28H47.125H48.9375C49.3862 28 49.75 27.6362 49.75 27.1875V19.9375C49.75 19.4888 49.3862 19.125 48.9375 19.125H30ZM28 30H11.875V45.3125C11.875 45.528 11.9606 45.7347 12.113 45.887C12.2653 46.0394 12.472 46.125 12.6875 46.125H28V30ZM30 46.125V30H46.125V45.3125C46.125 45.528 46.0394 45.7347 45.887 45.887C45.7347 46.0394 45.528 46.125 45.3125 46.125H30ZM21.7452 16.096C20.723 15.7562 19.9284 15.3374 19.4421 14.8562C18.6091 14.0223 18.1412 12.8919 18.1412 11.7133C18.1412 10.5339 18.6097 9.4028 19.4437 8.56883C20.2777 7.73487 21.4088 7.26636 22.5882 7.26636C23.7668 7.26636 24.8972 7.73428 25.731 8.56725C26.2123 9.05357 26.6311 9.84816 26.9708 10.8704C27.3053 11.8767 27.5346 13.0152 27.6899 14.1032C27.8445 15.1872 27.9223 16.197 27.9613 16.9371C27.9641 16.991 27.9667 17.0434 27.9691 17.0943C27.9183 17.0918 27.8659 17.0892 27.812 17.0864C27.0719 17.0475 26.0621 16.9697 24.978 16.815C23.89 16.6598 22.7516 16.4304 21.7452 16.096Z" fill="white" fill-opacity="0.2"/>
|
||||
<g opacity="0.2">
|
||||
<path d="M47.125 29V45.3125C47.125 45.7932 46.934 46.2542 46.5941 46.5941C46.2542 46.934 45.7932 47.125 45.3125 47.125H12.6875C12.2068 47.125 11.7458 46.934 11.4059 46.5941C11.066 46.2542 10.875 45.7932 10.875 45.3125V29H47.125Z" fill="#4B465C"/>
|
||||
<path d="M47.125 29V45.3125C47.125 45.7932 46.934 46.2542 46.5941 46.5941C46.2542 46.934 45.7932 47.125 45.3125 47.125H12.6875C12.2068 47.125 11.7458 46.934 11.4059 46.5941C11.066 46.2542 10.875 45.7932 10.875 45.3125V29H47.125Z" fill="white" fill-opacity="0.2"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.3 KiB |
@@ -1,8 +0,0 @@
|
||||
<svg width="1em" height="1em" viewBox="0 0 59 58" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g opacity="0.2">
|
||||
<path d="M50.9702 12.6875H7.69678C6.6332 12.6875 5.771 13.5497 5.771 14.6133V43.3867C5.771 44.4503 6.6332 45.3125 7.69678 45.3125H50.9702C52.0338 45.3125 52.896 44.4503 52.896 43.3867V14.6133C52.896 13.5497 52.0338 12.6875 50.9702 12.6875Z" fill="#4B465C"/>
|
||||
<path d="M50.9702 12.6875H7.69678C6.6332 12.6875 5.771 13.5497 5.771 14.6133V43.3867C5.771 44.4503 6.6332 45.3125 7.69678 45.3125H50.9702C52.0338 45.3125 52.896 44.4503 52.896 43.3867V14.6133C52.896 13.5497 52.0338 12.6875 50.9702 12.6875Z" fill="white" fill-opacity="0.2"/>
|
||||
</g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.021 14.6133C7.021 14.2401 7.32355 13.9375 7.69678 13.9375H50.9702C51.3434 13.9375 51.646 14.2401 51.646 14.6133V43.3867C51.646 43.7599 51.3434 44.0625 50.9702 44.0625H7.69678C7.32355 44.0625 7.021 43.7599 7.021 43.3867V14.6133ZM7.69678 11.4375C5.94284 11.4375 4.521 12.8593 4.521 14.6133V43.3867C4.521 45.1407 5.94284 46.5625 7.69678 46.5625H50.9702C52.7242 46.5625 54.146 45.1407 54.146 43.3867V14.6133C54.146 12.8593 52.7242 11.4375 50.9702 11.4375H7.69678ZM13.021 20.75C12.4687 20.75 12.021 21.1977 12.021 21.75C12.021 22.3023 12.4687 22.75 13.021 22.75H45.646C46.1983 22.75 46.646 22.3023 46.646 21.75C46.646 21.1977 46.1983 20.75 45.646 20.75H13.021ZM13.021 28C12.4687 28 12.021 28.4477 12.021 29C12.021 29.5523 12.4687 30 13.021 30H45.646C46.1983 30 46.646 29.5523 46.646 29C46.646 28.4477 46.1983 28 45.646 28H13.021ZM12.021 36.25C12.021 35.6977 12.4687 35.25 13.021 35.25H14.8335C15.3858 35.25 15.8335 35.6977 15.8335 36.25C15.8335 36.8023 15.3858 37.25 14.8335 37.25H13.021C12.4687 37.25 12.021 36.8023 12.021 36.25ZM22.0835 35.25C21.5312 35.25 21.0835 35.6977 21.0835 36.25C21.0835 36.8023 21.5312 37.25 22.0835 37.25H36.5835C37.1358 37.25 37.5835 36.8023 37.5835 36.25C37.5835 35.6977 37.1358 35.25 36.5835 35.25H22.0835ZM42.8335 36.25C42.8335 35.6977 43.2812 35.25 43.8335 35.25H45.646C46.1983 35.25 46.646 35.6977 46.646 36.25C46.646 36.8023 46.1983 37.25 45.646 37.25H43.8335C43.2812 37.25 42.8335 36.8023 42.8335 36.25Z" fill="#4B465C"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.021 14.6133C7.021 14.2401 7.32355 13.9375 7.69678 13.9375H50.9702C51.3434 13.9375 51.646 14.2401 51.646 14.6133V43.3867C51.646 43.7599 51.3434 44.0625 50.9702 44.0625H7.69678C7.32355 44.0625 7.021 43.7599 7.021 43.3867V14.6133ZM7.69678 11.4375C5.94284 11.4375 4.521 12.8593 4.521 14.6133V43.3867C4.521 45.1407 5.94284 46.5625 7.69678 46.5625H50.9702C52.7242 46.5625 54.146 45.1407 54.146 43.3867V14.6133C54.146 12.8593 52.7242 11.4375 50.9702 11.4375H7.69678ZM13.021 20.75C12.4687 20.75 12.021 21.1977 12.021 21.75C12.021 22.3023 12.4687 22.75 13.021 22.75H45.646C46.1983 22.75 46.646 22.3023 46.646 21.75C46.646 21.1977 46.1983 20.75 45.646 20.75H13.021ZM13.021 28C12.4687 28 12.021 28.4477 12.021 29C12.021 29.5523 12.4687 30 13.021 30H45.646C46.1983 30 46.646 29.5523 46.646 29C46.646 28.4477 46.1983 28 45.646 28H13.021ZM12.021 36.25C12.021 35.6977 12.4687 35.25 13.021 35.25H14.8335C15.3858 35.25 15.8335 35.6977 15.8335 36.25C15.8335 36.8023 15.3858 37.25 14.8335 37.25H13.021C12.4687 37.25 12.021 36.8023 12.021 36.25ZM22.0835 35.25C21.5312 35.25 21.0835 35.6977 21.0835 36.25C21.0835 36.8023 21.5312 37.25 22.0835 37.25H36.5835C37.1358 37.25 37.5835 36.8023 37.5835 36.25C37.5835 35.6977 37.1358 35.25 36.5835 35.25H22.0835ZM42.8335 36.25C42.8335 35.6977 43.2812 35.25 43.8335 35.25H45.646C46.1983 35.25 46.646 35.6977 46.646 36.25C46.646 36.8023 46.1983 37.25 45.646 37.25H43.8335C43.2812 37.25 42.8335 36.8023 42.8335 36.25Z" fill="white" fill-opacity="0.2"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
@@ -1,8 +0,0 @@
|
||||
<svg width="1em" height="1em" viewBox="0 0 59 58" fill="#4B465C" xmlns="http://www.w3.org/2000/svg">
|
||||
<g opacity="0.2">
|
||||
<path d="M9.72925 39.875V16.3125C9.72925 15.3511 10.1112 14.4291 10.791 13.7492C11.4708 13.0694 12.3928 12.6875 13.3542 12.6875H45.9792C46.9407 12.6875 47.8627 13.0694 48.5425 13.7492C49.2223 14.4291 49.6042 15.3511 49.6042 16.3125V39.875H9.72925Z" fill="#4B465C"/>
|
||||
<path d="M9.72925 39.875V16.3125C9.72925 15.3511 10.1112 14.4291 10.791 13.7492C11.4708 13.0694 12.3928 12.6875 13.3542 12.6875H45.9792C46.9407 12.6875 47.8627 13.0694 48.5425 13.7492C49.2223 14.4291 49.6042 15.3511 49.6042 16.3125V39.875H9.72925Z" fill="white" fill-opacity="0.2"/>
|
||||
</g>
|
||||
<path d="M8.72925 39.875C8.72925 40.4273 9.17696 40.875 9.72925 40.875C10.2815 40.875 10.7292 40.4273 10.7292 39.875H8.72925ZM13.3542 12.6875V11.6875V12.6875ZM45.9792 12.6875V11.6875V12.6875ZM48.6042 39.875C48.6042 40.4273 49.052 40.875 49.6042 40.875C50.1565 40.875 50.6042 40.4273 50.6042 39.875H48.6042ZM6.10425 39.875V38.875C5.55196 38.875 5.10425 39.3227 5.10425 39.875H6.10425ZM53.2292 39.875H54.2292C54.2292 39.3227 53.7815 38.875 53.2292 38.875V39.875ZM6.10425 43.5H5.10425H6.10425ZM33.2917 20.9375C33.844 20.9375 34.2917 20.4898 34.2917 19.9375C34.2917 19.3852 33.844 18.9375 33.2917 18.9375V20.9375ZM26.0417 18.9375C25.4895 18.9375 25.0417 19.3852 25.0417 19.9375C25.0417 20.4898 25.4895 20.9375 26.0417 20.9375V18.9375ZM10.7292 39.875V16.3125H8.72925V39.875H10.7292ZM10.7292 16.3125C10.7292 15.6163 11.0058 14.9486 11.4981 14.4563L10.0839 13.0421C9.21652 13.9095 8.72925 15.0859 8.72925 16.3125H10.7292ZM11.4981 14.4563C11.9904 13.9641 12.6581 13.6875 13.3542 13.6875L13.3542 11.6875C12.1276 11.6875 10.9512 12.1748 10.0839 13.0421L11.4981 14.4563ZM13.3542 13.6875H45.9792V11.6875H13.3542V13.6875ZM45.9792 13.6875C46.6754 13.6875 47.3431 13.9641 47.8354 14.4563L49.2496 13.0421C48.3823 12.1748 47.2059 11.6875 45.9792 11.6875V13.6875ZM47.8354 14.4563C48.3277 14.9486 48.6042 15.6163 48.6042 16.3125H50.6042C50.6042 15.0859 50.117 13.9095 49.2496 13.0421L47.8354 14.4563ZM48.6042 16.3125V39.875H50.6042V16.3125H48.6042ZM6.10425 40.875H53.2292V38.875H6.10425V40.875ZM52.2292 39.875V43.5H54.2292V39.875H52.2292ZM52.2292 43.5C52.2292 44.1962 51.9527 44.8639 51.4604 45.3562L52.8746 46.7704C53.742 45.903 54.2292 44.7266 54.2292 43.5H52.2292ZM51.4604 45.3562C50.9681 45.8484 50.3004 46.125 49.6042 46.125V48.125C50.8309 48.125 52.0073 47.6377 52.8746 46.7704L51.4604 45.3562ZM49.6042 46.125H9.72925V48.125H49.6042V46.125ZM9.72925 46.125C9.03305 46.125 8.36538 45.8484 7.87309 45.3562L6.45888 46.7704C7.32623 47.6377 8.50262 48.125 9.72925 48.125V46.125ZM7.87309 45.3562C7.38081 44.8639 7.10425 44.1962 7.10425 43.5H5.10425C5.10425 44.7266 5.59152 45.903 6.45888 46.7704L7.87309 45.3562ZM7.10425 43.5V39.875H5.10425V43.5H7.10425ZM33.2917 18.9375H26.0417V20.9375H33.2917V18.9375Z" fill="#4B465C"/>
|
||||
<path d="M8.72925 39.875C8.72925 40.4273 9.17696 40.875 9.72925 40.875C10.2815 40.875 10.7292 40.4273 10.7292 39.875H8.72925ZM13.3542 12.6875V11.6875V12.6875ZM45.9792 12.6875V11.6875V12.6875ZM48.6042 39.875C48.6042 40.4273 49.052 40.875 49.6042 40.875C50.1565 40.875 50.6042 40.4273 50.6042 39.875H48.6042ZM6.10425 39.875V38.875C5.55196 38.875 5.10425 39.3227 5.10425 39.875H6.10425ZM53.2292 39.875H54.2292C54.2292 39.3227 53.7815 38.875 53.2292 38.875V39.875ZM6.10425 43.5H5.10425H6.10425ZM33.2917 20.9375C33.844 20.9375 34.2917 20.4898 34.2917 19.9375C34.2917 19.3852 33.844 18.9375 33.2917 18.9375V20.9375ZM26.0417 18.9375C25.4895 18.9375 25.0417 19.3852 25.0417 19.9375C25.0417 20.4898 25.4895 20.9375 26.0417 20.9375V18.9375ZM10.7292 39.875V16.3125H8.72925V39.875H10.7292ZM10.7292 16.3125C10.7292 15.6163 11.0058 14.9486 11.4981 14.4563L10.0839 13.0421C9.21652 13.9095 8.72925 15.0859 8.72925 16.3125H10.7292ZM11.4981 14.4563C11.9904 13.9641 12.6581 13.6875 13.3542 13.6875L13.3542 11.6875C12.1276 11.6875 10.9512 12.1748 10.0839 13.0421L11.4981 14.4563ZM13.3542 13.6875H45.9792V11.6875H13.3542V13.6875ZM45.9792 13.6875C46.6754 13.6875 47.3431 13.9641 47.8354 14.4563L49.2496 13.0421C48.3823 12.1748 47.2059 11.6875 45.9792 11.6875V13.6875ZM47.8354 14.4563C48.3277 14.9486 48.6042 15.6163 48.6042 16.3125H50.6042C50.6042 15.0859 50.117 13.9095 49.2496 13.0421L47.8354 14.4563ZM48.6042 16.3125V39.875H50.6042V16.3125H48.6042ZM6.10425 40.875H53.2292V38.875H6.10425V40.875ZM52.2292 39.875V43.5H54.2292V39.875H52.2292ZM52.2292 43.5C52.2292 44.1962 51.9527 44.8639 51.4604 45.3562L52.8746 46.7704C53.742 45.903 54.2292 44.7266 54.2292 43.5H52.2292ZM51.4604 45.3562C50.9681 45.8484 50.3004 46.125 49.6042 46.125V48.125C50.8309 48.125 52.0073 47.6377 52.8746 46.7704L51.4604 45.3562ZM49.6042 46.125H9.72925V48.125H49.6042V46.125ZM9.72925 46.125C9.03305 46.125 8.36538 45.8484 7.87309 45.3562L6.45888 46.7704C7.32623 47.6377 8.50262 48.125 9.72925 48.125V46.125ZM7.87309 45.3562C7.38081 44.8639 7.10425 44.1962 7.10425 43.5H5.10425C5.10425 44.7266 5.59152 45.903 6.45888 46.7704L7.87309 45.3562ZM7.10425 43.5V39.875H5.10425V43.5H7.10425ZM33.2917 18.9375H26.0417V20.9375H33.2917V18.9375Z" fill="white" fill-opacity="0.2"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
@@ -1,8 +0,0 @@
|
||||
<svg width="1em" height="1em" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g opacity="0.2">
|
||||
<path d="M17.8304 37.8359C15.6726 36.1581 13.925 34.0112 12.7199 31.5579C11.5148 29.1045 10.8839 26.4091 10.8749 23.6757C10.8296 13.8429 18.7367 5.66403 28.5695 5.43747C32.375 5.34725 36.1123 6.45746 39.2514 8.61062C42.3904 10.7638 44.7719 13.8506 46.0581 17.4333C47.3442 21.016 47.4698 24.9127 46.4169 28.5707C45.364 32.2288 43.1861 35.4625 40.1921 37.8132C39.5308 38.3245 38.995 38.9802 38.6259 39.7302C38.2568 40.4802 38.0641 41.3047 38.0625 42.1406V43.5C38.0625 43.9807 37.8715 44.4417 37.5316 44.7816C37.1917 45.1215 36.7307 45.3125 36.25 45.3125H21.7499C21.2692 45.3125 20.8082 45.1215 20.4683 44.7816C20.1284 44.4417 19.9374 43.9807 19.9374 43.5V42.1406C19.9318 41.3109 19.7394 40.4932 19.3747 39.748C19.0099 39.0028 18.4821 38.3493 17.8304 37.8359Z" fill="#4B465C"/>
|
||||
<path d="M17.8304 37.8359C15.6726 36.1581 13.925 34.0112 12.7199 31.5579C11.5148 29.1045 10.8839 26.4091 10.8749 23.6757C10.8296 13.8429 18.7367 5.66403 28.5695 5.43747C32.375 5.34725 36.1123 6.45746 39.2514 8.61062C42.3904 10.7638 44.7719 13.8506 46.0581 17.4333C47.3442 21.016 47.4698 24.9127 46.4169 28.5707C45.364 32.2288 43.1861 35.4625 40.1921 37.8132C39.5308 38.3245 38.995 38.9802 38.6259 39.7302C38.2568 40.4802 38.0641 41.3047 38.0625 42.1406V43.5C38.0625 43.9807 37.8715 44.4417 37.5316 44.7816C37.1917 45.1215 36.7307 45.3125 36.25 45.3125H21.7499C21.2692 45.3125 20.8082 45.1215 20.4683 44.7816C20.1284 44.4417 19.9374 43.9807 19.9374 43.5V42.1406C19.9318 41.3109 19.7394 40.4932 19.3747 39.748C19.0099 39.0028 18.4821 38.3493 17.8304 37.8359Z" fill="white" fill-opacity="0.2"/>
|
||||
</g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M38.6857 9.43527C35.7198 7.4009 32.1887 6.35195 28.5932 6.43719L28.5925 6.4372C28.3515 6.44275 28.1116 6.45338 27.8731 6.46896L28.5464 4.43773C32.5617 4.34269 36.5049 5.51414 39.817 7.78597C43.1293 10.0579 45.6422 13.3151 46.9993 17.0954C48.3564 20.8758 48.4889 24.9875 47.3779 28.8473C46.2669 32.7072 43.9688 36.1193 40.8097 38.5998L40.8037 38.6045L40.8037 38.6044C40.263 39.0224 39.8249 39.5585 39.5232 40.1717C39.2215 40.7847 39.0639 41.4585 39.0625 42.1416V42.1425V43.5C39.0625 44.2459 38.7661 44.9613 38.2387 45.4887C37.7112 46.0162 36.9959 46.3125 36.25 46.3125H21.75C21.004 46.3125 20.2887 46.0162 19.7612 45.4887C19.2338 44.9613 18.9375 44.2459 18.9375 43.5V42.1441C18.9323 41.4657 18.7748 40.7971 18.4765 40.1877C18.1782 39.5781 17.7466 39.0434 17.2138 38.6231L17.8866 36.5936C18.069 36.7483 18.255 36.8993 18.4442 37.0465L17.8304 37.836L18.4492 37.0504C19.2189 37.6567 19.8421 38.4284 20.2729 39.3084C20.7036 40.1884 20.9307 41.154 20.9374 42.1338L20.9375 42.1406L20.9375 43.5C20.9375 43.7155 21.0231 43.9221 21.1754 44.0745C21.3278 44.2269 21.5345 44.3125 21.75 44.3125H36.25C36.4654 44.3125 36.6721 44.2269 36.8245 44.0745C36.9768 43.9221 37.0625 43.7155 37.0625 43.5V42.1406V42.1387C37.0644 41.1503 37.2923 40.1754 37.7287 39.2886C38.1646 38.4029 38.7969 37.6285 39.5775 37.0244C42.4048 34.8035 44.4614 31.7492 45.4559 28.2941C46.4507 24.8379 46.3321 21.1562 45.1169 17.7712C43.9017 14.3862 41.6516 11.4696 38.6857 9.43527ZM17.8865 36.5936L17.8866 36.5936L27.8731 6.46896L27.8724 6.469L28.5458 4.43775C18.1651 4.67729 9.8275 13.3058 9.87496 23.6797C9.88451 26.5645 10.5504 29.4094 11.8223 31.9987C13.0938 34.5872 14.9375 36.8525 17.2138 38.6231L17.8865 36.5936ZM17.8865 36.5936C16.1041 35.0827 14.6499 33.2189 13.6175 31.117C12.4793 28.7998 11.8834 26.254 11.8749 23.6725L11.8749 23.6711C11.8332 14.6214 18.9246 7.05389 27.8724 6.469L17.8865 36.5936ZM18.9376 52.5625C18.9376 52.0102 19.3853 51.5625 19.9376 51.5625H38.0626C38.6149 51.5625 39.0626 52.0102 39.0626 52.5625C39.0626 53.1148 38.6149 53.5625 38.0626 53.5625H19.9376C19.3853 53.5625 18.9376 53.1148 18.9376 52.5625ZM31.0024 11.8828C30.4579 11.7905 29.9416 12.1571 29.8493 12.7016C29.757 13.2461 30.1236 13.7624 30.6681 13.8547C32.6793 14.1956 34.535 15.1524 35.9792 16.5929C37.4235 18.0334 38.385 19.8867 38.731 21.897C38.8247 22.4413 39.3419 22.8066 39.8862 22.7129C40.4304 22.6192 40.7957 22.102 40.702 21.5577C40.2857 19.1394 39.129 16.9098 37.3916 15.1769C35.6543 13.4439 33.4218 12.293 31.0024 11.8828Z" fill="#4B465C"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M38.6857 9.43527C35.7198 7.4009 32.1887 6.35195 28.5932 6.43719L28.5925 6.4372C28.3515 6.44275 28.1116 6.45338 27.8731 6.46896L28.5464 4.43773C32.5617 4.34269 36.5049 5.51414 39.817 7.78597C43.1293 10.0579 45.6422 13.3151 46.9993 17.0954C48.3564 20.8758 48.4889 24.9875 47.3779 28.8473C46.2669 32.7072 43.9688 36.1193 40.8097 38.5998L40.8037 38.6045L40.8037 38.6044C40.263 39.0224 39.8249 39.5585 39.5232 40.1717C39.2215 40.7847 39.0639 41.4585 39.0625 42.1416V42.1425V43.5C39.0625 44.2459 38.7661 44.9613 38.2387 45.4887C37.7112 46.0162 36.9959 46.3125 36.25 46.3125H21.75C21.004 46.3125 20.2887 46.0162 19.7612 45.4887C19.2338 44.9613 18.9375 44.2459 18.9375 43.5V42.1441C18.9323 41.4657 18.7748 40.7971 18.4765 40.1877C18.1782 39.5781 17.7466 39.0434 17.2138 38.6231L17.8866 36.5936C18.069 36.7483 18.255 36.8993 18.4442 37.0465L17.8304 37.836L18.4492 37.0504C19.2189 37.6567 19.8421 38.4284 20.2729 39.3084C20.7036 40.1884 20.9307 41.154 20.9374 42.1338L20.9375 42.1406L20.9375 43.5C20.9375 43.7155 21.0231 43.9221 21.1754 44.0745C21.3278 44.2269 21.5345 44.3125 21.75 44.3125H36.25C36.4654 44.3125 36.6721 44.2269 36.8245 44.0745C36.9768 43.9221 37.0625 43.7155 37.0625 43.5V42.1406V42.1387C37.0644 41.1503 37.2923 40.1754 37.7287 39.2886C38.1646 38.4029 38.7969 37.6285 39.5775 37.0244C42.4048 34.8035 44.4614 31.7492 45.4559 28.2941C46.4507 24.8379 46.3321 21.1562 45.1169 17.7712C43.9017 14.3862 41.6516 11.4696 38.6857 9.43527ZM17.8865 36.5936L17.8866 36.5936L27.8731 6.46896L27.8724 6.469L28.5458 4.43775C18.1651 4.67729 9.8275 13.3058 9.87496 23.6797C9.88451 26.5645 10.5504 29.4094 11.8223 31.9987C13.0938 34.5872 14.9375 36.8525 17.2138 38.6231L17.8865 36.5936ZM17.8865 36.5936C16.1041 35.0827 14.6499 33.2189 13.6175 31.117C12.4793 28.7998 11.8834 26.254 11.8749 23.6725L11.8749 23.6711C11.8332 14.6214 18.9246 7.05389 27.8724 6.469L17.8865 36.5936ZM18.9376 52.5625C18.9376 52.0102 19.3853 51.5625 19.9376 51.5625H38.0626C38.6149 51.5625 39.0626 52.0102 39.0626 52.5625C39.0626 53.1148 38.6149 53.5625 38.0626 53.5625H19.9376C19.3853 53.5625 18.9376 53.1148 18.9376 52.5625ZM31.0024 11.8828C30.4579 11.7905 29.9416 12.1571 29.8493 12.7016C29.757 13.2461 30.1236 13.7624 30.6681 13.8547C32.6793 14.1956 34.535 15.1524 35.9792 16.5929C37.4235 18.0334 38.385 19.8867 38.731 21.897C38.8247 22.4413 39.3419 22.8066 39.8862 22.7129C40.4304 22.6192 40.7957 22.102 40.702 21.5577C40.2857 19.1394 39.129 16.9098 37.3916 15.1769C35.6543 13.4439 33.4218 12.293 31.0024 11.8828Z" fill="white" fill-opacity="0.2"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.6 KiB |
@@ -1,8 +0,0 @@
|
||||
<svg width="1em" height="1em" viewBox="0 0 59 58" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g opacity="0.2">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.9019 33.6218L41.7878 25.0804C42.0597 30.314 40.7683 36.4086 36.7808 43.364L43.5777 48.8015C43.8194 48.9935 44.1061 49.1205 44.4106 49.1706C44.7151 49.2207 45.0274 49.1922 45.3178 49.0879C45.6083 48.9835 45.8673 48.8067 46.0702 48.5742C46.2732 48.3417 46.4134 48.0612 46.4777 47.7593L49.2644 35.1625C49.3316 34.8954 49.3337 34.6161 49.2706 34.348C49.2076 34.08 49.0811 33.8309 48.9019 33.6218ZM10.2956 33.7578L17.4097 25.239C17.1378 30.4726 18.4292 36.5672 22.4167 43.5L15.6198 48.9375C15.3797 49.1294 15.0947 49.257 14.7916 49.3084C14.4885 49.3598 14.1773 49.3333 13.8873 49.2314C13.5973 49.1294 13.338 48.9554 13.1338 48.7256C12.9295 48.4958 12.7871 48.2179 12.7198 47.9179L9.93313 35.2984C9.86594 35.0313 9.8638 34.7521 9.92688 34.484C9.98995 34.2159 10.1164 33.9669 10.2956 33.7578Z" fill="#4B465C"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.9019 33.6218L41.7878 25.0804C42.0597 30.314 40.7683 36.4086 36.7808 43.364L43.5777 48.8015C43.8194 48.9935 44.1061 49.1205 44.4106 49.1706C44.7151 49.2207 45.0274 49.1922 45.3178 49.0879C45.6083 48.9835 45.8673 48.8067 46.0702 48.5742C46.2732 48.3417 46.4134 48.0612 46.4777 47.7593L49.2644 35.1625C49.3316 34.8954 49.3337 34.6161 49.2706 34.348C49.2076 34.08 49.0811 33.8309 48.9019 33.6218ZM10.2956 33.7578L17.4097 25.239C17.1378 30.4726 18.4292 36.5672 22.4167 43.5L15.6198 48.9375C15.3797 49.1294 15.0947 49.257 14.7916 49.3084C14.4885 49.3598 14.1773 49.3333 13.8873 49.2314C13.5973 49.1294 13.338 48.9554 13.1338 48.7256C12.9295 48.4958 12.7871 48.2179 12.7198 47.9179L9.93313 35.2984C9.86594 35.0313 9.8638 34.7521 9.92688 34.484C9.98995 34.2159 10.1164 33.9669 10.2956 33.7578Z" fill="white" fill-opacity="0.2"/>
|
||||
</g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M27.9017 3.71102C28.3979 3.30011 29.0221 3.07513 29.6666 3.07513C30.3127 3.07513 30.9383 3.30117 31.435 3.71394C33.6315 5.50224 38.386 9.93871 41.0105 16.7606C41.9219 19.1296 42.5713 21.7739 42.7735 24.6785L49.8022 33.113C50.0828 33.4423 50.2809 33.8338 50.38 34.255C50.4785 34.6735 50.4764 35.1093 50.374 35.5267L47.5901 48.1336L47.5894 48.1367C47.485 48.6022 47.264 49.0335 46.9471 49.39C46.6302 49.7465 46.2278 50.0166 45.7778 50.1748C45.3278 50.333 44.8449 50.3742 44.3746 50.2944C43.9043 50.2146 43.4621 50.0165 43.0894 49.7188L43.0889 49.7184L36.566 44.5H22.7675L16.2445 49.7184L16.2441 49.7188C15.8714 50.0165 15.4291 50.2146 14.9588 50.2944C14.4885 50.3742 14.0057 50.333 13.5556 50.1748C13.1056 50.0166 12.7032 49.7465 12.3863 49.39C12.0694 49.0335 11.8484 48.6022 11.7441 48.1367L11.7434 48.1336L8.95943 35.5267C8.85707 35.1093 8.85499 34.6735 8.95346 34.255C9.05262 33.8335 9.25088 33.4419 9.53173 33.1125L16.4274 24.8553C16.6112 21.877 17.2734 19.1695 18.2135 16.7491C20.8639 9.92541 25.6801 5.4896 27.9017 3.71102ZM40.8041 25.2385C40.7893 25.1573 40.7846 25.0748 40.7899 24.993C40.6159 22.2127 40.0004 19.7051 39.1438 17.4787C36.6951 11.1136 32.2331 6.94203 30.1682 5.26158L30.1583 5.25355L30.1584 5.25349C30.0204 5.13826 29.8464 5.07513 29.6666 5.07513C29.4869 5.07513 29.3128 5.13826 29.1748 5.25349L29.1585 5.26684C27.0721 6.93594 22.5504 11.1072 20.0778 17.4732C19.1887 19.7623 18.5587 22.3492 18.4096 25.2244C18.4102 25.2674 18.4081 25.3106 18.4032 25.3535C18.1745 30.253 19.3435 35.9842 22.9982 42.5H36.3292C39.938 35.9325 41.0647 30.1631 40.8041 25.2385ZM48.2696 34.398L42.8122 27.8492C42.6094 32.4348 41.2748 37.5835 38.2005 43.2464L44.3378 48.1563C44.4455 48.2423 44.5733 48.2995 44.7091 48.3226C44.845 48.3456 44.9845 48.3337 45.1145 48.288C45.2445 48.2423 45.3607 48.1643 45.4523 48.0613C45.5436 47.9586 45.6073 47.8344 45.6376 47.7004L45.6378 47.6992L48.4239 35.0828L48.4272 35.0682L48.4305 35.0545C48.4587 34.9425 48.4596 34.8255 48.4332 34.7131C48.4067 34.6007 48.3537 34.4963 48.2786 34.4086L48.2695 34.3981L48.2696 34.398ZM16.4139 27.9916L11.0632 34.3988L11.0549 34.4087L11.0549 34.4086C10.9798 34.4963 10.9267 34.6007 10.9003 34.7131C10.8738 34.8255 10.8747 34.9425 10.9029 35.0545C10.9053 35.0639 10.9075 35.0734 10.9096 35.0828L13.6956 47.6992L13.6959 47.7005C13.7262 47.8345 13.7899 47.9586 13.8812 48.0613C13.9727 48.1643 14.089 48.2423 14.219 48.288C14.349 48.3337 14.4885 48.3456 14.6243 48.3226C14.7602 48.2995 14.888 48.2423 14.9956 48.1563L21.1271 43.2511C18.0233 37.6471 16.6517 32.5443 16.4139 27.9916ZM25.0417 50.75C25.0417 50.1977 25.4895 49.75 26.0417 49.75H33.2917C33.844 49.75 34.2917 50.1977 34.2917 50.75C34.2917 51.3023 33.844 51.75 33.2917 51.75H26.0417C25.4895 51.75 25.0417 51.3023 25.0417 50.75ZM32.3855 21.75C32.3855 23.2515 31.1683 24.4688 29.6667 24.4688C28.1652 24.4688 26.948 23.2515 26.948 21.75C26.948 20.2485 28.1652 19.0313 29.6667 19.0313C31.1683 19.0313 32.3855 20.2485 32.3855 21.75Z" fill="#4B465C"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M27.9017 3.71102C28.3979 3.30011 29.0221 3.07513 29.6666 3.07513C30.3127 3.07513 30.9383 3.30117 31.435 3.71394C33.6315 5.50224 38.386 9.93871 41.0105 16.7606C41.9219 19.1296 42.5713 21.7739 42.7735 24.6785L49.8022 33.113C50.0828 33.4423 50.2809 33.8338 50.38 34.255C50.4785 34.6735 50.4764 35.1093 50.374 35.5267L47.5901 48.1336L47.5894 48.1367C47.485 48.6022 47.264 49.0335 46.9471 49.39C46.6302 49.7465 46.2278 50.0166 45.7778 50.1748C45.3278 50.333 44.8449 50.3742 44.3746 50.2944C43.9043 50.2146 43.4621 50.0165 43.0894 49.7188L43.0889 49.7184L36.566 44.5H22.7675L16.2445 49.7184L16.2441 49.7188C15.8714 50.0165 15.4291 50.2146 14.9588 50.2944C14.4885 50.3742 14.0057 50.333 13.5556 50.1748C13.1056 50.0166 12.7032 49.7465 12.3863 49.39C12.0694 49.0335 11.8484 48.6022 11.7441 48.1367L11.7434 48.1336L8.95943 35.5267C8.85707 35.1093 8.85499 34.6735 8.95346 34.255C9.05262 33.8335 9.25088 33.4419 9.53173 33.1125L16.4274 24.8553C16.6112 21.877 17.2734 19.1695 18.2135 16.7491C20.8639 9.92541 25.6801 5.4896 27.9017 3.71102ZM40.8041 25.2385C40.7893 25.1573 40.7846 25.0748 40.7899 24.993C40.6159 22.2127 40.0004 19.7051 39.1438 17.4787C36.6951 11.1136 32.2331 6.94203 30.1682 5.26158L30.1583 5.25355L30.1584 5.25349C30.0204 5.13826 29.8464 5.07513 29.6666 5.07513C29.4869 5.07513 29.3128 5.13826 29.1748 5.25349L29.1585 5.26684C27.0721 6.93594 22.5504 11.1072 20.0778 17.4732C19.1887 19.7623 18.5587 22.3492 18.4096 25.2244C18.4102 25.2674 18.4081 25.3106 18.4032 25.3535C18.1745 30.253 19.3435 35.9842 22.9982 42.5H36.3292C39.938 35.9325 41.0647 30.1631 40.8041 25.2385ZM48.2696 34.398L42.8122 27.8492C42.6094 32.4348 41.2748 37.5835 38.2005 43.2464L44.3378 48.1563C44.4455 48.2423 44.5733 48.2995 44.7091 48.3226C44.845 48.3456 44.9845 48.3337 45.1145 48.288C45.2445 48.2423 45.3607 48.1643 45.4523 48.0613C45.5436 47.9586 45.6073 47.8344 45.6376 47.7004L45.6378 47.6992L48.4239 35.0828L48.4272 35.0682L48.4305 35.0545C48.4587 34.9425 48.4596 34.8255 48.4332 34.7131C48.4067 34.6007 48.3537 34.4963 48.2786 34.4086L48.2695 34.3981L48.2696 34.398ZM16.4139 27.9916L11.0632 34.3988L11.0549 34.4087L11.0549 34.4086C10.9798 34.4963 10.9267 34.6007 10.9003 34.7131C10.8738 34.8255 10.8747 34.9425 10.9029 35.0545C10.9053 35.0639 10.9075 35.0734 10.9096 35.0828L13.6956 47.6992L13.6959 47.7005C13.7262 47.8345 13.7899 47.9586 13.8812 48.0613C13.9727 48.1643 14.089 48.2423 14.219 48.288C14.349 48.3337 14.4885 48.3456 14.6243 48.3226C14.7602 48.2995 14.888 48.2423 14.9956 48.1563L21.1271 43.2511C18.0233 37.6471 16.6517 32.5443 16.4139 27.9916ZM25.0417 50.75C25.0417 50.1977 25.4895 49.75 26.0417 49.75H33.2917C33.844 49.75 34.2917 50.1977 34.2917 50.75C34.2917 51.3023 33.844 51.75 33.2917 51.75H26.0417C25.4895 51.75 25.0417 51.3023 25.0417 50.75ZM32.3855 21.75C32.3855 23.2515 31.1683 24.4688 29.6667 24.4688C28.1652 24.4688 26.948 23.2515 26.948 21.75C26.948 20.2485 28.1652 19.0313 29.6667 19.0313C31.1683 19.0313 32.3855 20.2485 32.3855 21.75Z" fill="white" fill-opacity="0.2"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 7.7 KiB |
@@ -1,20 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
// Determine if the application is in maintenance mode...
|
||||
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
|
||||
require $maintenance;
|
||||
}
|
||||
|
||||
// Register the Composer autoloader...
|
||||
require __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
// Bootstrap Laravel and handle the request...
|
||||
/** @var Application $app */
|
||||
$app = require_once __DIR__.'/../bootstrap/app.php';
|
||||
|
||||
$app->handleRequest(Request::capture());
|
||||
@@ -1,79 +0,0 @@
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
#loading-bg {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: var(--initial-loader-bg, #fff);
|
||||
block-size: 100%;
|
||||
gap: 1rem 0;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.loading {
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
border: 3px solid transparent;
|
||||
border-radius: 50%;
|
||||
block-size: 55px;
|
||||
inline-size: 55px;
|
||||
}
|
||||
|
||||
.loading .effect-1,
|
||||
.loading .effect-2,
|
||||
.loading .effect-3 {
|
||||
position: absolute;
|
||||
box-sizing: border-box;
|
||||
border: 3px solid transparent;
|
||||
border-radius: 50%;
|
||||
block-size: 100%;
|
||||
border-inline-start: 3px solid var(--initial-loader-color, #eee);
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.loading .effect-1 {
|
||||
animation: rotate 1s ease infinite;
|
||||
}
|
||||
|
||||
.loading .effect-2 {
|
||||
animation: rotate-opacity 1s ease infinite 0.1s;
|
||||
}
|
||||
|
||||
.loading .effect-3 {
|
||||
animation: rotate-opacity 1s ease infinite 0.2s;
|
||||
}
|
||||
|
||||
.loading .effects {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate-opacity {
|
||||
0% {
|
||||
opacity: 0.1;
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
User-agent: *
|
||||
Disallow:
|
||||
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 81 KiB |