From 87e8f33b01ed3b36ae1f5cc9c0f1bc77ed177329 Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Fri, 3 Apr 2026 03:23:20 +0200 Subject: [PATCH 1/7] fix: corregir lang y file_path en frontmatter de funciones existentes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Normaliza lang: typescript → ts en funciones frontend y corrige file_path de functions/infra/ → functions/browser/ en funciones CDP. Actualiza referencias cn_typescript_core → cn_ts_core. Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/functions/core/chart_colors.md | 2 +- frontend/functions/core/cn.md | 2 +- frontend/functions/core/format_compact.md | 2 +- frontend/functions/core/get_series_color.md | 2 +- frontend/functions/core/theme_config_to_colors.md | 2 +- frontend/functions/core/wails_cache.md | 2 +- frontend/functions/ui/alert.md | 4 ++-- frontend/functions/ui/analytics_page.md | 4 ++-- frontend/functions/ui/apply_theme.md | 4 ++-- frontend/functions/ui/area_chart.md | 6 +++--- frontend/functions/ui/badge.md | 2 +- frontend/functions/ui/bar_chart.md | 6 +++--- frontend/functions/ui/button.md | 2 +- frontend/functions/ui/card.md | 2 +- frontend/functions/ui/chart_container.md | 6 +++--- frontend/functions/ui/crud_page.md | 4 ++-- frontend/functions/ui/dashboard_layout.md | 4 ++-- frontend/functions/ui/data_table.md | 4 ++-- frontend/functions/ui/detail_page.md | 4 ++-- frontend/functions/ui/dialog.md | 4 ++-- frontend/functions/ui/form_field.md | 4 ++-- frontend/functions/ui/input.md | 2 +- frontend/functions/ui/kpi_card.md | 6 +++--- frontend/functions/ui/label.md | 2 +- frontend/functions/ui/line_chart.md | 6 +++--- frontend/functions/ui/page_header.md | 4 ++-- frontend/functions/ui/pie_chart.md | 4 ++-- frontend/functions/ui/progress_bar.md | 4 ++-- frontend/functions/ui/select.md | 4 ++-- frontend/functions/ui/settings_page.md | 4 ++-- frontend/functions/ui/skeleton.md | 4 ++-- frontend/functions/ui/sparkline.md | 4 ++-- frontend/functions/ui/tabs.md | 4 ++-- frontend/functions/ui/theme_provider.md | 6 +++--- frontend/functions/ui/tooltip.md | 4 ++-- frontend/functions/ui/use_animated_canvas.md | 2 +- frontend/functions/ui/use_wails_event.md | 2 +- frontend/functions/ui/use_wails_mutation.md | 6 +++--- frontend/functions/ui/use_wails_query.md | 6 +++--- frontend/functions/ui/use_wails_stream.md | 4 ++-- frontend/functions/ui/wails_provider.md | 6 +++--- frontend/types/core/component_variants.md | 2 +- frontend/types/ui/chart_series.md | 2 +- frontend/types/ui/theme_config.md | 2 +- frontend/types/ui/wails_ipc.md | 2 +- functions/browser/cdp_click.md | 2 +- functions/browser/cdp_close.md | 2 +- functions/browser/cdp_connect.md | 4 ++-- functions/browser/cdp_evaluate.md | 4 ++-- functions/browser/cdp_get_html.md | 4 ++-- functions/browser/cdp_navigate.md | 4 ++-- functions/browser/cdp_screenshot.md | 4 ++-- functions/browser/cdp_type_text.md | 2 +- functions/browser/cdp_wait_element.md | 2 +- functions/browser/cdp_wait_load.md | 2 +- functions/browser/chrome_launch.md | 4 ++-- 56 files changed, 99 insertions(+), 99 deletions(-) diff --git a/frontend/functions/core/chart_colors.md b/frontend/functions/core/chart_colors.md index 8bb9bd2a..93a8ac13 100644 --- a/frontend/functions/core/chart_colors.md +++ b/frontend/functions/core/chart_colors.md @@ -1,7 +1,7 @@ --- name: chart_colors kind: function -lang: typescript +lang: ts domain: core version: "1.0.0" purity: pure diff --git a/frontend/functions/core/cn.md b/frontend/functions/core/cn.md index 288ae534..d6f01622 100644 --- a/frontend/functions/core/cn.md +++ b/frontend/functions/core/cn.md @@ -1,7 +1,7 @@ --- name: cn kind: function -lang: typescript +lang: ts domain: core version: "1.0.0" purity: pure diff --git a/frontend/functions/core/format_compact.md b/frontend/functions/core/format_compact.md index 6542fa5b..5b9bc2a7 100644 --- a/frontend/functions/core/format_compact.md +++ b/frontend/functions/core/format_compact.md @@ -1,7 +1,7 @@ --- name: format_compact kind: function -lang: typescript +lang: ts domain: core version: "1.0.0" purity: pure diff --git a/frontend/functions/core/get_series_color.md b/frontend/functions/core/get_series_color.md index 6bb5aa95..a58f8a48 100644 --- a/frontend/functions/core/get_series_color.md +++ b/frontend/functions/core/get_series_color.md @@ -1,7 +1,7 @@ --- name: get_series_color kind: function -lang: typescript +lang: ts domain: core version: "1.0.0" purity: pure diff --git a/frontend/functions/core/theme_config_to_colors.md b/frontend/functions/core/theme_config_to_colors.md index b3a7dab0..9c08c3d5 100644 --- a/frontend/functions/core/theme_config_to_colors.md +++ b/frontend/functions/core/theme_config_to_colors.md @@ -1,7 +1,7 @@ --- name: theme_config_to_colors kind: function -lang: typescript +lang: ts domain: core version: "1.0.0" purity: pure diff --git a/frontend/functions/core/wails_cache.md b/frontend/functions/core/wails_cache.md index 2296276d..fcf2cc20 100644 --- a/frontend/functions/core/wails_cache.md +++ b/frontend/functions/core/wails_cache.md @@ -1,7 +1,7 @@ --- name: wails_cache kind: function -lang: typescript +lang: ts domain: core version: "1.0.0" purity: pure diff --git a/frontend/functions/ui/alert.md b/frontend/functions/ui/alert.md index fe735977..7022ff19 100644 --- a/frontend/functions/ui/alert.md +++ b/frontend/functions/ui/alert.md @@ -1,14 +1,14 @@ --- name: alert kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "Alert(props: { variant?: 'default' | 'destructive' }): JSX.Element" description: "Alerta accesible con variantes default y destructive. Sistema de slots para título, descripción, icono y acción." tags: [alert, feedback, component, ui, notification] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/analytics_page.md b/frontend/functions/ui/analytics_page.md index 08846bd5..307af435 100644 --- a/frontend/functions/ui/analytics_page.md +++ b/frontend/functions/ui/analytics_page.md @@ -1,14 +1,14 @@ --- name: analytics_page kind: function -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: pure signature: "analyticsPage(props: AnalyticsPageProps): ReactElement" description: "Genera un dashboard de analytics completo con header, fila de KPIs con deltas y grid de charts configurables." tags: [analytics, dashboard, kpi, charts, factory, composition, ui] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/apply_theme.md b/frontend/functions/ui/apply_theme.md index 9991facc..e8eaf2e6 100644 --- a/frontend/functions/ui/apply_theme.md +++ b/frontend/functions/ui/apply_theme.md @@ -1,7 +1,7 @@ --- name: apply_theme kind: function -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure @@ -9,7 +9,7 @@ signature: "applyTheme(theme: Theme): void" description: "Inyecta un tema como CSS variables en document.documentElement. Maneja clase dark automáticamente. Mapea 40 tokens semánticos." tags: [theme, css-variables, apply, runtime, ui] uses_functions: [] -uses_types: [ThemeConfig_typescript_ui] +uses_types: [ThemeConfig_ts_ui] returns: [] returns_optional: false error_type: "error_go_core" diff --git a/frontend/functions/ui/area_chart.md b/frontend/functions/ui/area_chart.md index 92a95495..2e6b65a6 100644 --- a/frontend/functions/ui/area_chart.md +++ b/frontend/functions/ui/area_chart.md @@ -1,15 +1,15 @@ --- name: area_chart kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "AreaChart(props: AreaChartProps): JSX.Element" description: "Gráfico de área Recharts con gradientes automáticos, multi-series, stacking y tooltips temáticos." tags: [chart, area, visualization, recharts, gradient, component, ui] -uses_functions: [cn_typescript_core, chart_container_typescript_ui, get_series_color_typescript_core] -uses_types: [ChartSeries_typescript_ui] +uses_functions: [cn_ts_core, chart_container_ts_ui, get_series_color_ts_core] +uses_types: [ChartSeries_ts_ui] returns: [] returns_optional: false error_type: "" diff --git a/frontend/functions/ui/badge.md b/frontend/functions/ui/badge.md index 4558d802..691da46f 100644 --- a/frontend/functions/ui/badge.md +++ b/frontend/functions/ui/badge.md @@ -8,7 +8,7 @@ purity: impure signature: "Badge(props: BadgeProps & VariantProps): JSX.Element" description: "Badge con 10 variantes semánticas (default, secondary, destructive, outline, ghost, link, success, warning, error, info) y 2 tamaños." tags: [badge, status, component, ui, indicator] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/bar_chart.md b/frontend/functions/ui/bar_chart.md index 5496e582..1193a013 100644 --- a/frontend/functions/ui/bar_chart.md +++ b/frontend/functions/ui/bar_chart.md @@ -1,15 +1,15 @@ --- name: bar_chart kind: component -lang: typescript +lang: ts domain: ui version: "1.1.0" purity: impure signature: "BarChart(props: BarChartProps): JSX.Element" description: "Gráfico de barras Recharts con multi-series, orientación horizontal/vertical, tooltips temáticos y bordes redondeados." tags: [chart, bar, visualization, recharts, component, ui] -uses_functions: [cn_typescript_core, chart_container_typescript_ui, get_series_color_typescript_core] -uses_types: [ChartSeries_typescript_ui] +uses_functions: [cn_ts_core, chart_container_ts_ui, get_series_color_ts_core] +uses_types: [ChartSeries_ts_ui] returns: [] returns_optional: false error_type: "" diff --git a/frontend/functions/ui/button.md b/frontend/functions/ui/button.md index a4ffada6..cc83f2c4 100644 --- a/frontend/functions/ui/button.md +++ b/frontend/functions/ui/button.md @@ -8,7 +8,7 @@ purity: impure signature: "Button(props: ButtonProps & VariantProps): JSX.Element" description: "Botón accesible con 6 variantes (default, outline, secondary, ghost, destructive, link) y 8 tamaños. Base-UI primitivo con CVA." tags: [button, component, ui, interactive, cva] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/card.md b/frontend/functions/ui/card.md index 28c6c774..eba1baca 100644 --- a/frontend/functions/ui/card.md +++ b/frontend/functions/ui/card.md @@ -8,7 +8,7 @@ purity: impure signature: "Card(props: { size?: 'default' | 'sm'; variant?: 'default' | 'borderless' | 'ghost'; className?: string; children: ReactNode }): JSX.Element" description: "Contenedor card con header, title, description, action, content y footer. Sistema de slots composable. Variantes default, borderless y ghost para dashboards dark." tags: [card, container, layout, component, ui, dashboard, dark] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/chart_container.md b/frontend/functions/ui/chart_container.md index 7f163c01..eb9bae70 100644 --- a/frontend/functions/ui/chart_container.md +++ b/frontend/functions/ui/chart_container.md @@ -1,15 +1,15 @@ --- name: chart_container kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "ChartContainer(props: { children: ReactNode; height?: number | string }): JSX.Element" description: "Base para todos los charts Recharts: container responsive, tooltip temático, legend y utilidades de colores por serie." tags: [chart, container, recharts, base, visualization, component, ui] -uses_functions: [cn_typescript_core, get_series_color_typescript_core] -uses_types: [ChartSeries_typescript_ui] +uses_functions: [cn_ts_core, get_series_color_ts_core] +uses_types: [ChartSeries_ts_ui] returns: [] returns_optional: false error_type: "" diff --git a/frontend/functions/ui/crud_page.md b/frontend/functions/ui/crud_page.md index 9f139b00..495b7768 100644 --- a/frontend/functions/ui/crud_page.md +++ b/frontend/functions/ui/crud_page.md @@ -1,14 +1,14 @@ --- name: crud_page kind: function -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: pure signature: "crudPage(props: CrudPageProps): ReactElement" description: "Genera una página CRUD completa con header, tabla con columnas configurables, botones de acción (add/edit/delete) y schema de formulario." tags: [crud, page, table, form, factory, composition, ui] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/dashboard_layout.md b/frontend/functions/ui/dashboard_layout.md index e4b87676..be1454d7 100644 --- a/frontend/functions/ui/dashboard_layout.md +++ b/frontend/functions/ui/dashboard_layout.md @@ -1,14 +1,14 @@ --- name: dashboard_layout kind: function -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: pure signature: "dashboardLayout(props: DashboardLayoutProps): ReactElement" description: "Genera un grid responsive de dashboard a partir de un array de widgets con span configurable. 1-4 columnas con auto-responsive." tags: [dashboard, layout, grid, factory, composition, ui] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/data_table.md b/frontend/functions/ui/data_table.md index ddc8993e..31967ae3 100644 --- a/frontend/functions/ui/data_table.md +++ b/frontend/functions/ui/data_table.md @@ -1,14 +1,14 @@ --- name: data_table kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "DataTable(props: DataTableProps): JSX.Element" description: "Tabla de datos con sticky header, overflow scroll, heatmap por columna, formato condicional (number/datetime/currency) y hover rows. Auto-detecta columnas desde la primera fila si no se proveen." tags: [table, data, heatmap, dashboard, component, ui, format, visualization] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/detail_page.md b/frontend/functions/ui/detail_page.md index 3eb5c5bb..3797db06 100644 --- a/frontend/functions/ui/detail_page.md +++ b/frontend/functions/ui/detail_page.md @@ -1,14 +1,14 @@ --- name: detail_page kind: function -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: pure signature: "detailPage(props: DetailPageProps): ReactElement" description: "Genera una página de detalle de entidad con header (avatar, badge, back), grid de campos, tabs con contadores y timeline de actividad." tags: [detail, page, entity, timeline, factory, composition, ui] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/dialog.md b/frontend/functions/ui/dialog.md index f4cf5991..0a128601 100644 --- a/frontend/functions/ui/dialog.md +++ b/frontend/functions/ui/dialog.md @@ -1,14 +1,14 @@ --- name: dialog kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "Dialog(props: DialogRootProps): JSX.Element" description: "Diálogo modal accesible con overlay blur, animaciones, close button y sistema de slots (header, footer, title, description)." tags: [dialog, modal, overlay, component, ui, interactive] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/form_field.md b/frontend/functions/ui/form_field.md index 81035466..ceb8a94c 100644 --- a/frontend/functions/ui/form_field.md +++ b/frontend/functions/ui/form_field.md @@ -1,14 +1,14 @@ --- name: form_field kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "FormField(props: FormFieldProps): JSX.Element" description: "Wrapper de campo de formulario con label, helper text, error y ARIA automáticos. Inyecta id y aria-describedby a hijos." tags: [form, field, label, error, component, ui, accessibility] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/input.md b/frontend/functions/ui/input.md index 10dbe0f9..c3405c9e 100644 --- a/frontend/functions/ui/input.md +++ b/frontend/functions/ui/input.md @@ -8,7 +8,7 @@ purity: impure signature: "Input(props: InputHTMLAttributes): JSX.Element" description: "Campo de entrada accesible con soporte para iconos, grupos, validación ARIA y estados disabled/invalid." tags: [input, form, component, ui, interactive] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/kpi_card.md b/frontend/functions/ui/kpi_card.md index 9b8a37b1..bea318e7 100644 --- a/frontend/functions/ui/kpi_card.md +++ b/frontend/functions/ui/kpi_card.md @@ -1,14 +1,14 @@ --- name: kpi_card kind: component -lang: typescript +lang: ts domain: ui version: "2.0.0" purity: impure signature: "KPICard(props: KPICardProps): JSX.Element" description: "Card de KPI con label, valor+unidad, delta descriptivo con color semántico, icono, slot de chart inline y action. 3 tamaños." tags: [kpi, card, metrics, dashboard, component, ui, sparkline] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false @@ -63,7 +63,7 @@ source_file: "frontend/src/components/ui/kpi-card.tsx" ## Ejemplo ```tsx -import { KPICard, Sparkline } from '@anthropic/frontend-lib' +import { KPICard, Sparkline } from '@fn_library' {/* Básico */} diff --git a/frontend/functions/ui/label.md b/frontend/functions/ui/label.md index 73b31c7c..069310b4 100644 --- a/frontend/functions/ui/label.md +++ b/frontend/functions/ui/label.md @@ -8,7 +8,7 @@ purity: impure signature: "Label(props: LabelHTMLAttributes): JSX.Element" description: "Etiqueta de formulario accesible con soporte para estados disabled y peer-disabled." tags: [label, form, component, ui] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/line_chart.md b/frontend/functions/ui/line_chart.md index d71e6923..84b16756 100644 --- a/frontend/functions/ui/line_chart.md +++ b/frontend/functions/ui/line_chart.md @@ -1,15 +1,15 @@ --- name: line_chart kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "LineChart(props: LineChartProps): JSX.Element" description: "Gráfico de líneas Recharts con multi-series, 5 tipos de curva, zoom brush, líneas de referencia, tooltips temáticos." tags: [chart, line, visualization, recharts, component, ui] -uses_functions: [cn_typescript_core, chart_container_typescript_ui, get_series_color_typescript_core] -uses_types: [ChartSeries_typescript_ui] +uses_functions: [cn_ts_core, chart_container_ts_ui, get_series_color_ts_core] +uses_types: [ChartSeries_ts_ui] returns: [] returns_optional: false error_type: "" diff --git a/frontend/functions/ui/page_header.md b/frontend/functions/ui/page_header.md index 5036587f..69ff92cc 100644 --- a/frontend/functions/ui/page_header.md +++ b/frontend/functions/ui/page_header.md @@ -1,14 +1,14 @@ --- name: page_header kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "PageHeader(props: PageHeaderProps): JSX.Element" description: "Cabecera de página con título, subtítulo, acciones, back button, tabs integrados, badge y modo sticky. Incluye SimplePageHeader." tags: [header, page, layout, navigation, component, ui] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/pie_chart.md b/frontend/functions/ui/pie_chart.md index 758ebba8..971842ae 100644 --- a/frontend/functions/ui/pie_chart.md +++ b/frontend/functions/ui/pie_chart.md @@ -1,14 +1,14 @@ --- name: pie_chart kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "PieChart(props: PieChartProps): JSX.Element" description: "Gráfico de torta/dona Recharts con Cell por segmento, colores automáticos, labels con porcentaje, Legend y Tooltip temático. Soporte donut con innerRadius configurable." tags: [chart, pie, donut, visualization, recharts, component, ui, dashboard] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/progress_bar.md b/frontend/functions/ui/progress_bar.md index ac33616f..2859b6ab 100644 --- a/frontend/functions/ui/progress_bar.md +++ b/frontend/functions/ui/progress_bar.md @@ -1,14 +1,14 @@ --- name: progress_bar kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "ProgressBar(props: ProgressBarProps): JSX.Element" description: "Barra de progreso con variantes de color y tamaño, buffer, animación, modo indeterminado y display de valor." tags: [progress, loading, component, ui, feedback] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/select.md b/frontend/functions/ui/select.md index 2fbd3478..5592f2bc 100644 --- a/frontend/functions/ui/select.md +++ b/frontend/functions/ui/select.md @@ -1,14 +1,14 @@ --- name: select kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "Select(props: SelectRootProps): JSX.Element" description: "Select genérico accesible con grupos, separadores y animaciones. Base-UI primitive con posicionamiento automático." tags: [select, form, dropdown, component, ui, interactive] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/settings_page.md b/frontend/functions/ui/settings_page.md index 11d29677..8e03cf8b 100644 --- a/frontend/functions/ui/settings_page.md +++ b/frontend/functions/ui/settings_page.md @@ -1,14 +1,14 @@ --- name: settings_page kind: function -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: pure signature: "settingsPage(props: SettingsPageProps): ReactElement" description: "Genera una página de configuración con navegación lateral, secciones y campos de formulario (text, number, toggle, select, textarea)." tags: [settings, page, form, sections, factory, composition, ui] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/skeleton.md b/frontend/functions/ui/skeleton.md index bdaac90e..3b46e167 100644 --- a/frontend/functions/ui/skeleton.md +++ b/frontend/functions/ui/skeleton.md @@ -1,14 +1,14 @@ --- name: skeleton kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "Skeleton(props: HTMLAttributes): JSX.Element" description: "Sistema de loading skeletons: base, text, card, avatar, button, table. Variantes preconfiguradas para estados de carga." tags: [skeleton, loading, placeholder, component, ui] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/sparkline.md b/frontend/functions/ui/sparkline.md index a86fd23f..d39048bd 100644 --- a/frontend/functions/ui/sparkline.md +++ b/frontend/functions/ui/sparkline.md @@ -1,14 +1,14 @@ --- name: sparkline kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "Sparkline(props: SparklineProps): JSX.Element" description: "Mini gráfico inline SVG puro (sin Recharts) con variantes line, area y bar. Para KPI cards y tablas." tags: [sparkline, chart, inline, svg, component, ui, visualization] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/tabs.md b/frontend/functions/ui/tabs.md index 716c72e1..2ae1fa10 100644 --- a/frontend/functions/ui/tabs.md +++ b/frontend/functions/ui/tabs.md @@ -1,14 +1,14 @@ --- name: tabs kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "Tabs(props: TabsRootProps): JSX.Element" description: "Sistema de tabs con orientación horizontal/vertical, variantes default y line, y soporte para iconos. Base-UI primitive." tags: [tabs, navigation, component, ui, interactive] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/theme_provider.md b/frontend/functions/ui/theme_provider.md index 6cbc7689..efe7d53b 100644 --- a/frontend/functions/ui/theme_provider.md +++ b/frontend/functions/ui/theme_provider.md @@ -1,15 +1,15 @@ --- name: theme_provider kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "ThemeProvider(props: { children: ReactNode; themes: Record; defaultTheme?: string }): JSX.Element" description: "Provider de tema React con context, persistencia en localStorage, detección de preferencia del sistema y hook useTheme." tags: [theme, provider, context, hook, component, ui] -uses_functions: [apply_theme_typescript_ui] -uses_types: [ThemeConfig_typescript_ui] +uses_functions: [apply_theme_ts_ui] +uses_types: [ThemeConfig_ts_ui] returns: [] returns_optional: false error_type: "" diff --git a/frontend/functions/ui/tooltip.md b/frontend/functions/ui/tooltip.md index d0377fd7..576199a6 100644 --- a/frontend/functions/ui/tooltip.md +++ b/frontend/functions/ui/tooltip.md @@ -1,14 +1,14 @@ --- name: tooltip kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "Tooltip(props: TooltipRootProps): JSX.Element" description: "Tooltip accesible con animaciones, posicionamiento automático y arrow. Base-UI primitive con delay configurable." tags: [tooltip, overlay, component, ui, help] -uses_functions: [cn_typescript_core] +uses_functions: [cn_ts_core] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/use_animated_canvas.md b/frontend/functions/ui/use_animated_canvas.md index 106c5b89..904f7a86 100644 --- a/frontend/functions/ui/use_animated_canvas.md +++ b/frontend/functions/ui/use_animated_canvas.md @@ -1,7 +1,7 @@ --- name: use_animated_canvas kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure diff --git a/frontend/functions/ui/use_wails_event.md b/frontend/functions/ui/use_wails_event.md index 111689bd..fa04706b 100644 --- a/frontend/functions/ui/use_wails_event.md +++ b/frontend/functions/ui/use_wails_event.md @@ -1,7 +1,7 @@ --- name: use_wails_event kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure diff --git a/frontend/functions/ui/use_wails_mutation.md b/frontend/functions/ui/use_wails_mutation.md index a86b62cd..82eb4463 100644 --- a/frontend/functions/ui/use_wails_mutation.md +++ b/frontend/functions/ui/use_wails_mutation.md @@ -1,15 +1,15 @@ --- name: use_wails_mutation kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "useWailsMutation(opts: UseWailsMutationOptions): UseWailsMutationResult" description: "Hook para escrituras IPC Wails con optimistic updates, invalidación automática de queries, retry y callbacks completos." tags: [wails, mutation, hook, ipc, optimistic, component, ui] -uses_functions: [wails_cache_typescript_core, wails_provider_typescript_ui] -uses_types: [WailsIPC_typescript_ui] +uses_functions: [wails_cache_ts_core, wails_provider_ts_ui] +uses_types: [WailsIPC_ts_ui] returns: [] returns_optional: false error_type: "" diff --git a/frontend/functions/ui/use_wails_query.md b/frontend/functions/ui/use_wails_query.md index aa6336d3..116f98c7 100644 --- a/frontend/functions/ui/use_wails_query.md +++ b/frontend/functions/ui/use_wails_query.md @@ -1,15 +1,15 @@ --- name: use_wails_query kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "useWailsQuery(opts: UseWailsQueryOptions): UseWailsQueryResult" description: "Hook React Query-like sobre IPC Wails. Cache automático, refetch por intervalo/foco, retry con backoff, invalidación." tags: [wails, query, hook, ipc, cache, component, ui] -uses_functions: [wails_cache_typescript_core, wails_provider_typescript_ui] -uses_types: [WailsIPC_typescript_ui] +uses_functions: [wails_cache_ts_core, wails_provider_ts_ui] +uses_types: [WailsIPC_ts_ui] returns: [] returns_optional: false error_type: "" diff --git a/frontend/functions/ui/use_wails_stream.md b/frontend/functions/ui/use_wails_stream.md index c347d4f8..2556c333 100644 --- a/frontend/functions/ui/use_wails_stream.md +++ b/frontend/functions/ui/use_wails_stream.md @@ -1,14 +1,14 @@ --- name: use_wails_stream kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "useWailsStream(opts: UseWailsStreamOptions): UseWailsStreamResult" description: "Hook para streaming de datos Go→TS con buffer configurable, auto-complete, transform y control start/stop. Incluye useWailsLogs." tags: [wails, stream, hook, ipc, realtime, buffer, component, ui] -uses_functions: [use_wails_event_typescript_ui] +uses_functions: [use_wails_event_ts_ui] uses_types: [] returns: [] returns_optional: false diff --git a/frontend/functions/ui/wails_provider.md b/frontend/functions/ui/wails_provider.md index 92147d6d..eee2b31d 100644 --- a/frontend/functions/ui/wails_provider.md +++ b/frontend/functions/ui/wails_provider.md @@ -1,15 +1,15 @@ --- name: wails_provider kind: component -lang: typescript +lang: ts domain: ui version: "1.0.0" purity: impure signature: "WailsProvider(props: { children: ReactNode; cache?: WailsCache; defaultQueryOptions?: QueryOptions }): JSX.Element" description: "Provider React para IPC Wails con cache context, opciones default y fallback a singleton. Exporta useWailsContext y useWailsCache." tags: [wails, provider, context, ipc, component, ui] -uses_functions: [wails_cache_typescript_core] -uses_types: [WailsIPC_typescript_ui] +uses_functions: [wails_cache_ts_core] +uses_types: [WailsIPC_ts_ui] returns: [] returns_optional: false error_type: "" diff --git a/frontend/types/core/component_variants.md b/frontend/types/core/component_variants.md index 30f321e1..05e40e17 100644 --- a/frontend/types/core/component_variants.md +++ b/frontend/types/core/component_variants.md @@ -1,6 +1,6 @@ --- name: ComponentVariants -lang: typescript +lang: ts domain: core version: "1.0.0" algebraic: product diff --git a/frontend/types/ui/chart_series.md b/frontend/types/ui/chart_series.md index a7b27d56..f89721df 100644 --- a/frontend/types/ui/chart_series.md +++ b/frontend/types/ui/chart_series.md @@ -1,6 +1,6 @@ --- name: ChartSeries -lang: typescript +lang: ts domain: ui version: "1.0.0" algebraic: product diff --git a/frontend/types/ui/theme_config.md b/frontend/types/ui/theme_config.md index 4bcf9e03..f47c2b4d 100644 --- a/frontend/types/ui/theme_config.md +++ b/frontend/types/ui/theme_config.md @@ -1,6 +1,6 @@ --- name: ThemeConfig -lang: typescript +lang: ts domain: ui version: "1.0.0" algebraic: product diff --git a/frontend/types/ui/wails_ipc.md b/frontend/types/ui/wails_ipc.md index 87490263..e7e15319 100644 --- a/frontend/types/ui/wails_ipc.md +++ b/frontend/types/ui/wails_ipc.md @@ -1,6 +1,6 @@ --- name: WailsIPC -lang: typescript +lang: ts domain: ui version: "1.0.0" algebraic: product diff --git a/functions/browser/cdp_click.md b/functions/browser/cdp_click.md index 212795ec..7c053b00 100644 --- a/functions/browser/cdp_click.md +++ b/functions/browser/cdp_click.md @@ -17,7 +17,7 @@ imports: [fmt, strconv, strings] tested: false tests: [] test_file_path: "" -file_path: "functions/infra/cdp_click.go" +file_path: "functions/browser/cdp_click.go" --- ## Ejemplo diff --git a/functions/browser/cdp_close.md b/functions/browser/cdp_close.md index 131f6543..139a0c2f 100644 --- a/functions/browser/cdp_close.md +++ b/functions/browser/cdp_close.md @@ -17,7 +17,7 @@ imports: [fmt, os] tested: false tests: [] test_file_path: "" -file_path: "functions/infra/cdp_close.go" +file_path: "functions/browser/cdp_close.go" --- ## Ejemplo diff --git a/functions/browser/cdp_connect.md b/functions/browser/cdp_connect.md index a8776681..b4554f8f 100644 --- a/functions/browser/cdp_connect.md +++ b/functions/browser/cdp_connect.md @@ -16,8 +16,8 @@ error_type: "error_go_core" imports: [fmt, net, net/url, strings] tested: true tests: ["TestChromeLaunchAndConnect"] -test_file_path: "functions/infra/chrome_launch_test.go" -file_path: "functions/infra/cdp_connect.go" +test_file_path: "functions/browser/chrome_launch_test.go" +file_path: "functions/browser/cdp_connect.go" --- ## Ejemplo diff --git a/functions/browser/cdp_evaluate.md b/functions/browser/cdp_evaluate.md index 095ea70f..6b6e7ba9 100644 --- a/functions/browser/cdp_evaluate.md +++ b/functions/browser/cdp_evaluate.md @@ -16,8 +16,8 @@ error_type: "error_go_core" imports: [fmt] tested: true tests: ["TestCdpEvaluate"] -test_file_path: "functions/infra/chrome_launch_test.go" -file_path: "functions/infra/cdp_evaluate.go" +test_file_path: "functions/browser/chrome_launch_test.go" +file_path: "functions/browser/cdp_evaluate.go" --- ## Ejemplo diff --git a/functions/browser/cdp_get_html.md b/functions/browser/cdp_get_html.md index ad272409..956e9e06 100644 --- a/functions/browser/cdp_get_html.md +++ b/functions/browser/cdp_get_html.md @@ -16,8 +16,8 @@ error_type: "error_go_core" imports: [fmt] tested: true tests: ["TestCdpGetHTML"] -test_file_path: "functions/infra/chrome_launch_test.go" -file_path: "functions/infra/cdp_get_html.go" +test_file_path: "functions/browser/chrome_launch_test.go" +file_path: "functions/browser/cdp_get_html.go" --- ## Ejemplo diff --git a/functions/browser/cdp_navigate.md b/functions/browser/cdp_navigate.md index bf1a3041..d31056ef 100644 --- a/functions/browser/cdp_navigate.md +++ b/functions/browser/cdp_navigate.md @@ -16,8 +16,8 @@ error_type: "error_go_core" imports: [fmt] tested: true tests: ["TestChromeLaunchAndConnect"] -test_file_path: "functions/infra/chrome_launch_test.go" -file_path: "functions/infra/cdp_navigate.go" +test_file_path: "functions/browser/chrome_launch_test.go" +file_path: "functions/browser/cdp_navigate.go" --- ## Ejemplo diff --git a/functions/browser/cdp_screenshot.md b/functions/browser/cdp_screenshot.md index f08d505a..f9c5e09e 100644 --- a/functions/browser/cdp_screenshot.md +++ b/functions/browser/cdp_screenshot.md @@ -16,8 +16,8 @@ error_type: "error_go_core" imports: [encoding/base64, fmt, os, path/filepath] tested: true tests: ["TestCdpScreenshot"] -test_file_path: "functions/infra/chrome_launch_test.go" -file_path: "functions/infra/cdp_screenshot.go" +test_file_path: "functions/browser/chrome_launch_test.go" +file_path: "functions/browser/cdp_screenshot.go" --- ## Ejemplo diff --git a/functions/browser/cdp_type_text.md b/functions/browser/cdp_type_text.md index ee86f404..0e86afa9 100644 --- a/functions/browser/cdp_type_text.md +++ b/functions/browser/cdp_type_text.md @@ -17,7 +17,7 @@ imports: [fmt, time] tested: false tests: [] test_file_path: "" -file_path: "functions/infra/cdp_type_text.go" +file_path: "functions/browser/cdp_type_text.go" --- ## Ejemplo diff --git a/functions/browser/cdp_wait_element.md b/functions/browser/cdp_wait_element.md index 1b61c116..0c73c06b 100644 --- a/functions/browser/cdp_wait_element.md +++ b/functions/browser/cdp_wait_element.md @@ -17,7 +17,7 @@ imports: [fmt, time] tested: false tests: [] test_file_path: "" -file_path: "functions/infra/cdp_wait_element.go" +file_path: "functions/browser/cdp_wait_element.go" --- ## Ejemplo diff --git a/functions/browser/cdp_wait_load.md b/functions/browser/cdp_wait_load.md index 0ae3e1ba..d7e96686 100644 --- a/functions/browser/cdp_wait_load.md +++ b/functions/browser/cdp_wait_load.md @@ -17,7 +17,7 @@ imports: [fmt, time] tested: false tests: [] test_file_path: "" -file_path: "functions/infra/cdp_wait_load.go" +file_path: "functions/browser/cdp_wait_load.go" --- ## Ejemplo diff --git a/functions/browser/chrome_launch.md b/functions/browser/chrome_launch.md index 044b5ddd..9bfc40eb 100644 --- a/functions/browser/chrome_launch.md +++ b/functions/browser/chrome_launch.md @@ -16,8 +16,8 @@ error_type: "error_go_core" imports: [fmt, net, os, os/exec, time] tested: true tests: ["TestFindChrome", "TestChromeLaunchAndConnect"] -test_file_path: "functions/infra/chrome_launch_test.go" -file_path: "functions/infra/chrome_launch.go" +test_file_path: "functions/browser/chrome_launch_test.go" +file_path: "functions/browser/chrome_launch.go" --- ## Ejemplo From 619a56c56711f16386a05cffc1dfaf4c1cc29aeb Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Fri, 3 Apr 2026 03:23:25 +0200 Subject: [PATCH 2/7] feat: warnings en indexer para file_path inexistentes en disco Valida post-insert que file_path y test_file_path de funciones y tipos apunten a archivos reales. Reporta warnings sin bloquear el indexado. Co-Authored-By: Claude Opus 4.6 (1M context) --- cmd/fn/main.go | 3 +++ registry/indexer.go | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/cmd/fn/main.go b/cmd/fn/main.go index 7a914f6f..63dc6346 100644 --- a/cmd/fn/main.go +++ b/cmd/fn/main.go @@ -127,6 +127,9 @@ func cmdIndex() { for _, e := range result.ValidationErrors { fmt.Fprintf(os.Stderr, " INVALID: %s\n", e) } + for _, w := range result.Warnings { + fmt.Fprintf(os.Stderr, " WARN: %s\n", w) + } for _, e := range result.Errors { fmt.Fprintf(os.Stderr, " ERROR: %s\n", e) } diff --git a/registry/indexer.go b/registry/indexer.go index fe7d3662..12bddafc 100644 --- a/registry/indexer.go +++ b/registry/indexer.go @@ -15,6 +15,7 @@ type IndexResult struct { Apps int Analysis int ValidationErrors []string + Warnings []string Errors []string } @@ -202,6 +203,30 @@ func Index(db *DB, root string) (*IndexResult, error) { result.Analysis++ } + // Post-insert: warn about file_path entries that don't exist on disk + for _, f := range functions { + if f.FilePath != "" { + abs := filepath.Join(root, f.FilePath) + if _, err := os.Stat(abs); err != nil { + result.Warnings = append(result.Warnings, fmt.Sprintf("%s: file_path %q not found", f.ID, f.FilePath)) + } + } + if f.TestFilePath != "" { + abs := filepath.Join(root, f.TestFilePath) + if _, err := os.Stat(abs); err != nil { + result.Warnings = append(result.Warnings, fmt.Sprintf("%s: test_file_path %q not found", f.ID, f.TestFilePath)) + } + } + } + for _, t := range types { + if t.FilePath != "" { + abs := filepath.Join(root, t.FilePath) + if _, err := os.Stat(abs); err != nil { + result.Warnings = append(result.Warnings, fmt.Sprintf("%s: file_path %q not found", t.ID, t.FilePath)) + } + } + } + return result, nil } From 35bcb633003c5f670aeac08843bfdacfeafaad60 Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Fri, 3 Apr 2026 03:23:32 +0200 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20nuevos=20componentes=20UI=20?= =?UTF-8?q?=E2=80=94=20accordion,=20avatar,=20breadcrumb,=20checkbox,=20co?= =?UTF-8?q?mmand,=20dropdown,=20pagination,=20popover,=20radio,=20sheet,?= =?UTF-8?q?=20select,=20switch,=20textarea,=20toast?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Componentes React accesibles basados en Radix UI con soporte de temas via CSS variables. Incluye barrel export en index.ts. Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/functions/ui/accordion.md | 53 ++++++ frontend/functions/ui/accordion.tsx | 81 ++++++++++ frontend/functions/ui/avatar.md | 70 ++++++++ frontend/functions/ui/avatar.tsx | 69 ++++++++ frontend/functions/ui/breadcrumb.md | 71 +++++++++ frontend/functions/ui/breadcrumb.tsx | 97 +++++++++++ frontend/functions/ui/checkbox.md | 72 +++++++++ frontend/functions/ui/checkbox.tsx | 79 +++++++++ frontend/functions/ui/command.md | 81 ++++++++++ frontend/functions/ui/command.tsx | 204 ++++++++++++++++++++++++ frontend/functions/ui/dropdown_menu.md | 73 +++++++++ frontend/functions/ui/dropdown_menu.tsx | 201 +++++++++++++++++++++++ frontend/functions/ui/index.ts | 121 ++++++++++++++ frontend/functions/ui/pagination.md | 61 +++++++ frontend/functions/ui/pagination.tsx | 100 ++++++++++++ frontend/functions/ui/popover.md | 65 ++++++++ frontend/functions/ui/popover.tsx | 57 +++++++ frontend/functions/ui/radio_group.md | 60 +++++++ frontend/functions/ui/radio_group.tsx | 61 +++++++ frontend/functions/ui/sheet.md | 71 +++++++++ frontend/functions/ui/sheet.tsx | 118 ++++++++++++++ frontend/functions/ui/simple_select.md | 82 ++++++++++ frontend/functions/ui/simple_select.tsx | 84 ++++++++++ frontend/functions/ui/switch_toggle.md | 67 ++++++++ frontend/functions/ui/switch_toggle.tsx | 66 ++++++++ frontend/functions/ui/textarea.md | 66 ++++++++ frontend/functions/ui/textarea.tsx | 47 ++++++ frontend/functions/ui/toast.md | 90 +++++++++++ frontend/functions/ui/toast.tsx | 170 ++++++++++++++++++++ 29 files changed, 2537 insertions(+) create mode 100644 frontend/functions/ui/accordion.md create mode 100644 frontend/functions/ui/accordion.tsx create mode 100644 frontend/functions/ui/avatar.md create mode 100644 frontend/functions/ui/avatar.tsx create mode 100644 frontend/functions/ui/breadcrumb.md create mode 100644 frontend/functions/ui/breadcrumb.tsx create mode 100644 frontend/functions/ui/checkbox.md create mode 100644 frontend/functions/ui/checkbox.tsx create mode 100644 frontend/functions/ui/command.md create mode 100644 frontend/functions/ui/command.tsx create mode 100644 frontend/functions/ui/dropdown_menu.md create mode 100644 frontend/functions/ui/dropdown_menu.tsx create mode 100644 frontend/functions/ui/index.ts create mode 100644 frontend/functions/ui/pagination.md create mode 100644 frontend/functions/ui/pagination.tsx create mode 100644 frontend/functions/ui/popover.md create mode 100644 frontend/functions/ui/popover.tsx create mode 100644 frontend/functions/ui/radio_group.md create mode 100644 frontend/functions/ui/radio_group.tsx create mode 100644 frontend/functions/ui/sheet.md create mode 100644 frontend/functions/ui/sheet.tsx create mode 100644 frontend/functions/ui/simple_select.md create mode 100644 frontend/functions/ui/simple_select.tsx create mode 100644 frontend/functions/ui/switch_toggle.md create mode 100644 frontend/functions/ui/switch_toggle.tsx create mode 100644 frontend/functions/ui/textarea.md create mode 100644 frontend/functions/ui/textarea.tsx create mode 100644 frontend/functions/ui/toast.md create mode 100644 frontend/functions/ui/toast.tsx diff --git a/frontend/functions/ui/accordion.md b/frontend/functions/ui/accordion.md new file mode 100644 index 00000000..f66db4cb --- /dev/null +++ b/frontend/functions/ui/accordion.md @@ -0,0 +1,53 @@ +--- +name: accordion +kind: component +lang: ts +domain: ui +version: "1.0.0" +purity: impure +signature: "Accordion(props: AccordionProps): JSX.Element" +description: "Secciones colapsables con animaciones. Base-UI Collapsible primitive. Composable: AccordionItem + AccordionTrigger + AccordionContent." +tags: [accordion, collapsible, component, ui, interactive, base-ui] +uses_functions: [cn_ts_core] +uses_types: [] +returns: [] +returns_optional: false +error_type: "" +imports: ["@base-ui/react/collapsible", "lucide-react"] +tested: false +tests: [] +test_file_path: "" +file_path: "frontend/functions/ui/accordion.tsx" +props: + - name: className + type: "string" + required: false + description: "Clases CSS adicionales para el contenedor" +emits: [] +has_state: false +framework: react +variant: [] +--- + +## Ejemplo + +```tsx + + + Seccion 1 + + Contenido de la primera seccion. + + + + Seccion 2 + + Contenido de la segunda seccion. + + + +``` + +## Notas + +Cada AccordionItem es un Collapsible independiente — permite multiples items abiertos simultaneamente. Para exclusividad (solo uno abierto), manejar el estado externamente. El chevron rota 180 grados con [data-open]. Exports: Accordion, AccordionItem, AccordionTrigger, AccordionContent. diff --git a/frontend/functions/ui/accordion.tsx b/frontend/functions/ui/accordion.tsx new file mode 100644 index 00000000..c7acabcf --- /dev/null +++ b/frontend/functions/ui/accordion.tsx @@ -0,0 +1,81 @@ +import * as React from "react" +import { Collapsible as CollapsiblePrimitive } from "@base-ui/react/collapsible" +import { ChevronDownIcon } from "lucide-react" +import { cn } from "../core/cn" + +interface AccordionItem { + value: string + trigger: React.ReactNode + content: React.ReactNode + disabled?: boolean +} + +interface AccordionProps { + items?: AccordionItem[] + type?: "single" | "multiple" + defaultValue?: string | string[] + className?: string + itemClassName?: string + children?: React.ReactNode +} + +function Accordion({ className, children, ...props }: React.ComponentProps<"div"> & AccordionProps) { + return ( +
+ {children} +
+ ) +} + +interface AccordionItemProps extends CollapsiblePrimitive.Root.Props { + className?: string +} + +function AccordionItem({ className, ...props }: AccordionItemProps) { + return ( + + ) +} + +function AccordionTrigger({ className, children, ...props }: CollapsiblePrimitive.Trigger.Props) { + return ( + svg]:rotate-180", + className + )} + {...props} + > + {children} + + + ) +} + +function AccordionContent({ className, children, ...props }: CollapsiblePrimitive.Panel.Props) { + return ( + +
{children}
+
+ ) +} + +export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } +export type { AccordionItem as AccordionItemData, AccordionProps } diff --git a/frontend/functions/ui/avatar.md b/frontend/functions/ui/avatar.md new file mode 100644 index 00000000..c153f024 --- /dev/null +++ b/frontend/functions/ui/avatar.md @@ -0,0 +1,70 @@ +--- +name: avatar +kind: component +lang: ts +domain: ui +version: "1.0.0" +purity: impure +signature: "Avatar(props: AvatarProps): JSX.Element" +description: "Imagen de usuario circular con fallback a iniciales generadas automaticamente. 5 tamaños via CVA." +tags: [avatar, user, image, component, ui, cva] +uses_functions: [cn_ts_core] +uses_types: [] +returns: [] +returns_optional: false +error_type: "" +imports: ["class-variance-authority"] +tested: false +tests: [] +test_file_path: "" +file_path: "frontend/functions/ui/avatar.tsx" +props: + - name: src + type: "string" + required: false + description: "URL de la imagen" + - name: alt + type: "string" + required: false + description: "Texto alternativo de la imagen" + - name: fallback + type: "string" + required: false + description: "Nombre completo del que extraer iniciales (ej: 'Juan Perez' -> 'JP')" + - name: initials + type: "string" + required: false + description: "Iniciales explicitas para el fallback (sobrescribe fallback)" + - name: size + type: "'xs' | 'sm' | 'md' | 'lg' | 'xl'" + required: false + description: "Tamanio del avatar (default: md)" + - name: className + type: "string" + required: false + description: "Clases CSS adicionales" +emits: [] +has_state: true +framework: react +variant: [xs, sm, md, lg, xl] +--- + +## Ejemplo + +```tsx +// Con imagen + + +// Con fallback a iniciales + + +// Iniciales explicitas + + +// Maneja error de imagen automaticamente + +``` + +## Notas + +Usa estado interno para manejar errores de carga de imagen (onError). La funcion getInitials extrae 2 iniciales del nombre completo (primera y ultima palabra). Si solo hay una palabra, toma los 2 primeros caracteres. Usa forwardRef para compatibilidad con wrappers. diff --git a/frontend/functions/ui/avatar.tsx b/frontend/functions/ui/avatar.tsx new file mode 100644 index 00000000..012bdae3 --- /dev/null +++ b/frontend/functions/ui/avatar.tsx @@ -0,0 +1,69 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" +import { cn } from "../core/cn" + +const avatarVariants = cva( + "relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted font-medium text-muted-foreground select-none", + { + variants: { + size: { + xs: "size-6 text-xs", + sm: "size-8 text-sm", + md: "size-10 text-base", + lg: "size-12 text-lg", + xl: "size-16 text-xl", + }, + }, + defaultVariants: { size: "md" }, + } +) + +interface AvatarProps + extends React.ComponentPropsWithoutRef<"span">, + VariantProps { + src?: string + alt?: string + fallback?: string + initials?: string +} + +function getInitials(name?: string): string { + if (!name) return "?" + const parts = name.trim().split(/\s+/) + if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase() + return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase() +} + +const Avatar = React.forwardRef( + ({ className, size, src, alt, fallback, initials, ...props }, ref) => { + const [imgError, setImgError] = React.useState(false) + const showImage = src && !imgError + const displayInitials = initials ?? getInitials(fallback ?? alt) + + return ( + + {showImage ? ( + {alt setImgError(true)} + /> + ) : ( + + )} + + ) + } +) +Avatar.displayName = "Avatar" + +export { Avatar, avatarVariants } +export type { AvatarProps } diff --git a/frontend/functions/ui/breadcrumb.md b/frontend/functions/ui/breadcrumb.md new file mode 100644 index 00000000..c2d788c8 --- /dev/null +++ b/frontend/functions/ui/breadcrumb.md @@ -0,0 +1,71 @@ +--- +name: breadcrumb +kind: component +lang: ts +domain: ui +version: "1.0.0" +purity: impure +signature: "Breadcrumb(props: BreadcrumbProps): JSX.Element" +description: "Navegacion jerarquica con separadores, elipsis para paths largos y soporte para router links via asChild." +tags: [breadcrumb, navigation, component, ui] +uses_functions: [cn_ts_core] +uses_types: [] +returns: [] +returns_optional: false +error_type: "" +imports: ["lucide-react"] +tested: false +tests: [] +test_file_path: "" +file_path: "frontend/functions/ui/breadcrumb.tsx" +props: + - name: className + type: "string" + required: false + description: "Clases CSS adicionales" +emits: [] +has_state: false +framework: react +variant: [] +--- + +## Ejemplo + +```tsx + + + + Inicio + + + + Documentacion + + + + Componentes + + + + +// Con elipsis para paths largos + + + + Inicio + + + + + + + + Pagina actual + + + +``` + +## Notas + +Exports: Breadcrumb (nav), BreadcrumbList (ol), BreadcrumbItem (li), BreadcrumbLink (a con asChild), BreadcrumbPage (span aria-current=page), BreadcrumbSeparator (ChevronRight por defecto, customizable), BreadcrumbEllipsis (MoreHorizontal). BreadcrumbLink acepta asChild para usar con Link de React Router o Next.js. diff --git a/frontend/functions/ui/breadcrumb.tsx b/frontend/functions/ui/breadcrumb.tsx new file mode 100644 index 00000000..8cb47f23 --- /dev/null +++ b/frontend/functions/ui/breadcrumb.tsx @@ -0,0 +1,97 @@ +import * as React from "react" +import { ChevronRightIcon, MoreHorizontalIcon } from "lucide-react" +import { cn } from "../core/cn" + +function Breadcrumb({ ...props }: React.ComponentPropsWithoutRef<"nav">) { + return