{{-- Vista Bootstrap/Vuexy para el modal del panel admin. La usa el componente App\Livewire\VuexyModal (extiende el Modal de wire-elements). El layout guest sigue usando la vista original (wire-elements-modal::modal), intacta. Config por componente: - Tamaño: public static function modalMaxWidth(): string -> 'sm'..'7xl' - Formato: public static function modalType(): string 'center' (default) | 'top' | 'offcanvas-end' | 'offcanvas-start' DOS hosts persistentes: - #livewire-ui-modal (.modal) -> componentes de tipo center/top - #livewire-ui-offcanvas (.offcanvas) -> componentes de tipo offcanvas-* wire-elements es un stack "reemplazar con historial" (solo un componente activo a la vez). Enrutamos cada componente al host que le toca por su modalType (server-side) y Alpine muestra/oculta el host correcto según el componente activo. Así un offcanvas (p.ej. "New Owner") abierto DESDE un modal funciona con la misma lógica openModal/ closeModal, sin hacks de z-index: al abrirlo se oculta el modal y al cerrarlo (pop del historial) el modal vuelve con el resultado ya aplicado. IMPORTANTE: la decisión de "qué host mostrar" se toma leyendo el DOM (en qué host vive el wrapper del componente activo), NO un mapa JS. Un `x-data="{... @js($meta) ...}"` se evalúa una sola vez al cargar la página (con $components vacío) y Livewire no lo re-evalúa en sus updates, así que quedaría permanentemente obsoleto. --}} @php $sizeMap = [ 'sm' => 'modal-sm', 'md' => '', 'lg' => 'modal-lg', 'xl' => 'modal-lg', '2xl' => 'modal-lg', '3xl' => 'modal-xl', '4xl' => 'modal-xl', '5xl' => 'modal-xl', '6xl' => 'modal-xl', '7xl' => 'modal-xl', ]; $ocWidthMap = [ 'sm' => '360px', 'md' => '420px', 'lg' => '480px', 'xl' => '560px', '2xl' => '640px', '3xl' => '720px', '4xl' => '820px', '5xl' => '920px', '6xl' => '1040px', '7xl' => '1140px', ]; // Metadatos por componente abierto: tipo (para enrutarlo al host correcto) + medidas. $meta = []; foreach ($components as $id => $component) { $name = data_get($component, 'name'); $maxWidth = data_get($component, 'modalAttributes.maxWidth', 'lg'); $type = 'center'; try { $cls = app(\Livewire\Mechanisms\ComponentRegistry::class)->getClass($name); if (method_exists($cls, 'modalType')) { $type = $cls::modalType(); } } catch (\Throwable $e) { } $meta[$id] = [ 'isOffcanvas' => \Illuminate\Support\Str::startsWith($type, 'offcanvas'), 'sizeClass' => $sizeMap[$maxWidth] ?? 'modal-lg', 'centered' => $type === 'center', 'ocStart' => $type === 'offcanvas-start', 'ocWidth' => $ocWidthMap[$maxWidth] ?? '480px', 'clickAway' => (bool) data_get($component, 'modalAttributes.closeOnClickAway', true), ]; } // Meta del componente activo (para dimensionar los hosts en server-side). $am = $meta[$activeComponent] ?? [ 'isOffcanvas' => false, 'sizeClass' => 'modal-lg', 'centered' => true, 'ocStart' => false, 'ocWidth' => '480px', ]; @endphp