New Blade layout, copy, and visual system for the monitoring tab; RRD hosts use data-statistics-chart hooks; tables use pxStatTableKit and data-statistics-data-row; network and comparison panels use new selectors; CSV helpers renamed (pxExport*); modals and telemetry refreshed.
Made-with: Cursor
- Add is_lxc column to ext_proxmox_oses for tracking template type
- OS model now has vmType() helper returning 'lxc' or 'qemu'
- Install uses OS template's type for clone API path (not node type)
- createServer validates OS type matches node type before provisioning
- calculateNode filters nodes by LXC/KVM type based on selected OS
- Reinstall OS list filtered to only show matching template types
- Admin location OS repeater now has LXC Template checkbox
- Add is_lxc boolean column to ext_proxmox_nodes (default false, existing nodes unaffected)
- Add LXC checkbox to admin node creation form (disabled on edit)
- Dynamic API path selection via Node::vmType() (returns 'lxc' or 'qemu')
- LXC deployment: syncLxcSettings() for cores, memory, swap, hostname, rootfs, net config
- LXC network uses name=eth0 format with applyLxcPoolSettings() for VLAN/firewall/MTU
- All lifecycle operations LXC-aware: install, suspend, unsuspend, terminate, upgrade, reinstall
- VNC/xterm console uses correct type (lxc vs kvm)
- All 20+ Livewire components use vmType() for Proxmox API paths
- LXC user interface shows basic-only view (no advanced toggle, no KVM-specific tabs)
- Basic tabs for LXC: Overview, Network Configuration, Backups, Console
- Cache getTaskHistoryProperty() with 30s TTL to avoid Proxmox API calls on every render
- Move networkAnalysis heavy arrays (connections, topConnections, topPorts) out of Livewire public property into server-side cache only
- Store only counts and metadata in the Livewire payload instead of thousands of connection objects
- Pagination and export methods now read from cache instead of public property
- Reduce wire:poll intervals from 10s to 30s on task history and lifecycle events cards
- Dramatically reduces JSON payload size on every Livewire request
Three separate click handlers were all firing on the same Graph button
click, each calling classList.toggle('open'). Multiple toggles cancel
out (on->off or on->off->on), making the button appear broken.
Removed redundant per-button listeners from poll() and livewire:navigated.
The document-level event delegation handles all clicks correctly for
dynamically created elements.
Root cause: wire:poll.2s on layout div caused Livewire to morph/overwrite
the JavaScript-rendered network traffic interface cards every 2 seconds,
replacing them with the server-rendered placeholder HTML.
- Add wire:ignore to #network-traffic-container to prevent Livewire DOM
morphing from destroying dynamically rendered content
- Add retry logic (10x at 300ms) to createChart() for when Chart.js CDN
hasn't finished loading (e.g. during wire:navigate)