import { ActionCardMetadata } from '../../molecules/action-card/types'; import { TitleMetadata } from '../../atoms/title/types'; import { AboutAction, AboutViewConfig } from './types'; import * as i0 from "@angular/core"; /** * `val-about-view` — vista About full-feature autocontenida (organism). * Promovida desde `showcase` bajo el proceso de ADR-021. Reúne: * - **HERO** — logo + nombre de marca + tagline + pill de versión (copiable). * - **Descripción** — título + cuerpo. * - **Acciones** — action-card de rating built-in (abre `val-content-reaction` * DIRECTAMENTE vía `ModalService`, sin wrapper local — decisión CTO) + las * acciones genéricas que el consumer aporte por `config.actions`. * - **Redes** — links sociales (`config.socialLinks`); sección oculta si vacía. * - **Footer** — copyright con el año actual. * * Lo app-specific (logo, nombre, versión, redes, acciones share/faq) viaja como * DATA de config — NO como slots (ADR-021). La versión la pasa el consumer * (`config.version` = su `APP_VERSION`); la lib NO importa el `version.ts` de la * app. Si no se pasa versión, el pill se oculta. * * NO renderiza ion-content — vive dentro de val-page-wrapper. `ActivatedRoute` * se inyecta `{ optional: true }` solo para leer el route data de config. * * Auto-registra sus defaults i18n (es/en) en el constructor si el consumer no * proveyó el namespace configurado (default `Settings.About`). * * GOTCHA i18n ContentReaction: `val-content-reaction` exige su namespace * `ContentReaction` registrado donde se use (key faltante en binding + CD = * navegador congelado en dev). `ContentReactionComponent` se auto-registra ese * namespace en SU constructor, y como se abre vía `ModalService` ese constructor * corre antes de que su template binde — queda cubierto. Igual lo importamos * como dependencia explícita de esta vista para que la garantía sea local. */ export declare class AboutViewComponent { private nav; private i18n; private modalService; private toast; private route; /** * Config vía input (object-first). Si no se pasa, se cae al route data * `aboutConfig` (poblado por `provideValtechAboutRoutes`). `resolvedConfig` * mergea con los defaults — el input gana sobre route data. * * **Signal input** (no `@Input` clásico): `resolvedConfig` es un `computed` que se * evalúa por primera vez en el constructor (vía `this.ns` → `setBackHeader`), ANTES * de que un `@Input` clásico esté bindeado. Con `@Input` el computed memoizaba la * config vacía y, al no depender de ninguna señal, NUNCA recomputaba → ignoraba * `[config]` (social/acciones/versión/marca quedaban en default). Como signal, el * computed lo trackea y recomputa cuando el binding llega. */ readonly config: import("@angular/core").InputSignal; readonly resolvedConfig: import("@angular/core").Signal> & Pick>; /** Namespace i18n resuelto (capturado para llamadas no-reactivas). */ private get ns(); readonly brandName: import("@angular/core").Signal; readonly logoSrc: import("@angular/core").Signal; readonly logoVar: import("@angular/core").Signal; readonly version: import("@angular/core").Signal; readonly socialLinks: import("@angular/core").Signal<{ icon: string; url: string; label: string; }[]>; readonly showRating: import("@angular/core").Signal; readonly actions: import("@angular/core").Signal; /** Copyright del footer — año actual interpolado en `copyrightText`. */ readonly copyright: import("@angular/core").Signal; /** Title metadata para secciones — bold + size small. */ readonly rateActionCard: import("@angular/core").Signal; constructor(); /** Helper i18n bound al namespace resuelto. Reactivo vía `lang()`. */ protected tt(key: string): string; /** Title metadata para secciones — bold + size small. */ protected sectionTitle(key: string): TitleMetadata; /** ActionCardMetadata para una acción genérica del consumer. */ protected extraActionCard(action: AboutAction): ActionCardMetadata; /** Copia la versión al portapapeles + toast (color dark). */ copyVersion(): Promise; /** Abre una URL externa en nueva tab. `mailto:` queda en la misma tab. */ openUrl(url: string): void; /** * "Calificar la app" — abre `val-content-reaction` DIRECTAMENTE como sheet * modal (sin wrapper local — decisión CTO). El componente persiste la reacción * contra el backend de feedback y muestra su propio estado de "gracias"; el * sheet se cierra arrastrando (breakpoint 0). El namespace i18n * `ContentReaction` lo auto-registra `ContentReactionComponent` en su * constructor, que corre al crear el modal — sin riesgo de key faltante. * * Sheet (bottom sheet): el contenido scrollea dentro y el botón "Enviar" queda * siempre alcanzable, también en viewports chicos. */ openRating(): Promise; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }