Targ Apps Docs

Ajustes, onboarding y feedback

Settings, tema, onboarding, EmptyState, Toast y transacciones recurrentes en Targ-Apps-Finance.

Settings (pages/Settings.js, TAF-019 & TAF-018)

Página .taf-settings-page con secciones apiladas y separadores sutiles (sin card soup). Cabecera vía PageHeader.

SecciónImplementación
Apariencia.taf-settings-section + icono Lucide palette + ThemeToggle (iconos sun / moon / monitor)
RegionalIcono globe + useSettings() — defaultCurrency, locale, weekStartsOn en Chroma-Fs (logic/settings.js)
Copia de seguridad (TAF-018)Icono hardDrive; export (download) e import (upload + folderOpen) en .taf-settings-backup
Perfil localIcono user + identidad del registro + «Cerrar sesión» (logOut)
AlmacenamientoIcono info + estadísticas .taf-settings-stat (cuentas, transacciones, categorías, versión)
Animación de entradaanimateSettingsReveal vía AnimeJS con revelación escalonada de .taf-settings-section

Cambios de preferencias disparan toast de confirmación. Errores de import muestran toast y banner .taf-settings-error con data-slot="import-error".

Tema claro/oscuro (TAF-020)

PiezaDetalle
Persistenciasettings.theme: light | dark | system
AplicaciónSettingsProvider → subscribeTheme(() => settings().theme)
SystemSin data-theme en <html>; CSS usa @media (prefers-color-scheme: dark)
UISegmented control ThemeToggle con iconos Lucide (sun, moon, monitor) en Settings
Transición AnimeJSanimateThemeSwitch() dispara un micro-escalado suave durante el cambio de tema
TokensPlugin chroma-style (tokens.css y utilities.css) + tokens financieros --finance-* en src/styles/finance.css

Transacciones recurrentes (TAF-015)

PiezaDetalle
ModelocreateRecurringRule, recurringId en transacciones generadas
Lógica puralogic/recurrence/generateOccurrences.js — weekly/monthly/yearly con ancla de día
SyncmaterializeRecurringOccurrences en boot de FinanceProvider (useEffect)
UIpages/RecurringTransactions.js — PageHeader, formulario en tarjeta .taf-recurring-form, listado .taf-recurring-card con badge de estado (Activa/Pausada), icono repeat y acciones Lucide (pausar/reanudar/eliminar)
VacíoEmptyState sin emoji — «Sin reglas recurrentes» + CTA «Nueva regla»
Ruta#/recurring en logic/router.js y NavBar

Colección recurring incluida en export/import (COLLECTIONS en logic/persist.js).

Estilos: src/styles/finance.css — namespace .taf-recurring-*.

Onboarding (pages/Onboarding.js, TAF-024)

Pantalla completa (sin Layout), alineada visualmente con #/auth: Grift, tokens --cs-*, monograma Targ (TargMark) y copia en español directo.

BloqueImplementación
CabeceraEyebrow «Targ Apps» + titular «Primera cuenta» + texto de apoyo
Firma visualRegla horizontal tipo ledger con marcador 01 en --cs-primary (.taf-onboarding-ledger)
FormularioAccountForm con variant="onboarding", hideName: true, moneda default de useSettings()
Nombre de cuentaresolveOnboardingAccountName() — profile.name del registro local (fallback «Mi cuenta»)
CTACrear cuenta → addAccount({ name, type, initialBalance, currency, isDefault: true }); si result.valid, hash #/dashboard
AnimaciónanimateOnboardingEnter() en la tarjeta; prefers-reduced-motion respetado
GuardsyncOnboardingRoute() en FinanceProvider (logic/onboarding.js)

Estilos en src/styles/finance.css (.taf-onboarding-*). Componente compartido src/components/TargMark.js.

Criterio de completado

Onboarding está completo cuando onboardingComplete es true en el snapshot, o hay al menos una cuenta (migración). addAccount válido llama markOnboardingComplete(). El flag no se limpia si después se eliminan todas las cuentas: el usuario no vuelve al wizard.

EmptyState (src/components/EmptyState.js, TAF-022)

Componente visual enriquecido con:

  • Ilustración geométrica SVG nativa (.empty-svg-graphic) con soporte para tokens de tema.
  • Animación de partículas e iconos flotantes vía AnimeJS (animateEmptyState).
  • Soporte para icon, title, message, actionLabel, onAction y context (reports, transactions, accounts, etc.).
  • Botón de acción con estilo Chroma-Style (.cs-btn .cs-btn-primary).

Toast (src/components/Toast.js, TAF-022)

AspectoDetalle
Storelogic/store/toastStore.js — lista reactiva + showToast(message, variant) + dismissToast(id)
RenderFor sobre toasts() con role="status" / aria-live
DiseñoIconos distintivos por variante (✓ Éxito, ✕ Error, ⚠ Advertencia, ℹ Info) + botón de cierre manual
Auto-dismiss4 segundos por toast
MontajeÚnico en Layout.js
EstilosVariantes success / error / warning / info en finance.css con backdrop-filter: blur(12px)

Convención

Atributos data-page, data-slot y data-component alineados con páginas core.

On this page