# Documentación de Utilidades del Proyecto

Este archivo contiene la documentación detallada de componentes, helpers, clases y otras utilidades específicas de este template de proyecto.

## 📦 Componentes

Aquí se documentan los componentes de Blade y Livewire reutilizables del proyecto.

-   **Notificaciones Swal:**
    -   El componente de notificaciones se encuentra en `resources/views/components/swal/index.blade.php` y puede ser invocado de dos maneras:
        1.  **Desde un componente Livewire:** Se debe disparar un evento `swal` con los parámetros deseados.
            ```php
            $this->dispatch('swal', title: 'Título', message: 'Mensaje de la notificación.', type: 'success');
            ```
        2.  **Desde un controlador o cualquier otra parte del backend:** Se debe pasar un array a la sesión con la clave `swal`. El componente blade detectará esta variable de sesión y disparará un evento de JavaScript para mostrar la notificación.
            ```php
            session()->flash('swal', [
                'title'   => 'Título',
                'message' => 'Mensaje de la notificación.',
                'type'    => 'success',
            ]);
            ```
    -   Los tipos de notificación disponibles son: `success`, `error`, `warning`, `info`.

-   **Componente SEO (`<x-seo />`):**
    -   **Ubicación:** `resources/views/components/seo.blade.php`
    -   **Propósito:** Centraliza la generación de metaetiquetas SEO para asegurar consistencia en todo el sitio.
    -   **Uso:** Se invoca como un componente de Blade y se le pueden pasar los siguientes parámetros:
        -   `title` (string): El título de la página.
        -   `description` (string): La descripción para los motores de búsqueda.
        -   `keywords` (string): Las palabras clave, separadas por comas.
        -   `image` (string): La URL completa de la imagen para `og:image` y `twitter:image`.
        -   `canonicalUrl` (string, opcional): La URL canónica de la página. Por defecto, usa la URL actual (`URL::current()`).
        -   `ogType` (string, opcional): El tipo de contenido Open Graph (e.g., "website", "article"). Por defecto, es "website".
    -   **Comportamiento por Defecto:** Si no se proporciona un parámetro, el componente utilizará los valores definidos en la configuración general del sitio (`settings`).
    -   **Ejemplo:**
        ```blade
        @section('seo')
            <x-seo
                :title="$property->meta_title"
                :description="$property->meta_description"
                :keywords="$property->meta_keywords"
                :image="Storage::url($property->thumbnail)"
                :canonicalUrl="route('property.detail', $property)"
                ogType="article"
            />
        @endsection
        ```

## 🛠️ Helpers

Aquí se documentan las funciones helper globales o específicas del proyecto.

## 📚 Clases

Aquí se documentan clases importantes que no son componentes ni helpers, como servicios, repositorios, etc.

## 🔗 Relaciones Polimórficas

Aquí se documentan las relaciones polimórficas utilizadas en el proyecto y cómo interactuar con ellas.