@neural-ui/core 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -88
- package/accordion/package.json +4 -0
- package/alert/package.json +4 -0
- package/autocomplete/package.json +4 -0
- package/avatar/package.json +4 -0
- package/badge/package.json +4 -0
- package/block-ui/package.json +4 -0
- package/breadcrumb/package.json +4 -0
- package/button/package.json +4 -0
- package/card/package.json +4 -0
- package/chart/package.json +4 -0
- package/checkbox/package.json +4 -0
- package/chip/package.json +4 -0
- package/code-block/package.json +4 -0
- package/color-picker/package.json +4 -0
- package/command-palette/package.json +4 -0
- package/confirm-dialog/package.json +4 -0
- package/context-menu/package.json +4 -0
- package/dashboard-grid/package.json +4 -0
- package/date-input/package.json +4 -0
- package/divider/package.json +4 -0
- package/empty-state/package.json +4 -0
- package/fesm2022/neural-ui-core-accordion.mjs +162 -0
- package/fesm2022/neural-ui-core-accordion.mjs.map +1 -0
- package/fesm2022/neural-ui-core-alert.mjs +116 -0
- package/fesm2022/neural-ui-core-alert.mjs.map +1 -0
- package/fesm2022/neural-ui-core-autocomplete.mjs +332 -0
- package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -0
- package/fesm2022/neural-ui-core-avatar.mjs +109 -0
- package/fesm2022/neural-ui-core-avatar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-badge.mjs +54 -0
- package/fesm2022/neural-ui-core-badge.mjs.map +1 -0
- package/fesm2022/neural-ui-core-block-ui.mjs +95 -0
- package/fesm2022/neural-ui-core-block-ui.mjs.map +1 -0
- package/fesm2022/neural-ui-core-breadcrumb.mjs +84 -0
- package/fesm2022/neural-ui-core-breadcrumb.mjs.map +1 -0
- package/fesm2022/neural-ui-core-button.mjs +125 -0
- package/fesm2022/neural-ui-core-button.mjs.map +1 -0
- package/fesm2022/neural-ui-core-card.mjs +69 -0
- package/fesm2022/neural-ui-core-card.mjs.map +1 -0
- package/fesm2022/neural-ui-core-chart.mjs +287 -0
- package/fesm2022/neural-ui-core-chart.mjs.map +1 -0
- package/fesm2022/neural-ui-core-checkbox.mjs +138 -0
- package/fesm2022/neural-ui-core-checkbox.mjs.map +1 -0
- package/fesm2022/neural-ui-core-chip.mjs +130 -0
- package/fesm2022/neural-ui-core-chip.mjs.map +1 -0
- package/fesm2022/neural-ui-core-code-block.mjs +250 -0
- package/fesm2022/neural-ui-core-code-block.mjs.map +1 -0
- package/fesm2022/neural-ui-core-color-picker.mjs +435 -0
- package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -0
- package/fesm2022/neural-ui-core-command-palette.mjs +235 -0
- package/fesm2022/neural-ui-core-command-palette.mjs.map +1 -0
- package/fesm2022/neural-ui-core-confirm-dialog.mjs +118 -0
- package/fesm2022/neural-ui-core-confirm-dialog.mjs.map +1 -0
- package/fesm2022/neural-ui-core-context-menu.mjs +158 -0
- package/fesm2022/neural-ui-core-context-menu.mjs.map +1 -0
- package/fesm2022/neural-ui-core-dashboard-grid.mjs +144 -0
- package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -0
- package/fesm2022/neural-ui-core-date-input.mjs +1332 -0
- package/fesm2022/neural-ui-core-date-input.mjs.map +1 -0
- package/fesm2022/neural-ui-core-divider.mjs +54 -0
- package/fesm2022/neural-ui-core-divider.mjs.map +1 -0
- package/fesm2022/neural-ui-core-empty-state.mjs +84 -0
- package/fesm2022/neural-ui-core-empty-state.mjs.map +1 -0
- package/fesm2022/neural-ui-core-filter-bar.mjs +118 -0
- package/fesm2022/neural-ui-core-filter-bar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-icon.mjs +50 -0
- package/fesm2022/neural-ui-core-icon.mjs.map +1 -0
- package/fesm2022/neural-ui-core-image-viewer.mjs +309 -0
- package/fesm2022/neural-ui-core-image-viewer.mjs.map +1 -0
- package/fesm2022/neural-ui-core-input-otp.mjs +192 -0
- package/fesm2022/neural-ui-core-input-otp.mjs.map +1 -0
- package/fesm2022/neural-ui-core-input.mjs +320 -0
- package/fesm2022/neural-ui-core-input.mjs.map +1 -0
- package/fesm2022/neural-ui-core-knob.mjs +323 -0
- package/fesm2022/neural-ui-core-knob.mjs.map +1 -0
- package/fesm2022/neural-ui-core-meter-group.mjs +122 -0
- package/fesm2022/neural-ui-core-meter-group.mjs.map +1 -0
- package/fesm2022/neural-ui-core-modal.mjs +156 -0
- package/fesm2022/neural-ui-core-modal.mjs.map +1 -0
- package/fesm2022/neural-ui-core-multiselect.mjs +748 -0
- package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -0
- package/fesm2022/neural-ui-core-nav.mjs +952 -0
- package/fesm2022/neural-ui-core-nav.mjs.map +1 -0
- package/fesm2022/neural-ui-core-notification-center.mjs +264 -0
- package/fesm2022/neural-ui-core-notification-center.mjs.map +1 -0
- package/fesm2022/neural-ui-core-number-input.mjs +331 -0
- package/fesm2022/neural-ui-core-number-input.mjs.map +1 -0
- package/fesm2022/neural-ui-core-pagination.mjs +198 -0
- package/fesm2022/neural-ui-core-pagination.mjs.map +1 -0
- package/fesm2022/neural-ui-core-popover.mjs +207 -0
- package/fesm2022/neural-ui-core-popover.mjs.map +1 -0
- package/fesm2022/neural-ui-core-progress-bar.mjs +105 -0
- package/fesm2022/neural-ui-core-progress-bar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-radio.mjs +171 -0
- package/fesm2022/neural-ui-core-radio.mjs.map +1 -0
- package/fesm2022/neural-ui-core-rating.mjs +151 -0
- package/fesm2022/neural-ui-core-rating.mjs.map +1 -0
- package/fesm2022/neural-ui-core-select.mjs +638 -0
- package/fesm2022/neural-ui-core-select.mjs.map +1 -0
- package/fesm2022/neural-ui-core-sidebar.mjs +214 -0
- package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-skeleton.mjs +40 -0
- package/fesm2022/neural-ui-core-skeleton.mjs.map +1 -0
- package/fesm2022/neural-ui-core-slider.mjs +146 -0
- package/fesm2022/neural-ui-core-slider.mjs.map +1 -0
- package/fesm2022/neural-ui-core-spinner.mjs +113 -0
- package/fesm2022/neural-ui-core-spinner.mjs.map +1 -0
- package/fesm2022/neural-ui-core-split-button.mjs +252 -0
- package/fesm2022/neural-ui-core-split-button.mjs.map +1 -0
- package/fesm2022/neural-ui-core-splitter.mjs +174 -0
- package/fesm2022/neural-ui-core-splitter.mjs.map +1 -0
- package/fesm2022/neural-ui-core-stats-card.mjs +163 -0
- package/fesm2022/neural-ui-core-stats-card.mjs.map +1 -0
- package/fesm2022/neural-ui-core-stepper.mjs +204 -0
- package/fesm2022/neural-ui-core-stepper.mjs.map +1 -0
- package/fesm2022/neural-ui-core-switch.mjs +111 -0
- package/fesm2022/neural-ui-core-switch.mjs.map +1 -0
- package/fesm2022/neural-ui-core-table.mjs +1860 -0
- package/fesm2022/neural-ui-core-table.mjs.map +1 -0
- package/fesm2022/neural-ui-core-tabs.mjs +246 -0
- package/fesm2022/neural-ui-core-tabs.mjs.map +1 -0
- package/fesm2022/neural-ui-core-textarea.mjs +188 -0
- package/fesm2022/neural-ui-core-textarea.mjs.map +1 -0
- package/fesm2022/neural-ui-core-timeline.mjs +117 -0
- package/fesm2022/neural-ui-core-timeline.mjs.map +1 -0
- package/fesm2022/neural-ui-core-toast.mjs +171 -0
- package/fesm2022/neural-ui-core-toast.mjs.map +1 -0
- package/fesm2022/neural-ui-core-toggle-button-group.mjs +162 -0
- package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -0
- package/fesm2022/neural-ui-core-toolbar.mjs +67 -0
- package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-tooltip.mjs +151 -0
- package/fesm2022/neural-ui-core-tooltip.mjs.map +1 -0
- package/fesm2022/neural-ui-core-url-state.mjs +96 -0
- package/fesm2022/neural-ui-core-url-state.mjs.map +1 -0
- package/fesm2022/neural-ui-core-virtual-list.mjs +126 -0
- package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -0
- package/fesm2022/neural-ui-core.mjs +11 -8544
- package/fesm2022/neural-ui-core.mjs.map +1 -1
- package/filter-bar/package.json +4 -0
- package/icon/package.json +4 -0
- package/image-viewer/package.json +4 -0
- package/input/package.json +4 -0
- package/input-otp/package.json +4 -0
- package/knob/package.json +4 -0
- package/meter-group/package.json +4 -0
- package/modal/package.json +4 -0
- package/multiselect/package.json +4 -0
- package/nav/package.json +4 -0
- package/notification-center/package.json +4 -0
- package/number-input/package.json +4 -0
- package/package.json +252 -5
- package/pagination/package.json +4 -0
- package/popover/package.json +4 -0
- package/progress-bar/package.json +4 -0
- package/radio/package.json +4 -0
- package/rating/package.json +4 -0
- package/select/package.json +4 -0
- package/sidebar/package.json +4 -0
- package/skeleton/package.json +4 -0
- package/slider/package.json +4 -0
- package/spinner/package.json +4 -0
- package/split-button/package.json +4 -0
- package/splitter/package.json +4 -0
- package/stats-card/package.json +4 -0
- package/stepper/package.json +4 -0
- package/styles/_tokens.scss +209 -7
- package/styles.scss +1 -0
- package/switch/package.json +4 -0
- package/table/package.json +4 -0
- package/tabs/package.json +4 -0
- package/textarea/package.json +4 -0
- package/timeline/package.json +4 -0
- package/toast/package.json +4 -0
- package/toggle-button-group/package.json +4 -0
- package/toolbar/package.json +4 -0
- package/tooltip/package.json +4 -0
- package/types/neural-ui-core-accordion.d.ts +55 -0
- package/types/neural-ui-core-alert.d.ts +47 -0
- package/types/neural-ui-core-autocomplete.d.ts +69 -0
- package/types/neural-ui-core-avatar.d.ts +39 -0
- package/types/neural-ui-core-badge.d.ts +36 -0
- package/types/neural-ui-core-block-ui.d.ts +46 -0
- package/types/neural-ui-core-breadcrumb.d.ts +38 -0
- package/types/neural-ui-core-button.d.ts +55 -0
- package/types/neural-ui-core-card.d.ts +37 -0
- package/types/neural-ui-core-chart.d.ts +236 -0
- package/types/neural-ui-core-checkbox.d.ts +33 -0
- package/types/neural-ui-core-chip.d.ts +53 -0
- package/types/neural-ui-core-code-block.d.ts +55 -0
- package/types/neural-ui-core-color-picker.d.ts +55 -0
- package/types/neural-ui-core-command-palette.d.ts +56 -0
- package/types/neural-ui-core-confirm-dialog.d.ts +50 -0
- package/types/neural-ui-core-context-menu.d.ts +66 -0
- package/types/neural-ui-core-dashboard-grid.d.ts +41 -0
- package/types/neural-ui-core-date-input.d.ts +178 -0
- package/types/neural-ui-core-divider.d.ts +20 -0
- package/types/neural-ui-core-empty-state.d.ts +32 -0
- package/types/neural-ui-core-filter-bar.d.ts +49 -0
- package/types/neural-ui-core-icon.d.ts +33 -0
- package/types/neural-ui-core-image-viewer.d.ts +67 -0
- package/types/neural-ui-core-input-otp.d.ts +49 -0
- package/types/neural-ui-core-input.d.ts +86 -0
- package/types/neural-ui-core-knob.d.ts +68 -0
- package/types/neural-ui-core-meter-group.d.ts +52 -0
- package/types/neural-ui-core-modal.d.ts +54 -0
- package/types/neural-ui-core-multiselect.d.ts +129 -0
- package/types/neural-ui-core-nav.d.ts +69 -0
- package/types/neural-ui-core-notification-center.d.ts +60 -0
- package/types/neural-ui-core-number-input.d.ts +63 -0
- package/types/neural-ui-core-pagination.d.ts +30 -0
- package/types/neural-ui-core-popover.d.ts +73 -0
- package/types/neural-ui-core-progress-bar.d.ts +35 -0
- package/types/neural-ui-core-radio.d.ts +51 -0
- package/types/neural-ui-core-rating.d.ts +34 -0
- package/types/neural-ui-core-select.d.ts +161 -0
- package/types/neural-ui-core-sidebar.d.ts +57 -0
- package/types/neural-ui-core-skeleton.d.ts +22 -0
- package/types/neural-ui-core-slider.d.ts +42 -0
- package/types/neural-ui-core-spinner.d.ts +38 -0
- package/types/neural-ui-core-split-button.d.ts +65 -0
- package/types/neural-ui-core-splitter.d.ts +28 -0
- package/types/neural-ui-core-stats-card.d.ts +39 -0
- package/types/neural-ui-core-stepper.d.ts +51 -0
- package/types/neural-ui-core-switch.d.ts +34 -0
- package/types/neural-ui-core-table.d.ts +282 -0
- package/types/neural-ui-core-tabs.d.ts +76 -0
- package/types/neural-ui-core-textarea.d.ts +52 -0
- package/types/neural-ui-core-timeline.d.ts +33 -0
- package/types/neural-ui-core-toast.d.ts +70 -0
- package/types/neural-ui-core-toggle-button-group.d.ts +63 -0
- package/types/neural-ui-core-toolbar.d.ts +36 -0
- package/types/neural-ui-core-tooltip.d.ts +48 -0
- package/types/neural-ui-core-url-state.d.ts +58 -0
- package/types/neural-ui-core-virtual-list.d.ts +60 -0
- package/types/neural-ui-core.d.ts +5 -2107
- package/url-state/package.json +4 -0
- package/virtual-list/package.json +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-ui-core.mjs","sources":["../../../../projects/ui-core/src/lib/provide-neural-ui.ts","../../../../projects/ui-core/src/lib/url-state/neu-url-state.service.ts","../../../../projects/ui-core/src/lib/toast/neu-toast.service.ts","../../../../projects/ui-core/src/lib/checkbox/neu-checkbox.component.ts","../../../../projects/ui-core/src/lib/date-input/neu-date-input.component.ts","../../../../projects/ui-core/src/lib/icon/neu-icon.component.ts","../../../../projects/ui-core/src/lib/input/neu-input.component.ts","../../../../projects/ui-core/src/lib/multiselect/neu-multiselect.directives.ts","../../../../projects/ui-core/src/lib/multiselect/neu-multiselect.component.ts","../../../../projects/ui-core/src/lib/radio/neu-radio-group.component.ts","../../../../projects/ui-core/src/lib/radio/neu-radio.component.ts","../../../../projects/ui-core/src/lib/select/neu-select.directives.ts","../../../../projects/ui-core/src/lib/select/neu-select.component.ts","../../../../projects/ui-core/src/lib/slider/neu-slider.component.ts","../../../../projects/ui-core/src/lib/switch/neu-switch.component.ts","../../../../projects/ui-core/src/lib/textarea/neu-textarea.component.ts","../../../../projects/ui-core/src/lib/toggle-button-group/neu-toggle-button-group.component.ts","../../../../projects/ui-core/src/lib/breadcrumb/neu-breadcrumb.component.ts","../../../../projects/ui-core/src/lib/tooltip/neu-tooltip.component.ts","../../../../projects/ui-core/src/lib/tooltip/neu-tooltip.directive.ts","../../../../projects/ui-core/src/lib/nav/neu-nav.component.ts","../../../../projects/ui-core/src/lib/pagination/neu-pagination.component.ts","../../../../projects/ui-core/src/lib/sidebar/neu-sidebar.component.ts","../../../../projects/ui-core/src/lib/stepper/neu-stepper.component.ts","../../../../projects/ui-core/src/lib/tabs/neu-tabs.component.ts","../../../../projects/ui-core/src/lib/accordion/neu-accordion.component.ts","../../../../projects/ui-core/src/lib/card/neu-card.component.ts","../../../../projects/ui-core/src/lib/divider/neu-divider.component.ts","../../../../projects/ui-core/src/lib/modal/neu-modal.component.ts","../../../../projects/ui-core/src/lib/table/neu-table-expand.directive.ts","../../../../projects/ui-core/src/lib/table/neu-table.component.ts","../../../../projects/ui-core/src/lib/avatar/neu-avatar.component.ts","../../../../projects/ui-core/src/lib/badge/neu-badge.component.ts","../../../../projects/ui-core/src/lib/button/neu-button.component.ts","../../../../projects/ui-core/src/lib/chart/neu-chart.component.ts","../../../../projects/ui-core/src/lib/chip/neu-chip.component.ts","../../../../projects/ui-core/src/lib/code-block/neu-code-block.component.ts","../../../../projects/ui-core/src/lib/empty-state/neu-empty-state.component.ts","../../../../projects/ui-core/src/lib/progress-bar/neu-progress-bar.component.ts","../../../../projects/ui-core/src/lib/rating/neu-rating.component.ts","../../../../projects/ui-core/src/lib/skeleton/neu-skeleton.component.ts","../../../../projects/ui-core/src/lib/spinner/neu-spinner.component.ts","../../../../projects/ui-core/src/lib/split-button/neu-split-button.component.ts","../../../../projects/ui-core/src/lib/stats-card/neu-stats-card.component.ts","../../../../projects/ui-core/src/lib/timeline/neu-timeline.component.ts","../../../../projects/ui-core/src/lib/toast/neu-toast.component.ts","../../../../projects/ui-core/src/public-api.ts","../../../../projects/ui-core/src/neural-ui-core.ts"],"sourcesContent":["import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { provideIcons, provideNgIconsConfig } from '@ng-icons/core';\nimport {\n lucideAlertCircle,\n lucideAlertTriangle,\n lucideCheckCircle,\n lucideChevronLeft,\n lucideChevronRight,\n lucideExternalLink,\n lucideInbox,\n lucideInfo,\n lucideMinus,\n lucideTrendingDown,\n lucideTrendingUp,\n lucideX,\n lucideXCircle,\n} from '@ng-icons/lucide';\n\nexport interface NeuralUIConfig {\n /** Tamaño por defecto de los iconos. Por defecto: '1.25rem' */\n iconSize?: string;\n /** Grosor de trazo de los iconos. Por defecto: '2' */\n iconStrokeWidth?: string;\n}\n\n/**\n * Registra los providers necesarios para NeuralUI.\n *\n * Incluye los iconos internos de la librería y la configuración\n * por defecto de @ng-icons.\n *\n * @example\n * // app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideNeuralUI(),\n * ],\n * };\n *\n * @example\n * // Con opciones personalizadas\n * provideNeuralUI({ iconSize: '1rem', iconStrokeWidth: '1.5' })\n */\nexport function provideNeuralUI(config: NeuralUIConfig = {}): EnvironmentProviders {\n const { iconSize = '1.25rem', iconStrokeWidth = '2' } = config;\n\n return makeEnvironmentProviders([\n provideIcons({\n // Input validation\n lucideAlertCircle,\n // Toast severity icons\n lucideCheckCircle,\n lucideXCircle,\n lucideAlertTriangle,\n lucideInfo,\n // Close buttons (sidebar, modal, toast)\n lucideX,\n // Nav chevrons + collapse toggle\n lucideChevronRight,\n lucideChevronLeft,\n // Nav external link\n lucideExternalLink,\n // EmptyState default icon\n lucideInbox,\n // StatsCard trend icons\n lucideTrendingUp,\n lucideTrendingDown,\n lucideMinus,\n }),\n provideNgIconsConfig({ size: iconSize, strokeWidth: iconStrokeWidth }),\n ]);\n}\n","import { Injectable, Signal, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Params, Router } from '@angular/router';\nimport { filter, map, startWith } from 'rxjs/operators';\n\n/**\n * NeuUrlStateService — El Sistema Nervioso de NeuralUI\n *\n * Sincroniza el estado de la UI con los QueryParams de la URL.\n * Completamente reactivo via Angular Signals.\n *\n * Uso:\n * const urlState = inject(NeuUrlStateService);\n * const page = urlState.getParam('page'); // Signal<string | null>\n * urlState.setParam('menu', 'open'); // Actualiza ?menu=open\n * urlState.patchParams({ page: '2', q: 'filter' }); // Actualiza múltiples\n */\n@Injectable({ providedIn: 'root' })\nexport class NeuUrlStateService {\n private readonly router = inject(Router);\n\n /**\n * Signal con el mapa completo de queryParams actual.\n * Se actualiza automáticamente en cada NavigationEnd.\n */\n readonly params: Signal<Params> = toSignal(\n this.router.events.pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n startWith(null as null),\n map(() => this.router.parseUrl(this.router.url).queryParams as Params),\n ),\n { initialValue: this.router.parseUrl(this.router.url).queryParams as Params },\n );\n\n /**\n * Devuelve un Signal reactivo con el valor del parámetro indicado.\n * Memorizar el resultado: no llamar en bucle pues crea un computed nuevo c/vez.\n *\n * @example\n * readonly menuOpen = computed(() => this.urlState.getParam('menu')() === 'open');\n */\n getParam(key: string): Signal<string | null> {\n return computed(() => (this.params()[key] as string | undefined) ?? null);\n }\n\n /**\n * Establece un único queryParam en la URL.\n *\n * @param key Nombre del parámetro\n * @param value Valor. Pasar `null` para eliminarlo de la URL.\n * @param replaceUrl Si true (default) usa replaceState — no ensucia el historial.\n * Pasar false para acciones que el usuario debe poder deshacer con Atrás.\n */\n setParam(key: string, value: string | null, replaceUrl = true): void {\n void this.router.navigate([], {\n queryParams: { [key]: value },\n queryParamsHandling: 'merge',\n replaceUrl,\n });\n }\n\n /**\n * Actualiza múltiples queryParams en una sola navegación.\n *\n * @example\n * urlState.patchParams({ page: '1', q: 'Angular' });\n */\n patchParams(params: Record<string, string | null>, replaceUrl = true): void {\n void this.router.navigate([], {\n queryParams: params,\n queryParamsHandling: 'merge',\n replaceUrl,\n });\n }\n\n /**\n * Elimina todos los queryParams de la URL de una vez.\n */\n clearParams(replaceUrl = true): void {\n void this.router.navigate([], {\n queryParams: {},\n replaceUrl,\n });\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { NeuToastItem, NeuToastOptions, NeuToastPosition } from './neu-toast.types';\n\n/**\n * NeuralUI Toast Service\n *\n * Lanza notificaciones flotantes desde cualquier punto de la app.\n * Requiere que `<neu-toast-container>` esté presente en la raíz del app.\n *\n * Uso:\n * const toast = inject(NeuToastService);\n * toast.success('Guardado correctamente');\n * toast.error('Ha ocurrido un error', { title: 'Error', duration: 8000 });\n */\n@Injectable({ providedIn: 'root' })\nexport class NeuToastService {\n /** Lista reactiva de toasts activos */\n readonly toasts = signal<NeuToastItem[]>([]);\n\n /** Posición del contenedor de toasts */\n readonly position = signal<NeuToastPosition>('top-right');\n\n setPosition(position: NeuToastPosition): void {\n this.position.set(position);\n }\n\n show(options: NeuToastOptions): string {\n const id = `neu-toast-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n const duration = options.duration ?? 4000;\n\n const item: NeuToastItem = {\n id,\n message: options.message,\n title: options.title ?? '',\n type: options.type ?? 'info',\n duration,\n };\n\n this.toasts.update((list) => [...list, item]);\n\n if (duration > 0) {\n setTimeout(() => this.dismiss(id), duration);\n }\n\n return id;\n }\n\n success(message: string, opts?: Partial<NeuToastOptions>): string {\n return this.show({ ...opts, message, type: 'success' });\n }\n\n error(message: string, opts?: Partial<NeuToastOptions>): string {\n return this.show({ ...opts, message, type: 'error' });\n }\n\n info(message: string, opts?: Partial<NeuToastOptions>): string {\n return this.show({ ...opts, message, type: 'info' });\n }\n\n warning(message: string, opts?: Partial<NeuToastOptions>): string {\n return this.show({ ...opts, message, type: 'warning' });\n }\n\n dismiss(id: string): void {\n this.toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n clear(): void {\n this.toasts.set([]);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet _neuCheckboxIdSeq = 0;\n\n/**\n * NeuralUI Checkbox Component\n *\n * Checkbox personalizado y accesible para Angular Forms.\n *\n * Uso:\n * <neu-checkbox label=\"Acepto los términos\" [formControl]=\"termsCtrl\" />\n */\n@Component({\n selector: 'neu-checkbox',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-checkbox-host' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuCheckboxComponent),\n multi: true,\n },\n ],\n template: `\n <label class=\"neu-checkbox\" [class.neu-checkbox--disabled]=\"_isDisabled()\" [for]=\"_id\">\n <input\n type=\"checkbox\"\n class=\"neu-checkbox__input\"\n [id]=\"_id\"\n [attr.name]=\"name() || null\"\n [checked]=\"_checked()\"\n [disabled]=\"_isDisabled()\"\n (change)=\"onChange($event)\"\n (blur)=\"onBlur()\"\n />\n <span class=\"neu-checkbox__box\" [class.neu-checkbox__box--checked]=\"_checked()\">\n <svg\n class=\"neu-checkbox__check\"\n viewBox=\"0 0 12 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n [class.neu-checkbox__check--visible]=\"_checked()\"\n >\n <path\n d=\"M1 5L4.5 8.5L11 1\"\n stroke=\"white\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n @if (label()) {\n <span class=\"neu-checkbox__label\">{{ label() }}</span>\n }\n </label>\n `,\n styleUrl: './neu-checkbox.component.scss',\n})\nexport class NeuCheckboxComponent implements ControlValueAccessor {\n readonly label = input<string>('');\n readonly name = input<string>('');\n readonly disabled = input<boolean>(false);\n\n readonly _id = `neu-checkbox-${_neuCheckboxIdSeq++}`;\n\n protected readonly _checked = signal(false);\n /** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState */\n private readonly _cvaDisabled = signal(false);\n protected readonly _isDisabled = computed(() => this.disabled() || this._cvaDisabled());\n\n private _onChange: (v: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n\n onChange(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this._checked.set(checked);\n this._onChange(checked);\n }\n\n onBlur(): void {\n this._onTouched();\n }\n\n writeValue(val: unknown): void {\n this._checked.set(!!val);\n }\n\n registerOnChange(fn: (v: boolean) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet _neuDateInputIdSeq = 0;\n\ninterface CalendarDay {\n date: Date;\n inMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n}\n\ninterface DrumSlot {\n value: number;\n offset: number;\n label: string;\n}\n\n@Component({\n selector: 'neu-date-input',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-date-input-host',\n '(document:click)': 'onDocumentClick($event)',\n '(keydown.escape)': 'close()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuDateInputComponent),\n multi: true,\n },\n ],\n template: `\n @if (label()) {\n <label class=\"neu-date-input__label\" [for]=\"_id\">{{ label() }}</label>\n }\n <div\n class=\"neu-date-input\"\n [class.neu-date-input--open]=\"isOpen()\"\n [class.neu-date-input--disabled]=\"isDisabledFinal()\"\n [class.neu-date-input--error]=\"hasError()\"\n >\n <!-- Trigger -->\n <button\n class=\"neu-date-input__trigger\"\n type=\"button\"\n [id]=\"_id\"\n [disabled]=\"isDisabledFinal() || readonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n (click)=\"toggle()\"\n >\n <span class=\"neu-date-input__icon\" aria-hidden=\"true\">\n @if (type() === 'time') {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n } @else {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n }\n </span>\n <span\n class=\"neu-date-input__display\"\n [class.neu-date-input__display--placeholder]=\"!_value()\"\n >\n {{ displayValue() || placeholderText() }}\n </span>\n </button>\n\n <!-- Panel -->\n @if (isOpen()) {\n <div\n class=\"neu-date-input__panel\"\n [class.neu-date-input__panel--time-only]=\"type() === 'time'\"\n role=\"dialog\"\n [attr.aria-label]=\"'Choose date' + (monthLabel() ? ': ' + monthLabel() : '')\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- ── Calendar (date / datetime-local) ── -->\n @if (type() !== 'time') {\n <div class=\"neu-date-input__calendar\">\n <div class=\"neu-date-input__cal-nav\">\n <button\n class=\"neu-date-input__cal-arrow\"\n type=\"button\"\n (click)=\"prevMonth()\"\n aria-label=\"Mes anterior\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n <span class=\"neu-date-input__cal-title\">{{ monthLabel() }}</span>\n <button\n class=\"neu-date-input__cal-arrow\"\n type=\"button\"\n (click)=\"nextMonth()\"\n aria-label=\"Mes siguiente\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n\n <div class=\"neu-date-input__cal-weekdays\">\n @for (d of weekdays; track d) {\n <span>{{ d }}</span>\n }\n </div>\n\n <div class=\"neu-date-input__cal-grid\">\n @for (day of calendarDays(); track day.date.getTime()) {\n <button\n class=\"neu-date-input__cal-day\"\n type=\"button\"\n [class.neu-date-input__cal-day--other]=\"!day.inMonth\"\n [class.neu-date-input__cal-day--today]=\"day.isToday\"\n [class.neu-date-input__cal-day--selected]=\"day.isSelected\"\n [attr.aria-label]=\"formatDayLabel(day.date)\"\n [attr.aria-pressed]=\"day.isSelected\"\n (click)=\"selectDay(day)\"\n >\n {{ day.date.getDate() }}\n </button>\n }\n </div>\n\n <div class=\"neu-date-input__cal-footer\">\n <button class=\"neu-date-input__cal-footer-btn\" type=\"button\" (click)=\"clear()\">\n Borrar\n </button>\n <button\n class=\"neu-date-input__cal-footer-btn neu-date-input__cal-footer-btn--today\"\n type=\"button\"\n (click)=\"today()\"\n >\n Hoy\n </button>\n </div>\n </div>\n }\n\n <!-- ── Separator ── -->\n @if (type() === 'datetime-local') {\n <div class=\"neu-date-input__sep\"></div>\n }\n\n <!-- ── Time drum (time / datetime-local) ── -->\n @if (type() !== 'date') {\n <div class=\"neu-date-input__time\">\n <!-- Hours -->\n <div class=\"neu-date-input__drum\">\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeHour(-1)\"\n aria-label=\"Hora anterior\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <div class=\"neu-date-input__drum-track\" (wheel)=\"onHourWheel($event)\">\n @for (slot of hourSlots(); track slot.offset) {\n <div\n class=\"neu-date-input__drum-item\"\n [class.neu-date-input__drum-item--selected]=\"slot.offset === 0\"\n [class.neu-date-input__drum-item--adjacent]=\"slot.offset !== 0\"\n (click)=\"slot.offset !== 0 && changeHour(slot.offset)\"\n >\n {{ slot.label }}\n </div>\n }\n </div>\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeHour(1)\"\n aria-label=\"Hora siguiente\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n\n <span class=\"neu-date-input__time-colon\">:</span>\n\n <!-- Minutes -->\n <div class=\"neu-date-input__drum\">\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeMinute(-1)\"\n aria-label=\"Minuto anterior\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <div class=\"neu-date-input__drum-track\" (wheel)=\"onMinuteWheel($event)\">\n @for (slot of minuteSlots(); track slot.offset) {\n <div\n class=\"neu-date-input__drum-item\"\n [class.neu-date-input__drum-item--selected]=\"slot.offset === 0\"\n [class.neu-date-input__drum-item--adjacent]=\"slot.offset !== 0\"\n (click)=\"slot.offset !== 0 && changeMinute(slot.offset)\"\n >\n {{ slot.label }}\n </div>\n }\n </div>\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeMinute(1)\"\n aria-label=\"Minuto siguiente\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n @if (hasError()) {\n <p class=\"neu-date-input__error\" role=\"alert\">{{ errorMessage() }}</p>\n } @else if (hint()) {\n <p class=\"neu-date-input__hint\">{{ hint() }}</p>\n }\n `,\n styleUrl: './neu-date-input.component.scss',\n})\nexport class NeuDateInputComponent implements ControlValueAccessor {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Tipo: date | time | datetime-local */\n type = input<'date' | 'time' | 'datetime-local'>('date');\n\n /** Etiqueta del campo */\n label = input<string>('');\n\n /** Texto de ayuda */\n hint = input<string>('');\n\n /** Mensaje de error */\n errorMessage = input<string>('');\n\n /** Deshabilita el campo */\n disabled = input<boolean>(false);\n\n /** Solo lectura */\n readonly = input<boolean>(false);\n\n /** Nombre del campo (formularios nativos) */\n name = input<string>('');\n\n /** ID accesible */\n inputId = input<string>('');\n\n /** Requerido */\n required = input<boolean>(false);\n\n /** Mínimo (no implementado visualmente en v1) */\n min = input<string | null>(null);\n\n /** Máximo (no implementado visualmente en v1) */\n max = input<string | null>(null);\n\n /** Paso */\n step = input<number | null>(null);\n\n // ── Estado ──────────────────────────────────────────────\n protected readonly _id = `neu-date-input-${++_neuDateInputIdSeq}`;\n readonly isOpen = signal(false);\n\n protected readonly _value = signal<string>('');\n protected readonly _viewYear = signal(new Date().getFullYear());\n protected readonly _viewMonth = signal(new Date().getMonth());\n protected readonly _selYear = signal<number | null>(null);\n protected readonly _selMonth = signal<number | null>(null);\n protected readonly _selDay = signal<number | null>(null);\n protected readonly _selHour = signal(0);\n protected readonly _selMinute = signal(0);\n\n readonly hasError = computed(() => !!this.errorMessage());\n\n // ── Display ──────────────────────────────────────────────\n readonly displayValue = computed(() => {\n const v = this._value();\n if (!v) return '';\n const t = this.type();\n if (t === 'date') {\n const d = new Date(v + 'T00:00:00');\n return isNaN(d.getTime())\n ? v\n : d.toLocaleDateString('es-ES', { day: '2-digit', month: '2-digit', year: 'numeric' });\n }\n if (t === 'time') return v;\n const [datePart, timePart] = v.split('T');\n const d = new Date(datePart + 'T00:00:00');\n return (\n (isNaN(d.getTime())\n ? datePart\n : d.toLocaleDateString('es-ES', { day: '2-digit', month: '2-digit', year: 'numeric' })) +\n ', ' +\n (timePart?.slice(0, 5) ?? '')\n );\n });\n\n readonly placeholderText = computed(() => {\n switch (this.type()) {\n case 'time':\n return 'hh:mm';\n case 'datetime-local':\n return 'dd/mm/aaaa, hh:mm';\n default:\n return 'dd/mm/aaaa';\n }\n });\n\n // ── Calendar ─────────────────────────────────────────────\n readonly monthLabel = computed(() =>\n new Date(this._viewYear(), this._viewMonth(), 1).toLocaleDateString('es-ES', {\n month: 'long',\n year: 'numeric',\n }),\n );\n\n readonly weekdays = ['L', 'M', 'X', 'J', 'V', 'S', 'D'];\n\n readonly calendarDays = computed((): CalendarDay[] => {\n const year = this._viewYear();\n const month = this._viewMonth();\n const today = new Date();\n const firstDay = new Date(year, month, 1);\n const startDow = (firstDay.getDay() + 6) % 7; // Mon=0 … Sun=6\n const days: CalendarDay[] = [];\n\n for (let i = startDow; i > 0; i--) {\n days.push({\n date: new Date(year, month, 1 - i),\n inMonth: false,\n isToday: false,\n isSelected: false,\n });\n }\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n for (let d = 1; d <= daysInMonth; d++) {\n const date = new Date(year, month, d);\n days.push({\n date,\n inMonth: true,\n isToday: date.toDateString() === today.toDateString(),\n isSelected: this._selYear() === year && this._selMonth() === month && this._selDay() === d,\n });\n }\n let next = 1;\n while (days.length < 42) {\n days.push({\n date: new Date(year, month + 1, next++),\n inMonth: false,\n isToday: false,\n isSelected: false,\n });\n }\n return days;\n });\n\n // ── Drum ─────────────────────────────────────────────────\n readonly hourSlots = computed(() => this._drumSlots(this._selHour(), 24));\n readonly minuteSlots = computed(() => this._drumSlots(this._selMinute(), 60));\n\n private _drumSlots(value: number, max: number): DrumSlot[] {\n return [-1, 0, 1].map((offset) => {\n const v = (((value + offset) % max) + max) % max;\n return { value: v, offset, label: String(v).padStart(2, '0') };\n });\n }\n\n // ── Actions ──────────────────────────────────────────────\n toggle(): void {\n if (this.isDisabledFinal() || this.readonly()) return;\n this.isOpen.update((v) => !v);\n }\n\n close(): void {\n this.isOpen.set(false);\n }\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.el.nativeElement.contains(event.target as Node)) this.close();\n }\n\n prevMonth(): void {\n if (this._viewMonth() === 0) {\n this._viewMonth.set(11);\n this._viewYear.update((y) => y - 1);\n } else this._viewMonth.update((m) => m - 1);\n }\n\n nextMonth(): void {\n if (this._viewMonth() === 11) {\n this._viewMonth.set(0);\n this._viewYear.update((y) => y + 1);\n } else this._viewMonth.update((m) => m + 1);\n }\n\n selectDay(day: CalendarDay): void {\n if (!day.inMonth) return;\n this._selYear.set(day.date.getFullYear());\n this._selMonth.set(day.date.getMonth());\n this._selDay.set(day.date.getDate());\n this._emitValue();\n if (this.type() === 'date') this.close();\n }\n\n formatDayLabel(date: Date): string {\n return date.toLocaleDateString('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n }\n\n today(): void {\n const d = new Date();\n this._viewYear.set(d.getFullYear());\n this._viewMonth.set(d.getMonth());\n this.selectDay({ date: d, inMonth: true, isToday: true, isSelected: false });\n }\n\n clear(): void {\n this._selYear.set(null);\n this._selMonth.set(null);\n this._selDay.set(null);\n this._value.set('');\n this._onChange('');\n this.close();\n }\n\n changeHour(delta: number): void {\n this._selHour.update((h) => (((h + delta) % 24) + 24) % 24);\n this._emitValue();\n }\n\n changeMinute(delta: number): void {\n this._selMinute.update((m) => (((m + delta) % 60) + 60) % 60);\n this._emitValue();\n }\n\n onHourWheel(e: WheelEvent): void {\n e.preventDefault();\n this.changeHour(e.deltaY > 0 ? 1 : -1);\n }\n onMinuteWheel(e: WheelEvent): void {\n e.preventDefault();\n this.changeMinute(e.deltaY > 0 ? 1 : -1);\n }\n\n private _emitValue(): void {\n const t = this.type();\n let v = '';\n if (t === 'date' || t === 'datetime-local') {\n if (this._selYear() === null) return;\n const y = this._selYear()!;\n const mo = String(this._selMonth()! + 1).padStart(2, '0');\n const d = String(this._selDay()!).padStart(2, '0');\n const ds = `${y}-${mo}-${d}`;\n v =\n t === 'date'\n ? ds\n : `${ds}T${String(this._selHour()).padStart(2, '0')}:${String(this._selMinute()).padStart(2, '0')}`;\n } else {\n v = `${String(this._selHour()).padStart(2, '0')}:${String(this._selMinute()).padStart(2, '0')}`;\n }\n this._value.set(v);\n this._onChange(v);\n }\n\n // ── CVA ─────────────────────────────────────────────────\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n const v = value ?? '';\n this._value.set(v);\n if (!v) return;\n const t = this.type();\n if (t === 'date') {\n const d = new Date(v + 'T00:00:00');\n if (!isNaN(d.getTime())) {\n this._selYear.set(d.getFullYear());\n this._selMonth.set(d.getMonth());\n this._selDay.set(d.getDate());\n this._viewYear.set(d.getFullYear());\n this._viewMonth.set(d.getMonth());\n }\n } else if (t === 'time') {\n const [h, m] = v.split(':').map(Number);\n if (!isNaN(h)) this._selHour.set(h);\n if (!isNaN(m)) this._selMinute.set(m);\n } else {\n const [datePart, timePart] = v.split('T');\n if (datePart) {\n const d = new Date(datePart + 'T00:00:00');\n if (!isNaN(d.getTime())) {\n this._selYear.set(d.getFullYear());\n this._selMonth.set(d.getMonth());\n this._selDay.set(d.getDate());\n this._viewYear.set(d.getFullYear());\n this._viewMonth.set(d.getMonth());\n }\n }\n if (timePart) {\n const [h, m] = timePart.split(':').map(Number);\n if (!isNaN(h)) this._selHour.set(h);\n if (!isNaN(m)) this._selMinute.set(m);\n }\n }\n }\n\n registerOnChange(fn: (v: string) => void): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n private readonly _cvaDisabled = signal(false);\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\n }\n readonly isDisabledFinal = computed(() => this.disabled() || this._cvaDisabled());\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { NgIcon } from '@ng-icons/core';\n\n/**\n * NeuIconComponent — Wrapper delgado sobre NgIcon de @ng-icons/core\n *\n * Hereda el color del elemento padre mediante `color: currentColor`.\n * El grosor del trazo se controla con la variable CSS `--ng-icon__stroke-width`\n * que viene configurada globalmente vía `provideNgIconsConfig`.\n *\n * Uso básico:\n * <neu-icon name=\"lucideX\" />\n * <neu-icon name=\"lucideAlertCircle\" size=\"1rem\" />\n */\n@Component({\n selector: 'neu-icon',\n imports: [NgIcon],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-icon',\n '[style.display]': '\"inline-flex\"',\n '[style.align-items]': '\"center\"',\n '[style.line-height]': '\"1\"',\n '[style.color]': '\"inherit\"',\n },\n template: `<ng-icon [name]=\"name()\" [size]=\"resolvedSize()\" [strokeWidth]=\"strokeWidth()\" />`,\n styleUrl: './neu-icon.component.scss',\n})\nexport class NeuIconComponent {\n /** Nombre del icono registrado con provideIcons() */\n name = input.required<string>();\n\n /**\n * Grosor del trazo. Default '2' para estética fina y técnica.\n * Puede sobrescribirse por instancia.\n */\n strokeWidth = input<string>('2');\n\n /**\n * Tamaño del icono. Acepta cualquier unidad CSS válida.\n * Si no se especifica, usa la variable CSS `--neu-icon-size` (1.25rem por defecto).\n */\n size = input<string>('');\n\n /** Tamaño resuelto: usa el input `size` o cae al token CSS. */\n readonly resolvedSize = computed(() => this.size() || 'var(--neu-icon-size, 1.25rem)');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NeuIconComponent } from '../icon/neu-icon.component';\n\n/** Contador global para IDs estables — seguro en SSR, predecible en hidratación */\nlet _neuInputIdSeq = 0;\n\nexport type NeuInputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search';\n\n/**\n * NeuralUI Input Component\n *\n * Input con floating label, iconos y soporte completo para Angular Forms.\n * Compatible con ReactiveFormsModule y ngModel.\n *\n * Uso standalone:\n * <neu-input label=\"Correo\" type=\"email\" />\n *\n * Con Reactive Forms:\n * <neu-input label=\"Correo\" [formControl]=\"emailCtrl\" [errorMessage]=\"emailError()\" />\n */\n@Component({\n selector: 'neu-input',\n imports: [NeuIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n // Los atributos del host (class, style, data-*) no deben llegar al <input> nativo\n // — se gestionan de forma explícita con los inputs del componente.\n host: { class: 'neu-input-host' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuInputComponent),\n multi: true,\n },\n ],\n template: `\n @if (!floatingLabel() && label()) {\n <label class=\"neu-input__static-label\" [for]=\"inputId()\">{{ label() }}</label>\n }\n <div\n class=\"neu-input__wrapper\"\n [class.neu-input__wrapper--focused]=\"_focused()\"\n [class.neu-input__wrapper--has-value]=\"hasValue()\"\n [class.neu-input__wrapper--error]=\"hasError()\"\n [class.neu-input__wrapper--disabled]=\"isDisabledFinal()\"\n [class.neu-input__wrapper--has-start-icon]=\"!!startIcon() || _hasIconLeft()\"\n [class.neu-input__wrapper--has-end-icon]=\"!!endIcon() || _hasIconRight()\"\n [class.neu-input__wrapper--no-float]=\"!floatingLabel()\"\n >\n <!-- Icono izquierdo (proyección) -->\n @if (startIcon()) {\n <span class=\"neu-input__icon neu-input__icon--start\" aria-hidden=\"true\">\n <ng-content select=\"[neu-input-start]\" />\n @if (!hasStartContent()) {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [innerHTML]=\"startIconPath()\"\n ></svg>\n }\n </span>\n }\n\n <!-- Icono izquierdo (por nombre) -->\n @if (_hasIconLeft()) {\n <span class=\"neu-input__icon neu-input__icon--start\" aria-hidden=\"true\">\n <neu-icon [name]=\"icon()\" size=\"16px\" />\n </span>\n }\n\n <!-- Campo nativo -->\n <input\n class=\"neu-input__field\"\n [id]=\"inputId()\"\n [type]=\"type()\"\n [disabled]=\"isDisabledFinal()\"\n [attr.name]=\"name() || null\"\n [attr.required]=\"required() ? '' : null\"\n [attr.readonly]=\"readonly() ? '' : null\"\n [attr.maxlength]=\"maxlength() ?? null\"\n [attr.minlength]=\"minlength() ?? null\"\n [attr.min]=\"min() ?? null\"\n [attr.max]=\"max() ?? null\"\n [attr.pattern]=\"pattern() ?? null\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-describedby]=\"\n hasError() ? inputId() + '-error' : hint() ? inputId() + '-hint' : null\n \"\n [value]=\"_value()\"\n [attr.placeholder]=\"floatingLabel() ? ' ' : placeholder() || null\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <!-- Floating Label -->\n @if (floatingLabel() && label()) {\n <label class=\"neu-input__label\" [for]=\"inputId()\">{{ label() }}</label>\n }\n\n <!-- Icono derecho (proyección) -->\n @if (endIcon()) {\n <span class=\"neu-input__icon neu-input__icon--end\" aria-hidden=\"true\">\n <ng-content select=\"[neu-input-end]\" />\n </span>\n }\n\n <!-- Icono derecho (por nombre) -->\n @if (_hasIconRight()) {\n <span class=\"neu-input__icon neu-input__icon--end\" aria-hidden=\"true\">\n <neu-icon [name]=\"icon()\" size=\"16px\" />\n </span>\n }\n </div>\n\n <!-- Mensajes de ayuda / error -->\n @if (hasError()) {\n <p class=\"neu-input__error\" [id]=\"inputId() + '-error'\" role=\"alert\">\n <neu-icon name=\"lucideAlertCircle\" size=\"13px\" aria-hidden=\"true\" />\n {{ errorMessage() }}\n </p>\n } @else if (hint()) {\n <p class=\"neu-input__hint\" [id]=\"inputId() + '-hint'\">{{ hint() }}</p>\n }\n `,\n styleUrl: './neu-input.component.scss',\n})\nexport class NeuInputComponent implements ControlValueAccessor {\n /** Tipo de input HTML */\n type = input<NeuInputType>('text');\n\n /** Texto del floating label */\n label = input<string>('');\n\n /** Placeholder visible cuando floatingLabel=false */\n placeholder = input<string>('');\n\n /** Muestra el label como flotante (true) o estático encima del campo (false) */\n floatingLabel = input<boolean>(true);\n\n /** Hint de ayuda (visible cuando no hay error) */\n hint = input<string>('');\n\n /** Mensaje de error (activa el estado de error) */\n errorMessage = input<string>('');\n\n /** Deshabilita el campo */\n disabled = input<boolean>(false);\n\n /** Atributo autocomplete HTML */\n autocomplete = input<string>('off');\n\n /** Muestra zona para icono al inicio */\n startIcon = input<boolean>(false);\n\n /** Muestra zona para icono al final */\n endIcon = input<boolean>(false);\n\n /** Nombre del icono lucide a renderizar dentro del campo */\n icon = input<string>('');\n\n /** Posición del icono cuando se usa `icon` */\n iconPosition = input<'left' | 'right'>('left');\n\n /** ID accesible para el input — generado con contador estable (seguro en SSR) */\n inputId = input<string>(`neu-input-${++_neuInputIdSeq}`);\n\n /** Nombre del campo para formularios nativos */\n name = input<string>('');\n\n /** Marca el campo como requerido */\n required = input<boolean>(false);\n\n /** Hace el campo de solo lectura */\n readonly = input<boolean>(false);\n\n /** Longitud máxima de caracteres */\n maxlength = input<number | null>(null);\n\n /** Longitud mínima de caracteres */\n minlength = input<number | null>(null);\n\n /** Valor mínimo (para type=number/date) */\n min = input<string | null>(null);\n\n /** Valor máximo (para type=number/date) */\n max = input<string | null>(null);\n\n /** Patrón de validación HTML5 */\n pattern = input<string | null>(null);\n\n // --- Estado interno reactivo ---\n protected readonly _value = signal('');\n protected readonly _focused = signal(false);\n\n readonly hasValue = computed(() => this._value().length > 0);\n readonly hasError = computed(() => !!this.errorMessage());\n readonly startIconPath = computed(() => '');\n readonly hasStartContent = computed(() => false);\n readonly _hasIconLeft = computed(() => !!this.icon() && this.iconPosition() === 'left');\n readonly _hasIconRight = computed(() => !!this.icon() && this.iconPosition() === 'right');\n\n // --- ControlValueAccessor ---\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n writeValue(val: unknown): void {\n this._value.set(val == null ? '' : String(val));\n }\n\n registerOnChange(fn: (v: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n private readonly _cvaDisabled = signal(false);\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\n }\n\n readonly isDisabledFinal = computed(() => this.disabled() || this._cvaDisabled());\n\n onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this._value.set(value);\n this._onChange(value);\n }\n\n onFocus(): void {\n this._focused.set(true);\n }\n\n onBlur(): void {\n this._focused.set(false);\n this._onTouched();\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { NeuSelectOption } from '../select/neu-select.types';\n\n/**\n * Directiva para personalizar el template de cada ítem del dropdown de Multiselect.\n *\n * Uso:\n * ```html\n * <neu-multiselect [options]=\"opts\" [(ngModel)]=\"values\">\n * <ng-template neuMultiselectItem let-item>\n * <span class=\"flag flag-{{ item.value }}\"></span>\n * {{ item.label }}\n * </ng-template>\n * </neu-multiselect>\n * ```\n */\n@Directive({ selector: '[neuMultiselectItem]', standalone: true })\nexport class NeuMultiselectItemDirective {\n readonly templateRef = inject<TemplateRef<{ $implicit: NeuSelectOption }>>(TemplateRef);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n computed,\n contentChild,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { NeuUrlStateService } from '../url-state/neu-url-state.service';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NeuSelectOption } from '../select/neu-select.types';\nimport { NeuMultiselectItemDirective } from './neu-multiselect.directives';\n\nexport type { NeuSelectOption } from '../select/neu-select.types';\n\nlet _neuMultiselectIdSeq = 0;\n\n/**\n * NeuralUI Multiselect Component\n *\n * Dropdown de selección múltiple con chips, búsqueda integrada y soporte\n * completo para Angular Forms (ngModel y Reactive Forms).\n *\n * Uso:\n * <neu-multiselect label=\"Tecnologías\" [options]=\"opts\" [(ngModel)]=\"selected\" />\n */\n@Component({\n selector: 'neu-multiselect',\n imports: [NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuMultiselectComponent),\n multi: true,\n },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n '(keydown.escape)': 'close()',\n },\n template: `\n @if (!floatingLabel() && label()) {\n <label class=\"neu-multiselect__static-label\" [for]=\"_triggerId\">{{ label() }}</label>\n }\n <div\n class=\"neu-multiselect\"\n [class.neu-multiselect--open]=\"isOpen()\"\n [class.neu-multiselect--disabled]=\"isDisabledFinal()\"\n [class.neu-multiselect--error]=\"hasError()\"\n [class.neu-multiselect--has-value]=\"_values().length > 0\"\n [class.neu-multiselect--no-float]=\"!floatingLabel()\"\n >\n <!-- Trigger -->\n <button\n class=\"neu-multiselect__trigger\"\n type=\"button\"\n [id]=\"_triggerId\"\n [disabled]=\"isDisabledFinal()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-label]=\"label() || null\"\n (click)=\"toggle()\"\n (keydown.arrowDown)=\"onTriggerKey($any($event))\"\n (keydown.arrowUp)=\"onTriggerKey($any($event))\"\n >\n <!-- Floating label -->\n @if (floatingLabel() && label()) {\n <span class=\"neu-multiselect__label\">{{ label() }}</span>\n }\n <span class=\"neu-multiselect__chips\">\n @if (_values().length === 0) {\n <span class=\"neu-multiselect__placeholder\">{{ placeholder() }}</span>\n } @else if (_chipMode() === 'count') {\n <span class=\"neu-multiselect__count-badge\">{{ _values().length }} seleccionados</span>\n } @else {\n @for (val of _visibleChips(); track val) {\n <span class=\"neu-multiselect__chip\">\n {{ labelFor(val) }}\n <button\n class=\"neu-multiselect__chip-remove\"\n type=\"button\"\n [attr.aria-label]=\"'Eliminar ' + labelFor(val)\"\n (click)=\"removeValue(val, $event)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </span>\n }\n @if (_values().length > 3) {\n <span class=\"neu-multiselect__chip neu-multiselect__chip--overflow\"\n >+{{ _values().length - 3 }}</span\n >\n }\n }\n </span>\n\n <!-- Clear button -->\n @if (clearable() && _values().length > 0 && !isDisabledFinal()) {\n <button\n class=\"neu-multiselect__clear\"\n type=\"button\"\n [attr.aria-label]=\"clearAriaLabel()\"\n (click)=\"clearAll($event)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n\n <!-- Chevron -->\n <svg\n class=\"neu-multiselect__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n <!-- Panel -->\n @if (isOpen()) {\n <div\n class=\"neu-multiselect__panel\"\n role=\"listbox\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"label() || null\"\n >\n <!-- Search -->\n @if (searchable()) {\n <div class=\"neu-multiselect__search\">\n <input\n class=\"neu-multiselect__search-input\"\n type=\"text\"\n [attr.aria-label]=\"'Search ' + label()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"searchQuery.set($any($event.target).value)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n }\n\n <!-- Opciones -->\n <div class=\"neu-multiselect__options\">\n @for (option of filteredOptions(); track option.value) {\n <div\n class=\"neu-multiselect__option\"\n [class.neu-multiselect__option--selected]=\"isSelected(option.value)\"\n [class.neu-multiselect__option--disabled]=\"option.disabled\"\n role=\"option\"\n [id]=\"'neu-ms-opt-' + option.value\"\n [attr.aria-selected]=\"isSelected(option.value)\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.tabindex]=\"option.disabled ? null : '-1'\"\n (click)=\"toggleOption(option)\"\n (keydown.enter)=\"toggleOption(option)\"\n (keydown.space)=\"toggleOption(option)\"\n (keydown.arrowDown)=\"focusOptionByIndex($any($event), option, 1)\"\n (keydown.arrowUp)=\"focusOptionByIndex($any($event), option, -1)\"\n >\n <!-- Checkbox visual -->\n <span\n class=\"neu-multiselect__checkbox\"\n [class.neu-multiselect__checkbox--checked]=\"isSelected(option.value)\"\n >\n <svg\n class=\"neu-multiselect__checkbox-check\"\n viewBox=\"0 0 12 10\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"1 5 4.5 9 11 1\" />\n </svg>\n </span>\n @if (itemTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n />\n } @else {\n {{ option.label }}\n }\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"neu-multiselect__empty\">{{ noResultsMessage() }}</div>\n }\n </div>\n\n <!-- Footer: resumen + limpiar + toggle modo -->\n @if (_values().length > 0) {\n <div class=\"neu-multiselect__footer\">\n <span class=\"neu-multiselect__footer-count\"\n >{{ _values().length }} seleccionados</span\n >\n <div class=\"neu-multiselect__footer-actions\">\n <button\n class=\"neu-multiselect__footer-mode\"\n type=\"button\"\n [attr.aria-label]=\"_chipMode() === 'chips' ? 'Mostrar contador' : 'Mostrar chips'\"\n (click)=\"toggleChipMode($event)\"\n >\n {{ _chipMode() === 'chips' ? '#' : '☰' }}\n </button>\n <button\n class=\"neu-multiselect__footer-clear\"\n type=\"button\"\n (click)=\"clearAll($event)\"\n >\n {{ clearAllLabel() }}\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n @if (hasError()) {\n <p class=\"neu-multiselect__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n `,\n styleUrl: './neu-multiselect.component.scss',\n})\nexport class NeuMultiselectComponent implements ControlValueAccessor {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _urlState = inject(NeuUrlStateService);\n\n constructor() {\n effect(() => {\n const param = this.urlParam();\n if (!param) return;\n const urlRaw = this._urlState.getParam(param)();\n const urlVals = urlRaw ? urlRaw.split(',').filter(Boolean) : [];\n const current = untracked(() => this._values());\n if (JSON.stringify(urlVals) !== JSON.stringify(current)) {\n this._values.set(urlVals);\n this._onChange(urlVals);\n }\n });\n }\n\n /** @internal */\n readonly _triggerId = `neu-multiselect-trigger-${_neuMultiselectIdSeq++}`;\n\n /** Template personalizado para cada opción del dropdown */\n readonly itemTpl = contentChild(NeuMultiselectItemDirective);\n\n /** Opciones del dropdown */\n options = input<NeuSelectOption[]>([]);\n\n /** Etiqueta del componente */\n label = input<string>('');\n\n /** Muestra el label como flotante dentro del campo (true) o estático encima (false) */\n floatingLabel = input<boolean>(false);\n\n /** Placeholder cuando no hay selección */\n placeholder = input<string>('Seleccionar...');\n\n /** Mensaje de error */\n errorMessage = input<string>('');\n\n /** Deshabilita el componente */\n disabled = input<boolean>(false);\n\n /** Activa input de búsqueda/filtro en el panel */\n searchable = input<boolean>(false);\n\n /** Placeholder del input de búsqueda */\n searchPlaceholder = input<string>('Buscar...');\n\n /** Texto cuando no hay opciones tras filtrar */\n noResultsMessage = input<string>('Sin resultados');\n\n /** Texto del botón de limpiar todas las selecciones */\n clearAllLabel = input<string>('Limpiar todo');\n\n /** Muestra un botón × en el trigger para limpiar la selección de una vez */\n clearable = input<boolean>(false);\n\n /** Aria-label del botón clear que aparece en el trigger */\n clearAriaLabel = input<string>('Limpiar selección');\n\n /**\n * Sincroniza los valores seleccionados con este query param de la URL.\n * Los valores se codifican como lista separada por comas: `?{urlParam}=a,b,c`.\n * Pasar `null` (default) deshabilita la sincronización.\n */\n urlParam = input<string | null>(null);\n\n /**\n * Emite el array de NeuSelectOption completo (incluyendo data) al cambiar la selección.\n * Emite [] al limpiar toda la selección.\n * Los valores de ngModel / formControl siguen siendo string[].\n */\n readonly selectionChange = output<NeuSelectOption[]>();\n\n // --- Estado interno ---\n protected readonly _values = signal<string[]>([]);\n readonly isOpen = signal(false);\n readonly searchQuery = signal('');\n readonly _chipMode = signal<'chips' | 'count'>('count');\n\n readonly _visibleChips = computed(() => this._values().slice(0, 3));\n\n readonly hasError = computed(() => !!this.errorMessage());\n\n readonly filteredOptions = computed(() => {\n const q = this.searchQuery().toLowerCase().trim();\n if (!q) return this.options();\n return this.options().filter((o) => o.label.toLowerCase().includes(q));\n });\n\n // --- CVA ---\n private _onChange: (v: string[]) => void = () => {};\n private _onTouched: () => void = () => {};\n\n writeValue(value: string[] | null): void {\n this._values.set(Array.isArray(value) ? value : []);\n }\n\n registerOnChange(fn: (v: string[]) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n private readonly _cvaDisabled = signal(false);\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\n }\n readonly isDisabledFinal = computed(() => this.disabled() || this._cvaDisabled());\n\n // --- Helpers ---\n protected labelFor(value: string): string {\n return this.options().find((o) => o.value === value)?.label ?? value;\n }\n\n protected isSelected(value: string): boolean {\n return this._values().includes(value);\n }\n\n protected toggle(): void {\n if (this.isDisabledFinal()) return;\n this.isOpen.update((v) => !v);\n if (!this.isOpen()) {\n this.searchQuery.set('');\n this._onTouched();\n } else {\n requestAnimationFrame(() => {\n const first = this.elementRef.nativeElement.querySelector<HTMLElement>(\n '.neu-multiselect__option:not([aria-disabled=\"true\"])',\n );\n first?.focus();\n });\n }\n }\n\n /** Abre el panel y mueve el foco al primer item */\n onTriggerKey(event: Event): void {\n event.preventDefault();\n if (!this.isOpen()) {\n this.isOpen.set(true);\n requestAnimationFrame(() => {\n const first = this.elementRef.nativeElement.querySelector<HTMLElement>(\n '.neu-multiselect__option:not([aria-disabled=\"true\"])',\n );\n first?.focus();\n });\n }\n }\n\n /** Navega entre opciones con flechas */\n focusOptionByIndex(event: Event, current: NeuSelectOption, dir: 1 | -1): void {\n event.preventDefault();\n const opts = this.filteredOptions().filter((o) => !o.disabled);\n const idx = opts.findIndex((o) => o.value === current.value);\n const next = opts[(idx + dir + opts.length) % opts.length];\n if (next) {\n const el = this.elementRef.nativeElement.querySelector<HTMLElement>(\n `#neu-ms-opt-${next.value}`,\n );\n el?.focus();\n }\n }\n\n protected close(): void {\n this.isOpen.set(false);\n this.searchQuery.set('');\n this._onTouched();\n }\n\n protected toggleOption(option: NeuSelectOption): void {\n if (option.disabled) return;\n const current = this._values();\n const next = current.includes(option.value)\n ? current.filter((v) => v !== option.value)\n : [...current, option.value];\n this._values.set(next);\n this._onChange(next);\n this.selectionChange.emit(this.options().filter((o) => next.includes(o.value)));\n const param = this.urlParam();\n if (param) this._urlState.setParam(param, next.length ? next.join(',') : null);\n }\n\n protected removeValue(value: string, event: MouseEvent): void {\n event.stopPropagation();\n const next = this._values().filter((v) => v !== value);\n this._values.set(next);\n this._onChange(next);\n this._onTouched();\n this.selectionChange.emit(this.options().filter((o) => next.includes(o.value)));\n const param = this.urlParam();\n if (param) this._urlState.setParam(param, next.length ? next.join(',') : null);\n }\n\n protected clearAll(event: MouseEvent): void {\n event.stopPropagation();\n this._values.set([]);\n this._onChange([]);\n this._onTouched();\n this.selectionChange.emit([]);\n const param = this.urlParam();\n if (param) this._urlState.setParam(param, null);\n }\n\n protected toggleChipMode(event: MouseEvent): void {\n event.stopPropagation();\n this._chipMode.set(this._chipMode() === 'chips' ? 'count' : 'chips');\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n InjectionToken,\n ViewEncapsulation,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** Token para que neu-radio encuentre a su grupo padre */\nexport const NEU_RADIO_GROUP = new InjectionToken<NeuRadioGroupComponent>('NEU_RADIO_GROUP');\n\n/**\n * NeuralUI Radio Group Component\n *\n * Contenedor para grupos de radio buttons. Implementa ControlValueAccessor.\n *\n * Uso:\n * <neu-radio-group [formControl]=\"ctrl\">\n * <neu-radio value=\"a\" label=\"Opción A\" />\n * <neu-radio value=\"b\" label=\"Opción B\" />\n * </neu-radio-group>\n */\nlet _neuRadioGroupIdSeq = 0;\n\n@Component({\n selector: 'neu-radio-group',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-radio-group',\n role: 'radiogroup',\n '[attr.aria-disabled]': '_isDisabled()',\n '[attr.aria-label]': 'ariaLabel() || null',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuRadioGroupComponent),\n multi: true,\n },\n {\n provide: NEU_RADIO_GROUP,\n useExisting: NeuRadioGroupComponent,\n },\n ],\n template: `<ng-content />`,\n styleUrl: './neu-radio.component.scss',\n})\nexport class NeuRadioGroupComponent implements ControlValueAccessor {\n readonly direction = input<'row' | 'column'>('column');\n /** Etiqueta accesible del grupo (WCAG 4.1.2). Usar cuando no hay <legend> visible. */\n readonly ariaLabel = input<string>('');\n\n /** Nombre HTML compartido por todos los neu-radio hijos — garantiza la exclusión mutua nativa */\n readonly _name = `neu-radio-group-${++_neuRadioGroupIdSeq}`;\n\n readonly _value = signal<unknown>(null);\n readonly _isDisabled = signal(false);\n\n private _onChange: (v: unknown) => void = () => {};\n private _onTouched: () => void = () => {};\n\n select(value: unknown): void {\n this._value.set(value);\n this._onChange(value);\n this._onTouched();\n }\n\n writeValue(val: unknown): void {\n this._value.set(val ?? null);\n }\n\n registerOnChange(fn: (v: unknown) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { NEU_RADIO_GROUP } from './neu-radio-group.component';\n\nlet _neuRadioIdSeq = 0;\n\n/**\n * NeuralUI Radio Component\n *\n * Opción individual dentro de un neu-radio-group.\n *\n * Uso:\n * <neu-radio value=\"opcion-a\" label=\"Opción A\" />\n */\n@Component({\n selector: 'neu-radio',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-radio-host' },\n template: `\n <label\n class=\"neu-radio\"\n [class.neu-radio--checked]=\"isChecked()\"\n [class.neu-radio--disabled]=\"isDisabled()\"\n [for]=\"_id\"\n >\n <input\n type=\"radio\"\n class=\"neu-radio__input\"\n [id]=\"_id\"\n [name]=\"_groupName\"\n [value]=\"value()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onSelect()\"\n (blur)=\"onBlur()\"\n />\n <span class=\"neu-radio__circle\" [class.neu-radio__circle--checked]=\"isChecked()\">\n <span class=\"neu-radio__dot\"></span>\n </span>\n @if (label()) {\n <span class=\"neu-radio__label\">{{ label() }}</span>\n }\n </label>\n `,\n})\nexport class NeuRadioComponent {\n readonly value = input.required<unknown>();\n readonly label = input<string>('');\n readonly disabled = input<boolean>(false);\n\n readonly group = inject(NEU_RADIO_GROUP);\n\n readonly _id = `neu-radio-${_neuRadioIdSeq++}`;\n /** Toma el nombre del grupo padre — así todos los radios del grupo comparten el mismo `name` nativo */\n readonly _groupName = this.group._name;\n\n readonly isChecked = computed(() => this.group._value() === this.value());\n readonly isDisabled = computed(() => this.disabled() || this.group._isDisabled());\n\n onSelect(): void {\n this.group.select(this.value());\n }\n\n onBlur(): void {}\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { NeuSelectOption } from './neu-select.types';\n\n/**\n * Directiva para personalizar el template de cada ítem del dropdown.\n *\n * Uso:\n * ```html\n * <neu-select [options]=\"opts\" [(ngModel)]=\"value\">\n * <ng-template neuSelectItem let-item>\n * <span class=\"flag flag-{{ item.value }}\"></span>\n * {{ item.label }}\n * </ng-template>\n * </neu-select>\n * ```\n */\n@Directive({ selector: '[neuSelectItem]', standalone: true })\nexport class NeuSelectItemDirective {\n readonly templateRef = inject<TemplateRef<{ $implicit: NeuSelectOption }>>(TemplateRef);\n}\n\n/**\n * Directiva para personalizar el template del ítem seleccionado (trigger).\n *\n * Uso:\n * ```html\n * <neu-select [options]=\"opts\" [(ngModel)]=\"value\">\n * <ng-template neuSelectSelected let-item>\n * <strong>{{ item?.label }}</strong>\n * </ng-template>\n * </neu-select>\n * ```\n */\n@Directive({ selector: '[neuSelectSelected]', standalone: true })\nexport class NeuSelectSelectedDirective {\n readonly templateRef = inject<TemplateRef<{ $implicit: NeuSelectOption | null }>>(TemplateRef);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n computed,\n contentChild,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { NeuUrlStateService } from '../url-state/neu-url-state.service';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NeuSelectOption } from './neu-select.types';\nimport { NeuSelectItemDirective, NeuSelectSelectedDirective } from './neu-select.directives';\n\nexport type { NeuSelectOption } from './neu-select.types';\n\nlet _neuSelectIdSeq = 0;\n\n/**\n * NeuralUI Select Component\n *\n * Dropdown personalizado con soporte para Angular Forms.\n * Cierra automáticamente al hacer clic fuera del componente.\n *\n * Uso:\n * <neu-select label=\"País\" [options]=\"paises\" [(ngModel)]=\"country\" />\n *\n * Con Reactive Forms:\n * <neu-select label=\"País\" [options]=\"paises\" [formControl]=\"countryCtrl\" />\n */\n@Component({\n selector: 'neu-select',\n imports: [NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuSelectComponent),\n multi: true,\n },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n '(keydown.escape)': 'close()',\n },\n template: `\n @if (!floatingLabel() && label()) {\n <label class=\"neu-select__static-label\" [for]=\"_triggerId\">{{ label() }}</label>\n }\n <div\n class=\"neu-select\"\n [class.neu-select--open]=\"isOpen()\"\n [class.neu-select--disabled]=\"isDisabledFinal()\"\n [class.neu-select--error]=\"hasError()\"\n [class.neu-select--has-value]=\"!!_value()\"\n [class.neu-select--has-placeholder]=\"!!placeholder() && !_value()\"\n [class.neu-select--no-float]=\"!floatingLabel()\"\n >\n <!-- Trigger ------>\n <button\n class=\"neu-select__trigger\"\n type=\"button\"\n [id]=\"_triggerId\"\n [disabled]=\"isDisabledFinal()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-activedescendant]=\"isOpen() && _value() ? 'neu-select-opt-' + _value() : null\"\n (click)=\"toggle()\"\n (keydown.arrowDown)=\"onTriggerKey($any($event))\"\n (keydown.arrowUp)=\"onTriggerKey($any($event))\"\n >\n <!-- Floating label -->\n @if (floatingLabel() && label()) {\n <span class=\"neu-select__label\">{{ label() }}</span>\n }\n\n <span class=\"neu-select__value\">\n @if (selectedLabel()) {\n @if (selectedItemTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"selectedItemTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: _selectedOption() }\"\n />\n } @else {\n {{ selectedLabel() }}\n }\n } @else {\n <span class=\"neu-select__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n\n <!-- Clear button -->\n @if (clearable() && !!_value() && !isDisabledFinal()) {\n <button\n class=\"neu-select__clear\"\n type=\"button\"\n aria-label=\"Limpiar selección\"\n [attr.aria-label]=\"clearAriaLabel()\"\n (click)=\"clearValue($event)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n\n <!-- Chevron -->\n <svg\n class=\"neu-select__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n <!-- Panel ------>\n @if (isOpen()) {\n <div class=\"neu-select__panel\" role=\"listbox\" [attr.aria-label]=\"label()\">\n @if (searchable()) {\n <div class=\"neu-select__search\">\n <input\n class=\"neu-select__search-input\"\n type=\"text\"\n [attr.aria-label]=\"'Search ' + label()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"searchQuery.set($any($event.target).value)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n }\n @for (option of filteredOptions(); track option.value) {\n <div\n class=\"neu-select__option\"\n [class.neu-select__option--selected]=\"option.value === _value()\"\n [class.neu-select__option--disabled]=\"option.disabled\"\n role=\"option\"\n [id]=\"'neu-select-opt-' + option.value\"\n [attr.aria-selected]=\"option.value === _value()\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.tabindex]=\"option.disabled ? null : '-1'\"\n (click)=\"selectOption(option)\"\n (keydown.enter)=\"selectOption(option)\"\n (keydown.space)=\"selectOption(option)\"\n (keydown.arrowDown)=\"focusOptionByIndex($any($event), option, 1)\"\n (keydown.arrowUp)=\"focusOptionByIndex($any($event), option, -1)\"\n >\n <!-- Checkmark en la seleccionada (siempre reserva el espacio) -->\n <svg\n class=\"neu-select__check\"\n [style.visibility]=\"option.value === _value() ? 'visible' : 'hidden'\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n @if (itemTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n />\n } @else {\n {{ option.label }}\n }\n </div>\n }\n @if (filteredOptions().length === 0) {\n <div class=\"neu-select__empty\">{{ noResultsMessage() }}</div>\n }\n </div>\n }\n </div>\n\n <!-- Error / hint -->\n @if (hasError()) {\n <p class=\"neu-select__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n `,\n styleUrl: './neu-select.component.scss',\n})\nexport class NeuSelectComponent implements ControlValueAccessor {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _urlState = inject(NeuUrlStateService);\n\n constructor() {\n effect(() => {\n const param = this.urlParam();\n if (!param) return;\n const urlVal = this._urlState.getParam(param)();\n if (urlVal !== untracked(() => this._value())) {\n this._value.set(urlVal);\n this._onChange(urlVal);\n }\n });\n }\n /** @internal — ID \\u00fanico para asociar label con trigger */\n readonly _triggerId = `neu-select-trigger-${_neuSelectIdSeq++}`;\n /** Template personalizado para cada opción del dropdown */\n readonly itemTpl = contentChild(NeuSelectItemDirective);\n\n /** Template personalizado para el valor seleccionado en el trigger */\n readonly selectedItemTpl = contentChild(NeuSelectSelectedDirective);\n /** Opciones del dropdown */\n options = input<NeuSelectOption[]>([]);\n\n /** Texto del floating label */\n label = input<string>('');\n\n /** Placeholder cuando no hay selección */\n placeholder = input<string>('Seleccionar...');\n\n /** Mensaje de error */\n errorMessage = input<string>('');\n\n /** Deshabilita el select */\n disabled = input<boolean>(false);\n\n /** Muestra el label como flotante (true) o como label estático encima (false, por defecto) */\n floatingLabel = input<boolean>(false);\n\n /** Activa input de búsqueda/filtro en el panel */\n searchable = input<boolean>(false);\n\n /** Placeholder del input de búsqueda */\n searchPlaceholder = input<string>('Buscar...');\n\n /** Muestra un botón para limpiar la selección */\n clearable = input<boolean>(false);\n\n /** Texto cuando no hay opciones tras filtrar */\n noResultsMessage = input<string>('Sin resultados');\n\n /** Aria-label del botón de limpiar */\n clearAriaLabel = input<string>('Limpiar selección');\n\n /**\n * Sincroniza el valor seleccionado con este query param de la URL.\n * Al seleccionar una opción se añade `?{urlParam}=value` a la URL.\n * Pasar `null` (default) deshabilita la sincronización.\n */\n urlParam = input<string | null>(null);\n\n /**\n * Emite el objeto NeuSelectOption completo (incluyendo data) al seleccionar una opción.\n * Emite null al limpiar la selección.\n * El valor de ngModel / formControl sigue siendo string.\n */\n readonly selectionChange = output<NeuSelectOption | null>();\n\n // Estado interno\n protected readonly _value = signal<string | null>(null);\n readonly isOpen = signal(false);\n readonly searchQuery = signal('');\n\n readonly hasError = computed(() => !!this.errorMessage());\n\n readonly filteredOptions = computed(() => {\n const q = this.searchQuery().toLowerCase().trim();\n if (!q) return this.options();\n return this.options().filter((o) => o.label.toLowerCase().includes(q));\n });\n\n readonly selectedLabel = computed(\n () => this.options().find((o) => o.value === this._value())?.label ?? null,\n );\n\n readonly _selectedOption = computed(\n () => this.options().find((o) => o.value === this._value()) ?? null,\n );\n\n // CVA\n private _onChange: (v: string | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n writeValue(val: string | null): void {\n this._value.set(val ?? null);\n }\n\n registerOnChange(fn: (v: string | null) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n private readonly _cvaDisabled = signal(false);\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\n }\n\n readonly isDisabledFinal = computed(() => this.disabled() || this._cvaDisabled());\n\n toggle(): void {\n if (!this.isDisabledFinal()) this.isOpen.update((v) => !v);\n if (this.isOpen()) {\n // Foco al primer item cuando abre con teclado\n requestAnimationFrame(() => {\n const first = this.elementRef.nativeElement.querySelector<HTMLElement>(\n '.neu-select__option:not([aria-disabled=\"true\"])',\n );\n first?.focus();\n });\n }\n }\n\n close(): void {\n this.isOpen.set(false);\n this.searchQuery.set('');\n this._onTouched();\n }\n\n /** Abre el panel y navega con flechas desde el trigger */\n onTriggerKey(event: Event): void {\n event.preventDefault();\n if (!this.isOpen()) {\n this.isOpen.set(true);\n requestAnimationFrame(() => {\n const first = this.elementRef.nativeElement.querySelector<HTMLElement>(\n '.neu-select__option:not([aria-disabled=\"true\"])',\n );\n first?.focus();\n });\n }\n }\n\n /** Navega entre opciones con flechas */\n focusOptionByIndex(event: Event, current: NeuSelectOption, dir: 1 | -1): void {\n event.preventDefault();\n const opts = this.filteredOptions().filter((o) => !o.disabled);\n const idx = opts.findIndex((o) => o.value === current.value);\n const next = opts[(idx + dir + opts.length) % opts.length];\n if (next) {\n const el = this.elementRef.nativeElement.querySelector<HTMLElement>(\n `#neu-select-opt-${next.value}`,\n );\n el?.focus();\n }\n }\n\n clearValue(event: MouseEvent): void {\n event.stopPropagation();\n this._value.set(null);\n this._onChange(null);\n const param = this.urlParam();\n if (param) this._urlState.setParam(param, null);\n this._onTouched();\n this.selectionChange.emit(null);\n this.close();\n }\n\n selectOption(option: NeuSelectOption): void {\n if (option.disabled) return;\n this._value.set(option.value);\n this._onChange(option.value);\n const param = this.urlParam();\n if (param) this._urlState.setParam(param, option.value);\n this.selectionChange.emit(option);\n this.close();\n }\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target as Node)) {\n this.isOpen.set(false);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\n\n/**\n * NeuralUI Slider Component\n *\n * Control deslizante accesible que envuelve el <input type=\"range\">\n * nativo con estilos personalizados y tooltips de valor.\n *\n * Uso:\n * <neu-slider [value]=\"volume\" (valueChange)=\"volume = $event\" />\n * <neu-slider [value]=\"50\" [min]=\"0\" [max]=\"100\" [step]=\"5\" [showValue]=\"true\" />\n */\n@Component({\n selector: 'neu-slider',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"neu-slider\" [class.neu-slider--disabled]=\"disabled()\">\n @if (label()) {\n <div class=\"neu-slider__header\">\n <label class=\"neu-slider__label\" [for]=\"sliderId\">{{ label() }}</label>\n @if (showValue()) {\n <span class=\"neu-slider__value\">{{ value() }}{{ unit() }}</span>\n }\n </div>\n } @else if (showValue()) {\n <div class=\"neu-slider__header\">\n <span></span>\n <span class=\"neu-slider__value\">{{ value() }}{{ unit() }}</span>\n </div>\n }\n <div class=\"neu-slider__track-wrap\">\n <div class=\"neu-slider__track\">\n <div class=\"neu-slider__fill\" [style.width.%]=\"fillPercent()\"></div>\n </div>\n <input\n class=\"neu-slider__input\"\n type=\"range\"\n [id]=\"sliderId\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"label() || 'Slider'\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n (input)=\"onInput($event)\"\n />\n </div>\n @if (showTicks()) {\n <div class=\"neu-slider__ticks\">\n <span>{{ min() }}{{ unit() }}</span>\n <span>{{ (max() - min()) / 2 + min() }}{{ unit() }}</span>\n <span>{{ max() }}{{ unit() }}</span>\n </div>\n }\n </div>\n `,\n styleUrl: './neu-slider.component.scss',\n})\nexport class NeuSliderComponent {\n private static _idCounter = 0;\n protected readonly sliderId = `neu-slider-${++NeuSliderComponent._idCounter}`;\n\n /** Valor actual */\n value = input<number>(0);\n\n /** Valor mínimo */\n min = input<number>(0);\n\n /** Valor máximo */\n max = input<number>(100);\n\n /** Paso */\n step = input<number>(1);\n\n /** Etiqueta */\n label = input<string>('');\n\n /** Muestra el valor numerico */\n showValue = input<boolean>(true);\n\n /** Muestra min/mid/max bajo la barra */\n showTicks = input<boolean>(false);\n\n /** Unidad a mostrar junto al valor */\n unit = input<string>('');\n\n /** Deshabilitado */\n disabled = input<boolean>(false);\n\n /** Emite al mover el slider */\n valueChange = output<number>();\n\n readonly fillPercent = computed(() => {\n const range = this.max() - this.min();\n if (range === 0) return 0;\n return ((this.value() - this.min()) / range) * 100;\n });\n\n onInput(event: Event): void {\n const val = Number((event.target as HTMLInputElement).value);\n this.valueChange.emit(val);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet _neuSwitchIdSeq = 0;\n\n/**\n * NeuralUI Switch Component\n *\n * Toggle animado para formularios de configuración en dashboards.\n * Usa el Electric-Blue (--neu-primary) cuando está activo.\n *\n * Uso:\n * <neu-switch label=\"Notificaciones\" [formControl]=\"notifsCtrl\" />\n */\n@Component({\n selector: 'neu-switch',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-switch-host' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuSwitchComponent),\n multi: true,\n },\n ],\n template: `\n <label class=\"neu-switch\" [class.neu-switch--disabled]=\"_isDisabled()\" [for]=\"_id\">\n <input\n type=\"checkbox\"\n role=\"switch\"\n class=\"neu-switch__input\"\n [id]=\"_id\"\n [attr.name]=\"name() || null\"\n [checked]=\"_checked()\"\n [disabled]=\"_isDisabled()\"\n (change)=\"onChange($event)\"\n (blur)=\"onBlur()\"\n />\n <span class=\"neu-switch__track\" [class.neu-switch__track--on]=\"_checked()\">\n <span class=\"neu-switch__thumb\" [class.neu-switch__thumb--on]=\"_checked()\"></span>\n </span>\n @if (label()) {\n <span class=\"neu-switch__label\">{{ label() }}</span>\n }\n </label>\n `,\n styleUrl: './neu-switch.component.scss',\n})\nexport class NeuSwitchComponent implements ControlValueAccessor {\n readonly label = input<string>('');\n readonly name = input<string>('');\n readonly disabled = input<boolean>(false);\n\n readonly _id = `neu-switch-${_neuSwitchIdSeq++}`;\n\n protected readonly _checked = signal(false);\n /** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState */\n private readonly _cvaDisabled = signal(false);\n protected readonly _isDisabled = computed(() => this.disabled() || this._cvaDisabled());\n\n private _onChange: (v: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n\n onChange(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this._checked.set(checked);\n this._onChange(checked);\n }\n\n onBlur(): void {\n this._onTouched();\n }\n\n writeValue(val: unknown): void {\n this._checked.set(!!val);\n }\n\n registerOnChange(fn: (v: boolean) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet _neuTextareaIdSeq = 0;\n\n/**\n * NeuralUI Textarea Component\n *\n * Textarea con floating label y soporte completo para Angular Forms.\n * Soporta auto-resize opcional.\n *\n * Uso:\n * <neu-textarea label=\"Descripción\" [formControl]=\"ctrl\" />\n * <neu-textarea label=\"Bio\" [rows]=\"5\" [autoResize]=\"true\" />\n */\n@Component({\n selector: 'neu-textarea',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-textarea-host' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuTextareaComponent),\n multi: true,\n },\n ],\n template: `\n <div\n class=\"neu-textarea__wrapper\"\n [class.neu-textarea__wrapper--focused]=\"_focused()\"\n [class.neu-textarea__wrapper--has-value]=\"hasValue()\"\n [class.neu-textarea__wrapper--error]=\"hasError()\"\n [class.neu-textarea__wrapper--disabled]=\"_isDisabledState()\"\n >\n <textarea\n #textareaRef\n class=\"neu-textarea__field\"\n [id]=\"_id\"\n [rows]=\"rows()\"\n [placeholder]=\"' '\"\n [attr.disabled]=\"_isDisabledState() ? true : null\"\n [attr.readonly]=\"readonly() ? true : null\"\n [attr.required]=\"required() ? true : null\"\n [attr.maxlength]=\"maxlength() ?? null\"\n [attr.name]=\"name() || null\"\n [attr.aria-describedby]=\"hasError() ? _id + '-error' : hint() ? _id + '-hint' : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [style.resize]=\"_resizeStyle()\"\n [value]=\"_value()\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n ></textarea>\n <label class=\"neu-textarea__label\" [for]=\"_id\">{{ label() }}</label>\n @if (hint() && !hasError()) {\n <span class=\"neu-textarea__hint\" [id]=\"_id + '-hint'\">{{ hint() }}</span>\n }\n @if (hasError()) {\n <span class=\"neu-textarea__error\" role=\"alert\" [id]=\"_id + '-error'\">{{\n errorMessage()\n }}</span>\n }\n </div>\n `,\n styleUrl: './neu-textarea.component.scss',\n})\nexport class NeuTextareaComponent implements ControlValueAccessor {\n readonly label = input('');\n readonly rows = input<number>(3);\n readonly autoResize = input<boolean>(false);\n /** Permite al usuario redimensionar el campo manualmente (por defecto: true) */\n readonly resizable = input<boolean>(true);\n readonly errorMessage = input<string>('');\n readonly hint = input<string>('');\n readonly disabled = input<boolean>(false);\n readonly readonly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly name = input<string>('');\n readonly maxlength = input<number | null>(null);\n\n readonly _id = `neu-textarea-${_neuTextareaIdSeq++}`;\n\n protected readonly _value = signal('');\n protected readonly _focused = signal(false);\n protected readonly _isDisabled = signal(false);\n\n readonly _isDisabledState = computed(() => this.disabled() || this._isDisabled());\n readonly hasValue = computed(() => this._value().length > 0);\n readonly hasError = computed(() => !!this.errorMessage());\n readonly _resizeStyle = computed(() => {\n if (this.autoResize()) return 'none';\n return this.resizable() ? 'vertical' : 'none';\n });\n\n private readonly _textareaRef = viewChild<ElementRef<HTMLTextAreaElement>>('textareaRef');\n\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n constructor() {\n effect(() => {\n if (this.autoResize()) {\n const el = this._textareaRef()?.nativeElement;\n if (el) {\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }\n }\n });\n }\n\n onInput(event: Event): void {\n const el = event.target as HTMLTextAreaElement;\n this._value.set(el.value);\n this._onChange(el.value);\n\n if (this.autoResize()) {\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }\n }\n\n onFocus(): void {\n this._focused.set(true);\n }\n\n onBlur(): void {\n this._focused.set(false);\n this._onTouched();\n }\n\n writeValue(val: unknown): void {\n this._value.set(val == null ? '' : String(val));\n }\n\n registerOnChange(fn: (v: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NeuButtonSize } from '../button/neu-button.component';\nimport { NeuIconComponent } from '../icon/neu-icon.component';\n\nexport interface NeuToggleOption<T = unknown> {\n /** Texto visible del botón */\n label: string;\n /** Valor asociado a esta opción */\n value: T;\n /** Nombre de icono Lucide (opcional) */\n icon?: string;\n /** Deshabilita solo esta opción */\n disabled?: boolean;\n}\n\n/**\n * NeuralUI ToggleButtonGroup Component\n *\n * Grupo de botones de selección (single o múltiple).\n * Equivalente técnicamente superior al SelectButton de PrimeNG.\n *\n * Uso (single):\n * <neu-toggle-button-group [options]=\"opts\" [(ngModel)]=\"value\" />\n *\n * Uso (múltiple):\n * <neu-toggle-button-group [options]=\"opts\" [multiple]=\"true\" [(ngModel)]=\"values\" />\n */\n@Component({\n selector: 'neu-toggle-button-group',\n imports: [NeuIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuToggleButtonGroupComponent),\n multi: true,\n },\n ],\n host: { class: 'neu-toggle-group-host' },\n template: `\n <div\n class=\"neu-toggle-group\"\n [class]=\"groupClasses()\"\n role=\"group\"\n [attr.aria-disabled]=\"_isDisabled() || null\"\n >\n @for (opt of options(); track opt.value) {\n <button\n type=\"button\"\n class=\"neu-toggle-group__btn\"\n [class.neu-toggle-group__btn--active]=\"isSelected(opt.value)\"\n [class.neu-toggle-group__btn--disabled]=\"opt.disabled || _isDisabled()\"\n [attr.aria-pressed]=\"isSelected(opt.value)\"\n [disabled]=\"opt.disabled || _isDisabled() ? '' : null\"\n (click)=\"toggle(opt)\"\n (blur)=\"onBlur()\"\n >\n @if (opt.icon) {\n <neu-icon [name]=\"opt.icon\" size=\"16px\" strokeWidth=\"2\" />\n }\n {{ opt.label }}\n </button>\n }\n </div>\n `,\n styleUrl: './neu-toggle-button-group.component.scss',\n})\nexport class NeuToggleButtonGroupComponent<T = unknown> implements ControlValueAccessor {\n /** Lista de opciones del grupo */\n options = input<NeuToggleOption<T>[]>([]);\n\n /**\n * Permite seleccionar múltiples opciones.\n * - false (por defecto): valor es `T | null`\n * - true: valor es `T[]`\n */\n multiple = input<boolean>(false);\n\n /** Tamaño visual */\n size = input<NeuButtonSize>('md');\n\n /** Deshabilita todo el grupo */\n disabled = input<boolean>(false);\n\n /** Emite el nuevo valor al cambiar (útil sin formControl) */\n neuChange = output<T | T[] | null>();\n\n readonly _value = signal<T | T[] | null>(null);\n readonly _isDisabled = signal(false);\n\n readonly groupClasses = computed(() => ({\n 'neu-toggle-group': true,\n [`neu-toggle-group--${this.size()}`]: true,\n 'neu-toggle-group--disabled': this._isDisabled(),\n }));\n\n isSelected(value: T): boolean {\n const v = this._value();\n if (this.multiple()) {\n return Array.isArray(v) && (v as T[]).includes(value);\n }\n return v === value;\n }\n\n toggle(opt: NeuToggleOption<T>): void {\n if (opt.disabled || this._isDisabled()) return;\n\n let next: T | T[] | null;\n\n if (this.multiple()) {\n const current: T[] = Array.isArray(this._value()) ? (this._value() as T[]) : [];\n const idx = current.indexOf(opt.value);\n next = idx >= 0 ? current.filter((_, i) => i !== idx) : [...current, opt.value];\n } else {\n next = this._value() === opt.value ? null : opt.value;\n }\n\n this._value.set(next);\n this._onChange(next);\n this._onTouched();\n this.neuChange.emit(next);\n }\n\n onBlur(): void {\n this._onTouched();\n }\n\n // ---- CVA ----\n\n private _onChange: (v: unknown) => void = () => {};\n private _onTouched: () => void = () => {};\n\n writeValue(val: T | T[] | null): void {\n if (val === null || val === undefined) {\n this._value.set(this.multiple() ? ([] as T[]) : null);\n } else {\n this._value.set(val);\n }\n }\n\n registerOnChange(fn: (v: unknown) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled.set(isDisabled);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nexport interface NeuBreadcrumbItem {\n /** Etiqueta visible */\n label: string;\n /** Ruta interna (RouterLink) */\n route?: string | string[];\n /** URL externa */\n url?: string;\n /** Icono Lucide opcional */\n icon?: string;\n}\n\n/**\n * NeuralUI Breadcrumb Component\n *\n * Ruta de navegación jerárquica. El último elemento se muestra\n * como activo (sin enlace).\n *\n * Uso:\n * <neu-breadcrumb [items]=\"breadcrumbs\" />\n *\n * items = [\n * { label: 'Inicio', route: '/' },\n * { label: 'Componentes', route: '/components' },\n * { label: 'Breadcrumb' },\n * ];\n */\n@Component({\n selector: 'neu-breadcrumb',\n imports: [RouterLink],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav class=\"neu-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"neu-breadcrumb__list\">\n @for (item of items(); track item.label; let last = $last) {\n <li class=\"neu-breadcrumb__item\" [class.neu-breadcrumb__item--active]=\"last\">\n @if (!last) {\n @if (item.route) {\n <a class=\"neu-breadcrumb__link\" [routerLink]=\"item.route\">{{ item.label }}</a>\n } @else if (item.url) {\n <a class=\"neu-breadcrumb__link\" [href]=\"item.url\" target=\"_blank\" rel=\"noopener\">{{\n item.label\n }}</a>\n } @else {\n <span class=\"neu-breadcrumb__link\">{{ item.label }}</span>\n }\n <span class=\"neu-breadcrumb__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n } @else {\n <span class=\"neu-breadcrumb__current\" aria-current=\"page\">{{ item.label }}</span>\n }\n </li>\n }\n </ol>\n </nav>\n `,\n styleUrl: './neu-breadcrumb.component.scss',\n})\nexport class NeuBreadcrumbComponent {\n /** Lista de ítems de navegación */\n items = input<NeuBreadcrumbItem[]>([]);\n\n /** Separador personalizable */\n separator = input<string>('/');\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\n/** @internal — componente flotante del tooltip, renderizado vía CDK Portal */\n@Component({\n selector: 'neu-tooltip-overlay',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-tooltip',\n role: 'tooltip',\n '[id]': 'tooltipId()',\n },\n template: `<span class=\"neu-tooltip__text\">{{ text() }}</span>`,\n styleUrl: './neu-tooltip.component.scss',\n})\nexport class NeuTooltipOverlayComponent {\n readonly text = input.required<string>();\n readonly tooltipId = input<string>('');\n}\n","import {\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n Injector,\n OnDestroy,\n inject,\n input,\n} from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport { NeuTooltipOverlayComponent } from './neu-tooltip.component';\n\nexport type NeuTooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * NeuralUI Tooltip Directive\n *\n * Muestra un globo informativo al hacer hover/focus sobre el elemento host.\n * Usa CDK Overlay para posicionamiento robusto.\n *\n * Uso:\n * <button [neuTooltip]=\"'Guardar cambios'\">Guardar</button>\n * <button [neuTooltip]=\"'Eliminar'\" neuTooltipPosition=\"bottom\">Eliminar</button>\n */\n@Directive({\n selector: '[neuTooltip]',\n host: {\n '[attr.aria-describedby]': '_tooltipId',\n // Sólo añadimos tabindex en elementos que no son nativamente focusables\n '[attr.tabindex]': '_needsTabindex() ? \"0\" : null',\n },\n})\nexport class NeuTooltipDirective implements OnDestroy {\n readonly neuTooltip = input.required<string>();\n readonly neuTooltipPosition = input<NeuTooltipPosition>('top');\n readonly neuTooltipDisabled = input<boolean>(false);\n\n private readonly _overlay = inject(Overlay);\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\n private readonly _injector = inject(Injector);\n\n readonly _tooltipId = `neu-tooltip-${Math.random().toString(36).slice(2, 7)}`;\n\n /** Elementos HTML nativamente focusables que no necesitan tabindex extra */\n private readonly _NATIVE_FOCUSABLE = /^(a|button|input|select|textarea|details|summary)$/i;\n protected readonly _needsTabindex = () =>\n !this._NATIVE_FOCUSABLE.test(this._elementRef.nativeElement.tagName);\n\n private _overlayRef: OverlayRef | null = null;\n private _tooltipRef: ComponentRef<NeuTooltipOverlayComponent> | null = null;\n private _hideTimeout: ReturnType<typeof setTimeout> | null = null;\n\n @HostListener('mouseenter')\n @HostListener('focus')\n show(): void {\n if (this.neuTooltipDisabled() || !this.neuTooltip()) return;\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = null;\n }\n if (this._overlayRef?.hasAttached()) return;\n\n this._createOverlay();\n const portal = new ComponentPortal(NeuTooltipOverlayComponent, null, this._injector);\n this._tooltipRef = this._overlayRef!.attach(portal);\n this._tooltipRef!.setInput('text', this.neuTooltip());\n this._tooltipRef!.setInput('tooltipId', this._tooltipId);\n }\n\n @HostListener('mouseleave')\n @HostListener('blur')\n hide(): void {\n this._hideTimeout = setTimeout(() => this._detach(), 100);\n }\n\n private _createOverlay(): void {\n if (this._overlayRef) return;\n\n const positionStrategy = this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withPositions(this._getPositions());\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\n panelClass: 'neu-tooltip-panel',\n });\n }\n\n private _getPositions(): ConnectedPosition[] {\n const map: Record<NeuTooltipPosition, ConnectedPosition> = {\n top: {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -8,\n },\n bottom: {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 8,\n },\n left: {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -8,\n },\n right: {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: 8,\n },\n };\n return [map[this.neuTooltipPosition()], map['top'], map['bottom']];\n }\n\n private _detach(): void {\n this._overlayRef?.detach();\n this._tooltipRef = null;\n }\n\n ngOnDestroy(): void {\n if (this._hideTimeout) clearTimeout(this._hideTimeout);\n this._overlayRef?.dispose();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ViewEncapsulation,\n afterNextRender,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive, Router, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NeuIconComponent } from '../icon/neu-icon.component';\nimport { NeuTooltipDirective } from '../tooltip/neu-tooltip.directive';\n\n// ---- Tipos públicos ----\n\n/**\n * Ítem de navegación con soporte para 3 niveles de profundidad.\n *\n * Destino del enlace — usa UNO de los dos:\n * - `route` → navegación interna Angular (RouterLink)\n * - `href` → URL externa, se abre en nueva pestaña con rel=\"noopener noreferrer\"\n *\n * Los ítems con `children` actúan como grupo acordeón (sin destino propio).\n * Máximo 3 niveles: raíz → hijos → nietos.\n * Los nietos no pueden tener `children`.\n */\nexport interface NeuNavItem {\n id: string;\n label: string;\n icon: string;\n /** Ruta Angular interna (RouterLink). Excluye `href`. */\n route?: string;\n /** URL externa. Se abre en nueva pestaña. Excluye `route`. */\n href?: string;\n /** Ítems hijo (nivel 2). Cada hijo puede tener sus propios `children` (nivel 3). */\n children?: NeuNavItem[];\n badge?: string;\n badgeVariant?: 'default' | 'success' | 'warning' | 'danger' | 'info';\n disabled?: boolean;\n}\n\n@Component({\n selector: 'neu-nav',\n imports: [RouterLink, RouterLinkActive, NeuIconComponent, NeuTooltipDirective],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"neu-nav-wrapper\" [class.neu-nav-wrapper--collapsed]=\"isCollapsed()\">\n <nav\n class=\"neu-nav\"\n [class.neu-nav--collapsed]=\"isCollapsed()\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n <!-- Brand slot -->\n <div class=\"neu-nav__brand\">\n <!-- Icono visible solo en modo colapsado -->\n <div class=\"neu-nav__brand-icon\">\n <ng-content select=\"[neu-nav-brand-icon]\" />\n </div>\n <!-- Contenido completo visible en modo expandido -->\n <div class=\"neu-nav__brand-content\">\n <ng-content select=\"[neu-nav-brand]\" />\n </div>\n </div>\n\n <!-- Items (nivel 1) -->\n <div class=\"neu-nav__items\" role=\"list\">\n @for (item of items(); track item.id) {\n @if (item.children?.length) {\n <!-- NIVEL 1 — Grupo acordeón -->\n <div\n class=\"neu-nav__group\"\n [class.neu-nav__group--open]=\"isGroupOpen(item.id)\"\n role=\"listitem\"\n (mouseenter)=\"onGroupMouseEnter(item, $event)\"\n (mouseleave)=\"onGroupMouseLeave()\"\n >\n <button\n class=\"neu-nav__item neu-nav__item--parent\"\n type=\"button\"\n [class.neu-nav__item--active]=\"isGroupActive(item)\"\n [class.neu-nav__item--disabled]=\"item.disabled\"\n [attr.aria-expanded]=\"isGroupOpen(item.id)\"\n [attr.aria-haspopup]=\"true\"\n [attr.disabled]=\"item.disabled ? '' : null\"\n [neuTooltip]=\"isCollapsed() ? item.label : ''\"\n neuTooltipPosition=\"right\"\n (click)=\"!isCollapsed() && toggleGroup(item.id)\"\n >\n <neu-icon\n [name]=\"item.icon\"\n size=\"18px\"\n class=\"neu-nav__item-icon\"\n aria-hidden=\"true\"\n />\n <span class=\"neu-nav__item-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span\n class=\"neu-nav__item-badge neu-nav__item-badge--{{\n item.badgeVariant ?? 'default'\n }}\"\n >{{ item.badge }}</span\n >\n }\n <neu-icon\n name=\"lucideChevronRight\"\n size=\"14px\"\n class=\"neu-nav__group-chevron\"\n aria-hidden=\"true\"\n />\n </button>\n\n <!-- Submenú nivel 2 -->\n @if (!isCollapsed() && isGroupOpen(item.id)) {\n <div class=\"neu-nav__submenu\" role=\"list\">\n @for (child of item.children; track child.id) {\n @if (child.children?.length) {\n <!-- NIVEL 2 — Subgrupo acordeón -->\n <div\n class=\"neu-nav__group neu-nav__group--nested\"\n [class.neu-nav__group--open]=\"isGroupOpen(child.id)\"\n role=\"listitem\"\n >\n <button\n class=\"neu-nav__item neu-nav__item--child neu-nav__item--parent\"\n type=\"button\"\n [class.neu-nav__item--active]=\"isGroupActive(child)\"\n [class.neu-nav__item--disabled]=\"child.disabled\"\n [attr.aria-expanded]=\"isGroupOpen(child.id)\"\n [attr.aria-haspopup]=\"true\"\n [attr.disabled]=\"child.disabled ? '' : null\"\n (click)=\"toggleGroup(child.id)\"\n >\n <neu-icon\n [name]=\"child.icon\"\n size=\"15px\"\n class=\"neu-nav__item-icon\"\n aria-hidden=\"true\"\n />\n <span class=\"neu-nav__item-label\">{{ child.label }}</span>\n @if (child.badge) {\n <span\n class=\"neu-nav__item-badge neu-nav__item-badge--{{\n child.badgeVariant ?? 'default'\n }}\"\n >{{ child.badge }}</span\n >\n }\n <neu-icon\n name=\"lucideChevronRight\"\n size=\"13px\"\n class=\"neu-nav__group-chevron\"\n aria-hidden=\"true\"\n />\n </button>\n\n <!-- Submenú nivel 3 -->\n @if (isGroupOpen(child.id)) {\n <div class=\"neu-nav__submenu neu-nav__submenu--nested\" role=\"list\">\n @for (grand of child.children; track grand.id) {\n @if (grand.href) {\n <!-- NIVEL 3 — Enlace externo -->\n <a\n class=\"neu-nav__item neu-nav__item--grandchild\"\n [class.neu-nav__item--disabled]=\"grand.disabled\"\n [href]=\"grand.disabled ? null : grand.href\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-disabled]=\"grand.disabled ? 'true' : null\"\n role=\"listitem\"\n >\n <neu-icon\n [name]=\"grand.icon\"\n size=\"14px\"\n class=\"neu-nav__item-icon\"\n aria-hidden=\"true\"\n />\n <span class=\"neu-nav__item-label\">{{ grand.label }}</span>\n <neu-icon\n name=\"lucideExternalLink\"\n size=\"11px\"\n class=\"neu-nav__external-icon\"\n aria-label=\"(abre en nueva pestaña)\"\n />\n </a>\n } @else {\n <!-- NIVEL 3 — Enlace interno -->\n <a\n class=\"neu-nav__item neu-nav__item--grandchild\"\n [class.neu-nav__item--disabled]=\"grand.disabled\"\n [routerLink]=\"grand.disabled ? null : (grand.route ?? null)\"\n routerLinkActive=\"neu-nav__item--active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [attr.aria-current]=\"\n isCurrentRoute(grand.route ?? '') ? 'page' : null\n \"\n role=\"listitem\"\n >\n <neu-icon\n [name]=\"grand.icon\"\n size=\"14px\"\n class=\"neu-nav__item-icon\"\n aria-hidden=\"true\"\n />\n <span class=\"neu-nav__item-label\">{{ grand.label }}</span>\n @if (grand.badge) {\n <span\n class=\"neu-nav__item-badge neu-nav__item-badge--{{\n grand.badgeVariant ?? 'default'\n }}\"\n >{{ grand.badge }}</span\n >\n }\n </a>\n }\n }\n </div>\n }\n </div>\n } @else if (child.href) {\n <!-- NIVEL 2 — Enlace externo -->\n <a\n class=\"neu-nav__item neu-nav__item--child\"\n [class.neu-nav__item--disabled]=\"child.disabled\"\n [href]=\"child.disabled ? null : child.href\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-disabled]=\"child.disabled ? 'true' : null\"\n role=\"listitem\"\n >\n <neu-icon\n [name]=\"child.icon\"\n size=\"15px\"\n class=\"neu-nav__item-icon\"\n aria-hidden=\"true\"\n />\n <span class=\"neu-nav__item-label\">{{ child.label }}</span>\n @if (child.badge) {\n <span\n class=\"neu-nav__item-badge neu-nav__item-badge--{{\n child.badgeVariant ?? 'default'\n }}\"\n >{{ child.badge }}</span\n >\n }\n <neu-icon\n name=\"lucideExternalLink\"\n size=\"12px\"\n class=\"neu-nav__external-icon\"\n aria-label=\"(abre en nueva pestaña)\"\n />\n </a>\n } @else {\n <!-- NIVEL 2 — Enlace interno -->\n <a\n class=\"neu-nav__item neu-nav__item--child\"\n [class.neu-nav__item--disabled]=\"child.disabled\"\n [routerLink]=\"child.disabled ? null : (child.route ?? null)\"\n routerLinkActive=\"neu-nav__item--active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [attr.aria-current]=\"isCurrentRoute(child.route ?? '') ? 'page' : null\"\n role=\"listitem\"\n >\n <neu-icon\n [name]=\"child.icon\"\n size=\"15px\"\n class=\"neu-nav__item-icon\"\n aria-hidden=\"true\"\n />\n <span class=\"neu-nav__item-label\">{{ child.label }}</span>\n @if (child.badge) {\n <span\n class=\"neu-nav__item-badge neu-nav__item-badge--{{\n child.badgeVariant ?? 'default'\n }}\"\n >{{ child.badge }}</span\n >\n }\n </a>\n }\n }\n </div>\n }\n </div>\n } @else if (item.href) {\n <!-- NIVEL 1 — Enlace externo -->\n <a\n class=\"neu-nav__item\"\n [class.neu-nav__item--disabled]=\"item.disabled\"\n [href]=\"item.disabled ? null : item.href\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\n [neuTooltip]=\"isCollapsed() ? item.label : ''\"\n neuTooltipPosition=\"right\"\n role=\"listitem\"\n >\n <neu-icon\n [name]=\"item.icon\"\n size=\"18px\"\n class=\"neu-nav__item-icon\"\n aria-hidden=\"true\"\n />\n <span class=\"neu-nav__item-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span\n class=\"neu-nav__item-badge neu-nav__item-badge--{{\n item.badgeVariant ?? 'default'\n }}\"\n >{{ item.badge }}</span\n >\n }\n <neu-icon\n name=\"lucideExternalLink\"\n size=\"13px\"\n class=\"neu-nav__external-icon\"\n aria-label=\"(abre en nueva pestaña)\"\n />\n </a>\n } @else {\n <!-- NIVEL 1 — Enlace interno -->\n <a\n class=\"neu-nav__item\"\n [class.neu-nav__item--disabled]=\"item.disabled\"\n [routerLink]=\"item.disabled ? null : (item.route ?? null)\"\n routerLinkActive=\"neu-nav__item--active\"\n [routerLinkActiveOptions]=\"{ exact: item.route === '/' }\"\n [attr.aria-current]=\"isCurrentRoute(item.route ?? '') ? 'page' : null\"\n [neuTooltip]=\"isCollapsed() ? item.label : ''\"\n neuTooltipPosition=\"right\"\n role=\"listitem\"\n >\n <neu-icon\n [name]=\"item.icon\"\n size=\"18px\"\n class=\"neu-nav__item-icon\"\n aria-hidden=\"true\"\n />\n <span class=\"neu-nav__item-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span\n class=\"neu-nav__item-badge neu-nav__item-badge--{{\n item.badgeVariant ?? 'default'\n }}\"\n >{{ item.badge }}</span\n >\n }\n </a>\n }\n }\n </div>\n\n <!-- Footer slot -->\n <div class=\"neu-nav__footer\">\n <ng-content select=\"[neu-nav-footer]\" />\n </div>\n </nav>\n\n <!-- Flyout panel para grupos en modo colapsado -->\n @if (flyoutState(); as flyout) {\n <div\n class=\"neu-nav__flyout\"\n [style.top.px]=\"flyout.top\"\n [style.left.px]=\"flyout.left\"\n role=\"menu\"\n (mouseenter)=\"onFlyoutMouseEnter()\"\n (mouseleave)=\"onFlyoutMouseLeave()\"\n >\n <div class=\"neu-nav__flyout-title\">{{ flyout.item.label }}</div>\n @for (child of flyout.item.children ?? []; track child.id) {\n @if (child.children?.length) {\n <div class=\"neu-nav__flyout-group\">\n <span class=\"neu-nav__flyout-group-label\">{{ child.label }}</span>\n @for (grand of child.children; track grand.id) {\n @if (grand.href) {\n <a\n class=\"neu-nav__flyout-item\"\n role=\"menuitem\"\n [href]=\"grand.href\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"flyoutState.set(null)\"\n >\n <neu-icon [name]=\"grand.icon\" size=\"13px\" aria-hidden=\"true\" />\n <span>{{ grand.label }}</span>\n <neu-icon\n name=\"lucideExternalLink\"\n size=\"10px\"\n class=\"neu-nav__external-icon\"\n />\n </a>\n } @else {\n <a\n class=\"neu-nav__flyout-item\"\n role=\"menuitem\"\n [routerLink]=\"grand.route\"\n routerLinkActive=\"neu-nav__flyout-item--active\"\n (click)=\"flyoutState.set(null)\"\n >\n <neu-icon [name]=\"grand.icon\" size=\"13px\" aria-hidden=\"true\" />\n <span>{{ grand.label }}</span>\n </a>\n }\n }\n </div>\n } @else if (child.href) {\n <a\n class=\"neu-nav__flyout-item\"\n role=\"menuitem\"\n [href]=\"child.href\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"flyoutState.set(null)\"\n >\n <neu-icon [name]=\"child.icon\" size=\"13px\" aria-hidden=\"true\" />\n <span>{{ child.label }}</span>\n <neu-icon name=\"lucideExternalLink\" size=\"10px\" class=\"neu-nav__external-icon\" />\n </a>\n } @else {\n <a\n class=\"neu-nav__flyout-item\"\n role=\"menuitem\"\n [routerLink]=\"child.route\"\n routerLinkActive=\"neu-nav__flyout-item--active\"\n (click)=\"flyoutState.set(null)\"\n >\n <neu-icon [name]=\"child.icon\" size=\"13px\" aria-hidden=\"true\" />\n <span>{{ child.label }}</span>\n </a>\n }\n }\n </div>\n }\n\n <!-- Pestaña collapse/expand — fuera del nav para no ser recortada -->\n @if (collapsible()) {\n <button\n class=\"neu-nav__toggle-tab\"\n type=\"button\"\n [attr.aria-label]=\"isCollapsed() ? expandLabel() : collapseLabel()\"\n [attr.aria-expanded]=\"!isCollapsed()\"\n (click)=\"toggleCollapse()\"\n >\n <neu-icon\n [name]=\"isCollapsed() ? 'lucideChevronRight' : 'lucideChevronLeft'\"\n size=\"12px\"\n aria-hidden=\"true\"\n />\n </button>\n }\n </div>\n `,\n styleUrl: './neu-nav.component.scss',\n})\nexport class NeuNavComponent {\n private readonly router = inject(Router);\n\n // ---- Señal reactiva de ruta activa ----\n private readonly currentUrl = toSignal(\n this.router.events.pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd)),\n { initialValue: null },\n );\n\n // ---- Inputs ----\n\n /** Lista de ítems de navegación */\n items = input<NeuNavItem[]>([]);\n\n /** Estado inicial colapsado */\n collapsed = input<boolean>(false);\n\n /** Muestra el botón de colapsar/expandir */\n collapsible = input<boolean>(true);\n\n /** Etiqueta accesible del <nav> */\n ariaLabel = input<string>('Navegación principal');\n\n /** Aria-label del botón cuando el nav está colapsado */\n expandLabel = input<string>('Expandir menú');\n\n /** Aria-label del botón cuando el nav está expandido */\n collapseLabel = input<string>('Colapsar menú');\n\n /** Emite cuando cambia el estado colapsado */\n collapsedChange = output<boolean>();\n\n // ---- Estado interno ----\n\n // Sigue el input `collapsed` del padre (permite el configurador)\n // pero puede ser sobreescrito localmente con toggleCollapse()\n readonly isCollapsed = signal(this.collapsed());\n private readonly openGroups = signal<Set<string>>(new Set());\n\n // ---- Flyout para modo colapsado ----\n readonly flyoutState = signal<{ item: NeuNavItem; top: number; left: number } | null>(null);\n private _flyoutTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n // Sincroniza isCollapsed cuando el input cambia desde el padre\n effect(() => this.isCollapsed.set(this.collapsed()), { allowSignalWrites: true });\n // Abrimos el grupo activo DESPUÉS de que el padre haya pasado los inputs\n afterNextRender(() => this._openActiveGroup());\n // Limpiamos el timer del flyout al destruir el componente\n inject(DestroyRef).onDestroy(() => {\n if (this._flyoutTimer) clearTimeout(this._flyoutTimer);\n });\n }\n\n // ---- Helpers de estado ----\n\n toggleCollapse(): void {\n this.isCollapsed.update((v) => {\n const next = !v;\n this.collapsedChange.emit(next);\n return next;\n });\n }\n\n toggleGroup(id: string): void {\n this.openGroups.update((s) => {\n const next = new Set(s);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }\n\n isGroupOpen(id: string): boolean {\n return this.openGroups().has(id);\n }\n\n isCurrentRoute(route: string): boolean {\n if (!route) return false;\n // Consume la señal para que OnPush re-evalúe tras navegación\n this.currentUrl();\n return this.router.url === route || this.router.url.startsWith(route + '?');\n }\n\n isGroupActive(item: NeuNavItem): boolean {\n if (!item.children?.length) return false;\n return item.children.some(\n (c) =>\n this.isCurrentRoute(c.route ?? '') ||\n (c.children?.some((g) => this.isCurrentRoute(g.route ?? '')) ?? false),\n );\n }\n\n // ---- Flyout handlers ----\n\n onGroupMouseEnter(item: NeuNavItem, event: MouseEvent): void {\n if (!this.isCollapsed() || !item.children?.length) return;\n if (this._flyoutTimer) {\n clearTimeout(this._flyoutTimer);\n this._flyoutTimer = null;\n }\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n this.flyoutState.set({ item, top: rect.top, left: rect.right });\n }\n\n onGroupMouseLeave(): void {\n if (!this.isCollapsed()) return;\n this._flyoutTimer = setTimeout(() => this.flyoutState.set(null), 150);\n }\n\n onFlyoutMouseEnter(): void {\n if (this._flyoutTimer) {\n clearTimeout(this._flyoutTimer);\n this._flyoutTimer = null;\n }\n }\n\n onFlyoutMouseLeave(): void {\n this._flyoutTimer = setTimeout(() => this.flyoutState.set(null), 150);\n }\n\n private _openActiveGroup(): void {\n const toOpen = new Set<string>();\n for (const item of this.items()) {\n if (!item.children) continue;\n for (const child of item.children) {\n if (child.route && this.router.url.startsWith(child.route)) {\n toOpen.add(item.id);\n }\n if (child.children) {\n for (const grand of child.children) {\n if (grand.route && this.router.url.startsWith(grand.route)) {\n toOpen.add(item.id);\n toOpen.add(child.id);\n }\n }\n }\n }\n }\n if (toOpen.size > 0) {\n this.openGroups.set(toOpen);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\n\n/**\n * NeuralUI Pagination Component\n *\n * Paginación accesible con navegación por páginas, primera/última y ellipsis.\n *\n * Uso:\n * <neu-pagination [total]=\"200\" [pageSize]=\"10\" [page]=\"currentPage\"\n * (pageChange)=\"currentPage = $event\" />\n */\n@Component({\n selector: 'neu-pagination',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav class=\"neu-pagination\" aria-label=\"Paginación\">\n <!-- Anterior -->\n <button\n class=\"neu-pagination__btn neu-pagination__btn--nav\"\n type=\"button\"\n [disabled]=\"page() <= 1\"\n [attr.aria-label]=\"'Página anterior'\"\n (click)=\"go(page() - 1)\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n\n <!-- Páginas -->\n @for (p of pages(); track p) {\n @if (p === -1) {\n <span class=\"neu-pagination__ellipsis\" aria-hidden=\"true\">…</span>\n } @else {\n <button\n class=\"neu-pagination__btn\"\n [class.neu-pagination__btn--active]=\"p === page()\"\n type=\"button\"\n [attr.aria-label]=\"'Página ' + p\"\n [attr.aria-current]=\"p === page() ? 'page' : null\"\n (click)=\"go(p)\"\n >\n {{ p }}\n </button>\n }\n }\n\n <!-- Siguiente -->\n <button\n class=\"neu-pagination__btn neu-pagination__btn--nav\"\n type=\"button\"\n [disabled]=\"page() >= totalPages()\"\n [attr.aria-label]=\"'Página siguiente'\"\n (click)=\"go(page() + 1)\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </nav>\n `,\n styleUrl: './neu-pagination.component.scss',\n})\nexport class NeuPaginationComponent {\n /** Página actual (1-indexed) */\n page = input<number>(1);\n\n /** Total de ítems */\n total = input<number>(0);\n\n /** Ítems por página */\n pageSize = input<number>(10);\n\n /** Número máximo de botones de página visibles (sin contar anterior/siguiente) */\n maxVisible = input<number>(7);\n\n /** Emite la nueva página al hacer click */\n pageChange = output<number>();\n\n readonly totalPages = computed(() => Math.max(1, Math.ceil(this.total() / this.pageSize())));\n\n readonly pages = computed((): (number | -1)[] => {\n const total = this.totalPages();\n const current = this.page();\n const max = this.maxVisible();\n\n if (total <= max) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const half = Math.floor(max / 2);\n let start = Math.max(2, current - half + 1);\n let end = Math.min(total - 1, start + max - 3);\n if (end - start < max - 3) start = Math.max(2, end - (max - 4));\n\n const result: (number | -1)[] = [1];\n if (start > 2) result.push(-1);\n for (let i = start; i <= end; i++) result.push(i);\n if (end < total - 1) result.push(-1);\n result.push(total);\n return result;\n });\n\n go(page: number): void {\n const clamped = Math.min(this.totalPages(), Math.max(1, page));\n if (clamped !== this.page()) {\n this.pageChange.emit(clamped);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { NeuUrlStateService } from '../url-state/neu-url-state.service';\nimport { NeuIconComponent } from '../icon/neu-icon.component';\n\n/**\n * NeuralUI Sidebar Component\n *\n * El estado abierto/cerrado se gestiona automáticamente desde la URL\n * via NeuUrlStateService (?menu=open por defecto).\n *\n * Modos:\n * - overlay (default): panel flotante sobre el contenido con backdrop\n * - persistent: sidebar fijo integrado en el layout (desktop)\n *\n * Uso:\n * <neu-sidebar urlParam=\"menu\" [persistent]=\"isDesktop()\">\n * <span neu-sidebar-header>Mi App</span>\n * <nav>...</nav>\n * <div neu-sidebar-footer>...</div>\n * </neu-sidebar>\n *\n * Abrir desde cualquier parte:\n * inject(NeuUrlStateService).setParam('menu', 'open', false);\n */\n@Component({\n selector: 'neu-sidebar',\n imports: [NeuIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- Overlay de fondo — solo visible en modo overlay -->\n @if (!persistent()) {\n <div\n class=\"neu-sidebar__overlay\"\n [class.neu-sidebar__overlay--visible]=\"isOpen()\"\n (click)=\"close()\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <!-- Panel lateral -->\n <aside\n class=\"neu-sidebar\"\n [class.neu-sidebar--open]=\"isOpen()\"\n [class.neu-sidebar--persistent]=\"persistent()\"\n [class.neu-sidebar--right]=\"side() === 'right'\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-hidden]=\"!isOpen() && !persistent()\"\n [attr.inert]=\"!isOpen() && !persistent() ? '' : null\"\n >\n <!-- Cabecera -->\n @if (!hideHeader()) {\n <div class=\"neu-sidebar__header\">\n <div class=\"neu-sidebar__title\">\n <ng-content select=\"[neu-sidebar-header]\" />\n </div>\n @if (!persistent()) {\n <button\n class=\"neu-sidebar__close\"\n (click)=\"close()\"\n [attr.aria-label]=\"closeLabel()\"\n type=\"button\"\n >\n <neu-icon name=\"lucideX\" size=\"18px\" aria-hidden=\"true\" />\n </button>\n }\n </div>\n }\n\n <!-- Contenido -->\n <div class=\"neu-sidebar__content\">\n <ng-content />\n </div>\n\n <!-- Footer -->\n <div class=\"neu-sidebar__footer\">\n <ng-content select=\"[neu-sidebar-footer]\" />\n </div>\n </aside>\n `,\n styleUrl: './neu-sidebar.component.scss',\n})\nexport class NeuSidebarComponent {\n private readonly urlState = inject(NeuUrlStateService);\n\n /** Posición del sidebar: izquierda o derecha de la pantalla */\n side = input<'left' | 'right'>('left');\n\n /** QueryParam que controla el estado. Default: 'menu' (?menu=open) */\n urlParam = input<string>('menu');\n\n /**\n * Modo persistente: el sidebar está siempre visible como parte del layout.\n * Usar en desktop (≥768px). El overlay y el toggle por URL no aplican.\n */\n persistent = input<boolean>(false);\n\n /**\n * Ocultar la cabecera del sidebar. Útil cuando el header ya está en el layout\n * principal y el sidebar persistente no necesita su propio header.\n */\n hideHeader = input<boolean>(false);\n\n /** Etiqueta accesible para el <aside> */\n ariaLabel = input<string>('Menú de navegación');\n\n /** Etiqueta accesible para el botón cerrar */\n closeLabel = input<string>('Cerrar menú de navegación');\n\n /** Emite cuando el usuario cierra el sidebar (overlay click o botón) */\n closeRequested = output<void>();\n\n /** Signal reactivo: true si el sidebar debe mostrarse */\n readonly isOpen = computed(() => {\n if (this.persistent()) return true;\n return this.urlState.getParam(this.urlParam())() === 'open';\n });\n\n /** Abre el sidebar — añade ?{urlParam}=open a la URL */\n open(replaceUrl = false): void {\n this.urlState.setParam(this.urlParam(), 'open', replaceUrl);\n }\n\n /** Cierra el sidebar — elimina el parámetro de la URL */\n close(): void {\n this.urlState.setParam(this.urlParam(), null, true);\n this.closeRequested.emit();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\n\nexport interface NeuStepperStep {\n /** Etiqueta del paso */\n label: string;\n /** Descripción corta opcional */\n description?: string;\n /** Marca el paso como completado externamente */\n completed?: boolean;\n /** Desactiva el paso */\n disabled?: boolean;\n}\n\n/**\n * NeuralUI Stepper Component\n *\n * Wizard paso a paso con estado de completado, lineal u opcional.\n * Expone métodos next() / prev() y emite stepChange.\n *\n * Uso:\n * <neu-stepper [steps]=\"steps\" [activeStep]=\"step\" (stepChange)=\"step = $event\">\n * <ng-template neuStepContent>Contenido paso 1</ng-template>\n * <ng-template neuStepContent>Contenido paso 2</ng-template>\n * </neu-stepper>\n */\n@Component({\n selector: 'neu-stepper',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- Cabecera de pasos -->\n <div class=\"neu-stepper\">\n <div class=\"neu-stepper__header\">\n @for (step of steps(); track step.label; let i = $index; let last = $last) {\n <div\n class=\"neu-stepper__step\"\n [class.neu-stepper__step--active]=\"i === activeStep()\"\n [class.neu-stepper__step--completed]=\"isCompleted(i)\"\n [class.neu-stepper__step--disabled]=\"step.disabled\"\n >\n <button\n class=\"neu-stepper__step-btn\"\n type=\"button\"\n [disabled]=\"step.disabled\"\n (click)=\"goTo(i)\"\n >\n <span class=\"neu-stepper__indicator\">\n @if (isCompleted(i)) {\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </span>\n <span class=\"neu-stepper__step-info\">\n <span class=\"neu-stepper__step-label\">{{ step.label }}</span>\n @if (step.description) {\n <span class=\"neu-stepper__step-desc\">{{ step.description }}</span>\n }\n </span>\n </button>\n @if (!last) {\n <div\n class=\"neu-stepper__connector\"\n [class.neu-stepper__connector--done]=\"isCompleted(i) || i < activeStep()\"\n ></div>\n }\n </div>\n }\n </div>\n\n <!-- Panel de contenido -->\n <div class=\"neu-stepper__content\">\n <ng-content />\n </div>\n </div>\n `,\n styleUrl: './neu-stepper.component.scss',\n})\nexport class NeuStepperComponent {\n /** Pasos del wizard */\n steps = input<NeuStepperStep[]>([]);\n\n /** Índice del paso activo (0-based) */\n activeStep = input<number>(0);\n\n /** Si true, solo permite ir hacia adelante secuencialmente */\n linear = input<boolean>(false);\n\n /** Emite el nuevo índice al cambiar */\n stepChange = output<number>();\n\n /** Set de pasos completados */\n private readonly _completed = signal<Set<number>>(new Set());\n\n readonly isCompleted = (i: number) =>\n this._completed().has(i) || (this.steps()[i]?.completed ?? false) || i < this.activeStep();\n\n goTo(i: number): void {\n const step = this.steps()[i];\n if (step?.disabled) return;\n if (this.linear() && i > this.activeStep() + 1 && !this.isCompleted(this.activeStep())) return;\n this.stepChange.emit(i);\n }\n\n /** Marca el paso actual como completado y avanza al siguiente */\n next(): void {\n const current = this.activeStep();\n const updated = new Set(this._completed());\n updated.add(current);\n this._completed.set(updated);\n if (current < this.steps().length - 1) {\n this.stepChange.emit(current + 1);\n }\n }\n\n prev(): void {\n const current = this.activeStep();\n if (current > 0) {\n this.stepChange.emit(current - 1);\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n InjectionToken,\n OnDestroy,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NeuUrlStateService } from '../url-state/neu-url-state.service';\n\n// ----------------------------------------------------------------\n// Token de contexto — permite a NeuTabPanelComponent inyectar\n// la instancia padre sin pasar signals manualmente.\n// ----------------------------------------------------------------\nexport const NEU_TABS_CONTEXT = new InjectionToken<NeuTabsComponent>('NeuTabsContext');\n\nexport interface NeuTab {\n /** ID único de la pestaña — se usa como valor en la URL */\n id: string;\n /** Etiqueta visible */\n label: string;\n /** Badge opcional junto al label */\n badge?: string;\n /** Deshabilita la pestaña sin ocultarla */\n disabled?: boolean;\n}\n\n/**\n * NeuralUI Tabs Component\n *\n * Sistema de pestañas con estado sincronizado a la URL via NeuUrlStateService.\n * El panel activo se determina por ?{tabParam}={tabId}.\n *\n * Uso:\n * <neu-tabs [tabs]=\"tabs\" tabParam=\"tab\">\n * <neu-tab-panel tabId=\"preview\">...</neu-tab-panel>\n * <neu-tab-panel tabId=\"api\">...</neu-tab-panel>\n * </neu-tabs>\n */\n@Component({\n selector: 'neu-tabs',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NEU_TABS_CONTEXT, useExisting: NeuTabsComponent }],\n template: `\n <!-- Barra de pestañas -->\n <div class=\"neu-tabs\" [class.neu-tabs--flush]=\"flush()\">\n <div class=\"neu-tabs__nav\" role=\"tablist\" [attr.aria-label]=\"ariaLabel()\" #navRef>\n @for (tab of tabs(); track tab.id) {\n <button\n class=\"neu-tabs__tab\"\n [class.neu-tabs__tab--active]=\"activeTabId() === tab.id\"\n [class.neu-tabs__tab--disabled]=\"tab.disabled\"\n role=\"tab\"\n [id]=\"'neu-tab-' + tab.id\"\n [attr.aria-selected]=\"activeTabId() === tab.id\"\n [attr.aria-controls]=\"'neu-tabpanel-' + tab.id\"\n [attr.tabindex]=\"activeTabId() === tab.id ? '0' : '-1'\"\n [disabled]=\"tab.disabled\"\n type=\"button\"\n (click)=\"selectTab(tab)\"\n (keydown.arrowRight)=\"focusTab($any($event), 1)\"\n (keydown.arrowLeft)=\"focusTab($any($event), -1)\"\n (keydown.home)=\"focusTab($any($event), 'first')\"\n (keydown.end)=\"focusTab($any($event), 'last')\"\n >\n {{ tab.label }}\n @if (tab.badge) {\n <span class=\"neu-tabs__tab-badge\">{{ tab.badge }}</span>\n }\n </button>\n }\n <!-- Indicador deslizante -->\n <span class=\"neu-tabs__indicator\" [style]=\"indicatorStyle()\"></span>\n </div>\n\n <!-- Paneles (proyectados desde NeuTabPanelComponent) -->\n <div class=\"neu-tabs__panels\">\n <ng-content />\n </div>\n </div>\n `,\n styleUrl: './neu-tabs.component.scss',\n})\nexport class NeuTabsComponent implements AfterViewInit, OnDestroy {\n private readonly urlState = inject(NeuUrlStateService);\n private readonly elRef = inject(ElementRef);\n private resizeObserver?: ResizeObserver;\n\n constructor() {\n // Actualizar indicador cuando activeTabId cambie — debe estar en el constructor (injection context)\n effect(() => {\n this.activeTabId(); // dependencia reactiva\n requestAnimationFrame(() => this._updateIndicator());\n });\n }\n\n /** Definición de pestañas */\n tabs = input<NeuTab[]>([]);\n\n /** QueryParam que almacena la pestaña activa */\n tabParam = input<string>('tab');\n\n /** Si true, elimina el padding interno de los paneles */\n flush = input<boolean>(false);\n\n /** Etiqueta accesible del rol tablist */\n ariaLabel = input<string>('Pestañas de contenido');\n\n /** Emite al cambiar de pestaña */\n tabChange = output<string>();\n\n /** ID de la pestaña activa (de la URL o la primera disponible) */\n readonly activeTabId = computed(() => {\n const fromUrl = this.urlState.getParam(this.tabParam())();\n const available = this.tabs().find((t) => t.id === fromUrl && !t.disabled);\n if (available) return available.id;\n // Fallback: primera pestaña no deshabilitada\n return this.tabs().find((t) => !t.disabled)?.id ?? '';\n });\n\n /** Posición del indicador calculada mediante medición DOM */\n private readonly _indicatorLeft = signal('0px');\n private readonly _indicatorWidth = signal('0px');\n\n readonly indicatorStyle = computed(\n () => `left: ${this._indicatorLeft()}; width: ${this._indicatorWidth()}`,\n );\n\n ngAfterViewInit(): void {\n this._updateIndicator();\n // Actualizar cuando cambie el tamaño del nav (p.ej. resize de ventana)\n const nav = this.elRef.nativeElement.querySelector('.neu-tabs__nav');\n if (nav && typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => this._updateIndicator());\n this.resizeObserver.observe(nav);\n }\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n private _updateIndicator(): void {\n const nav: HTMLElement | null = this.elRef.nativeElement.querySelector('.neu-tabs__nav');\n if (!nav) return;\n const tabEls = nav.querySelectorAll<HTMLElement>('.neu-tabs__tab');\n const idx = this.tabs().findIndex((t) => t.id === this.activeTabId());\n const tabEl = tabEls[idx];\n if (tabEl) {\n this._indicatorLeft.set(tabEl.offsetLeft + 'px');\n this._indicatorWidth.set(tabEl.offsetWidth + 'px');\n }\n }\n\n selectTab(tab: NeuTab): void {\n if (tab.disabled) return;\n this.urlState.setParam(this.tabParam(), tab.id);\n this.tabChange.emit(tab.id);\n requestAnimationFrame(() => this._updateIndicator());\n }\n\n /** Mueve el foco entre tabs con flechas (roving tabindex — WAI-ARIA Tabs Pattern) */\n focusTab(event: Event, dir: 1 | -1 | 'first' | 'last'): void {\n event.preventDefault();\n const enabledTabs = this.tabs().filter((t) => !t.disabled);\n const currentIdx = enabledTabs.findIndex((t) => t.id === this.activeTabId());\n let nextIdx: number;\n if (dir === 'first') {\n nextIdx = 0;\n } else if (dir === 'last') {\n nextIdx = enabledTabs.length - 1;\n } else {\n nextIdx = (currentIdx + dir + enabledTabs.length) % enabledTabs.length;\n }\n const next = enabledTabs[nextIdx];\n this.selectTab(next);\n const btn = (this.elRef.nativeElement as HTMLElement).querySelector(\n `#neu-tab-${next.id}`,\n ) as HTMLElement | null;\n btn?.focus();\n }\n}\n\n// ----------------------------------------------------------------\n// NeuTabPanelComponent — panel individual (usa DI para el contexto)\n// ----------------------------------------------------------------\n\n/**\n * NeuralUI Tab Panel\n *\n * Panel de contenido asociado a una pestaña de NeuTabsComponent.\n * Solo se renderiza (no oculta con CSS) cuando la pestaña está activa.\n *\n * Uso: hijo directo de <neu-tabs>\n * <neu-tab-panel tabId=\"api\">...</neu-tab-panel>\n */\n@Component({\n selector: 'neu-tab-panel',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (isActive()) {\n <div\n class=\"neu-tab-panel\"\n role=\"tabpanel\"\n [id]=\"'neu-tabpanel-' + tabId()\"\n [attr.aria-labelledby]=\"'neu-tab-' + tabId()\"\n >\n <ng-content />\n </div>\n }\n `,\n})\nexport class NeuTabPanelComponent {\n private readonly tabs = inject(NEU_TABS_CONTEXT, { optional: true });\n\n /** ID que debe coincidir con NeuTab.id del padre */\n tabId = input.required<string>();\n\n readonly isActive = computed(() => this.tabs?.activeTabId() === this.tabId());\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nexport interface NeuAccordionItem {\n /** ID único del panel */\n id: string;\n /** Título del encabezado */\n title: string;\n /** Contenido del cuerpo (HTML o texto plano) */\n content: string;\n /** Inicia expandido */\n expanded?: boolean;\n /** Deshabilita este panel */\n disabled?: boolean;\n}\n\n/**\n * NeuralUI Accordion Component\n *\n * Paneles expandibles / colapsables con animación suave.\n * Soporta modo múltiple (varios abiertos a la vez) o exclusivo.\n *\n * Uso:\n * <neu-accordion [items]=\"items\" />\n * <neu-accordion [items]=\"items\" [multiple]=\"true\" />\n */\n@Component({\n selector: 'neu-accordion',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"neu-accordion\" [class.neu-accordion--bordered]=\"bordered()\">\n @for (item of items(); track item.id) {\n <div\n class=\"neu-accordion__item\"\n [class.neu-accordion__item--expanded]=\"isExpanded(item.id)\"\n [class.neu-accordion__item--disabled]=\"item.disabled\"\n >\n <button\n class=\"neu-accordion__header\"\n type=\"button\"\n [id]=\"'neu-acc-btn-' + item.id\"\n [attr.aria-expanded]=\"isExpanded(item.id)\"\n [attr.aria-controls]=\"'neu-acc-panel-' + item.id\"\n [disabled]=\"item.disabled\"\n (click)=\"toggle(item.id)\"\n >\n <span class=\"neu-accordion__title\">{{ item.title }}</span>\n <span class=\"neu-accordion__chevron\" aria-hidden=\"true\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </span>\n </button>\n <div\n class=\"neu-accordion__panel\"\n [id]=\"'neu-acc-panel-' + item.id\"\n role=\"region\"\n [attr.aria-labelledby]=\"'neu-acc-btn-' + item.id\"\n >\n <div class=\"neu-accordion__body\" [innerHTML]=\"sanitize(item.content)\"></div>\n </div>\n </div>\n }\n </div>\n `,\n styleUrl: './neu-accordion.component.scss',\n})\nexport class NeuAccordionComponent {\n private readonly _sanitizer = inject(DomSanitizer);\n\n /** Lista de paneles */\n items = input<NeuAccordionItem[]>([]);\n\n /** Permite varios paneles abiertos a la vez */\n multiple = input<boolean>(false);\n\n /** Borde exterior alrededor del accordion */\n bordered = input<boolean>(true);\n\n /** Emite el id del panel al abrirse/cerrarse */\n panelToggle = output<{ id: string; expanded: boolean }>();\n\n /**\n * Set de IDs actualmente expandidos.\n * Se inicializa desde los ítems con `expanded: true` en el primer render.\n * Después se vuelve un signal mutable independiente (no se resetea al cambiar items).\n */\n private _expandedInit = false;\n private readonly _expanded = signal<Set<string>>(new Set());\n\n constructor() {\n // Inicialización única desde items.expanded (equivalente a linkedSignal source+computation)\n effect(\n () => {\n const items = this.items();\n if (!this._expandedInit) {\n this._expanded.set(new Set(items.filter((i) => i.expanded).map((i) => i.id)));\n this._expandedInit = true;\n }\n },\n { allowSignalWrites: true },\n );\n }\n\n readonly isExpanded = (id: string) => this._expanded().has(id);\n\n sanitize(html: string): SafeHtml {\n return this._sanitizer.sanitize(1 /* HTML */, html) ?? '';\n }\n\n toggle(id: string): void {\n const current = new Set(this._expanded());\n const willExpand = !current.has(id);\n\n if (!this.multiple()) {\n current.clear();\n }\n\n if (willExpand) {\n current.add(id);\n } else {\n current.delete(id);\n }\n\n this._expanded.set(current);\n this.panelToggle.emit({ id, expanded: willExpand });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type NeuCardPadding = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * NeuralUI Card Component\n *\n * Contenedor con sombras y bordes Neural. Soporta header, body y footer\n * via content projection.\n *\n * Uso:\n * <neu-card>\n * <div neu-card-header>Título</div>\n * <p>Contenido</p>\n * <div neu-card-footer>Acciones</div>\n * </neu-card>\n */\n@Component({\n selector: 'neu-card',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClasses()' },\n template: `\n <div class=\"neu-card__inner\">\n <div class=\"neu-card__header\">\n <ng-content select=\"[neu-card-header]\" />\n </div>\n <div class=\"neu-card__body\" [class]=\"'neu-card__body--' + padding()\">\n <ng-content />\n </div>\n <div class=\"neu-card__footer\">\n <ng-content select=\"[neu-card-footer]\" />\n </div>\n </div>\n `,\n styleUrl: './neu-card.component.scss',\n})\nexport class NeuCardComponent {\n /** Espaciado interior del cuerpo */\n padding = input<NeuCardPadding>('md');\n\n /** Efecto hover con elevación de sombra */\n hoverable = input<boolean>(false);\n\n /** Borde con acento de color primario */\n bordered = input<boolean>(false);\n\n /** Card compacta sin bordes ni sombras */\n flat = input<boolean>(false);\n\n readonly hostClasses = computed(() => ({\n 'neu-card': true,\n 'neu-card--hoverable': this.hoverable(),\n 'neu-card--bordered': this.bordered(),\n 'neu-card--flat': this.flat(),\n }));\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\n/**\n * NeuralUI Divider\n *\n * Separador visual para secciones de contenido.\n *\n * Uso:\n * <neu-divider />\n * <neu-divider label=\"O continúa con\" />\n * <neu-divider orientation=\"vertical\" />\n */\n@Component({\n selector: 'neu-divider',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"neu-divider\"\n [class.neu-divider--vertical]=\"orientation() === 'vertical'\"\n [class.neu-divider--has-label]=\"!!label()\"\n role=\"separator\"\n [attr.aria-orientation]=\"orientation()\"\n >\n @if (label()) {\n <span class=\"neu-divider__label\">{{ label() }}</span>\n }\n </div>\n `,\n styles: [\n `\n .neu-divider {\n display: flex;\n align-items: center;\n gap: var(--neu-space-3);\n color: var(--neu-text-muted);\n font-size: var(--neu-text-xs);\n font-family: var(--neu-font-sans);\n\n &::before,\n &::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--neu-border);\n }\n\n &:not(.neu-divider--has-label)::after {\n display: none;\n }\n &:not(.neu-divider--has-label)::before {\n flex: 1;\n }\n }\n\n .neu-divider--vertical {\n flex-direction: column;\n align-self: stretch;\n height: auto;\n width: auto;\n\n &::before,\n &::after {\n flex: 1;\n width: 1px;\n height: auto;\n }\n }\n\n .neu-divider__label {\n white-space: nowrap;\n padding: 0 var(--neu-space-2);\n letter-spacing: 0.04em;\n font-weight: 500;\n }\n `,\n ],\n})\nexport class NeuDividerComponent {\n label = input<string>('');\n orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Type,\n ViewEncapsulation,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { Dialog, DialogConfig, DialogRef } from '@angular/cdk/dialog';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { NeuIconComponent } from '../icon/neu-icon.component';\n\nexport type NeuDialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/** Datos que se inyectan en el componente del diálogo */\nexport interface NeuDialogData<T = unknown> {\n title?: string;\n data?: T;\n}\n\n/**\n * NeuDialogService — Servicio para abrir diálogos programáticamente.\n *\n * Uso:\n * const dialog = inject(NeuDialogService);\n * const ref = dialog.open(MyContentComponent, { title: 'Editar', data: item });\n * ref.closed.subscribe(result => console.log(result));\n */\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NeuDialogService {\n private readonly dialog = inject(Dialog);\n\n open<T = unknown, R = unknown>(\n component: Type<unknown>,\n config?: {\n title?: string;\n data?: T;\n size?: NeuDialogSize;\n disableClose?: boolean;\n },\n ): DialogRef<R> {\n return this.dialog.open<R>(component, {\n data: { title: config?.title, data: config?.data } satisfies NeuDialogData<T>,\n panelClass: ['neu-dialog-panel', `neu-dialog-panel--${config?.size ?? 'md'}`],\n backdropClass: 'neu-dialog-backdrop',\n disableClose: config?.disableClose ?? false,\n } satisfies DialogConfig);\n }\n}\n\n/**\n * NeuDialogComponent — Diálogo accesible con header, body y footer.\n * Úsalo directamente como componente declarativo pasando `open` como signal.\n *\n * Para uso programático, utiliza NeuDialogService.open().\n *\n * Uso declarativo:\n * <neu-dialog [open]=\"isOpen()\" title=\"Editar usuario\" (closed)=\"isOpen.set(false)\">\n * <p>Contenido del diálogo</p>\n * <div neu-dialog-footer>\n * <neu-button (click)=\"save()\">Guardar</neu-button>\n * </div>\n * </neu-dialog>\n */\n@Component({\n selector: 'neu-dialog',\n imports: [NeuIconComponent, A11yModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.neu-dialog--open]': 'open()',\n '[attr.aria-hidden]': '!open()',\n },\n template: `\n @if (open()) {\n <!-- Backdrop -->\n <div\n class=\"neu-dialog__backdrop\"\n (click)=\"!disableClose() && closed.emit()\"\n aria-hidden=\"true\"\n ></div>\n\n <!-- Panel -->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n class=\"neu-dialog__panel neu-dialog__panel--{{ size() }}\"\n role=\"dialog\"\n [id]=\"'neu-dialog-' + _uid\"\n [attr.aria-labelledby]=\"'neu-dialog-title-' + _uid\"\n [attr.aria-modal]=\"true\"\n (keydown.escape)=\"!disableClose() && closed.emit()\"\n >\n <!-- Header -->\n <div class=\"neu-dialog__header\">\n <h2 class=\"neu-dialog__title\" [id]=\"'neu-dialog-title-' + _uid\">{{ title() }}</h2>\n @if (!disableClose()) {\n <button\n class=\"neu-dialog__close\"\n type=\"button\"\n aria-label=\"Close dialog\"\n (click)=\"closed.emit()\"\n >\n <neu-icon name=\"lucideX\" size=\"1.125rem\" />\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"neu-dialog__body\">\n <ng-content />\n </div>\n\n <!-- Footer (opcional via slot) -->\n <ng-content select=\"[neu-dialog-footer]\" />\n </div>\n }\n `,\n styleUrl: './neu-modal.component.scss',\n})\nexport class NeuDialogComponent {\n /** Controla la visibilidad del diálogo. */\n open = input<boolean>(false);\n /** Título que aparece en el header. */\n title = input<string>('');\n /** Tamaño del panel: sm | md | lg | xl | full. */\n size = input<NeuDialogSize>('md');\n /** Si es true, el backdrop y el botón cerrar no funcionan. */\n disableClose = input<boolean>(false);\n\n /** Emite cuando el usuario cierra el diálogo. */\n closed = output<void>();\n\n /** @internal — ID único para aria-labelledby */\n readonly _uid = Math.random().toString(36).slice(2, 7);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Directiva para definir el template de expansión de fila en NeuTable.\n *\n * Uso:\n * ```html\n * <neu-table [expandable]=\"true\" [columns]=\"cols\" [data]=\"rows\">\n * <ng-template neuTableExpand let-row>\n * <div>{{ row.details }}</div>\n * </ng-template>\n * </neu-table>\n * ```\n */\n@Directive({\n selector: 'ng-template[neuTableExpand]',\n standalone: true,\n})\nexport class NeuTableExpandDirective {\n readonly templateRef = inject(TemplateRef) as TemplateRef<{ $implicit: Record<string, unknown> }>;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n contentChild,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { NeuTableExpandDirective } from './neu-table-expand.directive';\nimport { NeuUrlStateService } from '../url-state/neu-url-state.service';\nimport { NeuTableColumn } from './neu-table.types';\n\nexport type { NeuTableColumn } from './neu-table.types';\n\ntype Row = Record<string, unknown>;\n\n// Conversor interno — el input acepta object[] para compatibilidad con\n// interfaces de usuario concretas (User, Product…). Internamente casteamos a Row.\nfunction asRows(data: object[]): Row[] {\n return data as Row[];\n}\n\n/**\n * NeuralUI Table — Componente Estrella\n *\n * Tabla de datos con:\n * - Búsqueda/filtrado → ?q=...\n * - Paginación → ?page=...\n * - Ordenación → ?sort=col&sortDir=asc|desc\n * - Selección de filas (múltiple) opcional\n * - Skeleton de carga animado\n * - Scroll horizontal elegante en mobile (<400px)\n *\n * Uso básico:\n * <neu-table [columns]=\"cols\" [data]=\"rows\" />\n *\n * Múltiples tablas por página:\n * <neu-table pageParam=\"userPage\" searchParam=\"userQ\" sortParam=\"userSort\" ... />\n */\n@Component({\n selector: 'neu-table',\n imports: [NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"neu-table-container\" [class.neu-table--sticky-header]=\"stickyHeader()\">\n <!-- ---- Toolbar ---- -->\n @if (searchable() || title() || exportable()) {\n <div class=\"neu-table__toolbar\">\n @if (title()) {\n <h3 class=\"neu-table__title\">{{ title() }}</h3>\n }\n @if (searchable()) {\n <div class=\"neu-table__search-group\">\n <div class=\"neu-table__search-wrapper\">\n <svg\n class=\"neu-table__search-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n <input\n class=\"neu-table__search\"\n type=\"search\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearch($event)\"\n aria-label=\"Buscar en la tabla\"\n [attr.aria-label]=\"searchAriaLabel()\"\n />\n @if (searchQuery()) {\n <button\n class=\"neu-table__search-clear\"\n type=\"button\"\n aria-label=\"Limpiar búsqueda\"\n [attr.aria-label]=\"clearSearchAriaLabel()\"\n (click)=\"clearSearch()\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n </div>\n @if (exactMatchable()) {\n <label class=\"neu-table__exact-label\">\n <input\n class=\"neu-table__exact-checkbox\"\n type=\"checkbox\"\n [checked]=\"exactMatch()\"\n (change)=\"exactMatch.set($any($event.target).checked)\"\n />\n {{ exactMatchLabel() }}\n </label>\n }\n </div>\n }\n @if (exportable() && !loading()) {\n <button\n class=\"neu-table__export-btn\"\n type=\"button\"\n (click)=\"exportCsv()\"\n title=\"Exportar CSV\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n width=\"15\"\n height=\"15\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n CSV\n </button>\n }\n </div>\n }\n\n <!-- Barra de selección (aparece al seleccionar) -->\n @if (selectable() && selectedCount() > 0) {\n <div class=\"neu-table__selection-bar\">\n <span\n >{{ selectedCount() }} fila{{ selectedCount() !== 1 ? 's' : '' }} seleccionada{{\n selectedCount() !== 1 ? 's' : ''\n }}</span\n >\n <button class=\"neu-table__selection-clear\" type=\"button\" (click)=\"clearSelection()\">\n Deseleccionar todo\n </button>\n </div>\n }\n\n <!-- ---- Scroll container ---- -->\n <div\n class=\"neu-table__scroll-container\"\n role=\"region\"\n [attr.aria-label]=\"title() || 'Tabla de datos'\"\n >\n <table class=\"neu-table\" [attr.aria-rowcount]=\"filteredData().length\">\n <thead class=\"neu-table__head\">\n <tr>\n <!-- Checkbox de selección global -->\n @if (expandable()) {\n <th class=\"neu-table__th neu-table__th--expand-col\" scope=\"col\"></th>\n }\n @if (selectable()) {\n <th class=\"neu-table__th neu-table__th--check\" scope=\"col\">\n <input\n type=\"checkbox\"\n class=\"neu-table__checkbox\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (change)=\"toggleAll()\"\n aria-label=\"Seleccionar todas las filas\"\n />\n </th>\n }\n @for (col of columns(); track col.key) {\n <th\n class=\"neu-table__th\"\n [class.neu-table__th--sortable]=\"sortable() && col.sortable !== false\"\n [class.neu-table__th--sorted-asc]=\"sortKey() === col.key && sortDir() === 'asc'\"\n [class.neu-table__th--sorted-desc]=\"sortKey() === col.key && sortDir() === 'desc'\"\n [class]=\"col.cellClass ?? ''\"\n [style.width]=\"col.width ?? 'auto'\"\n [style.text-align]=\"col.align ?? 'left'\"\n scope=\"col\"\n (click)=\"sortable() && col.sortable !== false ? sortBy(col.key) : null\"\n >\n @if (col.headerTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col }\"\n />\n } @else {\n {{ col.header }}\n }\n @if (sortable() && col.sortable !== false) {\n <span class=\"neu-table__sort-icon\" aria-hidden=\"true\">\n @if (sortKey() === col.key) {\n @if (sortDir() === 'asc') {\n ↑\n } @else {\n ↓\n }\n } @else {\n ↕\n }\n </span>\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"neu-table__body\">\n @if (loading()) {\n <tr class=\"neu-table__row--loading\">\n <td\n [attr.colspan]=\"columns().length + (selectable() ? 1 : 0)\"\n class=\"neu-table__td neu-table__td--center\"\n >\n <div class=\"neu-table__skeleton-rows\">\n @for (_ of skeletonRows(); track $index) {\n <div class=\"neu-table__skeleton-row\">\n @for (__ of columns(); track $index) {\n <div class=\"neu-table__skeleton-cell\"></div>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n } @else if (paginatedData().length === 0) {\n <tr>\n <td\n [attr.colspan]=\"columns().length + (selectable() ? 1 : 0)\"\n class=\"neu-table__td neu-table__td--empty\"\n >\n <div class=\"neu-table__empty\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n <p>{{ emptyMessage() }}</p>\n @if (searchQuery()) {\n <button class=\"neu-table__clear-filter\" type=\"button\" (click)=\"clearSearch()\">\n {{ clearFilterLabel() }}\n </button>\n }\n </div>\n </td>\n </tr>\n } @else {\n @for (row of paginatedData(); track getRowKey(row)) {\n <tr\n class=\"neu-table__row\"\n [class.neu-table__row--selected]=\"isRowSelected(row)\"\n [class.neu-table__row--clickable]=\"selectable()\"\n (click)=\"selectable() ? toggleRow(row) : null\"\n >\n @if (expandable()) {\n <td\n class=\"neu-table__td neu-table__td--expand-col\"\n (click)=\"$event.stopPropagation()\"\n >\n <button\n class=\"neu-table__expand-btn\"\n type=\"button\"\n (click)=\"toggleExpand(row)\"\n [class.neu-table__expand-btn--open]=\"isRowExpanded(row)\"\n [attr.aria-expanded]=\"isRowExpanded(row)\"\n aria-label=\"Expandir fila\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </td>\n }\n @if (selectable()) {\n <td\n class=\"neu-table__td neu-table__th--check\"\n (click)=\"$event.stopPropagation()\"\n >\n <input\n type=\"checkbox\"\n class=\"neu-table__checkbox\"\n [checked]=\"isRowSelected(row)\"\n (change)=\"toggleRow(row)\"\n [attr.aria-label]=\"'Seleccionar fila'\"\n />\n </td>\n }\n @for (col of columns(); track col.key) {\n <td\n class=\"neu-table__td\"\n [class]=\"col.cellClass ?? ''\"\n [style.text-align]=\"col.align ?? 'left'\"\n >\n @if (col.type === 'badge') {\n @let badgeVal = getCellValue(row, col);\n @let badgeCfg = col.badgeMap?.[badgeVal];\n <span\n class=\"neu-table__cell-badge neu-table__cell-badge--{{\n badgeCfg?.variant ?? 'default'\n }}\"\n >\n {{ badgeCfg?.label ?? badgeVal }}\n </span>\n } @else {\n {{ getCellValue(row, col) }}\n }\n </td>\n }\n </tr>\n @if (expandable() && isRowExpanded(row)) {\n <tr class=\"neu-table__row-expand-detail\">\n <td [attr.colspan]=\"totalColspan()\" class=\"neu-table__td--expand-panel\">\n <div class=\"neu-table__expand-content\">\n @if (expandTemplate(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\n />\n }\n </div>\n </td>\n </tr>\n }\n }\n }\n </tbody>\n </table>\n </div>\n\n <!-- ---- Footer ---- -->\n @if (!loading() && filteredData().length > 0) {\n <div class=\"neu-table__footer\">\n @if (pageSizeOptions().length > 0) {\n <div class=\"neu-table__page-size\">\n <label class=\"neu-table__page-size-label\">Filas:</label>\n <select class=\"neu-table__page-size-select\" (change)=\"onPageSizeChange($event)\">\n @for (size of pageSizeOptions(); track size) {\n <option [value]=\"size\" [selected]=\"effectivePageSize() === size\">\n {{ size }}\n </option>\n }\n </select>\n </div>\n }\n <span class=\"neu-table__info\">\n {{ paginationInfo() }}\n </span>\n @if (totalPages() > 1) {\n <nav class=\"neu-table__pagination\" aria-label=\"Paginación\">\n <button\n class=\"neu-table__page-btn\"\n [disabled]=\"currentPage() === 1\"\n (click)=\"goToPage(currentPage() - 1)\"\n [attr.aria-label]=\"previousPageAriaLabel()\"\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n @for (page of pageNumbers(); track page) {\n <button\n class=\"neu-table__page-btn\"\n [class.neu-table__page-btn--active]=\"page === currentPage()\"\n (click)=\"goToPage(page)\"\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\n type=\"button\"\n >\n {{ page }}\n </button>\n }\n <button\n class=\"neu-table__page-btn\"\n [disabled]=\"currentPage() === totalPages()\"\n (click)=\"goToPage(currentPage() + 1)\"\n [attr.aria-label]=\"nextPageAriaLabel()\"\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </nav>\n }\n </div>\n }\n </div>\n `,\n styleUrl: './neu-table.component.scss',\n})\nexport class NeuTableComponent {\n private readonly urlState = inject(NeuUrlStateService);\n\n readonly expandTemplate = contentChild(NeuTableExpandDirective);\n\n // ---- Inputs de datos ----\n columns = input<NeuTableColumn[]>([]);\n data = input<object[]>([]);\n pageSize = input<number>(10);\n loading = input<boolean>(false);\n title = input<string>('');\n emptyMessage = input<string>('No se encontraron resultados');\n skeletonRows = input<number[]>([1, 2, 3, 4, 5]);\n\n // ---- Inputs de funcionalidad ----\n searchable = input<boolean>(true);\n searchPlaceholder = input<string>('Buscar...');\n exactMatchable = input<boolean>(false);\n exactMatchLabel = input<string>('Búsqueda exacta');\n\n /** Aria-label del input de búsqueda */\n searchAriaLabel = input<string>('Buscar en la tabla');\n\n /** Aria-label del botón de limpiar búsqueda */\n clearSearchAriaLabel = input<string>('Limpiar búsqueda');\n\n /** Texto del botón que elimina el filtro activo */\n clearFilterLabel = input<string>('Eliminar filtro');\n\n /** Aria-label del botón de página anterior */\n previousPageAriaLabel = input<string>('Anterior');\n\n /** Aria-label del botón de página siguiente */\n nextPageAriaLabel = input<string>('Siguiente');\n sortable = input<boolean>(false);\n selectable = input<boolean>(false);\n expandable = input<boolean>(false);\n exportable = input<boolean>(false);\n exportFileName = input<string>('export');\n pageSizeOptions = input<number[]>([]);\n stickyHeader = input<boolean>(false);\n /** Clave del campo que identifica de forma única cada fila */\n rowKey = input<string>('id');\n\n // ---- URL params (personalizables para múltiples tablas) ----\n pageParam = input<string>('page');\n searchParam = input<string>('q');\n sortParam = input<string>('sort');\n sortDirParam = input<string>('sortDir');\n\n // ---- Outputs ----\n rowSelectionChange = output<Row[]>();\n\n // ---- URL State ----\n readonly currentPage = computed(() => {\n const raw = this.urlState.getParam(this.pageParam())();\n const n = Number(raw);\n return !raw || isNaN(n) || n < 1 ? 1 : n;\n });\n\n readonly searchQuery = computed(() => this.urlState.getParam(this.searchParam())() ?? '');\n readonly sortKey = computed(() => this.urlState.getParam(this.sortParam())() ?? '');\n readonly sortDir = computed<'asc' | 'desc'>(() => {\n const d = this.urlState.getParam(this.sortDirParam())();\n return d === 'desc' ? 'desc' : 'asc';\n });\n\n // ---- Pipeline de datos ----\n private readonly rows = computed(() => asRows(this.data()));\n\n readonly exactMatch = signal(false);\n\n readonly filteredData = computed(() => {\n const q = this.searchQuery().trim().toLowerCase();\n if (!q) return this.rows();\n const exact = this.exactMatch();\n const matches = (text: string) =>\n exact ? text.toLowerCase() === q : text.toLowerCase().includes(q);\n return this.rows().filter((row) =>\n this.columns().some((col) => {\n const rawVal = String(row[col.key] ?? '');\n const displayVal = col.cell\n ? col.cell(row)\n : col.type === 'badge' && col.badgeMap?.[rawVal]?.label\n ? col.badgeMap[rawVal].label\n : rawVal;\n return matches(displayVal) || matches(rawVal);\n }),\n );\n });\n\n readonly sortedData = computed(() => {\n const key = this.sortKey();\n const dir = this.sortDir();\n const data = [...this.filteredData()];\n if (!key || !this.sortable()) return data;\n return data.sort((a, b) => {\n const av = a[key] ?? '';\n const bv = b[key] ?? '';\n const cmp = String(av).localeCompare(String(bv), undefined, { numeric: true });\n return dir === 'asc' ? cmp : -cmp;\n });\n });\n\n // Tamaño de página dinámico (selector de footer sobreescribe el input)\n private readonly _dynamicPageSize = signal<number | null>(null);\n readonly effectivePageSize = computed(() => this._dynamicPageSize() ?? this.pageSize());\n\n readonly totalPages = computed(() =>\n Math.max(1, Math.ceil(this.sortedData().length / this.effectivePageSize())),\n );\n\n readonly paginatedData = computed(() => {\n const page = Math.min(this.currentPage(), this.totalPages());\n const size = this.effectivePageSize();\n return this.sortedData().slice((page - 1) * size, page * size);\n });\n\n readonly pageNumbers = computed<number[]>(() => {\n const total = this.totalPages();\n const current = this.currentPage();\n let start = Math.max(1, current - 2);\n const end = Math.min(total, start + 4);\n start = Math.max(1, end - 4);\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n });\n\n readonly paginationInfo = computed(() => {\n const total = this.sortedData().length;\n const page = Math.min(this.currentPage(), this.totalPages());\n const size = this.effectivePageSize();\n const from = Math.min((page - 1) * size + 1, total);\n const to = Math.min(page * size, total);\n return `${from}\\u2013${to} de ${total} resultado${total !== 1 ? 's' : ''}`;\n });\n\n readonly totalColspan = computed(() => {\n let cols = this.columns().length;\n if (this.selectable()) cols++;\n if (this.expandable()) cols++;\n return cols;\n });\n\n // ---- Expansión de filas ----\n private readonly _expandedKeys = signal<Set<unknown>>(new Set());\n\n isRowExpanded(row: Row): boolean {\n return this._expandedKeys().has(row[this.rowKey()]);\n }\n\n toggleExpand(row: Row): void {\n const key = row[this.rowKey()];\n const set = new Set(this._expandedKeys());\n if (set.has(key)) set.delete(key);\n else set.add(key);\n this._expandedKeys.set(set);\n }\n\n // ---- Selección de filas ----\n private readonly _selectedKeys = signal<Set<unknown>>(new Set());\n\n readonly selectedCount = computed(() => this._selectedKeys().size);\n readonly isAllSelected = computed(\n () =>\n this.paginatedData().length > 0 &&\n this.paginatedData().every((r) => this._selectedKeys().has(r[this.rowKey()])),\n );\n readonly isSomeSelected = computed(\n () =>\n !this.isAllSelected() &&\n this.paginatedData().some((r) => this._selectedKeys().has(r[this.rowKey()])),\n );\n\n isRowSelected(row: Row): boolean {\n return this._selectedKeys().has(row[this.rowKey()]);\n }\n\n toggleRow(row: Row): void {\n const key = row[this.rowKey()];\n const set = new Set(this._selectedKeys());\n if (set.has(key)) set.delete(key);\n else set.add(key);\n this._selectedKeys.set(set);\n this._emitSelection(set);\n }\n\n toggleAll(): void {\n const allKeys = new Set(this._selectedKeys());\n if (this.isAllSelected()) {\n this.paginatedData().forEach((r) => allKeys.delete(r[this.rowKey()]));\n } else {\n this.paginatedData().forEach((r) => allKeys.add(r[this.rowKey()]));\n }\n this._selectedKeys.set(allKeys);\n this._emitSelection(allKeys);\n }\n\n clearSelection(): void {\n this._selectedKeys.set(new Set());\n this.rowSelectionChange.emit([]);\n }\n\n private _emitSelection(keys: Set<unknown>): void {\n const selected = this.rows().filter((r) => keys.has(r[this.rowKey()]));\n this.rowSelectionChange.emit(selected);\n }\n\n // ---- Acciones de URL ----\n goToPage(page: number): void {\n this.urlState.setParam(\n this.pageParam(),\n String(Math.max(1, Math.min(page, this.totalPages()))),\n );\n }\n\n sortBy(key: string): void {\n const dir = this.sortKey() === key && this.sortDir() === 'asc' ? 'desc' : 'asc';\n this.urlState.patchParams({\n [this.sortParam()]: key,\n [this.sortDirParam()]: dir,\n [this.pageParam()]: '1',\n });\n }\n\n onSearch(event: Event): void {\n const q = (event.target as HTMLInputElement).value;\n this.urlState.patchParams({ [this.searchParam()]: q || null, [this.pageParam()]: '1' });\n }\n\n clearSearch(): void {\n this.urlState.patchParams({ [this.searchParam()]: null, [this.pageParam()]: '1' });\n }\n\n onPageSizeChange(event: Event): void {\n const size = +(event.target as HTMLSelectElement).value;\n this._dynamicPageSize.set(size);\n this.urlState.patchParams({ [this.pageParam()]: '1' });\n }\n\n exportCsv(): void {\n const headers = this.columns().map((c) => `\"${c.header.replace(/\"/g, '\"\"')}\"`);\n const rows = this.filteredData().map((row) =>\n this.columns().map((col) => {\n const val = this.getCellValue(row as Row, col);\n return `\"${val.replace(/\"/g, '\"\"')}\"`;\n }),\n );\n const csv = [headers, ...rows].map((r) => r.join(',')).join('\\r\\n');\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `${this.exportFileName()}.csv`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n getRowKey(row: Row): unknown {\n return row[this.rowKey()] ?? JSON.stringify(row);\n }\n\n getCellValue(row: Row, col: NeuTableColumn): string {\n if (col.cell) return col.cell(row);\n const val = row[col.key];\n return val == null ? '—' : String(val);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n signal,\n} from '@angular/core';\nimport { NgClass } from '@angular/common';\n\nexport type NeuAvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type NeuAvatarShape = 'circle' | 'square';\nexport type NeuAvatarColor = 'blue' | 'violet' | 'green' | 'amber' | 'red' | 'slate';\nexport type NeuAvatarStatus = 'online' | 'offline' | 'busy' | 'away' | '';\n\n/**\n * NeuAvatar — Avatar circular o cuadrado para foto o iniciales.\n *\n * Uso:\n * <neu-avatar name=\"Pedro Moreno\" />\n * <neu-avatar src=\"/assets/avatar.jpg\" alt=\"Pedro\" size=\"lg\" />\n * <neu-avatar name=\"PM\" size=\"lg\" color=\"blue\" status=\"online\" />\n */\n@Component({\n selector: 'neu-avatar',\n imports: [NgClass],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-avatar-host' },\n template: `\n <span\n class=\"neu-avatar\"\n [ngClass]=\"hostClasses()\"\n [attr.aria-label]=\"alt() || name() || 'Avatar'\"\n role=\"img\"\n >\n @if (src() && !imgError()) {\n <img\n class=\"neu-avatar__img\"\n [src]=\"src()\"\n [alt]=\"alt() || name()\"\n (error)=\"imgError.set(true)\"\n />\n } @else {\n <span class=\"neu-avatar__initials\" aria-hidden=\"true\">{{ initials() }}</span>\n }\n </span>\n\n @if (status()) {\n <span\n class=\"neu-avatar__status\"\n [ngClass]=\"'neu-avatar__status--' + status()\"\n aria-hidden=\"true\"\n ></span>\n }\n `,\n styleUrl: './neu-avatar.component.scss',\n})\nexport class NeuAvatarComponent {\n /** URL de la imagen. Si falla la carga, muestra las iniciales. */\n src = input<string>('');\n /** Texto alternativo de la imagen. */\n alt = input<string>('');\n /** Nombre completo — se usan las iniciales como fallback. */\n name = input<string>('');\n /** Tamaño: xs (24) | sm (32) | md (40) | lg (48) | xl (64). Por defecto 'md'. */\n size = input<NeuAvatarSize>('md');\n /** Forma: 'circle' (default) o 'square'. */\n shape = input<NeuAvatarShape>('circle');\n /** Color de fondo para iniciales. */\n color = input<NeuAvatarColor>('blue');\n /** Indicador de presencia. */\n status = input<NeuAvatarStatus>('');\n\n /** @internal Imagen fallida */\n protected readonly imgError = signal(false);\n\n protected readonly initials = computed(() => {\n const n = this.name().trim();\n if (!n) return '?';\n const parts = n.split(/\\s+/);\n return parts.length === 1\n ? parts[0].slice(0, 2).toUpperCase()\n : (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n });\n\n protected readonly hostClasses = computed(() => [\n `neu-avatar--${this.size()}`,\n `neu-avatar--${this.shape()}`,\n ...(!this.src() || this.imgError() ? [`neu-avatar--${this.color()}`] : []),\n ]);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type NeuBadgeVariant = 'default' | 'success' | 'info' | 'warning' | 'danger';\nexport type NeuBadgeSize = 'sm' | 'md';\n\n/**\n * NeuralUI Badge Component\n *\n * Etiqueta de estado compacta y semántica.\n *\n * Uso: <neu-badge variant=\"success\">Activo</neu-badge>\n * <neu-badge variant=\"danger\" [dot]=\"true\">Error</neu-badge>\n */\n@Component({\n selector: 'neu-badge',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClasses()' },\n template: `\n @if (dot()) {\n <span class=\"neu-badge__dot\" aria-hidden=\"true\"></span>\n }\n <ng-content />\n `,\n styleUrl: './neu-badge.component.scss',\n})\nexport class NeuBadgeComponent {\n /** Variante semántica */\n variant = input<NeuBadgeVariant>('default');\n\n /** Tamaño */\n size = input<NeuBadgeSize>('md');\n\n /** Muestra un punto de color a la izquierda */\n dot = input<boolean>(false);\n\n /** Estilo con solo borde (outline) sin relleno */\n outline = input<boolean>(false);\n\n /** Estilo completamente redondeado (pill) */\n pill = input<boolean>(true);\n\n readonly hostClasses = computed(() => ({\n 'neu-badge': true,\n [`neu-badge--${this.variant()}`]: true,\n [`neu-badge--${this.size()}`]: true,\n 'neu-badge--outline': this.outline(),\n 'neu-badge--pill': this.pill(),\n 'neu-badge--dot': this.dot(),\n }));\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { NeuIconComponent } from '../icon/neu-icon.component';\n\nexport type NeuButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'outline';\nexport type NeuButtonSize = 'sm' | 'md' | 'lg';\nexport type NeuButtonIconPosition = 'left' | 'right';\n\n/**\n * NeuralUI Button Component\n *\n * Uso: <button neu-button variant=\"primary\" size=\"md\">Texto</button>\n * Con icono: <button neu-button icon=\"lucideSave\">Guardar</button>\n * Solo icono: <button neu-button icon=\"lucideTrash2\" [iconOnly]=\"true\" />\n *\n * Signals: variant, size, disabled, loading, fullWidth, icon, iconPosition, iconOnly\n * son inputs reactivos. El estado se computa automáticamente con computed().\n */\n@Component({\n selector: 'button[neu-button]',\n imports: [NeuIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.disabled]': 'isDisabled() ? \"\" : null',\n '[attr.aria-disabled]': 'isDisabled()',\n '[attr.aria-busy]': 'loading()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '(click)': '_onHostClick($event)',\n },\n template: `\n @if (loading()) {\n <span class=\"neu-button__spinner\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"31.416\"\n stroke-dashoffset=\"10\"\n />\n </svg>\n </span>\n }\n @if (hasIcon() && iconPosition() === 'left') {\n <neu-icon [name]=\"icon()\" [size]=\"iconSize()\" strokeWidth=\"2\" aria-hidden=\"true\" />\n }\n <ng-content />\n @if (hasIcon() && iconPosition() === 'right') {\n <neu-icon [name]=\"icon()\" [size]=\"iconSize()\" strokeWidth=\"2\" aria-hidden=\"true\" />\n }\n `,\n styleUrl: './neu-button.component.scss',\n})\nexport class NeuButtonComponent {\n /** Variante visual del botón */\n variant = input<NeuButtonVariant>('primary');\n\n /** Tamaño del botón */\n size = input<NeuButtonSize>('md');\n\n /** Deshabilita el botón y bloquea la interacción */\n disabled = input<boolean>(false);\n\n /** Muestra un spinner y deshabilita mientras se procesa */\n loading = input<boolean>(false);\n\n /** Ocupa el 100% del ancho de su contenedor */\n fullWidth = input<boolean>(false);\n\n /** Nombre del icono Lucide (ej: 'lucideSave', 'lucidePlus') */\n icon = input<string>('');\n\n /** Posición del icono respecto al texto */\n iconPosition = input<NeuButtonIconPosition>('left');\n\n /** Modo solo-icono: aplica padding cuadrado y oculta el ng-content */\n iconOnly = input<boolean>(false);\n\n /** Etiqueta accesible obligatoria cuando se usa iconOnly (WCAG 4.1.2) */\n ariaLabel = input<string>('');\n\n /** Emite el evento de click cuando el botón está activo */\n neuClick = output<MouseEvent>();\n\n /** @internal — reenvía el click nativo al output Angular */\n _onHostClick(event: MouseEvent): void {\n if (!this.isDisabled()) {\n this.neuClick.emit(event);\n }\n }\n\n readonly isDisabled = computed(() => this.disabled() || this.loading());\n readonly hasIcon = computed(() => !!this.icon());\n\n readonly iconSize = computed(() => {\n const map: Record<NeuButtonSize, string> = { sm: '14px', md: '16px', lg: '18px' };\n return map[this.size()];\n });\n\n readonly hostClasses = computed(() => ({\n 'neu-button': true,\n [`neu-button--${this.variant()}`]: true,\n [`neu-button--${this.size()}`]: true,\n 'neu-button--loading': this.loading(),\n 'neu-button--disabled': this.isDisabled(),\n 'neu-button--full-width': this.fullWidth(),\n 'neu-button--icon-only': this.iconOnly(),\n }));\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { ChartComponent } from 'ng-apexcharts';\n\nexport type NeuChartType =\n | 'line'\n | 'area'\n | 'bar'\n | 'bar-stacked'\n | 'bar-horizontal'\n | 'bar-horizontal-stacked'\n | 'pareto'\n | 'donut'\n | 'pie'\n | 'radialBar';\n\nexport interface NeuChartSeries {\n name: string;\n data: number[];\n}\n\n/** Paleta por defecto Neural-Blue */\nconst DEFAULT_COLORS = ['#007aff', '#5856d6', '#34c759', '#ff9f0a', '#ff3b30', '#64748b'];\n\n/** Calcula la línea acumulada porcentual para un diagrama de Pareto. */\nfunction computeParetoCumulative(data: number[]): number[] {\n const total = data.reduce((s, v) => s + Math.abs(v), 0);\n if (total === 0) return data.map(() => 0);\n let cum = 0;\n return data.map((v) => {\n cum += Math.abs(v);\n return Math.round((cum / total) * 1000) / 10;\n });\n}\n\n/**\n * NeuChart — Wrapper reactivo de ApexCharts con estética Neural-Blue.\n *\n * Tipos soportados:\n * line · area · bar · bar-stacked · bar-horizontal · bar-horizontal-stacked · pareto · donut · pie · radialBar\n *\n * Uso:\n * <neu-chart\n * type=\"bar-stacked\"\n * [series]=\"series()\"\n * [categories]=\"months()\"\n * height=\"280\"\n * />\n */\n@Component({\n selector: 'neu-chart',\n imports: [ChartComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-chart' },\n template: `\n <apx-chart\n [chart]=\"chartConfig()\"\n [series]=\"resolvedSeries()\"\n [labels]=\"labels()\"\n [xaxis]=\"xaxisConfig()\"\n [yaxis]=\"yaxisConfig()\"\n [colors]=\"resolvedColors()\"\n [stroke]=\"strokeConfig()\"\n [fill]=\"fillConfig()\"\n [dataLabels]=\"dataLabelsConfig()\"\n [grid]=\"gridConfig()\"\n [legend]=\"legendConfig()\"\n [tooltip]=\"tooltipConfig()\"\n [plotOptions]=\"plotOptionsConfig()\"\n />\n `,\n styleUrl: './neu-chart.component.scss',\n})\nexport class NeuChartComponent {\n /** Tipo de gráfica. */\n type = input<NeuChartType>('line');\n /** Series para gráficas de ejes (line, area, bar, pareto…). */\n series = input<NeuChartSeries[]>([]);\n /** Series para gráficas sin ejes (donut, pie). */\n pieSeries = input<number[]>([]);\n /** Etiquetas del eje X. */\n categories = input<string[]>([]);\n /** Etiquetas para donut/pie. */\n labels = input<string[]>([]);\n /** Altura en px. */\n height = input<number>(280);\n /** Colores custom. Si no se proveen, usa la paleta Neural-Blue. */\n colors = input<string[]>([]);\n /** Muestra/oculta las etiquetas de datos. */\n showDataLabels = input<boolean>(false);\n /** Título de la gráfica. */\n title = input<string>('');\n\n // --------------------------------------------------\n // Helpers privados\n // --------------------------------------------------\n\n private get _isBar(): boolean {\n return ['bar', 'bar-stacked', 'bar-horizontal', 'bar-horizontal-stacked', 'pareto'].includes(\n this.type(),\n );\n }\n\n private get _isStacked(): boolean {\n return ['bar-stacked', 'bar-horizontal-stacked'].includes(this.type());\n }\n\n private get _isHorizontal(): boolean {\n return ['bar-horizontal', 'bar-horizontal-stacked'].includes(this.type());\n }\n\n // --------------------------------------------------\n // Configs computadas\n // --------------------------------------------------\n\n protected readonly resolvedColors = computed(() =>\n this.colors().length ? this.colors() : DEFAULT_COLORS,\n );\n\n protected readonly resolvedSeries = computed((): any => {\n const t = this.type();\n if (t === 'donut' || t === 'pie') return this.pieSeries();\n if (t === 'pareto') {\n const first = this.series()[0];\n if (!first) return [];\n const cumulative = computeParetoCumulative(first.data);\n return [\n { name: first.name, type: 'bar', data: first.data },\n { name: 'Acumulado %', type: 'line', data: cumulative },\n ];\n }\n return this.series();\n });\n\n protected readonly chartConfig = computed(() => {\n const t = this.type();\n const apexType: string =\n t === 'bar-stacked' || t === 'bar-horizontal' || t === 'bar-horizontal-stacked'\n ? 'bar'\n : t === 'pareto'\n ? 'bar'\n : t;\n return {\n type: apexType as any,\n height: this.height(),\n stacked: this._isStacked,\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n foreColor: '#64748b',\n background: 'transparent',\n toolbar: { show: false },\n sparkline: { enabled: false },\n zoom: { enabled: false },\n animations: { enabled: true, speed: 500 },\n };\n });\n\n protected readonly xaxisConfig = computed(() => ({\n categories: this.categories(),\n labels: {\n style: { fontSize: '12px', fontFamily: 'inherit', colors: '#94a3b8' },\n },\n axisBorder: { show: false },\n axisTicks: { show: false },\n }));\n\n protected readonly yaxisConfig = computed((): any => {\n const labelStyle = { fontSize: '12px', fontFamily: 'inherit', colors: '#94a3b8' };\n if (this.type() === 'pareto') {\n return [\n { labels: { style: labelStyle } },\n {\n opposite: true,\n min: 0,\n max: 100,\n tickAmount: 5,\n labels: {\n style: labelStyle,\n formatter: (v: number) => `${v}%`,\n },\n },\n ];\n }\n return { labels: { style: labelStyle } };\n });\n\n protected readonly strokeConfig = computed(() => {\n const t = this.type();\n if (this._isBar || t === 'donut' || t === 'pie') return { show: false };\n if (t === 'pareto') {\n return {\n show: true,\n width: [0, 2],\n curve: ['straight', 'smooth'] as any,\n lineCap: 'round' as const,\n };\n }\n return { curve: 'smooth' as const, width: 2 };\n });\n\n protected readonly fillConfig = computed(() => {\n const t = this.type();\n if (t === 'area') {\n return {\n type: 'gradient' as const,\n gradient: { shadeIntensity: 1, opacityFrom: 0.35, opacityTo: 0.02, stops: [0, 100] },\n };\n }\n return { opacity: 0.85 };\n });\n\n protected readonly dataLabelsConfig = computed(() => ({\n enabled: this.showDataLabels(),\n style: { fontSize: '11px', fontFamily: 'inherit' },\n }));\n\n protected readonly gridConfig = computed(() => ({\n borderColor: '#e2e8f0',\n strokeDashArray: 4,\n xaxis: { lines: { show: false } },\n yaxis: { lines: { show: true } },\n padding: { left: 4, right: 4 },\n }));\n\n protected readonly legendConfig = computed(() => ({\n position: 'bottom' as const,\n fontFamily: 'inherit',\n fontSize: '12px',\n markers: { size: 6 },\n itemMargin: { horizontal: 8 },\n }));\n\n protected readonly tooltipConfig = computed(() => {\n const base = {\n theme: 'light' as const,\n style: { fontSize: '12px', fontFamily: 'inherit' },\n };\n if (this.type() === 'pareto') {\n return {\n ...base,\n y: [\n { formatter: (v: number) => String(v) },\n { formatter: (v: number) => `${v.toFixed(1)}%` },\n ],\n };\n }\n return base;\n });\n\n protected readonly plotOptionsConfig = computed(() => {\n const t = this.type();\n if (t === 'donut' || t === 'pie') {\n return { pie: { donut: { size: '68%' } } };\n }\n if (this._isBar || t === 'pareto') {\n return {\n bar: {\n horizontal: this._isHorizontal,\n borderRadius: this._isStacked ? 0 : 4,\n columnWidth: '60%',\n barHeight: '70%',\n dataLabels: { total: { enabled: false } },\n },\n };\n }\n return {};\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\n\nexport type NeuChipVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger';\nexport type NeuChipSize = 'sm' | 'md';\n\n/**\n * NeuralUI Chip Component\n *\n * Etiqueta compacta seleccionable y/o eliminable. Ideal para filtros,\n * listas de tags y multiselección visual.\n *\n * Uso:\n * <neu-chip>Angular</neu-chip>\n * <neu-chip [removable]=\"true\" (removed)=\"onRemove()\">CSS</neu-chip>\n * <neu-chip [selected]=\"true\" (selectedChange)=\"toggle()\">TypeScript</neu-chip>\n */\n@Component({\n selector: 'neu-chip',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n role: 'option',\n '[attr.aria-selected]': 'selected()',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '(keydown.space)': 'onToggle()',\n '(keydown.enter)': 'onToggle()',\n },\n template: `\n <ng-content />\n @if (removable()) {\n <button\n class=\"neu-chip__remove\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"$event.stopPropagation(); onRemove()\"\n [attr.aria-label]=\"removeAriaLabel()\"\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n `,\n styleUrl: './neu-chip.component.scss',\n})\nexport class NeuChipComponent {\n /** Variante de color */\n variant = input<NeuChipVariant>('default');\n\n /** Tamaño */\n size = input<NeuChipSize>('md');\n\n /** Estado seleccionado */\n selected = input<boolean>(false);\n\n /** Muestra botón de cierre */\n removable = input<boolean>(false);\n\n /** Deshabilitado */\n disabled = input<boolean>(false);\n\n /** Aria-label del botón de eliminar */\n removeAriaLabel = input<string>('Eliminar');\n\n /** Emite al hacer clic o pulsar espacio/enter */\n selectedChange = output<boolean>();\n\n /** Emite al pulsar el botón de cierre */\n removed = output<void>();\n\n readonly hostClasses = computed(() => ({\n 'neu-chip': true,\n [`neu-chip--${this.variant()}`]: true,\n [`neu-chip--${this.size()}`]: true,\n 'neu-chip--selected': this.selected(),\n 'neu-chip--removable': this.removable(),\n 'neu-chip--disabled': this.disabled(),\n }));\n\n onToggle(): void {\n if (!this.disabled()) {\n this.selectedChange.emit(!this.selected());\n }\n }\n\n onRemove(): void {\n if (!this.disabled()) {\n this.removed.emit();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * NeuralUI Code Block\n *\n * Bloque de código con estilo editor oscuro (Tokyo Night).\n * Incluye botón de copiar al portapapeles, badge del lenguaje\n * y soporte para resaltado futuro con ngx-highlightjs.\n *\n * Uso:\n * <neu-code-block [code]=\"snippet\" lang=\"TypeScript\" />\n *\n * Con ngx-highlightjs instalado, envuelve el <pre> con\n * [highlight]=\"code\" para resaltado automático.\n */\n@Component({\n selector: 'neu-code-block',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"neu-code-block\">\n <!-- Encabezado del editor -->\n <div class=\"neu-code-block__header\">\n <!-- Traffic lights decorativos -->\n <div class=\"neu-code-block__dots\" aria-hidden=\"true\">\n <span></span><span></span><span></span>\n </div>\n <span class=\"neu-code-block__lang\">{{ lang() }}</span>\n <button\n class=\"neu-code-block__copy\"\n type=\"button\"\n [attr.aria-label]=\"copied() ? copiedAriaLabel() : copyAriaLabel()\"\n (click)=\"copy()\"\n >\n @if (copied()) {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n {{ copiedLabel() }}\n } @else {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n {{ copyLabel() }}\n }\n </button>\n </div>\n\n <!-- Bloque de código -->\n <pre class=\"neu-code-block__pre\"><code class=\"neu-code-block__code\">{{ code() }}</code></pre>\n </div>\n `,\n styleUrl: './neu-code-block.component.scss',\n})\nexport class NeuCodeBlockComponent {\n private readonly doc = inject(DOCUMENT);\n\n /** Código fuente a mostrar */\n code = input<string>('');\n\n /** Nombre del lenguaje (decorativo) */\n lang = input<string>('TypeScript');\n\n /** Texto del botón cuando no se ha copiado */\n copyLabel = input<string>('Copiar');\n\n /** Texto del botón tras copiar */\n copiedLabel = input<string>('Copiado');\n\n /** Aria-label del botón copiar */\n copyAriaLabel = input<string>('Copiar código');\n\n /** Aria-label del botón tras copiar */\n copiedAriaLabel = input<string>('Código copiado');\n\n protected readonly copied = signal(false);\n private _copyTimer?: ReturnType<typeof setTimeout>;\n\n copy(): void {\n const text = this.code();\n const win = this.doc.defaultView;\n\n if (win?.navigator?.clipboard) {\n void win.navigator.clipboard.writeText(text).then(() => this._markCopied());\n } else {\n // Fallback para HTTP o navegadores sin Clipboard API\n const ta = this.doc.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;top:0;left:0;opacity:0;pointer-events:none';\n this.doc.body.appendChild(ta);\n ta.focus();\n ta.select();\n try {\n this.doc.execCommand('copy');\n this._markCopied();\n } finally {\n this.doc.body.removeChild(ta);\n }\n }\n }\n\n private _markCopied(): void {\n this.copied.set(true);\n clearTimeout(this._copyTimer);\n this._copyTimer = setTimeout(() => this.copied.set(false), 2000);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n output,\n} from '@angular/core';\nimport { NeuIconComponent } from '../icon/neu-icon.component';\nimport { NeuButtonComponent } from '../button/neu-button.component';\n\n/**\n * NeuEmptyState — Estado vacío con icono Lucide, título, descripción y acción.\n *\n * Uso:\n * <neu-empty-state\n * icon=\"lucideInbox\"\n * title=\"Sin resultados\"\n * description=\"Prueba con otros filtros.\"\n * actionLabel=\"Limpiar filtros\"\n * (action)=\"clearFilters()\"\n * />\n */\n@Component({\n selector: 'neu-empty-state',\n imports: [NeuIconComponent, NeuButtonComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-empty-state' },\n template: `\n <div class=\"neu-empty-state__inner\">\n @if (icon()) {\n <span class=\"neu-empty-state__icon\">\n <neu-icon [name]=\"icon()\" [size]=\"iconSize()\" />\n </span>\n }\n\n <p class=\"neu-empty-state__title\">{{ title() }}</p>\n\n @if (description()) {\n <p class=\"neu-empty-state__desc\">{{ description() }}</p>\n }\n\n @if (actionLabel()) {\n <button neu-button variant=\"primary\" size=\"md\" (click)=\"action.emit()\">\n {{ actionLabel() }}\n </button>\n }\n </div>\n `,\n styleUrl: './neu-empty-state.component.scss',\n})\nexport class NeuEmptyStateComponent {\n /** Nombre del icono Lucide registrado con provideIcons(). */\n icon = input<string>('lucideInbox');\n /** Tamaño del icono. Por defecto 3rem. */\n iconSize = input<string>('3rem');\n /** Título principal del estado vacío. */\n title = input<string>('No hay nada aquí');\n /** Descripción secundaria opcional. */\n description = input<string>('');\n /** Texto del botón de acción. Si está vacío, no se muestra el botón. */\n actionLabel = input<string>('');\n\n /** Emite cuando el usuario hace clic en el botón de acción. */\n action = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type NeuProgressVariant = 'primary' | 'success' | 'warning' | 'danger';\n\n/**\n * NeuralUI ProgressBar Component\n *\n * Barra de progreso accesible con valor, etiqueta y variantes semánticas.\n * Soporte para modo indeterminado (animación continua).\n *\n * Uso:\n * <neu-progress-bar [value]=\"75\" />\n * <neu-progress-bar [value]=\"75\" label=\"Cargando...\" variant=\"success\" [showValue]=\"true\" />\n * <neu-progress-bar [indeterminate]=\"true\" />\n */\n@Component({\n selector: 'neu-progress-bar',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"neu-progress\" [class]=\"hostClasses()\">\n @if (label()) {\n <div class=\"neu-progress__header\">\n <span class=\"neu-progress__label\">{{ label() }}</span>\n @if (showValue() && !indeterminate()) {\n <span class=\"neu-progress__value\">{{ clampedValue() }}%</span>\n }\n </div>\n } @else if (showValue() && !indeterminate()) {\n <div class=\"neu-progress__header\">\n <span></span>\n <span class=\"neu-progress__value\">{{ clampedValue() }}%</span>\n </div>\n }\n <div\n class=\"neu-progress__track\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminate() ? null : clampedValue()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-label]=\"label() || 'Progreso'\"\n [attr.aria-valuetext]=\"indeterminate() ? 'Cargando...' : clampedValue() + '%'\"\n >\n <div\n class=\"neu-progress__fill\"\n [class.neu-progress__fill--indeterminate]=\"indeterminate()\"\n [style.width.%]=\"indeterminate() ? null : clampedValue()\"\n ></div>\n </div>\n </div>\n `,\n styleUrl: './neu-progress-bar.component.scss',\n})\nexport class NeuProgressBarComponent {\n /** Valor de 0 a 100 */\n value = input<number>(0);\n\n /** Variante de color */\n variant = input<NeuProgressVariant>('primary');\n\n /** Etiqueta descriptiva sobre la barra */\n label = input<string>('');\n\n /** Muestra el % a la derecha */\n showValue = input<boolean>(false);\n\n /** Modo indeterminado (animación continua) */\n indeterminate = input<boolean>(false);\n\n /** Altura de la barra */\n size = input<'sm' | 'md' | 'lg'>('md');\n\n readonly clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\n\n readonly hostClasses = computed(() =>\n [`neu-progress--${this.variant()}`, `neu-progress--${this.size()}`].join(' '),\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\n\n/**\n * NeuralUI Rating Component\n *\n * Selector de valoración con estrellas (o icono personalizable).\n * Soporta valores medios (half-star) y modo solo-lectura.\n *\n * Uso:\n * <neu-rating [value]=\"rating\" (valueChange)=\"rating = $event\" />\n * <neu-rating [value]=\"4.5\" [readonly]=\"true\" />\n */\n@Component({\n selector: 'neu-rating',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"neu-rating\"\n [class.neu-rating--readonly]=\"readonly()\"\n [attr.role]=\"readonly() ? null : 'radiogroup'\"\n [attr.aria-label]=\"'Valoración: ' + value() + ' de ' + stars() + ' estrellas'\"\n >\n @for (i of starsArray(); track i) {\n <button\n class=\"neu-rating__star\"\n [class.neu-rating__star--filled]=\"i <= (hovered() ?? value())\"\n [class.neu-rating__star--half]=\"\n !isInteger(hovered() ?? value()) && i === Math.ceil(hovered() ?? value())\n \"\n type=\"button\"\n [disabled]=\"readonly()\"\n [attr.aria-label]=\"i + ' star' + (i > 1 ? 's' : '')\"\n [attr.aria-checked]=\"i === value()\"\n [attr.role]=\"'radio'\"\n (mouseenter)=\"onHover(i)\"\n (mouseleave)=\"onLeave()\"\n (click)=\"select(i)\"\n (keydown.left)=\"select(value() - 1)\"\n (keydown.right)=\"select(value() + 1)\"\n >\n <svg class=\"neu-rating__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <defs>\n <linearGradient [id]=\"'half-' + i\" x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n <stop offset=\"50%\" stop-color=\"currentColor\" />\n <stop offset=\"50%\" stop-color=\"transparent\" />\n </linearGradient>\n </defs>\n <polygon\n points=\"12,2 15.09,8.26 22,9.27 17,14.14 18.18,21.02 12,17.77 5.82,21.02 7,14.14 2,9.27 8.91,8.26\"\n [attr.fill]=\"getFill(i)\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n </div>\n `,\n styleUrl: './neu-rating.component.scss',\n})\nexport class NeuRatingComponent {\n protected readonly Math = Math;\n\n /** Valor actual (1 a stars) */\n value = input<number>(0);\n\n /** Número de estrellas */\n stars = input<number>(5);\n\n /** Modo solo lectura */\n readonly = input<boolean>(false);\n\n /** Emite el nuevo valor al seleccionar */\n valueChange = output<number>();\n\n protected readonly hovered = signal<number | null>(null);\n readonly starsArray = computed(() => Array.from({ length: this.stars() }, (_, i) => i + 1));\n\n onHover(i: number): void {\n if (!this.readonly()) this.hovered.set(i);\n }\n\n onLeave(): void {\n this.hovered.set(null);\n }\n\n select(i: number): void {\n if (this.readonly()) return;\n const clamped = Math.min(this.stars(), Math.max(1, i));\n this.valueChange.emit(clamped);\n }\n\n isInteger(n: number): boolean {\n return Number.isInteger(n);\n }\n\n getFill(i: number): string {\n const val = this.hovered() ?? this.value();\n if (i <= Math.floor(val)) return 'currentColor';\n if (!Number.isInteger(val) && i === Math.ceil(val)) return `url(#half-${i})`;\n return 'transparent';\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\n/**\n * NeuralUI Skeleton Component\n *\n * Placeholder animado para simular la carga de contenido.\n *\n * Uso:\n * <neu-skeleton width=\"100%\" height=\"20px\" />\n * <neu-skeleton variant=\"circle\" width=\"40px\" height=\"40px\" />\n * <neu-skeleton variant=\"text\" />\n */\n@Component({\n selector: 'neu-skeleton',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-skeleton',\n '[class.neu-skeleton--text]': 'variant() === \"text\"',\n '[class.neu-skeleton--circle]': 'variant() === \"circle\"',\n '[class.neu-skeleton--rect]': 'variant() === \"rect\"',\n '[style.width]': 'width()',\n '[style.height]': 'height()',\n '[style.border-radius]': 'borderRadius()',\n },\n template: '',\n styleUrl: './neu-skeleton.component.scss',\n})\nexport class NeuSkeletonComponent {\n readonly variant = input<'text' | 'circle' | 'rect'>('rect');\n readonly width = input<string>('100%');\n readonly height = input<string>('16px');\n readonly borderRadius = input<string>('');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type NeuSpinnerSeverity = 'primary' | 'success' | 'warning' | 'danger' | 'info';\n\n/**\n * NeuralUI Spinner Component\n *\n * Indicador de carga circular animado, similar al ProgressSpinner de PrimeNG.\n * Permite personalizar color via severity o color CSS directo.\n *\n * Uso básico:\n * <neu-spinner />\n *\n * Con severity:\n * <neu-spinner severity=\"success\" size=\"48px\" />\n *\n * Con color personalizado:\n * <neu-spinner color=\"#ff6b35\" strokeWidth=\"6\" />\n */\n@Component({\n selector: 'neu-spinner',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-spinner-host' },\n template: `\n <svg\n class=\"neu-spinner\"\n [class]=\"'neu-spinner--' + severity()\"\n [style.width]=\"size()\"\n [style.height]=\"size()\"\n [style.animation-duration]=\"animationDuration()\"\n viewBox=\"25 25 50 50\"\n aria-hidden=\"true\"\n >\n <circle\n class=\"neu-spinner__track\"\n cx=\"50\"\n cy=\"50\"\n r=\"20\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n />\n <circle\n class=\"neu-spinner__arc\"\n cx=\"50\"\n cy=\"50\"\n r=\"20\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n [style.stroke]=\"color() || null\"\n />\n </svg>\n <span class=\"cdk-visually-hidden\">{{ ariaLabel() }}</span>\n `,\n styleUrl: './neu-spinner.component.scss',\n})\nexport class NeuSpinnerComponent {\n /** Variante de color semántica */\n severity = input<NeuSpinnerSeverity>('primary');\n\n /** Color CSS directo — sobreescribe severity */\n color = input<string>('');\n\n /** Grosor del trazo SVG (unidades SVG) */\n strokeWidth = input<string>('4');\n\n /** Tamaño del spinner (CSS: '40px', '2rem', etc.) */\n size = input<string>('40px');\n\n /** Duración de la animación de rotación */\n animationDuration = input<string>('1s');\n\n /** Texto accesible para lectores de pantalla */\n ariaLabel = input<string>('Cargando...');\n\n readonly _severityColor = computed(() => {\n const map: Record<NeuSpinnerSeverity, string> = {\n primary: 'var(--neu-primary)',\n success: 'var(--neu-success)',\n warning: 'var(--neu-warning)',\n danger: 'var(--neu-danger)',\n info: 'var(--neu-info)',\n };\n return map[this.severity()];\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NeuButtonVariant, NeuButtonSize } from '../button/neu-button.component';\n\nexport interface NeuSplitButtonAction {\n /** Identificador único de la acción */\n id: string;\n /** Texto visible */\n label: string;\n /** Icono opcional (SVG string o nombre) */\n icon?: string;\n /** Deshabilita esta acción individualmente */\n disabled?: boolean;\n /** Separador visual encima de este item */\n divider?: boolean;\n}\n\n/**\n * NeuralUI SplitButton Component\n *\n * Botón principal con un dropdown de acciones adicionales.\n *\n * Uso:\n * <neu-split-button\n * label=\"Guardar\"\n * [actions]=\"actions\"\n * (primaryClick)=\"save()\"\n * (actionClick)=\"onAction($event)\"\n * />\n */\n@Component({\n selector: 'neu-split-button',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-split-button-host',\n '(document:click)': 'onDocumentClick($event)',\n '(keydown.escape)': 'closeDropdown()',\n },\n template: `\n <div class=\"neu-split-button\" [class.neu-split-button--disabled]=\"isDisabled()\">\n <!-- Botón principal -->\n <button\n class=\"neu-split-button__main\"\n [class]=\"mainClasses()\"\n type=\"button\"\n [disabled]=\"isDisabled() || null\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-busy]=\"loading()\"\n (click)=\"onPrimaryClick($event)\"\n >\n @if (loading()) {\n <span class=\"neu-button__spinner\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"31.416\"\n stroke-dashoffset=\"10\"\n />\n </svg>\n </span>\n }\n {{ label() }}\n </button>\n\n <!-- Separador -->\n <span class=\"neu-split-button__divider\" aria-hidden=\"true\"></span>\n\n <!-- Chevron trigger -->\n <button\n class=\"neu-split-button__chevron\"\n [class]=\"chevronClasses()\"\n type=\"button\"\n [disabled]=\"isDisabled() || null\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"moreActionsAriaLabel()\"\n (click)=\"toggleDropdown($event)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n <!-- Dropdown de acciones -->\n @if (isOpen()) {\n <div\n class=\"neu-split-button__dropdown\"\n role=\"menu\"\n [attr.aria-label]=\"actionsAriaLabel()\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of actions(); track action.id) {\n @if (action.divider) {\n <div class=\"neu-split-button__dropdown-sep\" role=\"separator\" aria-hidden=\"true\"></div>\n }\n <button\n class=\"neu-split-button__dropdown-item\"\n [class.neu-split-button__dropdown-item--disabled]=\"action.disabled\"\n type=\"button\"\n role=\"menuitem\"\n [disabled]=\"action.disabled || null\"\n [attr.aria-disabled]=\"action.disabled ? 'true' : null\"\n (click)=\"onActionClick(action)\"\n >\n {{ action.label }}\n </button>\n }\n </div>\n }\n </div>\n `,\n styleUrl: './neu-split-button.component.scss',\n})\nexport class NeuSplitButtonComponent {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Texto del botón principal */\n label = input<string>('');\n\n /** Variante visual */\n variant = input<NeuButtonVariant>('primary');\n\n /** Tamaño */\n size = input<NeuButtonSize>('md');\n\n /** Deshabilita todo el componente */\n disabled = input<boolean>(false);\n\n /** Muestra spinner en el botón principal */\n loading = input<boolean>(false);\n\n /** Acciones del dropdown */\n actions = input<NeuSplitButtonAction[]>([]);\n\n /** Aria-label del botón de desplegable */\n moreActionsAriaLabel = input<string>('Más opciones');\n\n /** Aria-label del menú desplegable */\n actionsAriaLabel = input<string>('Acciones');\n\n /** Emite al hacer click en el botón principal */\n primaryClick = output<MouseEvent>();\n\n /** Emite al seleccionar una acción del dropdown */\n actionClick = output<NeuSplitButtonAction>();\n\n readonly isOpen = signal(false);\n\n readonly isDisabled = computed(() => this.disabled() || this.loading());\n\n readonly mainClasses = computed(\n () =>\n `neu-button neu-button--${this.variant()} neu-button--${this.size()}${this.loading() ? ' neu-button--loading' : ''}`,\n );\n\n readonly chevronClasses = computed(\n () => `neu-button neu-button--${this.variant()} neu-button--${this.size()}`,\n );\n\n toggleDropdown(event: MouseEvent): void {\n event.stopPropagation();\n this.isOpen.update((v) => !v);\n }\n\n closeDropdown(): void {\n this.isOpen.set(false);\n }\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.el.nativeElement.contains(event.target as Node)) this.closeDropdown();\n }\n\n onPrimaryClick(event: MouseEvent): void {\n if (this.isDisabled()) return;\n this.primaryClick.emit(event);\n }\n\n onActionClick(action: NeuSplitButtonAction): void {\n if (action.disabled) return;\n this.closeDropdown();\n this.actionClick.emit(action);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { NeuIconComponent } from '../icon/neu-icon.component';\n\nexport type NeuStatsTrend = 'up' | 'down' | 'neutral';\n\n/**\n * NeuStatsCard — Card de métrica con título, valor, tendencia y sparkline.\n *\n * Uso:\n * <neu-stats-card\n * title=\"Ingresos\"\n * value=\"$12,450\"\n * change=\"+12.5%\"\n * trend=\"up\"\n * icon=\"lucideDollarSign\"\n * [sparkData]=\"[30,45,38,52,60,55,70]\"\n * />\n */\n@Component({\n selector: 'neu-stats-card',\n imports: [NeuIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-stats-card' },\n template: `\n <div class=\"neu-stats-card__inner\">\n <!-- Header: icono + título -->\n <div class=\"neu-stats-card__header\">\n @if (icon()) {\n <span class=\"neu-stats-card__icon\">\n <neu-icon [name]=\"icon()\" size=\"1.125rem\" />\n </span>\n }\n <span class=\"neu-stats-card__title\">{{ title() }}</span>\n </div>\n\n <!-- Valor principal -->\n <div class=\"neu-stats-card__value\">{{ value() }}</div>\n\n <!-- Footer: cambio + sparkline -->\n <div class=\"neu-stats-card__footer\">\n @if (change()) {\n <span class=\"neu-stats-card__change neu-stats-card__change--{{ trend() }}\">\n @if (trend() === 'up') {\n <neu-icon name=\"lucideTrendingUp\" size=\"0.875rem\" />\n } @else if (trend() === 'down') {\n <neu-icon name=\"lucideTrendingDown\" size=\"0.875rem\" />\n } @else {\n <neu-icon name=\"lucideMinus\" size=\"0.875rem\" />\n }\n {{ change() }}\n </span>\n }\n @if (label()) {\n <span class=\"neu-stats-card__label\">{{ label() }}</span>\n }\n\n @if (sparkData().length > 1) {\n <svg\n class=\"neu-stats-card__sparkline\"\n viewBox=\"0 0 100 30\"\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n >\n <polyline\n class=\"neu-stats-card__spark-line\"\n [attr.points]=\"sparkPoints()\"\n fill=\"none\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </div>\n </div>\n `,\n styleUrl: './neu-stats-card.component.scss',\n})\nexport class NeuStatsCardComponent {\n /** Título o etiqueta de la métrica. */\n title = input<string>('');\n /** Valor principal formateado (p.ej. \"$12,450\" o \"98.2%\"). */\n value = input<string>('');\n /** Cambio porcentual o absoluto (p.ej. \"+12.5%\" o \"-3\"). */\n change = input<string>('');\n /** Dirección del cambio. Afecta el color del change. */\n trend = input<NeuStatsTrend>('neutral');\n /** Texto auxiliar bajo el cambio (p.ej. \"vs. mes anterior\"). */\n label = input<string>('');\n /** Nombre del icono Lucide para el encabezado. */\n icon = input<string>('');\n /** Array de valores numéricos para la sparkline. Mín. 2 puntos. */\n sparkData = input<number[]>([]);\n\n /** @internal Genera los puntos SVG de la sparkline */\n protected readonly sparkPoints = computed(() => {\n const data = this.sparkData();\n if (data.length < 2) return '';\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n const step = 100 / (data.length - 1);\n return data\n .map((v, i) => `${(i * step).toFixed(1)},${(30 - ((v - min) / range) * 25 + 2.5).toFixed(1)}`)\n .join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\nexport type NeuTimelineItemVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface NeuTimelineItem {\n /** Etiqueta de tiempo (ej. \"Hace 2h\", \"12 Mar\") */\n time?: string;\n /** Título del evento */\n title: string;\n /** Descripción opcional */\n description?: string;\n /** Variante de color del punto */\n variant?: NeuTimelineItemVariant;\n /** Icono SVG path opcional */\n icon?: string;\n}\n\n/**\n * NeuralUI Timeline Component\n *\n * Lista vertical de eventos cronológicos con línea conectora.\n *\n * Uso:\n * <neu-timeline [items]=\"events\" />\n * <neu-timeline [items]=\"events\" align=\"right\" />\n */\n@Component({\n selector: 'neu-timeline',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ol class=\"neu-timeline\">\n @for (item of items(); track item.title; let last = $last) {\n <li class=\"neu-timeline__item\" [class.neu-timeline__item--last]=\"last\">\n <!-- Eje izquierdo (punto + línea) -->\n <div class=\"neu-timeline__axis\">\n <div\n class=\"neu-timeline__dot\"\n [class]=\"'neu-timeline__dot--' + (item.variant ?? 'default')\"\n >\n @if (item.icon) {\n <svg\n class=\"neu-timeline__dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <path [attr.d]=\"item.icon\" />\n </svg>\n }\n </div>\n @if (!last) {\n <div class=\"neu-timeline__line\"></div>\n }\n </div>\n\n <!-- Contenido -->\n <div class=\"neu-timeline__content\">\n <div class=\"neu-timeline__header\">\n <span class=\"neu-timeline__title\">{{ item.title }}</span>\n @if (item.time) {\n <span class=\"neu-timeline__time\">{{ item.time }}</span>\n }\n </div>\n @if (item.description) {\n <p class=\"neu-timeline__desc\">{{ item.description }}</p>\n }\n </div>\n </li>\n }\n </ol>\n `,\n styleUrl: './neu-timeline.component.scss',\n})\nexport class NeuTimelineComponent {\n /** Eventos a mostrar */\n items = input<NeuTimelineItem[]>([]);\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';\nimport { NeuToastService } from './neu-toast.service';\nimport { NeuToastType } from './neu-toast.types';\nimport { NeuIconComponent } from '../icon/neu-icon.component';\n\n/** Mapa de iconos Lucide por tipo de toast */\nconst TOAST_ICONS: Record<NeuToastType, string> = {\n success: 'lucideCheckCircle',\n error: 'lucideXCircle',\n warning: 'lucideAlertTriangle',\n info: 'lucideInfo',\n};\n\n/**\n * NeuralUI Toast Container Component\n *\n * Renderiza los toasts activos del NeuToastService.\n * Añade este componente una sola vez en la raíz del app (app.html).\n *\n * Diseño mobile-first:\n * - < 400px: banner inferior centrado\n * - ≥ 400px: stack en la esquina superior derecha\n *\n * Uso:\n * <!-- en app.html -->\n * <neu-toast-container />\n */\n@Component({\n selector: 'neu-toast-container',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NeuIconComponent],\n host: {\n class: 'neu-toast-container',\n 'aria-live': 'polite',\n 'aria-atomic': 'false',\n '[class.neu-toast-container--top-right]': 'toastService.position() === \"top-right\"',\n '[class.neu-toast-container--top-left]': 'toastService.position() === \"top-left\"',\n '[class.neu-toast-container--bottom-right]': 'toastService.position() === \"bottom-right\"',\n '[class.neu-toast-container--bottom-left]': 'toastService.position() === \"bottom-left\"',\n },\n template: `\n @for (toast of toastService.toasts(); track toast.id) {\n <div\n class=\"neu-toast\"\n [class]=\"'neu-toast neu-toast--' + toast.type\"\n [attr.role]=\"toast.type === 'error' || toast.type === 'warning' ? 'alert' : 'status'\"\n [attr.aria-live]=\"\n toast.type === 'error' || toast.type === 'warning' ? 'assertive' : 'polite'\n \"\n >\n <span class=\"neu-toast__icon-wrap\" aria-hidden=\"true\">\n <neu-icon [name]=\"getIcon(toast.type)\" size=\"1rem\" />\n </span>\n <div class=\"neu-toast__body\">\n @if (toast.title) {\n <p class=\"neu-toast__title\">{{ toast.title }}</p>\n }\n <p class=\"neu-toast__message\">{{ toast.message }}</p>\n </div>\n <button\n class=\"neu-toast__close\"\n type=\"button\"\n [attr.aria-label]=\"'Cerrar'\"\n (click)=\"toastService.dismiss(toast.id)\"\n >\n <neu-icon name=\"lucideX\" size=\"1rem\" />\n </button>\n </div>\n }\n `,\n styleUrl: './neu-toast.component.scss',\n})\nexport class NeuToastContainerComponent {\n readonly toastService = inject(NeuToastService);\n\n getIcon(type: NeuToastType): string {\n return TOAST_ICONS[type];\n }\n}\n","/*\n * Public API Surface of @neural-ui/core\n */\n\n// ── Setup ─────────────────────────────────────────────────────────────────\nexport * from './lib/provide-neural-ui';\n\n// ── Servicios ─────────────────────────────────────────────────────────────\nexport * from './lib/url-state/neu-url-state.service';\nexport * from './lib/toast/neu-toast.service';\nexport * from './lib/toast/neu-toast.types';\n\n// ── Formularios ───────────────────────────────────────────────────────────\nexport * from './lib/checkbox/neu-checkbox.component';\nexport * from './lib/date-input/neu-date-input.component';\nexport * from './lib/input/neu-input.component';\nexport * from './lib/multiselect/neu-multiselect.component';\nexport * from './lib/multiselect/neu-multiselect.directives';\nexport * from './lib/radio/neu-radio-group.component';\nexport * from './lib/radio/neu-radio.component';\nexport * from './lib/select/neu-select.component';\nexport * from './lib/select/neu-select.types';\nexport * from './lib/select/neu-select.directives';\nexport * from './lib/slider/neu-slider.component';\nexport * from './lib/switch/neu-switch.component';\nexport * from './lib/textarea/neu-textarea.component';\nexport * from './lib/toggle-button-group/neu-toggle-button-group.component';\n\n// ── Navegación ────────────────────────────────────────────────────────────\nexport * from './lib/breadcrumb/neu-breadcrumb.component';\nexport * from './lib/nav/neu-nav.component';\nexport * from './lib/pagination/neu-pagination.component';\nexport * from './lib/sidebar/neu-sidebar.component';\nexport * from './lib/stepper/neu-stepper.component';\nexport * from './lib/tabs/neu-tabs.component';\n\n// ── Layouts y contenedores ────────────────────────────────────────────────\nexport * from './lib/accordion/neu-accordion.component';\nexport * from './lib/card/neu-card.component';\nexport * from './lib/divider/neu-divider.component';\nexport * from './lib/modal/neu-modal.component';\nexport * from './lib/table/neu-table.component';\nexport * from './lib/table/neu-table.types';\nexport * from './lib/table/neu-table-expand.directive';\n\n// ── Elementos de UI ───────────────────────────────────────────────────────\nexport * from './lib/avatar/neu-avatar.component';\nexport * from './lib/badge/neu-badge.component';\nexport * from './lib/button/neu-button.component';\nexport * from './lib/chart/neu-chart.component';\nexport * from './lib/chip/neu-chip.component';\nexport * from './lib/code-block/neu-code-block.component';\nexport * from './lib/empty-state/neu-empty-state.component';\nexport * from './lib/icon/neu-icon.component';\nexport * from './lib/progress-bar/neu-progress-bar.component';\nexport * from './lib/rating/neu-rating.component';\nexport * from './lib/skeleton/neu-skeleton.component';\nexport * from './lib/spinner/neu-spinner.component';\nexport * from './lib/split-button/neu-split-button.component';\nexport * from './lib/stats-card/neu-stats-card.component';\nexport * from './lib/timeline/neu-timeline.component';\n\n// ── Feedback y overlays ───────────────────────────────────────────────────\nexport * from './lib/toast/neu-toast.component';\nexport * from './lib/tooltip/neu-tooltip.component';\nexport * from './lib/tooltip/neu-tooltip.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["filter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"neural-ui-core.mjs","sources":["../../../../projects/ui-core/provide-neural-ui.ts","../../../../projects/ui-core/public-api.ts","../../../../projects/ui-core/neural-ui-core.ts"],"sourcesContent":["import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { provideIcons, provideNgIconsConfig } from '@ng-icons/core';\nimport {\n lucideAlertCircle,\n lucideAlertTriangle,\n lucideCheckCircle,\n lucideChevronLeft,\n lucideChevronRight,\n lucideExternalLink,\n lucideInbox,\n lucideInfo,\n lucideMinus,\n lucideTrendingDown,\n lucideTrendingUp,\n lucideX,\n lucideXCircle,\n} from '@ng-icons/lucide';\n\nexport interface NeuralUIConfig {\n /** Tamaño por defecto de los iconos. Por defecto: '1.25rem' / Default icon size. Default: '1.25rem' */\n iconSize?: string;\n /** Grosor de trazo de los iconos. Por defecto: '2' / Icon stroke width. Default: '2' */\n iconStrokeWidth?: string;\n}\n\n/**\n * Registra los providers necesarios para NeuralUI.\n *\n * Incluye los iconos internos de la librería y la configuración\n * por defecto de @ng-icons.\n *\n * @example\n * // app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideNeuralUI(),\n * ],\n * };\n *\n * @example\n * // Con opciones personalizadas\n * provideNeuralUI({ iconSize: '1rem', iconStrokeWidth: '1.5' })\n */\nexport function provideNeuralUI(config: NeuralUIConfig = {}): EnvironmentProviders {\n const { iconSize = '1.25rem', iconStrokeWidth = '2' } = config;\n\n return makeEnvironmentProviders([\n provideIcons({\n // Input validation\n lucideAlertCircle,\n // Toast severity icons\n lucideCheckCircle,\n lucideXCircle,\n lucideAlertTriangle,\n lucideInfo,\n // Close buttons (sidebar, modal, toast)\n lucideX,\n // Nav chevrons + collapse toggle\n lucideChevronRight,\n lucideChevronLeft,\n // Nav external link\n lucideExternalLink,\n // EmptyState default icon\n lucideInbox,\n // StatsCard trend icons\n lucideTrendingUp,\n lucideTrendingDown,\n lucideMinus,\n }),\n provideNgIconsConfig({ size: iconSize, strokeWidth: iconStrokeWidth }),\n ]);\n}\n","/*\n * Public API Surface of @neural-ui/core\n *\n * The root entry point only exports the setup function.\n * Import individual components from their specific entry points:\n * import { NeuButtonComponent } from '@neural-ui/core/button';\n * import { NeuTableComponent } from '@neural-ui/core/table';\n *\n * La raíz solo exporta la función de setup.\n * Importa los componentes individuales desde sus entry points específicos.\n */\n\n// ── Setup ─────────────────────────────────────────────────────────────────\nexport * from './provide-neural-ui';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAyBA;;;;;;;;;;;;;;;;;AAiBG;AACG,SAAU,eAAe,CAAC,MAAA,GAAyB,EAAE,EAAA;IACzD,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAE,eAAe,GAAG,GAAG,EAAE,GAAG,MAAM;AAE9D,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,YAAY,CAAC;;YAEX,iBAAiB;;YAEjB,iBAAiB;YACjB,aAAa;YACb,mBAAmB;YACnB,UAAU;;YAEV,OAAO;;YAEP,kBAAkB;YAClB,iBAAiB;;YAEjB,kBAAkB;;YAElB,WAAW;;YAEX,gBAAgB;YAChB,kBAAkB;YAClB,WAAW;SACZ,CAAC;QACF,oBAAoB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AACvE,KAAA,CAAC;AACJ;;ACvEA;;;;;;;;;;AAUG;AAEH;;ACZA;;AAEG;;;;"}
|