codexly-ui 0.0.53 → 0.0.55
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexly-ui.mjs","sources":["../../../projects/codexly-ui/src/lib/types/clx-color.types.ts","../../../projects/codexly-ui/src/lib/configs/badge.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-badge/clx-badge.component.ts","../../../projects/codexly-ui/src/lib/configs/icon-size.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-icon/clx-icon.component.ts","../../../projects/codexly-ui/src/lib/general/widgets/clx-stat-card/clx-stat-card.component.ts","../../../projects/codexly-ui/src/lib/configs/product.config.ts","../../../projects/codexly-ui/src/lib/configs/button.config.ts","../../../projects/codexly-ui/src/lib/configs/spinner.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-spinner/clx-spinner.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-button/clx-button.component.ts","../../../projects/codexly-ui/src/lib/configs/skeleton.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-skeleton/clx-skeleton.component.ts","../../../projects/codexly-ui/src/lib/configs/animate.config.ts","../../../projects/codexly-ui/src/lib/services/clx-animate.service.ts","../../../projects/codexly-ui/src/lib/configs/tooltip.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-tooltip/clx-tooltip.component.ts","../../../projects/codexly-ui/src/lib/directives/clx-tooltip.directive.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-product/clx-product.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-button-group/clx-button-group.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-rating/clx-rating.component.ts","../../../projects/codexly-ui/src/lib/directives/clx-carousel.directive.ts","../../../projects/codexly-ui/src/lib/configs/carousel.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-carousel/clx-carousel.component.ts","../../../projects/codexly-ui/src/lib/directives/clx-tab.directive.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-tabs/clx-tabs.component.ts","../../../projects/codexly-ui/src/lib/configs/number.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-number/clx-number.component.ts","../../../projects/codexly-ui/src/lib/configs/list.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-list/clx-list.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-list/clx-list-item.component.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-product-detail/clx-product-detail.component.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-product-detail/clx-product-detail.component.html","../../../projects/codexly-ui/src/lib/components/advanced/clx-tree/clx-tree.component.ts","../../../projects/codexly-ui/src/lib/configs/checkbox.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-checkbox/clx-checkbox.component.ts","../../../projects/codexly-ui/src/lib/configs/slider.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-slider/clx-slider.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-radio/clx-radio-group.component.ts","../../../projects/codexly-ui/src/lib/configs/radio.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-radio/clx-radio.component.ts","../../../projects/codexly-ui/src/lib/configs/select.config.ts","../../../projects/codexly-ui/src/lib/configs/tag.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-tag/clx-tag.component.ts","../../../projects/codexly-ui/src/lib/configs/input.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-input/clx-input.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-select/clx-select.component.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-filter-panel/clx-filter-panel.component.ts","../../../projects/codexly-ui/src/lib/configs/alert.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-alert/clx-alert.component.ts","../../../projects/codexly-ui/src/lib/configs/modal.config.ts","../../../projects/codexly-ui/src/lib/configs/drawer.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-drawer/clx-drawer.component.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-modal/clx-modal.component.ts","../../../projects/codexly-ui/src/lib/configs/pagination.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-pagination/clx-pagination.component.ts","../../../projects/codexly-ui/src/lib/configs/toast.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-toast/clx-toast.component.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-toast/clx-toast-container.component.ts","../../../projects/codexly-ui/src/lib/configs/card.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-card/clx-card-header.directive.ts","../../../projects/codexly-ui/src/lib/components/base/clx-card/clx-card-body.directive.ts","../../../projects/codexly-ui/src/lib/components/base/clx-card/clx-card-footer.directive.ts","../../../projects/codexly-ui/src/lib/components/base/clx-card/clx-card.component.ts","../../../projects/codexly-ui/src/lib/configs/stepper.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-stepper/clx-stepper.component.ts","../../../projects/codexly-ui/src/lib/configs/avatar.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-avatar/clx-avatar.component.ts","../../../projects/codexly-ui/src/lib/configs/timeline.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-timeline/clx-timeline.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-timeline/clx-timeline-item.component.ts","../../../projects/codexly-ui/src/lib/configs/chart.config.ts","../../../projects/codexly-ui/src/lib/components/charts/chartjs/clx-chart/clx-chart.component.ts","../../../projects/codexly-ui/src/lib/configs/colorpicker.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-colorpicker/clx-colorpicker.component.ts","../../../projects/codexly-ui/src/lib/configs/datepicker.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-datepicker/clx-datepicker.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-date-range-picker/clx-date-range-picker.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-editor/clx-editor-link-modal.component.ts","../../../projects/codexly-ui/src/lib/configs/editor.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-modal/clx-modal-wrapper.component.ts","../../../projects/codexly-ui/src/lib/services/clx-modal.service.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-editor/clx-editor.component.ts","../../../projects/codexly-ui/src/lib/configs/switch.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-switch/clx-switch.component.ts","../../../projects/codexly-ui/src/lib/configs/textarea.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-textarea/clx-textarea.component.ts","../../../projects/codexly-ui/src/lib/configs/upload.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-upload/clx-upload.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-wizard/clx-step.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-wizard/clx-wizard.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-app-layout/clx-app-layout.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-brand/clx-brand.component.ts","../../../projects/codexly-ui/src/lib/configs/nav.config.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-menu-item/clx-menu-item.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-menu/clx-menu.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-nav-group/clx-nav-group.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-profile/clx-profile.component.ts","../../../projects/codexly-ui/src/lib/configs/table.configs.ts","../../../projects/codexly-ui/src/lib/directives/clx-table-cell.directive.ts","../../../projects/codexly-ui/src/lib/components/pages/clx-page-empty/clx-page-empty.component.ts","../../../projects/codexly-ui/src/lib/components/tables/basic/clx-table/clx-table.component.ts","../../../projects/codexly-ui/src/lib/configs/wishlist.config.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-wishlist/clx-wishlist.component.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-cart/clx-cart.component.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-cart/clx-cart-summary-drawer.ts","../../../projects/codexly-ui/src/lib/directives/clx-animate.directive.ts","../../../projects/codexly-ui/src/lib/directives/clx-animate-group.directive.ts","../../../projects/codexly-ui/src/lib/services/clx-alert.service.ts","../../../projects/codexly-ui/src/lib/services/clx-drawer.service.ts","../../../projects/codexly-ui/src/lib/services/clx-toast.service.ts","../../../projects/codexly-ui/src/lib/configs/progress-bar.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-progress-bar/clx-progress-bar.component.ts","../../../projects/codexly-ui/src/lib/components/pages/clx-page-not-found/clx-page-not-found.component.ts","../../../projects/codexly-ui/src/lib/components/pages/clx-page-unauthorized/clx-page-unauthorized.component.ts","../../../projects/codexly-ui/src/lib/components/pages/clx-page-server-error/clx-page-server-error.component.ts","../../../projects/codexly-ui/src/public-api.ts","../../../projects/codexly-ui/src/codexly-ui.ts"],"sourcesContent":["// ── Base color names (Tailwind standard) ─────────────────────────────────────\nexport type ClxColor =\n | 'red' | 'orange' | 'amber' | 'yellow' | 'lime' | 'green' | 'emerald'\n | 'teal' | 'cyan' | 'sky' | 'blue' | 'indigo' | 'violet' | 'purple'\n | 'fuchsia' | 'pink' | 'rose' | 'slate' | 'gray' | 'zinc' | 'neutral'\n | 'stone' | 'white';\n\n// ── Available shades ──────────────────────────────────────────────────────────\nexport type ClxShade = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950;\n\n// ── Input accepted by components: 'indigo' | 'indigo-100' | 'indigo-500' ... ─\nexport type ClxColorInput = ClxColor | `${ClxColor}-${ClxShade}`;\n\n// ── Resolved color + shade ────────────────────────────────────────────────────\nexport interface ClxColorResolved {\n color: ClxColor;\n shade: ClxShade;\n}\n\n// ── Semantic token set produced by resolveColor() ─────────────────────────────\nexport interface ClxColorTokens {\n bg: string; // bg-{color}-{shade}\n bgSubtle: string; // bg-{color}-{shade-light} (bg para chips/badges light)\n text: string; // text-white | text-{color}-{shade+dark}\n textSubtle: string; // text-{color}-{shade} (texto sobre bg claro)\n border: string; // border-{color}-{shade}\n borderLight: string; // border-{color}-{shade-light}\n hoverBg: string; // hover:bg-{color}-{shade+1step}\n hoverBgMuted:string; // hover:bg-{color}-{shade}/10\n ring: string; // ring-{color}-{shade}/30\n focus: string; // focus:ring-2 focus:ring-{color}-{shade}/20 focus:border-{color}-{shade}\n // ── Legacy aliases (usados en nav, badge, button configs) ────────────────\n bgBase: string;\n bgDark: string;\n textBase: string;\n textDark: string;\n textEmphasis: string;\n textAccent: string;\n textMuted: string;\n textLight: string;\n borderBase: string;\n borderDark: string;\n borderSubtle: string;\n borderAccent: string;\n hoverBgBase: string;\n hoverBgLight: string;\n hoverBgDark: string;\n hoverBgSubtle: string;\n hoverTextBase: string;\n hoverTextDark: string;\n hoverTextEmph: string;\n hoverBorderBase: string;\n hoverBorderDark: string;\n ringBase: string;\n ringAccent: string;\n focusWithin: string;\n focusDirect: string;\n focusVisible: string;\n focusVisibleLight: string;\n}\n\n// ── Parse 'red' | 'red-500' → { color, shade } ───────────────────────────────\nexport function parseColorInput(input: ClxColorInput): ClxColorResolved {\n if (input === 'white') return { color: 'white', shade: 500 };\n const parts = input.split('-');\n if (parts.length === 1) return { color: input as ClxColor, shade: 500 };\n const shade = Number(parts[parts.length - 1]) as ClxShade;\n const color = parts.slice(0, -1).join('-') as ClxColor;\n return { color, shade };\n}\n\n// ── Clamp shade to valid steps ────────────────────────────────────────────────\nconst SHADES: ClxShade[] = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];\n\nfunction darker(shade: ClxShade, steps = 1): ClxShade {\n const idx = SHADES.indexOf(shade);\n return SHADES[Math.min(idx + steps, SHADES.length - 1)];\n}\n\nfunction lighter(shade: ClxShade, steps = 1): ClxShade {\n const idx = SHADES.indexOf(shade);\n return SHADES[Math.max(idx - steps, 0)];\n}\n\n// ── Build all tokens from color + shade ──────────────────────────────────────\nexport function resolveColor(input: ClxColorInput): ClxColorTokens {\n if (input === 'white') return WHITE_TOKENS;\n\n const { color, shade } = parseColorInput(input);\n const c = color;\n const s = shade;\n\n const onDark = s >= 400;\n const textOn = onDark ? 'text-white' : `text-${c}-800`;\n const hoverS = darker(s, 1);\n const subtleS = lighter(s, 3);\n const accentS = lighter(s, 2);\n const mutedS = lighter(s, 1);\n const emphS = darker(s, 1);\n\n return {\n // ── New semantic tokens ─────────────────────────────────────────────────\n bg: `bg-${c}-${s}`,\n bgSubtle: `bg-${c}-${subtleS}`,\n text: textOn,\n textSubtle: `text-${c}-${s}`,\n border: `border-${c}-${s}`,\n borderLight: `border-${c}-${lighter(s, 2)}`,\n hoverBg: `hover:bg-${c}-${hoverS}`,\n hoverBgMuted: `hover:bg-${c}-${s}/10`,\n ring: `ring-${c}-${s}/30`,\n focus: `focus:ring-2 focus:ring-${c}-${s}/20 focus:border-${c}-${s}`,\n // ── Legacy aliases ──────────────────────────────────────────────────────\n bgBase: `bg-${c}-${s}`,\n bgDark: `bg-${c}-${darker(s, 2)}`,\n textBase: `text-${c}-${s}`,\n textDark: `text-${c}-${darker(s, 2)}`,\n textEmphasis: `text-${c}-${emphS}`,\n textAccent: `text-${c}-${accentS}`,\n textMuted: `text-${c}-${mutedS}`,\n textLight: `text-${c}-${subtleS}`,\n borderBase: `border-${c}-${s}`,\n borderDark: `border-${c}-${darker(s, 2)}`,\n borderSubtle: `border-${c}-${lighter(s, 4)}`,\n borderAccent: `border-${c}-${mutedS}`,\n hoverBgBase: `hover:bg-${c}-${s}`,\n hoverBgLight: `hover:bg-${c}-${subtleS}`,\n hoverBgDark: `hover:bg-${c}-${darker(s, 2)}`,\n hoverBgSubtle: `hover:bg-${c}-50`,\n hoverTextBase: `hover:text-${c}-${s}`,\n hoverTextDark: `hover:text-${c}-${darker(s, 2)}`,\n hoverTextEmph: `hover:text-${c}-${emphS}`,\n hoverBorderBase: `hover:border-${c}-${s}`,\n hoverBorderDark: `hover:border-${c}-${darker(s, 2)}`,\n ringBase: `ring-${c}-${s}/30`,\n ringAccent: `ring-${c}-${mutedS}`,\n focusWithin: `focus-within:ring-2 focus-within:ring-${c}-${s}/20 focus-within:border-${c}-${s}`,\n focusDirect: `focus:ring-2 focus:ring-${c}-${s}/20 focus:border-${c}-${s}`,\n focusVisible: `focus-visible:ring-${c}-${s}`,\n focusVisibleLight: `focus-visible:ring-${c}-${accentS}`,\n };\n}\n\n// ── White special case ────────────────────────────────────────────────────────\nconst WHITE_TOKENS: ClxColorTokens = {\n bg: 'bg-white',\n bgSubtle: 'bg-white/10',\n text: 'text-gray-900',\n textSubtle: 'text-white',\n border: 'border-white',\n borderLight: 'border-white/30',\n hoverBg: 'hover:bg-gray-100',\n hoverBgMuted: 'hover:bg-white/10',\n ring: 'ring-white/30',\n focus: 'focus:ring-2 focus:ring-white/20 focus:border-white',\n bgBase: 'bg-white',\n bgDark: 'bg-white/80',\n textBase: 'text-white',\n textDark: 'text-gray-900',\n textEmphasis: 'text-white',\n textAccent: 'text-white',\n textMuted: 'text-white/60',\n textLight: 'text-white/70',\n borderBase: 'border-white',\n borderDark: 'border-white/80',\n borderSubtle: 'border-white/20',\n borderAccent: 'border-white/50',\n hoverBgBase: 'hover:bg-white',\n hoverBgLight: 'hover:bg-white/30',\n hoverBgDark: 'hover:bg-gray-100',\n hoverBgSubtle: 'hover:bg-white/10',\n hoverTextBase: 'hover:text-white',\n hoverTextDark: 'hover:text-gray-900',\n hoverTextEmph: 'hover:text-white',\n hoverBorderBase: 'hover:border-white',\n hoverBorderDark: 'hover:border-gray-100',\n ringBase: 'ring-white/30',\n ringAccent: 'ring-white/50',\n focusWithin: 'focus-within:ring-2 focus-within:ring-white/20 focus-within:border-white',\n focusDirect: 'focus:ring-2 focus:ring-white/20 focus:border-white',\n focusVisible: 'focus-visible:ring-white',\n focusVisibleLight: 'focus-visible:ring-white/40',\n};\n\n// ── Backward-compat: CLX_COLOR_MAP[color] → resolveColor(color) ──────────────\nexport const CLX_COLOR_MAP: Record<ClxColor, ClxColorTokens> = new Proxy(\n {} as Record<ClxColor, ClxColorTokens>,\n { get: (_, color: string) => resolveColor(color as ClxColor) }\n);\n\n// ── Hex values for Chart.js (raw hex, no Tailwind classes needed) ─────────────\nexport const CLX_COLOR_HEX = {\n red: '#ef4444', orange: '#f97316', amber: '#f59e0b', yellow: '#eab308',\n lime: '#84cc16', green: '#22c55e', emerald: '#10b981', teal: '#14b8a6',\n cyan: '#06b6d4', sky: '#0ea5e9', blue: '#3b82f6', indigo: '#6366f1',\n violet: '#8b5cf6', purple: '#a855f7', fuchsia: '#d946ef', pink: '#ec4899',\n rose: '#f43f5e', slate: '#64748b', gray: '#6b7280', zinc: '#71717a',\n neutral: '#737373', stone: '#78716c', white: '#ffffff',\n slate100: '#f1f5f9', slate200: '#e2e8f0', slate300: '#cbd5e1', slate400: '#94a3b8',\n};\n","export const BADGE_SIZE_MAP = {\n xs: 'text-[10px] px-1.5 py-0.5',\n sm: 'text-xs px-2 py-1',\n md: 'text-xs px-2.5 py-1 font-medium',\n} as const;\n\nexport const BADGE_CIRCLE_SIZE_MAP = {\n xs: 'text-[10px] w-4 h-4',\n sm: 'text-xs w-5 h-5',\n md: 'text-xs w-6 h-6 font-medium',\n} as const;\n\nexport const BADGE_SHAPE_MAP = {\n rounded: 'rounded',\n pill: 'rounded-md',\n circle: 'rounded-full',\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxShape } from '../../../types/clx-shape.types';\nimport type { ClxBadgeVariant } from '../../../types/clx-badge.types';\nimport { BADGE_SIZE_MAP, BADGE_CIRCLE_SIZE_MAP, BADGE_SHAPE_MAP } from '../../../configs/badge.config';\n\n@Component({\n selector: 'span[clx-badge]',\n standalone: true,\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n})\nexport class ClxBadgeComponent {\n readonly variant = input<ClxBadgeVariant>('solid');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<Extract<ClxSize, 'xs' | 'sm' | 'md'>>('md');\n readonly shape = input<ClxShape>('rounded');\n readonly positioned = input<boolean>(false);\n\n protected readonly _hostClass = computed(() => {\n const t = resolveColor(this.color());\n const variant = this.variant();\n const isCircle = this.shape() === 'circle';\n const sizeClass = isCircle ? BADGE_CIRCLE_SIZE_MAP[this.size()] : BADGE_SIZE_MAP[this.size()];\n const shapeClass = BADGE_SHAPE_MAP[this.shape()];\n const posClass = this.positioned()\n ? 'absolute top-0 right-0 translate-x-1/2 -translate-y-1/2'\n : '';\n\n let colorClass: string;\n if (variant === 'solid') colorClass = `${t.bg} ${t.text}`;\n else if (variant === 'light') colorClass = `${t.bgSubtle} ${t.textSubtle}`;\n else colorClass = `border ${t.border} ${t.textSubtle} bg-transparent`;\n\n return `inline-flex items-center justify-center leading-none ${colorClass} ${sizeClass} ${shapeClass} ${posClass}`.trim();\n });\n}\n","import type { ClxSize } from '../types/clx-size.types';\n\nexport const ICON_SIZE_PX: Record<ClxSize, string> = {\n xxs: '12px',\n xs: '16px',\n sm: '20px',\n md: '24px',\n lg: '32px',\n xl: '48px',\n};\n\nexport const ICON_SIZE_OPSZ: Record<ClxSize, number> = {\n xxs: 16,\n xs: 20,\n sm: 20,\n md: 24,\n lg: 40,\n xl: 48,\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport { ICON_SIZE_OPSZ, ICON_SIZE_PX } from '../../../configs/icon-size.config';\n\n@Component({\n selector: 'span[clx-icon]',\n standalone: true,\n template: '',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'material-symbols-outlined',\n '[class]': '_colorClass()',\n '[textContent]': 'name()',\n '[style.font-size]': '_fontSize()',\n '[style.font-variation-settings]': '_fontVariation()',\n },\n})\nexport class ClxIconComponent {\n readonly name = input.required<string>();\n readonly size = input<ClxSize>('md');\n readonly color = input<ClxColorInput | null>(null);\n readonly fill = input<boolean>(false);\n\n protected readonly _colorClass = computed(() => {\n const c = this.color();\n return c ? resolveColor(c).textSubtle : '';\n });\n\n protected readonly _fontSize = computed(() => ICON_SIZE_PX[this.size()]);\n\n protected readonly _fontVariation = computed(() => {\n const opsz = ICON_SIZE_OPSZ[this.size()];\n return `'FILL' ${this.fill() ? 1 : 0}, 'wght' 400, 'GRAD' 0, 'opsz' ${opsz}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, parseColorInput, CLX_COLOR_HEX } from '../../../types/clx-color.types';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxStatMetric, SparkPoint } from '../../../types/clx-stat-card.types';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\n\nexport type { ClxStatMetric } from '../../../types/clx-stat-card.types';\nexport type { ClxTrendDirection } from '../../../types/clx-stat-card.types';\n\n@Component({\n selector: 'clx-stat-card',\n standalone: true,\n imports: [ClxBadgeComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n },\n template: `\n @if (layout() === 'horizontal') {\n <!-- Icon -->\n <div class=\"shrink-0 w-12 h-12 rounded-xl flex items-center justify-center\" [class]=\"_iconBg()\">\n <span clx-icon [name]=\"metric().icon\" size=\"md\" class=\"text-white\"></span>\n </div>\n\n <!-- Text block -->\n <div class=\"flex flex-col gap-1 min-w-0 flex-1\">\n <span class=\"text-sm text-slate-500 truncate\">{{ metric().title }}</span>\n <span class=\"text-2xl font-semibold text-slate-900 leading-tight\">\n {{ _formattedValue() }}\n </span>\n <span clx-badge\n [color]=\"_trendColor()\"\n variant=\"light\"\n shape=\"pill\"\n class=\"self-start gap-1 mt-0.5\">\n <span clx-icon [name]=\"_trendIcon()\" size=\"xxs\"></span>\n {{ metric().trend }}\n </span>\n </div>\n\n <!-- Sparkline -->\n <div style=\"flex: 0 0 112px; height: 64px; position: relative; overflow: hidden;\">\n <svg style=\"position: absolute; inset: 0; width: 100%; height: 100%;\"\n viewBox=\"0 0 140 64\" preserveAspectRatio=\"none\">\n <defs>\n <linearGradient [attr.id]=\"_gradId()\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" [attr.stop-color]=\"_lineColor()\" stop-opacity=\"0.22\"/>\n <stop offset=\"100%\" [attr.stop-color]=\"_lineColor()\" stop-opacity=\"0.02\"/>\n </linearGradient>\n </defs>\n <path [attr.d]=\"_fillPath()\" [attr.fill]=\"'url(#' + _gradId() + ')'\" stroke=\"none\"/>\n <path [attr.d]=\"_linePath()\" [attr.stroke]=\"_lineColor()\" stroke-width=\"2.5\"\n fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n @if (layout() === 'bar') {\n <!-- Col izquierda: ícono circular + título + valor -->\n <div class=\"flex flex-col gap-1 min-w-0 flex-1\">\n <div class=\"w-11 h-11 rounded-full flex items-center justify-center mb-2\" [class]=\"_iconBgSubtle()\">\n <span clx-icon [name]=\"metric().icon\" size=\"md\" [class]=\"_iconTextBase()\"></span>\n </div>\n <span class=\"text-sm text-slate-500 truncate\">{{ metric().title }}</span>\n <span class=\"text-2xl font-semibold text-slate-900 leading-tight\">{{ _formattedValue() }}</span>\n </div>\n\n <!-- Col derecha: barras + tendencia -->\n <div class=\"shrink-0 flex flex-col items-end justify-between gap-2 self-stretch\" style=\"width: 160px;\">\n <!-- Bar chart -->\n <div class=\"flex items-end gap-1\" style=\"height: 44px;\">\n @for (h of _barHeights(); track $index) {\n <div class=\"w-1.5 opacity-80\"\n [class]=\"_iconBg()\"\n [style.height.%]=\"h\">\n </div>\n }\n </div>\n <!-- Tendencia -->\n <div class=\"flex items-center gap-1 text-xs text-slate-400 whitespace-nowrap\">\n {{ metric().trendDirection === 'up' ? 'Increased By' : 'Decreased By' }}\n <span class=\"font-semibold\" [class]=\"_trendTextClass()\">{{ metric().trend }}</span>\n <span clx-icon [name]=\"_trendArrowIcon()\" size=\"sm\" [class]=\"_trendTextClass()\"></span>\n </div>\n </div>\n }\n\n @if (layout() === 'vertical') {\n <!-- Col izquierda: badge + valor + título -->\n <div class=\"flex flex-col justify-between flex-1 min-w-0 gap-1\">\n <span clx-badge\n [color]=\"_trendColor()\"\n variant=\"light\"\n shape=\"pill\"\n class=\"self-start gap-1\">\n <span clx-icon [name]=\"_trendIcon()\" size=\"xxs\"></span>\n {{ metric().trend }}\n </span>\n <span class=\"text-2xl font-semibold text-slate-900 leading-tight\">{{ _formattedValue() }}</span>\n <span class=\"text-xs font-semibold tracking-widest text-slate-400 uppercase\">{{ metric().title }}</span>\n </div>\n\n <!-- Col derecha: solo icono -->\n <div class=\"shrink-0 w-12 h-12 rounded-xl flex items-center justify-center\" [class]=\"_iconBg()\">\n <span clx-icon [name]=\"metric().icon\" size=\"md\" class=\"text-white\"></span>\n </div>\n }\n `,\n})\nexport class ClxStatCardComponent {\n readonly metric = input.required<ClxStatMetric>();\n readonly chartData = input<number[]>([30, 45, 28, 60, 40, 70, 55, 80, 50, 90]);\n readonly color = input<ClxColorInput>('indigo');\n readonly layout = input<'horizontal' | 'vertical' | 'bar'>('horizontal');\n\n protected readonly _hostClass = computed(() => {\n const border = resolveColor(this.color()).borderLight;\n const base = `bg-white rounded-xl shadow-md border ${border} p-5 w-full overflow-hidden min-w-[260px]`;\n return `flex items-center gap-4 ${base}`;\n });\n\n protected readonly _barHeights = computed(() => {\n const data = this.chartData();\n if (!data.length) return [];\n const max = Math.max(...data) || 1;\n return data.map(v => Math.max(4, Math.round((v / max) * 100)));\n });\n\n protected readonly _iconBg = computed(() => resolveColor(this.color()).bg);\n protected readonly _iconBgSubtle = computed(() => resolveColor(this.color()).bgSubtle);\n protected readonly _iconTextBase = computed(() => resolveColor(this.color()).textSubtle);\n protected readonly _lineColor = computed(() => {\n const { color } = parseColorInput(this.color());\n return CLX_COLOR_HEX[color] ?? CLX_COLOR_HEX.indigo;\n });\n protected readonly _gradId = computed(() => `spark-grad-${this.color()}`);\n\n protected readonly _trendColor = computed(() => {\n const d = this.metric().trendDirection;\n return d === 'up' ? 'green' : d === 'down' ? 'red' : 'slate';\n });\n\n protected readonly _trendArrowIcon = computed(() => {\n const d = this.metric().trendDirection;\n return d === 'up' ? 'arrow_upward' : d === 'down' ? 'arrow_downward' : 'remove';\n });\n\n protected readonly _trendTextClass = computed(() => {\n const d = this.metric().trendDirection;\n return d === 'up' ? 'text-green-500' : d === 'down' ? 'text-red-500' : 'text-slate-400';\n });\n\n protected readonly _trendIcon = computed(() => {\n const d = this.metric().trendDirection;\n return d === 'up' ? 'arrow_outward' : d === 'down' ? 'south_east' : 'remove';\n });\n\n protected readonly _formattedValue = computed(() => {\n const v = this.metric().value;\n return typeof v === 'number' ? v.toLocaleString() : v;\n });\n\n protected readonly _points = computed<SparkPoint[]>(() => {\n const data = this.chartData();\n if (data.length < 2) return [];\n const W = 140, H = 64, padX = 2, padY = 6;\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n return data.map((v, i) => ({\n x: padX + (i / (data.length - 1)) * (W - padX * 2),\n y: padY + (1 - (v - min) / range) * (H - padY * 2),\n }));\n });\n\n protected readonly _linePath = computed(() => this._buildPath(this._points(), false));\n protected readonly _fillPath = computed(() => {\n const pts = this._points();\n if (!pts.length) return '';\n const H = 64;\n const open = this._buildPath(pts, false);\n const close = ` L${pts[pts.length - 1].x},${H} L${pts[0].x},${H} Z`;\n return open + close;\n });\n\n constructor() {\n effect(() => {\n void this._linePath();\n void this._fillPath();\n });\n }\n\n private _buildPath(pts: SparkPoint[], closed: boolean): string {\n if (pts.length < 2) return '';\n let d = `M${pts[0].x},${pts[0].y}`;\n for (let i = 1; i < pts.length; i++) {\n const prev = pts[i - 1];\n const cur = pts[i];\n const cpx = (prev.x + cur.x) / 2;\n d += ` C${cpx},${prev.y} ${cpx},${cur.y} ${cur.x},${cur.y}`;\n }\n if (closed) d += ' Z';\n return d;\n }\n\n}\n","import type { ClxColor } from '../types/clx-color.types';\nimport type { ClxBadgeVariant } from '../types/clx-badge.types';\n\nexport type ClxProductTag = 'new' | 'sale' | 'out-of-stock' | 'featured' | 'limited' | 'hot';\n\nexport const PRODUCT_TAG_LABEL: Record<ClxProductTag, string> = {\n 'new': 'Nuevo',\n 'sale': 'Oferta',\n 'out-of-stock': 'Sin Stock',\n 'featured': 'Destacado',\n 'limited': 'Limitado',\n 'hot': 'Popular',\n};\n\nexport const PRODUCT_TAG_COLOR: Record<ClxProductTag, ClxColor> = {\n 'new': 'emerald',\n 'sale': 'rose',\n 'out-of-stock': 'slate',\n 'featured': 'indigo',\n 'limited': 'amber',\n 'hot': 'orange',\n};\n\nexport const PRODUCT_TAG_VARIANT: Record<ClxProductTag, ClxBadgeVariant> = {\n 'new': 'solid',\n 'sale': 'solid',\n 'out-of-stock': 'light',\n 'featured': 'solid',\n 'limited': 'solid',\n 'hot': 'solid',\n};\n","export const BUTTON_BASE_CLASS = 'relative overflow-hidden inline-flex items-center justify-center font-medium select-none transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2';\n\nexport const BUTTON_SIZE_MAP = {\n xxs: 'text-xs px-1.5 py-0.5 gap-0.5',\n xs: 'text-xs px-2 py-1 gap-1',\n sm: 'text-xs px-3 py-1.5 gap-1.5',\n md: 'text-sm px-4 py-2 gap-2',\n lg: 'text-sm px-5 py-2.5 gap-2.5',\n} as const;\n\nexport const BUTTON_SHAPE_MAP = {\n rounded: 'rounded-lg',\n pill: 'rounded-full',\n circle: 'rounded-full',\n} as const;\n\nexport const BUTTON_ICON_ONLY_SIZE_MAP = {\n xxs: 'w-5 h-5 p-0 text-xs',\n xs: 'w-7 h-7 p-0 text-xs',\n sm: 'w-8 h-8 p-0 text-sm',\n md: 'w-10 h-10 p-0 text-sm',\n lg: 'w-11 h-11 p-0 text-sm',\n} as const;\n","import type { ClxSize } from '../types/clx-size.types';\nimport type { ClxSpinnerVariant } from '../types/clx-spinner.types';\n\nexport const SPINNER_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-3 h-3 border-2',\n xs: 'w-4 h-4 border-2',\n sm: 'w-5 h-5 border-2',\n md: 'w-6 h-6 border-[3px]',\n lg: 'w-8 h-8 border-[3px]',\n xl: 'w-10 h-10 border-4',\n};\n\nexport const SPINNER_DOT_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-1 h-1',\n xs: 'w-1.5 h-1.5',\n sm: 'w-2 h-2',\n md: 'w-2.5 h-2.5',\n lg: 'w-3 h-3',\n xl: 'w-4 h-4',\n};\n\nexport const SPINNER_PULSE_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-3 h-3',\n xs: 'w-4 h-4',\n sm: 'w-5 h-5',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxSpinnerVariant, ClxSpinnerColor } from '../../../types/clx-spinner.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport {\n SPINNER_SIZE_MAP,\n SPINNER_DOT_SIZE_MAP,\n SPINNER_PULSE_SIZE_MAP,\n} from '../../../configs/spinner.config';\n\n@Component({\n selector: 'clx-spinner',\n standalone: true,\n template: `\n @switch (variant()) {\n\n @case ('spinner') {\n <span class=\"rounded-full animate-spin\" [class]=\"_spinnerClass()\" role=\"status\" aria-label=\"Cargando\"></span>\n }\n\n @case ('dots') {\n <span class=\"inline-flex items-center gap-1\" role=\"status\" aria-label=\"Cargando\">\n @for (i of [0, 1, 2]; track i) {\n <span class=\"rounded-full clx-dot-bounce\" [class]=\"_dotClass()\" [style.animation-delay]=\"(i * 160) + 'ms'\"></span>\n }\n </span>\n }\n\n @case ('pulse') {\n <span class=\"relative inline-flex rounded-full\" [class]=\"_pulseWrapperClass()\" role=\"status\" aria-label=\"Cargando\">\n <span class=\"absolute inset-0 rounded-full opacity-25\" [class]=\"_pulseColorClass()\"></span>\n <span class=\"absolute inset-0 rounded-full animate-ping opacity-75\" [class]=\"_pulseColorClass()\"></span>\n </span>\n }\n\n }\n `,\n styles: [`\n @keyframes clx-dot-bounce {\n from { transform: translateY(0); opacity: 0.4; }\n to { transform: translateY(-40%); opacity: 1; }\n }\n .clx-dot-bounce {\n animation: clx-dot-bounce 0.6s ease-in-out infinite alternate;\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'inline-flex items-center justify-center' },\n})\nexport class ClxSpinnerComponent {\n readonly size = input<ClxSize>('md');\n readonly color = input<ClxSpinnerColor>('indigo');\n readonly variant = input<ClxSpinnerVariant>('spinner');\n\n protected readonly _spinnerClass = computed(() => {\n const size = SPINNER_SIZE_MAP[this.size()];\n if (this.color() === 'inherit') return `${size} border-current/30 border-t-current`;\n const t = resolveColor(this.color() as Exclude<ClxSpinnerColor, 'inherit'>);\n return `${size} ${t.borderLight} ${t.border.replace('border-', 'border-t-')}`;\n });\n\n protected readonly _dotClass = computed(() => {\n const size = SPINNER_DOT_SIZE_MAP[this.size()];\n if (this.color() === 'inherit') return `${size} bg-current`;\n const t = resolveColor(this.color() as Exclude<ClxSpinnerColor, 'inherit'>);\n return `${size} ${t.bg}`;\n });\n\n protected readonly _pulseWrapperClass = computed(() => SPINNER_PULSE_SIZE_MAP[this.size()]);\n\n protected readonly _pulseColorClass = computed(() => {\n if (this.color() === 'inherit') return 'bg-current';\n return resolveColor(this.color() as Exclude<ClxSpinnerColor, 'inherit'>).bg;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxShape } from '../../../types/clx-shape.types';\nimport type { ClxButtonVariant, ClxRippleItem } from '../../../types/clx-button.types';\nimport type { ClxColorInput, ClxShade } from '../../../types/clx-color.types';\nimport { resolveColor, parseColorInput, CLX_COLOR_HEX } from '../../../types/clx-color.types';\nimport { BUTTON_BASE_CLASS, BUTTON_SIZE_MAP, BUTTON_ICON_ONLY_SIZE_MAP, BUTTON_SHAPE_MAP } from '../../../configs/button.config';\nimport { BADGE_CIRCLE_SIZE_MAP } from '../../../configs/badge.config';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\nimport { ClxSpinnerComponent } from '../clx-spinner/clx-spinner.component';\n\n@Component({\n selector: 'button[clx-button], a[clx-button]',\n standalone: true,\n imports: [ClxIconComponent, ClxSpinnerComponent],\n template: `\n @if (icon() && iconPosition() === 'left' && !loading()) {\n <span clx-icon [name]=\"icon()!\" [size]=\"_iconSize()\"></span>\n }\n @if (loading()) {\n <clx-spinner [size]=\"_iconSize()\" [color]=\"_spinnerColor()\" />\n }\n <ng-content />\n @if (icon() && iconPosition() === 'right' && !loading()) {\n <span clx-icon [name]=\"icon()!\" [size]=\"_iconSize()\"></span>\n }\n @for (r of _ripples(); track r.id) {\n <span\n class=\"clx-ripple-wave\"\n [style.background-color]=\"_rippleColor()\"\n [style.width.px]=\"r.diameter\"\n [style.height.px]=\"r.diameter\"\n [style.left.px]=\"r.x - r.diameter / 2\"\n [style.top.px]=\"r.y - r.diameter / 2\"\n ></span>\n }\n @if (badge() !== undefined && badge() !== null) {\n <span [class]=\"_badgeClass()\">{{ badge() }}</span>\n }\n `,\n styles: [`\n @keyframes clx-ripple-anim {\n to { transform: scale(4); opacity: 0; }\n }\n .clx-ripple-wave {\n position: absolute;\n border-radius: 50%;\n transform: scale(0);\n animation: clx-ripple-anim 600ms linear;\n pointer-events: none;\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n '[style.opacity]': '_inactive() ? \"0.5\" : null',\n '[style.cursor]': '_inactive() ? \"not-allowed\" : \"pointer\"',\n '[attr.disabled]': '_inactive() ? true : null',\n '[attr.aria-busy]': 'loading()',\n '(click)': '_onRipple($event)',\n },\n})\nexport class ClxButtonComponent {\n readonly variant = input<ClxButtonVariant>('solid');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<Extract<ClxSize, 'xxs' | 'xs' | 'sm' | 'md' | 'lg'>>('md');\n readonly shape = input<ClxShape>('rounded');\n readonly loading = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly block = input<boolean>(false);\n readonly icon = input<string | undefined>(undefined);\n readonly iconPosition = input<'left' | 'right'>('left');\n readonly iconOnly = input<boolean>(false);\n readonly badge = input<number | string | undefined>(undefined);\n readonly badgeColor = input<ClxColorInput>('red');\n\n protected readonly _ripples = signal<ClxRippleItem[]>([]);\n private _nextId = 0;\n private readonly _el = inject(ElementRef<HTMLElement>);\n\n protected readonly _inactive = computed(() => this.loading() || this.disabled());\n\n protected readonly _badgeClass = computed(() => {\n const t = resolveColor(this.badgeColor());\n const size = BADGE_CIRCLE_SIZE_MAP['xs'];\n return `absolute -top-1.5 -right-1.5 ${size} rounded-full ${t.bg} ${t.text} flex items-center justify-center text-[10px] font-semibold leading-none pointer-events-none z-10`;\n });\n\n protected readonly _colorClass = computed(() => {\n const { color, shade } = parseColorInput(this.color());\n const SHADES = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];\n const idx = SHADES.indexOf(shade);\n const s2down = (SHADES[Math.max(idx - 2, 0)]) as ClxShade;\n const s3down = (SHADES[Math.max(idx - 3, 0)]) as ClxShade;\n\n const base = resolveColor(this.color());\n const lightBase = resolveColor(`${color}-${s3down}` as ClxColorInput);\n const lightHov = resolveColor(`${color}-${s2down}` as ClxColorInput);\n const variant = this.variant();\n\n if (variant === 'solid')\n return `border-2 ${base.border} ${base.bg} ${base.text} ${base.hoverBg} ${base.focusVisible}`;\n if (variant === 'light')\n return `border-2 ${lightBase.border} ${lightBase.bg} text-${color}-${shade} ${lightHov.hoverBgBase} ${lightHov.hoverBorderBase} ${base.focusVisible}`;\n if (variant === 'outline')\n return `border-2 ${base.border} text-${color}-${shade} ${base.hoverBgBase} hover:text-white ${base.focusVisible}`;\n if (variant === 'ghost')\n return `border-2 border-transparent ${base.textSubtle} ${base.hoverBgMuted} ${base.focusVisibleLight}`;\n // link\n return `${base.textSubtle} hover:underline ${base.focusVisibleLight}`;\n });\n\n protected readonly _rippleColor = computed(() => {\n const v = this.variant();\n if (v === 'solid' || v === 'outline') return 'rgba(255,255,255,0.60)';\n const { color } = parseColorInput(this.color());\n const hex = (CLX_COLOR_HEX as Record<string, string>)[color] ?? '#6366f1';\n return hex + '4D'; // 30% opacity\n });\n\n protected readonly _spinnerColor = computed(() => {\n const v = this.variant();\n if (v === 'solid') return 'white';\n return 'inherit';\n });\n\n protected readonly _iconSize = computed((): ClxSize => {\n switch (this.size()) {\n case 'xxs': return 'xs';\n case 'xs': return 'xs';\n case 'sm': return 'xs';\n case 'lg': return 'md';\n default: return 'sm';\n }\n });\n\n protected readonly _hostClass = computed(() => {\n const colorClass = this._inactive()\n ? this._colorClass().replace(/hover:\\S+/g, '').replace(/\\s+/g, ' ').trim()\n : this._colorClass();\n const sizeClass = this.iconOnly()\n ? (BUTTON_ICON_ONLY_SIZE_MAP as Record<string, string>)[this.size()]\n : (BUTTON_SIZE_MAP as Record<string, string>)[this.size()];\n const shapeClass = (BUTTON_SHAPE_MAP as Record<string, string>)[this.shape()];\n const overflowClass = (this.badge() !== undefined && this.badge() !== null) ? 'overflow-visible' : 'overflow-hidden';\n const base = BUTTON_BASE_CLASS.replace('overflow-hidden', overflowClass);\n return `${base} ${colorClass} ${sizeClass} ${shapeClass}${this.block() ? ' w-full' : ''}`.trimEnd();\n });\n\n protected _onRipple(event: Event): void {\n if (this._inactive()) return;\n const e = event as MouseEvent;\n const rect = this._el.nativeElement.getBoundingClientRect();\n const diameter = Math.max(rect.width, rect.height);\n const id = ++this._nextId;\n this._ripples.update(rs => [...rs, { id, x: e.clientX - rect.left, y: e.clientY - rect.top, diameter }]);\n setTimeout(() => this._ripples.update(rs => rs.filter(r => r.id !== id)), 650);\n }\n}\n","import type { ClxSize } from '../types/clx-size.types';\nimport type { ClxSkeletonVariant } from '../types/clx-skeleton.types';\n\nexport const SKELETON_BASE_CLASS = 'bg-slate-200 animate-pulse';\n\nexport const SKELETON_VARIANT_MAP: Record<ClxSkeletonVariant, string> = {\n text: 'rounded',\n circular: 'rounded-full',\n rectangular: 'rounded-md',\n};\n\n// text / rectangular height\nexport const SKELETON_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'h-3',\n xs: 'h-4',\n sm: 'h-5',\n md: 'h-6',\n lg: 'h-8',\n xl: 'h-12',\n};\n\n// circular: square dimensions aligned with avatar sizes\nexport const SKELETON_CIRCULAR_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-5 h-5',\n xs: 'w-7 h-7',\n sm: 'w-9 h-9',\n md: 'w-12 h-12',\n lg: 'w-16 h-16',\n xl: 'w-20 h-20',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxSkeletonVariant } from '../../../types/clx-skeleton.types';\nimport {\n SKELETON_BASE_CLASS,\n SKELETON_VARIANT_MAP,\n SKELETON_SIZE_MAP,\n SKELETON_CIRCULAR_SIZE_MAP,\n} from '../../../configs/skeleton.config';\n\n@Component({\n selector: 'clx-skeleton',\n standalone: true,\n template: '',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n '[style.width]': '_hostWidth()',\n '[style.height]': '_hostHeight()',\n },\n})\nexport class ClxSkeletonComponent {\n readonly variant = input<ClxSkeletonVariant>('text');\n readonly size = input<ClxSize>('md');\n readonly width = input<string | null>(null);\n readonly height = input<string | null>(null);\n\n protected readonly _hostClass = computed(() => {\n const variant = SKELETON_VARIANT_MAP[this.variant()];\n const sizeClass = this.variant() === 'circular'\n ? SKELETON_CIRCULAR_SIZE_MAP[this.size()]\n : SKELETON_SIZE_MAP[this.size()];\n return `block ${SKELETON_BASE_CLASS} ${variant} ${sizeClass}`.trim();\n });\n\n protected readonly _hostWidth = computed(() =>\n this.variant() === 'circular' ? null : this.width()\n );\n\n protected readonly _hostHeight = computed(() =>\n this.variant() === 'circular' ? null : this.height()\n );\n}\n","import { InjectionToken } from '@angular/core';\nimport type { ClxAnimateDefaults } from '../types/clx-animate.types';\n\nexport const CLX_ANIMATE_DEFAULTS_VALUE: Required<ClxAnimateDefaults> = {\n duration: 1000,\n delay: 0,\n repeat: 1,\n easing: 'ease',\n fillMode: 'both',\n once: false,\n threshold: 0.1,\n};\n\nexport const CLX_ANIMATE_DEFAULTS = new InjectionToken<ClxAnimateDefaults>(\n 'CLX_ANIMATE_DEFAULTS',\n {\n providedIn: 'root',\n factory: () => CLX_ANIMATE_DEFAULTS_VALUE,\n },\n);\n","import {\n Injectable,\n inject,\n PLATFORM_ID,\n signal,\n computed,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { CLX_ANIMATE_DEFAULTS } from '../configs/animate.config';\nimport type { ClxAnimateConfig, ClxAnimateDefaults, ClxAnimateName } from '../types/clx-animate.types';\n\nconst PREFIX = 'clx-anim--';\n\ntype CleanupFn = () => void;\n\n/** Un IntersectionObserver compartido + registro de elementos por valor de threshold. */\ninterface ObserverPool {\n observer: IntersectionObserver;\n registry: Map<HTMLElement, (isIntersecting: boolean) => void>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ClxAnimateService {\n private readonly platformId: object;\n private readonly defaults: ClxAnimateDefaults;\n readonly isBrowser!: boolean;\n\n // ─── Estado de animaciones en curso ───────────────────────────────────────\n private readonly _runningCount = signal(0);\n readonly isAnimating = computed(() => this._runningCount() > 0);\n\n // ─── Cleanup por elemento (WeakMap preserva GC) ───────────────────────────\n private readonly _cleanups = new WeakMap<HTMLElement, CleanupFn>();\n\n // ─── Pool de IntersectionObservers compartidos ────────────────────────────\n private readonly _observerPools = new Map<number, ObserverPool>();\n\n constructor() {\n this.platformId = inject(PLATFORM_ID);\n this.defaults = inject(CLX_ANIMATE_DEFAULTS);\n this.isBrowser = isPlatformBrowser(this.platformId);\n if (this.isBrowser) this._warmup();\n }\n\n // ─── Warmup ───────────────────────────────────────────────────────────────\n /**\n * Fuerza al browser a parsear los keyframes antes de la primera interacción\n * para evitar el jank del primer frame. Se ejecuta en idle para no bloquear\n * el critical rendering path.\n */\n private _warmup(): void {\n const run = () => {\n const el = document.createElement('div');\n el.style.cssText = 'position:fixed;top:-9999px;pointer-events:none;opacity:0;';\n el.classList.add(`${PREFIX}animated`, `${PREFIX}bounce`);\n document.body.appendChild(el);\n requestAnimationFrame(() =>\n requestAnimationFrame(() => document.body.removeChild(el)),\n );\n };\n\n if ('requestIdleCallback' in window) {\n (window as Window & { requestIdleCallback: (cb: () => void, opts?: object) => void })\n .requestIdleCallback(run, { timeout: 1000 });\n } else {\n setTimeout(run, 200);\n }\n }\n\n // ─── API pública ──────────────────────────────────────────────────────────\n\n /**\n * Anima cualquier HTMLElement de forma imperativa.\n * Retorna una Promise que resuelve cuando la animación termina.\n */\n animate(\n element: HTMLElement,\n animationOrConfig: ClxAnimateName | ClxAnimateConfig,\n overrides: Partial<ClxAnimateConfig> = {},\n ): Promise<void> {\n if (!this.isBrowser) return Promise.resolve();\n return this.runAnimation(element, this.buildConfig(animationOrConfig, overrides));\n }\n\n /** Cancela la animación en curso en el elemento y restaura su estado. */\n stop(element: HTMLElement): void {\n this._cleanups.get(element)?.();\n }\n\n /**\n * Registra un elemento en el pool de IntersectionObservers.\n * Reutiliza el observer existente para el threshold dado o crea uno nuevo.\n * Retorna una función para desregistrar el elemento.\n */\n observe(\n element: HTMLElement,\n threshold: number,\n cb: (isIntersecting: boolean) => void,\n ): () => void {\n if (!this.isBrowser) return () => {};\n\n let pool = this._observerPools.get(threshold);\n if (!pool) {\n const registry = new Map<HTMLElement, (isIntersecting: boolean) => void>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n registry.get(entry.target as HTMLElement)?.(entry.isIntersecting);\n }\n },\n { threshold },\n );\n pool = { observer, registry };\n this._observerPools.set(threshold, pool);\n }\n\n pool.registry.set(element, cb);\n pool.observer.observe(element);\n\n return () => {\n const p = this._observerPools.get(threshold);\n if (!p) return;\n p.observer.unobserve(element);\n p.registry.delete(element);\n if (p.registry.size === 0) {\n p.observer.disconnect();\n this._observerPools.delete(threshold);\n }\n };\n }\n\n // ─── Interno (usado por ClxAnimateDirective) ──────────────────────────────\n\n runAnimation(element: HTMLElement, config: ClxAnimateConfig): Promise<void> {\n this.stop(element);\n\n // Fuerza reflow para que el browser registre la eliminación de clases\n // antes de volver a agregarlas — necesario para reiniciar la animación.\n void element.offsetHeight;\n\n const animClass = `${PREFIX}${config.animation}`;\n const isInfinite = config.repeat === 'infinite';\n\n element.style.setProperty('--clx-anim-duration', `${config.duration}ms`);\n element.style.setProperty('--clx-anim-delay', `${config.delay}ms`);\n element.style.setProperty('--clx-anim-repeat', isInfinite ? 'infinite' : String(config.repeat ?? 1));\n element.style.setProperty('--clx-anim-easing', config.easing ?? 'ease');\n if (config.fillMode) {\n element.style.setProperty('animation-fill-mode', config.fillMode);\n }\n\n element.classList.add(`${PREFIX}animated`, animClass);\n if (isInfinite) element.classList.add(`${PREFIX}infinite`);\n\n this._runningCount.update(c => c + 1);\n\n if (isInfinite) {\n this._cleanups.set(element, () => {\n this._cleanup(element, animClass);\n this._runningCount.update(c => Math.max(0, c - 1));\n });\n return Promise.resolve();\n }\n\n return new Promise<void>(resolve => {\n const handleEnd = (ev: Event) => {\n ev.stopPropagation();\n this._cleanup(element, animClass);\n this._runningCount.update(c => Math.max(0, c - 1));\n resolve();\n };\n\n element.addEventListener('animationend', handleEnd, { once: true });\n\n this._cleanups.set(element, () => {\n element.removeEventListener('animationend', handleEnd);\n this._cleanup(element, animClass);\n this._runningCount.update(c => Math.max(0, c - 1));\n resolve();\n });\n });\n }\n\n buildConfig(\n animationOrConfig: ClxAnimateName | ClxAnimateConfig,\n overrides: Partial<ClxAnimateConfig> = {},\n ): ClxAnimateConfig {\n const base: ClxAnimateConfig =\n typeof animationOrConfig === 'string'\n ? { animation: animationOrConfig }\n : animationOrConfig;\n\n return {\n duration: this.defaults.duration,\n delay: this.defaults.delay,\n repeat: this.defaults.repeat,\n easing: this.defaults.easing,\n fillMode: this.defaults.fillMode,\n once: this.defaults.once,\n threshold: this.defaults.threshold,\n trigger: 'manual',\n ...base,\n ...overrides,\n };\n }\n\n // ─── Privado ──────────────────────────────────────────────────────────────\n\n private _cleanup(element: HTMLElement, animClass: string): void {\n element.classList.remove(`${PREFIX}animated`, animClass, `${PREFIX}infinite`);\n element.style.removeProperty('--clx-anim-duration');\n element.style.removeProperty('--clx-anim-delay');\n element.style.removeProperty('--clx-anim-repeat');\n element.style.removeProperty('--clx-anim-easing');\n element.style.removeProperty('animation-fill-mode');\n this._cleanups.delete(element);\n }\n}\n","import type { ClxTooltipSize } from '../types/clx-tooltip.types';\n\nexport const TOOLTIP_SIZE_MAP: Record<ClxTooltipSize, string> = {\n sm: 'text-xs px-2 py-1',\n md: 'text-sm px-3 py-1.5 max-w-[220px]',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport { TOOLTIP_SIZE_MAP } from '../../../configs/tooltip.config';\nimport type { ClxTooltipPosition, ClxTooltipSize } from '../../../types/clx-tooltip.types';\n\n@Component({\n selector: 'clx-tooltip',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'tooltip',\n '[class]': '_hostClass()',\n },\n template: `<span class=\"whitespace-pre-wrap leading-snug\">{{ text() }}</span>`,\n styles: [`\n clx-tooltip {\n position: absolute;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n will-change: opacity, transform;\n }\n `],\n})\nexport class ClxTooltipComponent {\n readonly text = input.required<string>();\n readonly position = input<ClxTooltipPosition>('top');\n readonly color = input<ClxColorInput>('slate');\n readonly size = input<ClxTooltipSize>('md');\n\n protected readonly _hostClass = computed(() => {\n const t = resolveColor(this.color());\n return `${t.text} rounded-lg shadow-xl ${t.bg} ${TOOLTIP_SIZE_MAP[this.size()]}`;\n });\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n DestroyRef,\n Directive,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n PLATFORM_ID,\n Renderer2,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { ClxAnimateService } from '../services/clx-animate.service';\nimport { ClxTooltipComponent } from '../components/base/clx-tooltip/clx-tooltip.component';\nimport type { ClxTooltipPosition, ClxTooltipSize } from '../types/clx-tooltip.types';\nimport type { ClxColorInput } from '../types/clx-color.types';\n\n// ── Gap between trigger and bubble (px) ───────────────────────────────────\nconst GAP = 8;\n\n@Directive({\n selector: '[clxTooltip]',\n standalone: true,\n})\nexport class ClxTooltipDirective {\n\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly clxTooltip = input.required<string>();\n readonly clxTooltipPosition = input<ClxTooltipPosition>('top');\n readonly clxTooltipColor = input<ClxColorInput>('slate');\n readonly clxTooltipSize = input<ClxTooltipSize>('md');\n readonly clxTooltipDelay = input<number>(0);\n\n // ── DI ───────────────────────────────────────────────────────────────────\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _renderer = inject(Renderer2);\n private readonly _appRef = inject(ApplicationRef);\n private readonly _injector = inject(EnvironmentInjector);\n private readonly _animate = inject(ClxAnimateService);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _destroyRef = inject(DestroyRef);\n\n // ── State ────────────────────────────────────────────────────────────────\n private _ref: ComponentRef<ClxTooltipComponent> | null = null;\n private _pendingRef: ComponentRef<ClxTooltipComponent> | null = null;\n private _showTimer: ReturnType<typeof setTimeout> | null = null;\n private _hideTimer: ReturnType<typeof setTimeout> | null = null;\n private _tooltipId = `clx-tooltip-${Math.random().toString(36).slice(2, 8)}`;\n private _abort = new AbortController();\n private _destroyed = false;\n\n constructor() {\n if (!isPlatformBrowser(this._platformId)) return;\n\n const host = this._el.nativeElement;\n const { signal } = this._abort;\n\n host.addEventListener('mouseenter', () => this._scheduleShow(), { signal });\n host.addEventListener('mouseleave', () => this._scheduleHide(), { signal });\n host.addEventListener('focus', () => this._scheduleShow(), { signal });\n host.addEventListener('blur', () => this._scheduleHide(), { signal });\n\n this._destroyRef.onDestroy(() => {\n this._destroyed = true;\n this._abort.abort();\n this._clearTimers();\n this._forceDestroyBubble();\n });\n }\n\n // ── Show / Hide ──────────────────────────────────────────────────────────\n\n private _scheduleShow(): void {\n this._clearHide();\n const delay = this.clxTooltipDelay();\n if (delay > 0) {\n this._showTimer = setTimeout(() => this._show(), delay);\n } else {\n this._show();\n }\n }\n\n private _scheduleHide(): void {\n this._clearShow();\n this._hideTimer = setTimeout(() => this._hide(), 80);\n }\n\n private _show(): void {\n if (this._ref) return;\n if (!this.clxTooltip()) return;\n\n // Create component\n const ref = createComponent(ClxTooltipComponent, {\n environmentInjector: this._injector,\n });\n\n ref.setInput('text', this.clxTooltip());\n ref.setInput('color', this.clxTooltipColor());\n ref.setInput('size', this.clxTooltipSize());\n\n // We'll set position after measurement\n ref.setInput('position', this.clxTooltipPosition());\n\n this._appRef.attachView(ref.hostView);\n\n const el = ref.location.nativeElement as HTMLElement;\n el.style.position = 'fixed';\n el.style.visibility = 'hidden';\n el.style.zIndex = '9999';\n el.id = this._tooltipId;\n\n this._renderer.appendChild(document.body, el);\n ref.changeDetectorRef.detectChanges();\n\n // Resolve final position (with viewport flip)\n const finalPos = this._resolvePosition(el);\n ref.setInput('position', finalPos);\n ref.changeDetectorRef.detectChanges();\n\n // Place at resolved coordinates\n this._placeAt(el, finalPos);\n el.style.visibility = '';\n\n this._ref = ref;\n\n // Aria\n this._el.nativeElement.setAttribute('aria-describedby', this._tooltipId);\n\n // Animate in\n this._animate.animate(el, {\n animation: 'fadeIn',\n duration: 160,\n trigger: 'manual',\n fillMode: 'both',\n });\n }\n\n private _hide(): void {\n const ref = this._ref;\n if (!ref) return;\n\n this._ref = null;\n this._pendingRef = ref;\n this._el.nativeElement.removeAttribute('aria-describedby');\n\n const el = ref.location.nativeElement as HTMLElement;\n\n this._animate.animate(el, {\n animation: 'fadeOut',\n duration: 120,\n trigger: 'manual',\n fillMode: 'forwards',\n }).then(() => {\n this._pendingRef = null;\n this._appRef.detachView(ref.hostView);\n ref.destroy();\n });\n }\n\n // ── Positioning ──────────────────────────────────────────────────────────\n\n private _resolvePosition(el: HTMLElement): ClxTooltipPosition {\n const requested = this.clxTooltipPosition();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const trigger = this._el.nativeElement.getBoundingClientRect();\n const bubble = el.getBoundingClientRect();\n\n const fits: Record<ClxTooltipPosition, boolean> = {\n top: trigger.top - bubble.height - GAP >= 0,\n bottom: trigger.bottom + bubble.height + GAP <= vh,\n left: trigger.left - bubble.width - GAP >= 0,\n right: trigger.right + bubble.width + GAP <= vw,\n };\n\n if (fits[requested]) return requested;\n\n // Flip axis\n const opposite: Record<ClxTooltipPosition, ClxTooltipPosition> = {\n top: 'bottom', bottom: 'top', left: 'right', right: 'left',\n };\n const opp = opposite[requested];\n if (fits[opp]) return opp;\n\n // Fallback: any position that fits\n for (const pos of (['top', 'bottom', 'left', 'right'] as ClxTooltipPosition[])) {\n if (fits[pos]) return pos;\n }\n\n return requested; // last resort\n }\n\n private _placeAt(el: HTMLElement, pos: ClxTooltipPosition): void {\n const trigger = this._el.nativeElement.getBoundingClientRect();\n const bubble = el.getBoundingClientRect();\n let top = 0;\n let left = 0;\n\n switch (pos) {\n case 'top':\n top = trigger.top - bubble.height - GAP;\n left = trigger.left + trigger.width / 2 - bubble.width / 2;\n break;\n case 'bottom':\n top = trigger.bottom + GAP;\n left = trigger.left + trigger.width / 2 - bubble.width / 2;\n break;\n case 'left':\n top = trigger.top + trigger.height / 2 - bubble.height / 2;\n left = trigger.left - bubble.width - GAP;\n break;\n case 'right':\n top = trigger.top + trigger.height / 2 - bubble.height / 2;\n left = trigger.right + GAP;\n break;\n }\n\n // Clamp to viewport edges with 4px margin\n const margin = 4;\n left = Math.max(margin, Math.min(left, window.innerWidth - bubble.width - margin));\n top = Math.max(margin, Math.min(top, window.innerHeight - bubble.height - margin));\n\n el.style.top = `${top}px`;\n el.style.left = `${left}px`;\n }\n\n // ── Helpers ──────────────────────────────────────────────────────────────\n\n private _destroyBubble(): void {\n if (!this._ref) return;\n this._appRef.detachView(this._ref.hostView);\n this._ref.destroy();\n this._ref = null;\n this._el.nativeElement.removeAttribute('aria-describedby');\n }\n\n private _forceDestroyBubble(): void {\n if (this._ref) {\n const el = this._ref.location.nativeElement as HTMLElement;\n this._animate.stop(el);\n this._destroyBubble();\n }\n if (this._pendingRef) {\n const el = this._pendingRef.location.nativeElement as HTMLElement;\n this._animate.stop(el);\n this._appRef.detachView(this._pendingRef.hostView);\n this._pendingRef.destroy();\n this._pendingRef = null;\n }\n }\n\n private _clearShow(): void {\n if (this._showTimer !== null) { clearTimeout(this._showTimer); this._showTimer = null; }\n }\n\n private _clearHide(): void {\n if (this._hideTimer !== null) { clearTimeout(this._hideTimer); this._hideTimer = null; }\n }\n\n private _clearTimers(): void {\n this._clearShow();\n this._clearHide();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxProduct, ClxProductLayout, ClxProductSize } from '../../../types/clx-product.types';\nimport {\n type ClxProductTag,\n PRODUCT_TAG_COLOR,\n PRODUCT_TAG_LABEL,\n PRODUCT_TAG_VARIANT,\n} from '../../../configs/product.config';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxButtonComponent } from '../../../components/base/clx-button/clx-button.component';\nimport { ClxSkeletonComponent } from '../../../components/base/clx-skeleton/clx-skeleton.component';\nimport { ClxTooltipDirective } from '../../../directives/clx-tooltip.directive';\n\n@Component({\n selector: 'clx-product',\n standalone: true,\n imports: [CurrencyPipe, ClxBadgeComponent, ClxButtonComponent, ClxSkeletonComponent, ClxTooltipDirective],\n template: `\n @if (loading()) {\n @if (_h()) {\n <!-- Skeleton Horizontal -->\n <div class=\"bg-white rounded-2xl overflow-hidden flex flex-col sm:flex-row items-stretch\">\n <div [class]=\"'shrink-0 aspect-square sm:aspect-auto bg-slate-200 animate-pulse ' + (_skeletonW())\"></div>\n <div class=\"p-4 flex flex-col gap-3 flex-1\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"60%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"85%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"40%\" />\n <div class=\"flex gap-2 mt-auto\">\n <clx-skeleton variant=\"rectangular\" height=\"36px\" width=\"100%\" />\n </div>\n </div>\n </div>\n } @else {\n <!-- Skeleton Vertical -->\n <div class=\"bg-white rounded-2xl overflow-hidden flex flex-col\">\n <clx-skeleton variant=\"rectangular\" [height]=\"_skeletonH()\" width=\"100%\" />\n <div class=\"p-4 flex flex-col gap-3\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"70%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"90%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"50%\" />\n <div class=\"flex gap-2 mt-1\">\n <clx-skeleton variant=\"rectangular\" height=\"36px\" width=\"100%\" />\n </div>\n </div>\n </div>\n }\n } @else {\n <!-- Card -->\n <article [class]=\"_cardClass()\">\n\n <!-- Image Container -->\n <div [class]=\"_imageContainerClass()\">\n @if (product()?.main_image) {\n <img\n [src]=\"product()!.main_image\"\n [alt]=\"product()!.name\"\n class=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\"\n [loading]=\"priority() ? 'eager' : 'lazy'\"\n />\n } @else {\n <div class=\"w-full h-full flex items-center justify-center bg-slate-100\">\n <span class=\"material-symbols-outlined text-slate-300\" style=\"font-size:48px\">image</span>\n </div>\n }\n\n <!-- Status Badges -->\n @if (_tags().length) {\n <div class=\"absolute top-3 left-3 flex flex-col gap-1\">\n @for (s of _tags(); track s) {\n <span\n clx-badge\n [variant]=\"PRODUCT_TAG_VARIANT[s]\"\n [color]=\"PRODUCT_TAG_COLOR[s]\"\n size=\"sm\"\n shape=\"pill\"\n >{{ PRODUCT_TAG_LABEL[s] }}</span>\n }\n </div>\n }\n\n <!-- Wishlist button -->\n <div class=\"absolute bottom-3 right-3\">\n <button\n clx-button\n [color]=\"clxColor()\"\n variant=\"solid\"\n [size]=\"_buttonSize()\"\n icon=\"favorite\"\n [iconOnly]=\"true\"\n shape=\"rounded\"\n clxTooltip=\"Añadir a favoritos\"\n clxTooltipPosition=\"left\"\n [clxTooltipColor]=\"clxColor()\"\n (click)=\"addToWishlist.emit(product()!)\"\n ></button>\n </div>\n\n <!-- Out-of-stock overlay -->\n @if (_disabled()) {\n <div [class]=\"_overlayClass()\"></div>\n }\n </div>\n\n <!-- Content -->\n <div [class]=\"_contentClass()\">\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-xs text-slate-400 truncate\">{{ product()?.trademark }}</p>\n <h3 [class]=\"_titleClass()\">{{ product()?.name }}</h3>\n @if (product()?.description) {\n <p [class]=\"_descClass()\">{{ product()?.description }}</p>\n }\n\n <!-- Price -->\n <div class=\"flex items-baseline gap-2 mt-2\">\n <span [class]=\"_priceClass()\">{{ _price() | currency:'COP':'symbol':'1.0-0' }}</span>\n @if (product()?.has_discount && product()?.discount_price) {\n <span class=\"text-sm text-slate-400 line-through\">\n {{ product()?.discount_price | currency:'COP':'symbol':'1.0-0' }}\n </span>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div [class]=\"_actionsClass()\">\n <button\n clx-button\n [color]=\"clxColor()\"\n variant=\"solid\"\n [size]=\"_buttonSize()\"\n icon=\"shopping_cart\"\n iconPosition=\"left\"\n [disabled]=\"_disabled()\"\n [block]=\"true\"\n (click)=\"addToCart.emit(product()!)\"\n >\n Añadir al carrito\n </button>\n </div>\n </div>\n </article>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxProductComponent {\n readonly product = input<ClxProduct | null>(null);\n readonly loading = input<boolean>(false);\n readonly priority = input<boolean>(false);\n readonly layout = input<ClxProductLayout>('vertical');\n readonly size = input<ClxProductSize>('md');\n readonly clxColor = input<ClxColorInput>('indigo');\n\n readonly addToCart = output<ClxProduct>();\n readonly addToWishlist = output<ClxProduct>();\n\n protected readonly PRODUCT_TAG_LABEL = PRODUCT_TAG_LABEL;\n protected readonly PRODUCT_TAG_COLOR = PRODUCT_TAG_COLOR;\n protected readonly PRODUCT_TAG_VARIANT = PRODUCT_TAG_VARIANT;\n\n protected readonly _h = computed(() => this.layout() === 'horizontal');\n protected readonly _sm = computed(() => this.size() === 'sm');\n protected readonly _tags = computed<ClxProductTag[]>(() => (this.product()?.tags ?? []) as ClxProductTag[]);\n protected readonly _disabled = computed(() => !this.product()?.in_stock);\n protected readonly _price = computed(() => this.product()?.sale_price ?? this.product()?.product_sale_price ?? 0);\n protected readonly _buttonSize = computed(() => this._sm() ? 'sm' as const : 'md' as const);\n protected readonly _skeletonW = computed(() => this._sm() ? 'sm:w-32' : 'sm:w-44');\n protected readonly _skeletonH = computed(() => this._sm() ? '160px' : '200px');\n\n protected readonly _cardClass = computed(() =>\n `bg-white rounded-2xl shadow-sm transition-all duration-300 overflow-hidden group hover:shadow-xl hover:-translate-y-0.5 ${this._h() ? 'flex flex-col sm:flex-row' : 'flex flex-col'}`\n );\n\n protected readonly _imageContainerClass = computed(() =>\n this._h()\n ? `relative shrink-0 w-full aspect-square sm:aspect-auto ${this._sm() ? 'sm:w-32' : 'sm:w-44'} overflow-hidden rounded-t-2xl sm:rounded-t-none sm:rounded-l-2xl`\n : 'relative w-full aspect-square overflow-hidden rounded-t-2xl'\n );\n\n protected readonly _contentClass = computed(() => 'flex flex-col gap-2 flex-1 p-3');\n\n protected readonly _actionsClass = computed(() =>\n this._h()\n ? 'flex flex-col sm:flex-row items-stretch sm:items-center gap-2 mt-3'\n : 'flex items-center gap-2 mt-3'\n );\n\n protected readonly _overlayClass = computed(() =>\n `absolute inset-0 bg-white/50 ${this._h() ? 'rounded-t-2xl sm:rounded-t-none sm:rounded-l-2xl' : 'rounded-t-2xl'}`\n );\n\n protected readonly _titleClass = computed(() => {\n const sz = this._sm() ? 'text-sm' : 'text-base';\n const color = this._disabled() ? 'text-slate-400' : 'text-slate-900';\n return `font-semibold truncate ${sz} ${color}`;\n });\n\n protected readonly _descClass = computed(() => {\n const sz = this._sm() ? 'text-xs line-clamp-1' : 'text-sm line-clamp-2';\n const color = this._disabled() ? 'text-slate-300' : 'text-slate-500';\n return `${sz} ${color} mt-0.5`;\n });\n\n protected readonly _priceClass = computed(() => {\n const sz = this._sm() ? 'text-base' : 'text-lg';\n const color = this._disabled() ? 'text-slate-400' : 'text-slate-900';\n return `${sz} font-bold ${color}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxButtonGroupShape } from '../../../types/clx-button-group.types';\n\n@Component({\n selector: 'clx-button-group',\n standalone: true,\n template: `\n @if (label()) {\n <span class=\"text-sm font-medium text-slate-700 leading-none\">{{ label() }}</span>\n }\n <div [class]=\"_groupClass()\">\n <ng-content />\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col gap-1.5',\n },\n})\nexport class ClxButtonGroupComponent {\n readonly label = input<string>('');\n readonly shape = input<ClxButtonGroupShape>('flat');\n readonly attached = input<boolean>(false);\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n protected readonly _groupClass = computed(() => {\n const isVertical = this.orientation() === 'vertical';\n const dir = isVertical ? 'flex-col' : 'flex-row';\n const gap = this.attached() ? 'gap-0' : 'gap-2';\n return `inline-flex items-center ${dir} ${gap}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\nimport { parseColorInput, CLX_COLOR_HEX, type ClxColorInput } from '../../../types/clx-color.types';\n\n@Component({\n selector: 'clx-rating',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n @for (star of _stars(); track star.idx) {\n <span clx-icon [name]=\"star.icon\" size=\"sm\" [fill]=\"star.fill\" [style.color]=\"_hexColor()\"></span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'inline-flex items-center gap-0.5',\n '[attr.aria-label]': '\"Rating: \" + value() + \" out of \" + max()',\n },\n})\nexport class ClxRatingComponent {\n readonly value = input<number>(0);\n readonly max = input<number>(5);\n readonly color = input<ClxColorInput>('amber');\n\n protected readonly _hexColor = computed(() => {\n const { color } = parseColorInput(this.color());\n return (CLX_COLOR_HEX as Record<string, string>)[color] ?? '#f59e0b';\n });\n\n protected readonly _stars = computed(() => {\n const val = this.value();\n const total = this.max();\n return Array.from({ length: total }, (_, i) => {\n const diff = val - i;\n const icon = diff >= 1 ? 'star' : diff >= 0.5 ? 'star_half' : 'star_border';\n const fill = diff >= 0.5;\n return { idx: i, icon, fill };\n });\n });\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[clxSlide]',\n standalone: true,\n})\nexport class ClxCarouselDirective {\n constructor(public readonly templateRef: TemplateRef<unknown>) {}\n}\n","export const CAROUSEL_ASPECT_RATIO_MAP: Record<string, string> = {\n '16/9': 'aspect-video',\n '4/3': 'aspect-[4/3]',\n '1/1': 'aspect-square',\n '3/2': 'aspect-[3/2]',\n 'auto': '',\n};\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxCarouselDirective } from '../../../directives/clx-carousel.directive';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxCarouselAspectRatio } from '../../../types/clx-carousel.types';\nimport { CAROUSEL_ASPECT_RATIO_MAP } from '../../../configs/carousel.config';\n\n@Component({\n selector: 'clx-carousel',\n standalone: true,\n imports: [NgTemplateOutlet, ClxButtonComponent, ClxIconComponent],\n template: `\n <!-- Viewport -->\n <div class=\"relative w-full overflow-hidden rounded-2xl\"\n [class]=\"_viewportClass()\"\n (touchstart)=\"_onTouchStart($event)\"\n (touchend)=\"_onTouchEnd($event)\">\n\n <!-- Track -->\n <div class=\"flex h-full transition-transform duration-500 ease-in-out will-change-transform\"\n [style.transform]=\"'translateX(-' + currentPageIndex() * 100 + '%)'\">\n @for (slide of _slides(); track slide) {\n <div class=\"flex-none w-full h-full\">\n <ng-container [ngTemplateOutlet]=\"slide.templateRef\" />\n </div>\n }\n </div>\n\n <!-- Arrow: Previous -->\n @if (_slides().length > 1) {\n <div class=\"absolute left-3 top-1/2 -translate-y-1/2 z-10\">\n <button clx-button\n variant=\"solid\"\n color=\"white\"\n shape=\"circle\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"!loop() && currentPageIndex() === 0\"\n (click)=\"prev()\">\n <span clx-icon name=\"chevron_left\" size=\"sm\"></span>\n </button>\n </div>\n\n <!-- Arrow: Next -->\n <div class=\"absolute right-3 top-1/2 -translate-y-1/2 z-10\">\n <button clx-button\n variant=\"solid\"\n color=\"white\"\n shape=\"circle\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"!loop() && currentPageIndex() === _slides().length - 1\"\n (click)=\"next()\">\n <span clx-icon name=\"chevron_right\" size=\"sm\"></span>\n </button>\n </div>\n }\n\n <!-- Dots -->\n @if (_slides().length > 1) {\n <div class=\"absolute bottom-3 left-1/2 -translate-x-1/2 z-10 flex items-center gap-1.5\">\n @for (dot of _dotItems(); track dot.idx) {\n <button\n type=\"button\"\n class=\"rounded-full transition-all duration-300 focus:outline-none cursor-pointer\"\n [class]=\"dot.cls\"\n (click)=\"goTo(dot.idx)\"\n [attr.aria-label]=\"'Slide ' + (dot.idx + 1)\">\n </button>\n }\n </div>\n }\n </div>\n `,\n styles: [`\n clx-carousel { display: block; width: 100%; }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxCarouselComponent implements AfterContentInit, OnDestroy {\n readonly clxColor = input<ClxColorInput>('indigo');\n readonly autoPlay = input<boolean>(false);\n readonly interval = input<number>(3000);\n readonly loop = input<boolean>(true);\n readonly aspectRatio = input<ClxCarouselAspectRatio>('16/9');\n readonly transparent = input<boolean>(false);\n\n readonly currentPageIndex = signal(0);\n\n protected readonly _slides = contentChildren(ClxCarouselDirective);\n\n private _autoPlayTimer: ReturnType<typeof setInterval> | null = null;\n private _touchStartX = 0;\n\n private readonly _zone: NgZone;\n\n protected readonly _aspectClass = computed(() =>\n CAROUSEL_ASPECT_RATIO_MAP[this.aspectRatio()] ?? ''\n );\n\n protected readonly _viewportClass = computed(() => {\n const base = this._aspectClass();\n return this.transparent()\n ? base\n : `${base} border border-slate-100 bg-slate-50`;\n });\n\n protected readonly _dotItems = computed(() => {\n const active = this.currentPageIndex();\n const activeColor = resolveColor(this.clxColor()).bg;\n return this._slides().map((_, idx) => ({\n idx,\n cls: idx === active ? `w-5 h-2 ${activeColor}` : 'w-2 h-2 bg-white',\n }));\n });\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n effect(() => {\n const active = this.autoPlay();\n const ms = this.interval();\n this._clearTimer();\n if (active) this._startTimer(ms);\n });\n }\n\n ngAfterContentInit(): void {\n if (this.autoPlay()) this._startTimer(this.interval());\n }\n\n ngOnDestroy(): void {\n this._clearTimer();\n }\n\n next(): void {\n const total = this._slides().length;\n if (!total) return;\n const next = this.currentPageIndex() + 1;\n if (next >= total) {\n if (this.loop()) this.currentPageIndex.set(0);\n } else {\n this.currentPageIndex.set(next);\n }\n }\n\n prev(): void {\n const total = this._slides().length;\n if (!total) return;\n const prev = this.currentPageIndex() - 1;\n if (prev < 0) {\n if (this.loop()) this.currentPageIndex.set(total - 1);\n } else {\n this.currentPageIndex.set(prev);\n }\n }\n\n goTo(index: number): void {\n this.currentPageIndex.set(index);\n if (this.autoPlay()) {\n this._clearTimer();\n this._startTimer(this.interval());\n }\n }\n\n protected _onTouchStart(e: TouchEvent): void {\n this._touchStartX = e.changedTouches[0].clientX;\n }\n\n protected _onTouchEnd(e: TouchEvent): void {\n const delta = e.changedTouches[0].clientX - this._touchStartX;\n if (Math.abs(delta) < 40) return;\n if (delta < 0) this.next();\n else this.prev();\n }\n\n private _startTimer(ms: number): void {\n this._zone.runOutsideAngular(() => {\n this._autoPlayTimer = setInterval(() => {\n this._zone.run(() => this.next());\n }, ms);\n });\n }\n\n private _clearTimer(): void {\n if (this._autoPlayTimer !== null) {\n clearInterval(this._autoPlayTimer);\n this._autoPlayTimer = null;\n }\n }\n}\n","import { Directive, input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[clxTabPanel]',\n standalone: true,\n})\nexport class ClxTabDirective {\n readonly clxTabPanel = input.required<string>();\n constructor(public readonly templateRef: TemplateRef<unknown>) {}\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n input,\n model,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxTabDirective } from '../../../directives/clx-tab.directive';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxTabItem } from '../../../types/clx-tabs.types';\n\n@Component({\n selector: 'clx-tabs',\n standalone: true,\n imports: [NgTemplateOutlet, ClxIconComponent, ClxButtonComponent],\n template: `\n <!-- Tab bar -->\n <div class=\"flex flex-wrap items-end border-b border-slate-200 gap-3\" role=\"tablist\">\n @for (tab of tabs(); track tab.id) {\n <div class=\"flex relative\">\n <button clx-button\n role=\"tab\"\n variant=\"ghost\"\n [color]=\"activeTab() === tab.id ? clxColor() : 'slate'\"\n size=\"md\"\n shape=\"rounded\"\n [disabled]=\"tab.disabled ?? false\"\n [attr.aria-selected]=\"activeTab() === tab.id\"\n [attr.aria-controls]=\"'panel-' + tab.id\"\n [class]=\"activeTab() === tab.id ? 'font-semibold!' : ''\"\n (click)=\"!tab.disabled && activeTab.set(tab.id)\">\n @if (tab.icon) {\n <span clx-icon [name]=\"tab.icon\" size=\"xs\" class=\"shrink-0\"></span>\n }\n {{ tab.label }}\n </button>\n @if (activeTab() === tab.id) {\n <span class=\"absolute bottom-0 left-0 right-0 h-0.5 rounded-full {{ _underlineClass() }}\"></span>\n }\n </div>\n }\n </div>\n\n <!-- Panel -->\n <div class=\"pt-5\" role=\"tabpanel\" [id]=\"'panel-' + activeTab()\">\n @for (panel of _panels(); track panel.clxTabPanel()) {\n @if (panel.clxTabPanel() === activeTab()) {\n <ng-container [ngTemplateOutlet]=\"panel.templateRef\" />\n }\n }\n </div>\n `,\n styles: [`clx-tabs { display: block; }`],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxTabsComponent {\n readonly tabs = input.required<ClxTabItem[]>();\n readonly clxColor = input<ClxColorInput>('indigo');\n readonly activeTab = model<string>('');\n\n protected readonly _panels = contentChildren(ClxTabDirective);\n\n protected readonly _underlineClass = computed(() => resolveColor(this.clxColor()).bg);\n}\n","import type { ClxNumberSize } from '../types/clx-number.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\nexport const NUMBER_SIZE_MAP: Record<ClxNumberSize, {\n container: string;\n inputText: string;\n iconSize: Extract<ClxSize, 'xs' | 'sm' | 'md'>;\n btnSize: 'sm' | 'md';\n stepperCell: string;\n label: string;\n hint: string;\n}> = {\n sm: {\n container: 'h-8',\n inputText: 'text-sm',\n iconSize: 'xs',\n btnSize: 'sm',\n stepperCell: 'w-8 h-8',\n label: 'text-xs font-medium',\n hint: 'text-xs',\n },\n md: {\n container: 'h-10',\n inputText: 'text-sm',\n iconSize: 'sm',\n btnSize: 'sm',\n stepperCell: 'w-9 h-9',\n label: 'text-sm font-medium',\n hint: 'text-xs',\n },\n lg: {\n container: 'h-12',\n inputText: 'text-base',\n iconSize: 'md',\n btnSize: 'md',\n stepperCell: 'w-10 h-10',\n label: 'text-sm font-medium',\n hint: 'text-sm',\n },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxNumberVariant, ClxNumberSize } from '../../../types/clx-number.types';\nimport { NUMBER_SIZE_MAP } from '../../../configs/number.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\n@Component({\n selector: 'clx-number',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxNumberComponent),\n multi: true,\n },\n ],\n styles: [`\n .clx-number-native::-webkit-inner-spin-button,\n .clx-number-native::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }\n .clx-number-native { -moz-appearance: textfield; appearance: textfield; }\n `],\n template: `\n @if (label()) {\n @if (variant() === 'default') {\n <label [for]=\"_inputId\" [class]=\"_labelClass()\">{{ label() }}</label>\n } @else {\n <span [class]=\"_labelClass()\">{{ label() }}</span>\n }\n }\n\n <!-- ── DEFAULT variant ───────────────────────────────────────────────── -->\n @if (variant() === 'default') {\n <div [class]=\"_containerClass()\">\n\n <!-- Prefix icon — colored cell -->\n @if (prefixIcon()) {\n <div [class]=\"_prefixCellCls()\">\n <span clx-icon [name]=\"prefixIcon()!\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n }\n\n <!-- Native number input -->\n <input\n type=\"number\"\n [id]=\"_inputId\"\n [name]=\"_inputId\"\n [class]=\"_inputClass()\"\n [value]=\"_value()\"\n [min]=\"min() ?? ''\"\n [max]=\"max() ?? ''\"\n [step]=\"step()\"\n [disabled]=\"_disabled()\"\n [placeholder]=\"placeholder()\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur()\"\n />\n\n <!-- Divider -->\n <div class=\"w-px h-5 bg-gray-200 shrink-0 self-center mx-0.5\"></div>\n\n <!-- − + buttons -->\n <div class=\"flex items-center self-center pr-1 gap-0\">\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"remove\"\n [iconOnly]=\"true\"\n [disabled]=\"_disabled() || _isAtMin()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_decrement()\"></button>\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"add\"\n [iconOnly]=\"true\"\n [disabled]=\"_disabled() || _isAtMax()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_increment()\"></button>\n </div>\n </div>\n }\n\n <!-- ── STEPPER variant ───────────────────────────────────────────────── -->\n @else {\n <div [class]=\"_stepperWrapClass()\">\n\n <!-- Decrement -->\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"remove\"\n [iconOnly]=\"true\"\n [disabled]=\"_disabled() || _isAtMin()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_decrement()\"></button>\n\n <!-- Value cell -->\n <div [class]=\"_stepperValueCls()\">{{ _value() }}</div>\n\n <!-- Increment -->\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"add\"\n [iconOnly]=\"true\"\n [disabled]=\"_disabled() || _isAtMax()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_increment()\"></button>\n\n </div>\n }\n\n <!-- Hint -->\n @if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col gap-1.5',\n '[style.opacity]': '_disabled() ? \"0.6\" : null',\n },\n})\nexport class ClxNumberComponent implements ControlValueAccessor {\n private static _seq = 0;\n protected readonly _inputId = `clx-number-${++ClxNumberComponent._seq}`;\n\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly variant = input<ClxNumberVariant>('default');\n readonly size = input<ClxNumberSize>('md');\n readonly color = input<ClxColorInput>('indigo');\n readonly label = input<string>('');\n readonly placeholder = input<string>('0');\n readonly hint = input<string>('');\n readonly prefixIcon = input<string>('');\n readonly min = input<number | null>(null);\n readonly max = input<number | null>(null);\n readonly step = input<number>(1);\n /** Initial value for standalone use (without FormControl) */\n readonly value = input<number>(0);\n /** Disabled state for standalone use (without FormControl) */\n readonly disabled = input<boolean>(false);\n\n // ── Internal state ───────────────────────────────────────────────────────\n readonly _value = signal(0);\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._value.set(v));\n });\n\n private _onChange: (v: number) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Bounds ───────────────────────────────────────────────────────────────\n protected readonly _isAtMin = computed(() =>\n this.min() !== null && this._value() <= this.min()!,\n );\n protected readonly _isAtMax = computed(() =>\n this.max() !== null && this._value() >= this.max()!,\n );\n\n // ── Computed classes ─────────────────────────────────────────────────────\n protected readonly _sizeConfig = computed(() => NUMBER_SIZE_MAP[this.size()]);\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeConfig().hint} text-gray-400`,\n );\n\n protected readonly _containerClass = computed(() => {\n const size = this._sizeConfig();\n const focus = this._disabled() ? '' : resolveColor(this.color()).focusWithin;\n const border = this._disabled() ? 'border-gray-200 bg-gray-50' : 'border-gray-300';\n const cursor = this._disabled() ? 'cursor-not-allowed' : '';\n return `flex items-stretch ${size.container} bg-white rounded-md border ${border} ${focus} ${cursor} overflow-hidden transition-all duration-200`;\n });\n\n /** Colored prefix icon cell — matches the input accent color */\n protected readonly _prefixCellCls = computed(() => {\n const t = resolveColor(this.color());\n return `px-3 flex items-center shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n /** Full class for the native input — must include structural classes since [class] replaces static ones */\n protected readonly _inputClass = computed(() => {\n const size = this._sizeConfig();\n const text = this._disabled() ? 'text-gray-400' : 'text-slate-700';\n const cursor = this._disabled() ? 'cursor-not-allowed' : '';\n return `clx-number-native flex-1 h-full ${size.inputText} pl-3 outline-none bg-transparent min-w-0 placeholder:text-gray-400 ${text} ${cursor}`;\n });\n\n protected readonly _stepperWrapClass = computed(() => {\n const t = resolveColor(this.color());\n return `inline-flex items-center justify-center w-fit rounded-lg bg-white border ${t.borderLight} px-1 gap-1`;\n });\n\n protected readonly _stepperValueCls = computed(() => {\n const size = this._sizeConfig();\n const t = resolveColor(this.color());\n return `${size.stepperCell} flex items-center justify-center text-sm font-semibold text-slate-700 bg-white select-none min-w-[2.5rem] border-x ${t.borderLight}`;\n });\n\n // ── CVA ──────────────────────────────────────────────────────────────────\n writeValue(val: number): void {\n this._cvaConnected = true;\n this._value.set(val ?? 0);\n }\n\n registerOnChange(fn: (v: number) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n // ── Handlers ─────────────────────────────────────────────────────────────\n protected _handleInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n const num = raw === '' ? 0 : parseFloat(raw);\n if (!isNaN(num)) {\n this._value.set(num);\n this._onChange(num);\n }\n }\n\n protected _handleBlur(): void {\n // Clamp to min/max on blur\n let v = this._value();\n if (this.min() !== null) v = Math.max(v, this.min()!);\n if (this.max() !== null) v = Math.min(v, this.max()!);\n this._value.set(v);\n this._onChange(v);\n this._onTouched();\n }\n\n protected _decrement(): void {\n const next = this._value() - this.step();\n const clamped = this.min() !== null ? Math.max(next, this.min()!) : next;\n this._applyValue(clamped);\n }\n\n protected _increment(): void {\n const next = this._value() + this.step();\n const clamped = this.max() !== null ? Math.min(next, this.max()!) : next;\n this._applyValue(clamped);\n }\n\n private _applyValue(v: number): void {\n this._value.set(v);\n this._onChange(v);\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\nimport type { ClxColorInput } from '../types/clx-color.types';\nimport type { ClxListVariant, ClxListSize } from '../types/clx-list.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\n// ── Context ───────────────────────────────────────────────────────────────────\n\nexport interface ClxListContext {\n color: Signal<ClxColorInput>;\n variant: Signal<ClxListVariant>;\n size: Signal<ClxListSize>;\n numbered: Signal<boolean>;\n sizeTokens: Signal<(typeof LIST_SIZE_MAP)[ClxListSize]>;\n dividerClass: Signal<string>;\n registerItem: () => number;\n}\n\nexport const CLX_LIST_CONTEXT = new InjectionToken<ClxListContext>('CLX_LIST_CONTEXT');\n\n// ── Variant maps ──────────────────────────────────────────────────────────────\n\nexport const LIST_VARIANT_SHAPE: Record<ClxListVariant, string> = {\n bordered: 'bg-white rounded-2xl border',\n flat: 'bg-transparent',\n flush: 'bg-transparent',\n};\n\nexport const LIST_VARIANT_HAS_BORDER: Record<ClxListVariant, boolean> = {\n bordered: true,\n flat: false,\n flush: false,\n};\n\nexport const LIST_ITEM_HAS_DIVIDER: Record<ClxListVariant, boolean> = {\n bordered: true,\n flat: true,\n flush: false,\n};\n\n// ── Size map ──────────────────────────────────────────────────────────────────\n\nexport const LIST_SIZE_MAP: Record<ClxListSize, {\n item: string;\n iconSize: ClxSize;\n label: string;\n sublabel: string;\n meta: string;\n number: string;\n}> = {\n sm: { item: 'px-3 py-2', iconSize: 'sm', label: 'text-sm', sublabel: 'text-xs', meta: 'text-xs', number: 'w-5 h-5 text-[10px]' },\n md: { item: 'px-4 py-3', iconSize: 'sm', label: 'text-sm', sublabel: 'text-xs', meta: 'text-xs', number: 'w-6 h-6 text-[11px]' },\n lg: { item: 'px-5 py-3.5', iconSize: 'md', label: 'text-base',sublabel: 'text-sm', meta: 'text-sm', number: 'w-7 h-7 text-[12px]' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxListSize, ClxListVariant } from '../../../types/clx-list.types';\nimport {\n CLX_LIST_CONTEXT,\n LIST_VARIANT_SHAPE,\n LIST_VARIANT_HAS_BORDER,\n LIST_ITEM_HAS_DIVIDER,\n LIST_SIZE_MAP,\n} from '../../../configs/list.config';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-list',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n @if (label()) {\n <div [class]=\"_headerClass()\">\n @if (headerIcon()) {\n <span clx-icon [name]=\"headerIcon()\" size=\"sm\"></span>\n }\n <span>{{ label() }}</span>\n </div>\n }\n <ng-content />\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n 'role': 'list',\n },\n providers: [\n { provide: CLX_LIST_CONTEXT, useExisting: forwardRef(() => ClxListComponent) },\n ],\n})\nexport class ClxListComponent {\n readonly color = input<ClxColorInput>('indigo');\n readonly variant = input<ClxListVariant>('flat');\n readonly size = input<ClxListSize>('md');\n readonly label = input<string>('');\n readonly headerIcon = input<string>('');\n readonly numbered = input<boolean>(false);\n _itemCounter = 0;\n\n readonly sizeTokens = computed(() => LIST_SIZE_MAP[this.size()]);\n\n readonly dividerClass = computed(() => {\n if (!LIST_ITEM_HAS_DIVIDER[this.variant()]) return '';\n return `border-b ${resolveColor(this.color()).borderLight} last:border-b-0`;\n });\n\n protected readonly _hostClass = computed(() => {\n const shape = LIST_VARIANT_SHAPE[this.variant()];\n const border = LIST_VARIANT_HAS_BORDER[this.variant()]\n ? resolveColor(this.color()).borderLight\n : '';\n return `flex flex-col overflow-hidden ${shape} ${border}`.trim();\n });\n\n protected readonly _headerClass = computed(() => {\n const t = resolveColor(this.color());\n return `flex items-center gap-2 px-4 py-3 border-b ${t.borderLight} text-sm font-semibold ${t.textSubtle}`;\n });\n\n registerItem(): number { return ++this._itemCounter; }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CLX_LIST_CONTEXT } from '../../../configs/list.config';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-list-item',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n @if (_ctx.numbered()) {\n <span [class]=\"_numberClass()\">{{ _index }}</span>\n } @else if (icon()) {\n <span clx-icon [name]=\"icon()\" [size]=\"_ctx.sizeTokens().iconSize\" [class]=\"_iconClass()\"></span>\n } @else {\n <ng-content select=\"[clxLead]\" />\n }\n\n <div class=\"flex-1 min-w-0\">\n @if (label()) {\n <p [class]=\"_labelClass()\">{{ label() }}</p>\n @if (sublabel()) {\n <p [class]=\"'text-slate-500 truncate mt-0.5 ' + _ctx.sizeTokens().sublabel\">{{ sublabel() }}</p>\n }\n } @else {\n <ng-content select=\"[clxContent]\" />\n }\n </div>\n\n @if (meta()) {\n <span [class]=\"_metaClass()\">{{ meta() }}</span>\n } @else {\n <ng-content select=\"[clxTrail]\" />\n }\n\n <ng-content />\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n '[attr.aria-disabled]': 'disabled() || null',\n 'role': 'listitem',\n },\n})\nexport class ClxListItemComponent {\n protected readonly _ctx = inject(CLX_LIST_CONTEXT);\n\n readonly label = input<string>('');\n readonly sublabel = input<string>('');\n readonly icon = input<string>('');\n readonly meta = input<string>('');\n readonly metaColor = input<ClxColorInput>('indigo');\n readonly disabled = input<boolean>(false);\n\n protected readonly _index = this._ctx.registerItem();\n\n protected readonly _iconClass = computed(() => resolveColor(this._ctx.color()).textSubtle);\n\n protected readonly _hostClass = computed(() => {\n const { item } = this._ctx.sizeTokens();\n const divider = this._ctx.dividerClass();\n const disabled = this.disabled() ? 'opacity-40 grayscale pointer-events-none select-none' : '';\n return `flex items-center gap-3 ${item} ${divider} ${disabled}`.trim();\n });\n\n protected readonly _numberClass = computed(() => {\n const t = resolveColor(this._ctx.color());\n const { number } = this._ctx.sizeTokens();\n return `rounded-full flex items-center justify-center font-bold leading-none shrink-0 ${t.bgSubtle} ${t.textSubtle} ${number}`;\n });\n\n protected readonly _labelClass = computed(() => {\n const { label } = this._ctx.sizeTokens();\n const weight = this.sublabel() ? 'font-semibold' : 'font-normal';\n return `${weight} text-slate-700 truncate ${label}`;\n });\n\n protected readonly _metaClass = computed(() => {\n const t = resolveColor(this.metaColor());\n const { meta } = this._ctx.sizeTokens();\n return `shrink-0 px-2 py-0.5 rounded-full font-medium ${t.bgSubtle} ${t.textSubtle} ${meta}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CurrencyPipe, DecimalPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ClxButtonComponent } from '../../../components/base/clx-button/clx-button.component';\nimport { ClxButtonGroupComponent } from '../../../components/base/clx-button-group/clx-button-group.component';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\nimport { ClxSkeletonComponent } from '../../../components/base/clx-skeleton/clx-skeleton.component';\nimport { ClxRatingComponent } from '../../../components/base/clx-rating/clx-rating.component';\nimport { ClxCarouselComponent } from '../../../components/advanced/clx-carousel/clx-carousel.component';\nimport { ClxCarouselDirective } from '../../../directives/clx-carousel.directive';\nimport { ClxTabsComponent } from '../../../components/advanced/clx-tabs/clx-tabs.component';\nimport { ClxTabDirective } from '../../../directives/clx-tab.directive';\nimport { ClxNumberComponent } from '../../../components/forms/clx-number/clx-number.component';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxTabItem } from '../../../types/clx-tabs.types';\nimport type { ClxProductDetailData, ClxSpecType, ClxVariation } from '../../../types/clx-product-detail.types';\nimport { ClxTooltipDirective } from '../../../directives/clx-tooltip.directive';\nimport { ClxListComponent } from '../../../components/base/clx-list/clx-list.component';\nimport { ClxListItemComponent } from '../../../components/base/clx-list/clx-list-item.component';\n\n@Component({\n selector: 'clx-product-detail',\n standalone: true,\n imports: [\n CurrencyPipe,\n DecimalPipe,\n FormsModule,\n ClxButtonComponent,\n ClxButtonGroupComponent,\n ClxBadgeComponent,\n ClxIconComponent,\n ClxSkeletonComponent,\n ClxRatingComponent,\n ClxCarouselComponent,\n ClxCarouselDirective,\n ClxTabsComponent,\n ClxTabDirective,\n ClxNumberComponent,\n ClxTooltipDirective,\n ClxListComponent,\n ClxListItemComponent,\n ],\n templateUrl: './clx-product-detail.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxProductDetailComponent {\n readonly product = input<ClxProductDetailData | null>(null);\n readonly clxColor = input<ClxColorInput>('indigo');\n readonly loading = input<boolean>(false);\n readonly currency = input<string>('COP');\n\n readonly _carousel = viewChild(ClxCarouselComponent);\n\n readonly quantity = signal(1);\n readonly activeTab = signal('general');\n // { [spec_type_id]: spec_option_id } — selección actual del usuario\n readonly selectedSpecs = signal<Record<string, string>>({});\n\n readonly tabItems: ClxTabItem[] = [\n { id: 'general', label: 'Características' },\n { id: 'specs', label: 'Especificaciones' },\n { id: 'description', label: 'Descripción' },\n ];\n\n // Cuando llega un nuevo producto, inicializa la selección con la primera variación\n constructor() {\n effect(() => {\n const p = this.product();\n if (!p?.variations?.length) return;\n this.selectedSpecs.set({ ...p.variations[0].specs });\n });\n }\n\n // Variación activa: la que coincide exactamente con la selección actual\n readonly activeVariation = computed<ClxVariation | null>(() => {\n const p = this.product();\n if (!p?.variations?.length) return null;\n const sel = this.selectedSpecs();\n return p.variations.find(v =>\n Object.entries(v.specs).every(([typeId, optId]) => sel[typeId] === optId)\n ) ?? p.variations[0];\n });\n\n readonly finalPrice = computed(() => {\n const v = this.activeVariation();\n const p = this.product();\n return v?.sale_price ?? p?.product_sale_price ?? 0;\n });\n\n readonly discount = computed(() => {\n const p = this.product();\n if (!p?.has_discount) return 0;\n if (p.discount_percentage) return Math.round(p.discount_percentage);\n const sale = this.activeVariation()?.sale_price ?? p.product_sale_price;\n if (p.discount_price && p.discount_price > sale) {\n return Math.round(((p.discount_price - sale) / p.discount_price) * 100);\n }\n return 0;\n });\n\n // Devuelve si una opción tiene al menos una variación disponible con esa spec\n isOptionAvailable(specTypeId: string, specOptionId: string): boolean {\n const variations = this.product()?.variations ?? [];\n const currentSel = this.selectedSpecs();\n return variations.some(v => {\n if (v.specs[specTypeId] !== specOptionId) return false;\n return Object.entries(currentSel).every(([tid, oid]) =>\n tid === specTypeId || v.specs[tid] === oid\n );\n });\n }\n\n selectSpec(specTypeId: string, specOptionId: string): void {\n this.selectedSpecs.update(s => ({ ...s, [specTypeId]: specOptionId }));\n this._carousel()?.goTo(0);\n }\n\n isSpecSelected(specTypeId: string, specOptionId: string): boolean {\n return this.selectedSpecs()[specTypeId] === specOptionId;\n }\n\n selectedOptionLabel(specType: ClxSpecType): string {\n const optId = this.selectedSpecs()[specType.id];\n return specType.options.find(o => o.id === optId)?.value ?? '';\n }\n\n asColor(value: string): ClxColorInput { return value as ClxColorInput; }\n\n specsLeft<T>(specs: T[]) { return specs.slice(0, Math.ceil(specs.length / 2)); }\n specsRight<T>(specs: T[]) { return specs.slice(Math.ceil(specs.length / 2)); }\n}\n","<!-- ══ SKELETON ════════════════════════════════════════════════════════════ -->\n@if (loading()) {\n <div class=\"grid grid-cols-1 xl:grid-cols-2 gap-8 p-6\">\n <div class=\"space-y-3\">\n <clx-skeleton variant=\"rectangular\" width=\"100%\" height=\"420px\" class=\"rounded-2xl\"></clx-skeleton>\n <div class=\"flex gap-2\">\n @for (t of [1,2,3,4]; track t) {\n <clx-skeleton variant=\"rectangular\" width=\"80px\" height=\"80px\" class=\"rounded-xl\"></clx-skeleton>\n }\n </div>\n </div>\n <div class=\"space-y-4 pt-2\">\n <clx-skeleton variant=\"text\" size=\"lg\" width=\"70%\"></clx-skeleton>\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"40%\"></clx-skeleton>\n <clx-skeleton variant=\"text\" size=\"xl\" width=\"50%\"></clx-skeleton>\n <clx-skeleton variant=\"rectangular\" width=\"100%\" height=\"100px\" class=\"rounded-xl\"></clx-skeleton>\n <clx-skeleton variant=\"rectangular\" width=\"100%\" height=\"52px\" class=\"rounded-xl\"></clx-skeleton>\n <clx-skeleton variant=\"rectangular\" width=\"100%\" height=\"52px\" class=\"rounded-xl\"></clx-skeleton>\n </div>\n </div>\n}\n\n<!-- ══ CONTENT ════════════════════════════════════════════════════════════ -->\n@if (!loading() && product(); as p) {\n @let v = activeVariation();\n <div class=\"space-y-8\">\n\n <div class=\"grid grid-cols-1 xl:grid-cols-2 gap-8 xl:items-start\">\n\n <!-- ── Column 1: Image Gallery ──────────────────────────────── -->\n <div class=\"space-y-3\">\n <div class=\"relative\">\n <clx-carousel [clxColor]=\"clxColor()\" aspectRatio=\"4/3\" [loop]=\"true\">\n @for (img of v?.images ?? []; track img) {\n <ng-template clxSlide>\n <img [src]=\"img\" [alt]=\"p.product_name\" class=\"w-full h-full object-cover\" loading=\"lazy\" />\n </ng-template>\n }\n </clx-carousel>\n <div class=\"absolute top-3 right-3 z-10\">\n <button clx-button variant=\"solid\" [color]=\"clxColor()\" shape=\"circle\" size=\"md\"\n [iconOnly]=\"true\" clxTooltip=\"Add to Wishlist\" [clxTooltipColor]=\"clxColor()\" clxTooltipPosition=\"left\">\n <span clx-icon name=\"favorite_border\" size=\"sm\"></span>\n </button>\n </div>\n </div>\n <div class=\"flex flex-wrap gap-2\">\n @for (img of v?.images ?? []; track img; let i = $index) {\n <img [src]=\"img\" [alt]=\"p.product_name\"\n class=\"w-20 h-20 rounded-xl object-cover border-[3px] cursor-pointer shrink-0 transition-all\"\n [class]=\"_carousel()?.currentPageIndex() === i\n ? 'border-' + clxColor() + '-500 opacity-100'\n : 'border-transparent opacity-60 hover:opacity-90'\"\n loading=\"lazy\"\n (click)=\"_carousel()?.goTo(i)\" />\n }\n </div>\n </div>\n\n <!-- ── Column 2: Purchase Info ───────────────────────────────── -->\n <div class=\"space-y-5\">\n\n <!-- Tags (st_products.tags) -->\n <div class=\"flex flex-wrap gap-2\">\n @for (tag of p.tags; track tag) {\n <span clx-badge variant=\"light\" [color]=\"clxColor()\" size=\"sm\" shape=\"pill\">{{ tag }}</span>\n }\n </div>\n\n <!-- Title -->\n <div>\n <p class=\"text-xs text-slate-400 uppercase tracking-wide font-medium\">{{ p.trademark }}</p>\n <h1 class=\"text-2xl font-bold text-slate-800 leading-tight mt-0.5\">{{ p.product_name }}</h1>\n @if (v?.description) {\n <p class=\"text-slate-500 text-sm mt-1\">{{ v!.description }}</p>\n }\n </div>\n\n <!-- Rating -->\n <div class=\"flex items-center gap-2\">\n <clx-rating [value]=\"p.rating\" [color]=\"clxColor()\"></clx-rating>\n <span class=\"text-sm font-semibold text-slate-700\">{{ p.rating | number:'1.1-1' }}</span>\n <span class=\"text-sm text-slate-400\">({{ p.review_count }} reviews)</span>\n </div>\n\n <!-- Price block -->\n <div class=\"py-4\">\n <div class=\"flex items-baseline gap-3\">\n <span class=\"text-4xl font-black text-slate-800\">\n {{ finalPrice() | currency:currency():'symbol':'1.0-0' }}\n </span>\n @if (p.has_discount && p.discount_price) {\n <span class=\"text-lg text-slate-400 line-through\">\n {{ p.discount_price | currency:currency():'symbol':'1.0-0' }}\n </span>\n <span clx-badge variant=\"solid\" [color]=\"clxColor()\" size=\"sm\" shape=\"pill\">\n -{{ discount() }}%\n </span>\n }\n </div>\n @if (v && !v.in_stock) {\n <p class=\"text-sm text-rose-500 font-medium mt-1\">Out of stock</p>\n }\n </div>\n\n <!-- Selectores de variación (st_spec_types + st_spec_options) -->\n @for (specType of p.spec_types; track specType.id) {\n @if (specType.input_type === 'color') {\n <clx-button-group [label]=\"specType.name\" shape=\"circular\" [attached]=\"false\">\n @for (opt of specType.options; track opt.id) {\n <button clx-button\n [variant]=\"isSpecSelected(specType.id, opt.id) ? 'solid' : 'outline'\"\n [color]=\"asColor(opt.value)\"\n shape=\"circle\" size=\"xs\" [iconOnly]=\"true\"\n [disabled]=\"!isOptionAvailable(specType.id, opt.id)\"\n [clxTooltip]=\"opt.value\"\n [clxTooltipColor]=\"asColor(opt.value)\"\n clxTooltipPosition=\"top\"\n (click)=\"selectSpec(specType.id, opt.id)\">\n </button>\n }\n </clx-button-group>\n } @else {\n <clx-button-group [label]=\"specType.name\" shape=\"flat\" [attached]=\"false\">\n @for (opt of specType.options; track opt.id) {\n <button clx-button\n [variant]=\"isSpecSelected(specType.id, opt.id) ? 'solid' : 'outline'\"\n [color]=\"clxColor()\" size=\"sm\"\n [disabled]=\"!isOptionAvailable(specType.id, opt.id)\"\n (click)=\"selectSpec(specType.id, opt.id)\">\n {{ opt.value }}\n </button>\n }\n </clx-button-group>\n }\n }\n\n <!-- Quantity -->\n <clx-number label=\"Quantity:\" variant=\"stepper\" [color]=\"clxColor()\"\n [min]=\"1\" [max]=\"99\" [ngModel]=\"quantity()\" (ngModelChange)=\"quantity.set($event)\">\n </clx-number>\n\n <!-- CTA -->\n <div class=\"flex gap-3\">\n <button clx-button variant=\"solid\" [color]=\"clxColor()\" size=\"md\" [block]=\"true\" icon=\"bolt\"\n [disabled]=\"!v?.in_stock\">Buy Now</button>\n <button clx-button variant=\"light\" [color]=\"clxColor()\" size=\"md\" [block]=\"true\" icon=\"shopping_cart\"\n [disabled]=\"!v?.in_stock\">Add to Cart</button>\n </div>\n\n </div>\n </div>\n\n <!-- ── Tabs ──────────────────────────────────────────────────────── -->\n <clx-tabs [tabs]=\"tabItems\" [clxColor]=\"clxColor()\" [(activeTab)]=\"activeTab\">\n\n <!-- Tab: Características generales (st_product_specs — ficha técnica global) -->\n <ng-template [clxTabPanel]=\"'general'\">\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-x-8\">\n <clx-list [color]=\"clxColor()\" variant=\"flush\" size=\"sm\">\n @for (spec of specsLeft(p.product_specs); track spec.id) {\n <clx-list-item [label]=\"spec.name + ':'\" [sublabel]=\"spec.value\" [icon]=\"spec.icon ?? ''\" />\n }\n </clx-list>\n <clx-list [color]=\"clxColor()\" variant=\"flush\" size=\"sm\">\n @for (spec of specsRight(p.product_specs); track spec.id) {\n <clx-list-item [label]=\"spec.name + ':'\" [sublabel]=\"spec.value\" [icon]=\"spec.icon ?? ''\" />\n }\n </clx-list>\n </div>\n </ng-template>\n\n <!-- Tab: Especificaciones (st_spec_types — specs de la variación activa) -->\n <ng-template [clxTabPanel]=\"'specs'\">\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-x-8\">\n <clx-list [color]=\"clxColor()\" variant=\"flush\" size=\"sm\">\n @for (st of specsLeft(p.spec_types); track st.id) {\n <clx-list-item [label]=\"st.name + ':'\" [sublabel]=\"selectedOptionLabel(st)\" [icon]=\"st.icon ?? ''\" />\n }\n </clx-list>\n <clx-list [color]=\"clxColor()\" variant=\"flush\" size=\"sm\">\n @for (st of specsRight(p.spec_types); track st.id) {\n <clx-list-item [label]=\"st.name + ':'\" [sublabel]=\"selectedOptionLabel(st)\" [icon]=\"st.icon ?? ''\" />\n }\n </clx-list>\n </div>\n </ng-template>\n\n <!-- Tab: Descripción (st_product_descriptions) -->\n <ng-template [clxTabPanel]=\"'description'\">\n <div class=\"space-y-5 max-w-3xl\">\n @for (block of p.descriptions; track block.id) {\n <div>\n @if (block.title) {\n <h3 class=\"text-base font-semibold text-slate-800 mb-1\">{{ block.title }}</h3>\n }\n <p class=\"text-sm text-slate-500 leading-relaxed\">{{ block.body }}</p>\n </div>\n }\n </div>\n </ng-template>\n\n </clx-tabs>\n\n <!-- ── Reviews ───────────────────────────────────────────────────── -->\n <div class=\"grid grid-cols-1 xl:grid-cols-3 gap-8 border-t border-slate-200 pt-8\">\n\n <div class=\"space-y-3\">\n <h2 class=\"text-base font-bold text-slate-800\">Customer Reviews</h2>\n <div class=\"flex items-end gap-3\">\n <span class=\"text-5xl font-black text-slate-800\">{{ p.rating | number:'1.1-1' }}</span>\n <div class=\"pb-1 space-y-1\">\n <clx-rating [value]=\"p.rating\" [color]=\"clxColor()\"></clx-rating>\n <p class=\"text-xs text-slate-500\">{{ p.review_count }} verified ratings</p>\n </div>\n </div>\n <p class=\"text-sm font-semibold\" [class]=\"'text-' + clxColor() + '-600'\">Very Good</p>\n <div class=\"pt-2 space-y-2\">\n <button clx-button variant=\"solid\" [color]=\"clxColor()\" size=\"md\" [block]=\"true\" icon=\"rate_review\">\n Leave Us a Review\n </button>\n <button clx-button variant=\"light\" [color]=\"clxColor()\" size=\"md\" [block]=\"true\" icon=\"flag\">\n Report abuse\n </button>\n </div>\n </div>\n\n <div class=\"lg:col-span-2 space-y-4\">\n @for (review of p.reviews ?? []; track review.id) {\n <div class=\"rounded-2xl overflow-hidden shadow-sm\">\n <div class=\"flex items-center gap-3 px-4 py-3\">\n <div class=\"w-10 h-10 rounded-full bg-slate-100 flex items-center justify-center shrink-0\">\n <span class=\"text-sm font-bold text-slate-600\">\n {{ review.author_name.substring(0,1) }}{{ review.author_name.split(' ')[1]?.substring(0,1) ?? '' }}\n </span>\n </div>\n <div class=\"flex-1 min-w-0\">\n <p class=\"font-semibold text-sm text-slate-800 truncate\">{{ review.author_name }}</p>\n <p class=\"text-xs text-slate-400\">{{ review.created_at }}</p>\n </div>\n @if (review.is_verified) {\n <span clx-badge variant=\"light\" color=\"emerald\" size=\"sm\" shape=\"pill\">Verified</span>\n }\n </div>\n <div class=\"px-4 pb-4 space-y-2\">\n <div class=\"flex items-center gap-2\">\n <clx-rating [value]=\"review.rating\" [color]=\"clxColor()\"></clx-rating>\n @if (review.title) {\n <span class=\"text-sm font-semibold text-slate-700\">{{ review.title }}</span>\n }\n </div>\n @if (review.body) {\n <p class=\"text-sm text-slate-500\">{{ review.body }}</p>\n }\n <div class=\"flex items-center gap-3 pt-1\">\n <span class=\"text-xs text-slate-400\">Helpful?</span>\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"xs\" icon=\"thumb_up\">{{ review.helpful }}</button>\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"xs\" icon=\"thumb_down\">{{ review.not_helpful }}</button>\n </div>\n </div>\n </div>\n }\n </div>\n\n </div>\n\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type {\n ClxTreeNode,\n ClxTreeSize,\n ClxTreeVariant,\n ClxTreeSelectEvent,\n ClxTreeExpandEvent,\n} from '../../../types/clx-tree.types';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\nconst SIZE_MAP: Record<ClxTreeSize, { row: string; text: string; icon: 'xs' | 'sm' | 'md'; indent: string }> = {\n sm: { row: 'py-1 px-2', text: 'text-xs', icon: 'xs', indent: 'pl-5' },\n md: { row: 'py-1.5 px-2', text: 'text-sm', icon: 'sm', indent: 'pl-6' },\n lg: { row: 'py-2 px-2', text: 'text-sm', icon: 'md', indent: 'pl-7' },\n};\n\n@Component({\n selector: 'clx-tree',\n standalone: true,\n imports: [NgTemplateOutlet, ClxIconComponent],\n template: `\n <div role=\"tree\" [class]=\"_rootClass()\">\n @for (node of nodes(); track node.id) {\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { $implicit: node, depth: 0 }\"></ng-container>\n }\n </div>\n\n <ng-template #nodeTemplate let-node let-depth=\"depth\">\n @let hasChildren = !!node.children?.length;\n @let expanded = _isExpanded(node.id);\n @let selected = _isSelected(node.id);\n\n <div\n role=\"treeitem\"\n [attr.aria-expanded]=\"hasChildren ? expanded : null\"\n [attr.aria-selected]=\"selectable() ? selected : null\">\n\n <!-- Row -->\n <div\n [class]=\"_rowClass(node, selected)\"\n [style.paddingLeft.px]=\"depth * _indentPx() + 8\"\n (click)=\"!node.disabled && _onRowClick(node)\">\n\n <!-- Expand chevron -->\n <span\n class=\"shrink-0 transition-transform duration-200\"\n [class.rotate-90]=\"expanded\"\n [class.invisible]=\"!hasChildren\"\n (click)=\"hasChildren && $event.stopPropagation(); hasChildren && _toggleExpand(node)\">\n <span clx-icon name=\"chevron_right\" [size]=\"_s().icon\"></span>\n </span>\n\n <!-- Node icon -->\n @if (node.icon) {\n <span clx-icon [name]=\"node.icon\" [size]=\"_s().icon\" [class]=\"_iconClass(selected)\"></span>\n } @else if (hasChildren) {\n <span clx-icon [name]=\"expanded ? 'folder_open' : 'folder'\" [size]=\"_s().icon\" [class]=\"_iconClass(selected)\"></span>\n } @else {\n <span clx-icon name=\"description\" [size]=\"_s().icon\" [class]=\"_iconClass(selected)\"></span>\n }\n\n <!-- Label -->\n <span [class]=\"_labelClass(node, selected)\">{{ node.label }}</span>\n\n <!-- Badge count -->\n @if (node.children?.length) {\n <span [class]=\"_badgeClass(selected)\">{{ node.children!.length }}</span>\n }\n </div>\n\n <!-- Children -->\n @if (hasChildren && expanded) {\n <div [class]=\"variant() === 'lines' ? _lineClass() : ''\">\n @for (child of node.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { $implicit: child, depth: depth + 1 }\"></ng-container>\n }\n </div>\n }\n </div>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxTreeComponent {\n readonly nodes = input.required<ClxTreeNode[]>();\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxTreeSize>('md');\n readonly variant = input<ClxTreeVariant>('default');\n readonly selectable = input<boolean>(true);\n readonly multiSelect = input<boolean>(false);\n readonly expandAll = input<boolean>(false);\n\n readonly selectedIds = model<(string | number)[]>([]);\n readonly expandedIds = model<(string | number)[]>([]);\n\n readonly selectChange = output<ClxTreeSelectEvent>();\n readonly expandChange = output<ClxTreeExpandEvent>();\n\n protected readonly _s = computed(() => SIZE_MAP[this.size()]);\n protected readonly _indentPx = computed(() =>\n this.size() === 'sm' ? 16 : this.size() === 'lg' ? 24 : 20\n );\n\n protected readonly _rootClass = computed(() =>\n `select-none ${this.variant() === 'lines' ? 'divide-y divide-slate-100' : ''}`\n );\n\n protected _isExpanded(id: string | number): boolean {\n return this.expandAll() || this.expandedIds().includes(id);\n }\n\n protected _isSelected(id: string | number): boolean {\n return this.selectedIds().includes(id);\n }\n\n protected _rowClass(node: ClxTreeNode, selected: boolean): string {\n const s = this._s();\n const t = resolveColor(this.color());\n const base = `flex items-center gap-1.5 rounded-lg cursor-pointer transition-colors ${s.row} ${s.text}`;\n if (node.disabled) return `${base} opacity-40 cursor-not-allowed`;\n if (selected) return `${base} ${t.bgSubtle} ${t.textSubtle} font-medium`;\n return `${base} text-slate-700 ${t.hoverBgMuted}`;\n }\n\n protected _iconClass(selected: boolean): string {\n const t = resolveColor(this.color());\n return selected ? t.textSubtle : 'text-slate-400';\n }\n\n protected _labelClass(node: ClxTreeNode, selected: boolean): string {\n return `flex-1 truncate ${node.disabled ? 'line-through text-slate-400' : ''}`;\n }\n\n protected _badgeClass(selected: boolean): string {\n const t = resolveColor(this.color());\n return `ml-auto text-xs px-1.5 py-0.5 rounded-full font-medium ${selected ? t.bg + ' ' + t.text : t.bgSubtle + ' ' + t.textSubtle}`;\n }\n\n protected _lineClass(): string {\n return 'border-l border-slate-200 ml-3.5 pl-2 mt-0.5';\n }\n\n protected _toggleExpand(node: ClxTreeNode): void {\n const ids = this.expandedIds();\n const isOpen = ids.includes(node.id);\n const next = isOpen ? ids.filter(i => i !== node.id) : [...ids, node.id];\n this.expandedIds.set(next);\n this.expandChange.emit({ node, expanded: !isOpen });\n }\n\n protected _onRowClick(node: ClxTreeNode): void {\n if (!this.selectable()) {\n if (node.children?.length) this._toggleExpand(node);\n return;\n }\n const isSelected = this._isSelected(node.id);\n let next: (string | number)[];\n if (this.multiSelect()) {\n next = isSelected\n ? this.selectedIds().filter(i => i !== node.id)\n : [...this.selectedIds(), node.id];\n } else {\n next = isSelected ? [] : [node.id];\n }\n this.selectedIds.set(next);\n this.selectChange.emit({ node, selected: !isSelected });\n if (node.children?.length) this._toggleExpand(node);\n }\n}\n","export const CHECKBOX_SIZE_MAP = {\n sm: { box: 'w-4 h-4', icon: 'xs' as const, label: 'text-xs' },\n md: { box: 'w-5 h-5', icon: 'xs' as const, label: 'text-sm' },\n lg: { box: 'w-6 h-6', icon: 'sm' as const, label: 'text-base' },\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxCheckboxVariant } from '../../../types/clx-checkbox.types';\nimport { CHECKBOX_SIZE_MAP } from '../../../configs/checkbox.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-checkbox',\n standalone: true,\n imports: [ClxIconComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxCheckboxComponent),\n multi: true,\n },\n ],\n template: `\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n aria-hidden=\"true\"\n [checked]=\"_checked()\"\n [disabled]=\"_disabled()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event.stopPropagation()\"\n (blur)=\"_handleBlur()\"\n />\n <div [class]=\"_boxClass()\">\n @if (_checked()) {\n <span clx-icon name=\"check\" [size]=\"_sizeConfig().icon\"></span>\n }\n </div>\n @if (label()) {\n <span [class]=\"_labelClass()\">{{ label() }}</span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'inline-flex items-center gap-2 select-none',\n '[style.cursor]': '_disabled() ? \"not-allowed\" : \"pointer\"',\n '[style.pointer-events]': '_disabled() ? \"none\" : null',\n role: 'checkbox',\n '[attr.aria-checked]': '_checked()',\n '[attr.tabindex]': '_disabled() ? -1 : 0',\n '(click)': '_toggle()',\n '(keydown.space)': '_onSpace($event)',\n },\n})\nexport class ClxCheckboxComponent implements ControlValueAccessor {\n readonly color = input<ClxColorInput>('indigo');\n readonly variant = input<ClxCheckboxVariant>('solid');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly label = input<string>('');\n /** Initial value when used without FormControl */\n readonly value = input<boolean>(false);\n /** Disabled state when used without FormControl */\n readonly disabled = input<boolean>(false);\n\n readonly _checked = signal(false);\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._checked.set(v));\n });\n\n private _onChange: (v: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n\n protected readonly _sizeConfig = computed(() => CHECKBOX_SIZE_MAP[this.size()]);\n\n protected readonly _boxClass = computed(() => {\n const base = `${this._sizeConfig().box} flex items-center justify-center rounded border-2 transition-all duration-200`;\n if (this._disabled()) {\n return this._checked()\n ? `${base} border-gray-300 bg-gray-300 text-white`\n : `${base} border-gray-300 bg-gray-100 text-transparent`;\n }\n if (!this._checked()) return `${base} border-gray-300 bg-white text-transparent`;\n const t = resolveColor(this.color());\n if (this.variant() === 'solid') return `${base} ${t.bg} ${t.border} ${t.text}`;\n return `${base} ${t.bgSubtle} ${t.borderLight} ${t.textSubtle}`;\n });\n\n protected readonly _labelClass = computed(() => {\n const color = this._disabled() ? 'text-gray-400' : 'text-slate-700';\n return `${this._sizeConfig().label} ${color} leading-none`;\n });\n\n writeValue(val: boolean): void {\n this._cvaConnected = true;\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(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n protected _toggle(): void {\n const next = !this._checked();\n this._checked.set(next);\n this._onChange(next);\n }\n\n protected _onSpace(event: Event): void {\n event.preventDefault();\n this._toggle();\n }\n\n protected _handleBlur(): void {\n this._onTouched();\n }\n}\n","import type { ClxSliderSize } from '../types/clx-slider.types';\n\nexport const SLIDER_SIZE_MAP: Record<ClxSliderSize, {\n trackPx: string;\n thumbPx: string;\n thumbRing: string;\n label: string;\n hint: string;\n markW: string;\n markH: string;\n wrapperH: string;\n tooltipBottom: string;\n}> = {\n sm: { trackPx: '4px', thumbPx: '14px', thumbRing: 'ring-2', label: 'text-xs font-medium', hint: 'text-xs', markW: '2px', markH: '4px', wrapperH: 'h-6', tooltipBottom: 'calc(50% + 10px)' },\n md: { trackPx: '6px', thumbPx: '20px', thumbRing: 'ring-2', label: 'text-sm font-medium', hint: 'text-xs', markW: '2px', markH: '6px', wrapperH: 'h-8', tooltipBottom: 'calc(50% + 13px)' },\n lg: { trackPx: '10px', thumbPx: '26px', thumbRing: 'ring-[3px]', label: 'text-sm font-medium', hint: 'text-sm', markW: '2px', markH: '8px', wrapperH: 'h-10', tooltipBottom: 'calc(50% + 16px)' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n inject,\n input,\n signal,\n computed,\n effect,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor, parseColorInput, CLX_COLOR_HEX } from '../../../types/clx-color.types';\nimport type { ClxSliderSize } from '../../../types/clx-slider.types';\nimport { SLIDER_SIZE_MAP } from '../../../configs/slider.config';\n\n@Component({\n selector: 'clx-slider',\n standalone: true,\n imports: [],\n template: `\n <!-- Label -->\n @if (label()) {\n <span [class]=\"_sizeConfig().label + ' text-slate-700 leading-none'\">{{ label() }}</span>\n }\n\n <!-- Track wrapper: altura fija para contener el thumb sin recorte -->\n <div class=\"relative w-full flex items-center\" [class]=\"_sizeConfig().wrapperH\">\n\n <!-- Base track -->\n <div [class]=\"_trackClass()\" [style.height]=\"_sizeConfig().trackPx\">\n\n <!-- Filled track -->\n <div\n class=\"absolute left-0 top-0 h-full rounded-full transition-all duration-75\"\n [class]=\"_disabled() ? 'bg-slate-300' : _colorTokens().bg\"\n [style.width]=\"_pct() + '%'\">\n </div>\n\n <!-- Tick marks -->\n @if (marks() && _tickPositions().length) {\n @for (pos of _tickPositions(); track pos) {\n <div\n class=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 rounded-full\"\n [class]=\"pos <= _pct() ? 'bg-white/60' : 'bg-slate-400/60'\"\n [style.width]=\"_sizeConfig().markW\"\n [style.height]=\"_sizeConfig().markH\"\n [style.left]=\"pos + '%'\">\n </div>\n }\n }\n </div>\n\n <!-- Thumb -->\n <div\n [class]=\"_thumbClass()\"\n [style.width]=\"_sizeConfig().thumbPx\"\n [style.height]=\"_sizeConfig().thumbPx\"\n [style.left]=\"_pct() + '%'\">\n </div>\n\n <!-- Tooltip -->\n @if (showTooltip() && !_disabled() && (_isFocused() || _isActive())) {\n <div\n class=\"absolute -translate-x-1/2 px-2 py-0.5 rounded text-white text-xs font-semibold\n pointer-events-none select-none shadow-md whitespace-nowrap z-20\"\n [class]=\"_colorTokens().bg\"\n [style.left]=\"_pct() + '%'\"\n [style.bottom]=\"_sizeConfig().tooltipBottom\">\n {{ _currentValue() }}\n <div class=\"absolute left-1/2 top-full -translate-x-1/2 border-4 border-transparent\"\n [style.border-top-color]=\"_tooltipArrowColor()\">\n </div>\n </div>\n }\n\n <!-- Native input — ocupa todo el wrapper para capturar eventos táctiles/mouse -->\n <input\n #rangeInput\n type=\"range\"\n class=\"absolute inset-0 w-full h-full opacity-0 z-30\"\n [class]=\"_disabled() ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [disabled]=\"_disabled()\"\n (input)=\"_onInput($event)\"\n (change)=\"_onTouched()\"\n (focus)=\"_isFocused.set(true)\"\n (blur)=\"_onBlur()\"\n (mousedown)=\"_isActive.set(true)\"\n (mouseup)=\"_isActive.set(false)\"\n (touchstart)=\"_isActive.set(true)\"\n (touchend)=\"_isActive.set(false)\"\n />\n </div>\n\n <!-- Min / Max labels -->\n @if (showMinMax()) {\n <div class=\"flex justify-between mt-0.5\">\n <span [class]=\"_sizeConfig().hint + ' text-slate-400'\">{{ min() }}</span>\n <span [class]=\"_sizeConfig().hint + ' text-slate-400'\">{{ max() }}</span>\n </div>\n }\n\n <!-- Hint / Error -->\n @if (_isInvalid()) {\n <p class=\"text-xs text-red-500 flex items-center gap-1\">{{ errorMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_sizeConfig().hint + ' text-gray-400'\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col gap-1.5 w-full',\n '[class.opacity-50]': '_disabled()',\n '[class.pointer-events-none]': '_disabled()',\n },\n})\nexport class ClxSliderComponent implements ControlValueAccessor {\n\n // ── Inputs ──────────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly hint = input<string>('');\n readonly errorMessage = input<string>('Valor fuera de rango');\n readonly activeColor = input<ClxColorInput>('indigo');\n readonly size = input<ClxSliderSize>('md');\n readonly min = input<number>(0);\n readonly max = input<number>(100);\n readonly step = input<number>(1);\n readonly showTooltip = input<boolean>(true);\n readonly showMinMax = input<boolean>(false);\n readonly marks = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n // ── DI ──────────────────────────────────────────────────────────────────────\n private readonly _ngControl = inject(NgControl, { optional: true, self: true });\n private readonly _rangeInput = viewChild<ElementRef<HTMLInputElement>>('rangeInput');\n\n constructor() {\n if (this._ngControl) this._ngControl.valueAccessor = this;\n // Sync signal → native input DOM property (needed for reset/patchValue)\n effect(() => {\n const el = this._rangeInput()?.nativeElement;\n if (el) el.value = String(this._currentValue());\n });\n }\n\n // ── Internal state ───────────────────────────────────────────────────────────\n protected readonly _currentValue = signal<number>(0);\n protected readonly _cvaDisabled = signal(false);\n protected readonly _isFocused = signal(false);\n protected readonly _isActive = signal(false);\n protected readonly _wasTouched = signal(false);\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n protected readonly _sizeConfig = computed(() => SLIDER_SIZE_MAP[this.size()]);\n protected readonly _colorTokens = computed(() =>\n resolveColor(this._isInvalid() ? 'red' : this.activeColor()),\n );\n\n protected readonly _pct = computed(() => {\n const range = this.max() - this.min();\n if (range === 0) return 0;\n return ((this._currentValue() - this.min()) / range) * 100;\n });\n\n protected readonly _isInvalid = computed(() =>\n this._wasTouched() && (this._ngControl?.control?.invalid ?? false),\n );\n\n protected readonly _trackClass = computed(() =>\n 'absolute inset-x-0 top-1/2 -translate-y-1/2 rounded-full bg-slate-200 overflow-visible',\n );\n\n protected readonly _thumbClass = computed(() => {\n const base = 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2 rounded-full bg-white border-[3px] shadow-md transition-all duration-75 pointer-events-none z-10';\n const t = this._colorTokens();\n const border = this._disabled() ? 'border-slate-300' : t.border;\n const ring = this._isFocused() && !this._disabled()\n ? `${this._sizeConfig().thumbRing} ${t.ring} scale-110`\n : '';\n const active = this._isActive() && !this._disabled() ? 'scale-125' : '';\n return [base, border, ring, active].filter(Boolean).join(' ');\n });\n\n protected readonly _tickPositions = computed<number[]>(() => {\n const range = this.max() - this.min();\n const step = this.step();\n if (!this.marks() || range <= 0 || step <= 0) return [];\n const ticks: number[] = [];\n for (let v = this.min(); v <= this.max(); v += step) {\n ticks.push(((v - this.min()) / range) * 100);\n }\n return ticks;\n });\n\n // Tooltip arrow color via inline style (CSS class can't target border-top-color easily)\n protected _tooltipArrowColor(): string {\n const input = this._isInvalid() ? 'red' : this.activeColor();\n const { color } = parseColorInput(input);\n return CLX_COLOR_HEX[color] ?? '#6366f1';\n }\n\n // ── Event handlers ───────────────────────────────────────────────────────────\n protected _onInput(event: Event): void {\n const val = Number((event.target as HTMLInputElement).value);\n this._currentValue.set(val);\n this._onChange(val);\n }\n\n protected _onBlur(): void {\n this._isFocused.set(false);\n this._isActive.set(false);\n this._onTouched();\n this._wasTouched.set(true);\n }\n\n // ── CVA ──────────────────────────────────────────────────────────────────────\n private _onChange: (v: number) => void = () => {};\n protected _onTouched: () => void = () => {};\n\n writeValue(val: number | null): void {\n this._currentValue.set(val ?? this.min());\n }\n\n registerOnChange(fn: (v: number) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n InjectionToken,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxRadioVariant } from '../../../types/clx-radio.types';\n\nexport const CLX_RADIO_GROUP = new InjectionToken<ClxRadioGroupComponent>('CLX_RADIO_GROUP');\n\n@Component({\n selector: 'clx-radio-group',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxRadioGroupComponent),\n multi: true,\n },\n {\n provide: CLX_RADIO_GROUP,\n useExisting: forwardRef(() => ClxRadioGroupComponent),\n },\n ],\n host: {\n role: 'radiogroup',\n class: 'flex flex-wrap gap-4',\n '[class.flex-col]': 'direction() === \"vertical\"',\n '[style.cursor]': 'isDisabled() ? \"not-allowed\" : null',\n '[style.pointer-events]': 'isDisabled() ? \"none\" : null',\n },\n})\nexport class ClxRadioGroupComponent implements ControlValueAccessor {\n readonly color = input<ClxColorInput>('indigo');\n readonly variant = input<ClxRadioVariant>('solid');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly direction = input<'horizontal' | 'vertical'>('horizontal');\n readonly disabled = input<boolean>(false);\n\n /** Current selected value — readable by child clx-radio via injection */\n readonly _value = signal<unknown>(null);\n\n private readonly _cvaDisabled = signal(false);\n\n /** Merged disabled state (input + CVA) — readable by child clx-radio */\n readonly isDisabled = computed(() => this._cvaDisabled() || this.disabled());\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);\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(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n}\n","export const RADIO_SIZE_MAP = {\n sm: { ring: 'w-4 h-4', dot: 'w-1.5 h-1.5', label: 'text-xs' },\n md: { ring: 'w-5 h-5', dot: 'w-2 h-2', label: 'text-sm' },\n lg: { ring: 'w-6 h-6', dot: 'w-2.5 h-2.5', label: 'text-base' },\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxRadioVariant } from '../../../types/clx-radio.types';\nimport { RADIO_SIZE_MAP } from '../../../configs/radio.config';\nimport { CLX_RADIO_GROUP } from './clx-radio-group.component';\n\n@Component({\n selector: 'clx-radio',\n standalone: true,\n template: `\n <input\n type=\"radio\"\n class=\"sr-only\"\n aria-hidden=\"true\"\n [checked]=\"_checked()\"\n [disabled]=\"_isDisabled()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event.stopPropagation()\"\n />\n <div [class]=\"_ringClass()\">\n <div [class]=\"_dotClass()\"></div>\n </div>\n @if (label()) {\n <span [class]=\"_labelClass()\">{{ label() }}</span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'inline-flex items-center gap-2 select-none cursor-pointer',\n role: 'radio',\n '[attr.aria-checked]': '_checked()',\n '[attr.tabindex]': '_isDisabled() ? -1 : 0',\n '(click)': '_select()',\n '(keydown.space)': '_onSpace($event)',\n },\n})\nexport class ClxRadioComponent {\n /** Value this radio represents — compared against the group's selected value */\n readonly value = input.required<unknown>();\n readonly label = input<string>('');\n /** Per-radio overrides — falls back to the group's value if null */\n readonly color = input<ClxColorInput | null>(null);\n readonly variant = input<ClxRadioVariant | null>(null);\n readonly size = input<'sm' | 'md' | 'lg' | null>(null);\n\n private readonly _group = inject(CLX_RADIO_GROUP, { optional: true });\n\n protected readonly _checked = computed(() =>\n this._group ? this._group._value() === this.value() : false,\n );\n protected readonly _isDisabled = computed(() => this._group?.isDisabled() ?? false);\n\n private readonly _color = computed<ClxColorInput>(() => this.color() ?? this._group?.color() ?? 'indigo');\n private readonly _variant = computed(() => this.variant() ?? this._group?.variant() ?? 'solid');\n private readonly _size = computed(() => this.size() ?? this._group?.size() ?? 'md');\n\n protected readonly _sizeConfig = computed(() => RADIO_SIZE_MAP[this._size()]);\n\n protected readonly _ringClass = computed(() => {\n const base = `${this._sizeConfig().ring} rounded-full border-2 flex items-center justify-center transition-all duration-200`;\n if (this._isDisabled()) {\n return this._checked()\n ? `${base} border-gray-300 bg-gray-300`\n : `${base} border-gray-300 bg-gray-100`;\n }\n if (!this._checked()) return `${base} border-gray-300 bg-white`;\n const t = resolveColor(this._color());\n if (this._variant() === 'solid') return `${base} ${t.bg} ${t.border}`;\n return `${base} ${t.bgSubtle} ${t.borderLight}`;\n });\n\n protected readonly _dotClass = computed(() => {\n const base = `${this._sizeConfig().dot} rounded-full transition-all duration-200`;\n if (!this._checked()) return `${base} scale-0`;\n if (this._isDisabled()) return `${base} scale-100 bg-white`;\n const t = resolveColor(this._color());\n if (this._variant() === 'solid') return `${base} scale-100 ${t.text}`;\n return `${base} scale-100 ${t.textSubtle}`;\n });\n\n protected readonly _labelClass = computed(() => {\n const color = this._isDisabled() ? 'text-gray-400' : 'text-slate-700';\n return `${this._sizeConfig().label} ${color} leading-none`;\n });\n\n protected _select(): void {\n this._group?.select(this.value());\n }\n\n protected _onSpace(event: Event): void {\n event.preventDefault();\n this._select();\n }\n}\n","import type { ClxSelectSize } from '../types/clx-select.types';\n\nexport const SELECT_SIZE_MAP: Record<ClxSelectSize, {\n minH: string;\n text: string;\n label: string;\n hint: string;\n px: string;\n py: string;\n gap: string;\n tagSize: 'sm' | 'md';\n btnSize: 'xs' | 'sm';\n}> = {\n sm: { minH: 'min-h-8', text: 'text-sm', label: 'text-xs font-medium', hint: 'text-xs', px: 'px-3', py: 'py-1', gap: 'gap-1', tagSize: 'sm', btnSize: 'xs' },\n md: { minH: 'min-h-10', text: 'text-sm', label: 'text-sm font-medium', hint: 'text-xs', px: 'px-3', py: 'py-2', gap: 'gap-1.5', tagSize: 'md', btnSize: 'sm' },\n lg: { minH: 'min-h-12', text: 'text-base', label: 'text-sm font-medium', hint: 'text-sm', px: 'px-4', py: 'py-2.5', gap: 'gap-2', tagSize: 'md', btnSize: 'sm' },\n};\n","import type { ClxTagVariant, ClxTagSize, ClxTagShape } from '../types/clx-tag.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\nexport const TAG_SIZE_MAP: Record<ClxTagSize, {\n pad: string;\n text: string;\n gap: string;\n btnSize: Extract<ClxSize, 'xxs'>;\n}> = {\n sm: { pad: 'pl-1.5 pr-0 py-0', text: 'text-xs', gap: 'gap-0.5', btnSize: 'xxs' },\n md: { pad: 'pl-2.5 pr-1 py-0.5', text: 'text-xs', gap: 'gap-1', btnSize: 'xxs' },\n};\n\nexport const TAG_SHAPE_MAP: Record<ClxTagShape, string> = {\n rounded: 'rounded-md',\n pill: 'rounded-full',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxTagVariant, ClxTagSize, ClxTagShape } from '../../../types/clx-tag.types';\nimport { TAG_SIZE_MAP, TAG_SHAPE_MAP } from '../../../configs/tag.config';\nimport { ClxButtonComponent } from '../clx-button/clx-button.component';\n\n@Component({\n selector: 'span[clx-tag]',\n standalone: true,\n imports: [ClxButtonComponent],\n template: `\n <ng-content />\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"_closeBtnColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"close\"\n [iconOnly]=\"true\"\n aria-label=\"Eliminar etiqueta\"\n (click)=\"onRemove.emit(); $event.stopPropagation()\">\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n})\nexport class ClxTagComponent {\n readonly variant = input<ClxTagVariant>('soft');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxTagSize>('md');\n readonly shape = input<ClxTagShape>('rounded');\n readonly onRemove = output<void>();\n\n protected readonly _sizeConfig = computed(() => TAG_SIZE_MAP[this.size()]);\n\n protected readonly _colorClass = computed(() => {\n const t = resolveColor(this.color());\n const variant = this.variant();\n if (variant === 'solid') return `${t.bg} ${t.text}`;\n if (variant === 'soft') return `${t.bgSubtle} ${t.textSubtle}`;\n return `border ${t.border} ${t.textSubtle} bg-transparent`;\n });\n\n protected readonly _hostClass = computed(() => {\n const s = this._sizeConfig();\n return `inline-flex items-center font-medium leading-none ${s.gap} ${s.text} ${s.pad} ${TAG_SHAPE_MAP[this.shape()]} ${this._colorClass()}`;\n });\n\n protected readonly _closeBtnColor = computed<ClxColorInput>(() =>\n this.variant() === 'solid' ? 'white' : this.color()\n );\n}\n","import type { ClxInputStatus, ClxInputSize } from '../types/clx-input.types';\n\nexport const INPUT_STATUS_MAP: Record<ClxInputStatus, {\n border: string;\n ring: string;\n msgCls: string;\n iconName: string;\n iconColor: string;\n}> = {\n default: {\n border: 'border-gray-300',\n ring: 'focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500',\n msgCls: '',\n iconName: '',\n iconColor: '',\n },\n error: {\n border: 'border-red-400',\n ring: 'focus:ring-2 focus:ring-red-500/20 focus:border-red-500',\n msgCls: 'text-red-500',\n iconName: 'error',\n iconColor: '#ef4444',\n },\n success: {\n border: 'border-green-500',\n ring: 'focus:ring-2 focus:ring-green-500/20 focus:border-green-500',\n msgCls: 'text-green-600',\n iconName: 'check_circle',\n iconColor: '#16a34a',\n },\n};\n\nexport const INPUT_SIZE_MAP: Record<ClxInputSize, {\n input: string;\n label: string;\n hint: string;\n iconSize: 'xs' | 'sm' | 'md';\n iconLeft: string;\n iconRight: string;\n padLeft: string;\n padRight: string;\n padDefaultL: string;\n padDefaultR: string;\n}> = {\n sm: {\n input: 'h-8 text-sm',\n label: 'text-xs font-medium',\n hint: 'text-xs',\n iconSize: 'xs',\n iconLeft: 'left-2.5',\n iconRight: 'right-2.5',\n padLeft: 'pl-8',\n padRight: 'pr-8',\n padDefaultL: 'pl-3',\n padDefaultR: 'pr-3',\n },\n md: {\n input: 'h-10 text-sm',\n label: 'text-sm font-medium',\n hint: 'text-xs',\n iconSize: 'sm',\n iconLeft: 'left-3',\n iconRight: 'right-3',\n padLeft: 'pl-9',\n padRight: 'pr-9',\n padDefaultL: 'pl-3',\n padDefaultR: 'pr-3',\n },\n lg: {\n input: 'h-12 text-base',\n label: 'text-sm font-medium',\n hint: 'text-sm',\n iconSize: 'md',\n iconLeft: 'left-3.5',\n iconRight: 'right-3.5',\n padLeft: 'pl-10',\n padRight: 'pr-10',\n padDefaultL: 'pl-4',\n padDefaultR: 'pr-4',\n },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxInputStatus, ClxInputSize, ClxInputType } from '../../../types/clx-input.types';\nimport { INPUT_STATUS_MAP, INPUT_SIZE_MAP } from '../../../configs/input.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\nlet _clxInputIdCounter = 0;\n\n@Component({\n selector: 'clx-input',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxInputComponent),\n multi: true,\n },\n ],\n template: `\n @if (label()) {\n <label [for]=\"_inputId\" [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <!-- ── Input wrapper ───────────────────────────────────────────────── -->\n <div [class]=\"_wrapperClass()\">\n\n <!-- Prefix icon — colored cell (flex mode) -->\n @if (prefixIcon() && !prefixText()) {\n <div [class]=\"_prefixIconCellCls()\">\n <span clx-icon [name]=\"prefixIcon()!\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n }\n\n <!-- Prefix text addon (group mode) -->\n @if (prefixText()) {\n <span class=\"inline-flex items-center px-3 bg-gray-100 border-r border-gray-300 text-gray-500 text-sm shrink-0 select-none whitespace-nowrap\">\n {{ prefixText() }}\n </span>\n }\n\n <!-- ── Actual input ─────────────────────────────────────────────── -->\n <input\n [id]=\"_inputId\"\n [type]=\"_inputType()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"_disabled()\"\n [value]=\"_value()\"\n [class]=\"_inputClass()\"\n [autocomplete]=\"_autocomplete()\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur()\"\n />\n\n <!-- Password visibility toggle -->\n @if (type() === 'password') {\n <div class=\"absolute right-0 top-0 h-full flex items-center pr-1\">\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [icon]=\"_showPassword() ? 'visibility_off' : 'visibility'\"\n [disabled]=\"_disabled()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_togglePassword()\"></button>\n </div>\n }\n\n <!-- Status icon (error / success) -->\n @else if (status() !== 'default') {\n <div [class]=\"_suffixIconWrapCls()\" [style.color]=\"_statusCfg().iconColor\">\n <span clx-icon [name]=\"_statusCfg().iconName\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n }\n\n <!-- Custom suffix icon -->\n @else if (suffixIcon()) {\n <div [class]=\"_suffixIconWrapCls()\">\n <span clx-icon [name]=\"suffixIcon()!\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n }\n\n <!-- Suffix text addon (group mode) -->\n @if (suffixText()) {\n <span class=\"inline-flex items-center px-3 bg-gray-100 border-l border-gray-300 text-gray-500 text-sm shrink-0 select-none whitespace-nowrap\">\n {{ suffixText() }}\n </span>\n }\n </div>\n\n <!-- ── Bottom message ──────────────────────────────────────────────── -->\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col gap-1.5',\n },\n})\nexport class ClxInputComponent implements ControlValueAccessor {\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly type = input<ClxInputType>('text');\n readonly color = input<ClxColorInput>('indigo');\n readonly hint = input<string>('');\n readonly prefixIcon = input<string>('');\n readonly suffixIcon = input<string>('');\n readonly prefixText = input<string>('');\n readonly suffixText = input<string>('');\n readonly status = input<ClxInputStatus>('default');\n readonly statusMessage = input<string>('');\n readonly size = input<ClxInputSize>('md');\n /** Initial value for standalone use (without FormControl) */\n readonly value = input<string>('');\n /** Disabled state for standalone use (without FormControl) */\n readonly disabled = input<boolean>(false);\n readonly autocomplete = input<string | null>(null);\n\n // ── Internal state ───────────────────────────────────────────────────────\n protected readonly _inputId = `clx-input-${++_clxInputIdCounter}`;\n protected readonly _showPassword = signal(false);\n\n readonly _value = signal('');\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._value.set(v));\n });\n\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Computed ─────────────────────────────────────────────────────────────\n protected readonly _inputType = computed(() =>\n this.type() === 'password' && this._showPassword() ? 'text' : this.type(),\n );\n\n protected readonly _autocomplete = computed(() => {\n if (this.autocomplete() !== null) return this.autocomplete()!;\n return this.type() === 'password' ? 'new-password' : 'off';\n });\n\n protected readonly _sizeConfig = computed(() => INPUT_SIZE_MAP[this.size()]);\n protected readonly _statusCfg = computed(() => INPUT_STATUS_MAP[this.status()]);\n\n /** True whenever the wrapper must be a flex container (prefix icon/text or suffix text) */\n private readonly _isFlexMode = computed(() =>\n !!(this.prefixIcon() || this.prefixText() || this.suffixText()),\n );\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeConfig().hint} text-gray-400`,\n );\n\n protected readonly _wrapperClass = computed(() => {\n if (!this._isFlexMode()) return 'relative';\n\n const border = this._disabled() ? 'border-gray-200' : this._statusCfg().border;\n const focusCls = this._disabled()\n ? ''\n : this.status() !== 'default'\n ? this._statusCfg().ring.replace(/focus:/g, 'focus-within:')\n : resolveColor(this.color()).focusWithin;\n return `relative flex items-stretch rounded-md border ${border} ${focusCls} overflow-hidden transition-all duration-200`;\n });\n\n protected readonly _inputClass = computed(() => {\n const size = this._sizeConfig();\n const statusCfg = this._statusCfg();\n\n // ── Flex mode (prefix icon / text addon / suffix addon) ───────────────\n if (this._isFlexMode()) {\n const hasSuffix = this.type() === 'password' || this.status() !== 'default' || !!this.suffixIcon();\n const pr = hasSuffix ? size.padRight : size.padDefaultR;\n const disabledCls = this._disabled()\n ? 'cursor-not-allowed text-gray-400 bg-gray-50'\n : 'text-slate-700 bg-white';\n return `flex-1 ${size.input} pl-3 ${pr} outline-none min-w-0 placeholder:text-gray-400 ${disabledCls}`;\n }\n\n // ── Normal mode ───────────────────────────────────────────────────────\n const hasSuffix = this.type() === 'password' || this.status() !== 'default' || !!this.suffixIcon();\n const pl = size.padDefaultL;\n const pr = hasSuffix ? size.padRight : size.padDefaultR;\n\n const base = `w-full rounded-md border ${size.input} ${pl} ${pr} outline-none transition-all duration-200`;\n\n if (this._disabled()) {\n return `${base} border-gray-200 bg-gray-50 cursor-not-allowed text-gray-400 placeholder:text-gray-300`;\n }\n const ring = this.status() !== 'default' ? statusCfg.ring : resolveColor(this.color()).focusDirect;\n return `${base} bg-white ${statusCfg.border} ${ring} text-slate-700 placeholder:text-gray-400`;\n });\n\n /** Colored prefix icon cell — matches the input accent color */\n protected readonly _prefixIconCellCls = computed(() => {\n if (this._disabled()) {\n return `px-3 flex items-center shrink-0 border-r bg-gray-50 text-gray-300 border-gray-200`;\n }\n const t = resolveColor(this.color());\n return `px-3 flex items-center shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n protected readonly _suffixIconWrapCls = computed(() => {\n const size = this._sizeConfig();\n return `absolute ${size.iconRight} top-1/2 -translate-y-1/2 pointer-events-none text-gray-400 flex items-center`;\n });\n\n protected readonly _statusMsgClass = computed(() =>\n `${this._sizeConfig().hint} ${this._statusCfg().msgCls}`,\n );\n\n // ── CVA ──────────────────────────────────────────────────────────────────\n writeValue(val: string): void {\n this._cvaConnected = true;\n this._value.set(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(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n // ── Handlers ─────────────────────────────────────────────────────────────\n protected _handleInput(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this._value.set(val);\n this._onChange(val);\n }\n\n protected _handleBlur(): void {\n this._onTouched();\n }\n\n protected _togglePassword(): void {\n this._showPassword.update(v => !v);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n HostListener,\n inject,\n input,\n Signal,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { startWith, debounceTime, distinctUntilChanged, switchMap, of, catchError, map } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { ConnectedPosition, OverlayModule, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxSelectOption, ClxSelectSize } from '../../../types/clx-select.types';\nimport { SELECT_SIZE_MAP } from '../../../configs/select.config';\nimport { ClxTagComponent } from '../../base/clx-tag/clx-tag.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxInputComponent } from '../clx-input/clx-input.component';\nimport { ClxSpinnerComponent } from '../../base/clx-spinner/clx-spinner.component';\n\n@Component({\n selector: 'clx-select',\n standalone: true,\n imports: [OverlayModule, ReactiveFormsModule, ClxTagComponent, ClxIconComponent, ClxButtonComponent, ClxInputComponent, ClxSpinnerComponent],\n template: `\n @if (label()) {\n <span [id]=\"_labelId\" [class]=\"_labelClass()\">{{ label() }}</span>\n }\n\n <!-- ── Trigger ─────────────────────────────────────────────────────────── -->\n <div\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n [class]=\"_triggerClass()\"\n [attr.tabindex]=\"_disabled() ? null : '0'\"\n role=\"combobox\"\n [attr.aria-labelledby]=\"label() ? _labelId : null\"\n [attr.aria-expanded]=\"_isOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"!_disabled() && _togglePanel()\"\n (keydown)=\"_onTriggerKeydown($event)\">\n\n <!-- Multi mode: tag chips -->\n @if (multiple()) {\n <div [class]=\"_tagContainerClass()\">\n @for (opt of _selectedOptions(); track opt.value) {\n <span\n clx-tag\n variant=\"soft\"\n [color]=\"activeColor()\"\n [size]=\"_sizeConfig().tagSize\"\n (onRemove)=\"_deselect(opt.value)\">\n {{ opt.label }}\n </span>\n }\n @if (!_selectedOptions().length) {\n <span [class]=\"_placeholderClass()\">{{ placeholder() }}</span>\n }\n </div>\n\n <!-- Single mode: display value -->\n } @else {\n <span [class]=\"_singleDisplayClass()\">{{ _displayValue() }}</span>\n }\n\n <!-- Right controls: clear + chevron -->\n <div class=\"absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-0.5\">\n @if (_hasValue() && !_disabled() && multiple()) {\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"activeColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"close\"\n [iconOnly]=\"true\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation(); _clearAll()\">\n </button>\n }\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"activeColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"keyboard_arrow_down\"\n [iconOnly]=\"true\"\n [class]=\"_chevronBtnClass()\"\n (mousedown)=\"$event.preventDefault()\">\n </button>\n </div>\n </div>\n\n <!-- ── Overlay panel ───────────────────────────────────────────────────── -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayWidth]=\"_overlayWidth()\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_closePanel()\"\n (overlayKeydown)=\"_onOverlayKeydown($event)\">\n\n <div [class]=\"_panelClass()\" role=\"listbox\">\n\n <!-- Search / Autocomplete input -->\n @if (searchable() || async()) {\n <div class=\"p-2 border-b border-slate-100\" (click)=\"$event.stopPropagation()\">\n <clx-input\n [formControl]=\"_searchControl\"\n [placeholder]=\"async() ? 'Buscar...' : searchPlaceholder()\"\n [color]=\"activeColor()\"\n [suffixIcon]=\"async() && _asyncLoading() ? '' : 'search'\"\n size=\"sm\">\n </clx-input>\n </div>\n }\n\n <!-- Options list -->\n <div class=\"overflow-y-auto max-h-60 p-1 space-y-0.5\">\n @if (async() && _asyncLoading()) {\n <div class=\"flex items-center justify-center py-6 gap-2 text-sm text-slate-400\">\n <clx-spinner size=\"sm\" [color]=\"activeColor()\" />\n Buscando...\n </div>\n } @else if (_showAsyncPlaceholder()) {\n <div class=\"px-3 py-4 text-center text-sm text-gray-400\">\n Escribe {{ minChars() === 1 ? 'al menos 1 carácter' : 'al menos ' + minChars() + ' caracteres' }}\n </div>\n } @else if (_filteredOptions().length === 0) {\n <div class=\"px-3 py-4 text-center text-sm text-gray-400\">Sin resultados</div>\n } @else {\n @for (opt of _filteredOptions(); track opt.value) {\n <button\n type=\"button\"\n [class]=\"_optionClass(opt)\"\n [disabled]=\"opt.disabled ?? false\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_selectOption(opt)\">\n <span class=\"flex-1 text-left truncate\">{{ opt.label }}</span>\n @if (_isSelected(opt.value)) {\n <span clx-icon name=\"check\" size=\"xs\" class=\"shrink-0\"></span>\n }\n </button>\n }\n }\n </div>\n\n </div>\n </ng-template>\n\n <!-- ── Bottom message ─────────────────────────────────────────────────── -->\n @if (_isInvalid()) {\n <p class=\"text-xs text-red-500 flex items-center gap-1\">\n <span clx-icon name=\"error\" size=\"xs\"></span>\n {{ errorMessage() }}\n </p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5 w-full' },\n})\nexport class ClxSelectComponent implements ControlValueAccessor {\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('Selecciona una opción');\n readonly options = input<ClxSelectOption[]>([]);\n readonly multiple = input<boolean>(false);\n readonly searchable = input<boolean>(false);\n readonly searchPlaceholder = input<string>('Buscar...');\n readonly activeColor = input<ClxColorInput>('indigo');\n readonly size = input<ClxSelectSize>('md');\n readonly hint = input<string>('');\n readonly errorMessage = input<string>('Este campo es requerido');\n readonly disabled = input<boolean>(false);\n // ── Async / autocomplete ────────────────────────────────────────────────────\n readonly async = input<boolean>(false);\n readonly loadOptions = input<((query: string) => Observable<ClxSelectOption[]>) | null>(null);\n readonly debounceMs = input<number>(300);\n readonly minChars = input<number>(2);\n\n // ── Unique id for label ↔ combobox association ─────────────────────────────\n private static _seq = 0;\n protected readonly _labelId = `clx-select-label-${++ClxSelectComponent._seq}`;\n\n // ── Internal state ─────────────────────────────────────────────────────────\n protected readonly _isOpen = signal(false);\n protected readonly _overlayWidthPx = signal(0);\n\n // ── Search control (drives clx-input inside the panel) ─────────────────────\n protected readonly _searchControl = new FormControl<string>('');\n protected readonly _searchQuery: Signal<string>;\n\n // ── Async state ─────────────────────────────────────────────────────────────\n protected readonly _asyncOptions = signal<ClxSelectOption[]>([]);\n protected readonly _asyncLoading = signal(false);\n protected readonly _asyncQuery = signal('');\n\n private readonly _wasTouched = signal(false);\n private readonly _selectedVals = signal<(string | number)[]>([]);\n private readonly _cvaDisabled = signal(false);\n\n // ── DI ─────────────────────────────────────────────────────────────────────\n private readonly _ngControl = inject(NgControl, { optional: true, self: true });\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _sso = inject(ScrollStrategyOptions);\n\n readonly _scrollStrategy = this._sso.reposition();\n\n constructor() {\n this._searchQuery = toSignal(\n this._searchControl.valueChanges.pipe(startWith(''), map(v => v ?? '')),\n { initialValue: '' },\n );\n if (this._ngControl) this._ngControl.valueAccessor = this;\n\n // Async autocomplete: debounce + switchMap sobre el search control\n this._searchControl.valueChanges.pipe(\n debounceTime(this.debounceMs()),\n distinctUntilChanged(),\n switchMap(query => {\n const q = query ?? '';\n const loader = this.loadOptions();\n if (!this.async() || !loader || q.length < this.minChars()) {\n this._asyncLoading.set(false);\n this._asyncOptions.set([]);\n return of([]);\n }\n this._asyncLoading.set(true);\n this._asyncQuery.set(q);\n return loader(q).pipe(catchError(() => of([])));\n }),\n ).subscribe(opts => {\n this._asyncOptions.set(opts);\n this._asyncLoading.set(false);\n });\n }\n\n private _onChange: (v: string | number | (string | number)[] | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Overlay positions ──────────────────────────────────────────────────────\n readonly _positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n ];\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n protected readonly _sizeConfig = computed(() => SELECT_SIZE_MAP[this.size()]);\n protected readonly _hasValue = computed(() => this._selectedVals().length > 0);\n\n protected readonly _isInvalid = computed(() =>\n this._wasTouched() && (this._ngControl?.control?.invalid ?? false),\n );\n\n protected readonly _selectedOptions = computed(() => {\n const vals = this._selectedVals();\n return this.options().filter(o => vals.includes(o.value));\n });\n\n protected readonly _filteredOptions = computed(() => {\n if (this.async()) return this._asyncOptions();\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 protected readonly _showAsyncPlaceholder = computed(() =>\n this.async() && !this._asyncLoading() && this._asyncOptions().length === 0 && (this._asyncQuery().length < this.minChars())\n );\n\n protected readonly _displayValue = computed(() => {\n const sel = this._selectedOptions();\n return sel.length ? sel[0].label : this.placeholder();\n });\n\n protected readonly _overlayWidth = computed(() => this._overlayWidthPx());\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeConfig().hint} text-gray-400`,\n );\n\n protected readonly _triggerClass = computed(() => {\n const s = this._sizeConfig();\n const base = 'relative flex items-center rounded-md border transition-all duration-200 outline-none w-full';\n\n if (this._disabled()) {\n return `${base} ${s.minH} border-gray-200 bg-gray-50 cursor-not-allowed opacity-60`;\n }\n if (this._isInvalid()) {\n return `${base} ${s.minH} border-red-400 focus-within:ring-2 focus-within:ring-red-500/20 bg-white cursor-pointer`;\n }\n return `${base} ${s.minH} border-slate-200 ${resolveColor(this.activeColor()).focusWithin} bg-white cursor-pointer`;\n });\n\n protected readonly _singleDisplayClass = computed(() => {\n const s = this._sizeConfig();\n const color = this._hasValue() ? 'text-slate-700' : 'text-gray-400';\n return `flex-1 ${s.px} ${s.text} ${color} truncate`;\n });\n\n protected readonly _tagContainerClass = computed(() => {\n const s = this._sizeConfig();\n return `flex flex-wrap flex-1 items-center ${s.py} pl-3 pr-10 ${s.gap}`;\n });\n\n protected readonly _placeholderClass = computed(() =>\n `${this._sizeConfig().text} text-gray-400`,\n );\n\n protected readonly _chevronBtnClass = computed(() =>\n this._isOpen() ? 'transition-transform duration-200 rotate-180' : 'transition-transform duration-200',\n );\n\n protected readonly _panelClass = computed(() =>\n 'w-full bg-white rounded-xl shadow-xl border border-slate-200 overflow-hidden',\n );\n\n\n // ── Helpers ────────────────────────────────────────────────────────────────\n protected _isSelected(value: string | number): boolean {\n return this._selectedVals().includes(value);\n }\n\n protected _optionClass(opt: ClxSelectOption): string {\n const base = 'w-full flex items-center gap-2 px-3 py-1.5 text-sm rounded-lg transition-colors';\n if (opt.disabled) {\n return `${base} text-gray-300 cursor-not-allowed`;\n }\n if (this._isSelected(opt.value)) {\n const t = resolveColor(this.activeColor());\n return `${base} ${t.bgSubtle} ${t.textSubtle} font-medium cursor-pointer`;\n }\n return `${base} text-slate-700 ${resolveColor(this.activeColor()).hoverBgMuted} cursor-pointer`;\n }\n\n // ── Panel control ──────────────────────────────────────────────────────────\n protected _togglePanel(): void {\n this._isOpen() ? this._closePanel() : this._openPanel();\n }\n\n private _openPanel(): void {\n this._overlayWidthPx.set(Math.round(this._el.nativeElement.getBoundingClientRect().width));\n if (!this.async()) this._searchControl.setValue('', { emitEvent: false });\n this._isOpen.set(true);\n }\n\n protected _closePanel(): void {\n this._isOpen.set(false);\n this._onTouched();\n this._wasTouched.set(true);\n }\n\n // ── Selection ──────────────────────────────────────────────────────────────\n protected _selectOption(opt: ClxSelectOption): void {\n if (opt.disabled) return;\n const val = opt.value;\n if (this.multiple()) {\n const current = this._selectedVals();\n const next = current.includes(val)\n ? current.filter(v => v !== val)\n : [...current, val];\n this._selectedVals.set(next);\n this._onChange(next);\n } else {\n this._selectedVals.set([val]);\n this._onChange(val);\n this._closePanel();\n }\n }\n\n protected _deselect(value: string | number): void {\n const next = this._selectedVals().filter(v => v !== value);\n this._selectedVals.set(next);\n this._onChange(this.multiple() ? next : (next[0] ?? null));\n }\n\n protected _clearAll(): void {\n this._selectedVals.set([]);\n this._onChange(this.multiple() ? [] : null);\n }\n\n // ── Events ─────────────────────────────────────────────────────────────────\n protected _onTriggerKeydown(event: KeyboardEvent): void {\n if ((event.key === 'Enter' || event.key === ' ') && !this._disabled()) {\n this._togglePanel();\n event.preventDefault();\n }\n }\n\n protected _onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._closePanel();\n }\n\n @HostListener('keydown.escape')\n onEscape(): void {\n if (this._isOpen()) this._closePanel();\n }\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n writeValue(val: string | number | (string | number)[] | null): void {\n if (val === null || val === undefined) {\n this._selectedVals.set([]);\n } else if (Array.isArray(val)) {\n this._selectedVals.set(val);\n } else {\n this._selectedVals.set([val]);\n }\n }\n\n registerOnChange(fn: (v: string | number | (string | number)[] | null) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type {\n ClxFilterField,\n ClxFilterValue,\n ClxFilterValues,\n ClxFilterChangeEvent,\n} from '../../../types/clx-filter-panel.types';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxCheckboxComponent } from '../../forms/clx-checkbox/clx-checkbox.component';\nimport { ClxSliderComponent } from '../../forms/clx-slider/clx-slider.component';\nimport { ClxRadioGroupComponent } from '../../forms/clx-radio/clx-radio-group.component';\nimport { ClxRadioComponent } from '../../forms/clx-radio/clx-radio.component';\nimport { ClxSelectComponent } from '../../forms/clx-select/clx-select.component';\n\n@Component({\n selector: 'clx-filter-panel',\n standalone: true,\n imports: [FormsModule, ClxIconComponent, ClxButtonComponent, ClxCheckboxComponent, ClxSliderComponent, ClxRadioGroupComponent, ClxRadioComponent, ClxSelectComponent],\n template: `\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-slate-100\">\n <div class=\"flex items-center gap-2\">\n <span clx-icon name=\"filter_list\" size=\"sm\" class=\"text-slate-500\"></span>\n <span class=\"text-sm font-semibold text-slate-700\">Filtros</span>\n @if (_activeCount() > 0) {\n <span [class]=\"_badgeCls()\">{{ _activeCount() }}</span>\n }\n </div>\n @if (_activeCount() > 0) {\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"sm\" (click)=\"_reset()\">\n Limpiar\n </button>\n }\n </div>\n\n <!-- Fields -->\n <div class=\"overflow-y-auto flex-1\">\n @for (field of fields(); track field.key) {\n <div class=\"border-b border-slate-100 last:border-0\">\n\n <!-- Field header -->\n <button\n type=\"button\"\n class=\"w-full flex items-center justify-between px-4 py-3 text-sm font-medium text-slate-700 hover:bg-slate-50 transition-colors\"\n (click)=\"_toggleField(field.key)\">\n <span>{{ field.label }}</span>\n <div class=\"flex items-center gap-1.5\">\n @if (_hasValue(field.key)) {\n <span [class]=\"_fieldBadgeCls()\">{{ _valueLabel(field) }}</span>\n }\n <span clx-icon\n [name]=\"_isCollapsed(field.key) ? 'expand_more' : 'expand_less'\"\n size=\"sm\" class=\"text-slate-400\"></span>\n </div>\n </button>\n\n <!-- Field body -->\n @if (!_isCollapsed(field.key)) {\n <div class=\"px-4 pb-3 space-y-2\">\n\n <!-- Checkbox group -->\n @if (field.type === 'checkbox' && field.options) {\n @for (opt of field.options; track opt.value) {\n <label class=\"flex items-center gap-2.5 cursor-pointer group\">\n <clx-checkbox\n [color]=\"color()\"\n [ngModel]=\"_isChecked(field.key, opt.value)\"\n (ngModelChange)=\"_toggleCheck(field.key, opt.value, $event)\">\n </clx-checkbox>\n <span class=\"text-sm text-slate-600 flex-1\">{{ opt.label }}</span>\n @if (opt.count !== undefined) {\n <span class=\"text-xs text-slate-400\">{{ opt.count }}</span>\n }\n </label>\n }\n }\n\n <!-- Radio group -->\n @if (field.type === 'radio' && field.options) {\n <clx-radio-group\n [color]=\"color()\"\n variant=\"solid\"\n size=\"sm\"\n direction=\"vertical\"\n [ngModel]=\"_getValue(field.key)\"\n (ngModelChange)=\"_set(field.key, $event)\">\n @for (opt of field.options; track opt.value) {\n <div class=\"flex items-center gap-2.5\">\n <clx-radio [value]=\"opt.value\" [label]=\"opt.label\" />\n @if (opt.count !== undefined) {\n <span class=\"text-xs text-slate-400 ml-auto\">{{ opt.count }}</span>\n }\n </div>\n }\n </clx-radio-group>\n }\n\n <!-- Range slider — min -->\n @if (field.type === 'range') {\n @let rv = _getRangeValue(field);\n <div class=\"space-y-3\">\n <clx-slider\n [label]=\"'Mín: ' + (field.unit ?? '') + rv.min\"\n [activeColor]=\"color()\"\n [min]=\"field.min ?? 0\" [max]=\"field.max ?? 100\" [step]=\"field.step ?? 1\"\n [ngModel]=\"rv.min\"\n (ngModelChange)=\"_setRange(field.key, $event, rv.max, field)\"\n size=\"sm\" />\n <clx-slider\n [label]=\"'Máx: ' + (field.unit ?? '') + rv.max\"\n [activeColor]=\"color()\"\n [min]=\"field.min ?? 0\" [max]=\"field.max ?? 100\" [step]=\"field.step ?? 1\"\n [ngModel]=\"rv.max\"\n (ngModelChange)=\"_setRange(field.key, rv.min, $event, field)\"\n size=\"sm\" />\n </div>\n }\n\n <!-- Select -->\n @if (field.type === 'select' && field.options) {\n <clx-select\n [options]=\"field.options\"\n [activeColor]=\"color()\"\n size=\"sm\"\n placeholder=\"Todos\"\n [ngModel]=\"_getValue(field.key)\"\n (ngModelChange)=\"_set(field.key, $event || null)\">\n </clx-select>\n }\n\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Apply footer -->\n @if (showApply()) {\n <div class=\"px-4 py-3 border-t border-slate-100 flex gap-2\">\n <button clx-button variant=\"solid\" [color]=\"color()\" size=\"sm\" class=\"flex-1\" (click)=\"_apply()\">\n Aplicar filtros\n </button>\n </div>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col bg-white border border-slate-200 rounded-xl overflow-hidden' },\n})\nexport class ClxFilterPanelComponent {\n readonly fields = input.required<ClxFilterField[]>();\n readonly color = input<ClxColorInput>('indigo');\n readonly showApply = input<boolean>(false);\n\n readonly values = model<ClxFilterValues>({});\n\n readonly filterChange = output<ClxFilterChangeEvent>();\n readonly applyChange = output<ClxFilterValues>();\n\n private readonly _collapsed = signal<Record<string, boolean>>({});\n\n protected readonly _activeCount = computed(() => {\n const vals = this.values();\n return Object.values(vals).filter(v => {\n if (v === null || v === undefined || v === '') return false;\n if (Array.isArray(v)) return v.length > 0;\n return true;\n }).length;\n });\n\n protected _isCollapsed(key: string): boolean {\n const c = this._collapsed();\n return key in c ? c[key] : (this.fields().find(f => f.key === key)?.collapsed ?? false);\n }\n\n protected _toggleField(key: string): void {\n this._collapsed.update(c => ({ ...c, [key]: !this._isCollapsed(key) }));\n }\n\n protected _hasValue(key: string): boolean {\n const v = this.values()[key];\n if (!v && v !== 0) return false;\n if (Array.isArray(v)) return v.length > 0;\n return true;\n }\n\n protected _getValue(key: string): ClxFilterValue {\n return this.values()[key] ?? null;\n }\n\n protected _getRangeValue(field: ClxFilterField): { min: number; max: number } {\n const v = this.values()[field.key] as { min: number; max: number } | undefined;\n return { min: v?.min ?? field.min ?? 0, max: v?.max ?? field.max ?? 100 };\n }\n\n protected _isChecked(key: string, val: string | number): boolean {\n const v = this.values()[key];\n return Array.isArray(v) && v.includes(val);\n }\n\n protected _valueLabel(field: ClxFilterField): string {\n const v = this.values()[field.key];\n if (!v && v !== 0) return '';\n if (Array.isArray(v)) return `${v.length}`;\n if (typeof v === 'object' && 'min' in (v as object)) {\n const r = v as { min: number; max: number };\n return `${field.unit ?? ''}${r.min} – ${field.unit ?? ''}${r.max}`;\n }\n const opt = field.options?.find(o => o.value === v);\n return opt?.label ?? String(v);\n }\n\n protected _toggleCheck(key: string, val: string | number, checked: boolean): void {\n const cur = (this.values()[key] as (string | number)[]) ?? [];\n const next = checked ? [...cur, val] : cur.filter(v => v !== val);\n this._set(key, next);\n }\n\n protected _setRange(key: string, min: number, max: number, field: ClxFilterField): void {\n const safeMin = Math.min(min, max);\n const safeMax = Math.max(min, max);\n this._set(key, { min: safeMin, max: safeMax });\n }\n\n protected _set(key: string, value: ClxFilterValue): void {\n const next = { ...this.values(), [key]: value };\n this.values.set(next);\n this.filterChange.emit({ key, value, all: next });\n }\n\n protected _reset(): void {\n this.values.set({});\n this.filterChange.emit({ key: '', value: null, all: {} });\n }\n\n protected _apply(): void {\n this.applyChange.emit(this.values());\n }\n\n protected _badgeCls(): string {\n const t = resolveColor(this.color());\n return `inline-flex items-center justify-center w-5 h-5 text-xs font-bold rounded-full ${t.bg} ${t.text}`;\n }\n\n protected _fieldBadgeCls(): string {\n const t = resolveColor(this.color());\n return `text-xs px-1.5 py-0.5 rounded-full font-medium ${t.bgSubtle} ${t.textSubtle}`;\n }\n\n}\n","import { InjectionToken } from '@angular/core';\nimport type { ClxAlertOptions, ClxAlertResult, ClxAlertType } from '../types/clx-alert.types';\nimport type { ClxButtonColor } from '../types/clx-button.types';\n\n// ─── CDK overlay token (carries the resolved ref into the component) ──────────\nexport const CLX_ALERT_OPTIONS = new InjectionToken<ClxAlertOptions>('CLX_ALERT_OPTIONS');\nexport const CLX_ALERT_RESOLVE = new InjectionToken<(result: ClxAlertResult) => void>('CLX_ALERT_RESOLVE');\n\n// ─── Icon per alert type ──────────────────────────────────────────────────────\nexport const ALERT_ICON_MAP: Record<ClxAlertType, string> = {\n success: 'check_circle',\n danger: 'cancel',\n warning: 'warning',\n info: 'info',\n confirm: 'help',\n};\n\n// ─── Icon circle background color per alert type ──────────────────────────────\nexport const ALERT_ICON_BG_MAP: Record<ClxAlertType, string> = {\n success: 'bg-green-100',\n danger: 'bg-red-100',\n warning: 'bg-amber-100',\n info: 'bg-sky-100',\n confirm: 'bg-indigo-100',\n};\n\n// ─── Icon foreground color per alert type ─────────────────────────────────────\nexport const ALERT_ICON_COLOR_MAP: Record<ClxAlertType, string> = {\n success: 'text-green-500',\n danger: 'text-red-500',\n warning: 'text-amber-500',\n info: 'text-sky-500',\n confirm: 'text-indigo-500',\n};\n\n// ─── Progress-bar color per alert type ────────────────────────────────────────\nexport const ALERT_PROGRESS_COLOR_MAP: Record<ClxAlertType, string> = {\n success: 'bg-green-400',\n danger: 'bg-red-400',\n warning: 'bg-amber-400',\n info: 'bg-sky-400',\n confirm: 'bg-indigo-400',\n};\n\n// ─── Default confirm-button color per alert type ──────────────────────────────\nexport const ALERT_CONFIRM_COLOR_MAP: Record<ClxAlertType, ClxButtonColor> = {\n success: 'green',\n danger: 'red',\n warning: 'amber',\n info: 'sky',\n confirm: 'indigo',\n};\n\n// ─── Global defaults — merged into every open() call ─────────────────────────\nexport const ALERT_DEFAULTS: Required<\n Pick<ClxAlertOptions, 'animationIn' | 'animationOut' | 'animationDuration' | 'backdrop' | 'disableClose'>\n> = {\n animationIn: 'zoomIn',\n animationOut: 'zoomOut',\n animationDuration: 400,\n backdrop: true,\n disableClose: false,\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n NgZone,\n OnDestroy,\n OnInit,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgStyle } from '@angular/common';\n\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxAnimateService } from '../../../services/clx-animate.service';\n\nimport {\n CLX_ALERT_OPTIONS,\n CLX_ALERT_RESOLVE,\n ALERT_ICON_MAP,\n ALERT_ICON_BG_MAP,\n ALERT_ICON_COLOR_MAP,\n ALERT_PROGRESS_COLOR_MAP,\n ALERT_CONFIRM_COLOR_MAP,\n ALERT_DEFAULTS,\n} from '../../../configs/alert.config';\nimport type { ClxAlertOptions, ClxAlertType } from '../../../types/clx-alert.types';\nimport type { ClxButtonColor, ClxButtonVariant } from '../../../types/clx-button.types';\n\n@Component({\n selector: 'clx-alert',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, NgStyle],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- Dialog card -->\n <div\n #card\n class=\"clx-alert-card relative w-full max-w-sm mx-auto bg-white rounded-3xl shadow-2xl overflow-hidden flex flex-col items-center text-center px-8 pt-8 pb-6 gap-4\"\n >\n <!-- Icon circle -->\n <div class=\"w-20 h-20 rounded-full flex items-center justify-center shrink-0\"\n [class]=\"_iconBg()\">\n <span clx-icon [name]=\"_icon()\" size=\"xl\" [class]=\"_iconColor()\"></span>\n </div>\n\n <!-- Title -->\n @if (_title()) {\n <h2\n class=\"text-lg font-bold text-gray-800 leading-snug\"\n [innerHTML]=\"_title()\">\n </h2>\n }\n\n <!-- Message -->\n @if (_message()) {\n <p\n class=\"text-sm text-gray-500 leading-relaxed\"\n [innerHTML]=\"_message()\">\n </p>\n }\n\n <!-- Buttons -->\n <div class=\"flex items-center justify-center gap-3 w-full mt-1\">\n\n @if (_showCancel()) {\n <button\n clx-button\n [color]=\"_cancelColor()\"\n [variant]=\"_cancelVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"dismiss()\"\n >\n {{ _cancelText() }}\n </button>\n }\n\n <button\n clx-button\n [color]=\"_confirmColor()\"\n variant=\"solid\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"confirm()\"\n >\n {{ _confirmText() }}\n </button>\n\n </div>\n\n <!-- Timer progress bar -->\n @if (_timerTotal() > 0) {\n <div class=\"absolute bottom-0 left-0 right-0 h-1 bg-gray-100 rounded-b-3xl overflow-hidden\">\n <div\n class=\"h-full transition-none rounded-b-3xl\"\n [class]=\"_progressColor()\"\n [ngStyle]=\"{ width: _progressPct() + '%' }\">\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n clx-alert {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n }\n .clx-alert-card {\n will-change: transform, opacity;\n }\n `],\n})\nexport class ClxAlertComponent implements OnInit, OnDestroy {\n private readonly _opts = inject<ClxAlertOptions>(CLX_ALERT_OPTIONS);\n private readonly _resolve = inject<(r: boolean) => void>(CLX_ALERT_RESOLVE);\n private readonly _animate = inject(ClxAnimateService);\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _zone: NgZone;\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n }\n\n // ─── Resolved options ─────────────────────────────────────────────────────\n private get _type(): ClxAlertType { return this._opts.type ?? 'info'; }\n\n protected readonly _icon = signal(ALERT_ICON_MAP[this._type]);\n protected readonly _iconBg = signal(ALERT_ICON_BG_MAP[this._type]);\n protected readonly _iconColor = signal(ALERT_ICON_COLOR_MAP[this._type]);\n protected readonly _progressColor = signal(ALERT_PROGRESS_COLOR_MAP[this._type]);\n\n protected readonly _title = signal(this._opts.title ?? '');\n protected readonly _message = signal(this._opts.message ?? '');\n\n protected readonly _showCancel = signal(\n this._opts.showCancelButton ?? this._opts.type === 'confirm',\n );\n\n protected readonly _confirmText = signal(this._opts.confirmButton?.text ?? 'Aceptar');\n protected readonly _confirmColor = signal<ClxButtonColor>(\n this._opts.confirmButton?.color ?? ALERT_CONFIRM_COLOR_MAP[this._type],\n );\n\n protected readonly _cancelText = signal(this._opts.cancelButton?.text ?? 'Cancelar');\n protected readonly _cancelColor = signal<ClxButtonColor>(this._opts.cancelButton?.color ?? 'slate');\n protected readonly _cancelVariant = signal<ClxButtonVariant>(this._opts.cancelButton?.variant ?? 'ghost');\n\n // ─── Timer state ─────────────────────────────────────────────────────────\n protected readonly _timerTotal = signal(this._opts.timer ?? 0);\n protected readonly _progressPct = signal(100);\n private _timerHandle: ReturnType<typeof setInterval> | null = null;\n private _destroyed = false;\n\n // ─── Card element reference ───────────────────────────────────────────────\n private get _card(): HTMLElement {\n return this._el.nativeElement.querySelector('.clx-alert-card') as HTMLElement;\n }\n\n // ─── Lifecycle ────────────────────────────────────────────────────────────\n ngOnInit(): void {\n const card = this._card;\n const animIn = this._opts.animationIn ?? ALERT_DEFAULTS.animationIn;\n const duration = this._opts.animationDuration ?? ALERT_DEFAULTS.animationDuration;\n\n this._animate.animate(card, { animation: animIn, duration, trigger: 'manual' });\n\n if (this._timerTotal() > 0) {\n this._startTimer();\n }\n }\n\n ngOnDestroy(): void {\n this._destroyed = true;\n this._stopTimer();\n }\n\n // ─── Public actions ───────────────────────────────────────────────────────\n confirm(): void { this._close(true); }\n dismiss(): void { this._close(false); }\n\n // ─── Internal ─────────────────────────────────────────────────────────────\n private _close(result: boolean): void {\n if (this._destroyed) return;\n this._stopTimer();\n\n const card = this._card;\n const animOut = this._opts.animationOut ?? ALERT_DEFAULTS.animationOut;\n const duration = this._opts.animationDuration ?? ALERT_DEFAULTS.animationDuration;\n\n this._animate\n .animate(card, { animation: animOut, duration, trigger: 'manual', fillMode: 'forwards' })\n .then(() => this._resolve(result));\n }\n\n private _startTimer(): void {\n const total = this._timerTotal();\n const tickMs = 50;\n let elapsed = 0;\n\n this._zone.runOutsideAngular(() => {\n this._timerHandle = setInterval(() => {\n if (this._destroyed) { this._stopTimer(); return; }\n elapsed += tickMs;\n const pct = Math.max(0, 100 - (elapsed / total) * 100);\n this._zone.run(() => this._progressPct.set(pct));\n if (elapsed >= total) {\n this._stopTimer();\n this._zone.run(() => this._close(false));\n }\n }, tickMs);\n });\n }\n\n private _stopTimer(): void {\n if (this._timerHandle !== null) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { ClxModalSize, ClxModalRef } from '../types/clx-modal.types';\n\nexport const MODAL_SIZE_MAP: Record<ClxModalSize, string> = {\n sm: 'w-full max-w-[400px]',\n md: 'w-full max-w-[600px]',\n lg: 'w-full max-w-[900px]',\n full: 'w-screen h-screen max-w-none rounded-none',\n};\n\nexport const MODAL_CONTAINER_CLASS =\n 'flex flex-col bg-white rounded-2xl shadow-2xl overflow-hidden';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const CLX_MODAL_DATA = new InjectionToken<any>('CLX_MODAL_DATA');\n\nexport const CLX_MODAL_SIZE = new InjectionToken<ClxModalSize>('CLX_MODAL_SIZE');\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const CLX_MODAL_REF = new InjectionToken<ClxModalRef<any>>('CLX_MODAL_REF');\n\n// ─── Animation config token (carries animationIn/Out/Duration into the wrapper) ─\nexport interface ClxModalAnimConfig {\n animationIn: string;\n animationOut: string;\n animationDuration: number;\n}\n\nexport const CLX_MODAL_ANIM_CONFIG = new InjectionToken<ClxModalAnimConfig>('CLX_MODAL_ANIM_CONFIG');\n\nexport const MODAL_ANIM_DEFAULTS: ClxModalAnimConfig = {\n animationIn: 'fadeInDown',\n animationOut: 'fadeOutUp',\n animationDuration: 300,\n};\n","import { InjectionToken } from '@angular/core';\nimport type { ClxDrawerSize } from '../types/clx-drawer.types';\n\nexport const DRAWER_SIZE_MAP: Record<ClxDrawerSize, string> = {\n sm: 'w-full max-w-[320px]',\n md: 'w-full max-w-[420px]',\n lg: 'w-full max-w-[560px]',\n};\n\nexport const DRAWER_WIDTH_MAP: Record<ClxDrawerSize, string> = {\n sm: '320px',\n md: '420px',\n lg: '560px',\n};\n\nexport const DRAWER_CONTAINER_CLASS =\n 'flex flex-col bg-white shadow-2xl overflow-hidden h-full';\n\nexport const CLX_DRAWER_SIZE = new InjectionToken<ClxDrawerSize>('CLX_DRAWER_SIZE');\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { CLX_MODAL_REF } from '../../../configs/modal.config';\nimport { DRAWER_CONTAINER_CLASS, DRAWER_SIZE_MAP, CLX_DRAWER_SIZE } from '../../../configs/drawer.config';\nimport type { ClxDrawerButtonOptions, ClxDrawerSize } from '../../../types/clx-drawer.types';\n\n@Component({\n selector: 'clx-drawer',\n standalone: true,\n imports: [ClxButtonComponent],\n template: `\n <!-- Header -->\n <div class=\"flex items-center gap-3 px-6 py-4 border-b border-slate-100 shrink-0\">\n <div class=\"flex-1 min-w-0\">\n <ng-content select=\"[clx-drawer-title]\" />\n </div>\n @if (showClose()) {\n <button\n clx-button\n variant=\"ghost\"\n color=\"zinc\"\n shape=\"circle\"\n size=\"sm\"\n icon=\"close\"\n [iconOnly]=\"true\"\n class=\"shrink-0 -mr-1\"\n (click)=\"_close()\">\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto px-6 py-5\">\n <ng-content />\n </div>\n\n <!-- Footer -->\n <div class=\"flex items-center justify-end gap-3 px-6 py-4 border-t border-slate-100 shrink-0 bg-slate-50/60\">\n @if (_hasBuiltInButtons()) {\n @if (showCancelButton()) {\n <button\n clx-button\n [color]=\"_cancelColor()\"\n [variant]=\"_cancelVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"cancelClick.emit()\">\n {{ _cancelText() }}\n </button>\n }\n <button\n clx-button\n [color]=\"_confirmColor()\"\n [variant]=\"_confirmVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"confirmClick.emit()\">\n {{ _confirmText() }}\n </button>\n } @else {\n <ng-content select=\"[clx-drawer-footer]\" />\n }\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n})\nexport class ClxDrawerComponent {\n readonly size = input<ClxDrawerSize | null>(null);\n readonly showClose = input<boolean>(true);\n readonly confirmButton = input<ClxDrawerButtonOptions | undefined>(undefined);\n readonly cancelButton = input<ClxDrawerButtonOptions | undefined>(undefined);\n readonly showCancelButton = input<boolean>(false);\n\n readonly confirmClick = output<void>();\n readonly cancelClick = output<void>();\n\n private readonly _modalRef = inject(CLX_MODAL_REF, { optional: true });\n private readonly _sizeToken = inject(CLX_DRAWER_SIZE, { optional: true });\n\n protected readonly _resolvedSize = computed(() =>\n this.size() ?? this._sizeToken ?? 'md'\n );\n\n protected readonly _hostClass = computed(() =>\n `${DRAWER_CONTAINER_CLASS} ${DRAWER_SIZE_MAP[this._resolvedSize()]}`,\n );\n\n protected readonly _hasBuiltInButtons = computed(() => !!this.confirmButton());\n\n protected readonly _confirmText = computed(() => this.confirmButton()?.text ?? 'Aceptar');\n protected readonly _confirmColor = computed(() => this.confirmButton()?.color ?? 'indigo');\n protected readonly _confirmVariant = computed(() => this.confirmButton()?.variant ?? 'solid');\n\n protected readonly _cancelText = computed(() => this.cancelButton()?.text ?? 'Cancelar');\n protected readonly _cancelColor = computed(() => this.cancelButton()?.color ?? 'slate');\n protected readonly _cancelVariant = computed(() => this.cancelButton()?.variant ?? 'ghost');\n\n protected _close(): void {\n this._modalRef?.close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { CLX_MODAL_REF, CLX_MODAL_SIZE, MODAL_CONTAINER_CLASS, MODAL_SIZE_MAP } from '../../../configs/modal.config';\nimport type { ClxModalButtonOptions, ClxModalSize } from '../../../types/clx-modal.types';\n\n@Component({\n selector: 'clx-modal',\n standalone: true,\n imports: [ClxButtonComponent],\n template: `\n <!-- Header -->\n <div class=\"flex items-center gap-3 px-6 py-4 border-b border-slate-100 shrink-0\">\n <div class=\"flex-1 min-w-0\">\n <ng-content select=\"[clx-modal-title]\" />\n </div>\n @if (showClose()) {\n <button\n clx-button\n variant=\"ghost\"\n color=\"zinc\"\n shape=\"circle\"\n size=\"md\"\n icon=\"close\"\n [iconOnly]=\"true\"\n class=\"shrink-0 -mr-1\"\n (click)=\"_close()\">\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto px-6 py-5\">\n <ng-content />\n </div>\n\n <!-- Footer -->\n <div class=\"flex items-center justify-end gap-3 px-6 py-4 border-t border-slate-100 shrink-0 bg-slate-50/60\">\n @if (_hasBuiltInButtons()) {\n @if (showCancelButton()) {\n <button\n clx-button\n [color]=\"_cancelColor()\"\n [variant]=\"_cancelVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"cancelClick.emit()\">\n {{ _cancelText() }}\n </button>\n }\n <button\n clx-button\n [color]=\"_confirmColor()\"\n [variant]=\"_confirmVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"confirmClick.emit()\">\n {{ _confirmText() }}\n </button>\n } @else {\n <ng-content select=\"[clx-modal-footer]\" />\n }\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n})\nexport class ClxModalComponent {\n readonly size = input<ClxModalSize | null>(null);\n readonly showClose = input<boolean>(true);\n readonly confirmButton = input<ClxModalButtonOptions | undefined>(undefined);\n readonly cancelButton = input<ClxModalButtonOptions | undefined>(undefined);\n readonly showCancelButton = input<boolean>(false);\n\n readonly confirmClick = output<void>();\n readonly cancelClick = output<void>();\n\n private readonly _modalRef = inject(CLX_MODAL_REF, { optional: true });\n private readonly _sizeToken = inject(CLX_MODAL_SIZE, { optional: true });\n\n protected readonly _resolvedSize = computed(() =>\n this.size() ?? this._sizeToken ?? 'md'\n );\n\n protected readonly _hostClass = computed(() =>\n `${MODAL_CONTAINER_CLASS} ${MODAL_SIZE_MAP[this._resolvedSize()]} max-h-[90vh]`,\n );\n\n protected readonly _hasBuiltInButtons = computed(() => !!this.confirmButton());\n\n protected readonly _confirmText = computed(() => this.confirmButton()?.text ?? 'Aceptar');\n protected readonly _confirmColor = computed(() => this.confirmButton()?.color ?? 'indigo');\n protected readonly _confirmVariant = computed(() => this.confirmButton()?.variant ?? 'solid');\n\n protected readonly _cancelText = computed(() => this.cancelButton()?.text ?? 'Cancelar');\n protected readonly _cancelColor = computed(() => this.cancelButton()?.color ?? 'slate');\n protected readonly _cancelVariant = computed(() => this.cancelButton()?.variant ?? 'ghost');\n\n protected _close(): void {\n this._modalRef?.close();\n }\n}\n","import type { ClxColor } from '../types/clx-color.types';\nimport type { ClxPaginationSize } from '../types/clx-pagination.types';\n\n// ── Size map ──────────────────────────────────────────────────────────────────\nexport const PAGINATION_SIZE_MAP: Record<ClxPaginationSize, {\n btnSize: 'xs' | 'sm' | 'md' | 'lg';\n selectSize: 'sm' | 'md' | 'lg';\n text: string;\n gap: string;\n}> = {\n sm: { btnSize: 'sm', selectSize: 'sm', text: 'text-xs', gap: 'gap-2' },\n md: { btnSize: 'md', selectSize: 'sm', text: 'text-sm', gap: 'gap-3' },\n lg: { btnSize: 'lg', selectSize: 'md', text: 'text-sm', gap: 'gap-4' },\n};\n\n// ── Ellipsis color ─────────────────────────────────────────────────────────────\nexport const PAGINATION_ELLIPSIS_CLASS: Record<ClxColor, string> = {\n red: 'text-slate-400',\n orange: 'text-slate-400',\n amber: 'text-slate-400',\n yellow: 'text-slate-400',\n lime: 'text-slate-400',\n green: 'text-slate-400',\n emerald: 'text-slate-400',\n teal: 'text-slate-400',\n cyan: 'text-slate-400',\n sky: 'text-slate-400',\n blue: 'text-slate-400',\n indigo: 'text-slate-400',\n violet: 'text-slate-400',\n purple: 'text-slate-400',\n fuchsia: 'text-slate-400',\n pink: 'text-slate-400',\n rose: 'text-slate-400',\n slate: 'text-slate-400',\n gray: 'text-slate-400',\n zinc: 'text-slate-400',\n neutral: 'text-slate-400',\n stone: 'text-slate-400',\n white: 'text-slate-400',\n};\n\n// ── Default page size options ─────────────────────────────────────────────────\nexport const PAGINATION_DEFAULT_PAGE_SIZE_OPTIONS = [5, 10, 25, 50, 100];\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxPageChangeEvent, ClxPageSizeChangeEvent, ClxPaginationSize } from '../../../types/clx-pagination.types';\nimport { PAGINATION_SIZE_MAP, PAGINATION_DEFAULT_PAGE_SIZE_OPTIONS } from '../../../configs/pagination.config';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxSelectComponent } from '../../forms/clx-select/clx-select.component';\nimport type { ClxSelectOption } from '../../../types/clx-select.types';\n\n\ntype PageItem =\n | { type: 'page'; page: number }\n | { type: 'ellipsis'; id: string };\n\n@Component({\n selector: 'clx-pagination',\n standalone: true,\n imports: [ReactiveFormsModule, ClxButtonComponent, ClxSelectComponent],\n template: `\n <div [class]=\"_wrapClass()\">\n\n <!-- ── Info: \"1 - 5 de 25 registros\" ─────────────────────────────────── -->\n <span [class]=\"_infoClass()\">{{ _infoText() }}</span>\n\n <!-- ── Controles centrales ────────────────────────────────────────────── -->\n <div class=\"flex items-center gap-1\">\n\n <!-- |<< Primera página -->\n <button\n clx-button\n variant=\"ghost\"\n color=\"slate\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n icon=\"first_page\"\n [iconOnly]=\"true\"\n [disabled]=\"currentPage() <= 1\"\n (click)=\"_goTo(1)\">\n </button>\n\n <!-- < Anterior -->\n <button\n clx-button\n variant=\"ghost\"\n color=\"slate\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n icon=\"chevron_left\"\n [iconOnly]=\"true\"\n [disabled]=\"currentPage() <= 1\"\n (click)=\"_goTo(currentPage() - 1)\">\n </button>\n\n <!-- Botones de página con lógica de puntos suspensivos -->\n @for (item of _pageItems(); track item.type === 'page' ? item.page : item.id) {\n @if (item.type === 'page') {\n <button\n clx-button\n [variant]=\"currentPage() === item.page ? 'solid' : 'ghost'\"\n [color]=\"currentPage() === item.page ? color() : 'slate'\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n [iconOnly]=\"true\"\n (click)=\"_goTo(item.page)\">\n {{ item.page }}\n </button>\n } @else {\n <!-- Ellipsis: misma altura/ancho que botón, no interactivo -->\n <span [class]=\"_ellipsisClass()\">…</span>\n }\n }\n\n <!-- > Siguiente -->\n <button\n clx-button\n variant=\"ghost\"\n color=\"slate\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n icon=\"chevron_right\"\n [iconOnly]=\"true\"\n [disabled]=\"currentPage() >= totalPages()\"\n (click)=\"_goTo(currentPage() + 1)\">\n </button>\n\n <!-- >>| Última página -->\n <button\n clx-button\n variant=\"ghost\"\n color=\"slate\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n icon=\"last_page\"\n [iconOnly]=\"true\"\n [disabled]=\"currentPage() >= totalPages()\"\n (click)=\"_goTo(totalPages())\">\n </button>\n\n </div>\n\n <!-- ── Selector de \"items por página\" ────────────────────────────────── -->\n @if (showPageSize()) {\n <div class=\"flex items-center gap-2\">\n <span [class]=\"_infoClass()\">items por página</span>\n <div class=\"w-24\">\n <clx-select\n [options]=\"_pageSizeOptions()\"\n [activeColor]=\"color()\"\n [size]=\"_cfg().selectSize\"\n [formControl]=\"_pageSizeCtrl\">\n </clx-select>\n </div>\n </div>\n }\n\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxPaginationComponent {\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly totalItems = input.required<number>();\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxPaginationSize>('md');\n readonly showPageSize = input<boolean>(true);\n /** Opciones manuales. Si está vacío (default) se calculan automáticamente desde totalItems. */\n readonly pageSizeOptions = input<number[]>([]);\n\n // ── Models ─────────────────────────────────────────────────────────────────\n readonly currentPage = model<number>(1);\n readonly pageSize = model<number>(10);\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n readonly pageChange = output<ClxPageChangeEvent>();\n readonly sizeChange = output<ClxPageSizeChangeEvent>();\n\n private readonly _destroyRef = inject(DestroyRef);\n\n // ── FormControl interno para el select de pageSize ─────────────────────────\n protected readonly _pageSizeCtrl = new FormControl<number | null>(null);\n\n constructor() {\n // Sincroniza el pageSize model → FormControl cada vez que cambia desde afuera\n effect(() => {\n const ps = this.pageSize();\n if (ps != null && ps !== this._pageSizeCtrl.value) {\n this._pageSizeCtrl.setValue(ps, { emitEvent: false });\n }\n });\n\n // Sincroniza el FormControl → pageSize model cuando el usuario elige\n this._pageSizeCtrl.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(val => {\n const newSize = Number(val);\n if (!val || !Number.isFinite(newSize) || newSize <= 0 || newSize === this.pageSize()) return;\n this.pageSize.set(newSize);\n this.currentPage.set(1);\n this.sizeChange.emit({ pageSize: newSize });\n this.pageChange.emit({ page: 1, pageSize: newSize });\n });\n }\n\n // ── Computed: config por tamaño ────────────────────────────────────────────\n protected readonly _cfg = computed(() => PAGINATION_SIZE_MAP[this.size()]);\n\n // ── Computed: total de páginas ─────────────────────────────────────────────\n readonly totalPages = computed(() => {\n const ps = this.pageSize();\n if (!ps || !Number.isFinite(ps) || ps <= 0) return 1;\n return Math.max(1, Math.ceil(this.totalItems() / ps));\n });\n\n // ── Computed: rango visible ────────────────────────────────────────────────\n private readonly _rangeStart = computed(() => {\n const ps = this.pageSize();\n if (!ps || !Number.isFinite(ps) || ps <= 0) return 1;\n return (this.currentPage() - 1) * ps + 1;\n });\n\n private readonly _rangeEnd = computed(() => {\n const ps = this.pageSize();\n if (!ps || !Number.isFinite(ps) || ps <= 0) return this.totalItems();\n return Math.min(this.currentPage() * ps, this.totalItems());\n });\n\n protected readonly _infoText = computed(() =>\n `${this._rangeStart()} - ${this._rangeEnd()} de ${this.totalItems()} registros`\n );\n\n // ── Computed: opciones del selector de pageSize ────────────────────────────\n protected readonly _pageSizeOptions = computed((): ClxSelectOption[] => {\n const custom = this.pageSizeOptions();\n if (custom.length > 0) {\n return custom.map(n => ({ value: n, label: String(n) }));\n }\n\n const total = this.totalItems();\n const options = new Set<number>();\n const steps = [5, 10, 15, 20, 25, 30, 40, 50, 75, 100, 150, 200, 250, 500, 1000];\n for (const s of steps) {\n if (s < total) options.add(s);\n }\n options.add(total);\n options.add(this.pageSize());\n\n return Array.from(options).sort((a, b) => a - b).map(n => ({ value: n, label: String(n) }));\n });\n\n // ── Computed: lógica de puntos suspensivos ─────────────────────────────────\n protected readonly _pageItems = computed((): PageItem[] => {\n const total = this.totalPages();\n const current = this.currentPage();\n\n if (total <= 3) {\n return Array.from({ length: total }, (_, i) => ({ type: 'page', page: i + 1 }) as PageItem);\n }\n\n // Siempre mostramos: primera, [ellipsis], página central, [ellipsis], última\n // La página central es siempre `current`, salvo en los extremos donde es 1 o total.\n const items: PageItem[] = [];\n\n // Primera\n items.push({ type: 'page', page: 1 });\n\n if (current <= 2) {\n // Cerca del inicio: 1, 2, ..., N\n items.push({ type: 'page', page: 2 });\n items.push({ type: 'ellipsis', id: 'right' });\n } else if (current >= total - 1) {\n // Cerca del final: 1, ..., N-1, N\n items.push({ type: 'ellipsis', id: 'left' });\n items.push({ type: 'page', page: total - 1 });\n } else {\n // En el medio: 1, ..., current, ..., N\n items.push({ type: 'ellipsis', id: 'left' });\n items.push({ type: 'page', page: current });\n items.push({ type: 'ellipsis', id: 'right' });\n }\n\n // Última\n items.push({ type: 'page', page: total });\n\n return items;\n });\n\n // ── Clases ─────────────────────────────────────────────────────────────────\n protected readonly _wrapClass = computed(() =>\n `flex flex-wrap items-center justify-between ${this._cfg().gap}`\n );\n\n protected readonly _infoClass = computed(() =>\n `${this._cfg().text} text-slate-500 whitespace-nowrap`\n );\n\n protected readonly _ellipsisClass = computed(() => {\n const sizes: Record<ClxPaginationSize, string> = {\n sm: 'inline-flex items-center justify-center w-8 h-8 text-xs text-slate-400 select-none',\n md: 'inline-flex items-center justify-center w-9 h-9 text-sm text-slate-400 select-none',\n lg: 'inline-flex items-center justify-center w-10 h-10 text-sm text-slate-400 select-none',\n };\n return sizes[this.size()];\n });\n\n // ── Handlers ───────────────────────────────────────────────────────────────\n protected _goTo(page: number): void {\n const clamped = Math.max(1, Math.min(page, this.totalPages()));\n if (clamped === this.currentPage()) return;\n this.currentPage.set(clamped);\n this.pageChange.emit({ page: clamped, pageSize: this.pageSize() });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { CLX_COLOR_MAP } from '../types/clx-color.types';\nimport type { ClxColor } from '../types/clx-color.types';\nimport type { ClxToastOptions, ClxToastPosition, ClxToastType } from '../types/clx-toast.types';\nimport type { ClxAnimateName } from '../types/clx-animate.types';\n\n// ─── Injection tokens ──────────────────────────────────────────────────────────\nexport const CLX_TOAST_DEFAULTS = new InjectionToken<Partial<ClxToastOptions>>(\n 'CLX_TOAST_DEFAULTS',\n {\n providedIn: 'root',\n factory: () => TOAST_DEFAULTS,\n },\n);\n\n// ─── Global defaults ───────────────────────────────────────────────────────────\nexport const TOAST_DEFAULTS: Required<\n Pick<\n ClxToastOptions,\n | 'type'\n | 'position'\n | 'duration'\n | 'showProgress'\n | 'pauseOnHover'\n | 'animationOut'\n | 'animationDuration'\n >\n> = {\n type: 'indigo',\n position: 'top-right',\n duration: 4000,\n showProgress: true,\n pauseOnHover: true,\n animationOut: 'fadeOut',\n animationDuration: 300,\n};\n\n// ─── Default entry animation per position ─────────────────────────────────────\nexport const TOAST_ANIM_IN_MAP: Record<ClxToastPosition, ClxAnimateName> = {\n 'top-right': 'fadeInRight',\n 'top-left': 'fadeInLeft',\n 'top-center': 'fadeInDown',\n 'bottom-right': 'fadeInRight',\n 'bottom-left': 'fadeInLeft',\n};\n\n// ─── Default icon per color (semantic fallback) ───────────────────────────────\nexport const TOAST_DEFAULT_ICON: Record<ClxColor, string> = {\n red: 'cancel',\n orange: 'warning',\n amber: 'warning',\n yellow: 'warning',\n lime: 'check_circle',\n green: 'check_circle',\n emerald: 'check_circle',\n teal: 'info',\n cyan: 'info',\n sky: 'info',\n blue: 'info',\n indigo: 'info',\n violet: 'info',\n purple: 'info',\n fuchsia: 'info',\n pink: 'info',\n rose: 'cancel',\n slate: 'info',\n gray: 'info',\n zinc: 'info',\n neutral: 'info',\n stone: 'info',\n white: 'info',\n};\n\nconst c = CLX_COLOR_MAP;\n\n// ─── Border color per type ─────────────────────────────────────────────────────\nexport const TOAST_BORDER_MAP: Record<ClxToastType, string> = {\n red: c.red.borderBase,\n orange: c.orange.borderBase,\n amber: c.amber.borderBase,\n yellow: c.yellow.borderBase,\n lime: c.lime.borderBase,\n green: c.green.borderBase,\n emerald: c.emerald.borderBase,\n teal: c.teal.borderBase,\n cyan: c.cyan.borderBase,\n sky: c.sky.borderBase,\n blue: c.blue.borderBase,\n indigo: c.indigo.borderBase,\n violet: c.violet.borderBase,\n purple: c.purple.borderBase,\n fuchsia: c.fuchsia.borderBase,\n pink: c.pink.borderBase,\n rose: c.rose.borderBase,\n slate: c.slate.borderBase,\n gray: c.gray.borderBase,\n zinc: c.zinc.borderBase,\n neutral: c.neutral.borderBase,\n stone: c.stone.borderBase,\n white: c.white.borderBase,\n};\n\n// ─── Icon / title text color per type ─────────────────────────────────────────\nexport const TOAST_COLOR_MAP: Record<ClxToastType, string> = {\n red: c.red.textBase,\n orange: c.orange.textBase,\n amber: c.amber.textBase,\n yellow: c.yellow.textBase,\n lime: c.lime.textBase,\n green: c.green.textBase,\n emerald: c.emerald.textBase,\n teal: c.teal.textBase,\n cyan: c.cyan.textBase,\n sky: c.sky.textBase,\n blue: c.blue.textBase,\n indigo: c.indigo.textBase,\n violet: c.violet.textBase,\n purple: c.purple.textBase,\n fuchsia: c.fuchsia.textBase,\n pink: c.pink.textBase,\n rose: c.rose.textBase,\n slate: c.slate.textBase,\n gray: c.gray.textBase,\n zinc: c.zinc.textBase,\n neutral: c.neutral.textBase,\n stone: c.stone.textBase,\n white: c.white.textBase,\n};\n\n// ─── Progress bar color per type ──────────────────────────────────────────────\nexport const TOAST_PROGRESS_MAP: Record<ClxToastType, string> = {\n red: c.red.bgBase,\n orange: c.orange.bgBase,\n amber: c.amber.bgBase,\n yellow: c.yellow.bgBase,\n lime: c.lime.bgBase,\n green: c.green.bgBase,\n emerald: c.emerald.bgBase,\n teal: c.teal.bgBase,\n cyan: c.cyan.bgBase,\n sky: c.sky.bgBase,\n blue: c.blue.bgBase,\n indigo: c.indigo.bgBase,\n violet: c.violet.bgBase,\n purple: c.purple.bgBase,\n fuchsia: c.fuchsia.bgBase,\n pink: c.pink.bgBase,\n rose: c.rose.bgBase,\n slate: c.slate.bgBase,\n gray: c.gray.bgBase,\n zinc: c.zinc.bgBase,\n neutral: c.neutral.bgBase,\n stone: c.stone.bgBase,\n white: c.white.bgBase,\n};\n\n// ─── Overlay container position classes ───────────────────────────────────────\nexport const TOAST_POSITION_MAP: Record<ClxToastPosition, string> = {\n 'top-right': 'top-4 right-4 items-end',\n 'top-left': 'top-4 left-4 items-start',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-4 right-4 items-end',\n 'bottom-left': 'bottom-4 left-4 items-start',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n OnInit,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgStyle } from '@angular/common';\n\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxAnimateService } from '../../../services/clx-animate.service';\n\nimport {\n TOAST_DEFAULT_ICON,\n TOAST_BORDER_MAP,\n TOAST_COLOR_MAP,\n TOAST_PROGRESS_MAP,\n} from '../../../configs/toast.config';\n\nimport type { ClxToastEntry } from '../../../types/clx-toast.types';\nimport type { ClxButtonColor } from '../../../types/clx-button.types';\n\n@Component({\n selector: 'clx-toast',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, NgStyle],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- Toast card -->\n <div\n #card\n class=\"clx-toast-card relative flex items-start gap-3 w-full bg-white backdrop-blur-md shadow-lg rounded-lg border-2 px-4 py-3.5 overflow-hidden\"\n [class]=\"_borderClass()\"\n (mouseenter)=\"_onMouseEnter()\"\n (mouseleave)=\"_onMouseLeave()\"\n >\n <!-- Icon -->\n <span\n clx-icon\n [name]=\"_icon()\"\n size=\"sm\"\n class=\"shrink-0 mt-0.5\"\n [class]=\"_colorClass()\"\n ></span>\n\n <!-- Content -->\n <div class=\"flex-1 min-w-0\">\n @if (entry().title) {\n <p class=\"text-sm font-semibold leading-snug mb-0.5\" [class]=\"_colorClass()\">\n {{ entry().title }}\n </p>\n }\n <p class=\"text-sm text-slate-600 leading-snug wrap-break-word\">\n {{ entry().message }}\n </p>\n @if (entry().action) {\n <button\n clx-button\n variant=\"link\"\n [color]=\"_buttonColor()\"\n size=\"xs\"\n class=\"mt-1 -ml-1 h-auto p-0\"\n (click)=\"_onAction()\"\n >\n {{ entry().action!.label }}\n </button>\n }\n </div>\n\n <!-- Close button -->\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"_buttonColor()\"\n size=\"xxs\"\n shape=\"circle\"\n [iconOnly]=\"true\"\n icon=\"close\"\n (click)=\"dismiss.emit(entry().id)\"\n ></button>\n\n <!-- Progress bar -->\n @if (entry().showProgress && entry().duration > 0) {\n <div class=\"absolute bottom-0 left-0 right-0 h-0.5 bg-slate-100\">\n <div\n class=\"h-full transition-none\"\n [class]=\"_progressColor()\"\n [ngStyle]=\"{ width: _progressPct() + '%' }\"\n ></div>\n </div>\n }\n </div>\n `,\n styles: [`\n clx-toast {\n display: block;\n width: 100%;\n }\n .clx-toast-card {\n will-change: transform, opacity;\n }\n `],\n})\nexport class ClxToastComponent implements OnInit, OnDestroy {\n readonly entry = input.required<ClxToastEntry>();\n readonly dismiss = output<string>();\n\n private readonly _animate = inject(ClxAnimateService);\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _zone: NgZone;\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n }\n\n // ─── Timer state ──────────────────────────────────────────────────────────\n protected readonly _progressPct = signal(100);\n private _timerHandle: ReturnType<typeof setInterval> | null = null;\n private _paused = false;\n private _elapsed = 0;\n private _destroyed = false;\n\n // ─── Derived visuals ──────────────────────────────────────────────────────\n protected readonly _icon = computed(() => this.entry().icon ?? TOAST_DEFAULT_ICON[this.entry().type]);\n protected readonly _borderClass = computed(() => TOAST_BORDER_MAP[this.entry().type]);\n protected readonly _colorClass = computed(() => TOAST_COLOR_MAP[this.entry().type]);\n protected readonly _progressColor = computed(() => TOAST_PROGRESS_MAP[this.entry().type]);\n protected readonly _buttonColor = computed(() => this.entry().type as ClxButtonColor);\n\n private get _card(): HTMLElement {\n return this._el.nativeElement.querySelector('.clx-toast-card') as HTMLElement;\n }\n\n // ─── Lifecycle ─────────────────────────────────────────────────────────────\n ngOnInit(): void {\n const e = this.entry();\n\n this._animate.animate(this._card, {\n animation: e.animationIn,\n duration: e.animationDuration,\n trigger: 'manual',\n });\n\n if (e.duration > 0) {\n this._startTimer();\n }\n }\n\n ngOnDestroy(): void {\n this._destroyed = true;\n this._stopTimer();\n }\n\n // ─── Hover handlers ────────────────────────────────────────────────────────\n protected _onMouseEnter(): void {\n if (this.entry().pauseOnHover) this._paused = true;\n }\n\n protected _onMouseLeave(): void {\n if (this.entry().pauseOnHover) this._paused = false;\n }\n\n // ─── Action ────────────────────────────────────────────────────────────────\n protected _onAction(): void {\n this.entry().action?.onClick();\n this.dismiss.emit(this.entry().id);\n }\n\n // ─── Animated exit (called by container before removal) ───────────────────\n playExitAnimation(): Promise<void> {\n this._stopTimer();\n return this._animate.animate(this._card, {\n animation: this.entry().animationOut,\n duration: this.entry().animationDuration,\n trigger: 'manual',\n fillMode: 'forwards',\n });\n }\n\n // ─── Timer ─────────────────────────────────────────────────────────────────\n private _startTimer(): void {\n const total = this.entry().duration;\n const tickMs = 50;\n\n this._zone.runOutsideAngular(() => {\n this._timerHandle = setInterval(() => {\n if (this._destroyed) { this._stopTimer(); return; }\n if (this._paused) return;\n\n this._elapsed += tickMs;\n const pct = Math.max(0, 100 - (this._elapsed / total) * 100);\n this._zone.run(() => this._progressPct.set(pct));\n\n if (this._elapsed >= total) {\n this._stopTimer();\n this._zone.run(() => this.dismiss.emit(this.entry().id));\n }\n }, tickMs);\n });\n }\n\n private _stopTimer(): void {\n if (this._timerHandle !== null) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n model,\n QueryList,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { ClxToastComponent } from './clx-toast.component';\nimport { TOAST_POSITION_MAP } from '../../../configs/toast.config';\nimport type { ClxToastEntry, ClxToastPosition } from '../../../types/clx-toast.types';\n\n@Component({\n selector: 'clx-toast-container',\n standalone: true,\n imports: [ClxToastComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"clx-toast-stack fixed z-9999 flex flex-col gap-2 w-full max-w-sm pointer-events-none sm:max-w-sm max-sm:max-w-full max-sm:left-0! max-sm:right-0! max-sm:translate-x-0! max-sm:px-3 max-sm:items-stretch!\"\n [class]=\"_positionClass()\"\n >\n @for (entry of entries(); track entry.id) {\n <div class=\"pointer-events-auto w-full\">\n <clx-toast\n [entry]=\"entry\"\n (dismiss)=\"requestDismiss($event)\"\n />\n </div>\n }\n </div>\n `,\n styles: [`\n clx-toast-container {\n display: contents;\n }\n @media (max-width: 639px) {\n .clx-toast-stack {\n left: 0 !important;\n right: 0 !important;\n transform: none !important;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n max-width: 100% !important;\n align-items: stretch !important;\n }\n }\n `],\n})\nexport class ClxToastContainerComponent {\n readonly entries = model<ClxToastEntry[]>([]);\n readonly position = model<ClxToastPosition>('top-right');\n\n /** Called by service to get the ClxToastComponent instance for exit animation */\n @ViewChildren(ClxToastComponent) toastRefs!: QueryList<ClxToastComponent>;\n\n protected readonly _positionClass = computed(() => TOAST_POSITION_MAP[this.position()]);\n\n async requestDismiss(id: string): Promise<void> {\n const ref = this.toastRefs.find(t => t.entry().id === id);\n if (ref) {\n await ref.playExitAnimation();\n }\n this.entries.update(list => list.filter(e => e.id !== id));\n }\n}\n","import type { ClxCardPadding } from '../types/clx-card.types';\n\nexport const CARD_PADDING_MAP: Record<ClxCardPadding, string> = {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-7',\n} as const;\n","import { Directive } from '@angular/core';\n\n@Directive({ selector: '[clxCardHeader]', standalone: true })\nexport class ClxCardHeaderDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({ selector: '[clxCardBody]', standalone: true })\nexport class ClxCardBodyDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({ selector: '[clxCardFooter]', standalone: true })\nexport class ClxCardFooterDirective {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxCardVariant, ClxCardPadding } from '../../../types/clx-card.types';\nimport { CARD_PADDING_MAP } from '../../../configs/card.config';\nimport { ClxCardHeaderDirective } from './clx-card-header.directive';\nimport { ClxCardBodyDirective } from './clx-card-body.directive';\nimport { ClxCardFooterDirective } from './clx-card-footer.directive';\n\n@Component({\n selector: 'clx-card',\n standalone: true,\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n template: `\n @if (_hasHeader()) {\n <div class=\"clx-card-header flex items-center justify-between gap-3 px-5 py-4 border-b border-slate-100\">\n <ng-content select=\"[clxCardHeader]\" />\n </div>\n }\n\n <div [class]=\"_bodyClass()\">\n <ng-content select=\"[clxCardBody]\" />\n @if (!_hasBody()) {\n <ng-content />\n }\n </div>\n\n @if (_hasFooter()) {\n <div class=\"clx-card-footer flex items-center gap-2 px-5 py-3 border-t border-slate-100 bg-slate-50/60 rounded-b-xl\">\n <ng-content select=\"[clxCardFooter]\" />\n </div>\n }\n `,\n})\nexport class ClxCardComponent {\n readonly variant = input<ClxCardVariant>('elevated');\n readonly color = input<ClxColorInput>('indigo');\n readonly padding = input<ClxCardPadding>('md');\n readonly hover = input<boolean>(false);\n\n private readonly _headerSlot = contentChild(ClxCardHeaderDirective);\n private readonly _bodySlot = contentChild(ClxCardBodyDirective);\n private readonly _footerSlot = contentChild(ClxCardFooterDirective);\n\n protected readonly _hasHeader = computed(() => !!this._headerSlot());\n protected readonly _hasBody = computed(() => !!this._bodySlot());\n protected readonly _hasFooter = computed(() => !!this._footerSlot());\n\n protected readonly _bodyClass = computed(() => {\n const pad = this._hasBody() ? CARD_PADDING_MAP[this.padding()] : CARD_PADDING_MAP[this.padding()];\n return `clx-card-body flex-1 ${pad}`;\n });\n\n protected readonly _hostClass = computed(() => {\n const variant = this.variant();\n const t = resolveColor(this.color());\n const hover = this.hover() ? `transition-shadow duration-200 hover:shadow-lg cursor-pointer` : '';\n\n let variantClass: string;\n if (variant === 'elevated') {\n variantClass = `bg-white shadow-md border ${t.borderLight}`;\n } else if (variant === 'outlined') {\n variantClass = `bg-white border ${t.border}`;\n } else {\n variantClass = `bg-slate-50 border border-transparent`;\n }\n\n return `flex flex-col rounded-xl overflow-hidden w-full ${variantClass} ${hover}`.trim();\n });\n}\n","import type { ClxStepperSize } from '../types/clx-stepper.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\nexport const STEPPER_SIZE_MAP: Record<ClxStepperSize, {\n circle: string;\n iconSize: ClxSize;\n label: string;\n desc: string;\n connector: string;\n}> = {\n sm: { circle: 'w-7 h-7', iconSize: 'xs', label: 'text-xs', desc: 'text-xs', connector: 'h-0.5' },\n md: { circle: 'w-9 h-9', iconSize: 'sm', label: 'text-sm', desc: 'text-xs', connector: 'h-0.5' },\n lg: { circle: 'w-11 h-11', iconSize: 'md', label: 'text-sm', desc: 'text-xs', connector: 'h-1' },\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxStepperStep, ClxStepperOrientation, ClxStepperSize } from '../../../types/clx-stepper.types';\nimport { STEPPER_SIZE_MAP } from '../../../configs/stepper.config';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-stepper',\n standalone: true,\n imports: [ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n template: `\n @for (step of steps(); track $index; let last = $last; let i = $index) {\n\n <!-- Step -->\n <div [class]=\"_stepWrapClass()\">\n\n <!-- Circle + connector (horizontal: connector after, vertical: connector below) -->\n <div [class]=\"_axisClass()\">\n\n <!-- Circle -->\n <div [class]=\"_circleClass(step.status)\">\n @switch (step.status) {\n @case ('completed') {\n <span clx-icon name=\"check\" [size]=\"_tokens().iconSize\"></span>\n }\n @case ('error') {\n <span clx-icon name=\"close\" [size]=\"_tokens().iconSize\"></span>\n }\n @default {\n @if (step.icon) {\n <span clx-icon [name]=\"step.icon\" [size]=\"_tokens().iconSize\"></span>\n } @else {\n <span [class]=\"'font-bold leading-none select-none ' + _tokens().label\">{{ i + 1 }}</span>\n }\n }\n }\n </div>\n\n <!-- Connector -->\n @if (!last) {\n <div [class]=\"_connectorClass(step.status)\"></div>\n }\n\n </div>\n\n <!-- Label + description -->\n <div [class]=\"_labelWrapClass()\">\n <span [class]=\"_labelClass(step.status)\">{{ step.label }}</span>\n @if (step.description) {\n <span [class]=\"'text-slate-400 ' + _tokens().desc\">{{ step.description }}</span>\n }\n </div>\n\n </div>\n }\n `,\n})\nexport class ClxStepperComponent {\n readonly steps = input.required<ClxStepperStep[]>();\n readonly color = input<ClxColorInput>('indigo');\n readonly orientation = input<ClxStepperOrientation>('horizontal');\n readonly size = input<ClxStepperSize>('md');\n\n protected readonly _tokens = computed(() => STEPPER_SIZE_MAP[this.size()]);\n\n // ── Host ─────────────────────────────────────────────────────────────────────\n protected readonly _hostClass = computed(() => {\n const horiz = this.orientation() === 'horizontal';\n return horiz\n ? 'flex flex-row items-start w-full'\n : 'flex flex-col w-full';\n });\n\n // ── Step wrapper ──────────────────────────────────────────────────────────────\n protected readonly _stepWrapClass = computed(() => {\n const horiz = this.orientation() === 'horizontal';\n return horiz\n ? 'flex flex-col items-center flex-1 min-w-0'\n : 'flex flex-row gap-3';\n });\n\n // ── Axis (circle + connector) ─────────────────────────────────────────────────\n protected readonly _axisClass = computed(() => {\n const horiz = this.orientation() === 'horizontal';\n return horiz\n ? 'flex flex-row items-center w-full'\n : 'flex flex-col items-center shrink-0';\n });\n\n // ── Label wrapper ─────────────────────────────────────────────────────────────\n protected readonly _labelWrapClass = computed(() => {\n const horiz = this.orientation() === 'horizontal';\n return horiz\n ? 'flex flex-col items-center text-center mt-2 px-1'\n : 'flex flex-col justify-center pb-6 min-w-0';\n });\n\n // ── Circle ────────────────────────────────────────────────────────────────────\n protected _circleClass(status: ClxStepperStep['status']): string {\n const base = `flex items-center justify-center rounded-full shrink-0 transition-colors duration-200 ${this._tokens().circle}`;\n const t = resolveColor(this.color());\n\n if (status === 'completed') return `${base} ${t.bg} ${t.text}`;\n if (status === 'active') return `${base} bg-white border-2 ${t.border} ${t.textSubtle}`;\n if (status === 'error') return `${base} bg-red-500 text-white`;\n return `${base} bg-white border-2 border-slate-200 text-slate-400`;\n }\n\n // ── Connector ─────────────────────────────────────────────────────────────────\n protected _connectorClass(status: ClxStepperStep['status']): string {\n const t = resolveColor(this.color());\n const horiz = this.orientation() === 'horizontal';\n const size = this._tokens().connector;\n\n const filled = status === 'completed' ? `${t.bg}` : 'bg-slate-200';\n\n return horiz\n ? `flex-1 ${size} ${filled} transition-colors duration-300`\n : `w-0.5 flex-1 my-1 min-h-[1.5rem] ${filled} transition-colors duration-300`;\n }\n\n // ── Label ─────────────────────────────────────────────────────────────────────\n protected _labelClass(status: ClxStepperStep['status']): string {\n const t = resolveColor(this.color());\n const size = this._tokens().label;\n\n if (status === 'completed') return `font-medium ${t.textSubtle} ${size}`;\n if (status === 'active') return `font-semibold text-slate-800 ${size}`;\n if (status === 'error') return `font-medium text-red-500 ${size}`;\n return `font-normal text-slate-400 ${size}`;\n }\n}\n","import type { ClxSize } from '../types/clx-size.types';\n\nexport const AVATAR_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-6 h-6',\n xs: 'w-8 h-8',\n sm: 'w-10 h-10',\n md: 'w-12 h-12',\n lg: 'w-16 h-16',\n xl: 'w-20 h-20',\n};\n\nexport const AVATAR_TEXT_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'text-xs font-semibold',\n xs: 'text-xs font-semibold',\n sm: 'text-sm font-semibold',\n md: 'text-base font-semibold',\n lg: 'text-xl font-semibold',\n xl: 'text-2xl font-semibold',\n};\n\nexport const AVATAR_ICON_SIZE_MAP: Record<ClxSize, ClxSize> = {\n xxs: 'xxs',\n xs: 'xs',\n sm: 'sm',\n md: 'sm',\n lg: 'md',\n xl: 'lg',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxShape } from '../../../types/clx-shape.types';\nimport type { ClxAvatarContentType } from '../../../types/clx-avatar.types';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\nimport { AVATAR_SIZE_MAP, AVATAR_TEXT_SIZE_MAP, AVATAR_ICON_SIZE_MAP } from '../../../configs/avatar.config';\n\n@Component({\n selector: 'clx-avatar',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n @switch (_contentType()) {\n @case ('image') {\n <img [src]=\"src()\" [alt]=\"alt()\" class=\"w-full h-full object-cover\" />\n }\n @case ('text') {\n <span [class]=\"_textClass()\">{{ _initials() }}</span>\n }\n @case ('icon') {\n <span clx-icon [name]=\"iconName() || 'person'\" [size]=\"_iconSize()\"></span>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n '[attr.aria-label]': 'alt()',\n 'role': 'img',\n },\n})\nexport class ClxAvatarComponent {\n readonly src = input<string | null>(null);\n readonly initials = input<string | null>(null);\n readonly iconName = input<string | null>(null);\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxSize>('md');\n readonly shape = input<ClxShape>('circle');\n readonly alt = input<string>('Avatar');\n\n protected readonly _contentType = computed((): ClxAvatarContentType => {\n if (this.src()) return 'image';\n if (this.initials()) return 'text';\n return 'icon';\n });\n\n protected readonly _initials = computed(() =>\n (this.initials() ?? '').slice(0, 3).toUpperCase(),\n );\n\n protected readonly _iconSize = computed(() => AVATAR_ICON_SIZE_MAP[this.size()]);\n\n protected readonly _shapeClass = computed(() => {\n const s = this.shape();\n if (s === 'circle') return 'rounded-full';\n if (s === 'rounded') return 'rounded-xl';\n return 'rounded-full';\n });\n\n protected readonly _colorClass = computed(() => {\n if (this._contentType() === 'image') return '';\n const t = resolveColor(this.color());\n return this._contentType() === 'text'\n ? `${t.bgSubtle} ${t.textSubtle}`\n : `${t.bg} ${t.text}`;\n });\n\n protected readonly _textClass = computed(() => AVATAR_TEXT_SIZE_MAP[this.size()]);\n\n protected readonly _hostClass = computed(() => {\n const base = 'relative inline-flex items-center justify-center overflow-hidden flex-shrink-0 select-none';\n const size = AVATAR_SIZE_MAP[this.size()];\n const shape = this._shapeClass();\n const color = this._colorClass();\n return `${base} ${size} ${shape} ${color}`.trim();\n });\n}\n","import { InjectionToken, Signal } from '@angular/core';\nimport type { ClxColorInput } from '../types/clx-color.types';\nimport type { ClxTimelineLineStyle, ClxTimelineMode, ClxTimelineSize } from '../types/clx-timeline.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\n// ── Context ───────────────────────────────────────────────────────────────────\n\nexport interface ClxTimelineContext {\n color: Signal<ClxColorInput>;\n lineStyle: Signal<ClxTimelineLineStyle>;\n mode: Signal<ClxTimelineMode>;\n size: Signal<ClxTimelineSize>;\n sizeTokens: Signal<(typeof TIMELINE_SIZE_MAP)[ClxTimelineSize]>;\n}\n\nexport const CLX_TIMELINE_CONTEXT = new InjectionToken<ClxTimelineContext>('CLX_TIMELINE_CONTEXT');\n\n// ── Line style ────────────────────────────────────────────────────────────────\n\nexport const TIMELINE_LINE_STYLE: Record<ClxTimelineLineStyle, string> = {\n dotted: 'border-l-2 border-dashed border-slate-200',\n solid: 'border-l-2 border-solid border-slate-200',\n none: '',\n};\n\n// ── Size map ──────────────────────────────────────────────────────────────────\n\nexport const TIMELINE_SIZE_MAP: Record<ClxTimelineSize, {\n dot: string;\n iconSize: ClxSize;\n item: string;\n gap: string;\n title: string;\n desc: string;\n time: string;\n contentPb: string;\n}> = {\n sm: { dot: 'w-8 h-8', iconSize: 'xs', item: 'px-3 pt-2', gap: 'gap-3', title: 'text-sm', desc: 'text-xs', time: 'text-xs', contentPb: 'pb-5' },\n md: { dot: 'w-10 h-10', iconSize: 'sm', item: 'px-4 pt-3', gap: 'gap-4', title: 'text-sm', desc: 'text-xs', time: 'text-xs', contentPb: 'pb-6' },\n lg: { dot: 'w-12 h-12', iconSize: 'md', item: 'px-5 pt-4', gap: 'gap-5', title: 'text-base',desc: 'text-sm', time: 'text-sm', contentPb: 'pb-8' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxTimelineLineStyle, ClxTimelineMode, ClxTimelineSize } from '../../../types/clx-timeline.types';\nimport { CLX_TIMELINE_CONTEXT, TIMELINE_SIZE_MAP } from '../../../configs/timeline.config';\nimport { ClxButtonComponent } from '../clx-button/clx-button.component';\n\n@Component({\n selector: 'clx-timeline',\n standalone: true,\n imports: [ClxButtonComponent],\n template: `\n @if (label()) {\n <div [class]=\"_headerClass()\">\n <span class=\"font-semibold text-slate-800\">{{ label() }}</span>\n @if (actionLabel()) {\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"sm\" icon=\"expand_more\">\n {{ actionLabel() }}\n </button>\n }\n </div>\n }\n <ng-content />\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n 'role': 'list',\n },\n providers: [\n { provide: CLX_TIMELINE_CONTEXT, useExisting: forwardRef(() => ClxTimelineComponent) },\n ],\n})\nexport class ClxTimelineComponent {\n readonly color = input<ClxColorInput>('indigo');\n readonly lineStyle = input<ClxTimelineLineStyle>('dotted');\n readonly mode = input<ClxTimelineMode>('left');\n readonly size = input<ClxTimelineSize>('md');\n readonly label = input<string>('');\n readonly actionLabel = input<string>('');\n readonly bordered = input<boolean>(false);\n\n readonly sizeTokens = computed(() => TIMELINE_SIZE_MAP[this.size()]);\n\n protected readonly _hostClass = computed(() => {\n const hasCard = this.label() || this.bordered();\n const bg = hasCard ? 'bg-white rounded-2xl overflow-hidden' : '';\n const border = this.bordered() ? `border ${resolveColor(this.color()).borderLight}` : 'shadow-sm';\n return `flex flex-col w-full ${hasCard ? `${bg} ${border}` : ''}`.trim();\n });\n\n protected readonly _headerClass = computed(() => {\n const px = this.sizeTokens().item.split(' ')[0];\n return `flex items-center justify-between ${px} py-3 border-b ${resolveColor(this.color()).borderLight}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport { CLX_TIMELINE_CONTEXT, TIMELINE_LINE_STYLE } from '../../../configs/timeline.config';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-timeline-item',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n <div class=\"flex flex-col items-center shrink-0\">\n <div [class]=\"_dotClass()\">\n <span clx-icon [name]=\"icon()\" [size]=\"_ctx.sizeTokens().iconSize\" [class]=\"_iconClass()\"></span>\n </div>\n <div [class]=\"_lineClass()\"></div>\n </div>\n\n <div [class]=\"'flex-1 min-w-0 ' + _ctx.sizeTokens().contentPb\">\n <div class=\"flex items-start justify-between gap-2\">\n <p [class]=\"'font-semibold text-slate-800 leading-snug ' + _ctx.sizeTokens().title\">\n {{ title() }}\n </p>\n @if (time()) {\n <span [class]=\"'shrink-0 text-slate-400 text-right leading-snug ' + _ctx.sizeTokens().time\">\n {{ time() }}\n </span>\n }\n </div>\n @if (description()) {\n <p [class]=\"'text-slate-500 mt-0.5 ' + _ctx.sizeTokens().desc\">{{ description() }}</p>\n }\n <ng-content />\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n 'role': 'listitem',\n },\n})\nexport class ClxTimelineItemComponent {\n protected readonly _ctx = inject(CLX_TIMELINE_CONTEXT);\n\n readonly icon = input<string>('circle');\n readonly color = input<ClxColorInput | null>(null);\n readonly title = input.required<string>();\n readonly description = input<string>('');\n readonly time = input<string>('');\n readonly last = input<boolean>(false);\n\n protected readonly _resolvedColor = computed(() => resolveColor(this.color() ?? this._ctx.color()));\n\n protected readonly _iconClass = computed(() => this._resolvedColor().textSubtle);\n\n protected readonly _hostClass = computed(() => {\n const { gap, item } = this._ctx.sizeTokens();\n return `flex ${gap} w-full ${item}`;\n });\n\n protected readonly _dotClass = computed(() => {\n const { dot } = this._ctx.sizeTokens();\n return `${dot} rounded-full flex items-center justify-center shrink-0 ${this._resolvedColor().bgSubtle}`;\n });\n\n protected readonly _lineClass = computed(() => {\n if (this.last()) return 'flex-1';\n const lineStyle = TIMELINE_LINE_STYLE[this._ctx.lineStyle()];\n return `flex-1 w-0 mt-1 ${lineStyle}`.trim();\n });\n}\n","import type { ChartData, ChartOptions, ChartType } from 'chart.js';\nimport { CLX_COLOR_HEX } from '../types/clx-color.types';\n\nexport const CLX_CHART_DEFAULTS_NO_SCALES: ChartOptions = {\n responsive: true,\n maintainAspectRatio: false,\n font: {\n family: 'Roboto, ui-sans-serif, system-ui, -apple-system, sans-serif',\n size: 12,\n },\n plugins: {\n legend: { display: true, position: 'top', align: 'center' },\n tooltip: { enabled: true },\n },\n} as ChartOptions;\n\nexport const CLX_CHART_DEFAULTS: ChartOptions = {\n responsive: true,\n maintainAspectRatio: false,\n font: {\n family: 'Roboto, ui-sans-serif, system-ui, -apple-system, sans-serif',\n size: 12,\n },\n plugins: {\n legend: {\n display: true,\n position: 'top',\n align: 'center'\n },\n tooltip: {\n enabled: true\n },\n },\n scales: {\n x: { \n display: true,\n grid: {\n display: false\n },\n border: {\n color: CLX_COLOR_HEX.slate100\n },\n ticks: {\n color: CLX_COLOR_HEX.slate400\n }\n },\n y: {\n display: true,\n beginAtZero: true,\n grid: {\n display: true,\n color: CLX_COLOR_HEX.slate100\n },\n border: {\n color: CLX_COLOR_HEX.slate100\n },\n ticks: {\n color: CLX_COLOR_HEX.slate400\n }\n },\n },\n} as ChartOptions;\n\nexport const CLX_CHART_PALETTE: string[] = Object.values(CLX_COLOR_HEX);\n\n/** Versiones con opacidad 20% para backgrounds de áreas/barras */\nexport const CLX_CHART_PALETTE_ALPHA: string[] = CLX_CHART_PALETTE.map(hex => `${hex}33`);\n\nconst AREA_TYPES: ChartType[] = ['line', 'radar'];\nconst MULTI_SLICE_TYPES: ChartType[] = ['pie', 'doughnut', 'polarArea'];\n\nfunction shuffled(arr: string[]): string[] {\n const a = [...arr];\n for (let i = a.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [a[i], a[j]] = [a[j], a[i]];\n }\n return a;\n}\n\nexport function applyChartDefaults(type: ChartType, data: ChartData): ChartData {\n const palette = shuffled(CLX_CHART_PALETTE);\n const paletteAlpha = palette.map(hex => `${hex}33`);\n const datasets = data.datasets.map((ds, i) => {\n const color = palette[i % palette.length];\n const alpha = paletteAlpha[i % paletteAlpha.length];\n\n if (MULTI_SLICE_TYPES.includes(type)) {\n const count = (ds.data as number[]).length;\n return {\n ...ds,\n backgroundColor: ds.backgroundColor ?? Array.from({ length: count }, (_, j) =>\n palette[j % palette.length]\n ),\n borderColor: ds.borderColor ?? '#fff',\n borderWidth: (ds as any).borderWidth ?? 2,\n };\n }\n\n if (AREA_TYPES.includes(type)) {\n return {\n ...ds,\n borderColor: ds.borderColor ?? color,\n backgroundColor: ds.backgroundColor ?? alpha,\n pointBackgroundColor: (ds as any).pointBackgroundColor ?? color,\n fill: (ds as any).fill ?? (type === 'line' ? false : true),\n tension: (ds as any).tension ?? 0.4,\n };\n }\n\n return {\n ...ds,\n backgroundColor: ds.backgroundColor ?? color,\n borderColor: ds.borderColor ?? color,\n borderWidth: (ds as any).borderWidth ?? 0,\n barPercentage: (ds as any).barPercentage ?? 0.5,\n categoryPercentage: (ds as any).categoryPercentage ?? 0.6,\n };\n });\n\n return { ...data, datasets } as ChartData;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n OnDestroy,\n untracked,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {\n Chart,\n LineController,\n BarController,\n PieController,\n DoughnutController,\n RadarController,\n PolarAreaController,\n CategoryScale,\n LinearScale,\n RadialLinearScale,\n BarElement,\n LineElement,\n PointElement,\n ArcElement,\n Filler,\n Tooltip,\n Legend,\n type ChartData,\n type ChartOptions,\n} from 'chart.js';\n\nimport { applyChartDefaults, CLX_CHART_DEFAULTS, CLX_CHART_DEFAULTS_NO_SCALES } from '../../../../configs/chart.config';\nimport type { ClxChartType } from '../../../../types/clx-chart.types';\n\nChart.register(\n LineController, BarController, PieController,\n DoughnutController, RadarController, PolarAreaController,\n CategoryScale, LinearScale, RadialLinearScale,\n BarElement, LineElement, PointElement, ArcElement,\n Filler, Tooltip, Legend,\n);\n\nconst NO_SCALE_TYPES = ['doughnut', 'pie', 'polarArea'];\n\n@Component({\n selector: 'clx-chart',\n standalone: true,\n template: `\n <div class=\"clx-chart-container\" [style.height]=\"_hostHeight()\" [class.clx-loading]=\"loading()\">\n <canvas #canvas role=\"img\" [attr.aria-label]=\"ariaLabel() || 'Chart'\"></canvas>\n \n @if (loading()) {\n <div class=\"clx-chart-loader\">\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-indigo-500\"></div>\n </div>\n }\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; }\n .clx-chart-container { position: relative; width: 100%; }\n canvas { display: block; width: 100% !important; }\n \n .clx-chart-loader {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n backdrop-filter: blur(2px);\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxChartComponent implements AfterViewInit, OnDestroy {\n @ViewChild('canvas') canvasRef!: ElementRef<HTMLCanvasElement>;\n\n type = input.required<ClxChartType>();\n data = input.required<ChartData>();\n options = input<ChartOptions>({});\n height = input<number | string>(300);\n ariaLabel = input<string>();\n \n // SOLUCIÓN AL ERROR: Añadimos el input loading\n loading = input<boolean>(false);\n\n private _chart?: Chart;\n private _injector = inject(Injector);\n\n _hostHeight = computed(() => \n typeof this.height() === 'number' ? `${this.height()}px` : this.height()\n );\n\n ngAfterViewInit(): void {\n this._createChart();\n\n effect(() => {\n const currentType = this.type();\n const currentData = this.data();\n\n if (this._chart) {\n (this._chart.config as any).type = currentType;\n this._chart.data = applyChartDefaults(currentType, currentData);\n this._chart.update();\n }\n }, { injector: this._injector });\n }\n\n private _createChart(): void {\n const ctx = this.canvasRef.nativeElement.getContext('2d');\n if (!ctx) return;\n\n const type = untracked(() => this.type());\n this._chart = new Chart(ctx, {\n type,\n data: applyChartDefaults(type, untracked(() => this.data())),\n options: { ...(NO_SCALE_TYPES.includes(type) ? CLX_CHART_DEFAULTS_NO_SCALES : CLX_CHART_DEFAULTS), ...untracked(() => this.options()) },\n });\n }\n\n ngOnDestroy(): void {\n this._chart?.destroy();\n }\n}","import type { ClxColorPickerSize } from '../types/clx-colorpicker.types';\n\nexport const COLOR_PICKER_SIZE_MAP: Record<ClxColorPickerSize, {\n minH: string;\n text: string;\n label: string;\n hint: string;\n px: string;\n swatchSz: string;\n btnSize: 'xs' | 'sm';\n}> = {\n sm: { minH: 'min-h-8', text: 'text-sm', label: 'text-xs font-medium', hint: 'text-xs', px: 'px-2.5', swatchSz: 'w-4 h-4', btnSize: 'xs' },\n md: { minH: 'min-h-10', text: 'text-sm', label: 'text-sm font-medium', hint: 'text-xs', px: 'px-3', swatchSz: 'w-5 h-5', btnSize: 'sm' },\n lg: { minH: 'min-h-12', text: 'text-base', label: 'text-sm font-medium', hint: 'text-sm', px: 'px-3', swatchSz: 'w-6 h-6', btnSize: 'sm' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { ConnectedPosition, OverlayModule, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxColorPickerFormat, ClxColorPickerSize } from '../../../types/clx-colorpicker.types';\nimport { COLOR_PICKER_SIZE_MAP } from '../../../configs/colorpicker.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\n// ── Color utilities ────────────────────────────────────────────────────────────\n\nfunction hsvToRgb(h: number, s: number, v: number): [number, number, number] {\n const c = v * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = v - c;\n let r = 0, g = 0, b = 0;\n if (h < 60) { r = c; g = x; b = 0; }\n else if (h < 120) { r = x; g = c; b = 0; }\n else if (h < 180) { r = 0; g = c; b = x; }\n else if (h < 240) { r = 0; g = x; b = c; }\n else if (h < 300) { r = x; g = 0; b = c; }\n else { r = c; g = 0; b = x; }\n return [Math.round((r + m) * 255), Math.round((g + m) * 255), Math.round((b + m) * 255)];\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return '#' + [r, g, b].map(v => v.toString(16).padStart(2, '0')).join('');\n}\n\nfunction hexToRgb(hex: string): [number, number, number] | null {\n const clean = hex.replace('#', '').trim();\n if (clean.length !== 6) return null;\n const n = parseInt(clean, 16);\n if (isNaN(n)) return null;\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\n\nfunction rgbToHsv(r: number, g: number, b: number): [number, number, number] {\n const rr = r / 255, gg = g / 255, bb = b / 255;\n const max = Math.max(rr, gg, bb), min = Math.min(rr, gg, bb), d = max - min;\n let h = 0;\n const s = max === 0 ? 0 : d / max;\n const v = max;\n if (d !== 0) {\n if (max === rr) h = ((gg - bb) / d + (gg < bb ? 6 : 0)) / 6;\n else if (max === gg) h = ((bb - rr) / d + 2) / 6;\n else h = ((rr - gg) / d + 4) / 6;\n }\n return [Math.round(h * 360), s, v];\n}\n\nfunction rgbToRgbString(r: number, g: number, b: number): string {\n return `rgb(${r}, ${g}, ${b})`;\n}\n\nfunction rgbToHslString(r: number, g: number, b: number): string {\n const rr = r / 255, gg = g / 255, bb = b / 255;\n const max = Math.max(rr, gg, bb), min = Math.min(rr, gg, bb);\n let h = 0, s = 0;\n const l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n if (max === rr) h = ((gg - bb) / d + (gg < bb ? 6 : 0)) / 6;\n else if (max === gg) h = ((bb - rr) / d + 2) / 6;\n else h = ((rr - gg) / d + 4) / 6;\n }\n return `hsl(${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────────\n\n@Component({\n selector: 'clx-colorpicker',\n standalone: true,\n imports: [OverlayModule, ReactiveFormsModule, ClxIconComponent, ClxButtonComponent],\n template: `\n @if (label()) {\n <label [id]=\"_labelId\" [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <!-- ── Trigger ──────────────────────────────────────────────────────────── -->\n <div\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n [class]=\"_triggerClass()\"\n [attr.tabindex]=\"_disabled() ? null : '0'\"\n role=\"button\"\n [attr.aria-expanded]=\"_isOpen()\"\n aria-haspopup=\"dialog\"\n [attr.aria-labelledby]=\"label() ? _labelId : null\"\n (click)=\"!_disabled() && _togglePanel()\"\n (keydown)=\"_onTriggerKeydown($event)\">\n\n <!-- Swatch + value -->\n <div class=\"flex items-center gap-2 flex-1 min-w-0 pr-10\" [class]=\"_sizeConfig().px\">\n <span\n class=\"shrink-0 rounded border border-black/10\"\n [class]=\"_sizeConfig().swatchSz\"\n [style.background-color]=\"_swatchColor()\">\n </span>\n <span [class]=\"_displayClass()\">{{ _displayValue() }}</span>\n </div>\n\n <!-- Right controls -->\n <div class=\"absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-0.5\">\n @if (_hasValue() && !_disabled()) {\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"activeColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"close\"\n [iconOnly]=\"true\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation(); _clearValue()\">\n </button>\n }\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"activeColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"keyboard_arrow_down\"\n [iconOnly]=\"true\"\n [class]=\"_chevronClass()\"\n (mousedown)=\"$event.preventDefault()\">\n </button>\n </div>\n </div>\n\n <!-- ── Overlay panel ─────────────────────────────────────────────────────── -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_closePanel()\"\n (overlayKeydown)=\"_onOverlayKeydown($event)\">\n\n <div class=\"w-72 bg-white rounded-xl shadow-xl border border-slate-200 overflow-hidden mt-1\">\n <div class=\"p-3 space-y-2.5\">\n\n <!-- SV gradient area -->\n <div\n class=\"relative h-40 rounded-lg overflow-hidden cursor-crosshair select-none touch-none\"\n (pointerdown)=\"_onGradientPointerDown($event)\">\n <div class=\"absolute inset-0\" [style.background-color]=\"_hueBackground()\"></div>\n <div class=\"absolute inset-0\" style=\"background: linear-gradient(to right, #ffffff, transparent)\"></div>\n <div class=\"absolute inset-0\" style=\"background: linear-gradient(to top, #000000, transparent)\"></div>\n <!-- Cursor -->\n <div\n class=\"absolute w-3.5 h-3.5 rounded-full border-2 border-white shadow ring-1 ring-black/20 pointer-events-none\"\n [style.left.%]=\"_saturation() * 100\"\n [style.top.%]=\"(1 - _brightness()) * 100\"\n style=\"transform: translate(-50%, -50%)\">\n </div>\n </div>\n\n <!-- Hue slider -->\n <div\n class=\"relative py-1 cursor-pointer select-none touch-none\"\n (pointerdown)=\"_onHuePointerDown($event)\">\n <div\n class=\"h-3 rounded-full\"\n style=\"background: linear-gradient(to right,#ff0000,#ffff00,#00ff00,#00ffff,#0000ff,#ff00ff,#ff0000)\">\n </div>\n <div\n class=\"absolute top-1/2 w-4 h-4 rounded-full border-2 border-white shadow ring-1 ring-black/20 pointer-events-none\"\n [style.left.%]=\"(_hue() / 360) * 100\"\n [style.background-color]=\"_hueBackground()\"\n style=\"transform: translate(-50%, -50%)\">\n </div>\n </div>\n\n <!-- Preview + hex input -->\n <div class=\"flex items-center gap-2\">\n <div\n class=\"w-8 h-8 shrink-0 rounded-lg border border-black/10\"\n [style.background-color]=\"_hexValue()\">\n </div>\n <div\n class=\"flex-1\"\n (focusin)=\"_hexInputFocused.set(true)\"\n (focusout)=\"_hexInputFocused.set(false)\">\n <input\n type=\"text\"\n [formControl]=\"_hexInput\"\n maxlength=\"9\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n placeholder=\"#000000\"\n class=\"w-full font-mono text-sm border border-slate-200 rounded-lg px-2.5 py-1.5 text-slate-700 uppercase tracking-wide bg-white focus:outline-none focus:ring-2 focus:ring-slate-300 focus:border-slate-400 transition-colors\"\n (input)=\"_onHexInput($event)\"\n (keydown.enter)=\"_applyHexAndClose()\" />\n </div>\n <span class=\"text-xs font-semibold text-slate-400 uppercase shrink-0 w-8 text-center select-none\">\n {{ format() }}\n </span>\n </div>\n\n <!-- Swatches / Presets -->\n @if (presets().length) {\n <div class=\"border-t border-slate-100 pt-2\">\n <div class=\"flex flex-wrap gap-1.5\">\n @for (swatch of presets(); track swatch) {\n <button\n type=\"button\"\n class=\"w-6 h-6 rounded border border-black/10 transition-all duration-150 hover:scale-110 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-offset-1 focus:ring-slate-400\"\n [style.background-color]=\"swatch\"\n [title]=\"swatch\"\n (click)=\"_selectPreset(swatch)\">\n </button>\n }\n </div>\n </div>\n }\n\n </div>\n </div>\n </ng-template>\n\n <!-- ── Bottom message ────────────────────────────────────────────────────── -->\n @if (_isInvalid()) {\n <p class=\"text-xs text-red-500 flex items-center gap-1\">\n <span clx-icon name=\"error\" size=\"xs\"></span>\n {{ errorMessage() }}\n </p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5 w-full' },\n})\nexport class ClxColorPickerComponent implements ControlValueAccessor {\n\n // ── Unique label id ────────────────────────────────────────────────────────\n private static _seq = 0;\n protected readonly _labelId = `clx-cp-label-${++ClxColorPickerComponent._seq}`;\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('Selecciona un color');\n readonly size = input<ClxColorPickerSize>('md');\n readonly format = input<ClxColorPickerFormat>('hex');\n readonly presets = input<string[]>([]);\n readonly activeColor = input<ClxColorInput>('indigo');\n readonly hint = input<string>('');\n readonly errorMessage = input<string>('Este campo es requerido');\n readonly disabled = input<boolean>(false);\n\n // ── Color state (HSV model) ────────────────────────────────────────────────\n protected readonly _hue = signal(220); // 0–360\n protected readonly _saturation = signal(0.65); // 0–1\n protected readonly _brightness = signal(0.85); // 0–1\n private readonly _hasColor = signal(false);\n\n // ── Panel state ────────────────────────────────────────────────────────────\n protected readonly _isOpen = signal(false);\n\n // ── Hex input inside panel ─────────────────────────────────────────────────\n protected readonly _hexInput = new FormControl<string>('');\n protected readonly _hexInputFocused = signal(false);\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n private readonly _ngControl = inject(NgControl, { optional: true, self: true });\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _sso = inject(ScrollStrategyOptions);\n private readonly _wasTouched = signal(false);\n private readonly _cvaDisabled = signal(false);\n\n readonly _scrollStrategy = this._sso.reposition();\n\n private _onChange: (v: string | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Drag state (plain fields — not signals) ────────────────────────────────\n private _dragTarget: 'gradient' | 'hue' | null = null;\n private _dragRect: DOMRect | null = null;\n\n constructor() {\n if (this._ngControl) this._ngControl.valueAccessor = this;\n\n // Sync hex input display when color changes (only when user is not typing)\n effect(() => {\n const hex = this._hexValue().toUpperCase();\n if (!this._hexInputFocused()) {\n this._hexInput.setValue(hex, { emitEvent: false });\n }\n });\n }\n\n // ── Overlay positions ──────────────────────────────────────────────────────\n readonly _positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n ];\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n protected readonly _sizeConfig = computed(() => COLOR_PICKER_SIZE_MAP[this.size()]);\n protected readonly _hasValue = computed(() => this._hasColor());\n\n protected readonly _isInvalid = computed(() =>\n this._wasTouched() && (this._ngControl?.control?.invalid ?? false),\n );\n\n /** Pure hue color — used for gradient background and hue thumb */\n protected readonly _hueBackground = computed(() =>\n `hsl(${this._hue()}, 100%, 50%)`,\n );\n\n /** Full hex value from current HSV state */\n protected readonly _hexValue = computed(() => {\n const [r, g, b] = hsvToRgb(this._hue(), this._saturation(), this._brightness());\n return rgbToHex(r, g, b);\n });\n\n /** Swatch color: current hex if a color is selected, neutral gray otherwise */\n protected readonly _swatchColor = computed(() =>\n this._hasColor() ? this._hexValue() : '#e2e8f0',\n );\n\n /** What to display in the trigger field */\n protected readonly _displayValue = computed(() =>\n this._hasColor() ? this._hexValue().toUpperCase() : '',\n );\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeConfig().hint} text-gray-400`,\n );\n\n protected readonly _displayClass = computed(() => {\n const s = this._sizeConfig();\n const color = this._hasColor() ? 'text-slate-700 font-mono' : 'text-gray-400';\n return `flex-1 ${s.text} ${color} truncate`;\n });\n\n protected readonly _triggerClass = computed(() => {\n const s = this._sizeConfig();\n const base = 'relative flex items-center rounded-md border transition-all duration-200 outline-none w-full';\n if (this._disabled()) {\n return `${base} ${s.minH} border-gray-200 bg-gray-50 cursor-not-allowed opacity-60`;\n }\n if (this._isInvalid()) {\n return `${base} ${s.minH} border-red-400 focus-within:ring-2 focus-within:ring-red-500/20 bg-white cursor-pointer`;\n }\n return `${base} ${s.minH} border-slate-200 ${resolveColor(this.activeColor()).focusWithin} bg-white cursor-pointer`;\n });\n\n protected readonly _chevronClass = computed(() =>\n this._isOpen()\n ? 'transition-transform duration-200 rotate-180'\n : 'transition-transform duration-200',\n );\n\n // ── Panel control ──────────────────────────────────────────────────────────\n protected _togglePanel(): void {\n this._isOpen() ? this._closePanel() : this._openPanel();\n }\n\n private _openPanel(): void {\n this._hexInput.setValue(\n this._hasColor() ? this._hexValue().toUpperCase() : '',\n { emitEvent: false },\n );\n this._isOpen.set(true);\n }\n\n protected _closePanel(): void {\n this._isOpen.set(false);\n this._hexInputFocused.set(false);\n this._onTouched();\n this._wasTouched.set(true);\n }\n\n // ── Drag — gradient (SV picker) ───────────────────────────────────────────\n protected _onGradientPointerDown(event: PointerEvent): void {\n event.preventDefault();\n this._dragTarget = 'gradient';\n this._dragRect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n this._updateSV(event.clientX, event.clientY);\n }\n\n // ── Drag — hue slider ─────────────────────────────────────────────────────\n protected _onHuePointerDown(event: PointerEvent): void {\n event.preventDefault();\n this._dragTarget = 'hue';\n this._dragRect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n this._updateHue(event.clientX);\n }\n\n @HostListener('document:pointermove', ['$event'])\n protected _onDocPointerMove(event: PointerEvent): void {\n if (!this._dragTarget || !this._dragRect) return;\n if (this._dragTarget === 'gradient') this._updateSV(event.clientX, event.clientY);\n if (this._dragTarget === 'hue') this._updateHue(event.clientX);\n }\n\n @HostListener('document:pointerup')\n protected _onDocPointerUp(): void {\n this._dragTarget = null;\n this._dragRect = null;\n }\n\n private _updateSV(clientX: number, clientY: number): void {\n const rect = this._dragRect!;\n const s = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n const v = Math.max(0, Math.min(1, 1 - (clientY - rect.top) / rect.height));\n this._saturation.set(s);\n this._brightness.set(v);\n this._hasColor.set(true);\n this._emitValue();\n }\n\n private _updateHue(clientX: number): void {\n const rect = this._dragRect!;\n const h = Math.max(0, Math.min(360, ((clientX - rect.left) / rect.width) * 360));\n this._hue.set(h);\n this._hasColor.set(true);\n this._emitValue();\n }\n\n // ── Hex input ──────────────────────────────────────────────────────────────\n protected _onHexInput(event: Event): void {\n let val = (event.target as HTMLInputElement).value.trim();\n if (!val.startsWith('#')) val = '#' + val;\n if (val.length === 7) {\n const rgb = hexToRgb(val);\n if (rgb) {\n const [h, s, v] = rgbToHsv(...rgb);\n this._hue.set(h);\n this._saturation.set(s);\n this._brightness.set(v);\n this._hasColor.set(true);\n this._emitValue();\n }\n }\n }\n\n protected _applyHexAndClose(): void {\n let val = (this._hexInput.value ?? '').trim();\n if (!val.startsWith('#')) val = '#' + val;\n const rgb = hexToRgb(val);\n if (rgb) {\n const [h, s, v] = rgbToHsv(...rgb);\n this._hue.set(h);\n this._saturation.set(s);\n this._brightness.set(v);\n this._hasColor.set(true);\n this._emitValue();\n }\n this._closePanel();\n }\n\n // ── Preset selection ───────────────────────────────────────────────────────\n protected _selectPreset(color: string): void {\n const rgb = hexToRgb(color);\n if (rgb) {\n const [h, s, v] = rgbToHsv(...rgb);\n this._hue.set(h);\n this._saturation.set(s);\n this._brightness.set(v);\n this._hasColor.set(true);\n this._emitValue();\n }\n this._closePanel();\n }\n\n // ── Clear ──────────────────────────────────────────────────────────────────\n protected _clearValue(): void {\n this._hasColor.set(false);\n this._onChange(null);\n }\n\n // ── Events ────────────────────────────────────────────────────────────────\n protected _onTriggerKeydown(event: KeyboardEvent): void {\n if ((event.key === 'Enter' || event.key === ' ') && !this._disabled()) {\n this._togglePanel();\n event.preventDefault();\n }\n }\n\n protected _onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._closePanel();\n }\n\n @HostListener('keydown.escape')\n onEscape(): void {\n if (this._isOpen()) this._closePanel();\n }\n\n // ── Emit formatted value ───────────────────────────────────────────────────\n private _emitValue(): void {\n const h = this._hue(), s = this._saturation(), v = this._brightness();\n const [r, g, b] = hsvToRgb(h, s, v);\n let value: string;\n switch (this.format()) {\n case 'rgb': value = rgbToRgbString(r, g, b); break;\n case 'hsl': value = rgbToHslString(r, g, b); break;\n default: value = rgbToHex(r, g, b); break;\n }\n this._onChange(value);\n }\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n writeValue(value: string | null): void {\n if (!value) {\n this._hasColor.set(false);\n return;\n }\n this._hasColor.set(true);\n let hex = value.trim();\n // Parse rgb(r, g, b)\n if (hex.startsWith('rgb')) {\n const m = hex.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) hex = rgbToHex(+m[1], +m[2], +m[3]);\n }\n const rgb = hexToRgb(hex);\n if (rgb) {\n const [h, s, v] = rgbToHsv(...rgb);\n this._hue.set(h);\n this._saturation.set(s);\n this._brightness.set(v);\n }\n }\n\n registerOnChange(fn: (v: string | null) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n setDisabledState(disabled: boolean): void { this._cvaDisabled.set(disabled); }\n}\n","import type { ClxDatepickerSize } from '../types/clx-datepicker.types';\n\nexport const DATEPICKER_SIZE_MAP: Record<ClxDatepickerSize, {\n trigger: string;\n label: string;\n hint: string;\n iconSize: 'xs' | 'sm' | 'md';\n}> = {\n sm: { trigger: 'h-8 text-sm', label: 'text-xs font-medium', hint: 'text-xs', iconSize: 'xs' },\n md: { trigger: 'h-10 text-sm', label: 'text-sm font-medium', hint: 'text-xs', iconSize: 'sm' },\n lg: { trigger: 'h-12 text-base', label: 'text-sm font-medium', hint: 'text-sm', iconSize: 'md' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n HostListener,\n inject,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { OverlayModule, ConnectedPosition, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxDatepickerSize, ClxDatepickerStatus } from '../../../types/clx-datepicker.types';\nimport { DATEPICKER_SIZE_MAP } from '../../../configs/datepicker.config';\nimport { INPUT_STATUS_MAP } from '../../../configs/input.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\ninterface CalendarDay {\n date: Date;\n inMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n}\n\nconst MONTH_NAMES_ES = [\n 'Enero','Febrero','Marzo','Abril','Mayo','Junio',\n 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre',\n];\nconst DAY_LABELS = ['Do','Lu','Ma','Mi','Ju','Vi','Sa'];\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n}\n\nfunction startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\n@Component({\n selector: 'clx-datepicker',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, OverlayModule],\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ClxDatepickerComponent), multi: true }],\n template: `\n @if (label()) {\n <label [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <div\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n [class]=\"_triggerClass()\"\n (click)=\"!_disabled() && _togglePanel()\"\n (keydown.enter)=\"!_disabled() && _togglePanel()\"\n (keydown.space)=\"!_disabled() && _togglePanel()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-expanded]=\"_isOpen()\"\n aria-label=\"Selecciona una fecha\">\n\n <div [class]=\"_prefixCellCls()\">\n <span clx-icon name=\"calendar_today\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n\n <span [class]=\"_displayClass()\">{{ _displayValue() }}</span>\n\n @if (_value() && !_disabled()) {\n <div class=\"absolute right-0 top-0 h-full flex items-center pr-1\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"close\" [iconOnly]=\"true\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation(); _clear()\"></button>\n </div>\n }\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayMinWidth]=\"_overlayWidth()\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_closePanel()\"\n (overlayKeydown)=\"_onOverlayKeydown($event)\">\n\n <div [class]=\"_panelClass()\" role=\"dialog\" aria-label=\"Calendario\">\n\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-slate-100\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"chevron_left\" [iconOnly]=\"true\" (click)=\"_prevMonth()\"></button>\n <button type=\"button\" [class]=\"_headerLabelCls()\" (click)=\"_toggleYearView()\">\n {{ _headerLabel() }}\n </button>\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"chevron_right\" [iconOnly]=\"true\" (click)=\"_nextMonth()\"></button>\n </div>\n\n @if (_showYearPicker()) {\n <div class=\"p-3 grid grid-cols-4 gap-1 max-h-52 overflow-y-auto\">\n @for (year of _yearList(); track year) {\n <button type=\"button\" [class]=\"_yearBtnCls(year)\" (click)=\"_selectYear(year)\">{{ year }}</button>\n }\n </div>\n } @else {\n <div class=\"grid grid-cols-7 px-3 pt-3 pb-1\">\n @for (day of _dayLabels; track day) {\n <div class=\"text-center text-xs font-semibold text-slate-400 py-1\">{{ day }}</div>\n }\n </div>\n <div class=\"grid grid-cols-7 px-3 pb-3 gap-y-0.5\">\n @for (cell of _calendarDays(); track cell.date.getTime()) {\n <button type=\"button\" [class]=\"_dayCls(cell)\" [disabled]=\"cell.isDisabled\"\n (click)=\"!cell.isDisabled && _selectDate(cell.date)\">\n {{ cell.date.getDate() }}\n </button>\n }\n </div>\n }\n\n <div class=\"flex items-center justify-between px-4 py-2 border-t border-slate-100\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" size=\"sm\" (click)=\"_selectToday()\">Hoy</button>\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"sm\" (click)=\"_closePanel()\">Cerrar</button>\n </div>\n\n </div>\n </ng-template>\n\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5' },\n})\nexport class ClxDatepickerComponent implements ControlValueAccessor {\n @ViewChild('origin') origin!: ElementRef;\n\n readonly label = input<string>('');\n readonly placeholder = input<string>('Selecciona una fecha');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxDatepickerSize>('md');\n readonly status = input<ClxDatepickerStatus>('default');\n readonly statusMessage = input<string>('');\n readonly hint = input<string>('');\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly value = input<Date | null>(null);\n readonly disabled = input<boolean>(false);\n\n readonly _value = signal<Date | null>(null);\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n private readonly _cursorYear = signal(new Date().getFullYear());\n private readonly _cursorMonth = signal(new Date().getMonth());\n protected readonly _isOpen = signal(false);\n protected readonly _showYearPicker = signal(false);\n protected readonly _dayLabels = DAY_LABELS;\n\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _sso = inject(ScrollStrategyOptions);\n readonly _scrollStrategy = this._sso.reposition();\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => {\n this._value.set(v);\n if (v) { this._cursorYear.set(v.getFullYear()); this._cursorMonth.set(v.getMonth()); }\n });\n });\n\n private _onChange: (v: Date | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n readonly _positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n ];\n\n protected readonly _sizeConfig = computed(() => DATEPICKER_SIZE_MAP[this.size()]);\n protected readonly _statusCfg = computed(() => INPUT_STATUS_MAP[this.status()]);\n protected readonly _overlayWidth = computed(() => {\n this._isOpen();\n return this._el.nativeElement.getBoundingClientRect().width;\n });\n\n protected readonly _labelClass = computed(() => `${this._sizeConfig().label} text-slate-700 leading-none`);\n protected readonly _hintClass = computed(() => `${this._sizeConfig().hint} text-gray-400`);\n protected readonly _statusMsgClass = computed(() => `${this._sizeConfig().hint} ${this._statusCfg().msgCls}`);\n\n protected readonly _prefixCellCls = computed(() => {\n const t = resolveColor(this.color());\n return `px-3 flex items-center shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n protected readonly _triggerClass = computed(() => {\n const size = this._sizeConfig();\n const status = this._statusCfg();\n const focus = resolveColor(this.color()).focus;\n const border = this._disabled() ? 'border-gray-200 bg-gray-50' : `${status.border} focus:outline-none ${focus}`;\n const cursor = this._disabled() ? 'cursor-not-allowed opacity-60' : 'cursor-pointer';\n return `relative flex items-stretch ${size.trigger} rounded-md border ${border} ${cursor} overflow-hidden transition-all duration-200 select-none`;\n });\n\n protected readonly _displayClass = computed(() => {\n const hasValue = !!this._value();\n const color = this._disabled() ? 'text-gray-400' : hasValue ? 'text-slate-700' : 'text-gray-400';\n return `flex-1 pl-3 pr-9 flex items-center text-sm ${color} truncate`;\n });\n\n protected readonly _displayValue = computed(() => {\n const v = this._value();\n if (!v) return this.placeholder();\n return v.toLocaleDateString('es-MX', { day: '2-digit', month: 'long', year: 'numeric' });\n });\n\n protected readonly _panelClass = computed(() =>\n 'bg-white rounded-xl shadow-xl border border-slate-200 overflow-hidden w-full min-w-70',\n );\n\n protected readonly _headerLabel = computed(() =>\n `${MONTH_NAMES_ES[this._cursorMonth()]} ${this._cursorYear()}`,\n );\n\n protected readonly _headerLabelCls = computed(() => {\n const t = resolveColor(this.color());\n return `${t.hoverBgMuted} text-sm font-semibold text-slate-700 px-3 py-1 rounded-lg transition-colors`;\n });\n\n protected readonly _yearList = computed(() => {\n const y = this._cursorYear();\n const years: number[] = [];\n for (let i = y - 12; i <= y + 12; i++) years.push(i);\n return years;\n });\n\n protected readonly _calendarDays = computed((): CalendarDay[] => {\n const year = this._cursorYear();\n const month = this._cursorMonth();\n const today = startOfDay(new Date());\n const selected = this._value() ? startOfDay(this._value()!) : null;\n const min = this.minDate() ? startOfDay(this.minDate()!) : null;\n const max = this.maxDate() ? startOfDay(this.maxDate()!) : null;\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const days: CalendarDay[] = [];\n\n for (let i = firstDay.getDay() - 1; i >= 0; i--) {\n const d = new Date(year, month, -i);\n days.push({ date: d, inMonth: false, isToday: isSameDay(d, today), isSelected: false, isDisabled: true });\n }\n for (let d = 1; d <= lastDay.getDate(); d++) {\n const date = new Date(year, month, d);\n const disabled = (min !== null && date < min) || (max !== null && date > max);\n days.push({ date, inMonth: true, isToday: isSameDay(date, today), isSelected: selected ? isSameDay(date, selected) : false, isDisabled: disabled });\n }\n for (let i = 1; i <= 42 - days.length; i++) {\n const d = new Date(year, month + 1, i);\n days.push({ date: d, inMonth: false, isToday: isSameDay(d, today), isSelected: false, isDisabled: true });\n }\n return days;\n });\n\n protected _dayCls(cell: CalendarDay): string {\n const base = 'w-9 h-9 flex items-center justify-center text-sm rounded-full transition-colors focus:outline-none mx-auto';\n const t = resolveColor(this.color());\n if (cell.isSelected) return `${base} ${t.bg} ${t.text} font-semibold`;\n if (cell.isDisabled) return `${base} text-gray-200 cursor-not-allowed`;\n if (!cell.inMonth) return `${base} text-gray-300 ${t.hoverBgMuted} cursor-pointer`;\n let cls = `${base} text-slate-700 ${t.hoverBgMuted} cursor-pointer`;\n if (cell.isToday) cls += ` ring-2 ${t.ring}`;\n return cls;\n }\n\n protected _yearBtnCls(year: number): string {\n const base = 'py-1.5 text-sm rounded-lg transition-colors text-center';\n const t = resolveColor(this.color());\n return year === this._cursorYear()\n ? `${base} ${t.bg} ${t.text} font-semibold`\n : `${base} text-slate-600 ${t.hoverBgMuted} cursor-pointer`;\n }\n\n protected _togglePanel(): void { this._isOpen() ? this._closePanel() : this._openPanel(); }\n protected _closePanel(): void { this._isOpen.set(false); this._showYearPicker.set(false); this._onTouched(); }\n protected _toggleYearView(): void { this._showYearPicker.update(v => !v); }\n protected _selectYear(year: number): void { this._cursorYear.set(year); this._showYearPicker.set(false); }\n\n private _openPanel(): void {\n const v = this._value();\n if (v) { this._cursorYear.set(v.getFullYear()); this._cursorMonth.set(v.getMonth()); }\n this._showYearPicker.set(false);\n this._isOpen.set(true);\n }\n\n protected _prevMonth(): void {\n let m = this._cursorMonth() - 1, y = this._cursorYear();\n if (m < 0) { m = 11; y--; }\n this._cursorMonth.set(m); this._cursorYear.set(y);\n }\n\n protected _nextMonth(): void {\n let m = this._cursorMonth() + 1, y = this._cursorYear();\n if (m > 11) { m = 0; y++; }\n this._cursorMonth.set(m); this._cursorYear.set(y);\n }\n\n protected _selectDate(date: Date): void {\n const d = startOfDay(date);\n this._value.set(d);\n this._onChange(d);\n this._closePanel();\n }\n\n protected _selectToday(): void {\n const today = startOfDay(new Date());\n const min = this.minDate() ? startOfDay(this.minDate()!) : null;\n const max = this.maxDate() ? startOfDay(this.maxDate()!) : null;\n if ((min && today < min) || (max && today > max)) return;\n this._selectDate(today);\n }\n\n protected _clear(): void { this._value.set(null); this._onChange(null); }\n\n @HostListener('keydown.escape')\n onEscape(): void { if (this._isOpen()) this._closePanel(); }\n\n protected _onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._closePanel();\n }\n\n writeValue(val: Date | null): void {\n this._cvaConnected = true;\n const d = val ? startOfDay(val) : null;\n this._value.set(d);\n if (d) { this._cursorYear.set(d.getFullYear()); this._cursorMonth.set(d.getMonth()); }\n }\n\n registerOnChange(fn: (v: Date | null) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n setDisabledState(disabled: boolean): void { this._cvaDisabled.set(disabled); }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n HostListener,\n inject,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { OverlayModule, ConnectedPosition, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxDateRange, ClxDateRangePickerSize, ClxDateRangePickerStatus } from '../../../types/clx-date-range-picker.types';\nimport { DATEPICKER_SIZE_MAP } from '../../../configs/datepicker.config';\nimport { INPUT_STATUS_MAP } from '../../../configs/input.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\n// ── Calendar helpers ───────────────────────────────────────────────────────────\ninterface CalendarDay {\n date: Date;\n inMonth: boolean;\n isToday: boolean;\n isDisabled: boolean;\n}\n\nconst MONTH_NAMES_ES = [\n 'Enero','Febrero','Marzo','Abril','Mayo','Junio',\n 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre',\n];\nconst DAY_LABELS = ['Do','Lu','Ma','Mi','Ju','Vi','Sa'];\n\nfunction startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\nfunction isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\nfunction isBefore(a: Date, b: Date): boolean { return a.getTime() < b.getTime(); }\nfunction isAfter(a: Date, b: Date): boolean { return a.getTime() > b.getTime(); }\nfunction isBetween(d: Date, from: Date, to: Date): boolean {\n return d.getTime() > from.getTime() && d.getTime() < to.getTime();\n}\nfunction formatShort(d: Date): string {\n return d.toLocaleDateString('es-MX', { day: '2-digit', month: 'short', year: 'numeric' });\n}\nfunction addMonths(year: number, month: number, delta: number): { year: number; month: number } {\n let m = month + delta;\n let y = year;\n while (m > 11) { m -= 12; y++; }\n while (m < 0) { m += 12; y--; }\n return { year: y, month: m };\n}\nfunction buildCalendar(year: number, month: number, minDate: Date | null, maxDate: Date | null): CalendarDay[] {\n const today = startOfDay(new Date());\n const min = minDate ? startOfDay(minDate) : null;\n const max = maxDate ? startOfDay(maxDate) : null;\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const days: CalendarDay[] = [];\n for (let i = firstDay.getDay() - 1; i >= 0; i--) {\n const d = new Date(year, month, -i);\n days.push({ date: d, inMonth: false, isToday: isSameDay(d, today), isDisabled: true });\n }\n for (let d = 1; d <= lastDay.getDate(); d++) {\n const date = new Date(year, month, d);\n const disabled = (min !== null && date < min) || (max !== null && date > max);\n days.push({ date, inMonth: true, isToday: isSameDay(date, today), isDisabled: disabled });\n }\n for (let i = 1; i <= 42 - days.length; i++) {\n const d = new Date(year, month + 1, i);\n days.push({ date: d, inMonth: false, isToday: isSameDay(d, today), isDisabled: true });\n }\n return days;\n}\n\n// ── Presets ────────────────────────────────────────────────────────────────────\ninterface DatePreset { label: string; range: () => ClxDateRange }\nconst DATE_PRESETS: DatePreset[] = [\n { label: 'Hoy', range: () => { const t = startOfDay(new Date()); return { from: t, to: t }; } },\n { label: 'Esta semana', range: () => { const t = startOfDay(new Date()); const d = t.getDay(); const f = new Date(t); f.setDate(t.getDate() - d); const e = new Date(f); e.setDate(f.getDate() + 6); return { from: f, to: e }; } },\n { label: 'Este mes', range: () => { const t = new Date(); return { from: new Date(t.getFullYear(), t.getMonth(), 1), to: new Date(t.getFullYear(), t.getMonth() + 1, 0) }; } },\n { label: 'Mes anterior', range: () => { const t = new Date(); return { from: new Date(t.getFullYear(), t.getMonth() - 1, 1), to: new Date(t.getFullYear(), t.getMonth(), 0) }; } },\n { label: 'Último trimestre', range: () => { const t = new Date(); const q = Math.floor(t.getMonth() / 3); return { from: new Date(t.getFullYear(), (q - 1) * 3, 1), to: new Date(t.getFullYear(), q * 3, 0) }; } },\n { label: 'Este año', range: () => { const y = new Date().getFullYear(); return { from: new Date(y, 0, 1), to: new Date(y, 11, 31) }; } },\n];\n\n@Component({\n selector: 'clx-date-range-picker',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, OverlayModule],\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ClxDateRangePickerComponent), multi: true }],\n template: `\n @if (label()) {\n <label [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <!-- ── Trigger ─────────────────────────────────────────────────────────── -->\n <div\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n [class]=\"_triggerClass()\"\n (click)=\"!_disabled() && _togglePanel()\"\n (keydown.enter)=\"!_disabled() && _togglePanel()\"\n (keydown.space)=\"!_disabled() && _togglePanel()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-expanded]=\"_isOpen()\"\n aria-label=\"Selecciona un rango de fechas\">\n\n <div [class]=\"_prefixCellCls()\">\n <span clx-icon name=\"date_range\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n\n <span [class]=\"_displayClass()\">{{ _displayValue() }}</span>\n\n @if (_hasValue() && !_disabled()) {\n <div class=\"absolute right-0 top-0 h-full flex items-center pr-1\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"close\" [iconOnly]=\"true\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation(); _clear()\"></button>\n </div>\n }\n </div>\n\n <!-- ── Overlay panel ───────────────────────────────────────────────────── -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_cancel()\"\n (overlayKeydown)=\"_onOverlayKeydown($event)\">\n\n <div class=\"bg-white rounded-xl shadow-xl border border-slate-200 overflow-hidden\" role=\"dialog\" aria-label=\"Rango de fechas\">\n\n <div class=\"flex\">\n\n <!-- Presets sidebar -->\n <div class=\"flex flex-col border-r border-slate-100 py-3 shrink-0 min-w-36\">\n <p class=\"px-4 pb-2 text-xs font-semibold text-slate-400 uppercase tracking-wide\">Presets</p>\n @for (preset of _presets; track preset.label) {\n <button type=\"button\" [class]=\"_presetCls(preset)\" (click)=\"_applyPreset(preset)\">\n {{ preset.label }}\n </button>\n }\n </div>\n\n <!-- Calendars -->\n <div class=\"flex flex-col\">\n <div class=\"flex divide-x divide-slate-100\">\n\n <!-- Left calendar (cursor month) -->\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"chevron_left\" [iconOnly]=\"true\" (click)=\"_prevMonth()\"></button>\n <span class=\"text-sm font-semibold text-slate-700\">{{ _leftLabel() }}</span>\n <div class=\"w-9\"></div>\n </div>\n <div class=\"grid grid-cols-7 mb-1\">\n @for (day of _dayLabels; track day) {\n <div class=\"w-9 text-center text-xs font-semibold text-slate-400 py-1\">{{ day }}</div>\n }\n </div>\n <div class=\"grid grid-cols-7 gap-y-0.5\">\n @for (cell of _leftDays(); track cell.date.getTime()) {\n <button type=\"button\" [class]=\"_dayCls(cell)\"\n [disabled]=\"cell.isDisabled\"\n (mouseenter)=\"!cell.isDisabled && _onHover(cell.date)\"\n (mouseleave)=\"_hoverDate.set(null)\"\n (click)=\"!cell.isDisabled && _selectDate(cell.date)\">\n {{ cell.date.getDate() }}\n </button>\n }\n </div>\n </div>\n\n <!-- Right calendar (cursor month + 1) -->\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"w-9\"></div>\n <span class=\"text-sm font-semibold text-slate-700\">{{ _rightLabel() }}</span>\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"chevron_right\" [iconOnly]=\"true\" (click)=\"_nextMonth()\"></button>\n </div>\n <div class=\"grid grid-cols-7 mb-1\">\n @for (day of _dayLabels; track day) {\n <div class=\"w-9 text-center text-xs font-semibold text-slate-400 py-1\">{{ day }}</div>\n }\n </div>\n <div class=\"grid grid-cols-7 gap-y-0.5\">\n @for (cell of _rightDays(); track cell.date.getTime()) {\n <button type=\"button\" [class]=\"_dayCls(cell)\"\n [disabled]=\"cell.isDisabled\"\n (mouseenter)=\"!cell.isDisabled && _onHover(cell.date)\"\n (mouseleave)=\"_hoverDate.set(null)\"\n (click)=\"!cell.isDisabled && _selectDate(cell.date)\">\n {{ cell.date.getDate() }}\n </button>\n }\n </div>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"flex items-center justify-between px-4 py-3 border-t border-slate-100\">\n <span class=\"text-xs text-slate-500\">\n @if (_draftFrom()) {\n {{ _formatShort(_draftFrom()!) }}\n @if (_draftTo()) { <span class=\"mx-1\">→</span> {{ _formatShort(_draftTo()!) }} }\n @else { <span class=\"mx-1 text-slate-300\">→ ...</span> }\n } @else {\n Selecciona fecha de inicio\n }\n </span>\n <div class=\"flex items-center gap-2\">\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"sm\" (click)=\"_cancel()\">Cancelar</button>\n <button clx-button variant=\"solid\" [color]=\"color()\" size=\"sm\"\n [disabled]=\"!_canApply()\"\n (click)=\"_apply()\">\n Aplicar\n </button>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n </ng-template>\n\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5' },\n})\nexport class ClxDateRangePickerComponent implements ControlValueAccessor {\n\n readonly label = input<string>('');\n readonly placeholder = input<string>('Selecciona un rango');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxDateRangePickerSize>('md');\n readonly status = input<ClxDateRangePickerStatus>('default');\n readonly statusMessage = input<string>('');\n readonly hint = input<string>('');\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly value = input<ClxDateRange | null>(null);\n readonly disabled = input<boolean>(false);\n\n // ── Committed value (emitted on Apply) ────────────────────────────────────\n private readonly _committed = signal<ClxDateRange | null>(null);\n private _cvaConnected = false;\n\n // ── Draft (in-progress selection inside the panel) ────────────────────────\n protected readonly _draftFrom = signal<Date | null>(null);\n protected readonly _draftTo = signal<Date | null>(null);\n protected readonly _hoverDate = signal<Date | null>(null);\n\n protected readonly _presets = DATE_PRESETS;\n protected readonly _dayLabels = DAY_LABELS;\n\n private readonly _cvaDisabled = signal(false);\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n protected readonly _isOpen = signal(false);\n\n // Cursor: left calendar month\n private readonly _cursorYear = signal(new Date().getFullYear());\n private readonly _cursorMonth = signal(new Date().getMonth());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => {\n this._committed.set(v);\n if (v) {\n this._draftFrom.set(startOfDay(v.from));\n this._draftTo.set(startOfDay(v.to));\n this._cursorYear.set(v.from.getFullYear());\n this._cursorMonth.set(v.from.getMonth());\n } else {\n this._draftFrom.set(null);\n this._draftTo.set(null);\n }\n });\n });\n\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _sso = inject(ScrollStrategyOptions);\n readonly _scrollStrategy = this._sso.reposition();\n\n private _onChange: (v: ClxDateRange | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n readonly _positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n ];\n\n // ── Config ─────────────────────────────────────────────────────────────────\n protected readonly _sizeConfig = computed(() => DATEPICKER_SIZE_MAP[this.size()]);\n protected readonly _statusCfg = computed(() => INPUT_STATUS_MAP[this.status()]);\n\n // ── Calendar labels ────────────────────────────────────────────────────────\n protected readonly _leftLabel = computed(() =>\n `${MONTH_NAMES_ES[this._cursorMonth()]} ${this._cursorYear()}`,\n );\n protected readonly _rightLabel = computed(() => {\n const { year, month } = addMonths(this._cursorYear(), this._cursorMonth(), 1);\n return `${MONTH_NAMES_ES[month]} ${year}`;\n });\n\n // ── Calendar days ──────────────────────────────────────────────────────────\n protected readonly _leftDays = computed(() =>\n buildCalendar(this._cursorYear(), this._cursorMonth(), this.minDate(), this.maxDate()),\n );\n protected readonly _rightDays = computed(() => {\n const { year, month } = addMonths(this._cursorYear(), this._cursorMonth(), 1);\n return buildCalendar(year, month, this.minDate(), this.maxDate());\n });\n\n // ── Display ────────────────────────────────────────────────────────────────\n protected readonly _hasValue = computed(() => !!this._committed());\n protected readonly _displayValue = computed(() => {\n const r = this._committed();\n if (!r) return this.placeholder();\n return `${formatShort(r.from)} — ${formatShort(r.to)}`;\n });\n protected readonly _canApply = computed(() => !!this._draftFrom() && !!this._draftTo());\n\n // ── Classes ────────────────────────────────────────────────────────────────\n protected readonly _labelClass = computed(() => `${this._sizeConfig().label} text-slate-700 leading-none`);\n protected readonly _hintClass = computed(() => `${this._sizeConfig().hint} text-gray-400`);\n protected readonly _statusMsgClass = computed(() => `${this._sizeConfig().hint} ${this._statusCfg().msgCls}`);\n\n protected readonly _prefixCellCls = computed(() => {\n const t = resolveColor(this.color());\n return `px-3 flex items-center shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n protected readonly _triggerClass = computed(() => {\n const size = this._sizeConfig();\n const status = this._statusCfg();\n const focus = resolveColor(this.color()).focus;\n const border = this._disabled() ? 'border-gray-200 bg-gray-50' : `${status.border} focus:outline-none ${focus}`;\n const cursor = this._disabled() ? 'cursor-not-allowed opacity-60' : 'cursor-pointer';\n return `relative flex items-stretch ${size.trigger} rounded-md border ${border} ${cursor} overflow-hidden transition-all duration-200 select-none`;\n });\n\n protected readonly _displayClass = computed(() => {\n const color = this._disabled() ? 'text-gray-400' : this._hasValue() ? 'text-slate-700' : 'text-gray-400';\n return `flex-1 pl-3 pr-9 flex items-center text-sm ${color} truncate`;\n });\n\n // ── Day cell styling ───────────────────────────────────────────────────────\n protected _dayCls(cell: CalendarDay): string {\n const t = resolveColor(this.color());\n const base = 'w-9 h-9 flex items-center justify-center text-sm transition-colors focus:outline-none relative';\n\n if (cell.isDisabled) return `${base} text-gray-200 cursor-not-allowed rounded-full`;\n\n const d = startOfDay(cell.date);\n const from = this._draftFrom();\n const to = this._draftTo();\n const hover = this._hoverDate();\n const effTo = to ?? (hover && from && isAfter(hover, from) ? hover : null);\n\n const isFrom = !!from && isSameDay(d, from);\n const isTo = !!effTo && isSameDay(d, effTo);\n const inBetween = !!from && !!effTo && isBetween(d, from, effTo);\n\n if (isFrom && isTo) return `${base} ${t.bg} ${t.text} font-semibold rounded-full cursor-pointer`;\n if (isFrom) return `${base} ${t.bg} ${t.text} font-semibold rounded-l-full cursor-pointer`;\n if (isTo) return `${base} ${t.bg} ${t.text} font-semibold rounded-r-full cursor-pointer`;\n if (inBetween) return `${base} ${t.bgSubtle} ${t.textSubtle} rounded-none cursor-pointer`;\n\n if (!cell.inMonth) return `${base} text-gray-300 ${t.hoverBgMuted} rounded-full cursor-pointer`;\n\n let cls = `${base} text-slate-700 ${t.hoverBgMuted} rounded-full cursor-pointer`;\n if (cell.isToday) cls += ` ring-2 ${t.ring}`;\n return cls;\n }\n\n // ── Preset styling ─────────────────────────────────────────────────────────\n protected _presetCls(preset: DatePreset): string {\n const r = preset.range();\n const from = this._draftFrom();\n const to = this._draftTo();\n const active = from && to && isSameDay(from, r.from) && isSameDay(to, r.to);\n const t = resolveColor(this.color());\n const base = 'text-left px-4 py-1.5 text-xs whitespace-nowrap transition-colors';\n return active\n ? `${base} ${t.bgSubtle} ${t.textSubtle} font-semibold`\n : `${base} text-slate-600 hover:bg-slate-50`;\n }\n\n protected _formatShort(d: Date): string { return formatShort(d); }\n\n // ── Selection logic ────────────────────────────────────────────────────────\n protected _selectDate(date: Date): void {\n const d = startOfDay(date);\n const from = this._draftFrom();\n\n // Reset and start new if no from, or both already set, or clicked before from\n if (!from || (from && this._draftTo()) || isBefore(d, from)) {\n this._draftFrom.set(d);\n this._draftTo.set(null);\n this._hoverDate.set(null);\n } else {\n this._draftTo.set(d);\n this._hoverDate.set(null);\n }\n }\n\n protected _onHover(date: Date): void {\n if (this._draftFrom() && !this._draftTo()) {\n this._hoverDate.set(startOfDay(date));\n }\n }\n\n protected _applyPreset(preset: DatePreset): void {\n const r = preset.range();\n this._draftFrom.set(r.from);\n this._draftTo.set(r.to);\n this._hoverDate.set(null);\n // Navigate left calendar to preset start month\n this._cursorYear.set(r.from.getFullYear());\n this._cursorMonth.set(r.from.getMonth());\n }\n\n // ── Panel control ──────────────────────────────────────────────────────────\n protected _togglePanel(): void { this._isOpen() ? this._cancel() : this._openPanel(); }\n\n private _openPanel(): void {\n // Init draft from committed value\n const r = this._committed();\n if (r) {\n this._draftFrom.set(r.from);\n this._draftTo.set(r.to);\n this._cursorYear.set(r.from.getFullYear());\n this._cursorMonth.set(r.from.getMonth());\n } else {\n this._draftFrom.set(null);\n this._draftTo.set(null);\n }\n this._hoverDate.set(null);\n this._isOpen.set(true);\n }\n\n protected _cancel(): void {\n this._isOpen.set(false);\n this._onTouched();\n }\n\n protected _apply(): void {\n const from = this._draftFrom();\n const to = this._draftTo();\n if (!from || !to) return;\n const range: ClxDateRange = { from, to };\n this._committed.set(range);\n this._onChange(range);\n this._isOpen.set(false);\n this._onTouched();\n }\n\n protected _clear(): void {\n this._committed.set(null);\n this._draftFrom.set(null);\n this._draftTo.set(null);\n this._onChange(null);\n }\n\n // ── Navigation ─────────────────────────────────────────────────────────────\n protected _prevMonth(): void {\n const { year, month } = addMonths(this._cursorYear(), this._cursorMonth(), -1);\n this._cursorYear.set(year); this._cursorMonth.set(month);\n }\n\n protected _nextMonth(): void {\n const { year, month } = addMonths(this._cursorYear(), this._cursorMonth(), 1);\n this._cursorYear.set(year); this._cursorMonth.set(month);\n }\n\n @HostListener('keydown.escape')\n onEscape(): void { if (this._isOpen()) this._cancel(); }\n\n protected _onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._cancel();\n }\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n writeValue(val: ClxDateRange | null): void {\n this._cvaConnected = true;\n const r = val ?? null;\n this._committed.set(r);\n if (r) {\n this._draftFrom.set(startOfDay(r.from));\n this._draftTo.set(startOfDay(r.to));\n this._cursorYear.set(r.from.getFullYear());\n this._cursorMonth.set(r.from.getMonth());\n } else {\n this._draftFrom.set(null);\n this._draftTo.set(null);\n }\n }\n\n registerOnChange(fn: (v: ClxDateRange | null) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n setDisabledState(disabled: boolean): void { this._cvaDisabled.set(disabled); }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ClxModalComponent } from '../../advanced/clx-modal/clx-modal.component';\nimport { ClxInputComponent } from '../clx-input/clx-input.component';\nimport { CLX_MODAL_REF } from '../../../configs/modal.config';\n\n@Component({\n selector: 'clx-editor-link-modal',\n standalone: true,\n imports: [ClxModalComponent, ClxInputComponent, ReactiveFormsModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <clx-modal\n size=\"sm\"\n [confirmButton]=\"{ text: 'Insertar', color: 'indigo' }\"\n [cancelButton]=\"{ text: 'Cancelar', color: 'slate', variant: 'ghost' }\"\n [showCancelButton]=\"true\"\n (confirmClick)=\"_confirm()\"\n (cancelClick)=\"_cancel()\">\n\n <span clx-modal-title class=\"text-base font-semibold text-slate-800\">\n Insertar enlace\n </span>\n\n <form [formGroup]=\"_form\" class=\"space-y-4\" (ngSubmit)=\"_confirm()\">\n <clx-input\n label=\"Texto\"\n placeholder=\"Texto del enlace\"\n formControlName=\"text\"\n color=\"indigo\">\n </clx-input>\n <clx-input\n label=\"URL\"\n placeholder=\"https://ejemplo.com\"\n formControlName=\"url\"\n [status]=\"_urlInvalid() ? 'error' : 'default'\"\n statusMessage=\"Ingresa una URL válida\"\n color=\"indigo\">\n </clx-input>\n </form>\n\n </clx-modal>\n `,\n})\nexport class ClxEditorLinkModalComponent {\n private readonly _modalRef = inject(CLX_MODAL_REF, { optional: true });\n\n protected readonly _form = new FormGroup({\n text: new FormControl('', { nonNullable: true }),\n url: new FormControl('', { nonNullable: true, validators: [Validators.required, Validators.pattern(/^https?:\\/\\/.+/)] }),\n });\n\n protected readonly _urlInvalid = signal(false);\n\n protected _confirm(): void {\n const url = this._form.controls.url.value.trim();\n const text = this._form.controls.text.value.trim();\n if (!url || this._form.controls.url.invalid) {\n this._urlInvalid.set(true);\n return;\n }\n this._modalRef?.close({ url, text });\n }\n\n protected _cancel(): void {\n this._modalRef?.close(undefined);\n }\n}\n","import type { ClxEditorSize } from '../types/clx-editor.types';\n\nexport const EDITOR_SIZE_MAP: Record<ClxEditorSize, {\n minH: string;\n maxH: string;\n text: string;\n label: string;\n hint: string;\n toolbar: string;\n}> = {\n sm: { minH: 'min-h-[120px]', maxH: 'max-h-[200px]', text: 'text-sm', label: 'text-xs font-medium', hint: 'text-xs', toolbar: 'p-1 gap-0.5' },\n md: { minH: 'min-h-[180px]', maxH: 'max-h-[320px]', text: 'text-sm', label: 'text-sm font-medium', hint: 'text-xs', toolbar: 'p-1.5 gap-0.5' },\n lg: { minH: 'min-h-[260px]', maxH: 'max-h-[480px]', text: 'text-base', label: 'text-sm font-medium', hint: 'text-sm', toolbar: 'p-2 gap-1' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n model,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ComponentPortal, PortalModule } from '@angular/cdk/portal';\nimport { ClxAnimateService } from '../../../services/clx-animate.service';\nimport {\n CLX_MODAL_ANIM_CONFIG,\n MODAL_ANIM_DEFAULTS,\n type ClxModalAnimConfig,\n} from '../../../configs/modal.config';\n\n/**\n * Internal shell component — mounted via ComponentPortal onto the CDK overlay.\n * Renders the user's component via a second ComponentPortal inside cdkPortalOutlet.\n * Owns the enter / exit animation so every modal gets consistent motion.\n */\n@Component({\n selector: 'clx-modal-wrapper',\n standalone: true,\n imports: [PortalModule],\n template: `<ng-container [cdkPortalOutlet]=\"portal()\" />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display:contents' },\n})\nexport class ClxModalWrapperComponent implements OnInit {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n portal = model<ComponentPortal<any> | null>(null);\n\n private readonly _animate = inject(ClxAnimateService);\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _animConfig = inject<ClxModalAnimConfig>(CLX_MODAL_ANIM_CONFIG, { optional: true })\n ?? MODAL_ANIM_DEFAULTS;\n\n /** Resolved by ClxModalService so closeWithAnimation can call through */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClose?: (result?: any) => void;\n\n ngOnInit(): void {\n const target = this._panel();\n if (target) {\n this._animate.animate(target, {\n animation: this._animConfig.animationIn as never,\n duration: this._animConfig.animationDuration,\n trigger: 'manual',\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n closeWithAnimation(result?: any): void {\n const target = this._panel();\n if (!target) { this.onClose?.(result); return; }\n\n this._animate\n .animate(target, {\n animation: this._animConfig.animationOut as never,\n duration: this._animConfig.animationDuration,\n trigger: 'manual',\n fillMode: 'forwards',\n })\n .then(() => this.onClose?.(result));\n }\n\n /**\n * Returns the first real element child of this wrapper — which is the\n * rendered panel (clx-modal host) inserted by cdkPortalOutlet.\n * The wrapper itself is display:contents so the panel is its direct child.\n */\n private _panel(): HTMLElement | null {\n return (this._el.nativeElement as HTMLElement).firstElementChild as HTMLElement | null;\n }\n}\n","import {\n inject,\n Injectable,\n Injector,\n} from '@angular/core';\nimport {\n Overlay,\n OverlayConfig,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport type { ClxModalConfig, ClxModalRef } from '../types/clx-modal.types';\nimport {\n CLX_MODAL_DATA,\n CLX_MODAL_REF,\n CLX_MODAL_SIZE,\n CLX_MODAL_ANIM_CONFIG,\n MODAL_ANIM_DEFAULTS,\n type ClxModalAnimConfig,\n} from '../configs/modal.config';\nimport { ClxModalWrapperComponent } from '../components/advanced/clx-modal/clx-modal-wrapper.component';\n\n@Injectable({ providedIn: 'root' })\nexport class ClxModalService {\n private readonly _overlay: Overlay;\n private readonly _injector: Injector;\n private readonly _focusTrapFactory: FocusTrapFactory;\n\n constructor() {\n this._overlay = inject(Overlay);\n this._injector = inject(Injector);\n this._focusTrapFactory = inject(FocusTrapFactory);\n }\n\n open<R = unknown, D = unknown>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: new (...args: any[]) => any,\n config: ClxModalConfig<D> = {},\n ): ClxModalRef<R> {\n const {\n hasBackdrop = true,\n disableClose = false,\n panelClass = [],\n size = 'md',\n data,\n animationIn = MODAL_ANIM_DEFAULTS.animationIn,\n animationOut = MODAL_ANIM_DEFAULTS.animationOut,\n animationDuration = MODAL_ANIM_DEFAULTS.animationDuration,\n } = config;\n\n const animConfig: ClxModalAnimConfig = { animationIn, animationOut, animationDuration };\n\n let _resolve!: (value: R | undefined) => void;\n const _afterClosed = new Promise<R | undefined>(res => (_resolve = res));\n let _focusTrap: FocusTrap | null = null;\n let _closing = false;\n\n /** Plays exit animation then tears down the overlay. */\n const closeViaAnimation = (result?: R) => {\n if (_closing) return;\n _closing = true;\n wrapperRef.instance.closeWithAnimation(result);\n };\n\n const modalRef: ClxModalRef<R> = {\n close(result?: R): void { closeViaAnimation(result); },\n afterClosed(): Promise<R | undefined> { return _afterClosed; },\n };\n\n const extraClasses = Array.isArray(panelClass) ? panelClass : [panelClass];\n\n const overlayRef: OverlayRef = this._overlay.create(new OverlayConfig({\n hasBackdrop,\n backdropClass: 'clx-modal-backdrop',\n panelClass: extraClasses,\n scrollStrategy: this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),\n }));\n\n Object.assign(overlayRef.overlayElement.style, {\n position: 'fixed',\n inset: '0',\n width: '100vw',\n height: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1rem',\n boxSizing: 'border-box',\n });\n\n const innerInjector = Injector.create({\n parent: this._injector,\n providers: [\n { provide: CLX_MODAL_DATA, useValue: data ?? null },\n { provide: CLX_MODAL_REF, useValue: modalRef },\n { provide: CLX_MODAL_ANIM_CONFIG, useValue: animConfig },\n { provide: CLX_MODAL_SIZE, useValue: size },\n ],\n });\n\n // Attach wrapper — CDK creates the backdrop on attach()\n const wrapperPortal = new ComponentPortal(ClxModalWrapperComponent, null, innerInjector);\n const wrapperRef = overlayRef.attach(wrapperPortal) as import('@angular/core').ComponentRef<ClxModalWrapperComponent>;\n\n // Wire the actual teardown through the wrapper instance\n wrapperRef.instance.onClose = (result?: R) => {\n _focusTrap?.destroy();\n overlayRef.dispose();\n _resolve(result);\n };\n\n // Mount user component inside the wrapper via a second portal\n const contentPortal = new ComponentPortal(component, null, innerInjector);\n wrapperRef.instance.portal.set(contentPortal);\n\n if (hasBackdrop && !disableClose) {\n overlayRef.backdropClick().subscribe(() => closeViaAnimation());\n }\n if (!disableClose) {\n overlayRef.keydownEvents().subscribe(e => { if (e.key === 'Escape') closeViaAnimation(); });\n }\n\n _focusTrap = this._focusTrapFactory.create(overlayRef.overlayElement);\n _focusTrap.focusInitialElementWhenReady();\n\n return modalRef;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n signal,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxSelectComponent } from '../clx-select/clx-select.component';\nimport { ClxEditorLinkModalComponent } from './clx-editor-link-modal.component';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxEditorSize } from '../../../types/clx-editor.types';\nimport type { ClxSelectOption } from '../../../types/clx-select.types';\nimport { INPUT_STATUS_MAP } from '../../../configs/input.config';\nimport { EDITOR_SIZE_MAP } from '../../../configs/editor.config';\nimport { ClxModalService } from '../../../services/clx-modal.service';\n\nlet _clxEditorId = 0;\n\ninterface ToolBtn {\n cmd: string;\n arg?: string;\n icon: string;\n title: string;\n mark?: string;\n}\n\nconst TOOLBAR_GROUPS: ToolBtn[][] = [\n [\n { cmd: 'bold', icon: 'format_bold', title: 'Negrita', mark: 'bold' },\n { cmd: 'italic', icon: 'format_italic', title: 'Cursiva', mark: 'italic' },\n { cmd: 'underline', icon: 'format_underlined', title: 'Subrayado', mark: 'underline' },\n { cmd: 'strikeThrough', icon: 'strikethrough_s', title: 'Tachado', mark: 'strikeThrough' },\n ],\n [\n { cmd: 'superscript', icon: 'superscript', title: 'Superíndice', mark: 'superscript' },\n { cmd: 'subscript', icon: 'subscript', title: 'Subíndice', mark: 'subscript' },\n ],\n [\n { cmd: 'justifyLeft', icon: 'format_align_left', title: 'Izquierda', mark: 'justifyLeft' },\n { cmd: 'justifyCenter', icon: 'format_align_center', title: 'Centrar', mark: 'justifyCenter'},\n { cmd: 'justifyRight', icon: 'format_align_right', title: 'Derecha', mark: 'justifyRight' },\n { cmd: 'justifyFull', icon: 'format_align_justify', title: 'Justificar', mark: 'justifyFull' },\n ],\n [\n { cmd: 'blockquote', icon: 'format_quote', title: 'Cita' },\n { cmd: 'insertCode', icon: 'code', title: 'Código' },\n ],\n [\n { cmd: 'insertUnorderedList', icon: 'format_list_bulleted', title: 'Lista viñetas', mark: 'insertUnorderedList' },\n { cmd: 'insertOrderedList', icon: 'format_list_numbered', title: 'Lista numerada', mark: 'insertOrderedList' },\n { cmd: 'outdent', icon: 'format_indent_decrease', title: 'Quitar sangría' },\n { cmd: 'indent', icon: 'format_indent_increase', title: 'Sangría' },\n ],\n [\n { cmd: 'createLink', icon: 'link', title: 'Enlace' },\n { cmd: 'removeFormat', icon: 'format_clear', title: 'Limpiar formato' },\n { cmd: 'undo', icon: 'undo', title: 'Deshacer' },\n { cmd: 'redo', icon: 'redo', title: 'Rehacer' },\n ],\n];\n\nconst FONT_OPTIONS: ClxSelectOption[] = [\n { value: 'Roboto', label: 'Roboto' },\n { value: 'Arial', label: 'Arial' },\n { value: 'Georgia', label: 'Georgia' },\n { value: 'Times New Roman', label: 'Times New Roman' },\n { value: 'Courier New', label: 'Courier New' },\n { value: 'Verdana', label: 'Verdana' },\n { value: 'Trebuchet MS', label: 'Trebuchet MS' },\n { value: 'sans-serif', label: 'Sans Serif' },\n { value: 'serif', label: 'Serif' },\n { value: 'monospace', label: 'Mono' },\n];\n\nconst HEADING_OPTIONS: ClxSelectOption[] = [\n { value: 'p', label: 'Normal' },\n { value: 'h1', label: 'H1' },\n { value: 'h2', label: 'H2' },\n { value: 'h3', label: 'H3' },\n];\n\n@Component({\n selector: 'clx-editor',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, ClxSelectComponent, ReactiveFormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxEditorComponent),\n multi: true,\n },\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [`\n .clx-editor-body:empty::before {\n content: attr(data-placeholder);\n color: #9ca3af;\n pointer-events: none;\n }\n .clx-editor-body:focus { outline: none; }\n .clx-editor-body p { margin: 0 0 .4em; }\n .clx-editor-body p:last-child { margin-bottom: 0; }\n .clx-editor-body h1 { font-size: 1.5em; font-weight: 700; margin: .5em 0; }\n .clx-editor-body h2 { font-size: 1.25em; font-weight: 600; margin: .5em 0; }\n .clx-editor-body h3 { font-size: 1.1em; font-weight: 600; margin: .5em 0; }\n .clx-editor-body ul,\n .clx-editor-body ol { padding-left: 1.5em; margin: .35em 0; }\n .clx-editor-body li { margin: .1em 0; }\n .clx-editor-body blockquote {\n border-left: 3px solid #e2e8f0;\n padding-left: .75em;\n color: #64748b;\n margin: .4em 0;\n }\n .clx-editor-body code {\n background: #f1f5f9;\n border-radius: 3px;\n padding: .1em .3em;\n font-size: .875em;\n font-family: ui-monospace, monospace;\n }\n .clx-editor-body a { color: #6366f1; text-decoration: underline; }\n .clx-editor-body hr { border: none; border-top: 1px solid #e2e8f0; margin: .6em 0; }\n\n /* ── Color picker buttons ── */\n .clx-editor-color-btn {\n position: relative;\n overflow: hidden;\n }\n .clx-editor-color-btn input[type=color] {\n position: absolute;\n inset: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n border: none;\n padding: 0;\n }\n\n /* ── Toolbar selects wrapper ── */\n .clx-editor-toolbar-select clx-select .flex.flex-col { gap: 0 !important; }\n\n /* ── HTML source textarea ── */\n .clx-editor-source {\n width: 100%;\n resize: none;\n border: none;\n outline: none;\n background: #0f172a;\n color: #e2e8f0;\n font-family: ui-monospace, 'Cascadia Code', 'Fira Code', monospace;\n font-size: .8125rem;\n line-height: 1.6;\n padding: 1rem;\n tab-size: 2;\n }\n `],\n template: `\n @if (label()) {\n <span [id]=\"_editorId + '-label'\" [class]=\"_sizeCfg().label + ' text-slate-700 leading-none'\">\n {{ label() }}\n </span>\n }\n\n <div [class]=\"_shellClass()\">\n\n <!-- ── Toolbar ────────────────────────────────────────────────────── -->\n @if (!_disabled()) {\n <div [class]=\"_toolbarClass()\">\n\n @if (!_sourceMode()) {\n\n <!-- Font family -->\n <div class=\"clx-editor-toolbar-select\" style=\"min-width:110px\" (mousedown)=\"_saveRange()\">\n <clx-select\n placeholder=\"Fuente\"\n [options]=\"_fontOptions\"\n [activeColor]=\"color()\"\n size=\"sm\"\n [formControl]=\"_fontCtrl\"\n (ngModelChange)=\"_onSelectFont($event)\">\n </clx-select>\n </div>\n\n <div class=\"clx-editor-divider mx-1\"></div>\n\n <!-- Heading -->\n <div class=\"clx-editor-toolbar-select\" style=\"min-width:90px\" (mousedown)=\"_saveRange()\">\n <clx-select\n placeholder=\"Estilo\"\n [options]=\"_headingOptions\"\n [activeColor]=\"color()\"\n size=\"sm\"\n [formControl]=\"_headingCtrl\"\n (ngModelChange)=\"_onSelectHeading($event)\">\n </clx-select>\n </div>\n\n <div class=\"clx-editor-divider mx-1\"></div>\n\n <!-- Mark buttons -->\n @for (group of _groups; track $index) {\n @for (btn of group; track btn.cmd) {\n <button\n clx-button\n [variant]=\"_btnVariant(btn.mark)\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n [icon]=\"btn.icon\"\n [iconOnly]=\"true\"\n [title]=\"btn.title\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_exec(btn.cmd, btn.arg)\">\n </button>\n }\n @if (!$last) {\n <div class=\"clx-editor-divider mx-1\"></div>\n }\n }\n\n <div class=\"clx-editor-divider mx-1\"></div>\n\n <!-- Text color -->\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n [iconOnly]=\"true\"\n title=\"Color de texto\"\n class=\"clx-editor-color-btn\"\n (mousedown)=\"_saveRange()\">\n <span clx-icon name=\"format_color_text\" size=\"sm\"></span>\n <input type=\"color\" (input)=\"_execVal('foreColor', $event)\">\n </button>\n\n <!-- Highlight -->\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n [iconOnly]=\"true\"\n title=\"Resaltado\"\n class=\"clx-editor-color-btn\"\n (mousedown)=\"_saveRange()\">\n <span clx-icon name=\"format_color_fill\" size=\"sm\"></span>\n <input type=\"color\" value=\"#fef08a\" (input)=\"_execVal('hiliteColor', $event)\">\n </button>\n\n <div class=\"clx-editor-divider mx-1\"></div>\n }\n\n <!-- HTML source toggle -->\n <button\n clx-button\n [variant]=\"_sourceMode() ? 'light' : 'ghost'\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n icon=\"html\"\n [iconOnly]=\"true\"\n title=\"Ver/editar HTML\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_toggleSource()\">\n </button>\n\n <!-- Copy HTML -->\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n [icon]=\"_copied() ? 'check' : 'content_copy'\"\n [iconOnly]=\"true\"\n title=\"Copiar HTML al portapapeles\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_copyHtml()\">\n </button>\n\n </div>\n }\n\n <!-- ── Rich text area ─────────────────────────────────────────────── -->\n @if (!_sourceMode()) {\n <div\n #bodyEl\n [id]=\"_editorId\"\n role=\"textbox\"\n aria-multiline=\"true\"\n [attr.aria-labelledby]=\"label() ? _editorId + '-label' : null\"\n [attr.aria-placeholder]=\"placeholder()\"\n [attr.aria-disabled]=\"_disabled() ? 'true' : null\"\n class=\"clx-editor-body\"\n [attr.contenteditable]=\"_disabled() ? 'false' : 'true'\"\n [class]=\"_bodyClass()\"\n [attr.data-placeholder]=\"placeholder()\"\n (input)=\"_onInput()\"\n (blur)=\"_onBlur()\"\n (paste)=\"_onPaste($event)\"\n (keydown)=\"_onKeydown($event)\"\n ></div>\n }\n\n <!-- ── HTML source area ───────────────────────────────────────────── -->\n @if (_sourceMode()) {\n <textarea\n #sourceEl\n class=\"clx-editor-source\"\n [class]=\"_sourceClass()\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n [value]=\"_sourceValue()\"\n (input)=\"_onSourceInput($event)\"\n ></textarea>\n }\n\n </div>\n\n <!-- ── Bottom message ───────────────────────────────────────────────── -->\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_sizeCfg().hint + ' text-gray-400'\">{{ hint() }}</p>\n }\n `,\n host: { class: 'flex flex-col gap-1.5' },\n})\nexport class ClxEditorComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('Escribe aquí...');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxEditorSize>('md');\n readonly status = input<'default' | 'error' | 'success'>('default');\n readonly statusMessage = input<string>('');\n readonly hint = input<string>('');\n readonly disabled = input<boolean>(false);\n\n // ── View ─────────────────────────────────────────────────────────────────\n @ViewChild('bodyEl', { static: false }) private _bodyEl!: ElementRef<HTMLDivElement>;\n @ViewChild('sourceEl', { static: false }) private _sourceEl!: ElementRef<HTMLTextAreaElement>;\n\n // ── Services ─────────────────────────────────────────────────────────────\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _zone: NgZone;\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _modal = inject(ClxModalService);\n\n // ── Select options ────────────────────────────────────────────────────────\n protected readonly _fontOptions = FONT_OPTIONS;\n protected readonly _headingOptions = HEADING_OPTIONS;\n\n // ── Toolbar FormControls (drive clx-select) ───────────────────────────────\n protected readonly _fontCtrl = new FormControl<string>('Roboto');\n protected readonly _headingCtrl = new FormControl<string>('p');\n\n // ── State ─────────────────────────────────────────────────────────────────\n private readonly _cvaDisabled = signal(false);\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n protected readonly _tick = signal(0);\n protected readonly _sourceMode = signal(false);\n protected readonly _sourceValue = signal('');\n protected readonly _copied = signal(false);\n\n protected readonly _editorId = `clx-editor-${++_clxEditorId}`;\n protected readonly _groups = TOOLBAR_GROUPS;\n\n private _savedRange: Range | null = null;\n private _pendingValue: string | null = null;\n private _selectionUnsub: (() => void) | null = null;\n private _copiedTimer: ReturnType<typeof setTimeout> | null = null;\n\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n }\n\n // ── Lifecycle ─────────────────────────────────────────────────────────────\n ngAfterViewInit(): void {\n document.execCommand('defaultParagraphSeparator', false, 'p');\n\n if (this._pendingValue !== null) {\n this._bodyEl.nativeElement.innerHTML = this._pendingValue;\n this._pendingValue = null;\n }\n\n this._zone.runOutsideAngular(() => {\n const handler = () => {\n const active = document.activeElement;\n const body = this._bodyEl?.nativeElement;\n if (!body || (active !== body && !body.contains(active))) return;\n this._zone.run(() => this._tick.update(v => v + 1));\n };\n document.addEventListener('selectionchange', handler);\n this._selectionUnsub = () => document.removeEventListener('selectionchange', handler);\n });\n\n this._destroyRef.onDestroy(() => this._selectionUnsub?.());\n }\n\n ngOnDestroy(): void {\n this._selectionUnsub?.();\n if (this._copiedTimer) clearTimeout(this._copiedTimer);\n }\n\n // ── Computed ──────────────────────────────────────────────────────────────\n protected readonly _sizeCfg = computed(() => EDITOR_SIZE_MAP[this.size()]);\n\n protected readonly _shellClass = computed(() => {\n const statusCfg = INPUT_STATUS_MAP[this.status()];\n if (this._disabled()) {\n return 'rounded-xl border border-gray-200 bg-gray-50 overflow-hidden opacity-60 cursor-not-allowed';\n }\n const focus = this.status() !== 'default'\n ? statusCfg.ring.replace(/focus:/g, 'focus-within:')\n : resolveColor(this.color()).focusWithin;\n return `rounded-xl border ${statusCfg.border} ${focus} overflow-hidden bg-white transition-all duration-200`;\n });\n\n protected readonly _toolbarClass = computed(() =>\n `flex flex-wrap items-center gap-1 ${this._sizeCfg().toolbar} border-b border-slate-100 bg-white`,\n );\n\n protected readonly _bodyClass = computed(() => {\n const size = this._sizeCfg();\n const base = `${size.minH} ${size.maxH} overflow-y-auto ${size.text} p-4 focus:outline-none`;\n return this._disabled() ? `${base} pointer-events-none select-none` : base;\n });\n\n protected readonly _sourceClass = computed(() => {\n const size = this._sizeCfg();\n return `${size.minH} ${size.maxH} overflow-y-auto ${size.text}`;\n });\n\n protected readonly _statusMsgClass = computed(() =>\n `${this._sizeCfg().hint} ${INPUT_STATUS_MAP[this.status()].msgCls}`,\n );\n\n // ── Toolbar button variant (active vs ghost) ──────────────────────────────\n protected _btnVariant(mark?: string): 'light' | 'ghost' {\n void this._tick();\n return (mark && document.queryCommandState(mark)) ? 'light' : 'ghost';\n }\n\n // ── Select handlers ───────────────────────────────────────────────────────\n protected _onSelectFont(value: string | number | (string | number)[] | null): void {\n if (!value) return;\n this._restoreRange();\n document.execCommand('fontName', false, String(value));\n this._bodyEl?.nativeElement.focus();\n this._emitChange();\n }\n\n protected _onSelectHeading(value: string | number | (string | number)[] | null): void {\n if (!value) return;\n this._restoreRange();\n document.execCommand('formatBlock', false, String(value));\n this._bodyEl?.nativeElement.focus();\n this._emitChange();\n }\n\n // ── Source mode toggle ────────────────────────────────────────────────────\n protected _toggleSource(): void {\n if (this._sourceMode()) {\n const html = this._sourceEl?.nativeElement.value ?? this._sourceValue();\n this._sourceMode.set(false);\n setTimeout(() => {\n if (this._bodyEl) {\n this._bodyEl.nativeElement.innerHTML = html;\n this._onChange(html);\n }\n });\n } else {\n const html = this._bodyEl?.nativeElement.innerHTML ?? '';\n this._sourceValue.set(html);\n this._sourceMode.set(true);\n }\n }\n\n // ── Copy HTML ─────────────────────────────────────────────────────────────\n protected _copyHtml(): void {\n const html = this._sourceMode()\n ? (this._sourceEl?.nativeElement.value ?? this._sourceValue())\n : (this._bodyEl?.nativeElement.innerHTML ?? '');\n navigator.clipboard.writeText(html).then(() => {\n this._copied.set(true);\n if (this._copiedTimer) clearTimeout(this._copiedTimer);\n this._copiedTimer = setTimeout(() => this._copied.set(false), 2000);\n });\n }\n\n // ── Commands ──────────────────────────────────────────────────────────────\n protected _exec(cmd: string, arg?: string): void {\n if (this._disabled()) return;\n if (cmd === 'blockquote') { this._restoreRange(); this._wrapBlockquote(); return; }\n if (cmd === 'insertCode') { this._restoreRange(); this._wrapCode(); return; }\n if (cmd === 'createLink') { this._openLinkModal(); return; }\n this._bodyEl.nativeElement.focus();\n this._restoreRange();\n document.execCommand(cmd, false, arg);\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n protected _execVal(cmd: string, event: Event): void {\n if (this._disabled()) return;\n const val = (event.target as HTMLSelectElement | HTMLInputElement).value;\n this._restoreRange();\n document.execCommand(cmd, false, val);\n this._bodyEl.nativeElement.focus();\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n // ── Link modal ────────────────────────────────────────────────────────────\n private _openLinkModal(): void {\n this._saveRange();\n const ref = this._modal.open<{ url: string; text: string }>(ClxEditorLinkModalComponent, { size: 'sm' });\n ref.afterClosed().then((result: { url: string; text: string } | undefined) => {\n if (!result?.url) return;\n this._restoreRange();\n this._bodyEl.nativeElement.focus();\n // If text provided and selection is collapsed, insert the text first\n const sel = window.getSelection();\n if (result.text && sel && sel.rangeCount > 0 && sel.getRangeAt(0).collapsed) {\n document.execCommand('insertText', false, result.text);\n // Re-select the inserted text\n const range = sel.getRangeAt(0);\n range.setStart(range.startContainer, range.startOffset - result.text.length);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n document.execCommand('createLink', false, result.url);\n this._emitChange();\n this._tick.update(v => v + 1);\n });\n }\n\n // ── Range save/restore ────────────────────────────────────────────────────\n protected _saveRange(): void {\n const sel = window.getSelection();\n if (sel && sel.rangeCount > 0) {\n this._savedRange = sel.getRangeAt(0).cloneRange();\n }\n }\n\n private _restoreRange(): void {\n if (!this._savedRange) return;\n const sel = window.getSelection();\n if (!sel) return;\n sel.removeAllRanges();\n sel.addRange(this._savedRange);\n }\n\n // ── Paste: keep HTML structure, strip unsafe ──────────────────────────────\n protected _onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const cd = event.clipboardData;\n if (!cd) return;\n const html = cd.getData('text/html');\n if (html) {\n document.execCommand('insertHTML', false, this._sanitizePaste(html));\n } else {\n document.execCommand('insertText', false, cd.getData('text/plain'));\n }\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n private _sanitizePaste(html: string): string {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n doc.querySelectorAll('script,style,meta,link,head').forEach(el => el.remove());\n doc.body.querySelectorAll('*').forEach(el => {\n Array.from(el.attributes).forEach(attr => {\n if (attr.name.startsWith('on') || attr.name === 'srcdoc') el.removeAttribute(attr.name);\n });\n });\n return doc.body.innerHTML;\n }\n\n // ── Source textarea input ─────────────────────────────────────────────────\n protected _onSourceInput(event: Event): void {\n const html = (event.target as HTMLTextAreaElement).value;\n this._sourceValue.set(html);\n this._onChange(html);\n }\n\n // ── Blockquote & code ─────────────────────────────────────────────────────\n private _wrapBlockquote(): void {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const bq = document.createElement('blockquote');\n bq.appendChild(range.extractContents());\n range.insertNode(bq);\n range.setStartAfter(bq);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n private _wrapCode(): void {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const code = document.createElement('code');\n code.appendChild(range.extractContents());\n range.insertNode(code);\n range.setStartAfter(code);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n protected _onInput(): void {\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n protected _onBlur(): void {\n this._saveRange();\n this._onTouched();\n }\n\n protected _onKeydown(e: KeyboardEvent): void {\n if (this._disabled()) e.preventDefault();\n }\n\n private _emitChange(): void {\n this._onChange(this._bodyEl.nativeElement.innerHTML);\n }\n\n // ── CVA ───────────────────────────────────────────────────────────────────\n writeValue(html: string): void {\n const value = html ?? '';\n if (this._sourceMode()) {\n this._sourceValue.set(value);\n return;\n }\n if (!this._bodyEl) {\n this._pendingValue = value;\n return;\n }\n const el = this._bodyEl.nativeElement;\n if (el.innerHTML !== value) el.innerHTML = value;\n }\n\n registerOnChange(fn: (v: string) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n this._cdr.markForCheck();\n }\n}\n","export const SWITCH_SIZE_MAP = {\n sm: { track: 'w-9 h-5', thumb: 'w-4 h-4', translate: 'translate-x-4', label: 'text-xs' },\n md: { track: 'w-12 h-6', thumb: 'w-5 h-5', translate: 'translate-x-6', label: 'text-sm' },\n lg: { track: 'w-14 h-7', thumb: 'w-6 h-6', translate: 'translate-x-7', label: 'text-base' },\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport { SWITCH_SIZE_MAP } from '../../../configs/switch.config';\n\ntype ClxSwitchSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'label[clx-switch]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxSwitchComponent),\n multi: true,\n },\n ],\n template: `\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n [checked]=\"_checked()\"\n [disabled]=\"_disabled()\"\n (change)=\"_handleChange($event)\"\n (blur)=\"_handleBlur()\"\n />\n <div [class]=\"_trackClass()\">\n <div [class]=\"_thumbClass()\"></div>\n </div>\n @if (label()) {\n <span [class]=\"_labelClass()\">{{ label() }}</span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'relative inline-flex items-center gap-2 select-none',\n '[style.opacity]': '_disabled() ? \"0.5\" : null',\n '[style.cursor]': '_disabled() ? \"not-allowed\" : \"pointer\"',\n '[style.pointer-events]': '_disabled() ? \"none\" : null',\n },\n})\nexport class ClxSwitchComponent implements ControlValueAccessor {\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxSwitchSize>('md');\n readonly label = input<string>('');\n /** Initial value for standalone use (without FormControl) */\n readonly value = input<boolean>(false);\n /** Disabled state for standalone use (without FormControl) */\n readonly disabled = input<boolean>(false);\n\n readonly _checked = signal(false);\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._checked.set(v));\n });\n\n private _onChange: (v: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n\n protected readonly _sizeConfig = computed(() => SWITCH_SIZE_MAP[this.size()]);\n\n protected readonly _trackClass = computed(() => {\n const base = `${this._sizeConfig().track} relative rounded-full transition-all duration-200 flex-shrink-0`;\n return `${base} ${this._checked() ? resolveColor(this.color()).bg : 'bg-gray-300'}`;\n });\n\n protected readonly _thumbClass = computed(() => {\n const base = `${this._sizeConfig().thumb} absolute top-[2px] left-[2px] bg-white rounded-full shadow-sm transition-all duration-200`;\n return this._checked() ? `${base} ${this._sizeConfig().translate}` : base;\n });\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n writeValue(val: boolean): void {\n this._cvaConnected = true;\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(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n protected _handleChange(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this._checked.set(checked);\n this._onChange(checked);\n }\n\n protected _handleBlur(): void {\n this._onTouched();\n }\n}\n","import type { ClxTextareaSize } from '../types/clx-textarea.types';\n\n// ── Size map ─────────────────────────────────────────────────────────────────\nexport const TEXTAREA_SIZE_MAP: Record<ClxTextareaSize, {\n textarea: string;\n label: string;\n hint: string;\n iconSize: 'xs' | 'sm' | 'md';\n iconRight: string;\n padDefaultL: string;\n padDefaultR: string;\n padRight: string; // with suffix icon\n}> = {\n sm: {\n textarea: 'text-sm py-1.5 min-h-[72px]',\n label: 'text-xs font-medium',\n hint: 'text-xs',\n iconSize: 'xs',\n iconRight: 'right-2.5',\n padDefaultL: 'pl-3',\n padDefaultR: 'pr-3',\n padRight: 'pr-8',\n },\n md: {\n textarea: 'text-sm py-2 min-h-[96px]',\n label: 'text-sm font-medium',\n hint: 'text-xs',\n iconSize: 'sm',\n iconRight: 'right-3',\n padDefaultL: 'pl-3',\n padDefaultR: 'pr-3',\n padRight: 'pr-9',\n },\n lg: {\n textarea: 'text-base py-2.5 min-h-[120px]',\n label: 'text-sm font-medium',\n hint: 'text-sm',\n iconSize: 'md',\n iconRight: 'right-3.5',\n padDefaultL: 'pl-4',\n padDefaultR: 'pr-4',\n padRight: 'pr-10',\n },\n};\n\n// ── Resize map ────────────────────────────────────────────────────────────────\nexport const TEXTAREA_RESIZE_MAP = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxTextareaStatus, ClxTextareaSize, ClxTextareaResize } from '../../../types/clx-textarea.types';\nimport { INPUT_STATUS_MAP } from '../../../configs/input.config';\nimport { TEXTAREA_SIZE_MAP, TEXTAREA_RESIZE_MAP } from '../../../configs/textarea.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\nlet _clxTextareaIdCounter = 0;\n\n@Component({\n selector: 'clx-textarea',\n standalone: true,\n imports: [ClxIconComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxTextareaComponent),\n multi: true,\n },\n ],\n template: `\n @if (label()) {\n <label [for]=\"_taId\" [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <!-- ── Outer wrapper: flex row — border + focus ring live here ─────── -->\n <div [class]=\"_wrapperClass()\">\n\n <!-- Prefix icon cell (flex sibling, stretches full height) -->\n @if (prefixIcon()) {\n <div [class]=\"_prefixCellCls()\">\n <span clx-icon [name]=\"prefixIcon()\" [size]=\"_sizeCfg().iconSize\"></span>\n </div>\n }\n\n <!-- ── Inner wrapper: relative, grows to fill, holds textarea + overlays -->\n <div class=\"relative flex-1 min-w-0\">\n\n <textarea\n [id]=\"_taId\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"_disabled()\"\n [rows]=\"rows()\"\n [value]=\"_value()\"\n [class]=\"_textareaClass()\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur()\"\n ></textarea>\n\n <!-- Status icon — top-right of the textarea area -->\n @if (status() !== 'default') {\n <div [class]=\"_suffixIconWrapCls()\" [style.color]=\"_statusCfg().iconColor\">\n <span clx-icon [name]=\"_statusCfg().iconName\" [size]=\"_sizeCfg().iconSize\"></span>\n </div>\n } @else if (suffixIcon()) {\n <div [class]=\"_suffixIconWrapCls()\">\n <span clx-icon [name]=\"suffixIcon()\" [size]=\"_sizeCfg().iconSize\" class=\"text-gray-400\"></span>\n </div>\n }\n\n <!-- Character counter -->\n @if (maxLength() > 0) {\n <span [class]=\"_counterClass()\">{{ _value().length }} / {{ maxLength() }}</span>\n }\n </div>\n </div>\n\n <!-- ── Bottom message ────────────────────────────────────────────────── -->\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5' },\n})\nexport class ClxTextareaComponent implements ControlValueAccessor {\n\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxTextareaSize>('md');\n readonly status = input<ClxTextareaStatus>('default');\n readonly statusMessage = input<string>('');\n readonly hint = input<string>('');\n readonly prefixIcon = input<string>('');\n readonly suffixIcon = input<string>('');\n readonly resize = input<ClxTextareaResize>('vertical');\n readonly rows = input<number>(3);\n readonly maxLength = input<number>(0);\n readonly value = input<string>('');\n readonly disabled = input<boolean>(false);\n\n // ── Internal state ───────────────────────────────────────────────────────\n protected readonly _taId = `clx-textarea-${++_clxTextareaIdCounter}`;\n readonly _value = signal('');\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._value.set(v));\n });\n\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Computed shortcuts ───────────────────────────────────────────────────\n protected readonly _sizeCfg = computed(() => TEXTAREA_SIZE_MAP[this.size()]);\n protected readonly _statusCfg = computed(() => INPUT_STATUS_MAP[this.status()]);\n\n // ── Classes ──────────────────────────────────────────────────────────────\n protected readonly _labelClass = computed(() =>\n `${this._sizeCfg().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeCfg().hint} text-gray-400`,\n );\n\n /**\n * Outer flex wrapper — owns the border, border-radius and focus ring.\n * The border sits here (not on the textarea) so the prefix cell blends in\n * seamlessly, exactly like clx-input does in flex mode.\n */\n protected readonly _wrapperClass = computed(() => {\n const statusCfg = this._statusCfg();\n\n if (this._disabled()) {\n return 'flex items-stretch rounded-md border border-gray-200 overflow-hidden transition-all duration-200';\n }\n\n const focusCls = this.status() !== 'default'\n ? statusCfg.ring.replace(/focus:/g, 'focus-within:')\n : resolveColor(this.color()).focusWithin;\n\n const border = statusCfg.border;\n return `flex items-stretch rounded-md border ${border} ${focusCls} overflow-hidden transition-all duration-200`;\n });\n\n /** Prefix icon cell — flex column, full height of the wrapper */\n protected readonly _prefixCellCls = computed(() => {\n if (this._disabled()) {\n return 'flex items-start justify-center pt-2.5 px-2.5 shrink-0 border-r bg-gray-50 text-gray-300 border-gray-200';\n }\n const t = resolveColor(this.color());\n return `flex items-start justify-center pt-2.5 px-2.5 shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n /** Textarea itself — no border (border lives on the wrapper), fills flex-1 */\n protected readonly _textareaClass = computed(() => {\n const size = this._sizeCfg();\n const resizeCls = TEXTAREA_RESIZE_MAP[this.resize()];\n const hasSuffix = this.status() !== 'default' || !!this.suffixIcon();\n const pr = hasSuffix ? size.padRight : size.padDefaultR;\n const maxLen = this.maxLength() > 0 ? 'pb-6' : '';\n const base = `w-full ${size.textarea} ${size.padDefaultL} ${pr} outline-none ${resizeCls} ${maxLen}`.trim();\n\n if (this._disabled()) {\n return `${base} bg-gray-50 cursor-not-allowed text-gray-400 placeholder:text-gray-300`;\n }\n return `${base} bg-white text-slate-700 placeholder:text-gray-400`;\n });\n\n /** Suffix icon — absolute inside the inner relative wrapper */\n protected readonly _suffixIconWrapCls = computed(() => {\n const size = this._sizeCfg();\n return `absolute ${size.iconRight} top-2.5 pointer-events-none flex items-center`;\n });\n\n protected readonly _statusMsgClass = computed(() =>\n `${this._sizeCfg().hint} ${this._statusCfg().msgCls}`,\n );\n\n protected readonly _counterClass = computed(() => {\n const over = this._value().length >= this.maxLength();\n return `absolute bottom-1.5 right-2.5 text-[10px] leading-none pointer-events-none select-none ${over ? 'text-red-500' : 'text-gray-400'}`;\n });\n\n // ── CVA ──────────────────────────────────────────────────────────────────\n writeValue(val: string): void {\n this._cvaConnected = true;\n this._value.set(val ?? '');\n }\n\n registerOnChange(fn: (v: string) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n setDisabledState(disabled: boolean): void { this._cvaDisabled.set(disabled); }\n\n // ── Handlers ─────────────────────────────────────────────────────────────\n protected _handleInput(event: Event): void {\n const val = (event.target as HTMLTextAreaElement).value;\n this._value.set(val);\n this._onChange(val);\n }\n\n protected _handleBlur(): void {\n this._onTouched();\n }\n}\n","import type { ClxUploadSize } from '../types/clx-upload.types';\n\nexport const UPLOAD_SIZE_MAP: Record<ClxUploadSize, {\n zone: string;\n icon: 'sm' | 'md' | 'lg' | 'xl';\n title: string;\n hint: string;\n}> = {\n sm: { zone: 'py-5 px-6 gap-2', icon: 'md', title: 'text-sm', hint: 'text-xs' },\n md: { zone: 'py-9 px-8 gap-3', icon: 'lg', title: 'text-sm', hint: 'text-xs' },\n lg: { zone: 'py-12 px-10 gap-4', icon: 'xl', title: 'text-base', hint: 'text-sm' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport { UPLOAD_SIZE_MAP } from '../../../configs/upload.config';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport type { ClxUploadError, ClxUploadSize } from '../../../types/clx-upload.types';\n\n@Component({\n selector: 'clx-upload',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n template: `\n <!-- Hidden file input -->\n <input\n #fileInput\n type=\"file\"\n class=\"sr-only\"\n [accept]=\"accept() || undefined\"\n [multiple]=\"multiple()\"\n [disabled]=\"_disabled()\"\n (change)=\"_onInputChange($event)\"\n />\n\n <!-- Optional label slot -->\n <ng-content select=\"[clx-label]\"></ng-content>\n\n <!-- ── Dropzone ──────────────────────────────────────────────────────────── -->\n <div\n [class]=\"_zoneClass()\"\n (click)=\"!_disabled() && _fileInput().nativeElement.click()\"\n (dragover)=\"_onDragOver($event)\"\n (dragleave)=\"_onDragLeave()\"\n (drop)=\"_onDrop($event)\">\n\n <span\n clx-icon\n name=\"cloud_upload\"\n [size]=\"_sizeConfig().icon\"\n [class]=\"_iconClass()\">\n </span>\n\n <div class=\"space-y-1 text-center\">\n <p [class]=\"'font-medium text-slate-700 ' + _sizeConfig().title\">\n Arrastra tu archivo aquí\n </p>\n <p [class]=\"'text-slate-500 ' + _sizeConfig().hint\">\n o\n <span [class]=\"'cursor-pointer font-medium hover:underline underline-offset-2 ' + _linkClass()\">\n {{ _buttonText() }}\n </span>\n </p>\n <p [class]=\"'text-slate-400 ' + _sizeConfig().hint\">{{ _hintText() }}</p>\n </div>\n </div>\n\n <!-- ── File list ─────────────────────────────────────────────────────────── -->\n @if (_files().length) {\n <div class=\"mt-3 space-y-2\">\n @for (file of _files(); track file.name + file.size) {\n <div [class]=\"_fileItemClass()\">\n <span clx-icon name=\"description\" size=\"sm\" [class]=\"_fileIconClass() + ' shrink-0'\"></span>\n <span class=\"flex-1 text-sm text-slate-700 font-medium truncate\">{{ file.name }}</span>\n <span class=\"text-xs text-slate-500 shrink-0\">{{ _formatSize(file.size) }}</span>\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n size=\"sm\"\n icon=\"close\"\n [iconOnly]=\"true\"\n (click)=\"_removeFile(file); $event.stopPropagation()\">\n </button>\n </div>\n }\n </div>\n }\n\n <!-- ── Error message ─────────────────────────────────────────────────────── -->\n @if (_errorMessage()) {\n <p class=\"mt-1.5 flex items-center gap-1.5 text-xs text-red-500\">\n <span clx-icon name=\"error\" size=\"xs\"></span>\n {{ _errorMessage() }}\n </p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block w-full',\n },\n})\nexport class ClxUploadComponent implements ControlValueAccessor {\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly multiple = input<boolean>(false);\n readonly accept = input<string>('');\n /** Max file size in bytes. 0 = no limit. */\n readonly maxFileSize = input<number>(0);\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxUploadSize>('md');\n readonly disabled = input<boolean>(false);\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n readonly onUploadError = output<{ file: File; error: ClxUploadError }>();\n readonly onUploadSuccess = output<File[]>();\n\n // ── Internal state ─────────────────────────────────────────────────────────\n readonly _files = signal<File[]>([]);\n readonly _isDragging = signal(false);\n readonly _errorKey = signal<ClxUploadError | null>(null);\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n private readonly _ngControl = inject(NgControl, { optional: true, self: true });\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n private _onChange: (v: File | File[] | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Template refs ──────────────────────────────────────────────────────────\n protected readonly _fileInput = viewChild.required<ElementRef<HTMLInputElement>>('fileInput');\n\n constructor() {\n if (this._ngControl) this._ngControl.valueAccessor = this;\n }\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _disabled = computed(() =>\n this._cvaDisabled() || this.disabled(),\n );\n\n protected readonly _sizeConfig = computed(() =>\n UPLOAD_SIZE_MAP[this.size()],\n );\n\n protected readonly _isError = computed(() =>\n this._errorKey() !== null,\n );\n\n protected readonly _fileItemClass = computed(() => {\n const t = resolveColor(this.color());\n return `flex items-center gap-2 rounded-lg border px-3 py-2 transition-colors ${t.borderLight} ${t.bgSubtle}`;\n });\n\n protected readonly _fileIconClass = computed(() =>\n resolveColor(this.color()).textSubtle,\n );\n\n protected readonly _zoneClass = computed(() => {\n const base = [\n 'flex flex-col items-center justify-center text-center',\n 'w-full rounded-xl border-2 border-dashed transition-all duration-200',\n this._sizeConfig().zone,\n ].join(' ');\n\n const t = resolveColor(this.color());\n\n if (this._disabled()) {\n return `${base} border-slate-200 bg-slate-50 opacity-50 cursor-not-allowed`;\n }\n if (this._isError()) {\n return `${base} border-red-400 bg-red-50/40 cursor-pointer`;\n }\n if (this._isDragging()) {\n return `${base} ${t.border} ${t.bgSubtle} cursor-copy`;\n }\n return `${base} border-slate-200 bg-white ${t.hoverBg.replace('hover:bg-', 'hover:border-')} ${t.hoverBgMuted} cursor-pointer`;\n });\n\n protected readonly _iconClass = computed(() => {\n if (this._isError()) return 'text-red-400';\n if (this._isDragging()) return resolveColor(this.color()).textSubtle;\n return 'text-slate-300';\n });\n\n protected readonly _linkClass = computed(() =>\n resolveColor(this.color()).textSubtle,\n );\n\n protected readonly _buttonText = computed(() =>\n this.multiple() ? 'Seleccionar archivos' : 'Seleccionar archivo',\n );\n\n protected readonly _hintText = computed(() => {\n const accept = this.accept().trim();\n const maxSize = this.maxFileSize();\n const parts: string[] = [];\n\n if (accept === '.pdf') {\n parts.push('Soporta archivos .pdf');\n } else if (accept === 'image/*') {\n parts.push('Soporta imágenes (PNG, JPG, etc.)');\n } else if (accept) {\n parts.push(`Formatos: ${accept}`);\n }\n\n if (this.multiple()) parts.push('Puedes subir varios archivos');\n\n if (maxSize > 0) {\n parts.push(`Máx. ${this._formatSize(maxSize)} por archivo`);\n }\n\n return parts.join(' · ') || 'Todos los archivos son aceptados';\n });\n\n protected readonly _errorMessage = computed(() => {\n switch (this._errorKey()) {\n case 'fileType': return 'Formato de archivo no permitido';\n case 'fileSize': return `Archivo demasiado grande (máx. ${this._formatSize(this.maxFileSize())})`;\n default: return null;\n }\n });\n\n // Auto-trim to 1 file when multiple switches off\n private readonly _multipleEffect = effect(() => {\n const multi = this.multiple();\n if (!multi) {\n untracked(() => {\n this._files.update(f => f.length > 1 ? [f[f.length - 1]] : f);\n });\n }\n });\n\n // ── CVA implementation ─────────────────────────────────────────────────────\n writeValue(value: File | File[] | null): void {\n this._cvaConnected = true;\n if (!value) {\n this._files.set([]);\n } else if (Array.isArray(value)) {\n this._files.set(value);\n } else {\n this._files.set([value]);\n }\n }\n\n registerOnChange(fn: (v: File | File[] | null) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n protected _onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n if (files?.length) this._addFiles(files);\n // Reset so same file can be re-selected\n input.value = '';\n }\n\n protected _onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this._disabled()) this._isDragging.set(true);\n }\n\n protected _onDragLeave(): void {\n this._isDragging.set(false);\n }\n\n protected _onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this._isDragging.set(false);\n if (this._disabled()) return;\n const files = event.dataTransfer?.files;\n if (files?.length) this._addFiles(files);\n }\n\n protected _removeFile(file: File): void {\n this._files.update(current => current.filter(f => f !== file));\n this._errorKey.set(null);\n this._ngControl?.control?.setErrors(null);\n this._emit();\n this._onTouched();\n }\n\n // ── Helpers ────────────────────────────────────────────────────────────────\n private _addFiles(rawFiles: FileList | File[]): void {\n const files = Array.from(rawFiles);\n let firstError: ClxUploadError | null = null;\n const valid: File[] = [];\n\n for (const file of files) {\n if (this.accept() && !this._isAccepted(file)) {\n this.onUploadError.emit({ file, error: 'fileType' });\n if (!firstError) firstError = 'fileType';\n continue;\n }\n const maxSize = this.maxFileSize();\n if (maxSize > 0 && file.size > maxSize) {\n this.onUploadError.emit({ file, error: 'fileSize' });\n if (!firstError) firstError = 'fileSize';\n continue;\n }\n valid.push(file);\n }\n\n if (firstError) {\n this._errorKey.set(firstError);\n this._ngControl?.control?.setErrors(\n firstError === 'fileType' ? { fileType: true } : { fileSize: true },\n );\n } else {\n this._errorKey.set(null);\n this._ngControl?.control?.setErrors(null);\n }\n\n if (valid.length === 0) return;\n\n // A valid file arrived — always clear the error regardless of mixed batch\n this._errorKey.set(null);\n this._ngControl?.control?.setErrors(null);\n\n this._files.update(current =>\n this.multiple() ? [...current, ...valid] : [valid[valid.length - 1]],\n );\n\n this._emit();\n this._onTouched();\n this.onUploadSuccess.emit(valid);\n }\n\n private _isAccepted(file: File): boolean {\n const raw = this.accept().trim();\n if (!raw) return true;\n\n return raw.split(',').map(s => s.trim().toLowerCase()).some(pattern => {\n if (!pattern) return false;\n if (pattern.startsWith('.')) {\n return file.name.toLowerCase().endsWith(pattern);\n }\n if (pattern.endsWith('/*')) {\n return file.type.toLowerCase().startsWith(pattern.slice(0, -1));\n }\n return file.type.toLowerCase() === pattern;\n });\n }\n\n private _emit(): void {\n const files = this._files();\n const value: File | File[] | null = this.multiple()\n ? files\n : (files[0] ?? null);\n this._onChange(value);\n }\n\n protected _formatSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n if (bytes < 1_024) return `${bytes} B`;\n if (bytes < 1_048_576) return `${(bytes / 1_024).toFixed(1)} KB`;\n return `${(bytes / 1_048_576).toFixed(1)} MB`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'clx-step',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block w-full' },\n})\nexport class ClxStepComponent {\n readonly label = input.required<string>();\n readonly description = input<string>('');\n readonly icon = input<string>('');\n /** Bind to a form's valid state or a custom signal to gate the Next button */\n readonly isValid = input<boolean>(true);\n\n /** Exposed so the parent wizard can toggle visibility imperatively */\n readonly nativeEl: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement;\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n DestroyRef,\n inject,\n input,\n output,\n QueryList,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ClxStepComponent } from './clx-step.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxTabsComponent } from '../../advanced/clx-tabs/clx-tabs.component';\nimport type { ClxWizardColor, ClxWizardOrientation } from '../../../types/clx-wizard.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxTabItem } from '../../../types/clx-tabs.types';\n\n@Component({\n selector: 'clx-wizard',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent, ClxTabsComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [`\n @keyframes clx-wizard-fade-slide {\n from { opacity: 0; transform: translateX(10px); }\n to { opacity: 1; transform: translateX(0); }\n }\n .clx-wizard-step-enter {\n animation: clx-wizard-fade-slide 220ms cubic-bezier(.4,0,.2,1) both;\n }\n @keyframes clx-wizard-fill {\n from { width: 0%; }\n to { width: 100%; }\n }\n .clx-wizard-connector-fill {\n animation: clx-wizard-fill 300ms ease both;\n }\n clx-step[data-active='false'] { display: none; }\n `],\n template: `\n <div [class]=\"_rootClass()\">\n\n <!-- ══ HORIZONTAL: clx-tabs indicator ═══════════════════════════════ -->\n @if (orientation() === 'horizontal') {\n <clx-tabs\n [tabs]=\"_tabItems()\"\n [clxColor]=\"color()\"\n [activeTab]=\"_currentIndexStr()\"\n (activeTabChange)=\"_onTabChange($event)\"\n />\n }\n\n <!-- ══ VERTICAL: Circle + connector indicator ═════════════════════════ -->\n @if (orientation() === 'vertical') {\n <div class=\"flex flex-col items-center gap-0 shrink-0 pt-1\">\n @for (step of _steps; track step; let i = $index; let last = $last) {\n <div class=\"flex flex-col items-center\">\n <!-- Circle -->\n <button\n type=\"button\"\n [class]=\"_circleClass(i)\"\n [disabled]=\"_isTabDisabled(i) || null\"\n (click)=\"_onCircleClick(i)\"\n [attr.aria-label]=\"step.label()\"\n [attr.aria-current]=\"i === _currentIndex() ? 'step' : null\"\n >\n @if (_stepStatus(i) === 'completed') {\n <span clx-icon name=\"check\" [size]=\"'xs'\"></span>\n } @else if (_stepStatus(i) === 'error') {\n <span clx-icon name=\"close\" [size]=\"'xs'\"></span>\n } @else if (step.icon()) {\n <span clx-icon [name]=\"step.icon()\" [size]=\"'xs'\"></span>\n } @else {\n <span class=\"text-xs font-bold leading-none select-none\">{{ i + 1 }}</span>\n }\n </button>\n <!-- Connector -->\n @if (!last) {\n <div class=\"relative w-0.5 h-8 bg-slate-200 overflow-hidden\">\n @if (_stepStatus(i) === 'completed') {\n <div [class]=\"'clx-wizard-connector-fill absolute inset-0 ' + _connectorFillColor()\"></div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- ══ Step content ═══════════════════════════════════════════════════ -->\n <div class=\"flex-1 min-w-0 overflow-hidden pt-4\">\n <div class=\"clx-wizard-step-enter\" [attr.data-step-key]=\"_currentIndex()\">\n <ng-content />\n </div>\n </div>\n\n <!-- ══ Footer ═════════════════════════════════════════════════════════ -->\n <div class=\"flex items-center justify-between gap-3 pt-4 border-t border-slate-100\">\n <div class=\"flex-1\">\n <ng-content select=\"[clx-wizard-footer-start]\" />\n </div>\n\n <div class=\"flex items-center gap-3\">\n @if (_currentIndex() > 0) {\n <button\n clx-button\n [color]=\"color()\"\n variant=\"ghost\"\n size=\"sm\"\n icon=\"arrow_back\"\n (click)=\"prev()\"\n >{{ prevLabel() }}</button>\n }\n\n @if (_currentIndex() < _lastIndex()) {\n <button\n clx-button\n [color]=\"color()\"\n variant=\"solid\"\n size=\"sm\"\n icon=\"arrow_forward\"\n iconPosition=\"right\"\n [disabled]=\"!_currentStepValid()\"\n (click)=\"next()\"\n >{{ nextLabel() }}</button>\n } @else {\n <button\n clx-button\n color=\"green\"\n variant=\"solid\"\n size=\"sm\"\n icon=\"check_circle\"\n iconPosition=\"right\"\n [disabled]=\"!_currentStepValid()\"\n (click)=\"_onFinish()\"\n >{{ finishLabel() }}</button>\n }\n </div>\n </div>\n </div>\n `,\n})\nexport class ClxWizardComponent implements AfterContentInit {\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly color = input<ClxWizardColor>('indigo');\n readonly orientation = input<ClxWizardOrientation>('horizontal');\n readonly linear = input<boolean>(true);\n readonly prevLabel = input<string>('Anterior');\n readonly nextLabel = input<string>('Siguiente');\n readonly finishLabel = input<string>('Finalizar');\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n readonly stepChange = output<number>();\n readonly finish = output<void>();\n\n private readonly _destroyRef = inject(DestroyRef);\n\n // ── Content children ───────────────────────────────────────────────────────\n @ContentChildren(ClxStepComponent) private _stepQuery!: QueryList<ClxStepComponent>;\n\n // ── State ──────────────────────────────────────────────────────────────────\n protected _steps: ClxStepComponent[] = [];\n protected readonly _currentIndex = signal(0);\n\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n ngAfterContentInit(): void {\n this._steps = this._stepQuery.toArray();\n this._syncActiveAttrs();\n this._stepQuery.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._steps = this._stepQuery.toArray();\n this._syncActiveAttrs();\n });\n }\n\n private _syncActiveAttrs(): void {\n this._steps.forEach((step, i) => {\n step.nativeEl.setAttribute('data-active', String(i === this._currentIndex()));\n });\n }\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _lastIndex = computed(() => Math.max(0, this._steps.length - 1));\n\n protected readonly _currentStepValid = computed(() => {\n const step = this._steps[this._currentIndex()];\n return step ? step.isValid() : true;\n });\n\n protected readonly _connectorFillColor = computed(() => resolveColor(this.color()).bg);\n protected readonly _currentIndexStr = computed(() => String(this._currentIndex()));\n\n protected readonly _tabItems = computed<ClxTabItem[]>(() =>\n this._steps.map((step, i) => ({\n id: String(i),\n label: step.label(),\n icon: step.icon() || undefined,\n disabled: this.linear() ? i > this._currentIndex() : false,\n }))\n );\n\n protected _onTabChange(id: string): void {\n const i = Number(id);\n if (!isNaN(i) && !this._isTabDisabled(i)) this._goTo(i);\n }\n\n // ── Step status ────────────────────────────────────────────────────────────\n protected _stepStatus(i: number): 'active' | 'completed' | 'pending' | 'error' {\n const current = this._currentIndex();\n if (i < current) return 'completed';\n if (i === current) return 'active';\n return 'pending';\n }\n\n protected _isTabDisabled(i: number): boolean {\n if (!this.linear()) return false;\n return i > this._currentIndex();\n }\n\n protected _onCircleClick(i: number): void {\n if (this._isTabDisabled(i)) return;\n this._goTo(i);\n }\n\n // ── Navigation API ─────────────────────────────────────────────────────────\n next(): void {\n if (!this._currentStepValid()) return;\n this._goTo(Math.min(this._currentIndex() + 1, this._lastIndex()));\n }\n\n prev(): void {\n this._goTo(Math.max(this._currentIndex() - 1, 0));\n }\n\n goTo(index: number): void {\n if (index < 0 || index > this._lastIndex()) return;\n if (this.linear() && index > this._currentIndex()) return;\n this._goTo(index);\n }\n\n private _goTo(index: number): void {\n this._currentIndex.set(index);\n this._syncActiveAttrs();\n this.stepChange.emit(index);\n }\n\n protected _onFinish(): void {\n if (!this._currentStepValid()) return;\n this.finish.emit();\n }\n\n // ── Class helpers ──────────────────────────────────────────────────────────\n protected readonly _rootClass = computed(() => {\n const vert = this.orientation() === 'vertical';\n return `flex gap-0 w-full ${vert ? 'flex-row gap-6' : 'flex-col'}`;\n });\n\n // ── Circle (vertical) ─────────────────────────────────────────────────────\n protected _circleClass(i: number): string {\n const base = 'relative z-10 flex items-center justify-center w-9 h-9 rounded-full transition-all duration-200 shrink-0 focus:outline-none';\n const status = this._stepStatus(i);\n const color = this.color();\n const ptr = !this._isTabDisabled(i) ? 'cursor-pointer' : 'cursor-default';\n\n const t = resolveColor(color);\n if (status === 'completed') return `${base} ${t.bg} ${t.text} ${ptr}`;\n if (status === 'active') return `${base} border-2 ${t.border} ${t.textSubtle} bg-white`;\n if (status === 'error') return `${base} bg-red-500 text-white ${ptr}`;\n return `${base} border-2 border-slate-200 text-slate-400 bg-white ${ptr}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n NgZone,\n OnDestroy,\n OnInit,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-app-layout',\n standalone: true,\n imports: [ClxIconComponent, CdkScrollable],\n template: `\n <!-- Mobile backdrop -->\n @if (_showBackdrop()) {\n <div\n class=\"fixed inset-0 z-20 bg-slate-900/60\"\n aria-hidden=\"true\"\n (click)=\"closeSidebar()\">\n </div>\n }\n\n <!-- Sidebar -->\n <aside\n [class]=\"_sidebarCls()\"\n (mouseenter)=\"_onSidebarEnter()\"\n (mouseleave)=\"_onSidebarLeave()\"\n aria-label=\"Navegación principal\">\n\n <!-- Brand slot -->\n <div class=\"border-b border-slate-700/50 shrink-0 overflow-hidden\">\n <ng-content select=\"clx-brand\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-h-0\">\n <ng-content select=\"[clx-sidebar]\"></ng-content>\n </div>\n </aside>\n\n <!-- Right panel -->\n <div class=\"flex-1 flex flex-col overflow-hidden min-w-0\">\n\n <header class=\"h-16 shrink-0 bg-white border-b border-slate-200 flex items-center z-10 px-4 gap-3\">\n <!-- Toggle button desktop -->\n <button\n type=\"button\"\n class=\"hidden lg:flex items-center justify-center w-8 h-8 rounded-md text-slate-500 hover:text-slate-700 hover:bg-slate-100 transition-colors shrink-0\"\n (click)=\"_toggleCollapsed()\">\n <span clx-icon [name]=\"collapsed() ? 'menu_open' : 'menu'\" size=\"sm\"></span>\n </button>\n <!-- Toggle button mobile -->\n <button\n type=\"button\"\n class=\"flex lg:hidden items-center justify-center w-8 h-8 rounded-md text-slate-500 hover:text-slate-700 hover:bg-slate-100 transition-colors shrink-0\"\n (click)=\"toggleSidebar()\">\n <span clx-icon name=\"menu\" size=\"sm\"></span>\n </button>\n\n <ng-content select=\"[clx-header]\"></ng-content>\n </header>\n\n <main cdkScrollable class=\"flex-1 overflow-y-auto bg-white\">\n <ng-content></ng-content>\n </main>\n\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex h-screen overflow-hidden' },\n})\nexport class ClxAppLayoutComponent implements OnInit, OnDestroy {\n\n private readonly _zone: NgZone;\n private readonly _document: Document;\n\n readonly activeColor = input<ClxColorInput>('indigo');\n\n readonly _sidebarOpen = signal(false);\n readonly collapsed = signal(false);\n readonly _hovered = signal(false);\n private readonly _isMobile = signal(true);\n\n readonly collapsedChange = output<boolean>();\n readonly expandedChange = output<boolean>();\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n this._document = inject(DOCUMENT);\n }\n\n protected readonly _showBackdrop = computed(() => this._sidebarOpen() && this._isMobile());\n\n readonly _isExpanded = computed(() => !this.collapsed() || this._hovered());\n\n protected readonly _sidebarCls = computed(() => {\n const isDesktopCollapsed = this.collapsed() && !this._isMobile();\n const hovered = this._hovered();\n let width: string;\n if (isDesktopCollapsed && hovered) {\n width = 'w-72';\n } else if (isDesktopCollapsed) {\n width = 'w-20';\n } else {\n width = 'w-72';\n }\n const isOverlay = isDesktopCollapsed && hovered;\n return [\n `fixed inset-y-0 left-0 z-30 ${width} flex flex-col`,\n 'bg-slate-900 overflow-hidden shrink-0',\n 'transition-[width,transform] duration-300 ease-in-out',\n isOverlay ? 'shadow-2xl' : '',\n 'lg:transition-[width] lg:relative lg:inset-auto lg:z-30 lg:translate-x-0',\n (!this._isMobile() || this._sidebarOpen()) ? 'translate-x-0' : '-translate-x-full',\n ].join(' ');\n });\n\n private _mql!: MediaQueryList;\n private _mqlListener!: (e: MediaQueryListEvent) => void;\n\n ngOnInit(): void {\n const win = this._document.defaultView;\n if (!win) return;\n\n this._mql = win.matchMedia('(min-width: 1024px)');\n this._isMobile.set(!this._mql.matches);\n if (this._mql.matches) this._sidebarOpen.set(true);\n\n this._mqlListener = (e: MediaQueryListEvent) => {\n this._zone.run(() => {\n this._isMobile.set(!e.matches);\n if (e.matches) {\n this._sidebarOpen.set(true);\n } else {\n this._sidebarOpen.set(false);\n this.collapsed.set(false);\n this.collapsedChange.emit(false);\n }\n });\n };\n\n this._mql.addEventListener('change', this._mqlListener);\n }\n\n ngOnDestroy(): void {\n this._mql?.removeEventListener('change', this._mqlListener);\n }\n\n _toggleCollapsed(): void {\n const next = !this.collapsed();\n this.collapsed.set(next);\n this._hovered.set(false);\n this.collapsedChange.emit(next);\n }\n\n _onSidebarEnter(): void {\n if (this.collapsed() && !this._isMobile()) {\n this._hovered.set(true);\n this.expandedChange.emit(true);\n }\n }\n\n _onSidebarLeave(): void {\n if (this._hovered()) {\n this._hovered.set(false);\n this.expandedChange.emit(false);\n }\n }\n\n toggleSidebar(): void { this._sidebarOpen.update(v => !v); }\n openSidebar(): void { this._sidebarOpen.set(true); }\n closeSidebar(): void { this._sidebarOpen.set(false); }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'clx-brand',\n standalone: true,\n template: `\n <div [class]=\"collapsed() ? 'flex items-center justify-center py-4' : 'flex items-center gap-3 px-4 py-4'\">\n <img [src]=\"logo()\" [alt]=\"name()\" class=\"h-8 w-8 shrink-0 object-contain\" />\n @if (!collapsed()) {\n <div class=\"min-w-0 overflow-hidden\">\n <p class=\"text-white text-sm font-semibold truncate leading-tight\">{{ name() }}</p>\n @if (description()) {\n <p class=\"text-slate-400 text-xs truncate leading-tight\">{{ description() }}</p>\n }\n </div>\n }\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxBrandComponent {\n readonly logo = input.required<string>();\n readonly name = input.required<string>();\n readonly description = input<string>('');\n readonly collapsed = input<boolean>(false);\n}\n","\n// ── Item geometry ──────────────────────────────────────────────────────────────\nexport const NAV_ITEM_BASE = 'flex items-center gap-3 w-full text-sm font-medium transition-colors duration-150 cursor-pointer select-none';\nexport const NAV_ITEM_L1 = 'px-6 py-3';\nexport const NAV_ITEM_L2 = 'pl-4 pr-3 py-2';\nexport const NAV_ITEM_IDLE = 'text-slate-400';\n\n// ── Children container ─────────────────────────────────────────────────────────\nexport const NAV_CHILDREN_WRAPPER = 'grid transition-all duration-300 ease-in-out';\nexport const NAV_CHILDREN_INNER = 'overflow-hidden';\nexport const NAV_CHILDREN_LIST = 'ml-6 py-1 space-y-0.5';\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport {\n NAV_ITEM_BASE,\n NAV_ITEM_L1,\n NAV_ITEM_L2,\n NAV_ITEM_IDLE,\n} from '../../../configs/nav.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-menu-item',\n standalone: true,\n imports: [ClxIconComponent, RouterLink, RouterLinkActive],\n template: `\n @if (routerLink()) {\n <a\n [routerLink]=\"routerLink()\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n [class]=\"rla.isActive ? _activeCls() : _idleCls()\"\n [title]=\"collapsed() ? label() : ''\">\n @if (icon()) {\n <span clx-icon [name]=\"icon()\" size=\"sm\" [class]=\"rla.isActive || nested() ? _iconCls() : 'text-slate-500'\"></span>\n }\n @if (!collapsed()) {\n <span class=\"flex-1 text-left truncate\">{{ label() }}</span>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"active() ? _activeCls() : _idleCls()\"\n [title]=\"collapsed() ? label() : ''\"\n (click)=\"itemClick.emit()\">\n @if (icon()) {\n <span clx-icon [name]=\"icon()\" size=\"sm\" [class]=\"active() || nested() ? _iconCls() : 'text-slate-500'\"></span>\n }\n @if (!collapsed()) {\n <span class=\"flex-1 text-left truncate\">{{ label() }}</span>\n }\n </button>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxMenuItemComponent {\n\n readonly label = input.required<string>();\n readonly icon = input<string>('');\n readonly active = input<boolean>(false);\n readonly color = input<ClxColorInput>('indigo');\n readonly nested = input<boolean>(false);\n readonly collapsed = input<boolean>(false);\n\n readonly routerLink = input<string | any[]>('');\n readonly routerLinkActiveOptions = input<{ exact: boolean }>({ exact: false });\n\n readonly itemClick = output<void>();\n\n private readonly _inheritedColor = signal<ClxColorInput | null>(null);\n private readonly _resolvedColor = computed(() => this._inheritedColor() ?? this.color());\n\n inheritColor(c: ClxColorInput): void { this._inheritedColor.set(c); }\n\n private readonly _geom = computed(() => {\n if (this.collapsed()) return 'w-full py-3 px-0 justify-center';\n return this.nested() ? NAV_ITEM_L2 : NAV_ITEM_L1;\n });\n\n protected readonly _iconCls = computed(() => resolveColor(this._resolvedColor()).textSubtle);\n\n protected readonly _idleCls = computed(() => {\n const t = resolveColor(this._resolvedColor());\n return `${NAV_ITEM_BASE} ${this._geom()} ${NAV_ITEM_IDLE} ${t.hoverBgMuted}`;\n });\n\n protected readonly _activeCls = computed(() => {\n const t = resolveColor(this._resolvedColor());\n if (this.collapsed()) {\n return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold`;\n }\n return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px] ${t.hoverBgMuted}`;\n });\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n DestroyRef,\n effect,\n inject,\n input,\n QueryList,\n signal,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport {\n NAV_ITEM_BASE,\n NAV_ITEM_L1,\n NAV_ITEM_IDLE,\n NAV_CHILDREN_WRAPPER,\n NAV_CHILDREN_INNER,\n NAV_CHILDREN_LIST,\n} from '../../../configs/nav.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxMenuItemComponent } from '../clx-menu-item/clx-menu-item.component';\n\n@Component({\n selector: 'clx-menu',\n standalone: true,\n imports: [ClxIconComponent, RouterLink, RouterLinkActive],\n template: `\n @if (routerLink()) {\n <a\n [routerLink]=\"routerLink()\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n [class]=\"_buttonCls(rla.isActive)\"\n [title]=\"collapsed() ? label() : ''\"\n (click)=\"$event.preventDefault(); !collapsed() && _toggle()\">\n @if (icon()) {\n <span clx-icon [name]=\"icon()\" size=\"sm\" [class]=\"_iconCls()\"></span>\n }\n @if (!collapsed()) {\n <span class=\"flex-1 text-left truncate\">{{ label() }}</span>\n <span\n clx-icon\n name=\"expand_more\"\n size=\"sm\"\n class=\"shrink-0 transition-transform duration-300\"\n [style.transform]=\"_isExpanded() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n </span>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"_buttonCls(active())\"\n [title]=\"collapsed() ? label() : ''\"\n (click)=\"!collapsed() && _toggle()\">\n @if (icon()) {\n <span clx-icon [name]=\"icon()\" size=\"sm\" [class]=\"_iconCls()\"></span>\n }\n @if (!collapsed()) {\n <span class=\"flex-1 text-left truncate\">{{ label() }}</span>\n <span\n clx-icon\n name=\"expand_more\"\n size=\"sm\"\n class=\"shrink-0 transition-transform duration-300\"\n [style.transform]=\"_isExpanded() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n </span>\n }\n </button>\n }\n\n <div\n [class]=\"NAV_CHILDREN_WRAPPER\"\n [style.grid-template-rows]=\"(!collapsed() && _isExpanded()) ? '1fr' : '0fr'\">\n <div [class]=\"NAV_CHILDREN_INNER\">\n <div [class]=\"NAV_CHILDREN_LIST\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxMenuComponent implements AfterContentInit, AfterViewInit {\n\n readonly label = input.required<string>();\n readonly icon = input<string>('');\n readonly color = input<ClxColorInput>('indigo');\n readonly collapsed = input<boolean>(false);\n readonly active = input<boolean>(false);\n\n readonly routerLink = input<string | any[]>('');\n readonly routerLinkActiveOptions = input<{ exact: boolean }>({ exact: false });\n\n readonly _isExpanded = signal(false);\n\n @ViewChild(RouterLinkActive)\n private readonly _rla?: RouterLinkActive;\n\n @ContentChildren(ClxMenuItemComponent, { descendants: true })\n private readonly _childItems!: QueryList<ClxMenuItemComponent>;\n\n private readonly _destroyRef = inject(DestroyRef);\n\n constructor() {\n effect(() => { if (this.active()) this._isExpanded.set(true); });\n effect(() => { if (this.collapsed()) this._isExpanded.set(false); });\n }\n\n ngAfterViewInit(): void {\n if (this._rla) {\n this._rla.isActiveChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isActive: boolean) => {\n if (isActive) this._isExpanded.set(true);\n });\n }\n }\n\n protected readonly _iconCls = computed(() => resolveColor(this.color()).textSubtle);\n\n protected _buttonCls(isActive: boolean): string {\n const geom = this.collapsed() ? 'w-full py-3 px-0 justify-center' : NAV_ITEM_L1;\n const base = `${NAV_ITEM_BASE} ${geom}`;\n const t = resolveColor(this.color());\n if (isActive) {\n if (this.collapsed()) return `${base} ${t.textSubtle} font-semibold`;\n return `${base} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px]`;\n }\n return `${base} ${NAV_ITEM_IDLE} ${t.hoverBgMuted}`;\n }\n\n protected readonly NAV_CHILDREN_WRAPPER = NAV_CHILDREN_WRAPPER;\n protected readonly NAV_CHILDREN_INNER = NAV_CHILDREN_INNER;\n protected readonly NAV_CHILDREN_LIST = NAV_CHILDREN_LIST;\n\n ngAfterContentInit(): void {\n this._syncChildren();\n this._childItems.changes\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => this._syncChildren());\n }\n\n private _syncChildren(): void {\n const color = this.color();\n this._childItems.forEach(c => c.inheritColor(color));\n }\n\n protected _toggle(): void {\n this._isExpanded.update(v => !v);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'clx-nav-group',\n standalone: true,\n template: `\n @if (!collapsed()) {\n <span class=\"block px-6 pt-5 pb-1 text-[10px] font-bold uppercase tracking-widest text-slate-500 select-none\">{{ label() }}</span>\n } @else {\n <span class=\"flex items-center justify-center w-full py-3\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-slate-600\"></span>\n </span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxNavGroupComponent {\n readonly label = input.required<string>();\n readonly collapsed = input<boolean>(false);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ConnectedPosition, OverlayModule, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport { ClxAvatarComponent } from '../../base/clx-avatar/clx-avatar.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxBadgeComponent } from '../../base/clx-badge/clx-badge.component';\n\n\nexport interface ClxProfileMenuItem {\n label: string;\n icon: string;\n action: string;\n}\n\n@Component({\n selector: 'clx-profile',\n standalone: true,\n imports: [OverlayModule, ClxAvatarComponent, ClxButtonComponent, ClxBadgeComponent],\n template: `\n <!-- ── Trigger ─────────────────────────────────────────────────────────── -->\n <button\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n type=\"button\"\n class=\"flex items-center gap-2 rounded-full focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 cursor-pointer\"\n [class]=\"_ringClass()\"\n (click)=\"_toggle()\">\n <clx-avatar\n [initials]=\"_initials()\"\n [src]=\"avatarSrc()\"\n [color]=\"color()\"\n size=\"sm\" />\n </button>\n\n <!-- ── Overlay panel ─────────────────────────────────────────────────── -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_close()\"\n (overlayKeydown)=\"_onKeydown($event)\">\n\n <div class=\"w-64 bg-white rounded-2xl shadow-xl border border-slate-200 overflow-hidden mt-2\">\n\n <!-- Header: avatar + name + role -->\n <div class=\"px-4 py-4 flex items-center gap-3\" [class]=\"_headerBgClass()\">\n <clx-avatar\n [initials]=\"_initials()\"\n [src]=\"avatarSrc()\"\n [color]=\"color()\"\n size=\"md\" />\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-sm font-semibold text-slate-800 truncate\">{{ fullName() }}</p>\n <p class=\"text-xs text-slate-500 truncate\">{{ username() }}</p>\n @if (role()) {\n <span clx-badge [color]=\"color()\" variant=\"light\" size=\"sm\" class=\"mt-1\">{{ role() }}</span>\n }\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"border-t border-slate-100\"></div>\n\n <!-- Menu items -->\n @if (menuItems().length) {\n <div class=\"p-1.5\">\n @for (item of menuItems(); track item.action) {\n <button clx-button variant=\"ghost\" [color]=\"color()\" [block]=\"true\" [icon]=\"item.icon\"\n class=\"justify-start rounded-xl!\"\n (click)=\"_onAction(item.action)\">\n {{ item.label }}\n </button>\n }\n </div>\n <div class=\"border-t border-slate-100 mx-3\"></div>\n }\n\n <!-- Sign out -->\n <div class=\"p-1.5\">\n <button clx-button variant=\"ghost\" color=\"red\" [block]=\"true\" icon=\"logout\"\n class=\"justify-start rounded-xl!\"\n (click)=\"_onSignOut()\">\n {{ signOutLabel() }}\n </button>\n </div>\n\n </div>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'relative inline-flex items-center' },\n})\nexport class ClxProfileComponent {\n\n // ── Inputs ──────────────────────────────────────────────────────────────────\n readonly firstName = input<string>('');\n readonly lastName = input<string>('');\n readonly username = input<string>('');\n readonly role = input<string>('');\n readonly avatarSrc = input<string | null>(null);\n readonly color = input<ClxColorInput>('indigo');\n readonly menuItems = input<ClxProfileMenuItem[]>([]);\n readonly signOutLabel = input<string>('Cerrar sesión');\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n readonly menuAction = output<string>();\n readonly signOut = output<void>();\n\n // ── CDK Overlay ─────────────────────────────────────────────────name──────────────────────\n private readonly _sso = inject(ScrollStrategyOptions);\n readonly _scrollStrategy = this._sso.reposition();\n\n readonly _positions: ConnectedPosition[] = [\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 8 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -8 },\n ];\n\n // ── State ────────────────────────────────────────────────────────────────────\n protected readonly _isOpen = signal(false);\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n readonly fullName = computed(() =>\n `${this.firstName()} ${this.lastName()}`.trim() || this.username()\n );\n\n protected readonly _initials = computed(() => {\n const f = this.firstName().charAt(0).toUpperCase();\n const l = this.lastName().charAt(0).toUpperCase();\n return f && l ? `${f}${l}` : (f || this.username().charAt(0).toUpperCase());\n });\n\n protected readonly _ringClass = computed(() => {\n const t = resolveColor(this.color());\n return `focus-visible:${t.ringBase}`;\n });\n\n protected readonly _headerBgClass = computed(() => {\n const t = resolveColor(this.color());\n return `${t.bgSubtle}`;\n });\n\n\n // ── Methods ──────────────────────────────────────────────────────────────────\n protected _toggle(): void { this._isOpen.update(v => !v); }\n protected _close(): void { this._isOpen.set(false); }\n\n protected _onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._close();\n }\n\n protected _onAction(action: string): void {\n this.menuAction.emit(action);\n this._close();\n }\n\n protected _onSignOut(): void {\n this.signOut.emit();\n this._close();\n }\n}\n","import type { ClxTableSort } from '../types/clx-table.types';\n\n// ── Base classes ─────────────────────────────────────────────────────────────\nexport const TABLE_BASE_CLASS = 'w-full text-left border-collapse text-sm';\nexport const TABLE_HEADER_CELL_CLASS = 'px-4 py-3 font-semibold whitespace-nowrap';\nexport const TABLE_CELL_CLASS = 'px-4 py-3 border-b border-slate-100 text-slate-700';\nexport const TABLE_ROW_CLASS = '';\n\n// ── Alignment ────────────────────────────────────────────────────────────────\nexport const TABLE_ALIGN_MAP: Record<'left' | 'center' | 'right', string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\n// ── Sort icons ───────────────────────────────────────────────────────────────\nexport const TABLE_SORT_ICON_MAP: Record<ClxTableSort | 'none', string> = {\n asc: 'arrow_upward',\n desc: 'arrow_downward',\n none: 'swap_vert',\n};\n","import {\n contentChild,\n Directive,\n Input,\n TemplateRef,\n} from '@angular/core';\n\n// ── Contexto tipado para celdas ────────────────────────────────────────────\nexport interface ClxCellContext<T> {\n $implicit: T;\n index: number;\n}\n\n// ── Header template dentro de clxColumn ───────────────────────────────────\n@Directive({\n selector: 'ng-template[clxHeaderCell]',\n standalone: true,\n})\nexport class ClxHeaderCellDirective<_T> {\n constructor(public readonly templateRef: TemplateRef<void>) {}\n}\n\n// ── Cell template dentro de clxColumn ─────────────────────────────────────\n@Directive({\n selector: 'ng-template[clxCell]',\n standalone: true,\n})\nexport class ClxCellDirective<T> {\n constructor(public readonly templateRef: TemplateRef<ClxCellContext<T>>) {}\n\n // Permite que Angular infiera el tipo del contexto con `let-row`\n static ngTemplateContextGuard<T>(\n _dir: ClxCellDirective<T>,\n _ctx: unknown,\n ): _ctx is ClxCellContext<T> {\n return true;\n }\n}\n\n// ── Contenedor de columna personalizada ───────────────────────────────────\n@Directive({\n selector: '[clxColumn]',\n standalone: true,\n})\nexport class ClxColumnDefDirective<T> {\n @Input('clxColumn') name!: string;\n\n readonly headerCell = contentChild(ClxHeaderCellDirective<T>);\n readonly cell = contentChild(ClxCellDirective<T>);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\n\n@Component({\n selector: 'clx-page-empty',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col items-center justify-center w-full px-6 text-center' },\n template: `\n <div [class]=\"_iconWrap()\">\n <span clx-icon [name]=\"icon()\" [size]=\"_iconSize()\" class=\"text-slate-300\"></span>\n </div>\n\n <p [class]=\"_titleCls()\">{{ title() }}</p>\n\n @if (description()) {\n <p [class]=\"_descCls()\">{{ description() }}</p>\n }\n\n @if (ctaLabel()) {\n <button\n clx-button\n [color]=\"ctaColor()\"\n variant=\"solid\"\n [icon]=\"ctaIcon()\"\n [class]=\"_ctaCls()\"\n (click)=\"cta.emit()\">\n {{ ctaLabel() }}\n </button>\n }\n `,\n})\nexport class ClxPageEmptyComponent {\n readonly icon = input<string>('inbox');\n readonly title = input<string>('Sin resultados');\n readonly description = input<string>('');\n readonly ctaLabel = input<string>('');\n readonly ctaIcon = input<string>('add');\n readonly ctaColor = input<ClxColorInput>('indigo');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n\n readonly cta = output<void>();\n\n protected _iconWrap() {\n const s = this.size();\n const sz = s === 'sm' ? 'w-12 h-12' : s === 'lg' ? 'w-20 h-20' : 'w-16 h-16';\n return `${sz} rounded-2xl bg-slate-100 flex items-center justify-center mb-4`;\n }\n\n protected _iconSize(): 'sm' | 'md' | 'lg' | 'xl' {\n const s = this.size();\n return s === 'sm' ? 'md' : s === 'lg' ? 'xl' : 'lg';\n }\n\n protected _titleCls() {\n const s = this.size();\n return s === 'sm'\n ? 'text-sm font-semibold text-slate-600 mb-1'\n : s === 'lg'\n ? 'text-xl font-semibold text-slate-700 mb-2'\n : 'text-base font-semibold text-slate-700 mb-1';\n }\n\n protected _descCls() {\n const s = this.size();\n return `${s === 'lg' ? 'text-sm' : 'text-xs'} text-slate-400 max-w-xs mb-5`;\n }\n\n protected _ctaCls() {\n return this.size() === 'sm' ? 'mt-3' : 'mt-5';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport type { ClxTableColumn, ClxTableSort } from '../../../../types/clx-table.types';\nimport type { ClxTablePageEvent, ClxTableSelectionEvent, ClxTableSortEvent } from '../../../../types/clx-table.types';\nimport type { ClxColorInput } from '../../../../types/clx-color.types';\nimport { resolveColor, parseColorInput } from '../../../../types/clx-color.types';\nimport {\n TABLE_BASE_CLASS,\n TABLE_HEADER_CELL_CLASS,\n TABLE_CELL_CLASS,\n TABLE_ROW_CLASS,\n TABLE_ALIGN_MAP,\n} from '../../../../configs/table.configs';\nimport { ClxColumnDefDirective } from '../../../../directives/clx-table-cell.directive';\nimport { ClxCheckboxComponent } from '../../../forms/clx-checkbox/clx-checkbox.component';\nimport { ClxInputComponent } from '../../../forms/clx-input/clx-input.component';\nimport { ClxSkeletonComponent } from '../../../base/clx-skeleton/clx-skeleton.component';\nimport { ClxIconComponent } from '../../../base/clx-icon/clx-icon.component';\nimport { ClxPaginationComponent } from '../../../advanced/clx-pagination/clx-pagination.component';\nimport { ClxPageEmptyComponent } from '../../../pages/clx-page-empty/clx-page-empty.component';\n\n@Component({\n selector: 'clx-table',\n standalone: true,\n imports: [\n FormsModule,\n NgTemplateOutlet,\n ClxCheckboxComponent,\n ClxInputComponent,\n ClxSkeletonComponent,\n ClxIconComponent,\n ClxPaginationComponent,\n ClxPageEmptyComponent,\n ],\n template: `\n <!-- ── Toolbar: búsqueda ──────────────────────────────────────────────── -->\n @if (searchable() && !loading()) {\n <div class=\"mb-3 max-w-80 min-w-40\">\n <clx-input\n placeholder=\"Buscar...\"\n size=\"sm\"\n suffixIcon=\"search\"\n [color]=\"color()\"\n [(ngModel)]=\"searchQuery\">\n </clx-input>\n </div>\n }\n\n @if (loading()) {\n <!-- ── Loading State ───────────────────────────────────────────────── -->\n <div class=\"space-y-3\">\n @for (row of [1, 2, 3, 4, 5]; track row) {\n <div class=\"flex items-center gap-4\">\n @if (selectable()) {\n <clx-skeleton variant=\"circular\" size=\"xs\"></clx-skeleton>\n }\n @for (col of columns(); track col.key) {\n <clx-skeleton variant=\"text\" size=\"md\" [style.width]=\"col.width || '120px'\"></clx-skeleton>\n }\n </div>\n }\n </div>\n } @else if (_filteredData().length === 0) {\n <!-- ── Empty State ─────────────────────────────────────────────────── -->\n <div class=\"py-10\">\n <clx-page-empty\n size=\"sm\"\n [icon]=\"emptyIcon()\"\n [title]=\"_emptyTitle()\"\n [description]=\"_emptyDescription()\" />\n </div>\n } @else {\n <!-- ── Tabla ───────────────────────────────────────────────────────── -->\n <div class=\"overflow-x-auto\">\n <table [class]=\"_tableClass()\">\n <thead>\n <tr [class]=\"_headerClass()\">\n @if (selectable()) {\n <th [class]=\"_headerCellClass()\"\n [class.rounded-tl-lg]=\"true\"\n [class.rounded-bl-lg]=\"true\"\n class=\"w-10 text-center\">\n <clx-checkbox\n [color]=\"color()\"\n [ngModel]=\"_allSelected()\"\n (ngModelChange)=\"_handleSelectAll($event)\">\n </clx-checkbox>\n </th>\n }\n\n @for (col of columns(); track col.key; let first = $first; let last = $last) {\n <th\n [class]=\"_getHeaderCellClass(col)\"\n [class.rounded-tl-lg]=\"first && !selectable()\"\n [class.rounded-bl-lg]=\"first && !selectable()\"\n [class.rounded-tr-lg]=\"last\"\n [class.rounded-br-lg]=\"last\"\n [style.width]=\"col.width\"\n (click)=\"col.sortable && _handleSort(col.key)\">\n <div class=\"flex items-center gap-1.5\"\n [class.justify-end]=\"col.align === 'right'\"\n [class.justify-center]=\"col.align === 'center'\">\n @if (_getColumnDef(col.key)?.headerCell()?.templateRef; as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n } @else {\n <span>{{ col.header || col.key }}</span>\n }\n @if (col.sortable) {\n <span class=\"opacity-50\">\n @if (sortKey() === col.key && sortDir() === 'asc') {\n <span clx-icon name=\"arrow_upward\" size=\"xs\"></span>\n } @else if (sortKey() === col.key && sortDir() === 'desc') {\n <span clx-icon name=\"arrow_downward\" size=\"xs\"></span>\n } @else {\n <span clx-icon name=\"swap_vert\" size=\"xs\"></span>\n }\n </span>\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (item of _paginatedData(); track i; let i = $index) {\n <tr [class]=\"_rowClass()\">\n @if (selectable()) {\n <td [class]=\"_cellClass()\" class=\"text-center\">\n <clx-checkbox\n [color]=\"color()\"\n [ngModel]=\"_isSelected(item)\"\n (ngModelChange)=\"_handleSelectItem(item, $event)\">\n </clx-checkbox>\n </td>\n }\n\n @for (col of columns(); track col.key) {\n <td [class]=\"_getDataCellClass(col)\">\n @if (_getColumnDef(col.key)?.cell()?.templateRef; as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: i }\">\n </ng-container>\n } @else {\n {{ _getCellValue(item, col.key) }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!-- ── Footer: clx-pagination ────────────────────────────────────────── -->\n @if (pagination()) {\n <div class=\"border-t border-slate-100 pt-3\">\n <clx-pagination\n size=\"sm\"\n [totalItems]=\"_totalItems()\"\n [color]=\"color()\"\n [(currentPage)]=\"_currentPage\"\n [(pageSize)]=\"pageSize\"\n (pageChange)=\"_onPaginationPageChange($event.page)\">\n </clx-pagination>\n </div>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxTableComponent<T = any> {\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly data = input.required<T[]>();\n readonly columns = input<ClxTableColumn<T>[]>([]);\n readonly loading = input<boolean>(false);\n readonly selectable = input<boolean>(false);\n readonly searchable = input<boolean>(true);\n readonly pagination = input<boolean>(true);\n readonly color = input<ClxColorInput>('indigo');\n readonly emptyIcon = input<string>('table_chart');\n readonly emptyTitle = input<string>('');\n readonly emptyDescription = input<string>('');\n\n // ── Models ─────────────────────────────────────────────────────────────────\n readonly sortKey = model<string | null>(null);\n readonly sortDir = model<ClxTableSort | null>(null);\n readonly pageIndex = model(0);\n readonly pageSize = model(5);\n readonly _currentPage = model(1);\n readonly searchQuery = model('');\n readonly selectedItems = model<T[]>([]);\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n readonly sortChange = output<ClxTableSortEvent>();\n readonly pageChange = output<ClxTablePageEvent>();\n readonly selectionChange = output<ClxTableSelectionEvent<T>>();\n\n // ── Content Children ───────────────────────────────────────────────────────\n private readonly _columnDefs = contentChildren(ClxColumnDefDirective);\n\n protected _onPaginationPageChange(page: number): void {\n const idx = page - 1;\n this.pageIndex.set(idx);\n this.pageChange.emit({ pageIndex: idx, pageSize: this.pageSize() });\n }\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _tableClass = computed(() => {\n const { color } = parseColorInput(this.color());\n const stripe = `[&_tbody_tr:nth-child(even)]:bg-${color}-50/50`;\n return `${TABLE_BASE_CLASS} ${stripe}`;\n });\n\n protected readonly _headerClass = computed(() => {\n const t = resolveColor(this.color());\n return `${t.bgSubtle} ${t.textSubtle}`;\n });\n protected readonly _headerCellClass = computed(() => TABLE_HEADER_CELL_CLASS);\n protected readonly _cellClass = computed(() => TABLE_CELL_CLASS);\n protected readonly _rowClass = computed(() => TABLE_ROW_CLASS);\n\n private readonly _columnDefMap = computed(() => {\n const map = new Map<string, ClxColumnDefDirective<T>>();\n for (const def of this._columnDefs()) {\n map.set(def.name, def as ClxColumnDefDirective<T>);\n }\n return map;\n });\n\n protected _getColumnDef(key: string): ClxColumnDefDirective<T> | undefined {\n return this._columnDefMap().get(key);\n }\n\n protected readonly _filteredData = computed(() => {\n let result = [...this.data()];\n\n const query = this.searchQuery().toLowerCase().trim();\n if (query) {\n result = result.filter(item =>\n Object.values(item as object).some(val =>\n String(val).toLowerCase().includes(query)\n )\n );\n }\n\n const key = this.sortKey();\n const dir = this.sortDir();\n if (key && dir) {\n result.sort((a, b) => {\n const aVal = (a as Record<string, unknown>)[key];\n const bVal = (b as Record<string, unknown>)[key];\n const cmp = String(aVal).localeCompare(String(bVal));\n return dir === 'asc' ? cmp : -cmp;\n });\n }\n\n return result;\n });\n\n protected readonly _paginatedData = computed(() => {\n const filtered = this._filteredData();\n if (!this.pagination()) return filtered;\n const start = this.pageIndex() * this.pageSize();\n return filtered.slice(start, start + this.pageSize());\n });\n\n protected readonly _totalItems = computed(() => this._filteredData().length);\n\n protected readonly _emptyTitle = computed(() =>\n this.emptyTitle() || (this.searchQuery() ? 'Sin resultados' : 'No hay datos')\n );\n\n protected readonly _emptyDescription = computed(() =>\n this.emptyDescription() ||\n (this.searchQuery()\n ? `No se encontraron elementos para \"${this.searchQuery()}\"`\n : 'No hay datos para mostrar.')\n );\n\n protected readonly _allSelected = computed(() => {\n const current = this._paginatedData();\n return current.length > 0 && current.every(item => this._isSelected(item));\n });\n\n protected _isSelected(item: T): boolean {\n return this.selectedItems().some(s => s === item);\n }\n\n protected _getAlignClass(align: 'left' | 'center' | 'right'): string {\n return TABLE_ALIGN_MAP[align];\n }\n\n protected _getHeaderCellClass(col: ClxTableColumn<T>): string {\n const align = this._getAlignClass(col.align || 'left');\n const cursor = col.sortable ? 'cursor-pointer select-none' : '';\n const extra = col.headerClass || '';\n return `${TABLE_HEADER_CELL_CLASS} ${align} ${cursor} ${extra}`.trim();\n }\n\n protected _getDataCellClass(col: ClxTableColumn<T>): string {\n const align = this._getAlignClass(col.align || 'left');\n const extra = col.cellClass || '';\n return `${TABLE_CELL_CLASS} ${align} ${extra}`.trim();\n }\n\n protected _getCellValue(item: T, key: string): unknown {\n return (item as Record<string, unknown>)[key];\n }\n\n protected _handleSort(key: string): void {\n const currentDir = this.sortKey() === key ? this.sortDir() : null;\n const newDir: ClxTableSort | null =\n currentDir === null ? 'asc' : currentDir === 'asc' ? 'desc' : null;\n\n this.sortKey.set(newDir ? key : null);\n this.sortDir.set(newDir);\n this.pageIndex.set(0);\n this._currentPage.set(1);\n this.sortChange.emit({ key, direction: newDir });\n }\n\n protected _handleSelectAll(checked: boolean): void {\n const current = this._paginatedData();\n if (checked) {\n const next = [...this.selectedItems()];\n current.forEach(item => { if (!next.includes(item)) next.push(item); });\n this.selectedItems.set(next);\n } else {\n this.selectedItems.set(this.selectedItems().filter(item => !current.includes(item)));\n }\n this.selectionChange.emit({\n selected: this.selectedItems(),\n allSelected: checked && current.length > 0,\n });\n }\n\n protected _handleSelectItem(item: T, checked: boolean): void {\n if (checked) {\n this.selectedItems.update(s => [...s, item]);\n } else {\n this.selectedItems.update(s => s.filter(x => x !== item));\n }\n this.selectionChange.emit({ selected: this.selectedItems(), allSelected: false });\n }\n}\n","export const WISHLIST_PAGE_SIZE_DEFAULT = 6;\n\nexport const WISHLIST_SORT_OPTIONS = [\n { value: 'default', label: 'Default' },\n { value: 'price-asc', label: 'Price: Low to High' },\n { value: 'price-desc', label: 'Price: High to Low' },\n { value: 'rating', label: 'Top Rated' },\n { value: 'name', label: 'Name A–Z' },\n];\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxWishlistItem, ClxWishlistPageChangeEvent } from '../../../types/clx-wishlist.types';\nimport type { ClxSelectOption } from '../../../types/clx-select.types';\nimport { WISHLIST_PAGE_SIZE_DEFAULT, WISHLIST_SORT_OPTIONS } from '../../../configs/wishlist.config';\nimport { ClxButtonComponent } from '../../../components/base/clx-button/clx-button.component';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\nimport { ClxSkeletonComponent } from '../../../components/base/clx-skeleton/clx-skeleton.component';\nimport { ClxPaginationComponent } from '../../../components/advanced/clx-pagination/clx-pagination.component';\nimport { ClxInputComponent } from '../../../components/forms/clx-input/clx-input.component';\nimport { ClxSelectComponent } from '../../../components/forms/clx-select/clx-select.component';\nimport { ClxTooltipDirective } from '../../../directives/clx-tooltip.directive';\n\n@Component({\n selector: 'clx-wishlist',\n standalone: true,\n imports: [\n CurrencyPipe,\n FormsModule,\n ClxButtonComponent,\n ClxBadgeComponent,\n ClxIconComponent,\n ClxSkeletonComponent,\n ClxPaginationComponent,\n ClxInputComponent,\n ClxSelectComponent,\n ClxTooltipDirective\n ],\n template: `\n <div class=\"flex flex-col gap-6\">\n\n <!-- ── Top Bar ──────────────────────────────────────────────────────── -->\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-3\">\n <div class=\"flex-1 min-w-0\">\n <clx-input\n type=\"search\"\n placeholder=\"Search Here\"\n prefixIcon=\"search\"\n size=\"md\"\n [color]=\"color()\"\n [(ngModel)]=\"_searchModel\"\n (ngModelChange)=\"handleSearch($event)\"\n />\n </div>\n <div class=\"w-full sm:w-52 shrink-0\">\n <clx-select\n placeholder=\"Sort By\"\n [options]=\"sortOptions()\"\n [activeColor]=\"color()\"\n size=\"md\"\n [(ngModel)]=\"_sortModel\"\n (ngModelChange)=\"handleSort($event)\"\n />\n </div>\n </div>\n\n <!-- ── Info Bar ─────────────────────────────────────────────────────── -->\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between gap-3\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-slate-500 text-sm\">Adding</span>\n <span class=\"font-bold text-slate-700 text-sm\">{{ _totalItems() }}</span>\n <span clx-badge variant=\"light\" [color]=\"color()\" size=\"sm\">items</span>\n <span class=\"text-slate-500 text-sm\">to your wishlist</span>\n </div>\n <button\n clx-button\n variant=\"light\"\n [color]=\"color()\"\n size=\"sm\"\n icon=\"arrow_forward\"\n iconPosition=\"right\"\n [disabled]=\"_totalItems() === 0\"\n (click)=\"handleCheckoutAll()\"\n >Checkout All</button>\n </div>\n\n <!-- ── List ─────────────────────────────────────────────────────────── -->\n @if (loading()) {\n\n <div class=\"flex flex-col gap-4\">\n @for (s of _skeletonItems; track $index) {\n <div class=\"bg-white rounded-2xl overflow-hidden flex flex-col sm:flex-row items-stretch shadow-sm\">\n <div class=\"shrink-0 aspect-square sm:aspect-auto sm:w-44 bg-slate-200 animate-pulse\"></div>\n <div class=\"p-3 flex flex-col gap-3 flex-1\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"60%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"85%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"40%\" />\n <div class=\"flex gap-2 mt-auto\">\n <clx-skeleton variant=\"rectangular\" height=\"36px\" width=\"100%\" />\n </div>\n </div>\n </div>\n }\n </div>\n\n } @else if (_pagedItems().length === 0) {\n\n <div class=\"flex flex-col items-center justify-center py-20 gap-4 text-slate-400\">\n <span clx-icon name=\"heart_broken\" size=\"xl\"></span>\n <p class=\"text-base font-medium\">Your wishlist is empty</p>\n <p class=\"text-sm\">Start adding items you love!</p>\n </div>\n\n } @else {\n\n <div class=\"grid grid-cols-1 xl:grid-cols-2 gap-4\">\n @for (item of _pagedItems(); track item.id; let first = $first) {\n <!-- misma estructura y clases que clx-product layout=horizontal -->\n <article [class]=\"_cardClass\">\n\n <!-- Image Container -->\n <div [class]=\"_imageContainerClass\">\n @if (item.main_image) {\n <img [src]=\"item.main_image\" [alt]=\"item.name\" [class]=\"_imageClass\" [loading]=\"first ? 'eager' : 'lazy'\" />\n } @else {\n <div class=\"w-full h-full flex items-center justify-center bg-slate-100\">\n <span class=\"material-symbols-outlined text-slate-300\" style=\"font-size:48px\">image</span>\n </div>\n }\n\n <!-- Discount badge — misma posición que status badges en clx-product -->\n @if (_discountPercent(item)) {\n <div class=\"absolute top-3 left-3\">\n <span clx-badge variant=\"solid\" color=\"red\" size=\"sm\" shape=\"pill\">\n {{ _discountPercent(item) }}% Off\n </span>\n </div>\n }\n\n <!-- Out-of-stock overlay -->\n @if (!item.in_stock) {\n <div [class]=\"_overlayClass\"></div>\n }\n </div>\n\n <!-- Content -->\n <div [class]=\"_contentClass\">\n <div class=\"flex-1 min-w-0 mr-11\">\n <h3 [class]=\"_titleClass\">{{ item.name }}</h3>\n @if (item.description) {\n <p [class]=\"_descClass\">{{ item.description }}</p>\n }\n\n <!-- Price -->\n <div class=\"flex items-baseline gap-2 mt-2\">\n <span [class]=\"_priceClass\">{{ (item.sale_price ?? item.product_sale_price) | currency:'COP':'symbol':'1.0-0' }}</span>\n @if (item.has_discount && item.discount_price) {\n <span class=\"text-sm text-slate-400 line-through\">\n {{ item.discount_price | currency:'COP':'symbol':'1.0-0' }}\n </span>\n }\n </div>\n </div>\n\n <!-- Delete button — esquina superior derecha de la card -->\n <div class=\"absolute top-3 right-3 z-10\">\n <button\n clx-button\n variant=\"ghost\"\n color=\"red\"\n size=\"md\"\n icon=\"delete\"\n [iconOnly]=\"true\"\n shape=\"circle\"\n clxTooltip=\"Eliminar de favoritos\"\n clxTooltipPosition=\"left\"\n clxTooltipColor=\"red\"\n (click)=\"handleRemove(item)\"\n ></button>\n </div>\n\n <!-- Actions -->\n <div [class]=\"_actionsClass\">\n <button\n clx-button\n [color]=\"color()\"\n variant=\"solid\"\n size=\"md\"\n icon=\"shopping_cart\"\n iconPosition=\"left\"\n [disabled]=\"!item.in_stock\"\n [block]=\"true\"\n (click)=\"onAddToCart.emit(item)\"\n >Añadir al carrito</button>\n </div>\n </div>\n\n </article>\n }\n </div>\n\n }\n\n <!-- ── Footer ───────────────────────────────────────────────────────── -->\n @if (!loading() && _totalItems() > 0) {\n <div class=\"border-t border-slate-100 pt-3\">\n <clx-pagination\n size=\"sm\"\n [totalItems]=\"_totalItems()\"\n [color]=\"color()\"\n [(currentPage)]=\"currentPage\"\n [(pageSize)]=\"pageSize\"\n (pageChange)=\"handlePageChange($event)\">\n </clx-pagination>\n </div>\n }\n\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxWishlistComponent {\n readonly items = input<ClxWishlistItem[]>([]);\n readonly loading = input<boolean>(false);\n readonly color = input<ClxColorInput>('indigo');\n readonly sortOptions = input<ClxSelectOption[]>(WISHLIST_SORT_OPTIONS);\n\n readonly currentPage = model<number>(1);\n readonly pageSize = model<number>(WISHLIST_PAGE_SIZE_DEFAULT);\n readonly sortValue = model<string>('default');\n readonly searchValue = model<string>('');\n\n protected _searchModel = '';\n protected _sortModel: string | null = null;\n\n readonly onRemove = output<ClxWishlistItem>();\n readonly onAddToCart = output<ClxWishlistItem>();\n readonly onSearchChange = output<string>();\n readonly onSortChange = output<string>();\n readonly onPageChange = output<ClxWishlistPageChangeEvent>();\n readonly onCheckoutAll = output<ClxWishlistItem[]>();\n\n readonly _skeletonItems = Array.from({ length: 6 });\n\n protected readonly _cardClass = 'bg-white rounded-2xl shadow-sm transition-[box-shadow,transform] duration-300 overflow-hidden group hover:shadow-xl hover:-translate-y-0.5 flex flex-col sm:flex-row';\n protected readonly _imageContainerClass = 'relative shrink-0 w-full aspect-square sm:aspect-auto sm:w-40 overflow-hidden rounded-t-2xl sm:rounded-t-none sm:rounded-l-2xl';\n protected readonly _imageClass = 'w-full h-full object-cover transition-transform duration-500 group-hover:scale-105';\n protected readonly _contentClass = 'relative flex flex-col gap-2 flex-1 p-3 min-w-0';\n protected readonly _actionsClass = 'mt-auto pt-2 flex flex-col gap-2';\n protected readonly _overlayClass = 'absolute inset-0 bg-white/50 rounded-t-2xl sm:rounded-t-none sm:rounded-l-2xl';\n protected readonly _titleClass = 'font-semibold truncate text-base text-slate-900 pr-6';\n protected readonly _descClass = 'text-sm line-clamp-2 text-slate-500 mt-0.5';\n protected readonly _priceClass = 'text-lg font-bold text-slate-900';\n\n protected readonly _filtered = computed(() => {\n const q = this.searchValue().toLowerCase().trim();\n const s = this.sortValue();\n const price = (i: ClxWishlistItem) => i.sale_price ?? i.product_sale_price;\n let list = q\n ? this.items().filter(i => i.name.toLowerCase().includes(q))\n : [...this.items()];\n if (s === 'price-asc') list = list.sort((a, b) => price(a) - price(b));\n if (s === 'price-desc') list = list.sort((a, b) => price(b) - price(a));\n if (s === 'name') list = list.sort((a, b) => a.name.localeCompare(b.name));\n return list;\n });\n\n protected readonly _totalItems = computed(() => this._filtered().length);\n\n protected readonly _pagedItems = computed(() => {\n const ps = this.pageSize();\n const start = (this.currentPage() - 1) * ps;\n return this._filtered().slice(start, start + ps);\n });\n\n protected _discountPercent(item: ClxWishlistItem): number {\n if (!item.has_discount) return 0;\n if (item.discount_percentage) return Math.round(item.discount_percentage);\n const sale = item.sale_price ?? item.product_sale_price;\n if (item.discount_price && item.discount_price > sale) {\n return Math.round(((item.discount_price - sale) / item.discount_price) * 100);\n }\n return 0;\n }\n\n handleSearch(val: string): void {\n this._searchModel = val;\n this.searchValue.set(val);\n this.currentPage.set(1);\n this.onSearchChange.emit(val);\n }\n\n handleSort(val: string | number | (string | number)[] | null): void {\n const raw = Array.isArray(val) ? val[0] : val;\n const v = raw != null ? String(raw) : 'default';\n this._sortModel = v;\n this.sortValue.set(v);\n this.currentPage.set(1);\n this.onSortChange.emit(v);\n }\n\n handlePageChange(e: { page: number; pageSize: number }): void {\n this.currentPage.set(e.page);\n this.onPageChange.emit(e);\n }\n\n handleRemove(item: ClxWishlistItem): void {\n this.onRemove.emit(item);\n const newTotal = this._totalItems() - 1;\n const lastPage = Math.max(1, Math.ceil(newTotal / this.pageSize()));\n if (this.currentPage() > lastPage) this.currentPage.set(lastPage);\n }\n\n handleCheckoutAll(): void {\n this.onCheckoutAll.emit(this._filtered());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxCartItem, ClxCouponResult } from '../../../types/clx-cart.types';\nimport { ClxButtonComponent } from '../../../components/base/clx-button/clx-button.component';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\nimport { ClxSkeletonComponent } from '../../../components/base/clx-skeleton/clx-skeleton.component';\nimport { ClxInputComponent } from '../../../components/forms/clx-input/clx-input.component';\nimport { ClxRatingComponent } from '../../../components/base/clx-rating/clx-rating.component';\n\n@Component({\n selector: 'clx-cart',\n standalone: true,\n imports: [\n CurrencyPipe,\n FormsModule,\n ClxButtonComponent,\n ClxBadgeComponent,\n ClxIconComponent,\n ClxSkeletonComponent,\n ClxInputComponent,\n ClxRatingComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- ── Loading ─────────────────────────────────────────────────────────────── -->\n @if (loading()) {\n\n <div class=\"flex flex-col lg:flex-row gap-6\">\n <div class=\"flex-1 flex flex-col gap-3\">\n @for (s of _skeletons; track $index) {\n <div class=\"bg-white rounded-2xl p-4 flex gap-4 shadow-sm\">\n <clx-skeleton variant=\"rectangular\" width=\"112px\" height=\"112px\" />\n <div class=\"flex flex-col gap-2 flex-1\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"55%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"35%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"25%\" />\n </div>\n </div>\n }\n </div>\n <div class=\"w-full lg:w-80 shrink-0\">\n <div class=\"bg-white rounded-2xl p-5 flex flex-col gap-3 shadow-sm\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"50%\" />\n <clx-skeleton variant=\"rectangular\" height=\"40px\" width=\"100%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"80%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"60%\" />\n <clx-skeleton variant=\"rectangular\" height=\"44px\" width=\"100%\" />\n </div>\n </div>\n </div>\n\n <!-- ── Empty ───────────────────────────────────────────────────────────────── -->\n } @else if (items().length === 0) {\n\n <div class=\"flex flex-col items-center justify-center py-24 gap-4 text-slate-400\">\n <span clx-icon name=\"shopping_cart\" size=\"xl\"></span>\n <p class=\"text-base font-semibold text-slate-600\">Tu carrito está vacío</p>\n <p class=\"text-sm\">Agrega productos para continuar.</p>\n </div>\n\n <!-- ── Main layout ─────────────────────────────────────────────────────────── -->\n } @else {\n\n <div class=\"flex flex-col lg:flex-row gap-6 items-start\">\n\n <!-- ══ LEFT — Items list ══════════════════════════════════════════════════ -->\n <div class=\"w-full lg:flex-1 min-w-0 flex flex-col gap-4\">\n\n <!-- Top bar -->\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <h2 class=\"text-base font-semibold text-slate-700\">Cart Items</h2>\n <span clx-badge variant=\"light\" [color]=\"color()\" size=\"sm\">{{ _totalUnits() }}</span>\n </div>\n <button\n clx-button variant=\"ghost\" color=\"red\" size=\"sm\" icon=\"delete_sweep\"\n (click)=\"onClearCart.emit()\">\n Vaciar\n </button>\n </div>\n\n <!-- Item cards -->\n @for (item of items(); track item.id) {\n <article class=\"bg-white rounded-2xl shadow-sm flex gap-0 overflow-hidden group transition-[box-shadow,transform] duration-300 hover:shadow-xl hover:-translate-y-0.5\">\n\n <!-- Image — fixed square -->\n <div class=\"relative shrink-0 w-28 h-28 lg:w-36 lg:h-36 overflow-hidden bg-slate-100\">\n @if (item.main_image) {\n <img [src]=\"item.main_image\" [alt]=\"item.name\"\n class=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\" />\n } @else {\n <div class=\"w-full h-full flex items-center justify-center\">\n <span clx-icon name=\"image\" size=\"lg\" class=\"text-slate-300\"></span>\n </div>\n }\n @if (item.has_discount && item.discount_percentage) {\n <div class=\"absolute top-2 left-2\">\n <span clx-badge variant=\"solid\" color=\"red\" size=\"sm\" shape=\"pill\">\n -{{ item.discount_percentage }}%\n </span>\n </div>\n }\n @if (!item.in_stock) {\n <div class=\"absolute inset-0 bg-white/60 flex items-end justify-center pb-2\">\n <span clx-badge variant=\"solid\" color=\"slate\" size=\"sm\">Agotado</span>\n </div>\n }\n </div>\n\n <!-- Content -->\n <div class=\"relative flex flex-col gap-1.5 flex-1 p-3 min-w-0\">\n\n <!-- Remove -->\n <div class=\"absolute top-2 right-2 z-10\">\n <button\n clx-button variant=\"ghost\" color=\"red\" size=\"sm\"\n icon=\"close\" [iconOnly]=\"true\" shape=\"circle\"\n (click)=\"onRemove.emit(item)\">\n </button>\n </div>\n\n <!-- Title block -->\n <div class=\"pr-8\">\n <p class=\"text-xs text-slate-400 truncate\">{{ item.trademark }}</p>\n <h3 class=\"text-sm font-semibold text-slate-800 leading-snug line-clamp-2\">{{ item.name }}</h3>\n <p class=\"text-xs font-mono text-slate-400 mt-0.5\">{{ item.sku }}</p>\n </div>\n\n @if (item.rating) {\n <div class=\"flex items-center gap-1.5\">\n <clx-rating [value]=\"item.rating\" [max]=\"5\" color=\"amber\" />\n @if (item.review_count) {\n <span class=\"text-xs text-slate-400\">({{ item.review_count }})</span>\n }\n </div>\n }\n\n <!-- Price + Quantity row -->\n <div class=\"flex items-center justify-between gap-2 mt-auto flex-wrap\">\n\n <!-- Price -->\n <div class=\"flex items-baseline gap-1.5\">\n <span class=\"text-base font-bold text-slate-900\">\n {{ item.unit_price | currency:'COP':'symbol':'1.0-0' }}\n </span>\n @if (item.has_discount && item.original_price) {\n <span class=\"text-xs text-slate-400 line-through\">\n {{ item.original_price | currency:'COP':'symbol':'1.0-0' }}\n </span>\n }\n </div>\n\n <!-- Quantity control -->\n <div class=\"flex items-center border border-slate-200 rounded-xl overflow-hidden\">\n <button\n clx-button variant=\"ghost\" color=\"slate\" size=\"sm\"\n icon=\"remove\" [iconOnly]=\"true\"\n [disabled]=\"item.quantity <= 1\"\n (click)=\"onQuantityChange.emit({ item, quantity: item.quantity - 1 })\">\n </button>\n <span class=\"w-8 text-center text-sm font-semibold text-slate-700 select-none\">\n {{ item.quantity }}\n </span>\n <button\n clx-button variant=\"ghost\" [color]=\"color()\" size=\"sm\"\n icon=\"add\" [iconOnly]=\"true\"\n [disabled]=\"!item.in_stock || (!!item.max_quantity && item.quantity >= item.max_quantity)\"\n (click)=\"onQuantityChange.emit({ item, quantity: item.quantity + 1 })\">\n </button>\n </div>\n\n <!-- Line total -->\n <p class=\"text-sm font-bold text-slate-700\">\n {{ (item.unit_price * item.quantity) | currency:'COP':'symbol':'1.0-0' }}\n </p>\n\n </div>\n </div>\n\n </article>\n }\n\n </div>\n\n <!-- ══ RIGHT — Order Summary ══════════════════════════════════════════════ -->\n <aside class=\"w-full lg:w-80 shrink-0 lg:sticky lg:top-6 flex flex-col gap-4\">\n\n <div class=\"bg-white rounded-2xl shadow-sm p-5 flex flex-col gap-4\">\n <h2 class=\"text-base font-semibold text-slate-800\">Order Summary</h2>\n\n <!-- Coupon -->\n <div class=\"space-y-2\">\n <p class=\"text-xs font-medium text-slate-500\">¿Tienes un cupón de descuento?</p>\n <div class=\"flex gap-2\">\n <div class=\"flex-1\">\n <clx-input\n placeholder=\"Código de cupón\"\n prefixIcon=\"confirmation_number\"\n size=\"sm\"\n [color]=\"color()\"\n [(ngModel)]=\"_couponCode\"\n [disabled]=\"!!coupon()?.valid\" />\n </div>\n @if (coupon()?.valid) {\n <button\n clx-button variant=\"ghost\" color=\"red\" size=\"sm\"\n icon=\"close\" [iconOnly]=\"true\" shape=\"circle\"\n (click)=\"removeCoupon()\">\n </button>\n } @else {\n <button\n clx-button [color]=\"color()\" variant=\"solid\" size=\"sm\" shape=\"pill\"\n [disabled]=\"!_couponCode.trim()\"\n (click)=\"applyCoupon()\">\n Aplicar\n </button>\n }\n </div>\n @if (coupon()) {\n @if (coupon()!.valid) {\n <div class=\"flex items-center gap-1.5 text-emerald-600\">\n <span clx-icon name=\"check_circle\" size=\"sm\"></span>\n <code class=\"text-xs font-bold\">{{ coupon()!.code }}</code>\n <span class=\"text-xs\">aplicado</span>\n </div>\n } @else {\n <p class=\"text-xs text-red-500\">{{ coupon()!.message ?? 'Cupón inválido' }}</p>\n }\n }\n </div>\n\n <!-- Divider -->\n <div class=\"border-t border-slate-100\"></div>\n\n <!-- Totals -->\n <dl class=\"flex flex-col gap-2.5 text-sm\">\n <div class=\"flex justify-between text-slate-600\">\n <dt>Subtotal <span class=\"text-slate-400 text-xs\">({{ _totalUnits() }} items)</span></dt>\n <dd class=\"font-medium\">{{ _subtotal() | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n @if (_savingsAmount() > 0) {\n <div class=\"flex justify-between text-emerald-600\">\n <dt>Descuento productos</dt>\n <dd class=\"font-medium\">-{{ _savingsAmount() | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n }\n @if (coupon()?.valid) {\n <div class=\"flex justify-between text-emerald-600\">\n <dt>\n Cupón\n <code class=\"bg-emerald-50 px-1 rounded text-xs ml-1\">{{ coupon()!.code }}</code>\n </dt>\n <dd class=\"font-medium\">-{{ _couponDiscount() | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n }\n <div class=\"flex justify-between border-t border-slate-100 pt-2.5\">\n <dt class=\"font-bold text-slate-800\">Total</dt>\n <dd class=\"text-xl font-black text-slate-900\">{{ _total() | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n </dl>\n\n <!-- Checkout -->\n <button\n clx-button [color]=\"color()\" variant=\"solid\" size=\"lg\"\n icon=\"arrow_forward\" iconPosition=\"right\" [block]=\"true\"\n (click)=\"onCheckout.emit()\">\n Proceder al pago\n </button>\n\n <!-- Security note -->\n <div class=\"flex items-center justify-center gap-1.5 text-slate-400 text-xs\">\n <span clx-icon name=\"lock\" size=\"sm\"></span>\n <span>Pago 100% seguro</span>\n </div>\n\n </div>\n\n </aside>\n\n </div>\n\n }\n `,\n})\nexport class ClxCartComponent {\n readonly items = input<ClxCartItem[]>([]);\n readonly loading = input<boolean>(false);\n readonly color = input<ClxColorInput>('indigo');\n readonly coupon = model<ClxCouponResult | null>(null);\n\n readonly onRemove = output<ClxCartItem>();\n readonly onQuantityChange = output<{ item: ClxCartItem; quantity: number }>();\n readonly onClearCart = output<void>();\n readonly onApplyCoupon = output<string>();\n readonly onCheckout = output<void>();\n\n protected _couponCode = '';\n protected readonly _skeletons = Array.from({ length: 3 });\n\n protected readonly _subtotal = computed(() =>\n this.items().reduce((s, i) => s + i.unit_price * i.quantity, 0),\n );\n\n protected readonly _savingsAmount = computed(() =>\n this.items().reduce((s, i) => {\n if (!i.has_discount || !i.original_price) return s;\n return s + (i.original_price - i.unit_price) * i.quantity;\n }, 0),\n );\n\n protected readonly _couponDiscount = computed(() => {\n const c = this.coupon();\n if (!c?.valid) return 0;\n return c.type === 'percent'\n ? Math.round(this._subtotal() * (c.value / 100))\n : c.value;\n });\n\n protected readonly _total = computed(() =>\n Math.max(0, this._subtotal() - this._couponDiscount()),\n );\n\n protected readonly _totalUnits = computed(() =>\n this.items().reduce((s, i) => s + i.quantity, 0),\n );\n\n applyCoupon(): void {\n const code = this._couponCode.trim();\n if (code) this.onApplyCoupon.emit(code);\n }\n\n removeCoupon(): void {\n this._couponCode = '';\n this.coupon.set(null);\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\nimport { CLX_MODAL_REF, CLX_MODAL_DATA } from '../../../configs/modal.config';\nimport { ClxDrawerComponent } from '../../../components/advanced/clx-drawer/clx-drawer.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\nimport type { ClxCartItem, ClxCouponResult } from '../../../types/clx-cart.types';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\n\nexport interface ClxCartSummaryData {\n items: ClxCartItem[];\n subtotal: number;\n savingsAmount: number;\n couponDiscount: number;\n coupon: ClxCouponResult | null;\n total: number;\n color: ClxColorInput;\n}\n\n@Component({\n selector: 'clx-cart-summary-drawer',\n standalone: true,\n imports: [CurrencyPipe, ClxDrawerComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <clx-drawer\n size=\"md\"\n [confirmButton]=\"{ text: 'Proceder al pago', color: data.color, variant: 'solid' }\"\n [cancelButton]=\"{ text: 'Seguir comprando', color: 'slate', variant: 'ghost' }\"\n [showCancelButton]=\"true\"\n (confirmClick)=\"_confirm()\"\n (cancelClick)=\"_cancel()\">\n\n <div clx-drawer-title class=\"flex items-center gap-2\">\n <span clx-icon name=\"receipt_long\" size=\"sm\" class=\"text-slate-500\"></span>\n <span class=\"text-base font-semibold text-slate-900\">Resumen del pedido</span>\n </div>\n\n <div class=\"space-y-5\">\n\n <!-- Items list -->\n <ul class=\"space-y-3\">\n @for (item of data.items; track item.id) {\n <li class=\"flex items-center gap-3\">\n <div class=\"shrink-0 w-12 h-12 rounded-lg overflow-hidden bg-slate-100\">\n @if (item.main_image) {\n <img [src]=\"item.main_image\" [alt]=\"item.name\" class=\"w-full h-full object-cover\" />\n } @else {\n <div class=\"w-full h-full flex items-center justify-center\">\n <span clx-icon name=\"image\" size=\"sm\" class=\"text-slate-300\"></span>\n </div>\n }\n </div>\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-sm font-medium text-slate-800 truncate\">{{ item.name }}</p>\n <p class=\"text-xs text-slate-400\">x{{ item.quantity }}</p>\n </div>\n <span class=\"text-sm font-semibold text-slate-700 shrink-0\">\n {{ (item.unit_price * item.quantity) | currency:'COP':'symbol':'1.0-0' }}\n </span>\n </li>\n }\n </ul>\n\n <!-- Divider -->\n <div class=\"border-t border-slate-100\"></div>\n\n <!-- Totals -->\n <dl class=\"space-y-2\">\n <div class=\"flex justify-between text-sm text-slate-600\">\n <dt>Subtotal</dt>\n <dd class=\"font-medium\">{{ data.subtotal | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n @if (data.savingsAmount > 0) {\n <div class=\"flex justify-between text-sm text-emerald-600\">\n <dt>Descuento</dt>\n <dd class=\"font-medium\">-{{ data.savingsAmount | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n }\n @if (data.coupon?.valid) {\n <div class=\"flex justify-between text-sm text-emerald-600\">\n <dt>\n Cupón\n <code class=\"bg-emerald-50 px-1 rounded text-xs ml-1\">{{ data.coupon!.code }}</code>\n </dt>\n <dd class=\"font-medium\">-{{ data.couponDiscount | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n }\n <div class=\"border-t border-slate-100 pt-2 flex justify-between\">\n <dt class=\"font-bold text-slate-800\">Total</dt>\n <dd class=\"text-xl font-black text-slate-900\">{{ data.total | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n </dl>\n\n <!-- Secure badge -->\n <div class=\"flex items-center gap-2 text-slate-400 text-xs\">\n <span clx-icon name=\"lock\" size=\"sm\"></span>\n <span>Pago seguro — tus datos están protegidos</span>\n </div>\n\n </div>\n\n </clx-drawer>\n `,\n})\nexport class ClxCartSummaryDrawer {\n readonly data = inject<ClxCartSummaryData>(CLX_MODAL_DATA);\n private readonly _ref = inject(CLX_MODAL_REF);\n\n protected _confirm(): void { this._ref.close(true); }\n protected _cancel(): void { this._ref.close(false); }\n}\n","import {\n Directive,\n ElementRef,\n OnInit,\n OnChanges,\n SimpleChanges,\n inject,\n PLATFORM_ID,\n DestroyRef,\n input,\n output,\n numberAttribute,\n booleanAttribute,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { ClxAnimateName, ClxAnimateTrigger, ClxAnimateConfig, ClxAnimateEvent } from '../types/clx-animate.types';\nimport { ClxAnimateService } from '../services/clx-animate.service';\n\n@Directive({\n selector: '[clxAnimate]',\n standalone: true,\n exportAs: 'clxAnimate',\n})\nexport class ClxAnimateDirective implements OnInit, OnChanges {\n\n // ─── Inputs ───────────────────────────────────────────────────────────────\n readonly clxAnimate = input.required<ClxAnimateName>();\n readonly trigger = input<ClxAnimateTrigger>('manual');\n readonly duration = input<number, number>(undefined as unknown as number, { transform: numberAttribute });\n readonly delay = input<number, number>(undefined as unknown as number, { transform: numberAttribute });\n readonly repeat = input<number | 'infinite'>();\n readonly easing = input<string>();\n readonly fillMode = input<ClxAnimateConfig['fillMode']>();\n readonly once = input<boolean, boolean>(false, { transform: booleanAttribute });\n readonly threshold = input<number, number>(undefined as unknown as number, { transform: numberAttribute });\n\n // ─── Outputs ──────────────────────────────────────────────────────────────\n readonly animationStart = output<void>();\n readonly animationEnd = output<ClxAnimateEvent>();\n\n // ─── Dependencias ─────────────────────────────────────────────────────────\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly service = inject(ClxAnimateService);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n\n // ─── Estado interno ───────────────────────────────────────────────────────\n private _abortCtrl?: AbortController;\n private _unobserve?: () => void;\n private _hasPlayed = false;\n private _initialized = false;\n private _destroyed = false;\n\n get nativeElement(): HTMLElement { return this.el.nativeElement; }\n\n // ─── Ciclo de vida ────────────────────────────────────────────────────────\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n this._initialized = true;\n this._bindTrigger(this.trigger());\n this.destroyRef.onDestroy(() => {\n this._destroyed = true;\n this._teardown();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._initialized) return;\n if ('trigger' in changes) {\n this._unbindTrigger();\n this._bindTrigger(this.trigger());\n }\n }\n\n // ─── API pública ──────────────────────────────────────────────────────────\n\n /**\n * Ejecuta la animación. Retorna una Promise que resuelve al terminar.\n * El output animationEnd se emite al resolverse la Promise.\n */\n play(overrides?: Partial<ClxAnimateConfig>): Promise<void> {\n this.animationStart.emit();\n return this.service\n .runAnimation(this.nativeElement, this._buildConfig(overrides))\n .then(() => {\n if (this._destroyed) return;\n this.animationEnd.emit({\n element: this.nativeElement,\n animation: this.clxAnimate(),\n timestamp: Date.now(),\n });\n });\n }\n\n stop(): void {\n this.service.stop(this.nativeElement);\n }\n\n // ─── Privado ──────────────────────────────────────────────────────────────\n\n private _buildConfig(overrides?: Partial<ClxAnimateConfig>): ClxAnimateConfig {\n return this.service.buildConfig(\n {\n animation: this.clxAnimate(),\n trigger: this.trigger(),\n ...(this.duration() !== undefined && { duration: this.duration() }),\n ...(this.delay() !== undefined && { delay: this.delay() }),\n ...(this.repeat() !== undefined && { repeat: this.repeat() }),\n ...(this.easing() !== undefined && { easing: this.easing() }),\n ...(this.fillMode() !== undefined && { fillMode: this.fillMode() }),\n ...(this.threshold() !== undefined && { threshold: this.threshold() }),\n once: this.once(),\n },\n overrides ?? {},\n );\n }\n\n private _bindTrigger(trigger: ClxAnimateTrigger): void {\n const el = this.nativeElement;\n this._abortCtrl = new AbortController();\n const { signal } = this._abortCtrl;\n\n switch (trigger) {\n case 'click':\n el.addEventListener('click', () => this.play(), { signal });\n break;\n case 'hover':\n el.addEventListener('mouseenter', () => this.play(), { signal });\n break;\n case 'hoverLeave':\n el.addEventListener('mouseleave', () => this.play(), { signal });\n break;\n case 'onEnter':\n this._bindIntersection(true);\n break;\n case 'onLeave':\n this._bindIntersection(false);\n break;\n case 'manual':\n break;\n }\n }\n\n private _bindIntersection(playOnEnter: boolean): void {\n const config = this._buildConfig();\n const threshold = config.threshold ?? 0.1;\n\n this._unobserve = this.service.observe(this.nativeElement, threshold, (isIntersecting) => {\n const shouldPlay = playOnEnter ? isIntersecting : !isIntersecting;\n if (!shouldPlay) return;\n if (this._hasPlayed && config.once) return;\n\n this._hasPlayed = true;\n this.play();\n\n if (config.once) {\n this._unobserve?.();\n this._unobserve = undefined;\n }\n });\n }\n\n private _unbindTrigger(): void {\n this._abortCtrl?.abort();\n this._abortCtrl = undefined;\n this._unobserve?.();\n this._unobserve = undefined;\n this._hasPlayed = false;\n }\n\n private _teardown(): void {\n this._unbindTrigger();\n this.service.stop(this.nativeElement);\n }\n}\n","import {\n Directive,\n ContentChildren,\n QueryList,\n inject,\n DestroyRef,\n input,\n numberAttribute,\n} from '@angular/core';\nimport { ClxAnimateDirective } from './clx-animate.directive';\n\n@Directive({\n selector: '[clxAnimateGroup]',\n standalone: true,\n exportAs: 'clxAnimateGroup',\n})\nexport class ClxAnimateGroupDirective {\n readonly stagger = input<number, number>(100, { transform: numberAttribute });\n\n @ContentChildren(ClxAnimateDirective, { descendants: true })\n children!: QueryList<ClxAnimateDirective>;\n\n private readonly destroyRef = inject(DestroyRef);\n private _pendingTimers: ReturnType<typeof setTimeout>[] = [];\n\n constructor() {\n this.destroyRef.onDestroy(() => this._clearTimers());\n }\n\n /**\n * Ejecuta todos los hijos en secuencia escalonada (stagger).\n * Cancela cualquier stagger previo en vuelo antes de iniciar uno nuevo.\n * Retorna una Promise que resuelve cuando todos los hijos terminan.\n */\n playAll(): Promise<void[]> {\n this._clearTimers();\n const stagger = this.stagger();\n\n return Promise.all(\n this.children.map((child, i) =>\n new Promise<void>(resolve => {\n const id = setTimeout(() => {\n this._pendingTimers = this._pendingTimers.filter(t => t !== id);\n child.play().then(resolve);\n }, i * stagger);\n this._pendingTimers.push(id);\n }),\n ),\n );\n }\n\n /** Detiene todos los hijos y cancela los timers de stagger pendientes. */\n stopAll(): void {\n this._clearTimers();\n this.children.forEach(child => child.stop());\n }\n\n private _clearTimers(): void {\n this._pendingTimers.forEach(id => clearTimeout(id));\n this._pendingTimers = [];\n }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { FocusTrapFactory, FocusTrap } from '@angular/cdk/a11y';\n\nimport { ClxAlertComponent } from '../components/advanced/clx-alert/clx-alert.component';\nimport { CLX_ALERT_OPTIONS, CLX_ALERT_RESOLVE, ALERT_DEFAULTS } from '../configs/alert.config';\nimport type { ClxAlertOptions, ClxAlertResult, ClxAlertType } from '../types/clx-alert.types';\n\n@Injectable({ providedIn: 'root' })\nexport class ClxAlertService {\n private readonly _overlay: Overlay;\n private readonly _injector: Injector;\n private readonly _focusTrapFactory: FocusTrapFactory;\n\n constructor() {\n this._overlay = inject(Overlay);\n this._injector = inject(Injector);\n this._focusTrapFactory = inject(FocusTrapFactory);\n }\n\n // ─── Core open ────────────────────────────────────────────────────────────\n\n open(options: ClxAlertOptions = {}): Promise<ClxAlertResult> {\n const backdrop = options.backdrop ?? ALERT_DEFAULTS.backdrop;\n const disableClose = options.disableClose ?? ALERT_DEFAULTS.disableClose;\n\n let _resolve!: (v: ClxAlertResult) => void;\n const promise = new Promise<ClxAlertResult>(res => (_resolve = res));\n\n let _focusTrap: FocusTrap | null = null;\n\n // Wrap resolve so we can dispose the overlay after the exit animation\n const resolve = (result: ClxAlertResult) => {\n _focusTrap?.destroy();\n overlayRef.dispose();\n _resolve(result);\n };\n\n const overlayRef: OverlayRef = this._overlay.create(new OverlayConfig({\n hasBackdrop: backdrop,\n backdropClass: 'clx-alert-backdrop',\n scrollStrategy: this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),\n }));\n\n // Make the overlay pane a flex centering layer\n Object.assign(overlayRef.overlayElement.style, {\n position: 'fixed',\n inset: '0',\n width: '100vw',\n height: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1rem',\n boxSizing: 'border-box',\n });\n\n const innerInjector = Injector.create({\n parent: this._injector,\n providers: [\n { provide: CLX_ALERT_OPTIONS, useValue: options },\n { provide: CLX_ALERT_RESOLVE, useValue: resolve },\n ],\n });\n\n overlayRef.attach(new ComponentPortal(ClxAlertComponent, null, innerInjector));\n\n if (backdrop && !disableClose) {\n overlayRef.backdropClick().subscribe(() => resolve(false));\n }\n if (!disableClose) {\n overlayRef.keydownEvents().subscribe(e => { if (e.key === 'Escape') resolve(false); });\n }\n\n _focusTrap = this._focusTrapFactory.create(overlayRef.overlayElement);\n _focusTrap.focusInitialElementWhenReady();\n\n return promise;\n }\n\n // ─── Convenience shortcuts ────────────────────────────────────────────────\n\n success(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({ type: 'success', title, message, ...opts });\n }\n\n error(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({ type: 'danger', title, message, ...opts });\n }\n\n warning(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({ type: 'warning', title, message, ...opts });\n }\n\n info(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({ type: 'info', title, message, ...opts });\n }\n\n confirm(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({\n type: 'confirm',\n title,\n message,\n showCancelButton: true,\n ...opts,\n });\n }\n}\n","import {\n inject,\n Injectable,\n Injector,\n} from '@angular/core';\nimport {\n Overlay,\n OverlayConfig,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport type { ClxDrawerConfig, ClxDrawerRef } from '../types/clx-drawer.types';\nimport { CLX_MODAL_DATA, CLX_MODAL_REF } from '../configs/modal.config';\nimport { CLX_DRAWER_SIZE, DRAWER_WIDTH_MAP } from '../configs/drawer.config';\nimport { ClxModalWrapperComponent } from '../components/advanced/clx-modal/clx-modal-wrapper.component';\n\n@Injectable({ providedIn: 'root' })\nexport class ClxDrawerService {\n private readonly _overlay: Overlay;\n private readonly _injector: Injector;\n private readonly _focusTrapFactory: FocusTrapFactory;\n\n constructor() {\n this._overlay = inject(Overlay);\n this._injector = inject(Injector);\n this._focusTrapFactory = inject(FocusTrapFactory);\n }\n\n open<R = unknown, D = unknown>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: new (...args: any[]) => any,\n config: ClxDrawerConfig<D> = {},\n ): ClxDrawerRef<R> {\n const {\n hasBackdrop = false,\n disableClose = false,\n panelClass = [],\n size = 'md',\n data,\n } = config;\n\n let _resolve!: (value: R | undefined) => void;\n const _afterClosed = new Promise<R | undefined>(res => (_resolve = res));\n let _focusTrap: FocusTrap | null = null;\n\n const drawerRef: ClxDrawerRef<R> = {\n close(result?: R): void {\n _focusTrap?.destroy();\n overlayRef.dispose();\n _resolve(result);\n },\n afterClosed(): Promise<R | undefined> {\n return _afterClosed;\n },\n };\n\n const extraClasses = Array.isArray(panelClass) ? panelClass : [panelClass];\n\n const overlayRef: OverlayRef = this._overlay.create(new OverlayConfig({\n hasBackdrop,\n backdropClass: 'clx-modal-backdrop',\n panelClass: extraClasses,\n width: DRAWER_WIDTH_MAP[size],\n height: '100vh',\n scrollStrategy: this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global().right('0').top('0'),\n }));\n\n const innerInjector = Injector.create({\n parent: this._injector,\n providers: [\n { provide: CLX_MODAL_DATA, useValue: data ?? null },\n { provide: CLX_MODAL_REF, useValue: drawerRef },\n { provide: CLX_DRAWER_SIZE, useValue: size },\n ],\n });\n\n // Attach wrapper via ComponentPortal — CDK creates backdrop on attach()\n const wrapperPortal = new ComponentPortal(ClxModalWrapperComponent, null, innerInjector);\n const wrapperRef = overlayRef.attach(wrapperPortal) as import('@angular/core').ComponentRef<ClxModalWrapperComponent>;\n\n // El pane ya tiene width/height del OverlayConfig.\n // Solo desactivamos pointer-events en el overlay element (no en el pane)\n // para que el click-through funcione cuando no hay backdrop.\n overlayRef.overlayElement.style.pointerEvents = 'none';\n (wrapperRef.location.nativeElement as HTMLElement).style.pointerEvents = 'auto';\n\n // Mount user component inside the wrapper via a second portal\n const contentPortal = new ComponentPortal(component, null, innerInjector);\n wrapperRef.instance.portal.set(contentPortal);\n\n if (hasBackdrop && !disableClose) {\n overlayRef.backdropClick().subscribe(() => drawerRef.close());\n }\n if (!disableClose) {\n overlayRef.keydownEvents().subscribe(e => { if (e.key === 'Escape') drawerRef.close(); });\n }\n\n _focusTrap = this._focusTrapFactory.create(overlayRef.overlayElement);\n _focusTrap.focusInitialElementWhenReady();\n\n return drawerRef;\n }\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n inject,\n Injectable,\n} from '@angular/core';\n\nimport { ClxToastContainerComponent } from '../components/advanced/clx-toast/clx-toast-container.component';\nimport {\n TOAST_DEFAULTS,\n TOAST_ANIM_IN_MAP,\n} from '../configs/toast.config';\nimport type { ClxToastEntry, ClxToastOptions, ClxToastPosition } from '../types/clx-toast.types';\n\n@Injectable({ providedIn: 'root' })\nexport class ClxToastService {\n private readonly _appRef: ApplicationRef;\n private readonly _containers = new Map<ClxToastPosition, ComponentRef<ClxToastContainerComponent>>();\n\n constructor() {\n this._appRef = inject(ApplicationRef);\n }\n\n // ─── Core show ─────────────────────────────────────────────────────────────\n\n show(options: ClxToastOptions): void {\n const position = options.position ?? TOAST_DEFAULTS.position;\n const container = this._getOrCreateContainer(position);\n\n const entry: ClxToastEntry = {\n id: this._uid(),\n type: options.type ?? TOAST_DEFAULTS.type,\n message: options.message,\n title: options.title,\n icon: options.icon,\n position,\n duration: options.duration ?? TOAST_DEFAULTS.duration,\n showProgress: options.showProgress ?? TOAST_DEFAULTS.showProgress,\n pauseOnHover: options.pauseOnHover ?? TOAST_DEFAULTS.pauseOnHover,\n animationIn: options.animationIn ?? TOAST_ANIM_IN_MAP[position],\n animationOut: options.animationOut ?? TOAST_DEFAULTS.animationOut,\n animationDuration: options.animationDuration ?? TOAST_DEFAULTS.animationDuration,\n action: options.action,\n removing: false,\n };\n\n const isBottom = position.startsWith('bottom');\n container.instance.entries.update((list: ClxToastEntry[]) =>\n isBottom ? [...list, entry] : [entry, ...list],\n );\n }\n\n // ─── Convenience shortcuts ─────────────────────────────────────────────────\n\n success(message: string, opts: Partial<ClxToastOptions> = {}): void {\n this.show({ ...opts, type: 'green', message });\n }\n\n error(message: string, opts: Partial<ClxToastOptions> = {}): void {\n this.show({ ...opts, type: 'red', message });\n }\n\n warning(message: string, opts: Partial<ClxToastOptions> = {}): void {\n this.show({ ...opts, type: 'amber', message });\n }\n\n info(message: string, opts: Partial<ClxToastOptions> = {}): void {\n this.show({ ...opts, type: 'sky', message });\n }\n\n /** Dismiss all toasts across all containers immediately (no exit anim). */\n dismissAll(): void {\n this._containers.forEach(ref => ref.instance.entries.set([]));\n }\n\n // ─── Container management ──────────────────────────────────────────────────\n\n private _getOrCreateContainer(position: ClxToastPosition): ComponentRef<ClxToastContainerComponent> {\n const existing = this._containers.get(position);\n if (existing) return existing;\n\n const ref = createComponent(ClxToastContainerComponent, {\n environmentInjector: this._appRef.injector,\n });\n\n ref.setInput('position', position);\n this._appRef.attachView(ref.hostView);\n document.body.appendChild(ref.location.nativeElement);\n\n this._containers.set(position, ref);\n return ref;\n }\n\n // ─── Utilities ─────────────────────────────────────────────────────────────\n\n private _uid(): string {\n return `toast-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n }\n}\n","import type { ClxProgressBarSize } from '../types/clx-progress-bar.types';\n\nexport const PROGRESS_BAR_SIZE_MAP: Record<ClxProgressBarSize, string> = {\n xs: 'h-1',\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxProgressBarSize, ClxProgressBarVariant } from '../../../types/clx-progress-bar.types';\nimport { PROGRESS_BAR_SIZE_MAP } from '../../../configs/progress-bar.config';\n\n@Component({\n selector: 'clx-progress-bar',\n standalone: true,\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [`\n @keyframes clx-pb-indeterminate {\n 0% { transform: translateX(-100%) scaleX(.4); }\n 40% { transform: translateX(0%) scaleX(.4); }\n 100% { transform: translateX(100%) scaleX(.4); }\n }\n .clx-pb-indeterminate {\n animation: clx-pb-indeterminate 1.4s ease-in-out infinite;\n }\n @keyframes clx-pb-stripe {\n from { background-position: 1rem 0; }\n to { background-position: 0 0; }\n }\n .clx-pb-striped {\n background-image: linear-gradient(\n 45deg,\n rgba(255,255,255,.18) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255,255,255,.18) 50%,\n rgba(255,255,255,.18) 75%,\n transparent 75%,\n transparent\n );\n background-size: 1rem 1rem;\n animation: clx-pb-stripe 1s linear infinite;\n }\n `],\n host: { class: 'flex flex-col gap-1.5 w-full' },\n template: `\n @if (label() || showValue()) {\n <div class=\"flex items-center justify-between gap-2\">\n @if (label()) {\n <span [class]=\"_labelCls()\">{{ label() }}</span>\n }\n @if (showValue()) {\n <span class=\"text-xs font-medium text-slate-500 tabular-nums shrink-0\">\n {{ _displayValue() }}\n </span>\n }\n </div>\n }\n\n <!-- Track -->\n <div\n class=\"w-full overflow-hidden rounded-full bg-slate-100\"\n [class]=\"_trackH()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"variant() === 'indeterminate' ? null : value()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-label]=\"label() || null\">\n\n <!-- Fill -->\n <div\n class=\"h-full rounded-full transition-all duration-500 ease-out\"\n [class]=\"_fillCls()\"\n [style.width]=\"variant() === 'indeterminate' ? '40%' : _pct() + '%'\">\n </div>\n </div>\n `,\n})\nexport class ClxProgressBarComponent {\n readonly value = input<number>(0);\n readonly max = input<number>(100);\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxProgressBarSize>('md');\n readonly variant = input<ClxProgressBarVariant>('solid');\n readonly label = input<string>('');\n readonly showValue = input<boolean>(false);\n readonly valueFormat = input<'percent' | 'fraction' | 'value'>('percent');\n\n protected readonly _pct = computed(() => {\n const m = this.max();\n if (!m) return 0;\n return Math.min(100, Math.max(0, (this.value() / m) * 100));\n });\n\n protected readonly _trackH = computed(() => PROGRESS_BAR_SIZE_MAP[this.size()]);\n\n protected readonly _labelCls = computed(() => {\n const size = this.size();\n return size === 'xs' || size === 'sm' ? 'text-xs text-slate-600' : 'text-sm text-slate-600';\n });\n\n protected readonly _displayValue = computed(() => {\n const fmt = this.valueFormat();\n if (fmt === 'fraction') return `${this.value()} / ${this.max()}`;\n if (fmt === 'value') return `${this.value()}`;\n return `${Math.round(this._pct())}%`;\n });\n\n protected readonly _fillCls = computed(() => {\n const t = resolveColor(this.color());\n const v = this.variant();\n let cls = t.bg;\n if (v === 'indeterminate') cls += ' clx-pb-indeterminate';\n if (v === 'striped') cls += ' clx-pb-striped';\n return cls;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-page-not-found',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col items-center justify-center min-h-[60vh] px-6 text-center' },\n template: `\n <div class=\"w-20 h-20 rounded-2xl bg-indigo-50 flex items-center justify-center mb-6\">\n <span clx-icon name=\"search_off\" size=\"xl\" class=\"text-indigo-400\"></span>\n </div>\n\n <p class=\"text-7xl font-black text-slate-200 leading-none select-none mb-2\">404</p>\n <h1 class=\"text-xl font-semibold text-slate-800 mb-2\">{{ title() }}</h1>\n <p class=\"text-slate-400 max-w-sm mb-8\">{{ description() }}</p>\n\n @if (backLabel()) {\n <button\n clx-button\n color=\"indigo\"\n variant=\"solid\"\n icon=\"arrow_back\"\n (click)=\"back.emit()\">\n {{ backLabel() }}\n </button>\n }\n `,\n})\nexport class ClxPageNotFoundComponent {\n readonly title = input<string>('Página no encontrada');\n readonly description = input<string>('La ruta que buscas no existe o fue movida.');\n readonly backLabel = input<string>('Volver al inicio');\n\n readonly back = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-page-unauthorized',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col items-center justify-center min-h-[60vh] px-6 text-center' },\n template: `\n <div class=\"w-20 h-20 rounded-2xl bg-amber-50 flex items-center justify-center mb-6\">\n <span clx-icon name=\"lock\" size=\"xl\" class=\"text-amber-400\"></span>\n </div>\n\n <p class=\"text-7xl font-black text-slate-200 leading-none select-none mb-2\">{{ code() }}</p>\n <h1 class=\"text-xl font-semibold text-slate-800 mb-2\">{{ title() }}</h1>\n <p class=\"text-slate-400 max-w-sm mb-8\">{{ description() }}</p>\n\n <div class=\"flex items-center gap-3\">\n @if (loginLabel()) {\n <button\n clx-button\n color=\"indigo\"\n variant=\"solid\"\n icon=\"login\"\n (click)=\"login.emit()\">\n {{ loginLabel() }}\n </button>\n }\n @if (backLabel()) {\n <button\n clx-button\n color=\"slate\"\n variant=\"ghost\"\n icon=\"arrow_back\"\n (click)=\"back.emit()\">\n {{ backLabel() }}\n </button>\n }\n </div>\n `,\n})\nexport class ClxPageUnauthorizedComponent {\n readonly code = input<number>(401);\n readonly title = input<string>('Sin autorización');\n readonly description = input<string>('No tienes permisos para acceder a esta sección.');\n readonly loginLabel = input<string>('Iniciar sesión');\n readonly backLabel = input<string>('Volver');\n\n readonly login = output<void>();\n readonly back = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-page-server-error',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col items-center justify-center min-h-[60vh] px-6 text-center' },\n template: `\n <div class=\"w-20 h-20 rounded-2xl bg-red-50 flex items-center justify-center mb-6\">\n <span clx-icon name=\"error_outline\" size=\"xl\" class=\"text-red-400\"></span>\n </div>\n\n <p class=\"text-7xl font-black text-slate-200 leading-none select-none mb-2\">500</p>\n <h1 class=\"text-xl font-semibold text-slate-800 mb-2\">{{ title() }}</h1>\n <p class=\"text-slate-400 max-w-sm mb-8\">{{ description() }}</p>\n\n @if (errorId()) {\n <p class=\"text-xs font-mono text-slate-300 mb-6\">ID: {{ errorId() }}</p>\n }\n\n <div class=\"flex items-center gap-3\">\n @if (retryLabel()) {\n <button\n clx-button\n color=\"red\"\n variant=\"solid\"\n icon=\"refresh\"\n (click)=\"retry.emit()\">\n {{ retryLabel() }}\n </button>\n }\n @if (backLabel()) {\n <button\n clx-button\n color=\"slate\"\n variant=\"ghost\"\n icon=\"arrow_back\"\n (click)=\"back.emit()\">\n {{ backLabel() }}\n </button>\n }\n </div>\n `,\n})\nexport class ClxPageServerErrorComponent {\n readonly title = input<string>('Error del servidor');\n readonly description = input<string>('Ocurrió un problema inesperado. Intenta de nuevo en unos momentos.');\n readonly retryLabel = input<string>('Reintentar');\n readonly backLabel = input<string>('Volver');\n readonly errorId = input<string>('');\n\n readonly retry = output<void>();\n readonly back = output<void>();\n}\n","// --- Widgets ---\nexport * from './lib/general/widgets/clx-stat-card/clx-stat-card.component';\nexport * from './lib/types/clx-stat-card.types';\n\n\n// --- Apps ---\nexport * from './lib/apps/e-commerce/clx-product/clx-product.component';\nexport * from './lib/apps/e-commerce/clx-product-detail/clx-product-detail.component';\nexport * from './lib/types/clx-product-detail.types';\n\n// --- Components ---\nexport * from './lib/components/advanced/clx-tree/clx-tree.component';\nexport * from './lib/types/clx-tree.types';\nexport * from './lib/components/advanced/clx-filter-panel/clx-filter-panel.component';\nexport * from './lib/types/clx-filter-panel.types';\nexport * from './lib/components/advanced/clx-alert/clx-alert.component';\nexport * from './lib/components/advanced/clx-carousel/clx-carousel.component';\nexport * from './lib/directives/clx-carousel.directive';\nexport * from './lib/components/advanced/clx-tabs/clx-tabs.component';\nexport * from './lib/components/advanced/clx-drawer/clx-drawer.component';\nexport * from './lib/components/advanced/clx-modal/clx-modal.component';\nexport * from './lib/components/advanced/clx-pagination/clx-pagination.component';\nexport * from './lib/components/advanced/clx-toast/clx-toast-container.component';\nexport * from './lib/components/advanced/clx-toast/clx-toast.component';\nexport * from './lib/components/base/clx-card/clx-card.component';\nexport * from './lib/components/base/clx-card/clx-card-header.directive';\nexport * from './lib/components/base/clx-card/clx-card-body.directive';\nexport * from './lib/components/base/clx-card/clx-card-footer.directive';\nexport * from './lib/types/clx-card.types';\nexport * from './lib/components/base/clx-stepper/clx-stepper.component';\nexport * from './lib/types/clx-stepper.types';\nexport * from './lib/components/base/clx-avatar/clx-avatar.component';\nexport * from './lib/components/base/clx-button-group/clx-button-group.component';\nexport * from './lib/components/base/clx-list/clx-list.component';\nexport * from './lib/components/base/clx-list/clx-list-item.component';\nexport * from './lib/components/base/clx-rating/clx-rating.component';\nexport * from './lib/components/base/clx-badge/clx-badge.component';\nexport * from './lib/components/base/clx-button/clx-button.component';\nexport * from './lib/components/base/clx-icon/clx-icon.component';\nexport * from './lib/components/base/clx-skeleton/clx-skeleton.component';\nexport * from './lib/components/base/clx-spinner/clx-spinner.component';\nexport * from './lib/components/base/clx-tag/clx-tag.component';\nexport * from './lib/components/base/clx-tooltip/clx-tooltip.component';\nexport * from './lib/components/base/clx-timeline/clx-timeline.component';\nexport * from './lib/components/base/clx-timeline/clx-timeline-item.component';\nexport * from './lib/components/charts/chartjs/clx-chart/clx-chart.component';\nexport * from './lib/components/forms/clx-checkbox/clx-checkbox.component';\nexport * from './lib/components/forms/clx-colorpicker/clx-colorpicker.component';\nexport * from './lib/components/forms/clx-datepicker/clx-datepicker.component';\nexport * from './lib/components/forms/clx-date-range-picker/clx-date-range-picker.component';\nexport * from './lib/types/clx-date-range-picker.types';\nexport * from './lib/components/forms/clx-editor/clx-editor-link-modal.component';\nexport * from './lib/components/forms/clx-editor/clx-editor.component';\nexport * from './lib/components/forms/clx-input/clx-input.component';\nexport * from './lib/components/forms/clx-number/clx-number.component';\nexport * from './lib/components/forms/clx-radio/clx-radio-group.component';\nexport * from './lib/components/forms/clx-radio/clx-radio.component';\nexport * from './lib/components/forms/clx-select/clx-select.component';\nexport * from './lib/components/forms/clx-slider/clx-slider.component';\nexport * from './lib/components/forms/clx-switch/clx-switch.component';\nexport * from './lib/components/forms/clx-textarea/clx-textarea.component';\nexport * from './lib/components/forms/clx-upload/clx-upload.component';\nexport * from './lib/components/forms/clx-wizard/clx-step.component';\nexport * from './lib/components/forms/clx-wizard/clx-wizard.component';\nexport * from './lib/components/layout/clx-app-layout/clx-app-layout.component';\nexport * from './lib/components/layout/clx-brand/clx-brand.component';\nexport * from './lib/components/layout/clx-menu-item/clx-menu-item.component';\nexport * from './lib/components/layout/clx-menu/clx-menu.component';\nexport * from './lib/components/layout/clx-nav-group/clx-nav-group.component';\nexport * from './lib/components/layout/clx-profile/clx-profile.component';\nexport * from './lib/components/tables/basic/clx-table/clx-table.component';\nexport * from './lib/apps/e-commerce/clx-wishlist/clx-wishlist.component';\nexport * from './lib/apps/e-commerce/clx-cart/clx-cart.component';\nexport * from './lib/apps/e-commerce/clx-cart/clx-cart-summary-drawer';\nexport * from './lib/types/clx-cart.types';\n\n\n// --- DI Tokens ---\nexport { CLX_MODAL_DATA, CLX_MODAL_REF, CLX_MODAL_ANIM_CONFIG } from './lib/configs/modal.config';\nexport { CLX_ALERT_OPTIONS, CLX_ALERT_RESOLVE } from './lib/configs/alert.config';\nexport { CLX_TOAST_DEFAULTS } from './lib/configs/toast.config';\n\n// --- Directives ---\nexport * from './lib/directives/clx-animate-group.directive';\nexport * from './lib/directives/clx-animate.directive';\nexport * from './lib/directives/clx-table-cell.directive';\nexport * from './lib/directives/clx-tab.directive';\nexport * from './lib/directives/clx-tooltip.directive';\n\n// --- Services ---\nexport * from './lib/services/clx-alert.service';\nexport * from './lib/services/clx-animate.service';\nexport * from './lib/services/clx-drawer.service';\nexport * from './lib/services/clx-modal.service';\nexport * from './lib/services/clx-toast.service';\n\n// --- Types ---\nexport * from './lib/types/clx-alert.types';\nexport * from './lib/types/clx-button-group.types';\nexport * from './lib/types/clx-list.types';\nexport * from './lib/types/clx-carousel.types';\nexport * from './lib/types/clx-tabs.types';\nexport * from './lib/types/clx-animate.types';\nexport * from './lib/types/clx-avatar.types';\nexport * from './lib/types/clx-badge.types';\nexport * from './lib/types/clx-button.types';\nexport * from './lib/types/clx-chart.types';\nexport * from './lib/types/clx-checkbox.types';\nexport * from './lib/types/clx-color.types';\nexport * from './lib/types/clx-colorpicker.types';\nexport * from './lib/types/clx-datepicker.types';\nexport * from './lib/types/clx-progress-bar.types';\nexport * from './lib/components/base/clx-progress-bar/clx-progress-bar.component';\nexport * from './lib/components/pages/clx-page-not-found/clx-page-not-found.component';\nexport * from './lib/components/pages/clx-page-unauthorized/clx-page-unauthorized.component';\nexport * from './lib/components/pages/clx-page-server-error/clx-page-server-error.component';\nexport * from './lib/components/pages/clx-page-empty/clx-page-empty.component';\nexport * from './lib/types/clx-drawer.types';\nexport * from './lib/types/clx-editor.types';\nexport * from './lib/types/clx-input.types';\nexport * from './lib/types/clx-modal.types';\nexport * from './lib/types/clx-number.types';\nexport * from './lib/types/clx-pagination.types';\nexport * from './lib/types/clx-radio.types';\nexport * from './lib/types/clx-select.types';\nexport * from './lib/types/clx-shape.types';\nexport * from './lib/types/clx-size.types';\nexport * from './lib/types/clx-skeleton.types';\nexport * from './lib/types/clx-slider.types';\nexport * from './lib/types/clx-spinner.types';\nexport * from './lib/types/clx-table.types';\nexport * from './lib/types/clx-tag.types';\nexport * from './lib/types/clx-textarea.types';\nexport * from './lib/types/clx-toast.types';\nexport * from './lib/types/clx-tooltip.types';\nexport * from './lib/types/clx-upload.types';\nexport * from './lib/types/clx-wizard.types';\nexport * from './lib/types/clx-product.types';\nexport * from './lib/types/clx-wishlist.types';\nexport * from './lib/types/clx-timeline.types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","MONTH_NAMES_ES","DAY_LABELS","isSameDay","startOfDay"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codexly-ui.mjs","sources":["../../../projects/codexly-ui/src/lib/types/clx-color.types.ts","../../../projects/codexly-ui/src/lib/configs/badge.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-badge/clx-badge.component.ts","../../../projects/codexly-ui/src/lib/configs/icon-size.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-icon/clx-icon.component.ts","../../../projects/codexly-ui/src/lib/general/widgets/clx-stat-card/clx-stat-card.component.ts","../../../projects/codexly-ui/src/lib/configs/product.config.ts","../../../projects/codexly-ui/src/lib/configs/button.config.ts","../../../projects/codexly-ui/src/lib/configs/spinner.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-spinner/clx-spinner.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-button/clx-button.component.ts","../../../projects/codexly-ui/src/lib/configs/skeleton.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-skeleton/clx-skeleton.component.ts","../../../projects/codexly-ui/src/lib/configs/animate.config.ts","../../../projects/codexly-ui/src/lib/services/clx-animate.service.ts","../../../projects/codexly-ui/src/lib/configs/tooltip.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-tooltip/clx-tooltip.component.ts","../../../projects/codexly-ui/src/lib/directives/clx-tooltip.directive.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-product/clx-product.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-button-group/clx-button-group.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-rating/clx-rating.component.ts","../../../projects/codexly-ui/src/lib/directives/clx-carousel.directive.ts","../../../projects/codexly-ui/src/lib/configs/carousel.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-carousel/clx-carousel.component.ts","../../../projects/codexly-ui/src/lib/directives/clx-tab.directive.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-tabs/clx-tabs.component.ts","../../../projects/codexly-ui/src/lib/configs/number.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-number/clx-number.component.ts","../../../projects/codexly-ui/src/lib/configs/list.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-list/clx-list.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-list/clx-list-item.component.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-product-detail/clx-product-detail.component.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-product-detail/clx-product-detail.component.html","../../../projects/codexly-ui/src/lib/components/advanced/clx-tree/clx-tree.component.ts","../../../projects/codexly-ui/src/lib/configs/checkbox.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-checkbox/clx-checkbox.component.ts","../../../projects/codexly-ui/src/lib/configs/slider.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-slider/clx-slider.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-radio/clx-radio-group.component.ts","../../../projects/codexly-ui/src/lib/configs/radio.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-radio/clx-radio.component.ts","../../../projects/codexly-ui/src/lib/configs/select.config.ts","../../../projects/codexly-ui/src/lib/configs/tag.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-tag/clx-tag.component.ts","../../../projects/codexly-ui/src/lib/configs/input.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-input/clx-input.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-select/clx-select.component.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-filter-panel/clx-filter-panel.component.ts","../../../projects/codexly-ui/src/lib/configs/alert.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-alert/clx-alert.component.ts","../../../projects/codexly-ui/src/lib/configs/modal.config.ts","../../../projects/codexly-ui/src/lib/configs/drawer.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-drawer/clx-drawer.component.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-modal/clx-modal.component.ts","../../../projects/codexly-ui/src/lib/configs/pagination.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-pagination/clx-pagination.component.ts","../../../projects/codexly-ui/src/lib/configs/toast.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-toast/clx-toast.component.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-toast/clx-toast-container.component.ts","../../../projects/codexly-ui/src/lib/configs/card.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-card/clx-card-header.directive.ts","../../../projects/codexly-ui/src/lib/components/base/clx-card/clx-card-body.directive.ts","../../../projects/codexly-ui/src/lib/components/base/clx-card/clx-card-footer.directive.ts","../../../projects/codexly-ui/src/lib/components/base/clx-card/clx-card.component.ts","../../../projects/codexly-ui/src/lib/configs/stepper.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-stepper/clx-stepper.component.ts","../../../projects/codexly-ui/src/lib/configs/avatar.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-avatar/clx-avatar.component.ts","../../../projects/codexly-ui/src/lib/configs/timeline.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-timeline/clx-timeline.component.ts","../../../projects/codexly-ui/src/lib/components/base/clx-timeline/clx-timeline-item.component.ts","../../../projects/codexly-ui/src/lib/configs/chart.config.ts","../../../projects/codexly-ui/src/lib/components/charts/chartjs/clx-chart/clx-chart.component.ts","../../../projects/codexly-ui/src/lib/configs/colorpicker.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-colorpicker/clx-colorpicker.component.ts","../../../projects/codexly-ui/src/lib/configs/datepicker.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-datepicker/clx-datepicker.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-date-range-picker/clx-date-range-picker.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-editor/clx-editor-link-modal.component.ts","../../../projects/codexly-ui/src/lib/configs/editor.config.ts","../../../projects/codexly-ui/src/lib/components/advanced/clx-modal/clx-modal-wrapper.component.ts","../../../projects/codexly-ui/src/lib/services/clx-modal.service.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-editor/clx-editor.component.ts","../../../projects/codexly-ui/src/lib/configs/switch.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-switch/clx-switch.component.ts","../../../projects/codexly-ui/src/lib/configs/textarea.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-textarea/clx-textarea.component.ts","../../../projects/codexly-ui/src/lib/configs/upload.config.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-upload/clx-upload.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-wizard/clx-step.component.ts","../../../projects/codexly-ui/src/lib/components/forms/clx-wizard/clx-wizard.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-app-layout/clx-app-layout.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-brand/clx-brand.component.ts","../../../projects/codexly-ui/src/lib/configs/nav.config.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-menu-item/clx-menu-item.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-menu/clx-menu.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-nav-group/clx-nav-group.component.ts","../../../projects/codexly-ui/src/lib/components/layout/clx-profile/clx-profile.component.ts","../../../projects/codexly-ui/src/lib/configs/table.configs.ts","../../../projects/codexly-ui/src/lib/directives/clx-table-cell.directive.ts","../../../projects/codexly-ui/src/lib/components/pages/clx-page-empty/clx-page-empty.component.ts","../../../projects/codexly-ui/src/lib/components/tables/basic/clx-table/clx-table.component.ts","../../../projects/codexly-ui/src/lib/configs/wishlist.config.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-wishlist/clx-wishlist.component.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-cart/clx-cart.component.ts","../../../projects/codexly-ui/src/lib/apps/e-commerce/clx-cart/clx-cart-summary-drawer.ts","../../../projects/codexly-ui/src/lib/directives/clx-animate.directive.ts","../../../projects/codexly-ui/src/lib/directives/clx-animate-group.directive.ts","../../../projects/codexly-ui/src/lib/services/clx-alert.service.ts","../../../projects/codexly-ui/src/lib/services/clx-drawer.service.ts","../../../projects/codexly-ui/src/lib/services/clx-toast.service.ts","../../../projects/codexly-ui/src/lib/configs/progress-bar.config.ts","../../../projects/codexly-ui/src/lib/components/base/clx-progress-bar/clx-progress-bar.component.ts","../../../projects/codexly-ui/src/lib/components/pages/clx-page-not-found/clx-page-not-found.component.ts","../../../projects/codexly-ui/src/lib/components/pages/clx-page-unauthorized/clx-page-unauthorized.component.ts","../../../projects/codexly-ui/src/lib/components/pages/clx-page-server-error/clx-page-server-error.component.ts","../../../projects/codexly-ui/src/public-api.ts","../../../projects/codexly-ui/src/codexly-ui.ts"],"sourcesContent":["// ── Base color names (Tailwind standard) ─────────────────────────────────────\nexport type ClxColor =\n | 'red' | 'orange' | 'amber' | 'yellow' | 'lime' | 'green' | 'emerald'\n | 'teal' | 'cyan' | 'sky' | 'blue' | 'indigo' | 'violet' | 'purple'\n | 'fuchsia' | 'pink' | 'rose' | 'slate' | 'gray' | 'zinc' | 'neutral'\n | 'stone' | 'white';\n\n// ── Available shades ──────────────────────────────────────────────────────────\nexport type ClxShade = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950;\n\n// ── Input accepted by components: 'indigo' | 'indigo-100' | 'indigo-500' ... ─\nexport type ClxColorInput = ClxColor | `${ClxColor}-${ClxShade}`;\n\n// ── Resolved color + shade ────────────────────────────────────────────────────\nexport interface ClxColorResolved {\n color: ClxColor;\n shade: ClxShade;\n}\n\n// ── Semantic token set produced by resolveColor() ─────────────────────────────\nexport interface ClxColorTokens {\n bg: string; // bg-{color}-{shade}\n bgSubtle: string; // bg-{color}-{shade-light} (bg para chips/badges light)\n text: string; // text-white | text-{color}-{shade+dark}\n textSubtle: string; // text-{color}-{shade} (texto sobre bg claro)\n border: string; // border-{color}-{shade}\n borderLight: string; // border-{color}-{shade-light}\n hoverBg: string; // hover:bg-{color}-{shade+1step}\n hoverBgMuted:string; // hover:bg-{color}-{shade}/10\n ring: string; // ring-{color}-{shade}/30\n focus: string; // focus:ring-2 focus:ring-{color}-{shade}/20 focus:border-{color}-{shade}\n // ── Legacy aliases (usados en nav, badge, button configs) ────────────────\n bgBase: string;\n bgDark: string;\n textBase: string;\n textDark: string;\n textEmphasis: string;\n textAccent: string;\n textMuted: string;\n textLight: string;\n borderBase: string;\n borderDark: string;\n borderSubtle: string;\n borderAccent: string;\n hoverBgBase: string;\n hoverBgLight: string;\n hoverBgDark: string;\n hoverBgSubtle: string;\n hoverTextBase: string;\n hoverTextDark: string;\n hoverTextEmph: string;\n hoverBorderBase: string;\n hoverBorderDark: string;\n ringBase: string;\n ringAccent: string;\n focusWithin: string;\n focusDirect: string;\n focusVisible: string;\n focusVisibleLight: string;\n}\n\n// ── Parse 'red' | 'red-500' → { color, shade } ───────────────────────────────\nexport function parseColorInput(input: ClxColorInput): ClxColorResolved {\n if (input === 'white') return { color: 'white', shade: 500 };\n const parts = input.split('-');\n if (parts.length === 1) return { color: input as ClxColor, shade: 500 };\n const shade = Number(parts[parts.length - 1]) as ClxShade;\n const color = parts.slice(0, -1).join('-') as ClxColor;\n return { color, shade };\n}\n\n// ── Clamp shade to valid steps ────────────────────────────────────────────────\nconst SHADES: ClxShade[] = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];\n\nfunction darker(shade: ClxShade, steps = 1): ClxShade {\n const idx = SHADES.indexOf(shade);\n return SHADES[Math.min(idx + steps, SHADES.length - 1)];\n}\n\nfunction lighter(shade: ClxShade, steps = 1): ClxShade {\n const idx = SHADES.indexOf(shade);\n return SHADES[Math.max(idx - steps, 0)];\n}\n\n// ── Build all tokens from color + shade ──────────────────────────────────────\nexport function resolveColor(input: ClxColorInput): ClxColorTokens {\n if (input === 'white') return WHITE_TOKENS;\n\n const { color, shade } = parseColorInput(input);\n const c = color;\n const s = shade;\n\n const onDark = s >= 400;\n const textOn = onDark ? 'text-white' : `text-${c}-800`;\n const hoverS = darker(s, 1);\n const subtleS = lighter(s, 3);\n const accentS = lighter(s, 2);\n const mutedS = lighter(s, 1);\n const emphS = darker(s, 1);\n\n return {\n // ── New semantic tokens ─────────────────────────────────────────────────\n bg: `bg-${c}-${s}`,\n bgSubtle: `bg-${c}-${subtleS}`,\n text: textOn,\n textSubtle: `text-${c}-${s}`,\n border: `border-${c}-${s}`,\n borderLight: `border-${c}-${lighter(s, 2)}`,\n hoverBg: `hover:bg-${c}-${hoverS}`,\n hoverBgMuted: `hover:bg-${c}-${s}/10`,\n ring: `ring-${c}-${s}/30`,\n focus: `focus:ring-2 focus:ring-${c}-${s}/20 focus:border-${c}-${s}`,\n // ── Legacy aliases ──────────────────────────────────────────────────────\n bgBase: `bg-${c}-${s}`,\n bgDark: `bg-${c}-${darker(s, 2)}`,\n textBase: `text-${c}-${s}`,\n textDark: `text-${c}-${darker(s, 2)}`,\n textEmphasis: `text-${c}-${emphS}`,\n textAccent: `text-${c}-${accentS}`,\n textMuted: `text-${c}-${mutedS}`,\n textLight: `text-${c}-${subtleS}`,\n borderBase: `border-${c}-${s}`,\n borderDark: `border-${c}-${darker(s, 2)}`,\n borderSubtle: `border-${c}-${lighter(s, 4)}`,\n borderAccent: `border-${c}-${mutedS}`,\n hoverBgBase: `hover:bg-${c}-${s}`,\n hoverBgLight: `hover:bg-${c}-${subtleS}`,\n hoverBgDark: `hover:bg-${c}-${darker(s, 2)}`,\n hoverBgSubtle: `hover:bg-${c}-50`,\n hoverTextBase: `hover:text-${c}-${s}`,\n hoverTextDark: `hover:text-${c}-${darker(s, 2)}`,\n hoverTextEmph: `hover:text-${c}-${emphS}`,\n hoverBorderBase: `hover:border-${c}-${s}`,\n hoverBorderDark: `hover:border-${c}-${darker(s, 2)}`,\n ringBase: `ring-${c}-${s}/30`,\n ringAccent: `ring-${c}-${mutedS}`,\n focusWithin: `focus-within:ring-2 focus-within:ring-${c}-${s}/20 focus-within:border-${c}-${s}`,\n focusDirect: `focus:ring-2 focus:ring-${c}-${s}/20 focus:border-${c}-${s}`,\n focusVisible: `focus-visible:ring-${c}-${s}`,\n focusVisibleLight: `focus-visible:ring-${c}-${accentS}`,\n };\n}\n\n// ── White special case ────────────────────────────────────────────────────────\nconst WHITE_TOKENS: ClxColorTokens = {\n bg: 'bg-white',\n bgSubtle: 'bg-white/10',\n text: 'text-gray-900',\n textSubtle: 'text-white',\n border: 'border-white',\n borderLight: 'border-white/30',\n hoverBg: 'hover:bg-gray-100',\n hoverBgMuted: 'hover:bg-white/10',\n ring: 'ring-white/30',\n focus: 'focus:ring-2 focus:ring-white/20 focus:border-white',\n bgBase: 'bg-white',\n bgDark: 'bg-white/80',\n textBase: 'text-white',\n textDark: 'text-gray-900',\n textEmphasis: 'text-white',\n textAccent: 'text-white',\n textMuted: 'text-white/60',\n textLight: 'text-white/70',\n borderBase: 'border-white',\n borderDark: 'border-white/80',\n borderSubtle: 'border-white/20',\n borderAccent: 'border-white/50',\n hoverBgBase: 'hover:bg-white',\n hoverBgLight: 'hover:bg-white/30',\n hoverBgDark: 'hover:bg-gray-100',\n hoverBgSubtle: 'hover:bg-white/10',\n hoverTextBase: 'hover:text-white',\n hoverTextDark: 'hover:text-gray-900',\n hoverTextEmph: 'hover:text-white',\n hoverBorderBase: 'hover:border-white',\n hoverBorderDark: 'hover:border-gray-100',\n ringBase: 'ring-white/30',\n ringAccent: 'ring-white/50',\n focusWithin: 'focus-within:ring-2 focus-within:ring-white/20 focus-within:border-white',\n focusDirect: 'focus:ring-2 focus:ring-white/20 focus:border-white',\n focusVisible: 'focus-visible:ring-white',\n focusVisibleLight: 'focus-visible:ring-white/40',\n};\n\n// ── Backward-compat: CLX_COLOR_MAP[color] → resolveColor(color) ──────────────\nexport const CLX_COLOR_MAP: Record<ClxColor, ClxColorTokens> = new Proxy(\n {} as Record<ClxColor, ClxColorTokens>,\n { get: (_, color: string) => resolveColor(color as ClxColor) }\n);\n\n// ── Hex values for Chart.js (raw hex, no Tailwind classes needed) ─────────────\nexport const CLX_COLOR_HEX = {\n red: '#ef4444', orange: '#f97316', amber: '#f59e0b', yellow: '#eab308',\n lime: '#84cc16', green: '#22c55e', emerald: '#10b981', teal: '#14b8a6',\n cyan: '#06b6d4', sky: '#0ea5e9', blue: '#3b82f6', indigo: '#6366f1',\n violet: '#8b5cf6', purple: '#a855f7', fuchsia: '#d946ef', pink: '#ec4899',\n rose: '#f43f5e', slate: '#64748b', gray: '#6b7280', zinc: '#71717a',\n neutral: '#737373', stone: '#78716c', white: '#ffffff',\n slate100: '#f1f5f9', slate200: '#e2e8f0', slate300: '#cbd5e1', slate400: '#94a3b8',\n};\n","export const BADGE_SIZE_MAP = {\n xs: 'text-[10px] px-1.5 py-0.5',\n sm: 'text-xs px-2 py-1',\n md: 'text-xs px-2.5 py-1 font-medium',\n} as const;\n\nexport const BADGE_CIRCLE_SIZE_MAP = {\n xs: 'text-[10px] w-4 h-4',\n sm: 'text-xs w-5 h-5',\n md: 'text-xs w-6 h-6 font-medium',\n} as const;\n\nexport const BADGE_SHAPE_MAP = {\n rounded: 'rounded',\n pill: 'rounded-md',\n circle: 'rounded-full',\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxShape } from '../../../types/clx-shape.types';\nimport type { ClxBadgeVariant } from '../../../types/clx-badge.types';\nimport { BADGE_SIZE_MAP, BADGE_CIRCLE_SIZE_MAP, BADGE_SHAPE_MAP } from '../../../configs/badge.config';\n\n@Component({\n selector: 'span[clx-badge]',\n standalone: true,\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n})\nexport class ClxBadgeComponent {\n readonly variant = input<ClxBadgeVariant>('solid');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<Extract<ClxSize, 'xs' | 'sm' | 'md'>>('md');\n readonly shape = input<ClxShape>('rounded');\n readonly positioned = input<boolean>(false);\n\n protected readonly _hostClass = computed(() => {\n const t = resolveColor(this.color());\n const variant = this.variant();\n const isCircle = this.shape() === 'circle';\n const sizeClass = isCircle ? BADGE_CIRCLE_SIZE_MAP[this.size()] : BADGE_SIZE_MAP[this.size()];\n const shapeClass = BADGE_SHAPE_MAP[this.shape()];\n const posClass = this.positioned()\n ? 'absolute top-0 right-0 translate-x-1/2 -translate-y-1/2'\n : '';\n\n let colorClass: string;\n if (variant === 'solid') colorClass = `${t.bg} ${t.text}`;\n else if (variant === 'light') colorClass = `${t.bgSubtle} ${t.textSubtle}`;\n else colorClass = `border ${t.border} ${t.textSubtle} bg-transparent`;\n\n return `inline-flex items-center justify-center leading-none ${colorClass} ${sizeClass} ${shapeClass} ${posClass}`.trim();\n });\n}\n","import type { ClxSize } from '../types/clx-size.types';\n\nexport const ICON_SIZE_PX: Record<ClxSize, string> = {\n xxs: '12px',\n xs: '16px',\n sm: '20px',\n md: '24px',\n lg: '32px',\n xl: '48px',\n};\n\nexport const ICON_SIZE_OPSZ: Record<ClxSize, number> = {\n xxs: 16,\n xs: 20,\n sm: 20,\n md: 24,\n lg: 40,\n xl: 48,\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport { ICON_SIZE_OPSZ, ICON_SIZE_PX } from '../../../configs/icon-size.config';\n\n@Component({\n selector: 'span[clx-icon]',\n standalone: true,\n template: '',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'material-symbols-outlined',\n '[class]': '_colorClass()',\n '[textContent]': 'name()',\n '[style.font-size]': '_fontSize()',\n '[style.font-variation-settings]': '_fontVariation()',\n },\n})\nexport class ClxIconComponent {\n readonly name = input.required<string>();\n readonly size = input<ClxSize>('md');\n readonly color = input<ClxColorInput | null>(null);\n readonly fill = input<boolean>(false);\n\n protected readonly _colorClass = computed(() => {\n const c = this.color();\n return c ? resolveColor(c).textSubtle : '';\n });\n\n protected readonly _fontSize = computed(() => ICON_SIZE_PX[this.size()]);\n\n protected readonly _fontVariation = computed(() => {\n const opsz = ICON_SIZE_OPSZ[this.size()];\n return `'FILL' ${this.fill() ? 1 : 0}, 'wght' 400, 'GRAD' 0, 'opsz' ${opsz}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, parseColorInput, CLX_COLOR_HEX } from '../../../types/clx-color.types';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxStatMetric, SparkPoint } from '../../../types/clx-stat-card.types';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\n\nexport type { ClxStatMetric } from '../../../types/clx-stat-card.types';\nexport type { ClxTrendDirection } from '../../../types/clx-stat-card.types';\n\n@Component({\n selector: 'clx-stat-card',\n standalone: true,\n imports: [ClxBadgeComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n },\n template: `\n @if (layout() === 'horizontal') {\n <!-- Icon -->\n <div class=\"shrink-0 w-12 h-12 rounded-xl flex items-center justify-center\" [class]=\"_iconBg()\">\n <span clx-icon [name]=\"metric().icon\" size=\"md\" class=\"text-white\"></span>\n </div>\n\n <!-- Text block -->\n <div class=\"flex flex-col gap-1 min-w-0 flex-1\">\n <span class=\"text-sm text-slate-500 truncate\">{{ metric().title }}</span>\n <span class=\"text-2xl font-semibold text-slate-900 leading-tight\">\n {{ _formattedValue() }}\n </span>\n <span clx-badge\n [color]=\"_trendColor()\"\n variant=\"light\"\n shape=\"pill\"\n class=\"self-start gap-1 mt-0.5\">\n <span clx-icon [name]=\"_trendIcon()\" size=\"xxs\"></span>\n {{ metric().trend }}\n </span>\n </div>\n\n <!-- Sparkline -->\n <div style=\"flex: 0 0 112px; height: 64px; position: relative; overflow: hidden;\">\n <svg style=\"position: absolute; inset: 0; width: 100%; height: 100%;\"\n viewBox=\"0 0 140 64\" preserveAspectRatio=\"none\">\n <defs>\n <linearGradient [attr.id]=\"_gradId()\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" [attr.stop-color]=\"_lineColor()\" stop-opacity=\"0.22\"/>\n <stop offset=\"100%\" [attr.stop-color]=\"_lineColor()\" stop-opacity=\"0.02\"/>\n </linearGradient>\n </defs>\n <path [attr.d]=\"_fillPath()\" [attr.fill]=\"'url(#' + _gradId() + ')'\" stroke=\"none\"/>\n <path [attr.d]=\"_linePath()\" [attr.stroke]=\"_lineColor()\" stroke-width=\"2.5\"\n fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n @if (layout() === 'bar') {\n <!-- Col izquierda: ícono circular + título + valor -->\n <div class=\"flex flex-col gap-1 min-w-0 flex-1\">\n <div class=\"w-11 h-11 rounded-full flex items-center justify-center mb-2\" [class]=\"_iconBgSubtle()\">\n <span clx-icon [name]=\"metric().icon\" size=\"md\" [class]=\"_iconTextBase()\"></span>\n </div>\n <span class=\"text-sm text-slate-500 truncate\">{{ metric().title }}</span>\n <span class=\"text-2xl font-semibold text-slate-900 leading-tight\">{{ _formattedValue() }}</span>\n </div>\n\n <!-- Col derecha: barras + tendencia -->\n <div class=\"shrink-0 flex flex-col items-end justify-between gap-2 self-stretch\" style=\"width: 160px;\">\n <!-- Bar chart -->\n <div class=\"flex items-end gap-1\" style=\"height: 44px;\">\n @for (h of _barHeights(); track $index) {\n <div class=\"w-1.5 opacity-80\"\n [class]=\"_iconBg()\"\n [style.height.%]=\"h\">\n </div>\n }\n </div>\n <!-- Tendencia -->\n <div class=\"flex items-center gap-1 text-xs text-slate-400 whitespace-nowrap\">\n {{ metric().trendDirection === 'up' ? 'Increased By' : 'Decreased By' }}\n <span class=\"font-semibold\" [class]=\"_trendTextClass()\">{{ metric().trend }}</span>\n <span clx-icon [name]=\"_trendArrowIcon()\" size=\"sm\" [class]=\"_trendTextClass()\"></span>\n </div>\n </div>\n }\n\n @if (layout() === 'vertical') {\n <!-- Col izquierda: badge + valor + título -->\n <div class=\"flex flex-col justify-between flex-1 min-w-0 gap-1\">\n <span clx-badge\n [color]=\"_trendColor()\"\n variant=\"light\"\n shape=\"pill\"\n class=\"self-start gap-1\">\n <span clx-icon [name]=\"_trendIcon()\" size=\"xxs\"></span>\n {{ metric().trend }}\n </span>\n <span class=\"text-2xl font-semibold text-slate-900 leading-tight\">{{ _formattedValue() }}</span>\n <span class=\"text-xs font-semibold tracking-widest text-slate-400 uppercase\">{{ metric().title }}</span>\n </div>\n\n <!-- Col derecha: solo icono -->\n <div class=\"shrink-0 w-12 h-12 rounded-xl flex items-center justify-center\" [class]=\"_iconBg()\">\n <span clx-icon [name]=\"metric().icon\" size=\"md\" class=\"text-white\"></span>\n </div>\n }\n `,\n})\nexport class ClxStatCardComponent {\n readonly metric = input.required<ClxStatMetric>();\n readonly chartData = input<number[]>([30, 45, 28, 60, 40, 70, 55, 80, 50, 90]);\n readonly color = input<ClxColorInput>('indigo');\n readonly layout = input<'horizontal' | 'vertical' | 'bar'>('horizontal');\n\n protected readonly _hostClass = computed(() => {\n const border = resolveColor(this.color()).borderLight;\n const base = `bg-white rounded-xl shadow-md border ${border} p-5 w-full overflow-hidden min-w-[260px]`;\n return `flex items-center gap-4 ${base}`;\n });\n\n protected readonly _barHeights = computed(() => {\n const data = this.chartData();\n if (!data.length) return [];\n const max = Math.max(...data) || 1;\n return data.map(v => Math.max(4, Math.round((v / max) * 100)));\n });\n\n protected readonly _iconBg = computed(() => resolveColor(this.color()).bg);\n protected readonly _iconBgSubtle = computed(() => resolveColor(this.color()).bgSubtle);\n protected readonly _iconTextBase = computed(() => resolveColor(this.color()).textSubtle);\n protected readonly _lineColor = computed(() => {\n const { color } = parseColorInput(this.color());\n return CLX_COLOR_HEX[color] ?? CLX_COLOR_HEX.indigo;\n });\n protected readonly _gradId = computed(() => `spark-grad-${this.color()}`);\n\n protected readonly _trendColor = computed(() => {\n const d = this.metric().trendDirection;\n return d === 'up' ? 'green' : d === 'down' ? 'red' : 'slate';\n });\n\n protected readonly _trendArrowIcon = computed(() => {\n const d = this.metric().trendDirection;\n return d === 'up' ? 'arrow_upward' : d === 'down' ? 'arrow_downward' : 'remove';\n });\n\n protected readonly _trendTextClass = computed(() => {\n const d = this.metric().trendDirection;\n return d === 'up' ? 'text-green-500' : d === 'down' ? 'text-red-500' : 'text-slate-400';\n });\n\n protected readonly _trendIcon = computed(() => {\n const d = this.metric().trendDirection;\n return d === 'up' ? 'arrow_outward' : d === 'down' ? 'south_east' : 'remove';\n });\n\n protected readonly _formattedValue = computed(() => {\n const v = this.metric().value;\n return typeof v === 'number' ? v.toLocaleString() : v;\n });\n\n protected readonly _points = computed<SparkPoint[]>(() => {\n const data = this.chartData();\n if (data.length < 2) return [];\n const W = 140, H = 64, padX = 2, padY = 6;\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n return data.map((v, i) => ({\n x: padX + (i / (data.length - 1)) * (W - padX * 2),\n y: padY + (1 - (v - min) / range) * (H - padY * 2),\n }));\n });\n\n protected readonly _linePath = computed(() => this._buildPath(this._points(), false));\n protected readonly _fillPath = computed(() => {\n const pts = this._points();\n if (!pts.length) return '';\n const H = 64;\n const open = this._buildPath(pts, false);\n const close = ` L${pts[pts.length - 1].x},${H} L${pts[0].x},${H} Z`;\n return open + close;\n });\n\n constructor() {\n effect(() => {\n void this._linePath();\n void this._fillPath();\n });\n }\n\n private _buildPath(pts: SparkPoint[], closed: boolean): string {\n if (pts.length < 2) return '';\n let d = `M${pts[0].x},${pts[0].y}`;\n for (let i = 1; i < pts.length; i++) {\n const prev = pts[i - 1];\n const cur = pts[i];\n const cpx = (prev.x + cur.x) / 2;\n d += ` C${cpx},${prev.y} ${cpx},${cur.y} ${cur.x},${cur.y}`;\n }\n if (closed) d += ' Z';\n return d;\n }\n\n}\n","import type { ClxColor } from '../types/clx-color.types';\nimport type { ClxBadgeVariant } from '../types/clx-badge.types';\n\nexport type ClxProductTag = 'new' | 'sale' | 'out-of-stock' | 'featured' | 'limited' | 'hot';\n\nexport const PRODUCT_TAG_LABEL: Record<ClxProductTag, string> = {\n 'new': 'Nuevo',\n 'sale': 'Oferta',\n 'out-of-stock': 'Sin Stock',\n 'featured': 'Destacado',\n 'limited': 'Limitado',\n 'hot': 'Popular',\n};\n\nexport const PRODUCT_TAG_COLOR: Record<ClxProductTag, ClxColor> = {\n 'new': 'emerald',\n 'sale': 'rose',\n 'out-of-stock': 'slate',\n 'featured': 'indigo',\n 'limited': 'amber',\n 'hot': 'orange',\n};\n\nexport const PRODUCT_TAG_VARIANT: Record<ClxProductTag, ClxBadgeVariant> = {\n 'new': 'solid',\n 'sale': 'solid',\n 'out-of-stock': 'light',\n 'featured': 'solid',\n 'limited': 'solid',\n 'hot': 'solid',\n};\n","export const BUTTON_BASE_CLASS = 'relative overflow-hidden inline-flex items-center justify-center font-medium select-none transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2';\n\nexport const BUTTON_SIZE_MAP = {\n xxs: 'text-xs px-1.5 py-0.5 gap-0.5',\n xs: 'text-xs px-2 py-1 gap-1',\n sm: 'text-xs px-3 py-1.5 gap-1.5',\n md: 'text-sm px-4 py-2 gap-2',\n lg: 'text-sm px-5 py-2.5 gap-2.5',\n} as const;\n\nexport const BUTTON_SHAPE_MAP = {\n rounded: 'rounded-lg',\n pill: 'rounded-full',\n circle: 'rounded-full',\n} as const;\n\nexport const BUTTON_ICON_ONLY_SIZE_MAP = {\n xxs: 'w-5 h-5 p-0 text-xs',\n xs: 'w-7 h-7 p-0 text-xs',\n sm: 'w-8 h-8 p-0 text-sm',\n md: 'w-10 h-10 p-0 text-sm',\n lg: 'w-11 h-11 p-0 text-sm',\n} as const;\n","import type { ClxSize } from '../types/clx-size.types';\nimport type { ClxSpinnerVariant } from '../types/clx-spinner.types';\n\nexport const SPINNER_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-3 h-3 border-2',\n xs: 'w-4 h-4 border-2',\n sm: 'w-5 h-5 border-2',\n md: 'w-6 h-6 border-[3px]',\n lg: 'w-8 h-8 border-[3px]',\n xl: 'w-10 h-10 border-4',\n};\n\nexport const SPINNER_DOT_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-1 h-1',\n xs: 'w-1.5 h-1.5',\n sm: 'w-2 h-2',\n md: 'w-2.5 h-2.5',\n lg: 'w-3 h-3',\n xl: 'w-4 h-4',\n};\n\nexport const SPINNER_PULSE_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-3 h-3',\n xs: 'w-4 h-4',\n sm: 'w-5 h-5',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxSpinnerVariant, ClxSpinnerColor } from '../../../types/clx-spinner.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport {\n SPINNER_SIZE_MAP,\n SPINNER_DOT_SIZE_MAP,\n SPINNER_PULSE_SIZE_MAP,\n} from '../../../configs/spinner.config';\n\n@Component({\n selector: 'clx-spinner',\n standalone: true,\n template: `\n @switch (variant()) {\n\n @case ('spinner') {\n <span class=\"rounded-full animate-spin\" [class]=\"_spinnerClass()\" role=\"status\" aria-label=\"Cargando\"></span>\n }\n\n @case ('dots') {\n <span class=\"inline-flex items-center gap-1\" role=\"status\" aria-label=\"Cargando\">\n @for (i of [0, 1, 2]; track i) {\n <span class=\"rounded-full clx-dot-bounce\" [class]=\"_dotClass()\" [style.animation-delay]=\"(i * 160) + 'ms'\"></span>\n }\n </span>\n }\n\n @case ('pulse') {\n <span class=\"relative inline-flex rounded-full\" [class]=\"_pulseWrapperClass()\" role=\"status\" aria-label=\"Cargando\">\n <span class=\"absolute inset-0 rounded-full opacity-25\" [class]=\"_pulseColorClass()\"></span>\n <span class=\"absolute inset-0 rounded-full animate-ping opacity-75\" [class]=\"_pulseColorClass()\"></span>\n </span>\n }\n\n }\n `,\n styles: [`\n @keyframes clx-dot-bounce {\n from { transform: translateY(0); opacity: 0.4; }\n to { transform: translateY(-40%); opacity: 1; }\n }\n .clx-dot-bounce {\n animation: clx-dot-bounce 0.6s ease-in-out infinite alternate;\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'inline-flex items-center justify-center' },\n})\nexport class ClxSpinnerComponent {\n readonly size = input<ClxSize>('md');\n readonly color = input<ClxSpinnerColor>('indigo');\n readonly variant = input<ClxSpinnerVariant>('spinner');\n\n protected readonly _spinnerClass = computed(() => {\n const size = SPINNER_SIZE_MAP[this.size()];\n if (this.color() === 'inherit') return `${size} border-current/30 border-t-current`;\n const t = resolveColor(this.color() as Exclude<ClxSpinnerColor, 'inherit'>);\n return `${size} ${t.borderLight} ${t.border.replace('border-', 'border-t-')}`;\n });\n\n protected readonly _dotClass = computed(() => {\n const size = SPINNER_DOT_SIZE_MAP[this.size()];\n if (this.color() === 'inherit') return `${size} bg-current`;\n const t = resolveColor(this.color() as Exclude<ClxSpinnerColor, 'inherit'>);\n return `${size} ${t.bg}`;\n });\n\n protected readonly _pulseWrapperClass = computed(() => SPINNER_PULSE_SIZE_MAP[this.size()]);\n\n protected readonly _pulseColorClass = computed(() => {\n if (this.color() === 'inherit') return 'bg-current';\n return resolveColor(this.color() as Exclude<ClxSpinnerColor, 'inherit'>).bg;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxShape } from '../../../types/clx-shape.types';\nimport type { ClxButtonVariant, ClxRippleItem } from '../../../types/clx-button.types';\nimport type { ClxColorInput, ClxShade } from '../../../types/clx-color.types';\nimport { resolveColor, parseColorInput, CLX_COLOR_HEX } from '../../../types/clx-color.types';\nimport { BUTTON_BASE_CLASS, BUTTON_SIZE_MAP, BUTTON_ICON_ONLY_SIZE_MAP, BUTTON_SHAPE_MAP } from '../../../configs/button.config';\nimport { BADGE_CIRCLE_SIZE_MAP } from '../../../configs/badge.config';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\nimport { ClxSpinnerComponent } from '../clx-spinner/clx-spinner.component';\n\n@Component({\n selector: 'button[clx-button], a[clx-button]',\n standalone: true,\n imports: [ClxIconComponent, ClxSpinnerComponent],\n template: `\n @if (icon() && iconPosition() === 'left' && !loading()) {\n <span clx-icon [name]=\"icon()!\" [size]=\"_iconSize()\"></span>\n }\n @if (loading()) {\n <clx-spinner [size]=\"_iconSize()\" [color]=\"_spinnerColor()\" />\n }\n <ng-content />\n @if (icon() && iconPosition() === 'right' && !loading()) {\n <span clx-icon [name]=\"icon()!\" [size]=\"_iconSize()\"></span>\n }\n @for (r of _ripples(); track r.id) {\n <span\n class=\"clx-ripple-wave\"\n [style.background-color]=\"_rippleColor()\"\n [style.width.px]=\"r.diameter\"\n [style.height.px]=\"r.diameter\"\n [style.left.px]=\"r.x - r.diameter / 2\"\n [style.top.px]=\"r.y - r.diameter / 2\"\n ></span>\n }\n @if (badge() !== undefined && badge() !== null) {\n <span [class]=\"_badgeClass()\">{{ badge() }}</span>\n }\n `,\n styles: [`\n @keyframes clx-ripple-anim {\n to { transform: scale(4); opacity: 0; }\n }\n .clx-ripple-wave {\n position: absolute;\n border-radius: 50%;\n transform: scale(0);\n animation: clx-ripple-anim 600ms linear;\n pointer-events: none;\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n '[style.opacity]': '_inactive() ? \"0.5\" : null',\n '[style.cursor]': '_inactive() ? \"not-allowed\" : \"pointer\"',\n '[attr.disabled]': '_inactive() ? true : null',\n '[attr.aria-busy]': 'loading()',\n '(click)': '_onRipple($event)',\n },\n})\nexport class ClxButtonComponent {\n readonly variant = input<ClxButtonVariant>('solid');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<Extract<ClxSize, 'xxs' | 'xs' | 'sm' | 'md' | 'lg'>>('md');\n readonly shape = input<ClxShape>('rounded');\n readonly loading = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly block = input<boolean>(false);\n readonly icon = input<string | undefined>(undefined);\n readonly iconPosition = input<'left' | 'right'>('left');\n readonly iconOnly = input<boolean>(false);\n readonly badge = input<number | string | undefined>(undefined);\n readonly badgeColor = input<ClxColorInput>('red');\n\n protected readonly _ripples = signal<ClxRippleItem[]>([]);\n private _nextId = 0;\n private readonly _el = inject(ElementRef<HTMLElement>);\n\n protected readonly _inactive = computed(() => this.loading() || this.disabled());\n\n protected readonly _badgeClass = computed(() => {\n const t = resolveColor(this.badgeColor());\n const size = BADGE_CIRCLE_SIZE_MAP['xs'];\n return `absolute -top-1.5 -right-1.5 ${size} rounded-full ${t.bg} ${t.text} flex items-center justify-center text-[10px] font-semibold leading-none pointer-events-none z-10`;\n });\n\n protected readonly _colorClass = computed(() => {\n const { color, shade } = parseColorInput(this.color());\n const SHADES = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];\n const idx = SHADES.indexOf(shade);\n const s2down = (SHADES[Math.max(idx - 2, 0)]) as ClxShade;\n const s3down = (SHADES[Math.max(idx - 3, 0)]) as ClxShade;\n\n const base = resolveColor(this.color());\n const lightBase = resolveColor(`${color}-${s3down}` as ClxColorInput);\n const lightHov = resolveColor(`${color}-${s2down}` as ClxColorInput);\n const variant = this.variant();\n\n if (variant === 'solid')\n return `border-2 ${base.border} ${base.bg} ${base.text} ${base.hoverBg} ${base.focusVisible}`;\n if (variant === 'light')\n return `border-2 ${lightBase.border} ${lightBase.bg} text-${color}-${shade} ${lightHov.hoverBgBase} ${lightHov.hoverBorderBase} ${base.focusVisible}`;\n if (variant === 'outline')\n return `border-2 ${base.border} text-${color}-${shade} ${base.hoverBgBase} hover:text-white ${base.focusVisible}`;\n if (variant === 'ghost')\n return `border-2 border-transparent ${base.textSubtle} ${base.hoverBgMuted} ${base.focusVisibleLight}`;\n // link\n return `${base.textSubtle} hover:underline ${base.focusVisibleLight}`;\n });\n\n protected readonly _rippleColor = computed(() => {\n const v = this.variant();\n if (v === 'solid' || v === 'outline') return 'rgba(255,255,255,0.60)';\n const { color } = parseColorInput(this.color());\n const hex = (CLX_COLOR_HEX as Record<string, string>)[color] ?? '#6366f1';\n return hex + '4D'; // 30% opacity\n });\n\n protected readonly _spinnerColor = computed(() => {\n const v = this.variant();\n if (v === 'solid') return 'white';\n return 'inherit';\n });\n\n protected readonly _iconSize = computed((): ClxSize => {\n switch (this.size()) {\n case 'xxs': return 'xs';\n case 'xs': return 'xs';\n case 'sm': return 'xs';\n case 'lg': return 'md';\n default: return 'sm';\n }\n });\n\n protected readonly _hostClass = computed(() => {\n const colorClass = this._inactive()\n ? this._colorClass().replace(/hover:\\S+/g, '').replace(/\\s+/g, ' ').trim()\n : this._colorClass();\n const sizeClass = this.iconOnly()\n ? (BUTTON_ICON_ONLY_SIZE_MAP as Record<string, string>)[this.size()]\n : (BUTTON_SIZE_MAP as Record<string, string>)[this.size()];\n const shapeClass = (BUTTON_SHAPE_MAP as Record<string, string>)[this.shape()];\n const overflowClass = (this.badge() !== undefined && this.badge() !== null) ? 'overflow-visible' : 'overflow-hidden';\n const base = BUTTON_BASE_CLASS.replace('overflow-hidden', overflowClass);\n return `${base} ${colorClass} ${sizeClass} ${shapeClass}${this.block() ? ' w-full' : ''}`.trimEnd();\n });\n\n protected _onRipple(event: Event): void {\n if (this._inactive()) return;\n const e = event as MouseEvent;\n const rect = this._el.nativeElement.getBoundingClientRect();\n const diameter = Math.max(rect.width, rect.height);\n const id = ++this._nextId;\n this._ripples.update(rs => [...rs, { id, x: e.clientX - rect.left, y: e.clientY - rect.top, diameter }]);\n setTimeout(() => this._ripples.update(rs => rs.filter(r => r.id !== id)), 650);\n }\n}\n","import type { ClxSize } from '../types/clx-size.types';\nimport type { ClxSkeletonVariant } from '../types/clx-skeleton.types';\n\nexport const SKELETON_BASE_CLASS = 'bg-slate-200 animate-pulse';\n\nexport const SKELETON_VARIANT_MAP: Record<ClxSkeletonVariant, string> = {\n text: 'rounded',\n circular: 'rounded-full',\n rectangular: 'rounded-md',\n};\n\n// text / rectangular height\nexport const SKELETON_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'h-3',\n xs: 'h-4',\n sm: 'h-5',\n md: 'h-6',\n lg: 'h-8',\n xl: 'h-12',\n};\n\n// circular: square dimensions aligned with avatar sizes\nexport const SKELETON_CIRCULAR_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-5 h-5',\n xs: 'w-7 h-7',\n sm: 'w-9 h-9',\n md: 'w-12 h-12',\n lg: 'w-16 h-16',\n xl: 'w-20 h-20',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxSkeletonVariant } from '../../../types/clx-skeleton.types';\nimport {\n SKELETON_BASE_CLASS,\n SKELETON_VARIANT_MAP,\n SKELETON_SIZE_MAP,\n SKELETON_CIRCULAR_SIZE_MAP,\n} from '../../../configs/skeleton.config';\n\n@Component({\n selector: 'clx-skeleton',\n standalone: true,\n template: '',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n '[style.width]': '_hostWidth()',\n '[style.height]': '_hostHeight()',\n },\n})\nexport class ClxSkeletonComponent {\n readonly variant = input<ClxSkeletonVariant>('text');\n readonly size = input<ClxSize>('md');\n readonly width = input<string | null>(null);\n readonly height = input<string | null>(null);\n\n protected readonly _hostClass = computed(() => {\n const variant = SKELETON_VARIANT_MAP[this.variant()];\n const sizeClass = this.variant() === 'circular'\n ? SKELETON_CIRCULAR_SIZE_MAP[this.size()]\n : SKELETON_SIZE_MAP[this.size()];\n return `block ${SKELETON_BASE_CLASS} ${variant} ${sizeClass}`.trim();\n });\n\n protected readonly _hostWidth = computed(() =>\n this.variant() === 'circular' ? null : this.width()\n );\n\n protected readonly _hostHeight = computed(() =>\n this.variant() === 'circular' ? null : this.height()\n );\n}\n","import { InjectionToken } from '@angular/core';\nimport type { ClxAnimateDefaults } from '../types/clx-animate.types';\n\nexport const CLX_ANIMATE_DEFAULTS_VALUE: Required<ClxAnimateDefaults> = {\n duration: 1000,\n delay: 0,\n repeat: 1,\n easing: 'ease',\n fillMode: 'both',\n once: false,\n threshold: 0.1,\n};\n\nexport const CLX_ANIMATE_DEFAULTS = new InjectionToken<ClxAnimateDefaults>(\n 'CLX_ANIMATE_DEFAULTS',\n {\n providedIn: 'root',\n factory: () => CLX_ANIMATE_DEFAULTS_VALUE,\n },\n);\n","import {\n Injectable,\n inject,\n PLATFORM_ID,\n signal,\n computed,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { CLX_ANIMATE_DEFAULTS } from '../configs/animate.config';\nimport type { ClxAnimateConfig, ClxAnimateDefaults, ClxAnimateName } from '../types/clx-animate.types';\n\nconst PREFIX = 'clx-anim--';\n\ntype CleanupFn = () => void;\n\n/** Un IntersectionObserver compartido + registro de elementos por valor de threshold. */\ninterface ObserverPool {\n observer: IntersectionObserver;\n registry: Map<HTMLElement, (isIntersecting: boolean) => void>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ClxAnimateService {\n private readonly platformId: object;\n private readonly defaults: ClxAnimateDefaults;\n readonly isBrowser!: boolean;\n\n // ─── Estado de animaciones en curso ───────────────────────────────────────\n private readonly _runningCount = signal(0);\n readonly isAnimating = computed(() => this._runningCount() > 0);\n\n // ─── Cleanup por elemento (WeakMap preserva GC) ───────────────────────────\n private readonly _cleanups = new WeakMap<HTMLElement, CleanupFn>();\n\n // ─── Pool de IntersectionObservers compartidos ────────────────────────────\n private readonly _observerPools = new Map<number, ObserverPool>();\n\n constructor() {\n this.platformId = inject(PLATFORM_ID);\n this.defaults = inject(CLX_ANIMATE_DEFAULTS);\n this.isBrowser = isPlatformBrowser(this.platformId);\n if (this.isBrowser) this._warmup();\n }\n\n // ─── Warmup ───────────────────────────────────────────────────────────────\n /**\n * Fuerza al browser a parsear los keyframes antes de la primera interacción\n * para evitar el jank del primer frame. Se ejecuta en idle para no bloquear\n * el critical rendering path.\n */\n private _warmup(): void {\n const run = () => {\n const el = document.createElement('div');\n el.style.cssText = 'position:fixed;top:-9999px;pointer-events:none;opacity:0;';\n el.classList.add(`${PREFIX}animated`, `${PREFIX}bounce`);\n document.body.appendChild(el);\n requestAnimationFrame(() =>\n requestAnimationFrame(() => document.body.removeChild(el)),\n );\n };\n\n if ('requestIdleCallback' in window) {\n (window as Window & { requestIdleCallback: (cb: () => void, opts?: object) => void })\n .requestIdleCallback(run, { timeout: 1000 });\n } else {\n setTimeout(run, 200);\n }\n }\n\n // ─── API pública ──────────────────────────────────────────────────────────\n\n /**\n * Anima cualquier HTMLElement de forma imperativa.\n * Retorna una Promise que resuelve cuando la animación termina.\n */\n animate(\n element: HTMLElement,\n animationOrConfig: ClxAnimateName | ClxAnimateConfig,\n overrides: Partial<ClxAnimateConfig> = {},\n ): Promise<void> {\n if (!this.isBrowser) return Promise.resolve();\n return this.runAnimation(element, this.buildConfig(animationOrConfig, overrides));\n }\n\n /** Cancela la animación en curso en el elemento y restaura su estado. */\n stop(element: HTMLElement): void {\n this._cleanups.get(element)?.();\n }\n\n /**\n * Registra un elemento en el pool de IntersectionObservers.\n * Reutiliza el observer existente para el threshold dado o crea uno nuevo.\n * Retorna una función para desregistrar el elemento.\n */\n observe(\n element: HTMLElement,\n threshold: number,\n cb: (isIntersecting: boolean) => void,\n ): () => void {\n if (!this.isBrowser) return () => {};\n\n let pool = this._observerPools.get(threshold);\n if (!pool) {\n const registry = new Map<HTMLElement, (isIntersecting: boolean) => void>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n registry.get(entry.target as HTMLElement)?.(entry.isIntersecting);\n }\n },\n { threshold },\n );\n pool = { observer, registry };\n this._observerPools.set(threshold, pool);\n }\n\n pool.registry.set(element, cb);\n pool.observer.observe(element);\n\n return () => {\n const p = this._observerPools.get(threshold);\n if (!p) return;\n p.observer.unobserve(element);\n p.registry.delete(element);\n if (p.registry.size === 0) {\n p.observer.disconnect();\n this._observerPools.delete(threshold);\n }\n };\n }\n\n // ─── Interno (usado por ClxAnimateDirective) ──────────────────────────────\n\n runAnimation(element: HTMLElement, config: ClxAnimateConfig): Promise<void> {\n this.stop(element);\n\n // Fuerza reflow para que el browser registre la eliminación de clases\n // antes de volver a agregarlas — necesario para reiniciar la animación.\n void element.offsetHeight;\n\n const animClass = `${PREFIX}${config.animation}`;\n const isInfinite = config.repeat === 'infinite';\n\n element.style.setProperty('--clx-anim-duration', `${config.duration}ms`);\n element.style.setProperty('--clx-anim-delay', `${config.delay}ms`);\n element.style.setProperty('--clx-anim-repeat', isInfinite ? 'infinite' : String(config.repeat ?? 1));\n element.style.setProperty('--clx-anim-easing', config.easing ?? 'ease');\n if (config.fillMode) {\n element.style.setProperty('animation-fill-mode', config.fillMode);\n }\n\n element.classList.add(`${PREFIX}animated`, animClass);\n if (isInfinite) element.classList.add(`${PREFIX}infinite`);\n\n this._runningCount.update(c => c + 1);\n\n if (isInfinite) {\n this._cleanups.set(element, () => {\n this._cleanup(element, animClass);\n this._runningCount.update(c => Math.max(0, c - 1));\n });\n return Promise.resolve();\n }\n\n return new Promise<void>(resolve => {\n const handleEnd = (ev: Event) => {\n ev.stopPropagation();\n this._cleanup(element, animClass);\n this._runningCount.update(c => Math.max(0, c - 1));\n resolve();\n };\n\n element.addEventListener('animationend', handleEnd, { once: true });\n\n this._cleanups.set(element, () => {\n element.removeEventListener('animationend', handleEnd);\n this._cleanup(element, animClass);\n this._runningCount.update(c => Math.max(0, c - 1));\n resolve();\n });\n });\n }\n\n buildConfig(\n animationOrConfig: ClxAnimateName | ClxAnimateConfig,\n overrides: Partial<ClxAnimateConfig> = {},\n ): ClxAnimateConfig {\n const base: ClxAnimateConfig =\n typeof animationOrConfig === 'string'\n ? { animation: animationOrConfig }\n : animationOrConfig;\n\n return {\n duration: this.defaults.duration,\n delay: this.defaults.delay,\n repeat: this.defaults.repeat,\n easing: this.defaults.easing,\n fillMode: this.defaults.fillMode,\n once: this.defaults.once,\n threshold: this.defaults.threshold,\n trigger: 'manual',\n ...base,\n ...overrides,\n };\n }\n\n // ─── Privado ──────────────────────────────────────────────────────────────\n\n private _cleanup(element: HTMLElement, animClass: string): void {\n element.classList.remove(`${PREFIX}animated`, animClass, `${PREFIX}infinite`);\n element.style.removeProperty('--clx-anim-duration');\n element.style.removeProperty('--clx-anim-delay');\n element.style.removeProperty('--clx-anim-repeat');\n element.style.removeProperty('--clx-anim-easing');\n element.style.removeProperty('animation-fill-mode');\n this._cleanups.delete(element);\n }\n}\n","import type { ClxTooltipSize } from '../types/clx-tooltip.types';\n\nexport const TOOLTIP_SIZE_MAP: Record<ClxTooltipSize, string> = {\n sm: 'text-xs px-2 py-1',\n md: 'text-sm px-3 py-1.5 max-w-[220px]',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport { TOOLTIP_SIZE_MAP } from '../../../configs/tooltip.config';\nimport type { ClxTooltipPosition, ClxTooltipSize } from '../../../types/clx-tooltip.types';\n\n@Component({\n selector: 'clx-tooltip',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'tooltip',\n '[class]': '_hostClass()',\n },\n template: `<span class=\"whitespace-pre-wrap leading-snug\">{{ text() }}</span>`,\n styles: [`\n clx-tooltip {\n position: absolute;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n will-change: opacity, transform;\n }\n `],\n})\nexport class ClxTooltipComponent {\n readonly text = input.required<string>();\n readonly position = input<ClxTooltipPosition>('top');\n readonly color = input<ClxColorInput>('slate');\n readonly size = input<ClxTooltipSize>('md');\n\n protected readonly _hostClass = computed(() => {\n const t = resolveColor(this.color());\n return `${t.text} rounded-lg shadow-xl ${t.bg} ${TOOLTIP_SIZE_MAP[this.size()]}`;\n });\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n DestroyRef,\n Directive,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n PLATFORM_ID,\n Renderer2,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { ClxAnimateService } from '../services/clx-animate.service';\nimport { ClxTooltipComponent } from '../components/base/clx-tooltip/clx-tooltip.component';\nimport type { ClxTooltipPosition, ClxTooltipSize } from '../types/clx-tooltip.types';\nimport type { ClxColorInput } from '../types/clx-color.types';\n\n// ── Gap between trigger and bubble (px) ───────────────────────────────────\nconst GAP = 8;\n\n@Directive({\n selector: '[clxTooltip]',\n standalone: true,\n})\nexport class ClxTooltipDirective {\n\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly clxTooltip = input.required<string>();\n readonly clxTooltipPosition = input<ClxTooltipPosition>('top');\n readonly clxTooltipColor = input<ClxColorInput>('slate');\n readonly clxTooltipSize = input<ClxTooltipSize>('md');\n readonly clxTooltipDelay = input<number>(0);\n\n // ── DI ───────────────────────────────────────────────────────────────────\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _renderer = inject(Renderer2);\n private readonly _appRef = inject(ApplicationRef);\n private readonly _injector = inject(EnvironmentInjector);\n private readonly _animate = inject(ClxAnimateService);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _destroyRef = inject(DestroyRef);\n\n // ── State ────────────────────────────────────────────────────────────────\n private _ref: ComponentRef<ClxTooltipComponent> | null = null;\n private _pendingRef: ComponentRef<ClxTooltipComponent> | null = null;\n private _showTimer: ReturnType<typeof setTimeout> | null = null;\n private _hideTimer: ReturnType<typeof setTimeout> | null = null;\n private _tooltipId = `clx-tooltip-${Math.random().toString(36).slice(2, 8)}`;\n private _abort = new AbortController();\n private _destroyed = false;\n\n constructor() {\n if (!isPlatformBrowser(this._platformId)) return;\n\n const host = this._el.nativeElement;\n const { signal } = this._abort;\n\n host.addEventListener('mouseenter', () => this._scheduleShow(), { signal });\n host.addEventListener('mouseleave', () => this._scheduleHide(), { signal });\n host.addEventListener('focus', () => this._scheduleShow(), { signal });\n host.addEventListener('blur', () => this._scheduleHide(), { signal });\n\n this._destroyRef.onDestroy(() => {\n this._destroyed = true;\n this._abort.abort();\n this._clearTimers();\n this._forceDestroyBubble();\n });\n }\n\n // ── Show / Hide ──────────────────────────────────────────────────────────\n\n private _scheduleShow(): void {\n this._clearHide();\n const delay = this.clxTooltipDelay();\n if (delay > 0) {\n this._showTimer = setTimeout(() => this._show(), delay);\n } else {\n this._show();\n }\n }\n\n private _scheduleHide(): void {\n this._clearShow();\n this._hideTimer = setTimeout(() => this._hide(), 80);\n }\n\n private _show(): void {\n if (this._ref) return;\n if (!this.clxTooltip()) return;\n\n // Create component\n const ref = createComponent(ClxTooltipComponent, {\n environmentInjector: this._injector,\n });\n\n ref.setInput('text', this.clxTooltip());\n ref.setInput('color', this.clxTooltipColor());\n ref.setInput('size', this.clxTooltipSize());\n\n // We'll set position after measurement\n ref.setInput('position', this.clxTooltipPosition());\n\n this._appRef.attachView(ref.hostView);\n\n const el = ref.location.nativeElement as HTMLElement;\n el.style.position = 'fixed';\n el.style.visibility = 'hidden';\n el.style.zIndex = '9999';\n el.id = this._tooltipId;\n\n this._renderer.appendChild(document.body, el);\n ref.changeDetectorRef.detectChanges();\n\n // Resolve final position (with viewport flip)\n const finalPos = this._resolvePosition(el);\n ref.setInput('position', finalPos);\n ref.changeDetectorRef.detectChanges();\n\n // Place at resolved coordinates\n this._placeAt(el, finalPos);\n el.style.visibility = '';\n\n this._ref = ref;\n\n // Aria\n this._el.nativeElement.setAttribute('aria-describedby', this._tooltipId);\n\n // Animate in\n this._animate.animate(el, {\n animation: 'fadeIn',\n duration: 160,\n trigger: 'manual',\n fillMode: 'both',\n });\n }\n\n private _hide(): void {\n const ref = this._ref;\n if (!ref) return;\n\n this._ref = null;\n this._pendingRef = ref;\n this._el.nativeElement.removeAttribute('aria-describedby');\n\n const el = ref.location.nativeElement as HTMLElement;\n\n this._animate.animate(el, {\n animation: 'fadeOut',\n duration: 120,\n trigger: 'manual',\n fillMode: 'forwards',\n }).then(() => {\n this._pendingRef = null;\n this._appRef.detachView(ref.hostView);\n ref.destroy();\n });\n }\n\n // ── Positioning ──────────────────────────────────────────────────────────\n\n private _resolvePosition(el: HTMLElement): ClxTooltipPosition {\n const requested = this.clxTooltipPosition();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const trigger = this._el.nativeElement.getBoundingClientRect();\n const bubble = el.getBoundingClientRect();\n\n const fits: Record<ClxTooltipPosition, boolean> = {\n top: trigger.top - bubble.height - GAP >= 0,\n bottom: trigger.bottom + bubble.height + GAP <= vh,\n left: trigger.left - bubble.width - GAP >= 0,\n right: trigger.right + bubble.width + GAP <= vw,\n };\n\n if (fits[requested]) return requested;\n\n // Flip axis\n const opposite: Record<ClxTooltipPosition, ClxTooltipPosition> = {\n top: 'bottom', bottom: 'top', left: 'right', right: 'left',\n };\n const opp = opposite[requested];\n if (fits[opp]) return opp;\n\n // Fallback: any position that fits\n for (const pos of (['top', 'bottom', 'left', 'right'] as ClxTooltipPosition[])) {\n if (fits[pos]) return pos;\n }\n\n return requested; // last resort\n }\n\n private _placeAt(el: HTMLElement, pos: ClxTooltipPosition): void {\n const trigger = this._el.nativeElement.getBoundingClientRect();\n const bubble = el.getBoundingClientRect();\n let top = 0;\n let left = 0;\n\n switch (pos) {\n case 'top':\n top = trigger.top - bubble.height - GAP;\n left = trigger.left + trigger.width / 2 - bubble.width / 2;\n break;\n case 'bottom':\n top = trigger.bottom + GAP;\n left = trigger.left + trigger.width / 2 - bubble.width / 2;\n break;\n case 'left':\n top = trigger.top + trigger.height / 2 - bubble.height / 2;\n left = trigger.left - bubble.width - GAP;\n break;\n case 'right':\n top = trigger.top + trigger.height / 2 - bubble.height / 2;\n left = trigger.right + GAP;\n break;\n }\n\n // Clamp to viewport edges with 4px margin\n const margin = 4;\n left = Math.max(margin, Math.min(left, window.innerWidth - bubble.width - margin));\n top = Math.max(margin, Math.min(top, window.innerHeight - bubble.height - margin));\n\n el.style.top = `${top}px`;\n el.style.left = `${left}px`;\n }\n\n // ── Helpers ──────────────────────────────────────────────────────────────\n\n private _destroyBubble(): void {\n if (!this._ref) return;\n this._appRef.detachView(this._ref.hostView);\n this._ref.destroy();\n this._ref = null;\n this._el.nativeElement.removeAttribute('aria-describedby');\n }\n\n private _forceDestroyBubble(): void {\n if (this._ref) {\n const el = this._ref.location.nativeElement as HTMLElement;\n this._animate.stop(el);\n this._destroyBubble();\n }\n if (this._pendingRef) {\n const el = this._pendingRef.location.nativeElement as HTMLElement;\n this._animate.stop(el);\n this._appRef.detachView(this._pendingRef.hostView);\n this._pendingRef.destroy();\n this._pendingRef = null;\n }\n }\n\n private _clearShow(): void {\n if (this._showTimer !== null) { clearTimeout(this._showTimer); this._showTimer = null; }\n }\n\n private _clearHide(): void {\n if (this._hideTimer !== null) { clearTimeout(this._hideTimer); this._hideTimer = null; }\n }\n\n private _clearTimers(): void {\n this._clearShow();\n this._clearHide();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxProduct, ClxProductLayout, ClxProductSize } from '../../../types/clx-product.types';\nimport {\n type ClxProductTag,\n PRODUCT_TAG_COLOR,\n PRODUCT_TAG_LABEL,\n PRODUCT_TAG_VARIANT,\n} from '../../../configs/product.config';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxButtonComponent } from '../../../components/base/clx-button/clx-button.component';\nimport { ClxSkeletonComponent } from '../../../components/base/clx-skeleton/clx-skeleton.component';\nimport { ClxTooltipDirective } from '../../../directives/clx-tooltip.directive';\n\n@Component({\n selector: 'clx-product',\n standalone: true,\n imports: [CurrencyPipe, ClxBadgeComponent, ClxButtonComponent, ClxSkeletonComponent, ClxTooltipDirective],\n template: `\n @if (loading()) {\n @if (_h()) {\n <!-- Skeleton Horizontal -->\n <div class=\"bg-white rounded-2xl overflow-hidden flex flex-col sm:flex-row items-stretch\">\n <div [class]=\"'shrink-0 aspect-square sm:aspect-auto bg-slate-200 animate-pulse ' + (_skeletonW())\"></div>\n <div class=\"p-4 flex flex-col gap-3 flex-1\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"60%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"85%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"40%\" />\n <div class=\"flex gap-2 mt-auto\">\n <clx-skeleton variant=\"rectangular\" height=\"36px\" width=\"100%\" />\n </div>\n </div>\n </div>\n } @else {\n <!-- Skeleton Vertical -->\n <div class=\"bg-white rounded-2xl overflow-hidden flex flex-col\">\n <clx-skeleton variant=\"rectangular\" [height]=\"_skeletonH()\" width=\"100%\" />\n <div class=\"p-4 flex flex-col gap-3\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"70%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"90%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"50%\" />\n <div class=\"flex gap-2 mt-1\">\n <clx-skeleton variant=\"rectangular\" height=\"36px\" width=\"100%\" />\n </div>\n </div>\n </div>\n }\n } @else {\n <!-- Card -->\n <article [class]=\"_cardClass()\">\n\n <!-- Image Container -->\n <div [class]=\"_imageContainerClass()\">\n @if (product()?.main_image) {\n <img\n [src]=\"product()!.main_image\"\n [alt]=\"product()!.name\"\n class=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\"\n [loading]=\"priority() ? 'eager' : 'lazy'\"\n />\n } @else {\n <div class=\"w-full h-full flex items-center justify-center bg-slate-100\">\n <span class=\"material-symbols-outlined text-slate-300\" style=\"font-size:48px\">image</span>\n </div>\n }\n\n <!-- Status Badges -->\n @if (_tags().length) {\n <div class=\"absolute top-3 left-3 flex flex-col gap-1\">\n @for (s of _tags(); track s) {\n <span\n clx-badge\n [variant]=\"PRODUCT_TAG_VARIANT[s]\"\n [color]=\"PRODUCT_TAG_COLOR[s]\"\n size=\"sm\"\n shape=\"pill\"\n >{{ PRODUCT_TAG_LABEL[s] }}</span>\n }\n </div>\n }\n\n <!-- Wishlist button -->\n <div class=\"absolute bottom-3 right-3\">\n <button\n clx-button\n [color]=\"clxColor()\"\n variant=\"solid\"\n [size]=\"_buttonSize()\"\n icon=\"favorite\"\n [iconOnly]=\"true\"\n shape=\"rounded\"\n clxTooltip=\"Añadir a favoritos\"\n clxTooltipPosition=\"left\"\n [clxTooltipColor]=\"clxColor()\"\n (click)=\"addToWishlist.emit(product()!)\"\n ></button>\n </div>\n\n <!-- Out-of-stock overlay -->\n @if (_disabled()) {\n <div [class]=\"_overlayClass()\"></div>\n }\n </div>\n\n <!-- Content -->\n <div [class]=\"_contentClass()\">\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-xs text-slate-400 truncate\">{{ product()?.trademark }}</p>\n <h3 [class]=\"_titleClass()\">{{ product()?.name }}</h3>\n @if (product()?.description) {\n <p [class]=\"_descClass()\">{{ product()?.description }}</p>\n }\n\n <!-- Price -->\n <div class=\"flex items-baseline gap-2 mt-2\">\n <span [class]=\"_priceClass()\">{{ _price() | currency:'COP':'symbol':'1.0-0' }}</span>\n @if (product()?.has_discount && product()?.discount_price) {\n <span class=\"text-sm text-slate-400 line-through\">\n {{ product()?.discount_price | currency:'COP':'symbol':'1.0-0' }}\n </span>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div [class]=\"_actionsClass()\">\n <button\n clx-button\n [color]=\"clxColor()\"\n variant=\"solid\"\n [size]=\"_buttonSize()\"\n icon=\"shopping_cart\"\n iconPosition=\"left\"\n [disabled]=\"_disabled()\"\n [block]=\"true\"\n (click)=\"addToCart.emit(product()!)\"\n >\n Añadir al carrito\n </button>\n </div>\n </div>\n </article>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxProductComponent {\n readonly product = input<ClxProduct | null>(null);\n readonly loading = input<boolean>(false);\n readonly priority = input<boolean>(false);\n readonly layout = input<ClxProductLayout>('vertical');\n readonly size = input<ClxProductSize>('md');\n readonly clxColor = input<ClxColorInput>('indigo');\n\n readonly addToCart = output<ClxProduct>();\n readonly addToWishlist = output<ClxProduct>();\n\n protected readonly PRODUCT_TAG_LABEL = PRODUCT_TAG_LABEL;\n protected readonly PRODUCT_TAG_COLOR = PRODUCT_TAG_COLOR;\n protected readonly PRODUCT_TAG_VARIANT = PRODUCT_TAG_VARIANT;\n\n protected readonly _h = computed(() => this.layout() === 'horizontal');\n protected readonly _sm = computed(() => this.size() === 'sm');\n protected readonly _tags = computed<ClxProductTag[]>(() => (this.product()?.tags ?? []) as ClxProductTag[]);\n protected readonly _disabled = computed(() => !this.product()?.in_stock);\n protected readonly _price = computed(() => this.product()?.sale_price ?? this.product()?.product_sale_price ?? 0);\n protected readonly _buttonSize = computed(() => this._sm() ? 'sm' as const : 'md' as const);\n protected readonly _skeletonW = computed(() => this._sm() ? 'sm:w-32' : 'sm:w-44');\n protected readonly _skeletonH = computed(() => this._sm() ? '160px' : '200px');\n\n protected readonly _cardClass = computed(() =>\n `bg-white rounded-2xl shadow-sm transition-all duration-300 overflow-hidden group hover:shadow-xl hover:-translate-y-0.5 ${this._h() ? 'flex flex-col sm:flex-row' : 'flex flex-col'}`\n );\n\n protected readonly _imageContainerClass = computed(() =>\n this._h()\n ? `relative shrink-0 w-full aspect-square sm:aspect-auto ${this._sm() ? 'sm:w-32' : 'sm:w-44'} overflow-hidden rounded-t-2xl sm:rounded-t-none sm:rounded-l-2xl`\n : 'relative w-full aspect-square overflow-hidden rounded-t-2xl'\n );\n\n protected readonly _contentClass = computed(() => 'flex flex-col gap-2 flex-1 p-3');\n\n protected readonly _actionsClass = computed(() =>\n this._h()\n ? 'flex flex-col sm:flex-row items-stretch sm:items-center gap-2 mt-3'\n : 'flex items-center gap-2 mt-3'\n );\n\n protected readonly _overlayClass = computed(() =>\n `absolute inset-0 bg-white/50 ${this._h() ? 'rounded-t-2xl sm:rounded-t-none sm:rounded-l-2xl' : 'rounded-t-2xl'}`\n );\n\n protected readonly _titleClass = computed(() => {\n const sz = this._sm() ? 'text-sm' : 'text-base';\n const color = this._disabled() ? 'text-slate-400' : 'text-slate-900';\n return `font-semibold truncate ${sz} ${color}`;\n });\n\n protected readonly _descClass = computed(() => {\n const sz = this._sm() ? 'text-xs line-clamp-1' : 'text-sm line-clamp-2';\n const color = this._disabled() ? 'text-slate-300' : 'text-slate-500';\n return `${sz} ${color} mt-0.5`;\n });\n\n protected readonly _priceClass = computed(() => {\n const sz = this._sm() ? 'text-base' : 'text-lg';\n const color = this._disabled() ? 'text-slate-400' : 'text-slate-900';\n return `${sz} font-bold ${color}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxButtonGroupShape } from '../../../types/clx-button-group.types';\n\n@Component({\n selector: 'clx-button-group',\n standalone: true,\n template: `\n @if (label()) {\n <span class=\"text-sm font-medium text-slate-700 leading-none\">{{ label() }}</span>\n }\n <div [class]=\"_groupClass()\">\n <ng-content />\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col gap-1.5',\n },\n})\nexport class ClxButtonGroupComponent {\n readonly label = input<string>('');\n readonly shape = input<ClxButtonGroupShape>('flat');\n readonly attached = input<boolean>(false);\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n protected readonly _groupClass = computed(() => {\n const isVertical = this.orientation() === 'vertical';\n const dir = isVertical ? 'flex-col' : 'flex-row';\n const gap = this.attached() ? 'gap-0' : 'gap-2';\n return `inline-flex items-center ${dir} ${gap}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\nimport { parseColorInput, CLX_COLOR_HEX, type ClxColorInput } from '../../../types/clx-color.types';\n\n@Component({\n selector: 'clx-rating',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n @for (star of _stars(); track star.idx) {\n <span clx-icon [name]=\"star.icon\" size=\"sm\" [fill]=\"star.fill\" [style.color]=\"_hexColor()\"></span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'inline-flex items-center gap-0.5',\n '[attr.aria-label]': '\"Rating: \" + value() + \" out of \" + max()',\n },\n})\nexport class ClxRatingComponent {\n readonly value = input<number>(0);\n readonly max = input<number>(5);\n readonly color = input<ClxColorInput>('amber');\n\n protected readonly _hexColor = computed(() => {\n const { color } = parseColorInput(this.color());\n return (CLX_COLOR_HEX as Record<string, string>)[color] ?? '#f59e0b';\n });\n\n protected readonly _stars = computed(() => {\n const val = this.value();\n const total = this.max();\n return Array.from({ length: total }, (_, i) => {\n const diff = val - i;\n const icon = diff >= 1 ? 'star' : diff >= 0.5 ? 'star_half' : 'star_border';\n const fill = diff >= 0.5;\n return { idx: i, icon, fill };\n });\n });\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[clxSlide]',\n standalone: true,\n})\nexport class ClxCarouselDirective {\n constructor(public readonly templateRef: TemplateRef<unknown>) {}\n}\n","export const CAROUSEL_ASPECT_RATIO_MAP: Record<string, string> = {\n '16/9': 'aspect-video',\n '4/3': 'aspect-[4/3]',\n '1/1': 'aspect-square',\n '3/2': 'aspect-[3/2]',\n 'auto': '',\n};\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxCarouselDirective } from '../../../directives/clx-carousel.directive';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxCarouselAspectRatio } from '../../../types/clx-carousel.types';\nimport { CAROUSEL_ASPECT_RATIO_MAP } from '../../../configs/carousel.config';\n\n@Component({\n selector: 'clx-carousel',\n standalone: true,\n imports: [NgTemplateOutlet, ClxButtonComponent, ClxIconComponent],\n template: `\n <!-- Viewport -->\n <div class=\"relative w-full overflow-hidden rounded-2xl\"\n [class]=\"_viewportClass()\"\n (touchstart)=\"_onTouchStart($event)\"\n (touchend)=\"_onTouchEnd($event)\">\n\n <!-- Track -->\n <div class=\"flex h-full transition-transform duration-500 ease-in-out will-change-transform\"\n [style.transform]=\"'translateX(-' + currentPageIndex() * 100 + '%)'\">\n @for (slide of _slides(); track slide) {\n <div class=\"flex-none w-full h-full\">\n <ng-container [ngTemplateOutlet]=\"slide.templateRef\" />\n </div>\n }\n </div>\n\n <!-- Arrow: Previous -->\n @if (_slides().length > 1) {\n <div class=\"absolute left-3 top-1/2 -translate-y-1/2 z-10\">\n <button clx-button\n variant=\"solid\"\n color=\"white\"\n shape=\"circle\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"!loop() && currentPageIndex() === 0\"\n (click)=\"prev()\">\n <span clx-icon name=\"chevron_left\" size=\"sm\"></span>\n </button>\n </div>\n\n <!-- Arrow: Next -->\n <div class=\"absolute right-3 top-1/2 -translate-y-1/2 z-10\">\n <button clx-button\n variant=\"solid\"\n color=\"white\"\n shape=\"circle\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"!loop() && currentPageIndex() === _slides().length - 1\"\n (click)=\"next()\">\n <span clx-icon name=\"chevron_right\" size=\"sm\"></span>\n </button>\n </div>\n }\n\n <!-- Dots -->\n @if (_slides().length > 1) {\n <div class=\"absolute bottom-3 left-1/2 -translate-x-1/2 z-10 flex items-center gap-1.5\">\n @for (dot of _dotItems(); track dot.idx) {\n <button\n type=\"button\"\n class=\"rounded-full transition-all duration-300 focus:outline-none cursor-pointer\"\n [class]=\"dot.cls\"\n (click)=\"goTo(dot.idx)\"\n [attr.aria-label]=\"'Slide ' + (dot.idx + 1)\">\n </button>\n }\n </div>\n }\n </div>\n `,\n styles: [`\n clx-carousel { display: block; width: 100%; }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxCarouselComponent implements AfterContentInit, OnDestroy {\n readonly clxColor = input<ClxColorInput>('indigo');\n readonly autoPlay = input<boolean>(false);\n readonly interval = input<number>(3000);\n readonly loop = input<boolean>(true);\n readonly aspectRatio = input<ClxCarouselAspectRatio>('16/9');\n readonly transparent = input<boolean>(false);\n\n readonly currentPageIndex = signal(0);\n\n protected readonly _slides = contentChildren(ClxCarouselDirective);\n\n private _autoPlayTimer: ReturnType<typeof setInterval> | null = null;\n private _touchStartX = 0;\n\n private readonly _zone: NgZone;\n\n protected readonly _aspectClass = computed(() =>\n CAROUSEL_ASPECT_RATIO_MAP[this.aspectRatio()] ?? ''\n );\n\n protected readonly _viewportClass = computed(() => {\n const base = this._aspectClass();\n return this.transparent()\n ? base\n : `${base} border border-slate-100 bg-slate-50`;\n });\n\n protected readonly _dotItems = computed(() => {\n const active = this.currentPageIndex();\n const activeColor = resolveColor(this.clxColor()).bg;\n return this._slides().map((_, idx) => ({\n idx,\n cls: idx === active ? `w-5 h-2 ${activeColor}` : 'w-2 h-2 bg-white',\n }));\n });\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n effect(() => {\n const active = this.autoPlay();\n const ms = this.interval();\n this._clearTimer();\n if (active) this._startTimer(ms);\n });\n }\n\n ngAfterContentInit(): void {\n if (this.autoPlay()) this._startTimer(this.interval());\n }\n\n ngOnDestroy(): void {\n this._clearTimer();\n }\n\n next(): void {\n const total = this._slides().length;\n if (!total) return;\n const next = this.currentPageIndex() + 1;\n if (next >= total) {\n if (this.loop()) this.currentPageIndex.set(0);\n } else {\n this.currentPageIndex.set(next);\n }\n }\n\n prev(): void {\n const total = this._slides().length;\n if (!total) return;\n const prev = this.currentPageIndex() - 1;\n if (prev < 0) {\n if (this.loop()) this.currentPageIndex.set(total - 1);\n } else {\n this.currentPageIndex.set(prev);\n }\n }\n\n goTo(index: number): void {\n this.currentPageIndex.set(index);\n if (this.autoPlay()) {\n this._clearTimer();\n this._startTimer(this.interval());\n }\n }\n\n protected _onTouchStart(e: TouchEvent): void {\n this._touchStartX = e.changedTouches[0].clientX;\n }\n\n protected _onTouchEnd(e: TouchEvent): void {\n const delta = e.changedTouches[0].clientX - this._touchStartX;\n if (Math.abs(delta) < 40) return;\n if (delta < 0) this.next();\n else this.prev();\n }\n\n private _startTimer(ms: number): void {\n this._zone.runOutsideAngular(() => {\n this._autoPlayTimer = setInterval(() => {\n this._zone.run(() => this.next());\n }, ms);\n });\n }\n\n private _clearTimer(): void {\n if (this._autoPlayTimer !== null) {\n clearInterval(this._autoPlayTimer);\n this._autoPlayTimer = null;\n }\n }\n}\n","import { Directive, input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[clxTabPanel]',\n standalone: true,\n})\nexport class ClxTabDirective {\n readonly clxTabPanel = input.required<string>();\n constructor(public readonly templateRef: TemplateRef<unknown>) {}\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n input,\n model,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxTabDirective } from '../../../directives/clx-tab.directive';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxTabItem } from '../../../types/clx-tabs.types';\n\n@Component({\n selector: 'clx-tabs',\n standalone: true,\n imports: [NgTemplateOutlet, ClxIconComponent, ClxButtonComponent],\n template: `\n <!-- Tab bar -->\n <div class=\"flex flex-wrap items-end border-b border-slate-200 gap-3\" role=\"tablist\">\n @for (tab of tabs(); track tab.id) {\n <div class=\"flex relative\">\n <button clx-button\n role=\"tab\"\n variant=\"ghost\"\n [color]=\"activeTab() === tab.id ? clxColor() : 'slate'\"\n size=\"md\"\n shape=\"rounded\"\n [disabled]=\"tab.disabled ?? false\"\n [attr.aria-selected]=\"activeTab() === tab.id\"\n [attr.aria-controls]=\"'panel-' + tab.id\"\n [class]=\"activeTab() === tab.id ? 'font-semibold!' : ''\"\n (click)=\"!tab.disabled && activeTab.set(tab.id)\">\n @if (tab.icon) {\n <span clx-icon [name]=\"tab.icon\" size=\"xs\" class=\"shrink-0\"></span>\n }\n {{ tab.label }}\n </button>\n @if (activeTab() === tab.id) {\n <span class=\"absolute bottom-0 left-0 right-0 h-0.5 rounded-full {{ _underlineClass() }}\"></span>\n }\n </div>\n }\n </div>\n\n <!-- Panel -->\n <div class=\"pt-5\" role=\"tabpanel\" [id]=\"'panel-' + activeTab()\">\n @for (panel of _panels(); track panel.clxTabPanel()) {\n @if (panel.clxTabPanel() === activeTab()) {\n <ng-container [ngTemplateOutlet]=\"panel.templateRef\" />\n }\n }\n </div>\n `,\n styles: [`clx-tabs { display: block; }`],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxTabsComponent {\n readonly tabs = input.required<ClxTabItem[]>();\n readonly clxColor = input<ClxColorInput>('indigo');\n readonly activeTab = model<string>('');\n\n protected readonly _panels = contentChildren(ClxTabDirective);\n\n protected readonly _underlineClass = computed(() => resolveColor(this.clxColor()).bg);\n}\n","import type { ClxNumberSize } from '../types/clx-number.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\nexport const NUMBER_SIZE_MAP: Record<ClxNumberSize, {\n container: string;\n inputText: string;\n iconSize: Extract<ClxSize, 'xs' | 'sm' | 'md'>;\n btnSize: 'sm' | 'md';\n stepperCell: string;\n label: string;\n hint: string;\n}> = {\n sm: {\n container: 'h-8',\n inputText: 'text-sm',\n iconSize: 'xs',\n btnSize: 'sm',\n stepperCell: 'w-8 h-8',\n label: 'text-xs font-medium',\n hint: 'text-xs',\n },\n md: {\n container: 'h-10',\n inputText: 'text-sm',\n iconSize: 'sm',\n btnSize: 'sm',\n stepperCell: 'w-9 h-9',\n label: 'text-sm font-medium',\n hint: 'text-xs',\n },\n lg: {\n container: 'h-12',\n inputText: 'text-base',\n iconSize: 'md',\n btnSize: 'md',\n stepperCell: 'w-10 h-10',\n label: 'text-sm font-medium',\n hint: 'text-sm',\n },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxNumberVariant, ClxNumberSize } from '../../../types/clx-number.types';\nimport { NUMBER_SIZE_MAP } from '../../../configs/number.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\n@Component({\n selector: 'clx-number',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxNumberComponent),\n multi: true,\n },\n ],\n styles: [`\n .clx-number-native::-webkit-inner-spin-button,\n .clx-number-native::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }\n .clx-number-native { -moz-appearance: textfield; appearance: textfield; }\n `],\n template: `\n @if (label()) {\n @if (variant() === 'default') {\n <label [for]=\"_inputId\" [class]=\"_labelClass()\">{{ label() }}</label>\n } @else {\n <span [class]=\"_labelClass()\">{{ label() }}</span>\n }\n }\n\n <!-- ── DEFAULT variant ───────────────────────────────────────────────── -->\n @if (variant() === 'default') {\n <div [class]=\"_containerClass()\">\n\n <!-- Prefix icon — colored cell -->\n @if (prefixIcon()) {\n <div [class]=\"_prefixCellCls()\">\n <span clx-icon [name]=\"prefixIcon()!\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n }\n\n <!-- Native number input -->\n <input\n type=\"number\"\n [id]=\"_inputId\"\n [name]=\"_inputId\"\n [class]=\"_inputClass()\"\n [value]=\"_value()\"\n [min]=\"min() ?? ''\"\n [max]=\"max() ?? ''\"\n [step]=\"step()\"\n [disabled]=\"_disabled()\"\n [placeholder]=\"placeholder()\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur()\"\n />\n\n <!-- Divider -->\n <div class=\"w-px h-5 bg-gray-200 shrink-0 self-center mx-0.5\"></div>\n\n <!-- − + buttons -->\n <div class=\"flex items-center self-center pr-1 gap-0\">\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"remove\"\n [iconOnly]=\"true\"\n [disabled]=\"_disabled() || _isAtMin()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_decrement()\"></button>\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"add\"\n [iconOnly]=\"true\"\n [disabled]=\"_disabled() || _isAtMax()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_increment()\"></button>\n </div>\n </div>\n }\n\n <!-- ── STEPPER variant ───────────────────────────────────────────────── -->\n @else {\n <div [class]=\"_stepperWrapClass()\">\n\n <!-- Decrement -->\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"remove\"\n [iconOnly]=\"true\"\n [disabled]=\"_disabled() || _isAtMin()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_decrement()\"></button>\n\n <!-- Value cell -->\n <div [class]=\"_stepperValueCls()\">{{ _value() }}</div>\n\n <!-- Increment -->\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"add\"\n [iconOnly]=\"true\"\n [disabled]=\"_disabled() || _isAtMax()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_increment()\"></button>\n\n </div>\n }\n\n <!-- Hint -->\n @if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col gap-1.5',\n '[style.opacity]': '_disabled() ? \"0.6\" : null',\n },\n})\nexport class ClxNumberComponent implements ControlValueAccessor {\n private static _seq = 0;\n protected readonly _inputId = `clx-number-${++ClxNumberComponent._seq}`;\n\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly variant = input<ClxNumberVariant>('default');\n readonly size = input<ClxNumberSize>('md');\n readonly color = input<ClxColorInput>('indigo');\n readonly label = input<string>('');\n readonly placeholder = input<string>('0');\n readonly hint = input<string>('');\n readonly prefixIcon = input<string>('');\n readonly min = input<number | null>(null);\n readonly max = input<number | null>(null);\n readonly step = input<number>(1);\n /** Initial value for standalone use (without FormControl) */\n readonly value = input<number>(0);\n /** Disabled state for standalone use (without FormControl) */\n readonly disabled = input<boolean>(false);\n\n // ── Internal state ───────────────────────────────────────────────────────\n readonly _value = signal(0);\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._value.set(v));\n });\n\n private _onChange: (v: number) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Bounds ───────────────────────────────────────────────────────────────\n protected readonly _isAtMin = computed(() =>\n this.min() !== null && this._value() <= this.min()!,\n );\n protected readonly _isAtMax = computed(() =>\n this.max() !== null && this._value() >= this.max()!,\n );\n\n // ── Computed classes ─────────────────────────────────────────────────────\n protected readonly _sizeConfig = computed(() => NUMBER_SIZE_MAP[this.size()]);\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeConfig().hint} text-gray-400`,\n );\n\n protected readonly _containerClass = computed(() => {\n const size = this._sizeConfig();\n const focus = this._disabled() ? '' : resolveColor(this.color()).focusWithin;\n const border = this._disabled() ? 'border-gray-200 bg-gray-50' : 'border-gray-300';\n const cursor = this._disabled() ? 'cursor-not-allowed' : '';\n return `flex items-stretch ${size.container} bg-white rounded-md border ${border} ${focus} ${cursor} overflow-hidden transition-all duration-200`;\n });\n\n /** Colored prefix icon cell — matches the input accent color */\n protected readonly _prefixCellCls = computed(() => {\n const t = resolveColor(this.color());\n return `px-3 flex items-center shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n /** Full class for the native input — must include structural classes since [class] replaces static ones */\n protected readonly _inputClass = computed(() => {\n const size = this._sizeConfig();\n const text = this._disabled() ? 'text-gray-400' : 'text-slate-700';\n const cursor = this._disabled() ? 'cursor-not-allowed' : '';\n return `clx-number-native flex-1 h-full ${size.inputText} pl-3 outline-none bg-transparent min-w-0 placeholder:text-gray-400 ${text} ${cursor}`;\n });\n\n protected readonly _stepperWrapClass = computed(() => {\n const t = resolveColor(this.color());\n return `inline-flex items-center justify-center w-fit rounded-lg bg-white border ${t.borderLight} px-1 gap-1`;\n });\n\n protected readonly _stepperValueCls = computed(() => {\n const size = this._sizeConfig();\n const t = resolveColor(this.color());\n return `${size.stepperCell} flex items-center justify-center text-sm font-semibold text-slate-700 bg-white select-none min-w-[2.5rem] border-x ${t.borderLight}`;\n });\n\n // ── CVA ──────────────────────────────────────────────────────────────────\n writeValue(val: number): void {\n this._cvaConnected = true;\n this._value.set(val ?? 0);\n }\n\n registerOnChange(fn: (v: number) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n // ── Handlers ─────────────────────────────────────────────────────────────\n protected _handleInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n const num = raw === '' ? 0 : parseFloat(raw);\n if (!isNaN(num)) {\n this._value.set(num);\n this._onChange(num);\n }\n }\n\n protected _handleBlur(): void {\n // Clamp to min/max on blur\n let v = this._value();\n if (this.min() !== null) v = Math.max(v, this.min()!);\n if (this.max() !== null) v = Math.min(v, this.max()!);\n this._value.set(v);\n this._onChange(v);\n this._onTouched();\n }\n\n protected _decrement(): void {\n const next = this._value() - this.step();\n const clamped = this.min() !== null ? Math.max(next, this.min()!) : next;\n this._applyValue(clamped);\n }\n\n protected _increment(): void {\n const next = this._value() + this.step();\n const clamped = this.max() !== null ? Math.min(next, this.max()!) : next;\n this._applyValue(clamped);\n }\n\n private _applyValue(v: number): void {\n this._value.set(v);\n this._onChange(v);\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\nimport type { ClxColorInput } from '../types/clx-color.types';\nimport type { ClxListVariant, ClxListSize } from '../types/clx-list.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\n// ── Context ───────────────────────────────────────────────────────────────────\n\nexport interface ClxListContext {\n color: Signal<ClxColorInput>;\n variant: Signal<ClxListVariant>;\n size: Signal<ClxListSize>;\n numbered: Signal<boolean>;\n sizeTokens: Signal<(typeof LIST_SIZE_MAP)[ClxListSize]>;\n dividerClass: Signal<string>;\n registerItem: () => number;\n}\n\nexport const CLX_LIST_CONTEXT = new InjectionToken<ClxListContext>('CLX_LIST_CONTEXT');\n\n// ── Variant maps ──────────────────────────────────────────────────────────────\n\nexport const LIST_VARIANT_SHAPE: Record<ClxListVariant, string> = {\n bordered: 'bg-white rounded-2xl border',\n flat: 'bg-transparent',\n flush: 'bg-transparent',\n};\n\nexport const LIST_VARIANT_HAS_BORDER: Record<ClxListVariant, boolean> = {\n bordered: true,\n flat: false,\n flush: false,\n};\n\nexport const LIST_ITEM_HAS_DIVIDER: Record<ClxListVariant, boolean> = {\n bordered: true,\n flat: true,\n flush: false,\n};\n\n// ── Size map ──────────────────────────────────────────────────────────────────\n\nexport const LIST_SIZE_MAP: Record<ClxListSize, {\n item: string;\n iconSize: ClxSize;\n label: string;\n sublabel: string;\n meta: string;\n number: string;\n}> = {\n sm: { item: 'px-3 py-2', iconSize: 'sm', label: 'text-sm', sublabel: 'text-xs', meta: 'text-xs', number: 'w-5 h-5 text-[10px]' },\n md: { item: 'px-4 py-3', iconSize: 'sm', label: 'text-sm', sublabel: 'text-xs', meta: 'text-xs', number: 'w-6 h-6 text-[11px]' },\n lg: { item: 'px-5 py-3.5', iconSize: 'md', label: 'text-base',sublabel: 'text-sm', meta: 'text-sm', number: 'w-7 h-7 text-[12px]' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxListSize, ClxListVariant } from '../../../types/clx-list.types';\nimport {\n CLX_LIST_CONTEXT,\n LIST_VARIANT_SHAPE,\n LIST_VARIANT_HAS_BORDER,\n LIST_ITEM_HAS_DIVIDER,\n LIST_SIZE_MAP,\n} from '../../../configs/list.config';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-list',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n @if (label()) {\n <div [class]=\"_headerClass()\">\n @if (headerIcon()) {\n <span clx-icon [name]=\"headerIcon()\" size=\"sm\"></span>\n }\n <span>{{ label() }}</span>\n </div>\n }\n <ng-content />\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n 'role': 'list',\n },\n providers: [\n { provide: CLX_LIST_CONTEXT, useExisting: forwardRef(() => ClxListComponent) },\n ],\n})\nexport class ClxListComponent {\n readonly color = input<ClxColorInput>('indigo');\n readonly variant = input<ClxListVariant>('flat');\n readonly size = input<ClxListSize>('md');\n readonly label = input<string>('');\n readonly headerIcon = input<string>('');\n readonly numbered = input<boolean>(false);\n _itemCounter = 0;\n\n readonly sizeTokens = computed(() => LIST_SIZE_MAP[this.size()]);\n\n readonly dividerClass = computed(() => {\n if (!LIST_ITEM_HAS_DIVIDER[this.variant()]) return '';\n return `border-b ${resolveColor(this.color()).borderLight} last:border-b-0`;\n });\n\n protected readonly _hostClass = computed(() => {\n const shape = LIST_VARIANT_SHAPE[this.variant()];\n const border = LIST_VARIANT_HAS_BORDER[this.variant()]\n ? resolveColor(this.color()).borderLight\n : '';\n return `flex flex-col overflow-hidden ${shape} ${border}`.trim();\n });\n\n protected readonly _headerClass = computed(() => {\n const t = resolveColor(this.color());\n return `flex items-center gap-2 px-4 py-3 border-b ${t.borderLight} text-sm font-semibold ${t.textSubtle}`;\n });\n\n registerItem(): number { return ++this._itemCounter; }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CLX_LIST_CONTEXT } from '../../../configs/list.config';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-list-item',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n @if (_ctx.numbered()) {\n <span [class]=\"_numberClass()\">{{ _index }}</span>\n } @else if (icon()) {\n <span clx-icon [name]=\"icon()\" [size]=\"_ctx.sizeTokens().iconSize\" [class]=\"_iconClass()\"></span>\n } @else {\n <ng-content select=\"[clxLead]\" />\n }\n\n <div class=\"flex-1 min-w-0\">\n @if (label()) {\n <p [class]=\"_labelClass()\">{{ label() }}</p>\n @if (sublabel()) {\n <p [class]=\"'text-slate-500 truncate mt-0.5 ' + _ctx.sizeTokens().sublabel\">{{ sublabel() }}</p>\n }\n } @else {\n <ng-content select=\"[clxContent]\" />\n }\n </div>\n\n @if (meta()) {\n <span [class]=\"_metaClass()\">{{ meta() }}</span>\n } @else {\n <ng-content select=\"[clxTrail]\" />\n }\n\n <ng-content />\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n '[attr.aria-disabled]': 'disabled() || null',\n 'role': 'listitem',\n },\n})\nexport class ClxListItemComponent {\n protected readonly _ctx = inject(CLX_LIST_CONTEXT);\n\n readonly label = input<string>('');\n readonly sublabel = input<string>('');\n readonly icon = input<string>('');\n readonly meta = input<string>('');\n readonly metaColor = input<ClxColorInput>('indigo');\n readonly disabled = input<boolean>(false);\n\n protected readonly _index = this._ctx.registerItem();\n\n protected readonly _iconClass = computed(() => resolveColor(this._ctx.color()).textSubtle);\n\n protected readonly _hostClass = computed(() => {\n const { item } = this._ctx.sizeTokens();\n const divider = this._ctx.dividerClass();\n const disabled = this.disabled() ? 'opacity-40 grayscale pointer-events-none select-none' : '';\n return `flex items-center gap-3 ${item} ${divider} ${disabled}`.trim();\n });\n\n protected readonly _numberClass = computed(() => {\n const t = resolveColor(this._ctx.color());\n const { number } = this._ctx.sizeTokens();\n return `rounded-full flex items-center justify-center font-bold leading-none shrink-0 ${t.bgSubtle} ${t.textSubtle} ${number}`;\n });\n\n protected readonly _labelClass = computed(() => {\n const { label } = this._ctx.sizeTokens();\n const weight = this.sublabel() ? 'font-semibold' : 'font-normal';\n return `${weight} text-slate-700 truncate ${label}`;\n });\n\n protected readonly _metaClass = computed(() => {\n const t = resolveColor(this.metaColor());\n const { meta } = this._ctx.sizeTokens();\n return `shrink-0 px-2 py-0.5 rounded-full font-medium ${t.bgSubtle} ${t.textSubtle} ${meta}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CurrencyPipe, DecimalPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ClxButtonComponent } from '../../../components/base/clx-button/clx-button.component';\nimport { ClxButtonGroupComponent } from '../../../components/base/clx-button-group/clx-button-group.component';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\nimport { ClxSkeletonComponent } from '../../../components/base/clx-skeleton/clx-skeleton.component';\nimport { ClxRatingComponent } from '../../../components/base/clx-rating/clx-rating.component';\nimport { ClxCarouselComponent } from '../../../components/advanced/clx-carousel/clx-carousel.component';\nimport { ClxCarouselDirective } from '../../../directives/clx-carousel.directive';\nimport { ClxTabsComponent } from '../../../components/advanced/clx-tabs/clx-tabs.component';\nimport { ClxTabDirective } from '../../../directives/clx-tab.directive';\nimport { ClxNumberComponent } from '../../../components/forms/clx-number/clx-number.component';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxTabItem } from '../../../types/clx-tabs.types';\nimport type { ClxProductDetailData, ClxSpecType, ClxVariation } from '../../../types/clx-product-detail.types';\nimport { ClxTooltipDirective } from '../../../directives/clx-tooltip.directive';\nimport { ClxListComponent } from '../../../components/base/clx-list/clx-list.component';\nimport { ClxListItemComponent } from '../../../components/base/clx-list/clx-list-item.component';\n\n@Component({\n selector: 'clx-product-detail',\n standalone: true,\n imports: [\n CurrencyPipe,\n DecimalPipe,\n FormsModule,\n ClxButtonComponent,\n ClxButtonGroupComponent,\n ClxBadgeComponent,\n ClxIconComponent,\n ClxSkeletonComponent,\n ClxRatingComponent,\n ClxCarouselComponent,\n ClxCarouselDirective,\n ClxTabsComponent,\n ClxTabDirective,\n ClxNumberComponent,\n ClxTooltipDirective,\n ClxListComponent,\n ClxListItemComponent,\n ],\n templateUrl: './clx-product-detail.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxProductDetailComponent {\n readonly product = input<ClxProductDetailData | null>(null);\n readonly clxColor = input<ClxColorInput>('indigo');\n readonly loading = input<boolean>(false);\n readonly currency = input<string>('COP');\n\n readonly _carousel = viewChild(ClxCarouselComponent);\n\n readonly quantity = signal(1);\n readonly activeTab = signal('general');\n // { [spec_type_id]: spec_option_id } — selección actual del usuario\n readonly selectedSpecs = signal<Record<string, string>>({});\n\n readonly tabItems: ClxTabItem[] = [\n { id: 'general', label: 'Características' },\n { id: 'specs', label: 'Especificaciones' },\n { id: 'description', label: 'Descripción' },\n ];\n\n // Cuando llega un nuevo producto, inicializa la selección con la primera variación\n constructor() {\n effect(() => {\n const p = this.product();\n if (!p?.variations?.length) return;\n this.selectedSpecs.set({ ...p.variations[0].specs });\n });\n }\n\n // Variación activa: la que coincide exactamente con la selección actual\n readonly activeVariation = computed<ClxVariation | null>(() => {\n const p = this.product();\n if (!p?.variations?.length) return null;\n const sel = this.selectedSpecs();\n return p.variations.find(v =>\n Object.entries(v.specs).every(([typeId, optId]) => sel[typeId] === optId)\n ) ?? p.variations[0];\n });\n\n readonly finalPrice = computed(() => {\n const v = this.activeVariation();\n const p = this.product();\n return v?.sale_price ?? p?.product_sale_price ?? 0;\n });\n\n readonly discount = computed(() => {\n const p = this.product();\n if (!p?.has_discount) return 0;\n if (p.discount_percentage) return Math.round(p.discount_percentage);\n const sale = this.activeVariation()?.sale_price ?? p.product_sale_price;\n if (p.discount_price && p.discount_price > sale) {\n return Math.round(((p.discount_price - sale) / p.discount_price) * 100);\n }\n return 0;\n });\n\n // Devuelve si una opción tiene al menos una variación disponible con esa spec\n isOptionAvailable(specTypeId: string, specOptionId: string): boolean {\n const variations = this.product()?.variations ?? [];\n const currentSel = this.selectedSpecs();\n return variations.some(v => {\n if (v.specs[specTypeId] !== specOptionId) return false;\n return Object.entries(currentSel).every(([tid, oid]) =>\n tid === specTypeId || v.specs[tid] === oid\n );\n });\n }\n\n selectSpec(specTypeId: string, specOptionId: string): void {\n this.selectedSpecs.update(s => ({ ...s, [specTypeId]: specOptionId }));\n this._carousel()?.goTo(0);\n }\n\n isSpecSelected(specTypeId: string, specOptionId: string): boolean {\n return this.selectedSpecs()[specTypeId] === specOptionId;\n }\n\n selectedOptionLabel(specType: ClxSpecType): string {\n const optId = this.selectedSpecs()[specType.id];\n return specType.options.find(o => o.id === optId)?.value ?? '';\n }\n\n asColor(value: string): ClxColorInput { return value as ClxColorInput; }\n\n specsLeft<T>(specs: T[]) { return specs.slice(0, Math.ceil(specs.length / 2)); }\n specsRight<T>(specs: T[]) { return specs.slice(Math.ceil(specs.length / 2)); }\n}\n","<!-- ══ SKELETON ════════════════════════════════════════════════════════════ -->\n@if (loading()) {\n <div class=\"grid grid-cols-1 xl:grid-cols-2 gap-8 p-6\">\n <div class=\"space-y-3\">\n <clx-skeleton variant=\"rectangular\" width=\"100%\" height=\"420px\" class=\"rounded-2xl\"></clx-skeleton>\n <div class=\"flex gap-2\">\n @for (t of [1,2,3,4]; track t) {\n <clx-skeleton variant=\"rectangular\" width=\"80px\" height=\"80px\" class=\"rounded-xl\"></clx-skeleton>\n }\n </div>\n </div>\n <div class=\"space-y-4 pt-2\">\n <clx-skeleton variant=\"text\" size=\"lg\" width=\"70%\"></clx-skeleton>\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"40%\"></clx-skeleton>\n <clx-skeleton variant=\"text\" size=\"xl\" width=\"50%\"></clx-skeleton>\n <clx-skeleton variant=\"rectangular\" width=\"100%\" height=\"100px\" class=\"rounded-xl\"></clx-skeleton>\n <clx-skeleton variant=\"rectangular\" width=\"100%\" height=\"52px\" class=\"rounded-xl\"></clx-skeleton>\n <clx-skeleton variant=\"rectangular\" width=\"100%\" height=\"52px\" class=\"rounded-xl\"></clx-skeleton>\n </div>\n </div>\n}\n\n<!-- ══ CONTENT ════════════════════════════════════════════════════════════ -->\n@if (!loading() && product(); as p) {\n @let v = activeVariation();\n <div class=\"space-y-8\">\n\n <div class=\"grid grid-cols-1 xl:grid-cols-2 gap-8 xl:items-start\">\n\n <!-- ── Column 1: Image Gallery ──────────────────────────────── -->\n <div class=\"space-y-3\">\n <div class=\"relative\">\n <clx-carousel [clxColor]=\"clxColor()\" aspectRatio=\"4/3\" [loop]=\"true\">\n @for (img of v?.images ?? []; track img) {\n <ng-template clxSlide>\n <img [src]=\"img\" [alt]=\"p.product_name\" class=\"w-full h-full object-cover\" loading=\"lazy\" />\n </ng-template>\n }\n </clx-carousel>\n <div class=\"absolute top-3 right-3 z-10\">\n <button clx-button variant=\"solid\" [color]=\"clxColor()\" shape=\"circle\" size=\"md\"\n [iconOnly]=\"true\" clxTooltip=\"Add to Wishlist\" [clxTooltipColor]=\"clxColor()\" clxTooltipPosition=\"left\">\n <span clx-icon name=\"favorite_border\" size=\"sm\"></span>\n </button>\n </div>\n </div>\n <div class=\"flex flex-wrap gap-2\">\n @for (img of v?.images ?? []; track img; let i = $index) {\n <img [src]=\"img\" [alt]=\"p.product_name\"\n class=\"w-20 h-20 rounded-xl object-cover border-[3px] cursor-pointer shrink-0 transition-all\"\n [class]=\"_carousel()?.currentPageIndex() === i\n ? 'border-' + clxColor() + '-500 opacity-100'\n : 'border-transparent opacity-60 hover:opacity-90'\"\n loading=\"lazy\"\n (click)=\"_carousel()?.goTo(i)\" />\n }\n </div>\n </div>\n\n <!-- ── Column 2: Purchase Info ───────────────────────────────── -->\n <div class=\"space-y-5\">\n\n <!-- Tags (st_products.tags) -->\n <div class=\"flex flex-wrap gap-2\">\n @for (tag of p.tags; track tag) {\n <span clx-badge variant=\"light\" [color]=\"clxColor()\" size=\"sm\" shape=\"pill\">{{ tag }}</span>\n }\n </div>\n\n <!-- Title -->\n <div>\n <p class=\"text-xs text-slate-400 uppercase tracking-wide font-medium\">{{ p.trademark }}</p>\n <h1 class=\"text-2xl font-bold text-slate-800 leading-tight mt-0.5\">{{ p.product_name }}</h1>\n @if (v?.description) {\n <p class=\"text-slate-500 text-sm mt-1\">{{ v!.description }}</p>\n }\n </div>\n\n <!-- Rating -->\n <div class=\"flex items-center gap-2\">\n <clx-rating [value]=\"p.rating\" [color]=\"clxColor()\"></clx-rating>\n <span class=\"text-sm font-semibold text-slate-700\">{{ p.rating | number:'1.1-1' }}</span>\n <span class=\"text-sm text-slate-400\">({{ p.review_count }} reviews)</span>\n </div>\n\n <!-- Price block -->\n <div class=\"py-4\">\n <div class=\"flex items-baseline gap-3\">\n <span class=\"text-4xl font-black text-slate-800\">\n {{ finalPrice() | currency:currency():'symbol':'1.0-0' }}\n </span>\n @if (p.has_discount && p.discount_price) {\n <span class=\"text-lg text-slate-400 line-through\">\n {{ p.discount_price | currency:currency():'symbol':'1.0-0' }}\n </span>\n <span clx-badge variant=\"solid\" [color]=\"clxColor()\" size=\"sm\" shape=\"pill\">\n -{{ discount() }}%\n </span>\n }\n </div>\n @if (v && !v.in_stock) {\n <p class=\"text-sm text-rose-500 font-medium mt-1\">Out of stock</p>\n }\n </div>\n\n <!-- Selectores de variación (st_spec_types + st_spec_options) -->\n @for (specType of p.spec_types; track specType.id) {\n @if (specType.input_type === 'color') {\n <clx-button-group [label]=\"specType.name\" shape=\"circular\" [attached]=\"false\">\n @for (opt of specType.options; track opt.id) {\n <button clx-button\n [variant]=\"isSpecSelected(specType.id, opt.id) ? 'solid' : 'outline'\"\n [color]=\"asColor(opt.value)\"\n shape=\"circle\" size=\"xs\" [iconOnly]=\"true\"\n [disabled]=\"!isOptionAvailable(specType.id, opt.id)\"\n [clxTooltip]=\"opt.value\"\n [clxTooltipColor]=\"asColor(opt.value)\"\n clxTooltipPosition=\"top\"\n (click)=\"selectSpec(specType.id, opt.id)\">\n </button>\n }\n </clx-button-group>\n } @else {\n <clx-button-group [label]=\"specType.name\" shape=\"flat\" [attached]=\"false\">\n @for (opt of specType.options; track opt.id) {\n <button clx-button\n [variant]=\"isSpecSelected(specType.id, opt.id) ? 'solid' : 'outline'\"\n [color]=\"clxColor()\" size=\"sm\"\n [disabled]=\"!isOptionAvailable(specType.id, opt.id)\"\n (click)=\"selectSpec(specType.id, opt.id)\">\n {{ opt.value }}\n </button>\n }\n </clx-button-group>\n }\n }\n\n <!-- Quantity -->\n <clx-number label=\"Quantity:\" variant=\"stepper\" [color]=\"clxColor()\"\n [min]=\"1\" [max]=\"99\" [ngModel]=\"quantity()\" (ngModelChange)=\"quantity.set($event)\">\n </clx-number>\n\n <!-- CTA -->\n <div class=\"flex gap-3\">\n <button clx-button variant=\"solid\" [color]=\"clxColor()\" size=\"md\" [block]=\"true\" icon=\"bolt\"\n [disabled]=\"!v?.in_stock\">Buy Now</button>\n <button clx-button variant=\"light\" [color]=\"clxColor()\" size=\"md\" [block]=\"true\" icon=\"shopping_cart\"\n [disabled]=\"!v?.in_stock\">Add to Cart</button>\n </div>\n\n </div>\n </div>\n\n <!-- ── Tabs ──────────────────────────────────────────────────────── -->\n <clx-tabs [tabs]=\"tabItems\" [clxColor]=\"clxColor()\" [(activeTab)]=\"activeTab\">\n\n <!-- Tab: Características generales (st_product_specs — ficha técnica global) -->\n <ng-template [clxTabPanel]=\"'general'\">\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-x-8\">\n <clx-list [color]=\"clxColor()\" variant=\"flush\" size=\"sm\">\n @for (spec of specsLeft(p.product_specs); track spec.id) {\n <clx-list-item [label]=\"spec.name + ':'\" [sublabel]=\"spec.value\" [icon]=\"spec.icon ?? ''\" />\n }\n </clx-list>\n <clx-list [color]=\"clxColor()\" variant=\"flush\" size=\"sm\">\n @for (spec of specsRight(p.product_specs); track spec.id) {\n <clx-list-item [label]=\"spec.name + ':'\" [sublabel]=\"spec.value\" [icon]=\"spec.icon ?? ''\" />\n }\n </clx-list>\n </div>\n </ng-template>\n\n <!-- Tab: Especificaciones (st_spec_types — specs de la variación activa) -->\n <ng-template [clxTabPanel]=\"'specs'\">\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-x-8\">\n <clx-list [color]=\"clxColor()\" variant=\"flush\" size=\"sm\">\n @for (st of specsLeft(p.spec_types); track st.id) {\n <clx-list-item [label]=\"st.name + ':'\" [sublabel]=\"selectedOptionLabel(st)\" [icon]=\"st.icon ?? ''\" />\n }\n </clx-list>\n <clx-list [color]=\"clxColor()\" variant=\"flush\" size=\"sm\">\n @for (st of specsRight(p.spec_types); track st.id) {\n <clx-list-item [label]=\"st.name + ':'\" [sublabel]=\"selectedOptionLabel(st)\" [icon]=\"st.icon ?? ''\" />\n }\n </clx-list>\n </div>\n </ng-template>\n\n <!-- Tab: Descripción (st_product_descriptions) -->\n <ng-template [clxTabPanel]=\"'description'\">\n <div class=\"space-y-5 max-w-3xl\">\n @for (block of p.descriptions; track block.id) {\n <div>\n @if (block.title) {\n <h3 class=\"text-base font-semibold text-slate-800 mb-1\">{{ block.title }}</h3>\n }\n <p class=\"text-sm text-slate-500 leading-relaxed\">{{ block.body }}</p>\n </div>\n }\n </div>\n </ng-template>\n\n </clx-tabs>\n\n <!-- ── Reviews ───────────────────────────────────────────────────── -->\n <div class=\"grid grid-cols-1 xl:grid-cols-3 gap-8 border-t border-slate-200 pt-8\">\n\n <div class=\"space-y-3\">\n <h2 class=\"text-base font-bold text-slate-800\">Customer Reviews</h2>\n <div class=\"flex items-end gap-3\">\n <span class=\"text-5xl font-black text-slate-800\">{{ p.rating | number:'1.1-1' }}</span>\n <div class=\"pb-1 space-y-1\">\n <clx-rating [value]=\"p.rating\" [color]=\"clxColor()\"></clx-rating>\n <p class=\"text-xs text-slate-500\">{{ p.review_count }} verified ratings</p>\n </div>\n </div>\n <p class=\"text-sm font-semibold\" [class]=\"'text-' + clxColor() + '-600'\">Very Good</p>\n <div class=\"pt-2 space-y-2\">\n <button clx-button variant=\"solid\" [color]=\"clxColor()\" size=\"md\" [block]=\"true\" icon=\"rate_review\">\n Leave Us a Review\n </button>\n <button clx-button variant=\"light\" [color]=\"clxColor()\" size=\"md\" [block]=\"true\" icon=\"flag\">\n Report abuse\n </button>\n </div>\n </div>\n\n <div class=\"lg:col-span-2 space-y-4\">\n @for (review of p.reviews ?? []; track review.id) {\n <div class=\"rounded-2xl overflow-hidden shadow-sm\">\n <div class=\"flex items-center gap-3 px-4 py-3\">\n <div class=\"w-10 h-10 rounded-full bg-slate-100 flex items-center justify-center shrink-0\">\n <span class=\"text-sm font-bold text-slate-600\">\n {{ review.author_name.substring(0,1) }}{{ review.author_name.split(' ')[1]?.substring(0,1) ?? '' }}\n </span>\n </div>\n <div class=\"flex-1 min-w-0\">\n <p class=\"font-semibold text-sm text-slate-800 truncate\">{{ review.author_name }}</p>\n <p class=\"text-xs text-slate-400\">{{ review.created_at }}</p>\n </div>\n @if (review.is_verified) {\n <span clx-badge variant=\"light\" color=\"emerald\" size=\"sm\" shape=\"pill\">Verified</span>\n }\n </div>\n <div class=\"px-4 pb-4 space-y-2\">\n <div class=\"flex items-center gap-2\">\n <clx-rating [value]=\"review.rating\" [color]=\"clxColor()\"></clx-rating>\n @if (review.title) {\n <span class=\"text-sm font-semibold text-slate-700\">{{ review.title }}</span>\n }\n </div>\n @if (review.body) {\n <p class=\"text-sm text-slate-500\">{{ review.body }}</p>\n }\n <div class=\"flex items-center gap-3 pt-1\">\n <span class=\"text-xs text-slate-400\">Helpful?</span>\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"xs\" icon=\"thumb_up\">{{ review.helpful }}</button>\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"xs\" icon=\"thumb_down\">{{ review.not_helpful }}</button>\n </div>\n </div>\n </div>\n }\n </div>\n\n </div>\n\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type {\n ClxTreeNode,\n ClxTreeSize,\n ClxTreeVariant,\n ClxTreeSelectEvent,\n ClxTreeExpandEvent,\n} from '../../../types/clx-tree.types';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\nconst SIZE_MAP: Record<ClxTreeSize, { row: string; text: string; icon: 'xs' | 'sm' | 'md'; indent: string }> = {\n sm: { row: 'py-1 px-2', text: 'text-xs', icon: 'xs', indent: 'pl-5' },\n md: { row: 'py-1.5 px-2', text: 'text-sm', icon: 'sm', indent: 'pl-6' },\n lg: { row: 'py-2 px-2', text: 'text-sm', icon: 'md', indent: 'pl-7' },\n};\n\n@Component({\n selector: 'clx-tree',\n standalone: true,\n imports: [NgTemplateOutlet, ClxIconComponent],\n template: `\n <div role=\"tree\" [class]=\"_rootClass()\">\n @for (node of nodes(); track node.id) {\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { $implicit: node, depth: 0 }\"></ng-container>\n }\n </div>\n\n <ng-template #nodeTemplate let-node let-depth=\"depth\">\n @let hasChildren = !!node.children?.length;\n @let expanded = _isExpanded(node.id);\n @let selected = _isSelected(node.id);\n\n <div\n role=\"treeitem\"\n [attr.aria-expanded]=\"hasChildren ? expanded : null\"\n [attr.aria-selected]=\"selectable() ? selected : null\">\n\n <!-- Row -->\n <div\n [class]=\"_rowClass(node, selected)\"\n [style.paddingLeft.px]=\"depth * _indentPx() + 8\"\n (click)=\"!node.disabled && _onRowClick(node)\">\n\n <!-- Expand chevron -->\n <span\n class=\"shrink-0 transition-transform duration-200\"\n [class.rotate-90]=\"expanded\"\n [class.invisible]=\"!hasChildren\"\n (click)=\"hasChildren && $event.stopPropagation(); hasChildren && _toggleExpand(node)\">\n <span clx-icon name=\"chevron_right\" [size]=\"_s().icon\"></span>\n </span>\n\n <!-- Node icon -->\n @if (node.icon) {\n <span clx-icon [name]=\"node.icon\" [size]=\"_s().icon\" [class]=\"_iconClass(selected)\"></span>\n } @else if (hasChildren) {\n <span clx-icon [name]=\"expanded ? 'folder_open' : 'folder'\" [size]=\"_s().icon\" [class]=\"_iconClass(selected)\"></span>\n } @else {\n <span clx-icon name=\"description\" [size]=\"_s().icon\" [class]=\"_iconClass(selected)\"></span>\n }\n\n <!-- Label -->\n <span [class]=\"_labelClass(node, selected)\">{{ node.label }}</span>\n\n <!-- Badge count -->\n @if (node.children?.length) {\n <span [class]=\"_badgeClass(selected)\">{{ node.children!.length }}</span>\n }\n </div>\n\n <!-- Children -->\n @if (hasChildren && expanded) {\n <div [class]=\"variant() === 'lines' ? _lineClass() : ''\">\n @for (child of node.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { $implicit: child, depth: depth + 1 }\"></ng-container>\n }\n </div>\n }\n </div>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxTreeComponent {\n readonly nodes = input.required<ClxTreeNode[]>();\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxTreeSize>('md');\n readonly variant = input<ClxTreeVariant>('default');\n readonly selectable = input<boolean>(true);\n readonly multiSelect = input<boolean>(false);\n readonly expandAll = input<boolean>(false);\n\n readonly selectedIds = model<(string | number)[]>([]);\n readonly expandedIds = model<(string | number)[]>([]);\n\n readonly selectChange = output<ClxTreeSelectEvent>();\n readonly expandChange = output<ClxTreeExpandEvent>();\n\n protected readonly _s = computed(() => SIZE_MAP[this.size()]);\n protected readonly _indentPx = computed(() =>\n this.size() === 'sm' ? 16 : this.size() === 'lg' ? 24 : 20\n );\n\n protected readonly _rootClass = computed(() =>\n `select-none ${this.variant() === 'lines' ? 'divide-y divide-slate-100' : ''}`\n );\n\n protected _isExpanded(id: string | number): boolean {\n return this.expandAll() || this.expandedIds().includes(id);\n }\n\n protected _isSelected(id: string | number): boolean {\n return this.selectedIds().includes(id);\n }\n\n protected _rowClass(node: ClxTreeNode, selected: boolean): string {\n const s = this._s();\n const t = resolveColor(this.color());\n const base = `flex items-center gap-1.5 rounded-lg cursor-pointer transition-colors ${s.row} ${s.text}`;\n if (node.disabled) return `${base} opacity-40 cursor-not-allowed`;\n if (selected) return `${base} ${t.bgSubtle} ${t.textSubtle} font-medium`;\n return `${base} text-slate-700 ${t.hoverBgMuted}`;\n }\n\n protected _iconClass(selected: boolean): string {\n const t = resolveColor(this.color());\n return selected ? t.textSubtle : 'text-slate-400';\n }\n\n protected _labelClass(node: ClxTreeNode, selected: boolean): string {\n return `flex-1 truncate ${node.disabled ? 'line-through text-slate-400' : ''}`;\n }\n\n protected _badgeClass(selected: boolean): string {\n const t = resolveColor(this.color());\n return `ml-auto text-xs px-1.5 py-0.5 rounded-full font-medium ${selected ? t.bg + ' ' + t.text : t.bgSubtle + ' ' + t.textSubtle}`;\n }\n\n protected _lineClass(): string {\n return 'border-l border-slate-200 ml-3.5 pl-2 mt-0.5';\n }\n\n protected _toggleExpand(node: ClxTreeNode): void {\n const ids = this.expandedIds();\n const isOpen = ids.includes(node.id);\n const next = isOpen ? ids.filter(i => i !== node.id) : [...ids, node.id];\n this.expandedIds.set(next);\n this.expandChange.emit({ node, expanded: !isOpen });\n }\n\n protected _onRowClick(node: ClxTreeNode): void {\n if (!this.selectable()) {\n if (node.children?.length) this._toggleExpand(node);\n return;\n }\n const isSelected = this._isSelected(node.id);\n let next: (string | number)[];\n if (this.multiSelect()) {\n next = isSelected\n ? this.selectedIds().filter(i => i !== node.id)\n : [...this.selectedIds(), node.id];\n } else {\n next = isSelected ? [] : [node.id];\n }\n this.selectedIds.set(next);\n this.selectChange.emit({ node, selected: !isSelected });\n if (node.children?.length) this._toggleExpand(node);\n }\n}\n","export const CHECKBOX_SIZE_MAP = {\n sm: { box: 'w-4 h-4', icon: 'xs' as const, label: 'text-xs' },\n md: { box: 'w-5 h-5', icon: 'xs' as const, label: 'text-sm' },\n lg: { box: 'w-6 h-6', icon: 'sm' as const, label: 'text-base' },\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxCheckboxVariant } from '../../../types/clx-checkbox.types';\nimport { CHECKBOX_SIZE_MAP } from '../../../configs/checkbox.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-checkbox',\n standalone: true,\n imports: [ClxIconComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxCheckboxComponent),\n multi: true,\n },\n ],\n template: `\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n aria-hidden=\"true\"\n [checked]=\"_checked()\"\n [disabled]=\"_disabled()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event.stopPropagation()\"\n (blur)=\"_handleBlur()\"\n />\n <div [class]=\"_boxClass()\">\n @if (_checked()) {\n <span clx-icon name=\"check\" [size]=\"_sizeConfig().icon\"></span>\n }\n </div>\n @if (label()) {\n <span [class]=\"_labelClass()\">{{ label() }}</span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'inline-flex items-center gap-2 select-none',\n '[style.cursor]': '_disabled() ? \"not-allowed\" : \"pointer\"',\n '[style.pointer-events]': '_disabled() ? \"none\" : null',\n role: 'checkbox',\n '[attr.aria-checked]': '_checked()',\n '[attr.tabindex]': '_disabled() ? -1 : 0',\n '(click)': '_toggle()',\n '(keydown.space)': '_onSpace($event)',\n },\n})\nexport class ClxCheckboxComponent implements ControlValueAccessor {\n readonly color = input<ClxColorInput>('indigo');\n readonly variant = input<ClxCheckboxVariant>('solid');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly label = input<string>('');\n /** Initial value when used without FormControl */\n readonly value = input<boolean>(false);\n /** Disabled state when used without FormControl */\n readonly disabled = input<boolean>(false);\n\n readonly _checked = signal(false);\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._checked.set(v));\n });\n\n private _onChange: (v: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n\n protected readonly _sizeConfig = computed(() => CHECKBOX_SIZE_MAP[this.size()]);\n\n protected readonly _boxClass = computed(() => {\n const base = `${this._sizeConfig().box} flex items-center justify-center rounded border-2 transition-all duration-200`;\n if (this._disabled()) {\n return this._checked()\n ? `${base} border-gray-300 bg-gray-300 text-white`\n : `${base} border-gray-300 bg-gray-100 text-transparent`;\n }\n if (!this._checked()) return `${base} border-gray-300 bg-white text-transparent`;\n const t = resolveColor(this.color());\n if (this.variant() === 'solid') return `${base} ${t.bg} ${t.border} ${t.text}`;\n return `${base} ${t.bgSubtle} ${t.borderLight} ${t.textSubtle}`;\n });\n\n protected readonly _labelClass = computed(() => {\n const color = this._disabled() ? 'text-gray-400' : 'text-slate-700';\n return `${this._sizeConfig().label} ${color} leading-none`;\n });\n\n writeValue(val: boolean): void {\n this._cvaConnected = true;\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(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n protected _toggle(): void {\n const next = !this._checked();\n this._checked.set(next);\n this._onChange(next);\n }\n\n protected _onSpace(event: Event): void {\n event.preventDefault();\n this._toggle();\n }\n\n protected _handleBlur(): void {\n this._onTouched();\n }\n}\n","import type { ClxSliderSize } from '../types/clx-slider.types';\n\nexport const SLIDER_SIZE_MAP: Record<ClxSliderSize, {\n trackPx: string;\n thumbPx: string;\n thumbRing: string;\n label: string;\n hint: string;\n markW: string;\n markH: string;\n wrapperH: string;\n tooltipBottom: string;\n}> = {\n sm: { trackPx: '4px', thumbPx: '14px', thumbRing: 'ring-2', label: 'text-xs font-medium', hint: 'text-xs', markW: '2px', markH: '4px', wrapperH: 'h-6', tooltipBottom: 'calc(50% + 10px)' },\n md: { trackPx: '6px', thumbPx: '20px', thumbRing: 'ring-2', label: 'text-sm font-medium', hint: 'text-xs', markW: '2px', markH: '6px', wrapperH: 'h-8', tooltipBottom: 'calc(50% + 13px)' },\n lg: { trackPx: '10px', thumbPx: '26px', thumbRing: 'ring-[3px]', label: 'text-sm font-medium', hint: 'text-sm', markW: '2px', markH: '8px', wrapperH: 'h-10', tooltipBottom: 'calc(50% + 16px)' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n inject,\n input,\n signal,\n computed,\n effect,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor, parseColorInput, CLX_COLOR_HEX } from '../../../types/clx-color.types';\nimport type { ClxSliderSize } from '../../../types/clx-slider.types';\nimport { SLIDER_SIZE_MAP } from '../../../configs/slider.config';\n\n@Component({\n selector: 'clx-slider',\n standalone: true,\n imports: [],\n template: `\n <!-- Label -->\n @if (label()) {\n <span [class]=\"_sizeConfig().label + ' text-slate-700 leading-none'\">{{ label() }}</span>\n }\n\n <!-- Track wrapper: altura fija para contener el thumb sin recorte -->\n <div class=\"relative w-full flex items-center\" [class]=\"_sizeConfig().wrapperH\">\n\n <!-- Base track -->\n <div [class]=\"_trackClass()\" [style.height]=\"_sizeConfig().trackPx\">\n\n <!-- Filled track -->\n <div\n class=\"absolute left-0 top-0 h-full rounded-full transition-all duration-75\"\n [class]=\"_disabled() ? 'bg-slate-300' : _colorTokens().bg\"\n [style.width]=\"_pct() + '%'\">\n </div>\n\n <!-- Tick marks -->\n @if (marks() && _tickPositions().length) {\n @for (pos of _tickPositions(); track pos) {\n <div\n class=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 rounded-full\"\n [class]=\"pos <= _pct() ? 'bg-white/60' : 'bg-slate-400/60'\"\n [style.width]=\"_sizeConfig().markW\"\n [style.height]=\"_sizeConfig().markH\"\n [style.left]=\"pos + '%'\">\n </div>\n }\n }\n </div>\n\n <!-- Thumb -->\n <div\n [class]=\"_thumbClass()\"\n [style.width]=\"_sizeConfig().thumbPx\"\n [style.height]=\"_sizeConfig().thumbPx\"\n [style.left]=\"_pct() + '%'\">\n </div>\n\n <!-- Tooltip -->\n @if (showTooltip() && !_disabled() && (_isFocused() || _isActive())) {\n <div\n class=\"absolute -translate-x-1/2 px-2 py-0.5 rounded text-white text-xs font-semibold\n pointer-events-none select-none shadow-md whitespace-nowrap z-20\"\n [class]=\"_colorTokens().bg\"\n [style.left]=\"_pct() + '%'\"\n [style.bottom]=\"_sizeConfig().tooltipBottom\">\n {{ _currentValue() }}\n <div class=\"absolute left-1/2 top-full -translate-x-1/2 border-4 border-transparent\"\n [style.border-top-color]=\"_tooltipArrowColor()\">\n </div>\n </div>\n }\n\n <!-- Native input — ocupa todo el wrapper para capturar eventos táctiles/mouse -->\n <input\n #rangeInput\n type=\"range\"\n class=\"absolute inset-0 w-full h-full opacity-0 z-30\"\n [class]=\"_disabled() ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [disabled]=\"_disabled()\"\n (input)=\"_onInput($event)\"\n (change)=\"_onTouched()\"\n (focus)=\"_isFocused.set(true)\"\n (blur)=\"_onBlur()\"\n (mousedown)=\"_isActive.set(true)\"\n (mouseup)=\"_isActive.set(false)\"\n (touchstart)=\"_isActive.set(true)\"\n (touchend)=\"_isActive.set(false)\"\n />\n </div>\n\n <!-- Min / Max labels -->\n @if (showMinMax()) {\n <div class=\"flex justify-between mt-0.5\">\n <span [class]=\"_sizeConfig().hint + ' text-slate-400'\">{{ min() }}</span>\n <span [class]=\"_sizeConfig().hint + ' text-slate-400'\">{{ max() }}</span>\n </div>\n }\n\n <!-- Hint / Error -->\n @if (_isInvalid()) {\n <p class=\"text-xs text-red-500 flex items-center gap-1\">{{ errorMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_sizeConfig().hint + ' text-gray-400'\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col gap-1.5 w-full',\n '[class.opacity-50]': '_disabled()',\n '[class.pointer-events-none]': '_disabled()',\n },\n})\nexport class ClxSliderComponent implements ControlValueAccessor {\n\n // ── Inputs ──────────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly hint = input<string>('');\n readonly errorMessage = input<string>('Valor fuera de rango');\n readonly activeColor = input<ClxColorInput>('indigo');\n readonly size = input<ClxSliderSize>('md');\n readonly min = input<number>(0);\n readonly max = input<number>(100);\n readonly step = input<number>(1);\n readonly showTooltip = input<boolean>(true);\n readonly showMinMax = input<boolean>(false);\n readonly marks = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n // ── DI ──────────────────────────────────────────────────────────────────────\n private readonly _ngControl = inject(NgControl, { optional: true, self: true });\n private readonly _rangeInput = viewChild<ElementRef<HTMLInputElement>>('rangeInput');\n\n constructor() {\n if (this._ngControl) this._ngControl.valueAccessor = this;\n // Sync signal → native input DOM property (needed for reset/patchValue)\n effect(() => {\n const el = this._rangeInput()?.nativeElement;\n if (el) el.value = String(this._currentValue());\n });\n }\n\n // ── Internal state ───────────────────────────────────────────────────────────\n protected readonly _currentValue = signal<number>(0);\n protected readonly _cvaDisabled = signal(false);\n protected readonly _isFocused = signal(false);\n protected readonly _isActive = signal(false);\n protected readonly _wasTouched = signal(false);\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n protected readonly _sizeConfig = computed(() => SLIDER_SIZE_MAP[this.size()]);\n protected readonly _colorTokens = computed(() =>\n resolveColor(this._isInvalid() ? 'red' : this.activeColor()),\n );\n\n protected readonly _pct = computed(() => {\n const range = this.max() - this.min();\n if (range === 0) return 0;\n return ((this._currentValue() - this.min()) / range) * 100;\n });\n\n protected readonly _isInvalid = computed(() =>\n this._wasTouched() && (this._ngControl?.control?.invalid ?? false),\n );\n\n protected readonly _trackClass = computed(() =>\n 'absolute inset-x-0 top-1/2 -translate-y-1/2 rounded-full bg-slate-200 overflow-visible',\n );\n\n protected readonly _thumbClass = computed(() => {\n const base = 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2 rounded-full bg-white border-[3px] shadow-md transition-all duration-75 pointer-events-none z-10';\n const t = this._colorTokens();\n const border = this._disabled() ? 'border-slate-300' : t.border;\n const ring = this._isFocused() && !this._disabled()\n ? `${this._sizeConfig().thumbRing} ${t.ring} scale-110`\n : '';\n const active = this._isActive() && !this._disabled() ? 'scale-125' : '';\n return [base, border, ring, active].filter(Boolean).join(' ');\n });\n\n protected readonly _tickPositions = computed<number[]>(() => {\n const range = this.max() - this.min();\n const step = this.step();\n if (!this.marks() || range <= 0 || step <= 0) return [];\n const ticks: number[] = [];\n for (let v = this.min(); v <= this.max(); v += step) {\n ticks.push(((v - this.min()) / range) * 100);\n }\n return ticks;\n });\n\n // Tooltip arrow color via inline style (CSS class can't target border-top-color easily)\n protected _tooltipArrowColor(): string {\n const input = this._isInvalid() ? 'red' : this.activeColor();\n const { color } = parseColorInput(input);\n return CLX_COLOR_HEX[color] ?? '#6366f1';\n }\n\n // ── Event handlers ───────────────────────────────────────────────────────────\n protected _onInput(event: Event): void {\n const val = Number((event.target as HTMLInputElement).value);\n this._currentValue.set(val);\n this._onChange(val);\n }\n\n protected _onBlur(): void {\n this._isFocused.set(false);\n this._isActive.set(false);\n this._onTouched();\n this._wasTouched.set(true);\n }\n\n // ── CVA ──────────────────────────────────────────────────────────────────────\n private _onChange: (v: number) => void = () => {};\n protected _onTouched: () => void = () => {};\n\n writeValue(val: number | null): void {\n this._currentValue.set(val ?? this.min());\n }\n\n registerOnChange(fn: (v: number) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n InjectionToken,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxRadioVariant } from '../../../types/clx-radio.types';\n\nexport const CLX_RADIO_GROUP = new InjectionToken<ClxRadioGroupComponent>('CLX_RADIO_GROUP');\n\n@Component({\n selector: 'clx-radio-group',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxRadioGroupComponent),\n multi: true,\n },\n {\n provide: CLX_RADIO_GROUP,\n useExisting: forwardRef(() => ClxRadioGroupComponent),\n },\n ],\n host: {\n role: 'radiogroup',\n class: 'flex flex-wrap gap-4',\n '[class.flex-col]': 'direction() === \"vertical\"',\n '[style.cursor]': 'isDisabled() ? \"not-allowed\" : null',\n '[style.pointer-events]': 'isDisabled() ? \"none\" : null',\n },\n})\nexport class ClxRadioGroupComponent implements ControlValueAccessor {\n readonly color = input<ClxColorInput>('indigo');\n readonly variant = input<ClxRadioVariant>('solid');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly direction = input<'horizontal' | 'vertical'>('horizontal');\n readonly disabled = input<boolean>(false);\n\n /** Current selected value — readable by child clx-radio via injection */\n readonly _value = signal<unknown>(null);\n\n private readonly _cvaDisabled = signal(false);\n\n /** Merged disabled state (input + CVA) — readable by child clx-radio */\n readonly isDisabled = computed(() => this._cvaDisabled() || this.disabled());\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);\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(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n}\n","export const RADIO_SIZE_MAP = {\n sm: { ring: 'w-4 h-4', dot: 'w-1.5 h-1.5', label: 'text-xs' },\n md: { ring: 'w-5 h-5', dot: 'w-2 h-2', label: 'text-sm' },\n lg: { ring: 'w-6 h-6', dot: 'w-2.5 h-2.5', label: 'text-base' },\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxRadioVariant } from '../../../types/clx-radio.types';\nimport { RADIO_SIZE_MAP } from '../../../configs/radio.config';\nimport { CLX_RADIO_GROUP } from './clx-radio-group.component';\n\n@Component({\n selector: 'clx-radio',\n standalone: true,\n template: `\n <input\n type=\"radio\"\n class=\"sr-only\"\n aria-hidden=\"true\"\n [checked]=\"_checked()\"\n [disabled]=\"_isDisabled()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event.stopPropagation()\"\n />\n <div [class]=\"_ringClass()\">\n <div [class]=\"_dotClass()\"></div>\n </div>\n @if (label()) {\n <span [class]=\"_labelClass()\">{{ label() }}</span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'inline-flex items-center gap-2 select-none cursor-pointer',\n role: 'radio',\n '[attr.aria-checked]': '_checked()',\n '[attr.tabindex]': '_isDisabled() ? -1 : 0',\n '(click)': '_select()',\n '(keydown.space)': '_onSpace($event)',\n },\n})\nexport class ClxRadioComponent {\n /** Value this radio represents — compared against the group's selected value */\n readonly value = input.required<unknown>();\n readonly label = input<string>('');\n /** Per-radio overrides — falls back to the group's value if null */\n readonly color = input<ClxColorInput | null>(null);\n readonly variant = input<ClxRadioVariant | null>(null);\n readonly size = input<'sm' | 'md' | 'lg' | null>(null);\n\n private readonly _group = inject(CLX_RADIO_GROUP, { optional: true });\n\n protected readonly _checked = computed(() =>\n this._group ? this._group._value() === this.value() : false,\n );\n protected readonly _isDisabled = computed(() => this._group?.isDisabled() ?? false);\n\n private readonly _color = computed<ClxColorInput>(() => this.color() ?? this._group?.color() ?? 'indigo');\n private readonly _variant = computed(() => this.variant() ?? this._group?.variant() ?? 'solid');\n private readonly _size = computed(() => this.size() ?? this._group?.size() ?? 'md');\n\n protected readonly _sizeConfig = computed(() => RADIO_SIZE_MAP[this._size()]);\n\n protected readonly _ringClass = computed(() => {\n const base = `${this._sizeConfig().ring} rounded-full border-2 flex items-center justify-center transition-all duration-200`;\n if (this._isDisabled()) {\n return this._checked()\n ? `${base} border-gray-300 bg-gray-300`\n : `${base} border-gray-300 bg-gray-100`;\n }\n if (!this._checked()) return `${base} border-gray-300 bg-white`;\n const t = resolveColor(this._color());\n if (this._variant() === 'solid') return `${base} ${t.bg} ${t.border}`;\n return `${base} ${t.bgSubtle} ${t.borderLight}`;\n });\n\n protected readonly _dotClass = computed(() => {\n const base = `${this._sizeConfig().dot} rounded-full transition-all duration-200`;\n if (!this._checked()) return `${base} scale-0`;\n if (this._isDisabled()) return `${base} scale-100 bg-white`;\n const t = resolveColor(this._color());\n if (this._variant() === 'solid') return `${base} scale-100 ${t.text}`;\n return `${base} scale-100 ${t.textSubtle}`;\n });\n\n protected readonly _labelClass = computed(() => {\n const color = this._isDisabled() ? 'text-gray-400' : 'text-slate-700';\n return `${this._sizeConfig().label} ${color} leading-none`;\n });\n\n protected _select(): void {\n this._group?.select(this.value());\n }\n\n protected _onSpace(event: Event): void {\n event.preventDefault();\n this._select();\n }\n}\n","import type { ClxSelectSize } from '../types/clx-select.types';\n\nexport const SELECT_SIZE_MAP: Record<ClxSelectSize, {\n minH: string;\n text: string;\n label: string;\n hint: string;\n px: string;\n py: string;\n gap: string;\n tagSize: 'sm' | 'md';\n btnSize: 'xs' | 'sm';\n}> = {\n sm: { minH: 'min-h-8', text: 'text-sm', label: 'text-xs font-medium', hint: 'text-xs', px: 'px-3', py: 'py-1', gap: 'gap-1', tagSize: 'sm', btnSize: 'xs' },\n md: { minH: 'min-h-10', text: 'text-sm', label: 'text-sm font-medium', hint: 'text-xs', px: 'px-3', py: 'py-2', gap: 'gap-1.5', tagSize: 'md', btnSize: 'sm' },\n lg: { minH: 'min-h-12', text: 'text-base', label: 'text-sm font-medium', hint: 'text-sm', px: 'px-4', py: 'py-2.5', gap: 'gap-2', tagSize: 'md', btnSize: 'sm' },\n};\n","import type { ClxTagVariant, ClxTagSize, ClxTagShape } from '../types/clx-tag.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\nexport const TAG_SIZE_MAP: Record<ClxTagSize, {\n pad: string;\n text: string;\n gap: string;\n btnSize: Extract<ClxSize, 'xxs'>;\n}> = {\n sm: { pad: 'pl-1.5 pr-0 py-0', text: 'text-xs', gap: 'gap-0.5', btnSize: 'xxs' },\n md: { pad: 'pl-2.5 pr-1 py-0.5', text: 'text-xs', gap: 'gap-1', btnSize: 'xxs' },\n};\n\nexport const TAG_SHAPE_MAP: Record<ClxTagShape, string> = {\n rounded: 'rounded-md',\n pill: 'rounded-full',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxTagVariant, ClxTagSize, ClxTagShape } from '../../../types/clx-tag.types';\nimport { TAG_SIZE_MAP, TAG_SHAPE_MAP } from '../../../configs/tag.config';\nimport { ClxButtonComponent } from '../clx-button/clx-button.component';\n\n@Component({\n selector: 'span[clx-tag]',\n standalone: true,\n imports: [ClxButtonComponent],\n template: `\n <ng-content />\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"_closeBtnColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"close\"\n [iconOnly]=\"true\"\n aria-label=\"Eliminar etiqueta\"\n (click)=\"onRemove.emit(); $event.stopPropagation()\">\n </button>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n})\nexport class ClxTagComponent {\n readonly variant = input<ClxTagVariant>('soft');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxTagSize>('md');\n readonly shape = input<ClxTagShape>('rounded');\n readonly onRemove = output<void>();\n\n protected readonly _sizeConfig = computed(() => TAG_SIZE_MAP[this.size()]);\n\n protected readonly _colorClass = computed(() => {\n const t = resolveColor(this.color());\n const variant = this.variant();\n if (variant === 'solid') return `${t.bg} ${t.text}`;\n if (variant === 'soft') return `${t.bgSubtle} ${t.textSubtle}`;\n return `border ${t.border} ${t.textSubtle} bg-transparent`;\n });\n\n protected readonly _hostClass = computed(() => {\n const s = this._sizeConfig();\n return `inline-flex items-center font-medium leading-none ${s.gap} ${s.text} ${s.pad} ${TAG_SHAPE_MAP[this.shape()]} ${this._colorClass()}`;\n });\n\n protected readonly _closeBtnColor = computed<ClxColorInput>(() =>\n this.variant() === 'solid' ? 'white' : this.color()\n );\n}\n","import type { ClxInputStatus, ClxInputSize } from '../types/clx-input.types';\n\nexport const INPUT_STATUS_MAP: Record<ClxInputStatus, {\n border: string;\n ring: string;\n msgCls: string;\n iconName: string;\n iconColor: string;\n}> = {\n default: {\n border: 'border-gray-300',\n ring: 'focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500',\n msgCls: '',\n iconName: '',\n iconColor: '',\n },\n error: {\n border: 'border-red-400',\n ring: 'focus:ring-2 focus:ring-red-500/20 focus:border-red-500',\n msgCls: 'text-red-500',\n iconName: 'error',\n iconColor: '#ef4444',\n },\n success: {\n border: 'border-green-500',\n ring: 'focus:ring-2 focus:ring-green-500/20 focus:border-green-500',\n msgCls: 'text-green-600',\n iconName: 'check_circle',\n iconColor: '#16a34a',\n },\n};\n\nexport const INPUT_SIZE_MAP: Record<ClxInputSize, {\n input: string;\n label: string;\n hint: string;\n iconSize: 'xs' | 'sm' | 'md';\n iconLeft: string;\n iconRight: string;\n padLeft: string;\n padRight: string;\n padDefaultL: string;\n padDefaultR: string;\n}> = {\n sm: {\n input: 'h-8 text-sm',\n label: 'text-xs font-medium',\n hint: 'text-xs',\n iconSize: 'xs',\n iconLeft: 'left-2.5',\n iconRight: 'right-2.5',\n padLeft: 'pl-8',\n padRight: 'pr-8',\n padDefaultL: 'pl-3',\n padDefaultR: 'pr-3',\n },\n md: {\n input: 'h-10 text-sm',\n label: 'text-sm font-medium',\n hint: 'text-xs',\n iconSize: 'sm',\n iconLeft: 'left-3',\n iconRight: 'right-3',\n padLeft: 'pl-9',\n padRight: 'pr-9',\n padDefaultL: 'pl-3',\n padDefaultR: 'pr-3',\n },\n lg: {\n input: 'h-12 text-base',\n label: 'text-sm font-medium',\n hint: 'text-sm',\n iconSize: 'md',\n iconLeft: 'left-3.5',\n iconRight: 'right-3.5',\n padLeft: 'pl-10',\n padRight: 'pr-10',\n padDefaultL: 'pl-4',\n padDefaultR: 'pr-4',\n },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxInputStatus, ClxInputSize, ClxInputType } from '../../../types/clx-input.types';\nimport { INPUT_STATUS_MAP, INPUT_SIZE_MAP } from '../../../configs/input.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\nlet _clxInputIdCounter = 0;\n\n@Component({\n selector: 'clx-input',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxInputComponent),\n multi: true,\n },\n ],\n template: `\n @if (label()) {\n <label [for]=\"_inputId\" [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <!-- ── Input wrapper ───────────────────────────────────────────────── -->\n <div [class]=\"_wrapperClass()\">\n\n <!-- Prefix icon — colored cell (flex mode) -->\n @if (prefixIcon() && !prefixText()) {\n <div [class]=\"_prefixIconCellCls()\">\n <span clx-icon [name]=\"prefixIcon()!\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n }\n\n <!-- Prefix text addon (group mode) -->\n @if (prefixText()) {\n <span class=\"inline-flex items-center px-3 bg-gray-100 border-r border-gray-300 text-gray-500 text-sm shrink-0 select-none whitespace-nowrap\">\n {{ prefixText() }}\n </span>\n }\n\n <!-- ── Actual input ─────────────────────────────────────────────── -->\n <input\n [id]=\"_inputId\"\n [type]=\"_inputType()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"_disabled()\"\n [value]=\"_value()\"\n [class]=\"_inputClass()\"\n [autocomplete]=\"_autocomplete()\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur()\"\n />\n\n <!-- Password visibility toggle -->\n @if (type() === 'password') {\n <div class=\"absolute right-0 top-0 h-full flex items-center pr-1\">\n <button clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [icon]=\"_showPassword() ? 'visibility_off' : 'visibility'\"\n [disabled]=\"_disabled()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_togglePassword()\"></button>\n </div>\n }\n\n <!-- Status icon (error / success) -->\n @else if (status() !== 'default') {\n <div [class]=\"_suffixIconWrapCls()\" [style.color]=\"_statusCfg().iconColor\">\n <span clx-icon [name]=\"_statusCfg().iconName\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n }\n\n <!-- Custom suffix icon -->\n @else if (suffixIcon()) {\n <div [class]=\"_suffixIconWrapCls()\">\n <span clx-icon [name]=\"suffixIcon()!\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n }\n\n <!-- Suffix text addon (group mode) -->\n @if (suffixText()) {\n <span class=\"inline-flex items-center px-3 bg-gray-100 border-l border-gray-300 text-gray-500 text-sm shrink-0 select-none whitespace-nowrap\">\n {{ suffixText() }}\n </span>\n }\n </div>\n\n <!-- ── Bottom message ──────────────────────────────────────────────── -->\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col gap-1.5',\n },\n})\nexport class ClxInputComponent implements ControlValueAccessor {\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly type = input<ClxInputType>('text');\n readonly color = input<ClxColorInput>('indigo');\n readonly hint = input<string>('');\n readonly prefixIcon = input<string>('');\n readonly suffixIcon = input<string>('');\n readonly prefixText = input<string>('');\n readonly suffixText = input<string>('');\n readonly status = input<ClxInputStatus>('default');\n readonly statusMessage = input<string>('');\n readonly size = input<ClxInputSize>('md');\n /** Initial value for standalone use (without FormControl) */\n readonly value = input<string>('');\n /** Disabled state for standalone use (without FormControl) */\n readonly disabled = input<boolean>(false);\n readonly autocomplete = input<string | null>(null);\n\n // ── Internal state ───────────────────────────────────────────────────────\n protected readonly _inputId = `clx-input-${++_clxInputIdCounter}`;\n protected readonly _showPassword = signal(false);\n\n readonly _value = signal('');\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._value.set(v));\n });\n\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Computed ─────────────────────────────────────────────────────────────\n protected readonly _inputType = computed(() =>\n this.type() === 'password' && this._showPassword() ? 'text' : this.type(),\n );\n\n protected readonly _autocomplete = computed(() => {\n if (this.autocomplete() !== null) return this.autocomplete()!;\n return this.type() === 'password' ? 'new-password' : 'off';\n });\n\n protected readonly _sizeConfig = computed(() => INPUT_SIZE_MAP[this.size()]);\n protected readonly _statusCfg = computed(() => INPUT_STATUS_MAP[this.status()]);\n\n /** True whenever the wrapper must be a flex container (prefix icon/text or suffix text) */\n private readonly _isFlexMode = computed(() =>\n !!(this.prefixIcon() || this.prefixText() || this.suffixText()),\n );\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeConfig().hint} text-gray-400`,\n );\n\n protected readonly _wrapperClass = computed(() => {\n if (!this._isFlexMode()) return 'relative';\n\n const border = this._disabled() ? 'border-gray-200' : this._statusCfg().border;\n const focusCls = this._disabled()\n ? ''\n : this.status() !== 'default'\n ? this._statusCfg().ring.replace(/focus:/g, 'focus-within:')\n : resolveColor(this.color()).focusWithin;\n return `relative flex items-stretch rounded-md border ${border} ${focusCls} overflow-hidden transition-all duration-200`;\n });\n\n protected readonly _inputClass = computed(() => {\n const size = this._sizeConfig();\n const statusCfg = this._statusCfg();\n\n // ── Flex mode (prefix icon / text addon / suffix addon) ───────────────\n if (this._isFlexMode()) {\n const hasSuffix = this.type() === 'password' || this.status() !== 'default' || !!this.suffixIcon();\n const pr = hasSuffix ? size.padRight : size.padDefaultR;\n const disabledCls = this._disabled()\n ? 'cursor-not-allowed text-gray-400 bg-gray-50'\n : 'text-slate-700 bg-white';\n return `flex-1 ${size.input} pl-3 ${pr} outline-none min-w-0 placeholder:text-gray-400 ${disabledCls}`;\n }\n\n // ── Normal mode ───────────────────────────────────────────────────────\n const hasSuffix = this.type() === 'password' || this.status() !== 'default' || !!this.suffixIcon();\n const pl = size.padDefaultL;\n const pr = hasSuffix ? size.padRight : size.padDefaultR;\n\n const base = `w-full rounded-md border ${size.input} ${pl} ${pr} outline-none transition-all duration-200`;\n\n if (this._disabled()) {\n return `${base} border-gray-200 bg-gray-50 cursor-not-allowed text-gray-400 placeholder:text-gray-300`;\n }\n const ring = this.status() !== 'default' ? statusCfg.ring : resolveColor(this.color()).focusDirect;\n return `${base} bg-white ${statusCfg.border} ${ring} text-slate-700 placeholder:text-gray-400`;\n });\n\n /** Colored prefix icon cell — matches the input accent color */\n protected readonly _prefixIconCellCls = computed(() => {\n if (this._disabled()) {\n return `px-3 flex items-center shrink-0 border-r bg-gray-50 text-gray-300 border-gray-200`;\n }\n const t = resolveColor(this.color());\n return `px-3 flex items-center shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n protected readonly _suffixIconWrapCls = computed(() => {\n const size = this._sizeConfig();\n return `absolute ${size.iconRight} top-1/2 -translate-y-1/2 pointer-events-none text-gray-400 flex items-center`;\n });\n\n protected readonly _statusMsgClass = computed(() =>\n `${this._sizeConfig().hint} ${this._statusCfg().msgCls}`,\n );\n\n // ── CVA ──────────────────────────────────────────────────────────────────\n writeValue(val: string): void {\n this._cvaConnected = true;\n this._value.set(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(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n // ── Handlers ─────────────────────────────────────────────────────────────\n protected _handleInput(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this._value.set(val);\n this._onChange(val);\n }\n\n protected _handleBlur(): void {\n this._onTouched();\n }\n\n protected _togglePassword(): void {\n this._showPassword.update(v => !v);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n HostListener,\n inject,\n input,\n Signal,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { startWith, debounceTime, distinctUntilChanged, switchMap, of, catchError, map } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { ConnectedPosition, OverlayModule, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxSelectOption, ClxSelectSize } from '../../../types/clx-select.types';\nimport { SELECT_SIZE_MAP } from '../../../configs/select.config';\nimport { ClxTagComponent } from '../../base/clx-tag/clx-tag.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxInputComponent } from '../clx-input/clx-input.component';\nimport { ClxSpinnerComponent } from '../../base/clx-spinner/clx-spinner.component';\n\n@Component({\n selector: 'clx-select',\n standalone: true,\n imports: [OverlayModule, ReactiveFormsModule, ClxTagComponent, ClxIconComponent, ClxButtonComponent, ClxInputComponent, ClxSpinnerComponent],\n template: `\n @if (label()) {\n <span [id]=\"_labelId\" [class]=\"_labelClass()\">{{ label() }}</span>\n }\n\n <!-- ── Trigger ─────────────────────────────────────────────────────────── -->\n <div\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n [class]=\"_triggerClass()\"\n [attr.tabindex]=\"_disabled() ? null : '0'\"\n role=\"combobox\"\n [attr.aria-labelledby]=\"label() ? _labelId : null\"\n [attr.aria-expanded]=\"_isOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"!_disabled() && _togglePanel()\"\n (keydown)=\"_onTriggerKeydown($event)\">\n\n <!-- Multi mode: tag chips -->\n @if (multiple()) {\n <div [class]=\"_tagContainerClass()\">\n @for (opt of _selectedOptions(); track opt.value) {\n <span\n clx-tag\n variant=\"soft\"\n [color]=\"activeColor()\"\n [size]=\"_sizeConfig().tagSize\"\n (onRemove)=\"_deselect(opt.value)\">\n {{ opt.label }}\n </span>\n }\n @if (!_selectedOptions().length) {\n <span [class]=\"_placeholderClass()\">{{ placeholder() }}</span>\n }\n </div>\n\n <!-- Single mode: display value -->\n } @else {\n <span [class]=\"_singleDisplayClass()\">{{ _displayValue() }}</span>\n }\n\n <!-- Right controls: clear + chevron -->\n <div class=\"absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-0.5\">\n @if (_hasValue() && !_disabled() && multiple()) {\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"activeColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"close\"\n [iconOnly]=\"true\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation(); _clearAll()\">\n </button>\n }\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"activeColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"keyboard_arrow_down\"\n [iconOnly]=\"true\"\n [class]=\"_chevronBtnClass()\"\n (mousedown)=\"$event.preventDefault()\">\n </button>\n </div>\n </div>\n\n <!-- ── Overlay panel ───────────────────────────────────────────────────── -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayWidth]=\"_overlayWidth()\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_closePanel()\"\n (overlayKeydown)=\"_onOverlayKeydown($event)\">\n\n <div [class]=\"_panelClass()\" role=\"listbox\">\n\n <!-- Search / Autocomplete input -->\n @if (searchable() || async()) {\n <div class=\"p-2 border-b border-slate-100\" (click)=\"$event.stopPropagation()\">\n <clx-input\n [formControl]=\"_searchControl\"\n [placeholder]=\"async() ? 'Buscar...' : searchPlaceholder()\"\n [color]=\"activeColor()\"\n [suffixIcon]=\"async() && _asyncLoading() ? '' : 'search'\"\n size=\"sm\">\n </clx-input>\n </div>\n }\n\n <!-- Options list -->\n <div class=\"overflow-y-auto max-h-60 p-1 space-y-0.5\">\n @if (async() && _asyncLoading()) {\n <div class=\"flex items-center justify-center py-6 gap-2 text-sm text-slate-400\">\n <clx-spinner size=\"sm\" [color]=\"activeColor()\" />\n Buscando...\n </div>\n } @else if (_showAsyncPlaceholder()) {\n <div class=\"px-3 py-4 text-center text-sm text-gray-400\">\n Escribe {{ minChars() === 1 ? 'al menos 1 carácter' : 'al menos ' + minChars() + ' caracteres' }}\n </div>\n } @else if (_filteredOptions().length === 0) {\n <div class=\"px-3 py-4 text-center text-sm text-gray-400\">Sin resultados</div>\n } @else {\n @for (opt of _filteredOptions(); track opt.value) {\n <button\n type=\"button\"\n [class]=\"_optionClass(opt)\"\n [disabled]=\"opt.disabled ?? false\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_selectOption(opt)\">\n <span class=\"flex-1 text-left truncate\">{{ opt.label }}</span>\n @if (_isSelected(opt.value)) {\n <span clx-icon name=\"check\" size=\"xs\" class=\"shrink-0\"></span>\n }\n </button>\n }\n }\n </div>\n\n </div>\n </ng-template>\n\n <!-- ── Bottom message ─────────────────────────────────────────────────── -->\n @if (_isInvalid()) {\n <p class=\"text-xs text-red-500 flex items-center gap-1\">\n <span clx-icon name=\"error\" size=\"xs\"></span>\n {{ errorMessage() }}\n </p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5 w-full' },\n})\nexport class ClxSelectComponent implements ControlValueAccessor {\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('Selecciona una opción');\n readonly options = input<ClxSelectOption[]>([]);\n readonly multiple = input<boolean>(false);\n readonly searchable = input<boolean>(false);\n readonly searchPlaceholder = input<string>('Buscar...');\n readonly activeColor = input<ClxColorInput>('indigo');\n readonly size = input<ClxSelectSize>('md');\n readonly hint = input<string>('');\n readonly errorMessage = input<string>('Este campo es requerido');\n readonly disabled = input<boolean>(false);\n // ── Async / autocomplete ────────────────────────────────────────────────────\n readonly async = input<boolean>(false);\n readonly loadOptions = input<((query: string) => Observable<ClxSelectOption[]>) | null>(null);\n readonly debounceMs = input<number>(300);\n readonly minChars = input<number>(2);\n\n // ── Unique id for label ↔ combobox association ─────────────────────────────\n private static _seq = 0;\n protected readonly _labelId = `clx-select-label-${++ClxSelectComponent._seq}`;\n\n // ── Internal state ─────────────────────────────────────────────────────────\n protected readonly _isOpen = signal(false);\n protected readonly _overlayWidthPx = signal(0);\n\n // ── Search control (drives clx-input inside the panel) ─────────────────────\n protected readonly _searchControl = new FormControl<string>('');\n protected readonly _searchQuery: Signal<string>;\n\n // ── Async state ─────────────────────────────────────────────────────────────\n protected readonly _asyncOptions = signal<ClxSelectOption[]>([]);\n protected readonly _asyncLoading = signal(false);\n protected readonly _asyncQuery = signal('');\n\n private readonly _wasTouched = signal(false);\n private readonly _selectedVals = signal<(string | number)[]>([]);\n private readonly _cvaDisabled = signal(false);\n\n // ── DI ─────────────────────────────────────────────────────────────────────\n private readonly _ngControl = inject(NgControl, { optional: true, self: true });\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _sso = inject(ScrollStrategyOptions);\n\n readonly _scrollStrategy = this._sso.reposition();\n\n constructor() {\n this._searchQuery = toSignal(\n this._searchControl.valueChanges.pipe(startWith(''), map(v => v ?? '')),\n { initialValue: '' },\n );\n if (this._ngControl) this._ngControl.valueAccessor = this;\n\n // Async autocomplete: debounce + switchMap sobre el search control\n this._searchControl.valueChanges.pipe(\n debounceTime(this.debounceMs()),\n distinctUntilChanged(),\n switchMap(query => {\n const q = query ?? '';\n const loader = this.loadOptions();\n if (!this.async() || !loader || q.length < this.minChars()) {\n this._asyncLoading.set(false);\n this._asyncOptions.set([]);\n return of([]);\n }\n this._asyncLoading.set(true);\n this._asyncQuery.set(q);\n return loader(q).pipe(catchError(() => of([])));\n }),\n ).subscribe(opts => {\n this._asyncOptions.set(opts);\n this._asyncLoading.set(false);\n });\n }\n\n private _onChange: (v: string | number | (string | number)[] | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Overlay positions ──────────────────────────────────────────────────────\n readonly _positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n ];\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n protected readonly _sizeConfig = computed(() => SELECT_SIZE_MAP[this.size()]);\n protected readonly _hasValue = computed(() => this._selectedVals().length > 0);\n\n protected readonly _isInvalid = computed(() =>\n this._wasTouched() && (this._ngControl?.control?.invalid ?? false),\n );\n\n protected readonly _selectedOptions = computed(() => {\n const vals = this._selectedVals();\n return this.options().filter(o => vals.includes(o.value));\n });\n\n protected readonly _filteredOptions = computed(() => {\n if (this.async()) return this._asyncOptions();\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 protected readonly _showAsyncPlaceholder = computed(() =>\n this.async() && !this._asyncLoading() && this._asyncOptions().length === 0 && (this._asyncQuery().length < this.minChars())\n );\n\n protected readonly _displayValue = computed(() => {\n const sel = this._selectedOptions();\n return sel.length ? sel[0].label : this.placeholder();\n });\n\n protected readonly _overlayWidth = computed(() => this._overlayWidthPx());\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeConfig().hint} text-gray-400`,\n );\n\n protected readonly _triggerClass = computed(() => {\n const s = this._sizeConfig();\n const base = 'relative flex items-center rounded-md border transition-all duration-200 outline-none w-full';\n\n if (this._disabled()) {\n return `${base} ${s.minH} border-gray-200 bg-gray-50 cursor-not-allowed opacity-60`;\n }\n if (this._isInvalid()) {\n return `${base} ${s.minH} border-red-400 focus-within:ring-2 focus-within:ring-red-500/20 bg-white cursor-pointer`;\n }\n return `${base} ${s.minH} border-slate-200 ${resolveColor(this.activeColor()).focusWithin} bg-white cursor-pointer`;\n });\n\n protected readonly _singleDisplayClass = computed(() => {\n const s = this._sizeConfig();\n const color = this._hasValue() ? 'text-slate-700' : 'text-gray-400';\n return `flex-1 ${s.px} ${s.text} ${color} truncate`;\n });\n\n protected readonly _tagContainerClass = computed(() => {\n const s = this._sizeConfig();\n return `flex flex-wrap flex-1 items-center ${s.py} pl-3 pr-10 ${s.gap}`;\n });\n\n protected readonly _placeholderClass = computed(() =>\n `${this._sizeConfig().text} text-gray-400`,\n );\n\n protected readonly _chevronBtnClass = computed(() =>\n this._isOpen() ? 'transition-transform duration-200 rotate-180' : 'transition-transform duration-200',\n );\n\n protected readonly _panelClass = computed(() =>\n 'w-full bg-white rounded-xl shadow-xl border border-slate-200 overflow-hidden',\n );\n\n\n // ── Helpers ────────────────────────────────────────────────────────────────\n protected _isSelected(value: string | number): boolean {\n return this._selectedVals().includes(value);\n }\n\n protected _optionClass(opt: ClxSelectOption): string {\n const base = 'w-full flex items-center gap-2 px-3 py-1.5 text-sm rounded-lg transition-colors';\n if (opt.disabled) {\n return `${base} text-gray-300 cursor-not-allowed`;\n }\n if (this._isSelected(opt.value)) {\n const t = resolveColor(this.activeColor());\n return `${base} ${t.bgSubtle} ${t.textSubtle} font-medium cursor-pointer`;\n }\n return `${base} text-slate-700 ${resolveColor(this.activeColor()).hoverBgMuted} cursor-pointer`;\n }\n\n // ── Panel control ──────────────────────────────────────────────────────────\n protected _togglePanel(): void {\n this._isOpen() ? this._closePanel() : this._openPanel();\n }\n\n private _openPanel(): void {\n this._overlayWidthPx.set(Math.round(this._el.nativeElement.getBoundingClientRect().width));\n if (!this.async()) this._searchControl.setValue('', { emitEvent: false });\n this._isOpen.set(true);\n }\n\n protected _closePanel(): void {\n this._isOpen.set(false);\n this._onTouched();\n this._wasTouched.set(true);\n }\n\n // ── Selection ──────────────────────────────────────────────────────────────\n protected _selectOption(opt: ClxSelectOption): void {\n if (opt.disabled) return;\n const val = opt.value;\n if (this.multiple()) {\n const current = this._selectedVals();\n const next = current.includes(val)\n ? current.filter(v => v !== val)\n : [...current, val];\n this._selectedVals.set(next);\n this._onChange(next);\n } else {\n this._selectedVals.set([val]);\n this._onChange(val);\n this._closePanel();\n }\n }\n\n protected _deselect(value: string | number): void {\n const next = this._selectedVals().filter(v => v !== value);\n this._selectedVals.set(next);\n this._onChange(this.multiple() ? next : (next[0] ?? null));\n }\n\n protected _clearAll(): void {\n this._selectedVals.set([]);\n this._onChange(this.multiple() ? [] : null);\n }\n\n // ── Events ─────────────────────────────────────────────────────────────────\n protected _onTriggerKeydown(event: KeyboardEvent): void {\n if ((event.key === 'Enter' || event.key === ' ') && !this._disabled()) {\n this._togglePanel();\n event.preventDefault();\n }\n }\n\n protected _onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._closePanel();\n }\n\n @HostListener('keydown.escape')\n onEscape(): void {\n if (this._isOpen()) this._closePanel();\n }\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n writeValue(val: string | number | (string | number)[] | null): void {\n if (val === null || val === undefined) {\n this._selectedVals.set([]);\n } else if (Array.isArray(val)) {\n this._selectedVals.set(val);\n } else {\n this._selectedVals.set([val]);\n }\n }\n\n registerOnChange(fn: (v: string | number | (string | number)[] | null) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type {\n ClxFilterField,\n ClxFilterValue,\n ClxFilterValues,\n ClxFilterChangeEvent,\n} from '../../../types/clx-filter-panel.types';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxCheckboxComponent } from '../../forms/clx-checkbox/clx-checkbox.component';\nimport { ClxSliderComponent } from '../../forms/clx-slider/clx-slider.component';\nimport { ClxRadioGroupComponent } from '../../forms/clx-radio/clx-radio-group.component';\nimport { ClxRadioComponent } from '../../forms/clx-radio/clx-radio.component';\nimport { ClxSelectComponent } from '../../forms/clx-select/clx-select.component';\n\n@Component({\n selector: 'clx-filter-panel',\n standalone: true,\n imports: [FormsModule, ClxIconComponent, ClxButtonComponent, ClxCheckboxComponent, ClxSliderComponent, ClxRadioGroupComponent, ClxRadioComponent, ClxSelectComponent],\n template: `\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-slate-100\">\n <div class=\"flex items-center gap-2\">\n <span clx-icon name=\"filter_list\" size=\"sm\" class=\"text-slate-500\"></span>\n <span class=\"text-sm font-semibold text-slate-700\">Filtros</span>\n @if (_activeCount() > 0) {\n <span [class]=\"_badgeCls()\">{{ _activeCount() }}</span>\n }\n </div>\n @if (_activeCount() > 0) {\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"sm\" (click)=\"_reset()\">\n Limpiar\n </button>\n }\n </div>\n\n <!-- Fields -->\n <div class=\"overflow-y-auto flex-1\">\n @for (field of fields(); track field.key) {\n <div class=\"border-b border-slate-100 last:border-0\">\n\n <!-- Field header -->\n <button\n type=\"button\"\n class=\"w-full flex items-center justify-between px-4 py-3 text-sm font-medium text-slate-700 hover:bg-slate-50 transition-colors\"\n (click)=\"_toggleField(field.key)\">\n <span>{{ field.label }}</span>\n <div class=\"flex items-center gap-1.5\">\n @if (_hasValue(field.key)) {\n <span [class]=\"_fieldBadgeCls()\">{{ _valueLabel(field) }}</span>\n }\n <span clx-icon\n [name]=\"_isCollapsed(field.key) ? 'expand_more' : 'expand_less'\"\n size=\"sm\" class=\"text-slate-400\"></span>\n </div>\n </button>\n\n <!-- Field body -->\n @if (!_isCollapsed(field.key)) {\n <div class=\"px-4 pb-3 space-y-2\">\n\n <!-- Checkbox group -->\n @if (field.type === 'checkbox' && field.options) {\n @for (opt of field.options; track opt.value) {\n <label class=\"flex items-center gap-2.5 cursor-pointer group\">\n <clx-checkbox\n [color]=\"color()\"\n [ngModel]=\"_isChecked(field.key, opt.value)\"\n (ngModelChange)=\"_toggleCheck(field.key, opt.value, $event)\">\n </clx-checkbox>\n <span class=\"text-sm text-slate-600 flex-1\">{{ opt.label }}</span>\n @if (opt.count !== undefined) {\n <span class=\"text-xs text-slate-400\">{{ opt.count }}</span>\n }\n </label>\n }\n }\n\n <!-- Radio group -->\n @if (field.type === 'radio' && field.options) {\n <clx-radio-group\n [color]=\"color()\"\n variant=\"solid\"\n size=\"sm\"\n direction=\"vertical\"\n [ngModel]=\"_getValue(field.key)\"\n (ngModelChange)=\"_set(field.key, $event)\">\n @for (opt of field.options; track opt.value) {\n <div class=\"flex items-center gap-2.5\">\n <clx-radio [value]=\"opt.value\" [label]=\"opt.label\" />\n @if (opt.count !== undefined) {\n <span class=\"text-xs text-slate-400 ml-auto\">{{ opt.count }}</span>\n }\n </div>\n }\n </clx-radio-group>\n }\n\n <!-- Range slider — min -->\n @if (field.type === 'range') {\n @let rv = _getRangeValue(field);\n <div class=\"space-y-3\">\n <clx-slider\n [label]=\"'Mín: ' + (field.unit ?? '') + rv.min\"\n [activeColor]=\"color()\"\n [min]=\"field.min ?? 0\" [max]=\"field.max ?? 100\" [step]=\"field.step ?? 1\"\n [ngModel]=\"rv.min\"\n (ngModelChange)=\"_setRange(field.key, $event, rv.max, field)\"\n size=\"sm\" />\n <clx-slider\n [label]=\"'Máx: ' + (field.unit ?? '') + rv.max\"\n [activeColor]=\"color()\"\n [min]=\"field.min ?? 0\" [max]=\"field.max ?? 100\" [step]=\"field.step ?? 1\"\n [ngModel]=\"rv.max\"\n (ngModelChange)=\"_setRange(field.key, rv.min, $event, field)\"\n size=\"sm\" />\n </div>\n }\n\n <!-- Select -->\n @if (field.type === 'select' && field.options) {\n <clx-select\n [options]=\"field.options\"\n [activeColor]=\"color()\"\n size=\"sm\"\n placeholder=\"Todos\"\n [ngModel]=\"_getValue(field.key)\"\n (ngModelChange)=\"_set(field.key, $event || null)\">\n </clx-select>\n }\n\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Apply footer -->\n @if (showApply()) {\n <div class=\"px-4 py-3 border-t border-slate-100 flex gap-2\">\n <button clx-button variant=\"solid\" [color]=\"color()\" size=\"sm\" class=\"flex-1\" (click)=\"_apply()\">\n Aplicar filtros\n </button>\n </div>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col bg-white border border-slate-200 rounded-xl overflow-hidden' },\n})\nexport class ClxFilterPanelComponent {\n readonly fields = input.required<ClxFilterField[]>();\n readonly color = input<ClxColorInput>('indigo');\n readonly showApply = input<boolean>(false);\n\n readonly values = model<ClxFilterValues>({});\n\n readonly filterChange = output<ClxFilterChangeEvent>();\n readonly applyChange = output<ClxFilterValues>();\n\n private readonly _collapsed = signal<Record<string, boolean>>({});\n\n protected readonly _activeCount = computed(() => {\n const vals = this.values();\n return Object.values(vals).filter(v => {\n if (v === null || v === undefined || v === '') return false;\n if (Array.isArray(v)) return v.length > 0;\n return true;\n }).length;\n });\n\n protected _isCollapsed(key: string): boolean {\n const c = this._collapsed();\n return key in c ? c[key] : (this.fields().find(f => f.key === key)?.collapsed ?? false);\n }\n\n protected _toggleField(key: string): void {\n this._collapsed.update(c => ({ ...c, [key]: !this._isCollapsed(key) }));\n }\n\n protected _hasValue(key: string): boolean {\n const v = this.values()[key];\n if (!v && v !== 0) return false;\n if (Array.isArray(v)) return v.length > 0;\n return true;\n }\n\n protected _getValue(key: string): ClxFilterValue {\n return this.values()[key] ?? null;\n }\n\n protected _getRangeValue(field: ClxFilterField): { min: number; max: number } {\n const v = this.values()[field.key] as { min: number; max: number } | undefined;\n return { min: v?.min ?? field.min ?? 0, max: v?.max ?? field.max ?? 100 };\n }\n\n protected _isChecked(key: string, val: string | number): boolean {\n const v = this.values()[key];\n return Array.isArray(v) && v.includes(val);\n }\n\n protected _valueLabel(field: ClxFilterField): string {\n const v = this.values()[field.key];\n if (!v && v !== 0) return '';\n if (Array.isArray(v)) return `${v.length}`;\n if (typeof v === 'object' && 'min' in (v as object)) {\n const r = v as { min: number; max: number };\n return `${field.unit ?? ''}${r.min} – ${field.unit ?? ''}${r.max}`;\n }\n const opt = field.options?.find(o => o.value === v);\n return opt?.label ?? String(v);\n }\n\n protected _toggleCheck(key: string, val: string | number, checked: boolean): void {\n const cur = (this.values()[key] as (string | number)[]) ?? [];\n const next = checked ? [...cur, val] : cur.filter(v => v !== val);\n this._set(key, next);\n }\n\n protected _setRange(key: string, min: number, max: number, field: ClxFilterField): void {\n const safeMin = Math.min(min, max);\n const safeMax = Math.max(min, max);\n this._set(key, { min: safeMin, max: safeMax });\n }\n\n protected _set(key: string, value: ClxFilterValue): void {\n const next = { ...this.values(), [key]: value };\n this.values.set(next);\n this.filterChange.emit({ key, value, all: next });\n }\n\n protected _reset(): void {\n this.values.set({});\n this.filterChange.emit({ key: '', value: null, all: {} });\n }\n\n protected _apply(): void {\n this.applyChange.emit(this.values());\n }\n\n protected _badgeCls(): string {\n const t = resolveColor(this.color());\n return `inline-flex items-center justify-center w-5 h-5 text-xs font-bold rounded-full ${t.bg} ${t.text}`;\n }\n\n protected _fieldBadgeCls(): string {\n const t = resolveColor(this.color());\n return `text-xs px-1.5 py-0.5 rounded-full font-medium ${t.bgSubtle} ${t.textSubtle}`;\n }\n\n}\n","import { InjectionToken } from '@angular/core';\nimport type { ClxAlertOptions, ClxAlertResult, ClxAlertType } from '../types/clx-alert.types';\nimport type { ClxButtonColor } from '../types/clx-button.types';\n\n// ─── CDK overlay token (carries the resolved ref into the component) ──────────\nexport const CLX_ALERT_OPTIONS = new InjectionToken<ClxAlertOptions>('CLX_ALERT_OPTIONS');\nexport const CLX_ALERT_RESOLVE = new InjectionToken<(result: ClxAlertResult) => void>('CLX_ALERT_RESOLVE');\n\n// ─── Icon per alert type ──────────────────────────────────────────────────────\nexport const ALERT_ICON_MAP: Record<ClxAlertType, string> = {\n success: 'check_circle',\n danger: 'cancel',\n warning: 'warning',\n info: 'info',\n confirm: 'help',\n};\n\n// ─── Icon circle background color per alert type ──────────────────────────────\nexport const ALERT_ICON_BG_MAP: Record<ClxAlertType, string> = {\n success: 'bg-green-100',\n danger: 'bg-red-100',\n warning: 'bg-amber-100',\n info: 'bg-sky-100',\n confirm: 'bg-indigo-100',\n};\n\n// ─── Icon foreground color per alert type ─────────────────────────────────────\nexport const ALERT_ICON_COLOR_MAP: Record<ClxAlertType, string> = {\n success: 'text-green-500',\n danger: 'text-red-500',\n warning: 'text-amber-500',\n info: 'text-sky-500',\n confirm: 'text-indigo-500',\n};\n\n// ─── Progress-bar color per alert type ────────────────────────────────────────\nexport const ALERT_PROGRESS_COLOR_MAP: Record<ClxAlertType, string> = {\n success: 'bg-green-400',\n danger: 'bg-red-400',\n warning: 'bg-amber-400',\n info: 'bg-sky-400',\n confirm: 'bg-indigo-400',\n};\n\n// ─── Default confirm-button color per alert type ──────────────────────────────\nexport const ALERT_CONFIRM_COLOR_MAP: Record<ClxAlertType, ClxButtonColor> = {\n success: 'green',\n danger: 'red',\n warning: 'amber',\n info: 'sky',\n confirm: 'indigo',\n};\n\n// ─── Global defaults — merged into every open() call ─────────────────────────\nexport const ALERT_DEFAULTS: Required<\n Pick<ClxAlertOptions, 'animationIn' | 'animationOut' | 'animationDuration' | 'backdrop' | 'disableClose'>\n> = {\n animationIn: 'zoomIn',\n animationOut: 'zoomOut',\n animationDuration: 400,\n backdrop: true,\n disableClose: false,\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n NgZone,\n OnDestroy,\n OnInit,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgStyle } from '@angular/common';\n\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxAnimateService } from '../../../services/clx-animate.service';\n\nimport {\n CLX_ALERT_OPTIONS,\n CLX_ALERT_RESOLVE,\n ALERT_ICON_MAP,\n ALERT_ICON_BG_MAP,\n ALERT_ICON_COLOR_MAP,\n ALERT_PROGRESS_COLOR_MAP,\n ALERT_CONFIRM_COLOR_MAP,\n ALERT_DEFAULTS,\n} from '../../../configs/alert.config';\nimport type { ClxAlertOptions, ClxAlertType } from '../../../types/clx-alert.types';\nimport type { ClxButtonColor, ClxButtonVariant } from '../../../types/clx-button.types';\n\n@Component({\n selector: 'clx-alert',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, NgStyle],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- Dialog card -->\n <div\n #card\n class=\"clx-alert-card relative w-full max-w-sm mx-auto bg-white rounded-3xl shadow-2xl overflow-hidden flex flex-col items-center text-center px-8 pt-8 pb-6 gap-4\"\n >\n <!-- Icon circle -->\n <div class=\"w-20 h-20 rounded-full flex items-center justify-center shrink-0\"\n [class]=\"_iconBg()\">\n <span clx-icon [name]=\"_icon()\" size=\"xl\" [class]=\"_iconColor()\"></span>\n </div>\n\n <!-- Title -->\n @if (_title()) {\n <h2\n class=\"text-lg font-bold text-gray-800 leading-snug\"\n [innerHTML]=\"_title()\">\n </h2>\n }\n\n <!-- Message -->\n @if (_message()) {\n <p\n class=\"text-sm text-gray-500 leading-relaxed\"\n [innerHTML]=\"_message()\">\n </p>\n }\n\n <!-- Buttons -->\n <div class=\"flex items-center justify-center gap-3 w-full mt-1\">\n\n @if (_showCancel()) {\n <button\n clx-button\n [color]=\"_cancelColor()\"\n [variant]=\"_cancelVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"dismiss()\"\n >\n {{ _cancelText() }}\n </button>\n }\n\n <button\n clx-button\n [color]=\"_confirmColor()\"\n variant=\"solid\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"confirm()\"\n >\n {{ _confirmText() }}\n </button>\n\n </div>\n\n <!-- Timer progress bar -->\n @if (_timerTotal() > 0) {\n <div class=\"absolute bottom-0 left-0 right-0 h-1 bg-gray-100 rounded-b-3xl overflow-hidden\">\n <div\n class=\"h-full transition-none rounded-b-3xl\"\n [class]=\"_progressColor()\"\n [ngStyle]=\"{ width: _progressPct() + '%' }\">\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n clx-alert {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n }\n .clx-alert-card {\n will-change: transform, opacity;\n }\n `],\n})\nexport class ClxAlertComponent implements OnInit, OnDestroy {\n private readonly _opts = inject<ClxAlertOptions>(CLX_ALERT_OPTIONS);\n private readonly _resolve = inject<(r: boolean) => void>(CLX_ALERT_RESOLVE);\n private readonly _animate = inject(ClxAnimateService);\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _zone: NgZone;\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n }\n\n // ─── Resolved options ─────────────────────────────────────────────────────\n private get _type(): ClxAlertType { return this._opts.type ?? 'info'; }\n\n protected readonly _icon = signal(ALERT_ICON_MAP[this._type]);\n protected readonly _iconBg = signal(ALERT_ICON_BG_MAP[this._type]);\n protected readonly _iconColor = signal(ALERT_ICON_COLOR_MAP[this._type]);\n protected readonly _progressColor = signal(ALERT_PROGRESS_COLOR_MAP[this._type]);\n\n protected readonly _title = signal(this._opts.title ?? '');\n protected readonly _message = signal(this._opts.message ?? '');\n\n protected readonly _showCancel = signal(\n this._opts.showCancelButton ?? this._opts.type === 'confirm',\n );\n\n protected readonly _confirmText = signal(this._opts.confirmButton?.text ?? 'Aceptar');\n protected readonly _confirmColor = signal<ClxButtonColor>(\n this._opts.confirmButton?.color ?? ALERT_CONFIRM_COLOR_MAP[this._type],\n );\n\n protected readonly _cancelText = signal(this._opts.cancelButton?.text ?? 'Cancelar');\n protected readonly _cancelColor = signal<ClxButtonColor>(this._opts.cancelButton?.color ?? 'slate');\n protected readonly _cancelVariant = signal<ClxButtonVariant>(this._opts.cancelButton?.variant ?? 'ghost');\n\n // ─── Timer state ─────────────────────────────────────────────────────────\n protected readonly _timerTotal = signal(this._opts.timer ?? 0);\n protected readonly _progressPct = signal(100);\n private _timerHandle: ReturnType<typeof setInterval> | null = null;\n private _destroyed = false;\n\n // ─── Card element reference ───────────────────────────────────────────────\n private get _card(): HTMLElement {\n return this._el.nativeElement.querySelector('.clx-alert-card') as HTMLElement;\n }\n\n // ─── Lifecycle ────────────────────────────────────────────────────────────\n ngOnInit(): void {\n const card = this._card;\n const animIn = this._opts.animationIn ?? ALERT_DEFAULTS.animationIn;\n const duration = this._opts.animationDuration ?? ALERT_DEFAULTS.animationDuration;\n\n this._animate.animate(card, { animation: animIn, duration, trigger: 'manual' });\n\n if (this._timerTotal() > 0) {\n this._startTimer();\n }\n }\n\n ngOnDestroy(): void {\n this._destroyed = true;\n this._stopTimer();\n }\n\n // ─── Public actions ───────────────────────────────────────────────────────\n confirm(): void { this._close(true); }\n dismiss(): void { this._close(false); }\n\n // ─── Internal ─────────────────────────────────────────────────────────────\n private _close(result: boolean): void {\n if (this._destroyed) return;\n this._stopTimer();\n\n const card = this._card;\n const animOut = this._opts.animationOut ?? ALERT_DEFAULTS.animationOut;\n const duration = this._opts.animationDuration ?? ALERT_DEFAULTS.animationDuration;\n\n this._animate\n .animate(card, { animation: animOut, duration, trigger: 'manual', fillMode: 'forwards' })\n .then(() => this._resolve(result));\n }\n\n private _startTimer(): void {\n const total = this._timerTotal();\n const tickMs = 50;\n let elapsed = 0;\n\n this._zone.runOutsideAngular(() => {\n this._timerHandle = setInterval(() => {\n if (this._destroyed) { this._stopTimer(); return; }\n elapsed += tickMs;\n const pct = Math.max(0, 100 - (elapsed / total) * 100);\n this._zone.run(() => this._progressPct.set(pct));\n if (elapsed >= total) {\n this._stopTimer();\n this._zone.run(() => this._close(false));\n }\n }, tickMs);\n });\n }\n\n private _stopTimer(): void {\n if (this._timerHandle !== null) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { ClxModalSize, ClxModalRef } from '../types/clx-modal.types';\n\nexport const MODAL_SIZE_MAP: Record<ClxModalSize, string> = {\n sm: 'w-full max-w-[400px]',\n md: 'w-full max-w-[600px]',\n lg: 'w-full max-w-[900px]',\n full: 'w-screen h-screen max-w-none rounded-none',\n};\n\nexport const MODAL_CONTAINER_CLASS =\n 'flex flex-col bg-white rounded-2xl shadow-2xl overflow-hidden';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const CLX_MODAL_DATA = new InjectionToken<any>('CLX_MODAL_DATA');\n\nexport const CLX_MODAL_SIZE = new InjectionToken<ClxModalSize>('CLX_MODAL_SIZE');\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const CLX_MODAL_REF = new InjectionToken<ClxModalRef<any>>('CLX_MODAL_REF');\n\n// ─── Animation config token (carries animationIn/Out/Duration into the wrapper) ─\nexport interface ClxModalAnimConfig {\n animationIn: string;\n animationOut: string;\n animationDuration: number;\n}\n\nexport const CLX_MODAL_ANIM_CONFIG = new InjectionToken<ClxModalAnimConfig>('CLX_MODAL_ANIM_CONFIG');\n\nexport const MODAL_ANIM_DEFAULTS: ClxModalAnimConfig = {\n animationIn: 'fadeInDown',\n animationOut: 'fadeOutUp',\n animationDuration: 300,\n};\n","import { InjectionToken } from '@angular/core';\nimport type { ClxDrawerSize } from '../types/clx-drawer.types';\n\nexport const DRAWER_SIZE_MAP: Record<ClxDrawerSize, string> = {\n sm: 'w-[320px]',\n md: 'w-[420px]',\n lg: 'w-[560px]',\n};\n\nexport const DRAWER_WIDTH_MAP: Record<ClxDrawerSize, string> = {\n sm: '320px',\n md: '420px',\n lg: '560px',\n};\n\nexport const DRAWER_CONTAINER_CLASS =\n 'flex flex-col bg-white shadow-2xl overflow-hidden h-screen';\n\nexport const CLX_DRAWER_SIZE = new InjectionToken<ClxDrawerSize>('CLX_DRAWER_SIZE');\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { CLX_MODAL_REF } from '../../../configs/modal.config';\nimport { DRAWER_CONTAINER_CLASS, DRAWER_SIZE_MAP, CLX_DRAWER_SIZE } from '../../../configs/drawer.config';\nimport type { ClxDrawerButtonOptions, ClxDrawerSize } from '../../../types/clx-drawer.types';\n\n@Component({\n selector: 'clx-drawer',\n standalone: true,\n imports: [ClxButtonComponent],\n template: `\n <!-- Header -->\n <div class=\"flex items-center gap-3 px-6 py-4 border-b border-slate-100 shrink-0\">\n <div class=\"flex-1 min-w-0\">\n <ng-content select=\"[clx-drawer-title]\" />\n </div>\n @if (showClose()) {\n <button\n clx-button\n variant=\"ghost\"\n color=\"zinc\"\n shape=\"circle\"\n size=\"sm\"\n icon=\"close\"\n [iconOnly]=\"true\"\n class=\"shrink-0 -mr-1\"\n (click)=\"_close()\">\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto px-6 py-5\">\n <ng-content />\n </div>\n\n <!-- Footer -->\n <div class=\"flex items-center justify-end gap-3 px-6 py-4 border-t border-slate-100 shrink-0 bg-slate-50/60\">\n @if (_hasBuiltInButtons()) {\n @if (showCancelButton()) {\n <button\n clx-button\n [color]=\"_cancelColor()\"\n [variant]=\"_cancelVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"cancelClick.emit()\">\n {{ _cancelText() }}\n </button>\n }\n <button\n clx-button\n [color]=\"_confirmColor()\"\n [variant]=\"_confirmVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"confirmClick.emit()\">\n {{ _confirmText() }}\n </button>\n } @else {\n <ng-content select=\"[clx-drawer-footer]\" />\n }\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n})\nexport class ClxDrawerComponent {\n readonly size = input<ClxDrawerSize | null>(null);\n readonly showClose = input<boolean>(true);\n readonly confirmButton = input<ClxDrawerButtonOptions | undefined>(undefined);\n readonly cancelButton = input<ClxDrawerButtonOptions | undefined>(undefined);\n readonly showCancelButton = input<boolean>(false);\n\n readonly confirmClick = output<void>();\n readonly cancelClick = output<void>();\n\n private readonly _modalRef = inject(CLX_MODAL_REF, { optional: true });\n private readonly _sizeToken = inject(CLX_DRAWER_SIZE, { optional: true });\n\n protected readonly _resolvedSize = computed(() =>\n this.size() ?? this._sizeToken ?? 'md'\n );\n\n protected readonly _hostClass = computed(() =>\n `${DRAWER_CONTAINER_CLASS} ${DRAWER_SIZE_MAP[this._resolvedSize()]}`,\n );\n\n protected readonly _hasBuiltInButtons = computed(() => !!this.confirmButton());\n\n protected readonly _confirmText = computed(() => this.confirmButton()?.text ?? 'Aceptar');\n protected readonly _confirmColor = computed(() => this.confirmButton()?.color ?? 'indigo');\n protected readonly _confirmVariant = computed(() => this.confirmButton()?.variant ?? 'solid');\n\n protected readonly _cancelText = computed(() => this.cancelButton()?.text ?? 'Cancelar');\n protected readonly _cancelColor = computed(() => this.cancelButton()?.color ?? 'slate');\n protected readonly _cancelVariant = computed(() => this.cancelButton()?.variant ?? 'ghost');\n\n protected _close(): void {\n this._modalRef?.close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { CLX_MODAL_REF, CLX_MODAL_SIZE, MODAL_CONTAINER_CLASS, MODAL_SIZE_MAP } from '../../../configs/modal.config';\nimport type { ClxModalButtonOptions, ClxModalSize } from '../../../types/clx-modal.types';\n\n@Component({\n selector: 'clx-modal',\n standalone: true,\n imports: [ClxButtonComponent],\n template: `\n <!-- Header -->\n <div class=\"flex items-center gap-3 px-6 py-4 border-b border-slate-100 shrink-0\">\n <div class=\"flex-1 min-w-0\">\n <ng-content select=\"[clx-modal-title]\" />\n </div>\n @if (showClose()) {\n <button\n clx-button\n variant=\"ghost\"\n color=\"zinc\"\n shape=\"circle\"\n size=\"md\"\n icon=\"close\"\n [iconOnly]=\"true\"\n class=\"shrink-0 -mr-1\"\n (click)=\"_close()\">\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto px-6 py-5\">\n <ng-content />\n </div>\n\n <!-- Footer -->\n <div class=\"flex items-center justify-end gap-3 px-6 py-4 border-t border-slate-100 shrink-0 bg-slate-50/60\">\n @if (_hasBuiltInButtons()) {\n @if (showCancelButton()) {\n <button\n clx-button\n [color]=\"_cancelColor()\"\n [variant]=\"_cancelVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"cancelClick.emit()\">\n {{ _cancelText() }}\n </button>\n }\n <button\n clx-button\n [color]=\"_confirmColor()\"\n [variant]=\"_confirmVariant()\"\n size=\"md\"\n shape=\"pill\"\n (click)=\"confirmClick.emit()\">\n {{ _confirmText() }}\n </button>\n } @else {\n <ng-content select=\"[clx-modal-footer]\" />\n }\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n})\nexport class ClxModalComponent {\n readonly size = input<ClxModalSize | null>(null);\n readonly showClose = input<boolean>(true);\n readonly confirmButton = input<ClxModalButtonOptions | undefined>(undefined);\n readonly cancelButton = input<ClxModalButtonOptions | undefined>(undefined);\n readonly showCancelButton = input<boolean>(false);\n\n readonly confirmClick = output<void>();\n readonly cancelClick = output<void>();\n\n private readonly _modalRef = inject(CLX_MODAL_REF, { optional: true });\n private readonly _sizeToken = inject(CLX_MODAL_SIZE, { optional: true });\n\n protected readonly _resolvedSize = computed(() =>\n this.size() ?? this._sizeToken ?? 'md'\n );\n\n protected readonly _hostClass = computed(() =>\n `${MODAL_CONTAINER_CLASS} ${MODAL_SIZE_MAP[this._resolvedSize()]} max-h-[90vh]`,\n );\n\n protected readonly _hasBuiltInButtons = computed(() => !!this.confirmButton());\n\n protected readonly _confirmText = computed(() => this.confirmButton()?.text ?? 'Aceptar');\n protected readonly _confirmColor = computed(() => this.confirmButton()?.color ?? 'indigo');\n protected readonly _confirmVariant = computed(() => this.confirmButton()?.variant ?? 'solid');\n\n protected readonly _cancelText = computed(() => this.cancelButton()?.text ?? 'Cancelar');\n protected readonly _cancelColor = computed(() => this.cancelButton()?.color ?? 'slate');\n protected readonly _cancelVariant = computed(() => this.cancelButton()?.variant ?? 'ghost');\n\n protected _close(): void {\n this._modalRef?.close();\n }\n}\n","import type { ClxColor } from '../types/clx-color.types';\nimport type { ClxPaginationSize } from '../types/clx-pagination.types';\n\n// ── Size map ──────────────────────────────────────────────────────────────────\nexport const PAGINATION_SIZE_MAP: Record<ClxPaginationSize, {\n btnSize: 'xs' | 'sm' | 'md' | 'lg';\n selectSize: 'sm' | 'md' | 'lg';\n text: string;\n gap: string;\n}> = {\n sm: { btnSize: 'sm', selectSize: 'sm', text: 'text-xs', gap: 'gap-2' },\n md: { btnSize: 'md', selectSize: 'sm', text: 'text-sm', gap: 'gap-3' },\n lg: { btnSize: 'lg', selectSize: 'md', text: 'text-sm', gap: 'gap-4' },\n};\n\n// ── Ellipsis color ─────────────────────────────────────────────────────────────\nexport const PAGINATION_ELLIPSIS_CLASS: Record<ClxColor, string> = {\n red: 'text-slate-400',\n orange: 'text-slate-400',\n amber: 'text-slate-400',\n yellow: 'text-slate-400',\n lime: 'text-slate-400',\n green: 'text-slate-400',\n emerald: 'text-slate-400',\n teal: 'text-slate-400',\n cyan: 'text-slate-400',\n sky: 'text-slate-400',\n blue: 'text-slate-400',\n indigo: 'text-slate-400',\n violet: 'text-slate-400',\n purple: 'text-slate-400',\n fuchsia: 'text-slate-400',\n pink: 'text-slate-400',\n rose: 'text-slate-400',\n slate: 'text-slate-400',\n gray: 'text-slate-400',\n zinc: 'text-slate-400',\n neutral: 'text-slate-400',\n stone: 'text-slate-400',\n white: 'text-slate-400',\n};\n\n// ── Default page size options ─────────────────────────────────────────────────\nexport const PAGINATION_DEFAULT_PAGE_SIZE_OPTIONS = [5, 10, 25, 50, 100];\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxPageChangeEvent, ClxPageSizeChangeEvent, ClxPaginationSize } from '../../../types/clx-pagination.types';\nimport { PAGINATION_SIZE_MAP, PAGINATION_DEFAULT_PAGE_SIZE_OPTIONS } from '../../../configs/pagination.config';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxSelectComponent } from '../../forms/clx-select/clx-select.component';\nimport type { ClxSelectOption } from '../../../types/clx-select.types';\n\n\ntype PageItem =\n | { type: 'page'; page: number }\n | { type: 'ellipsis'; id: string };\n\n@Component({\n selector: 'clx-pagination',\n standalone: true,\n imports: [ReactiveFormsModule, ClxButtonComponent, ClxSelectComponent],\n template: `\n <div [class]=\"_wrapClass()\">\n\n <!-- ── Info: \"1 - 5 de 25 registros\" ─────────────────────────────────── -->\n <span [class]=\"_infoClass()\">{{ _infoText() }}</span>\n\n <!-- ── Controles centrales ────────────────────────────────────────────── -->\n <div class=\"flex items-center gap-1\">\n\n <!-- |<< Primera página -->\n <button\n clx-button\n variant=\"ghost\"\n color=\"slate\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n icon=\"first_page\"\n [iconOnly]=\"true\"\n [disabled]=\"currentPage() <= 1\"\n (click)=\"_goTo(1)\">\n </button>\n\n <!-- < Anterior -->\n <button\n clx-button\n variant=\"ghost\"\n color=\"slate\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n icon=\"chevron_left\"\n [iconOnly]=\"true\"\n [disabled]=\"currentPage() <= 1\"\n (click)=\"_goTo(currentPage() - 1)\">\n </button>\n\n <!-- Botones de página con lógica de puntos suspensivos -->\n @for (item of _pageItems(); track item.type === 'page' ? item.page : item.id) {\n @if (item.type === 'page') {\n <button\n clx-button\n [variant]=\"currentPage() === item.page ? 'solid' : 'ghost'\"\n [color]=\"currentPage() === item.page ? color() : 'slate'\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n [iconOnly]=\"true\"\n (click)=\"_goTo(item.page)\">\n {{ item.page }}\n </button>\n } @else {\n <!-- Ellipsis: misma altura/ancho que botón, no interactivo -->\n <span [class]=\"_ellipsisClass()\">…</span>\n }\n }\n\n <!-- > Siguiente -->\n <button\n clx-button\n variant=\"ghost\"\n color=\"slate\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n icon=\"chevron_right\"\n [iconOnly]=\"true\"\n [disabled]=\"currentPage() >= totalPages()\"\n (click)=\"_goTo(currentPage() + 1)\">\n </button>\n\n <!-- >>| Última página -->\n <button\n clx-button\n variant=\"ghost\"\n color=\"slate\"\n [size]=\"_cfg().btnSize\"\n shape=\"circle\"\n icon=\"last_page\"\n [iconOnly]=\"true\"\n [disabled]=\"currentPage() >= totalPages()\"\n (click)=\"_goTo(totalPages())\">\n </button>\n\n </div>\n\n <!-- ── Selector de \"items por página\" ────────────────────────────────── -->\n @if (showPageSize()) {\n <div class=\"flex items-center gap-2\">\n <span [class]=\"_infoClass()\">items por página</span>\n <div class=\"w-24\">\n <clx-select\n [options]=\"_pageSizeOptions()\"\n [activeColor]=\"color()\"\n [size]=\"_cfg().selectSize\"\n [formControl]=\"_pageSizeCtrl\">\n </clx-select>\n </div>\n </div>\n }\n\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxPaginationComponent {\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly totalItems = input.required<number>();\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxPaginationSize>('md');\n readonly showPageSize = input<boolean>(true);\n /** Opciones manuales. Si está vacío (default) se calculan automáticamente desde totalItems. */\n readonly pageSizeOptions = input<number[]>([]);\n\n // ── Models ─────────────────────────────────────────────────────────────────\n readonly currentPage = model<number>(1);\n readonly pageSize = model<number>(10);\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n readonly pageChange = output<ClxPageChangeEvent>();\n readonly sizeChange = output<ClxPageSizeChangeEvent>();\n\n private readonly _destroyRef = inject(DestroyRef);\n\n // ── FormControl interno para el select de pageSize ─────────────────────────\n protected readonly _pageSizeCtrl = new FormControl<number | null>(null);\n\n constructor() {\n // Sincroniza el pageSize model → FormControl cada vez que cambia desde afuera\n effect(() => {\n const ps = this.pageSize();\n if (ps != null && ps !== this._pageSizeCtrl.value) {\n this._pageSizeCtrl.setValue(ps, { emitEvent: false });\n }\n });\n\n // Sincroniza el FormControl → pageSize model cuando el usuario elige\n this._pageSizeCtrl.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(val => {\n const newSize = Number(val);\n if (!val || !Number.isFinite(newSize) || newSize <= 0 || newSize === this.pageSize()) return;\n this.pageSize.set(newSize);\n this.currentPage.set(1);\n this.sizeChange.emit({ pageSize: newSize });\n this.pageChange.emit({ page: 1, pageSize: newSize });\n });\n }\n\n // ── Computed: config por tamaño ────────────────────────────────────────────\n protected readonly _cfg = computed(() => PAGINATION_SIZE_MAP[this.size()]);\n\n // ── Computed: total de páginas ─────────────────────────────────────────────\n readonly totalPages = computed(() => {\n const ps = this.pageSize();\n if (!ps || !Number.isFinite(ps) || ps <= 0) return 1;\n return Math.max(1, Math.ceil(this.totalItems() / ps));\n });\n\n // ── Computed: rango visible ────────────────────────────────────────────────\n private readonly _rangeStart = computed(() => {\n const ps = this.pageSize();\n if (!ps || !Number.isFinite(ps) || ps <= 0) return 1;\n return (this.currentPage() - 1) * ps + 1;\n });\n\n private readonly _rangeEnd = computed(() => {\n const ps = this.pageSize();\n if (!ps || !Number.isFinite(ps) || ps <= 0) return this.totalItems();\n return Math.min(this.currentPage() * ps, this.totalItems());\n });\n\n protected readonly _infoText = computed(() =>\n `${this._rangeStart()} - ${this._rangeEnd()} de ${this.totalItems()} registros`\n );\n\n // ── Computed: opciones del selector de pageSize ────────────────────────────\n protected readonly _pageSizeOptions = computed((): ClxSelectOption[] => {\n const custom = this.pageSizeOptions();\n if (custom.length > 0) {\n return custom.map(n => ({ value: n, label: String(n) }));\n }\n\n const total = this.totalItems();\n const options = new Set<number>();\n const steps = [5, 10, 15, 20, 25, 30, 40, 50, 75, 100, 150, 200, 250, 500, 1000];\n for (const s of steps) {\n if (s < total) options.add(s);\n }\n options.add(total);\n options.add(this.pageSize());\n\n return Array.from(options).sort((a, b) => a - b).map(n => ({ value: n, label: String(n) }));\n });\n\n // ── Computed: lógica de puntos suspensivos ─────────────────────────────────\n protected readonly _pageItems = computed((): PageItem[] => {\n const total = this.totalPages();\n const current = this.currentPage();\n\n if (total <= 3) {\n return Array.from({ length: total }, (_, i) => ({ type: 'page', page: i + 1 }) as PageItem);\n }\n\n // Siempre mostramos: primera, [ellipsis], página central, [ellipsis], última\n // La página central es siempre `current`, salvo en los extremos donde es 1 o total.\n const items: PageItem[] = [];\n\n // Primera\n items.push({ type: 'page', page: 1 });\n\n if (current <= 2) {\n // Cerca del inicio: 1, 2, ..., N\n items.push({ type: 'page', page: 2 });\n items.push({ type: 'ellipsis', id: 'right' });\n } else if (current >= total - 1) {\n // Cerca del final: 1, ..., N-1, N\n items.push({ type: 'ellipsis', id: 'left' });\n items.push({ type: 'page', page: total - 1 });\n } else {\n // En el medio: 1, ..., current, ..., N\n items.push({ type: 'ellipsis', id: 'left' });\n items.push({ type: 'page', page: current });\n items.push({ type: 'ellipsis', id: 'right' });\n }\n\n // Última\n items.push({ type: 'page', page: total });\n\n return items;\n });\n\n // ── Clases ─────────────────────────────────────────────────────────────────\n protected readonly _wrapClass = computed(() =>\n `flex flex-wrap items-center justify-between ${this._cfg().gap}`\n );\n\n protected readonly _infoClass = computed(() =>\n `${this._cfg().text} text-slate-500 whitespace-nowrap`\n );\n\n protected readonly _ellipsisClass = computed(() => {\n const sizes: Record<ClxPaginationSize, string> = {\n sm: 'inline-flex items-center justify-center w-8 h-8 text-xs text-slate-400 select-none',\n md: 'inline-flex items-center justify-center w-9 h-9 text-sm text-slate-400 select-none',\n lg: 'inline-flex items-center justify-center w-10 h-10 text-sm text-slate-400 select-none',\n };\n return sizes[this.size()];\n });\n\n // ── Handlers ───────────────────────────────────────────────────────────────\n protected _goTo(page: number): void {\n const clamped = Math.max(1, Math.min(page, this.totalPages()));\n if (clamped === this.currentPage()) return;\n this.currentPage.set(clamped);\n this.pageChange.emit({ page: clamped, pageSize: this.pageSize() });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { CLX_COLOR_MAP } from '../types/clx-color.types';\nimport type { ClxColor } from '../types/clx-color.types';\nimport type { ClxToastOptions, ClxToastPosition, ClxToastType } from '../types/clx-toast.types';\nimport type { ClxAnimateName } from '../types/clx-animate.types';\n\n// ─── Injection tokens ──────────────────────────────────────────────────────────\nexport const CLX_TOAST_DEFAULTS = new InjectionToken<Partial<ClxToastOptions>>(\n 'CLX_TOAST_DEFAULTS',\n {\n providedIn: 'root',\n factory: () => TOAST_DEFAULTS,\n },\n);\n\n// ─── Global defaults ───────────────────────────────────────────────────────────\nexport const TOAST_DEFAULTS: Required<\n Pick<\n ClxToastOptions,\n | 'type'\n | 'position'\n | 'duration'\n | 'showProgress'\n | 'pauseOnHover'\n | 'animationOut'\n | 'animationDuration'\n >\n> = {\n type: 'indigo',\n position: 'top-right',\n duration: 4000,\n showProgress: true,\n pauseOnHover: true,\n animationOut: 'fadeOut',\n animationDuration: 300,\n};\n\n// ─── Default entry animation per position ─────────────────────────────────────\nexport const TOAST_ANIM_IN_MAP: Record<ClxToastPosition, ClxAnimateName> = {\n 'top-right': 'fadeInRight',\n 'top-left': 'fadeInLeft',\n 'top-center': 'fadeInDown',\n 'bottom-right': 'fadeInRight',\n 'bottom-left': 'fadeInLeft',\n};\n\n// ─── Default icon per color (semantic fallback) ───────────────────────────────\nexport const TOAST_DEFAULT_ICON: Record<ClxColor, string> = {\n red: 'cancel',\n orange: 'warning',\n amber: 'warning',\n yellow: 'warning',\n lime: 'check_circle',\n green: 'check_circle',\n emerald: 'check_circle',\n teal: 'info',\n cyan: 'info',\n sky: 'info',\n blue: 'info',\n indigo: 'info',\n violet: 'info',\n purple: 'info',\n fuchsia: 'info',\n pink: 'info',\n rose: 'cancel',\n slate: 'info',\n gray: 'info',\n zinc: 'info',\n neutral: 'info',\n stone: 'info',\n white: 'info',\n};\n\nconst c = CLX_COLOR_MAP;\n\n// ─── Border color per type ─────────────────────────────────────────────────────\nexport const TOAST_BORDER_MAP: Record<ClxToastType, string> = {\n red: c.red.borderBase,\n orange: c.orange.borderBase,\n amber: c.amber.borderBase,\n yellow: c.yellow.borderBase,\n lime: c.lime.borderBase,\n green: c.green.borderBase,\n emerald: c.emerald.borderBase,\n teal: c.teal.borderBase,\n cyan: c.cyan.borderBase,\n sky: c.sky.borderBase,\n blue: c.blue.borderBase,\n indigo: c.indigo.borderBase,\n violet: c.violet.borderBase,\n purple: c.purple.borderBase,\n fuchsia: c.fuchsia.borderBase,\n pink: c.pink.borderBase,\n rose: c.rose.borderBase,\n slate: c.slate.borderBase,\n gray: c.gray.borderBase,\n zinc: c.zinc.borderBase,\n neutral: c.neutral.borderBase,\n stone: c.stone.borderBase,\n white: c.white.borderBase,\n};\n\n// ─── Icon / title text color per type ─────────────────────────────────────────\nexport const TOAST_COLOR_MAP: Record<ClxToastType, string> = {\n red: c.red.textBase,\n orange: c.orange.textBase,\n amber: c.amber.textBase,\n yellow: c.yellow.textBase,\n lime: c.lime.textBase,\n green: c.green.textBase,\n emerald: c.emerald.textBase,\n teal: c.teal.textBase,\n cyan: c.cyan.textBase,\n sky: c.sky.textBase,\n blue: c.blue.textBase,\n indigo: c.indigo.textBase,\n violet: c.violet.textBase,\n purple: c.purple.textBase,\n fuchsia: c.fuchsia.textBase,\n pink: c.pink.textBase,\n rose: c.rose.textBase,\n slate: c.slate.textBase,\n gray: c.gray.textBase,\n zinc: c.zinc.textBase,\n neutral: c.neutral.textBase,\n stone: c.stone.textBase,\n white: c.white.textBase,\n};\n\n// ─── Progress bar color per type ──────────────────────────────────────────────\nexport const TOAST_PROGRESS_MAP: Record<ClxToastType, string> = {\n red: c.red.bgBase,\n orange: c.orange.bgBase,\n amber: c.amber.bgBase,\n yellow: c.yellow.bgBase,\n lime: c.lime.bgBase,\n green: c.green.bgBase,\n emerald: c.emerald.bgBase,\n teal: c.teal.bgBase,\n cyan: c.cyan.bgBase,\n sky: c.sky.bgBase,\n blue: c.blue.bgBase,\n indigo: c.indigo.bgBase,\n violet: c.violet.bgBase,\n purple: c.purple.bgBase,\n fuchsia: c.fuchsia.bgBase,\n pink: c.pink.bgBase,\n rose: c.rose.bgBase,\n slate: c.slate.bgBase,\n gray: c.gray.bgBase,\n zinc: c.zinc.bgBase,\n neutral: c.neutral.bgBase,\n stone: c.stone.bgBase,\n white: c.white.bgBase,\n};\n\n// ─── Overlay container position classes ───────────────────────────────────────\nexport const TOAST_POSITION_MAP: Record<ClxToastPosition, string> = {\n 'top-right': 'top-4 right-4 items-end',\n 'top-left': 'top-4 left-4 items-start',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-4 right-4 items-end',\n 'bottom-left': 'bottom-4 left-4 items-start',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n OnInit,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgStyle } from '@angular/common';\n\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxAnimateService } from '../../../services/clx-animate.service';\n\nimport {\n TOAST_DEFAULT_ICON,\n TOAST_BORDER_MAP,\n TOAST_COLOR_MAP,\n TOAST_PROGRESS_MAP,\n} from '../../../configs/toast.config';\n\nimport type { ClxToastEntry } from '../../../types/clx-toast.types';\nimport type { ClxButtonColor } from '../../../types/clx-button.types';\n\n@Component({\n selector: 'clx-toast',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, NgStyle],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- Toast card -->\n <div\n #card\n class=\"clx-toast-card relative flex items-start gap-3 w-full bg-white backdrop-blur-md shadow-lg rounded-lg border-2 px-4 py-3.5 overflow-hidden\"\n [class]=\"_borderClass()\"\n (mouseenter)=\"_onMouseEnter()\"\n (mouseleave)=\"_onMouseLeave()\"\n >\n <!-- Icon -->\n <span\n clx-icon\n [name]=\"_icon()\"\n size=\"sm\"\n class=\"shrink-0 mt-0.5\"\n [class]=\"_colorClass()\"\n ></span>\n\n <!-- Content -->\n <div class=\"flex-1 min-w-0\">\n @if (entry().title) {\n <p class=\"text-sm font-semibold leading-snug mb-0.5\" [class]=\"_colorClass()\">\n {{ entry().title }}\n </p>\n }\n <p class=\"text-sm text-slate-600 leading-snug wrap-break-word\">\n {{ entry().message }}\n </p>\n @if (entry().action) {\n <button\n clx-button\n variant=\"link\"\n [color]=\"_buttonColor()\"\n size=\"xs\"\n class=\"mt-1 -ml-1 h-auto p-0\"\n (click)=\"_onAction()\"\n >\n {{ entry().action!.label }}\n </button>\n }\n </div>\n\n <!-- Close button -->\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"_buttonColor()\"\n size=\"xxs\"\n shape=\"circle\"\n [iconOnly]=\"true\"\n icon=\"close\"\n (click)=\"dismiss.emit(entry().id)\"\n ></button>\n\n <!-- Progress bar -->\n @if (entry().showProgress && entry().duration > 0) {\n <div class=\"absolute bottom-0 left-0 right-0 h-0.5 bg-slate-100\">\n <div\n class=\"h-full transition-none\"\n [class]=\"_progressColor()\"\n [ngStyle]=\"{ width: _progressPct() + '%' }\"\n ></div>\n </div>\n }\n </div>\n `,\n styles: [`\n clx-toast {\n display: block;\n width: 100%;\n }\n .clx-toast-card {\n will-change: transform, opacity;\n }\n `],\n})\nexport class ClxToastComponent implements OnInit, OnDestroy {\n readonly entry = input.required<ClxToastEntry>();\n readonly dismiss = output<string>();\n\n private readonly _animate = inject(ClxAnimateService);\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _zone: NgZone;\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n }\n\n // ─── Timer state ──────────────────────────────────────────────────────────\n protected readonly _progressPct = signal(100);\n private _timerHandle: ReturnType<typeof setInterval> | null = null;\n private _paused = false;\n private _elapsed = 0;\n private _destroyed = false;\n\n // ─── Derived visuals ──────────────────────────────────────────────────────\n protected readonly _icon = computed(() => this.entry().icon ?? TOAST_DEFAULT_ICON[this.entry().type]);\n protected readonly _borderClass = computed(() => TOAST_BORDER_MAP[this.entry().type]);\n protected readonly _colorClass = computed(() => TOAST_COLOR_MAP[this.entry().type]);\n protected readonly _progressColor = computed(() => TOAST_PROGRESS_MAP[this.entry().type]);\n protected readonly _buttonColor = computed(() => this.entry().type as ClxButtonColor);\n\n private get _card(): HTMLElement {\n return this._el.nativeElement.querySelector('.clx-toast-card') as HTMLElement;\n }\n\n // ─── Lifecycle ─────────────────────────────────────────────────────────────\n ngOnInit(): void {\n const e = this.entry();\n\n this._animate.animate(this._card, {\n animation: e.animationIn,\n duration: e.animationDuration,\n trigger: 'manual',\n });\n\n if (e.duration > 0) {\n this._startTimer();\n }\n }\n\n ngOnDestroy(): void {\n this._destroyed = true;\n this._stopTimer();\n }\n\n // ─── Hover handlers ────────────────────────────────────────────────────────\n protected _onMouseEnter(): void {\n if (this.entry().pauseOnHover) this._paused = true;\n }\n\n protected _onMouseLeave(): void {\n if (this.entry().pauseOnHover) this._paused = false;\n }\n\n // ─── Action ────────────────────────────────────────────────────────────────\n protected _onAction(): void {\n this.entry().action?.onClick();\n this.dismiss.emit(this.entry().id);\n }\n\n // ─── Animated exit (called by container before removal) ───────────────────\n playExitAnimation(): Promise<void> {\n this._stopTimer();\n return this._animate.animate(this._card, {\n animation: this.entry().animationOut,\n duration: this.entry().animationDuration,\n trigger: 'manual',\n fillMode: 'forwards',\n });\n }\n\n // ─── Timer ─────────────────────────────────────────────────────────────────\n private _startTimer(): void {\n const total = this.entry().duration;\n const tickMs = 50;\n\n this._zone.runOutsideAngular(() => {\n this._timerHandle = setInterval(() => {\n if (this._destroyed) { this._stopTimer(); return; }\n if (this._paused) return;\n\n this._elapsed += tickMs;\n const pct = Math.max(0, 100 - (this._elapsed / total) * 100);\n this._zone.run(() => this._progressPct.set(pct));\n\n if (this._elapsed >= total) {\n this._stopTimer();\n this._zone.run(() => this.dismiss.emit(this.entry().id));\n }\n }, tickMs);\n });\n }\n\n private _stopTimer(): void {\n if (this._timerHandle !== null) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n model,\n QueryList,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { ClxToastComponent } from './clx-toast.component';\nimport { TOAST_POSITION_MAP } from '../../../configs/toast.config';\nimport type { ClxToastEntry, ClxToastPosition } from '../../../types/clx-toast.types';\n\n@Component({\n selector: 'clx-toast-container',\n standalone: true,\n imports: [ClxToastComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"clx-toast-stack fixed z-9999 flex flex-col gap-2 w-full max-w-sm pointer-events-none sm:max-w-sm max-sm:max-w-full max-sm:left-0! max-sm:right-0! max-sm:translate-x-0! max-sm:px-3 max-sm:items-stretch!\"\n [class]=\"_positionClass()\"\n >\n @for (entry of entries(); track entry.id) {\n <div class=\"pointer-events-auto w-full\">\n <clx-toast\n [entry]=\"entry\"\n (dismiss)=\"requestDismiss($event)\"\n />\n </div>\n }\n </div>\n `,\n styles: [`\n clx-toast-container {\n display: contents;\n }\n @media (max-width: 639px) {\n .clx-toast-stack {\n left: 0 !important;\n right: 0 !important;\n transform: none !important;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n max-width: 100% !important;\n align-items: stretch !important;\n }\n }\n `],\n})\nexport class ClxToastContainerComponent {\n readonly entries = model<ClxToastEntry[]>([]);\n readonly position = model<ClxToastPosition>('top-right');\n\n /** Called by service to get the ClxToastComponent instance for exit animation */\n @ViewChildren(ClxToastComponent) toastRefs!: QueryList<ClxToastComponent>;\n\n protected readonly _positionClass = computed(() => TOAST_POSITION_MAP[this.position()]);\n\n async requestDismiss(id: string): Promise<void> {\n const ref = this.toastRefs.find(t => t.entry().id === id);\n if (ref) {\n await ref.playExitAnimation();\n }\n this.entries.update(list => list.filter(e => e.id !== id));\n }\n}\n","import type { ClxCardPadding } from '../types/clx-card.types';\n\nexport const CARD_PADDING_MAP: Record<ClxCardPadding, string> = {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-7',\n} as const;\n","import { Directive } from '@angular/core';\n\n@Directive({ selector: '[clxCardHeader]', standalone: true })\nexport class ClxCardHeaderDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({ selector: '[clxCardBody]', standalone: true })\nexport class ClxCardBodyDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({ selector: '[clxCardFooter]', standalone: true })\nexport class ClxCardFooterDirective {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxCardVariant, ClxCardPadding } from '../../../types/clx-card.types';\nimport { CARD_PADDING_MAP } from '../../../configs/card.config';\nimport { ClxCardHeaderDirective } from './clx-card-header.directive';\nimport { ClxCardBodyDirective } from './clx-card-body.directive';\nimport { ClxCardFooterDirective } from './clx-card-footer.directive';\n\n@Component({\n selector: 'clx-card',\n standalone: true,\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n template: `\n @if (_hasHeader()) {\n <div class=\"clx-card-header flex items-center justify-between gap-3 px-5 py-4 border-b border-slate-100\">\n <ng-content select=\"[clxCardHeader]\" />\n </div>\n }\n\n <div [class]=\"_bodyClass()\">\n <ng-content select=\"[clxCardBody]\" />\n @if (!_hasBody()) {\n <ng-content />\n }\n </div>\n\n @if (_hasFooter()) {\n <div class=\"clx-card-footer flex items-center gap-2 px-5 py-3 border-t border-slate-100 bg-slate-50/60 rounded-b-xl\">\n <ng-content select=\"[clxCardFooter]\" />\n </div>\n }\n `,\n})\nexport class ClxCardComponent {\n readonly variant = input<ClxCardVariant>('elevated');\n readonly color = input<ClxColorInput>('indigo');\n readonly padding = input<ClxCardPadding>('md');\n readonly hover = input<boolean>(false);\n\n private readonly _headerSlot = contentChild(ClxCardHeaderDirective);\n private readonly _bodySlot = contentChild(ClxCardBodyDirective);\n private readonly _footerSlot = contentChild(ClxCardFooterDirective);\n\n protected readonly _hasHeader = computed(() => !!this._headerSlot());\n protected readonly _hasBody = computed(() => !!this._bodySlot());\n protected readonly _hasFooter = computed(() => !!this._footerSlot());\n\n protected readonly _bodyClass = computed(() => {\n const pad = this._hasBody() ? CARD_PADDING_MAP[this.padding()] : CARD_PADDING_MAP[this.padding()];\n return `clx-card-body flex-1 ${pad}`;\n });\n\n protected readonly _hostClass = computed(() => {\n const variant = this.variant();\n const t = resolveColor(this.color());\n const hover = this.hover() ? `transition-shadow duration-200 hover:shadow-lg cursor-pointer` : '';\n\n let variantClass: string;\n if (variant === 'elevated') {\n variantClass = `bg-white shadow-md border ${t.borderLight}`;\n } else if (variant === 'outlined') {\n variantClass = `bg-white border ${t.border}`;\n } else {\n variantClass = `bg-slate-50 border border-transparent`;\n }\n\n return `flex flex-col rounded-xl overflow-hidden w-full ${variantClass} ${hover}`.trim();\n });\n}\n","import type { ClxStepperSize } from '../types/clx-stepper.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\nexport const STEPPER_SIZE_MAP: Record<ClxStepperSize, {\n circle: string;\n iconSize: ClxSize;\n label: string;\n desc: string;\n connector: string;\n}> = {\n sm: { circle: 'w-7 h-7', iconSize: 'xs', label: 'text-xs', desc: 'text-xs', connector: 'h-0.5' },\n md: { circle: 'w-9 h-9', iconSize: 'sm', label: 'text-sm', desc: 'text-xs', connector: 'h-0.5' },\n lg: { circle: 'w-11 h-11', iconSize: 'md', label: 'text-sm', desc: 'text-xs', connector: 'h-1' },\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxStepperStep, ClxStepperOrientation, ClxStepperSize } from '../../../types/clx-stepper.types';\nimport { STEPPER_SIZE_MAP } from '../../../configs/stepper.config';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-stepper',\n standalone: true,\n imports: [ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '_hostClass()' },\n template: `\n @for (step of steps(); track $index; let last = $last; let i = $index) {\n\n <!-- Step -->\n <div [class]=\"_stepWrapClass()\">\n\n <!-- Circle + connector (horizontal: connector after, vertical: connector below) -->\n <div [class]=\"_axisClass()\">\n\n <!-- Circle -->\n <div [class]=\"_circleClass(step.status)\">\n @switch (step.status) {\n @case ('completed') {\n <span clx-icon name=\"check\" [size]=\"_tokens().iconSize\"></span>\n }\n @case ('error') {\n <span clx-icon name=\"close\" [size]=\"_tokens().iconSize\"></span>\n }\n @default {\n @if (step.icon) {\n <span clx-icon [name]=\"step.icon\" [size]=\"_tokens().iconSize\"></span>\n } @else {\n <span [class]=\"'font-bold leading-none select-none ' + _tokens().label\">{{ i + 1 }}</span>\n }\n }\n }\n </div>\n\n <!-- Connector -->\n @if (!last) {\n <div [class]=\"_connectorClass(step.status)\"></div>\n }\n\n </div>\n\n <!-- Label + description -->\n <div [class]=\"_labelWrapClass()\">\n <span [class]=\"_labelClass(step.status)\">{{ step.label }}</span>\n @if (step.description) {\n <span [class]=\"'text-slate-400 ' + _tokens().desc\">{{ step.description }}</span>\n }\n </div>\n\n </div>\n }\n `,\n})\nexport class ClxStepperComponent {\n readonly steps = input.required<ClxStepperStep[]>();\n readonly color = input<ClxColorInput>('indigo');\n readonly orientation = input<ClxStepperOrientation>('horizontal');\n readonly size = input<ClxStepperSize>('md');\n\n protected readonly _tokens = computed(() => STEPPER_SIZE_MAP[this.size()]);\n\n // ── Host ─────────────────────────────────────────────────────────────────────\n protected readonly _hostClass = computed(() => {\n const horiz = this.orientation() === 'horizontal';\n return horiz\n ? 'flex flex-row items-start w-full'\n : 'flex flex-col w-full';\n });\n\n // ── Step wrapper ──────────────────────────────────────────────────────────────\n protected readonly _stepWrapClass = computed(() => {\n const horiz = this.orientation() === 'horizontal';\n return horiz\n ? 'flex flex-col items-center flex-1 min-w-0'\n : 'flex flex-row gap-3';\n });\n\n // ── Axis (circle + connector) ─────────────────────────────────────────────────\n protected readonly _axisClass = computed(() => {\n const horiz = this.orientation() === 'horizontal';\n return horiz\n ? 'flex flex-row items-center w-full'\n : 'flex flex-col items-center shrink-0';\n });\n\n // ── Label wrapper ─────────────────────────────────────────────────────────────\n protected readonly _labelWrapClass = computed(() => {\n const horiz = this.orientation() === 'horizontal';\n return horiz\n ? 'flex flex-col items-center text-center mt-2 px-1'\n : 'flex flex-col justify-center pb-6 min-w-0';\n });\n\n // ── Circle ────────────────────────────────────────────────────────────────────\n protected _circleClass(status: ClxStepperStep['status']): string {\n const base = `flex items-center justify-center rounded-full shrink-0 transition-colors duration-200 ${this._tokens().circle}`;\n const t = resolveColor(this.color());\n\n if (status === 'completed') return `${base} ${t.bg} ${t.text}`;\n if (status === 'active') return `${base} bg-white border-2 ${t.border} ${t.textSubtle}`;\n if (status === 'error') return `${base} bg-red-500 text-white`;\n return `${base} bg-white border-2 border-slate-200 text-slate-400`;\n }\n\n // ── Connector ─────────────────────────────────────────────────────────────────\n protected _connectorClass(status: ClxStepperStep['status']): string {\n const t = resolveColor(this.color());\n const horiz = this.orientation() === 'horizontal';\n const size = this._tokens().connector;\n\n const filled = status === 'completed' ? `${t.bg}` : 'bg-slate-200';\n\n return horiz\n ? `flex-1 ${size} ${filled} transition-colors duration-300`\n : `w-0.5 flex-1 my-1 min-h-[1.5rem] ${filled} transition-colors duration-300`;\n }\n\n // ── Label ─────────────────────────────────────────────────────────────────────\n protected _labelClass(status: ClxStepperStep['status']): string {\n const t = resolveColor(this.color());\n const size = this._tokens().label;\n\n if (status === 'completed') return `font-medium ${t.textSubtle} ${size}`;\n if (status === 'active') return `font-semibold text-slate-800 ${size}`;\n if (status === 'error') return `font-medium text-red-500 ${size}`;\n return `font-normal text-slate-400 ${size}`;\n }\n}\n","import type { ClxSize } from '../types/clx-size.types';\n\nexport const AVATAR_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'w-6 h-6',\n xs: 'w-8 h-8',\n sm: 'w-10 h-10',\n md: 'w-12 h-12',\n lg: 'w-16 h-16',\n xl: 'w-20 h-20',\n};\n\nexport const AVATAR_TEXT_SIZE_MAP: Record<ClxSize, string> = {\n xxs: 'text-xs font-semibold',\n xs: 'text-xs font-semibold',\n sm: 'text-sm font-semibold',\n md: 'text-base font-semibold',\n lg: 'text-xl font-semibold',\n xl: 'text-2xl font-semibold',\n};\n\nexport const AVATAR_ICON_SIZE_MAP: Record<ClxSize, ClxSize> = {\n xxs: 'xxs',\n xs: 'xs',\n sm: 'sm',\n md: 'sm',\n lg: 'md',\n xl: 'lg',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxSize } from '../../../types/clx-size.types';\nimport type { ClxShape } from '../../../types/clx-shape.types';\nimport type { ClxAvatarContentType } from '../../../types/clx-avatar.types';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\nimport { AVATAR_SIZE_MAP, AVATAR_TEXT_SIZE_MAP, AVATAR_ICON_SIZE_MAP } from '../../../configs/avatar.config';\n\n@Component({\n selector: 'clx-avatar',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n @switch (_contentType()) {\n @case ('image') {\n <img [src]=\"src()\" [alt]=\"alt()\" class=\"w-full h-full object-cover\" />\n }\n @case ('text') {\n <span [class]=\"_textClass()\">{{ _initials() }}</span>\n }\n @case ('icon') {\n <span clx-icon [name]=\"iconName() || 'person'\" [size]=\"_iconSize()\"></span>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n '[attr.aria-label]': 'alt()',\n 'role': 'img',\n },\n})\nexport class ClxAvatarComponent {\n readonly src = input<string | null>(null);\n readonly initials = input<string | null>(null);\n readonly iconName = input<string | null>(null);\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxSize>('md');\n readonly shape = input<ClxShape>('circle');\n readonly alt = input<string>('Avatar');\n\n protected readonly _contentType = computed((): ClxAvatarContentType => {\n if (this.src()) return 'image';\n if (this.initials()) return 'text';\n return 'icon';\n });\n\n protected readonly _initials = computed(() =>\n (this.initials() ?? '').slice(0, 3).toUpperCase(),\n );\n\n protected readonly _iconSize = computed(() => AVATAR_ICON_SIZE_MAP[this.size()]);\n\n protected readonly _shapeClass = computed(() => {\n const s = this.shape();\n if (s === 'circle') return 'rounded-full';\n if (s === 'rounded') return 'rounded-xl';\n return 'rounded-full';\n });\n\n protected readonly _colorClass = computed(() => {\n if (this._contentType() === 'image') return '';\n const t = resolveColor(this.color());\n return this._contentType() === 'text'\n ? `${t.bgSubtle} ${t.textSubtle}`\n : `${t.bg} ${t.text}`;\n });\n\n protected readonly _textClass = computed(() => AVATAR_TEXT_SIZE_MAP[this.size()]);\n\n protected readonly _hostClass = computed(() => {\n const base = 'relative inline-flex items-center justify-center overflow-hidden flex-shrink-0 select-none';\n const size = AVATAR_SIZE_MAP[this.size()];\n const shape = this._shapeClass();\n const color = this._colorClass();\n return `${base} ${size} ${shape} ${color}`.trim();\n });\n}\n","import { InjectionToken, Signal } from '@angular/core';\nimport type { ClxColorInput } from '../types/clx-color.types';\nimport type { ClxTimelineLineStyle, ClxTimelineMode, ClxTimelineSize } from '../types/clx-timeline.types';\nimport type { ClxSize } from '../types/clx-size.types';\n\n// ── Context ───────────────────────────────────────────────────────────────────\n\nexport interface ClxTimelineContext {\n color: Signal<ClxColorInput>;\n lineStyle: Signal<ClxTimelineLineStyle>;\n mode: Signal<ClxTimelineMode>;\n size: Signal<ClxTimelineSize>;\n sizeTokens: Signal<(typeof TIMELINE_SIZE_MAP)[ClxTimelineSize]>;\n}\n\nexport const CLX_TIMELINE_CONTEXT = new InjectionToken<ClxTimelineContext>('CLX_TIMELINE_CONTEXT');\n\n// ── Line style ────────────────────────────────────────────────────────────────\n\nexport const TIMELINE_LINE_STYLE: Record<ClxTimelineLineStyle, string> = {\n dotted: 'border-l-2 border-dashed border-slate-200',\n solid: 'border-l-2 border-solid border-slate-200',\n none: '',\n};\n\n// ── Size map ──────────────────────────────────────────────────────────────────\n\nexport const TIMELINE_SIZE_MAP: Record<ClxTimelineSize, {\n dot: string;\n iconSize: ClxSize;\n item: string;\n gap: string;\n title: string;\n desc: string;\n time: string;\n contentPb: string;\n}> = {\n sm: { dot: 'w-8 h-8', iconSize: 'xs', item: 'px-3 pt-2', gap: 'gap-3', title: 'text-sm', desc: 'text-xs', time: 'text-xs', contentPb: 'pb-5' },\n md: { dot: 'w-10 h-10', iconSize: 'sm', item: 'px-4 pt-3', gap: 'gap-4', title: 'text-sm', desc: 'text-xs', time: 'text-xs', contentPb: 'pb-6' },\n lg: { dot: 'w-12 h-12', iconSize: 'md', item: 'px-5 pt-4', gap: 'gap-5', title: 'text-base',desc: 'text-sm', time: 'text-sm', contentPb: 'pb-8' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxTimelineLineStyle, ClxTimelineMode, ClxTimelineSize } from '../../../types/clx-timeline.types';\nimport { CLX_TIMELINE_CONTEXT, TIMELINE_SIZE_MAP } from '../../../configs/timeline.config';\nimport { ClxButtonComponent } from '../clx-button/clx-button.component';\n\n@Component({\n selector: 'clx-timeline',\n standalone: true,\n imports: [ClxButtonComponent],\n template: `\n @if (label()) {\n <div [class]=\"_headerClass()\">\n <span class=\"font-semibold text-slate-800\">{{ label() }}</span>\n @if (actionLabel()) {\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"sm\" icon=\"expand_more\">\n {{ actionLabel() }}\n </button>\n }\n </div>\n }\n <ng-content />\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n 'role': 'list',\n },\n providers: [\n { provide: CLX_TIMELINE_CONTEXT, useExisting: forwardRef(() => ClxTimelineComponent) },\n ],\n})\nexport class ClxTimelineComponent {\n readonly color = input<ClxColorInput>('indigo');\n readonly lineStyle = input<ClxTimelineLineStyle>('dotted');\n readonly mode = input<ClxTimelineMode>('left');\n readonly size = input<ClxTimelineSize>('md');\n readonly label = input<string>('');\n readonly actionLabel = input<string>('');\n readonly bordered = input<boolean>(false);\n\n readonly sizeTokens = computed(() => TIMELINE_SIZE_MAP[this.size()]);\n\n protected readonly _hostClass = computed(() => {\n const hasCard = this.label() || this.bordered();\n const bg = hasCard ? 'bg-white rounded-2xl overflow-hidden' : '';\n const border = this.bordered() ? `border ${resolveColor(this.color()).borderLight}` : 'shadow-sm';\n return `flex flex-col w-full ${hasCard ? `${bg} ${border}` : ''}`.trim();\n });\n\n protected readonly _headerClass = computed(() => {\n const px = this.sizeTokens().item.split(' ')[0];\n return `flex items-center justify-between ${px} py-3 border-b ${resolveColor(this.color()).borderLight}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor, type ClxColorInput } from '../../../types/clx-color.types';\nimport { CLX_TIMELINE_CONTEXT, TIMELINE_LINE_STYLE } from '../../../configs/timeline.config';\nimport { ClxIconComponent } from '../clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-timeline-item',\n standalone: true,\n imports: [ClxIconComponent],\n template: `\n <div class=\"flex flex-col items-center shrink-0\">\n <div [class]=\"_dotClass()\">\n <span clx-icon [name]=\"icon()\" [size]=\"_ctx.sizeTokens().iconSize\" [class]=\"_iconClass()\"></span>\n </div>\n <div [class]=\"_lineClass()\"></div>\n </div>\n\n <div [class]=\"'flex-1 min-w-0 ' + _ctx.sizeTokens().contentPb\">\n <div class=\"flex items-start justify-between gap-2\">\n <p [class]=\"'font-semibold text-slate-800 leading-snug ' + _ctx.sizeTokens().title\">\n {{ title() }}\n </p>\n @if (time()) {\n <span [class]=\"'shrink-0 text-slate-400 text-right leading-snug ' + _ctx.sizeTokens().time\">\n {{ time() }}\n </span>\n }\n </div>\n @if (description()) {\n <p [class]=\"'text-slate-500 mt-0.5 ' + _ctx.sizeTokens().desc\">{{ description() }}</p>\n }\n <ng-content />\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_hostClass()',\n 'role': 'listitem',\n },\n})\nexport class ClxTimelineItemComponent {\n protected readonly _ctx = inject(CLX_TIMELINE_CONTEXT);\n\n readonly icon = input<string>('circle');\n readonly color = input<ClxColorInput | null>(null);\n readonly title = input.required<string>();\n readonly description = input<string>('');\n readonly time = input<string>('');\n readonly last = input<boolean>(false);\n\n protected readonly _resolvedColor = computed(() => resolveColor(this.color() ?? this._ctx.color()));\n\n protected readonly _iconClass = computed(() => this._resolvedColor().textSubtle);\n\n protected readonly _hostClass = computed(() => {\n const { gap, item } = this._ctx.sizeTokens();\n return `flex ${gap} w-full ${item}`;\n });\n\n protected readonly _dotClass = computed(() => {\n const { dot } = this._ctx.sizeTokens();\n return `${dot} rounded-full flex items-center justify-center shrink-0 ${this._resolvedColor().bgSubtle}`;\n });\n\n protected readonly _lineClass = computed(() => {\n if (this.last()) return 'flex-1';\n const lineStyle = TIMELINE_LINE_STYLE[this._ctx.lineStyle()];\n return `flex-1 w-0 mt-1 ${lineStyle}`.trim();\n });\n}\n","import type { ChartData, ChartOptions, ChartType } from 'chart.js';\nimport { CLX_COLOR_HEX } from '../types/clx-color.types';\n\nexport const CLX_CHART_DEFAULTS_NO_SCALES: ChartOptions = {\n responsive: true,\n maintainAspectRatio: false,\n font: {\n family: 'Roboto, ui-sans-serif, system-ui, -apple-system, sans-serif',\n size: 12,\n },\n plugins: {\n legend: { display: true, position: 'top', align: 'center' },\n tooltip: { enabled: true },\n },\n} as ChartOptions;\n\nexport const CLX_CHART_DEFAULTS: ChartOptions = {\n responsive: true,\n maintainAspectRatio: false,\n font: {\n family: 'Roboto, ui-sans-serif, system-ui, -apple-system, sans-serif',\n size: 12,\n },\n plugins: {\n legend: {\n display: true,\n position: 'top',\n align: 'center'\n },\n tooltip: {\n enabled: true\n },\n },\n scales: {\n x: { \n display: true,\n grid: {\n display: false\n },\n border: {\n color: CLX_COLOR_HEX.slate100\n },\n ticks: {\n color: CLX_COLOR_HEX.slate400\n }\n },\n y: {\n display: true,\n beginAtZero: true,\n grid: {\n display: true,\n color: CLX_COLOR_HEX.slate100\n },\n border: {\n color: CLX_COLOR_HEX.slate100\n },\n ticks: {\n color: CLX_COLOR_HEX.slate400\n }\n },\n },\n} as ChartOptions;\n\nexport const CLX_CHART_PALETTE: string[] = Object.values(CLX_COLOR_HEX);\n\n/** Versiones con opacidad 20% para backgrounds de áreas/barras */\nexport const CLX_CHART_PALETTE_ALPHA: string[] = CLX_CHART_PALETTE.map(hex => `${hex}33`);\n\nconst AREA_TYPES: ChartType[] = ['line', 'radar'];\nconst MULTI_SLICE_TYPES: ChartType[] = ['pie', 'doughnut', 'polarArea'];\n\nfunction shuffled(arr: string[]): string[] {\n const a = [...arr];\n for (let i = a.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [a[i], a[j]] = [a[j], a[i]];\n }\n return a;\n}\n\nexport function applyChartDefaults(type: ChartType, data: ChartData): ChartData {\n const palette = shuffled(CLX_CHART_PALETTE);\n const paletteAlpha = palette.map(hex => `${hex}33`);\n const datasets = data.datasets.map((ds, i) => {\n const color = palette[i % palette.length];\n const alpha = paletteAlpha[i % paletteAlpha.length];\n\n if (MULTI_SLICE_TYPES.includes(type)) {\n const count = (ds.data as number[]).length;\n return {\n ...ds,\n backgroundColor: ds.backgroundColor ?? Array.from({ length: count }, (_, j) =>\n palette[j % palette.length]\n ),\n borderColor: ds.borderColor ?? '#fff',\n borderWidth: (ds as any).borderWidth ?? 2,\n };\n }\n\n if (AREA_TYPES.includes(type)) {\n return {\n ...ds,\n borderColor: ds.borderColor ?? color,\n backgroundColor: ds.backgroundColor ?? alpha,\n pointBackgroundColor: (ds as any).pointBackgroundColor ?? color,\n fill: (ds as any).fill ?? (type === 'line' ? false : true),\n tension: (ds as any).tension ?? 0.4,\n };\n }\n\n return {\n ...ds,\n backgroundColor: ds.backgroundColor ?? color,\n borderColor: ds.borderColor ?? color,\n borderWidth: (ds as any).borderWidth ?? 0,\n barPercentage: (ds as any).barPercentage ?? 0.5,\n categoryPercentage: (ds as any).categoryPercentage ?? 0.6,\n };\n });\n\n return { ...data, datasets } as ChartData;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n OnDestroy,\n untracked,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {\n Chart,\n LineController,\n BarController,\n PieController,\n DoughnutController,\n RadarController,\n PolarAreaController,\n CategoryScale,\n LinearScale,\n RadialLinearScale,\n BarElement,\n LineElement,\n PointElement,\n ArcElement,\n Filler,\n Tooltip,\n Legend,\n type ChartData,\n type ChartOptions,\n} from 'chart.js';\n\nimport { applyChartDefaults, CLX_CHART_DEFAULTS, CLX_CHART_DEFAULTS_NO_SCALES } from '../../../../configs/chart.config';\nimport type { ClxChartType } from '../../../../types/clx-chart.types';\n\nChart.register(\n LineController, BarController, PieController,\n DoughnutController, RadarController, PolarAreaController,\n CategoryScale, LinearScale, RadialLinearScale,\n BarElement, LineElement, PointElement, ArcElement,\n Filler, Tooltip, Legend,\n);\n\nconst NO_SCALE_TYPES = ['doughnut', 'pie', 'polarArea'];\n\n@Component({\n selector: 'clx-chart',\n standalone: true,\n template: `\n <div class=\"clx-chart-container\" [style.height]=\"_hostHeight()\" [class.clx-loading]=\"loading()\">\n <canvas #canvas role=\"img\" [attr.aria-label]=\"ariaLabel() || 'Chart'\"></canvas>\n \n @if (loading()) {\n <div class=\"clx-chart-loader\">\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-indigo-500\"></div>\n </div>\n }\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; }\n .clx-chart-container { position: relative; width: 100%; }\n canvas { display: block; width: 100% !important; }\n \n .clx-chart-loader {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n backdrop-filter: blur(2px);\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxChartComponent implements AfterViewInit, OnDestroy {\n @ViewChild('canvas') canvasRef!: ElementRef<HTMLCanvasElement>;\n\n type = input.required<ClxChartType>();\n data = input.required<ChartData>();\n options = input<ChartOptions>({});\n height = input<number | string>(300);\n ariaLabel = input<string>();\n \n // SOLUCIÓN AL ERROR: Añadimos el input loading\n loading = input<boolean>(false);\n\n private _chart?: Chart;\n private _injector = inject(Injector);\n\n _hostHeight = computed(() => \n typeof this.height() === 'number' ? `${this.height()}px` : this.height()\n );\n\n ngAfterViewInit(): void {\n this._createChart();\n\n effect(() => {\n const currentType = this.type();\n const currentData = this.data();\n\n if (this._chart) {\n (this._chart.config as any).type = currentType;\n this._chart.data = applyChartDefaults(currentType, currentData);\n this._chart.update();\n }\n }, { injector: this._injector });\n }\n\n private _createChart(): void {\n const ctx = this.canvasRef.nativeElement.getContext('2d');\n if (!ctx) return;\n\n const type = untracked(() => this.type());\n this._chart = new Chart(ctx, {\n type,\n data: applyChartDefaults(type, untracked(() => this.data())),\n options: { ...(NO_SCALE_TYPES.includes(type) ? CLX_CHART_DEFAULTS_NO_SCALES : CLX_CHART_DEFAULTS), ...untracked(() => this.options()) },\n });\n }\n\n ngOnDestroy(): void {\n this._chart?.destroy();\n }\n}","import type { ClxColorPickerSize } from '../types/clx-colorpicker.types';\n\nexport const COLOR_PICKER_SIZE_MAP: Record<ClxColorPickerSize, {\n minH: string;\n text: string;\n label: string;\n hint: string;\n px: string;\n swatchSz: string;\n btnSize: 'xs' | 'sm';\n}> = {\n sm: { minH: 'min-h-8', text: 'text-sm', label: 'text-xs font-medium', hint: 'text-xs', px: 'px-2.5', swatchSz: 'w-4 h-4', btnSize: 'xs' },\n md: { minH: 'min-h-10', text: 'text-sm', label: 'text-sm font-medium', hint: 'text-xs', px: 'px-3', swatchSz: 'w-5 h-5', btnSize: 'sm' },\n lg: { minH: 'min-h-12', text: 'text-base', label: 'text-sm font-medium', hint: 'text-sm', px: 'px-3', swatchSz: 'w-6 h-6', btnSize: 'sm' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { ConnectedPosition, OverlayModule, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxColorPickerFormat, ClxColorPickerSize } from '../../../types/clx-colorpicker.types';\nimport { COLOR_PICKER_SIZE_MAP } from '../../../configs/colorpicker.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\n// ── Color utilities ────────────────────────────────────────────────────────────\n\nfunction hsvToRgb(h: number, s: number, v: number): [number, number, number] {\n const c = v * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = v - c;\n let r = 0, g = 0, b = 0;\n if (h < 60) { r = c; g = x; b = 0; }\n else if (h < 120) { r = x; g = c; b = 0; }\n else if (h < 180) { r = 0; g = c; b = x; }\n else if (h < 240) { r = 0; g = x; b = c; }\n else if (h < 300) { r = x; g = 0; b = c; }\n else { r = c; g = 0; b = x; }\n return [Math.round((r + m) * 255), Math.round((g + m) * 255), Math.round((b + m) * 255)];\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return '#' + [r, g, b].map(v => v.toString(16).padStart(2, '0')).join('');\n}\n\nfunction hexToRgb(hex: string): [number, number, number] | null {\n const clean = hex.replace('#', '').trim();\n if (clean.length !== 6) return null;\n const n = parseInt(clean, 16);\n if (isNaN(n)) return null;\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\n\nfunction rgbToHsv(r: number, g: number, b: number): [number, number, number] {\n const rr = r / 255, gg = g / 255, bb = b / 255;\n const max = Math.max(rr, gg, bb), min = Math.min(rr, gg, bb), d = max - min;\n let h = 0;\n const s = max === 0 ? 0 : d / max;\n const v = max;\n if (d !== 0) {\n if (max === rr) h = ((gg - bb) / d + (gg < bb ? 6 : 0)) / 6;\n else if (max === gg) h = ((bb - rr) / d + 2) / 6;\n else h = ((rr - gg) / d + 4) / 6;\n }\n return [Math.round(h * 360), s, v];\n}\n\nfunction rgbToRgbString(r: number, g: number, b: number): string {\n return `rgb(${r}, ${g}, ${b})`;\n}\n\nfunction rgbToHslString(r: number, g: number, b: number): string {\n const rr = r / 255, gg = g / 255, bb = b / 255;\n const max = Math.max(rr, gg, bb), min = Math.min(rr, gg, bb);\n let h = 0, s = 0;\n const l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n if (max === rr) h = ((gg - bb) / d + (gg < bb ? 6 : 0)) / 6;\n else if (max === gg) h = ((bb - rr) / d + 2) / 6;\n else h = ((rr - gg) / d + 4) / 6;\n }\n return `hsl(${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────────\n\n@Component({\n selector: 'clx-colorpicker',\n standalone: true,\n imports: [OverlayModule, ReactiveFormsModule, ClxIconComponent, ClxButtonComponent],\n template: `\n @if (label()) {\n <label [id]=\"_labelId\" [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <!-- ── Trigger ──────────────────────────────────────────────────────────── -->\n <div\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n [class]=\"_triggerClass()\"\n [attr.tabindex]=\"_disabled() ? null : '0'\"\n role=\"button\"\n [attr.aria-expanded]=\"_isOpen()\"\n aria-haspopup=\"dialog\"\n [attr.aria-labelledby]=\"label() ? _labelId : null\"\n (click)=\"!_disabled() && _togglePanel()\"\n (keydown)=\"_onTriggerKeydown($event)\">\n\n <!-- Swatch + value -->\n <div class=\"flex items-center gap-2 flex-1 min-w-0 pr-10\" [class]=\"_sizeConfig().px\">\n <span\n class=\"shrink-0 rounded border border-black/10\"\n [class]=\"_sizeConfig().swatchSz\"\n [style.background-color]=\"_swatchColor()\">\n </span>\n <span [class]=\"_displayClass()\">{{ _displayValue() }}</span>\n </div>\n\n <!-- Right controls -->\n <div class=\"absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-0.5\">\n @if (_hasValue() && !_disabled()) {\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"activeColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"close\"\n [iconOnly]=\"true\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation(); _clearValue()\">\n </button>\n }\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"activeColor()\"\n shape=\"circle\"\n [size]=\"_sizeConfig().btnSize\"\n icon=\"keyboard_arrow_down\"\n [iconOnly]=\"true\"\n [class]=\"_chevronClass()\"\n (mousedown)=\"$event.preventDefault()\">\n </button>\n </div>\n </div>\n\n <!-- ── Overlay panel ─────────────────────────────────────────────────────── -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_closePanel()\"\n (overlayKeydown)=\"_onOverlayKeydown($event)\">\n\n <div class=\"w-72 bg-white rounded-xl shadow-xl border border-slate-200 overflow-hidden mt-1\">\n <div class=\"p-3 space-y-2.5\">\n\n <!-- SV gradient area -->\n <div\n class=\"relative h-40 rounded-lg overflow-hidden cursor-crosshair select-none touch-none\"\n (pointerdown)=\"_onGradientPointerDown($event)\">\n <div class=\"absolute inset-0\" [style.background-color]=\"_hueBackground()\"></div>\n <div class=\"absolute inset-0\" style=\"background: linear-gradient(to right, #ffffff, transparent)\"></div>\n <div class=\"absolute inset-0\" style=\"background: linear-gradient(to top, #000000, transparent)\"></div>\n <!-- Cursor -->\n <div\n class=\"absolute w-3.5 h-3.5 rounded-full border-2 border-white shadow ring-1 ring-black/20 pointer-events-none\"\n [style.left.%]=\"_saturation() * 100\"\n [style.top.%]=\"(1 - _brightness()) * 100\"\n style=\"transform: translate(-50%, -50%)\">\n </div>\n </div>\n\n <!-- Hue slider -->\n <div\n class=\"relative py-1 cursor-pointer select-none touch-none\"\n (pointerdown)=\"_onHuePointerDown($event)\">\n <div\n class=\"h-3 rounded-full\"\n style=\"background: linear-gradient(to right,#ff0000,#ffff00,#00ff00,#00ffff,#0000ff,#ff00ff,#ff0000)\">\n </div>\n <div\n class=\"absolute top-1/2 w-4 h-4 rounded-full border-2 border-white shadow ring-1 ring-black/20 pointer-events-none\"\n [style.left.%]=\"(_hue() / 360) * 100\"\n [style.background-color]=\"_hueBackground()\"\n style=\"transform: translate(-50%, -50%)\">\n </div>\n </div>\n\n <!-- Preview + hex input -->\n <div class=\"flex items-center gap-2\">\n <div\n class=\"w-8 h-8 shrink-0 rounded-lg border border-black/10\"\n [style.background-color]=\"_hexValue()\">\n </div>\n <div\n class=\"flex-1\"\n (focusin)=\"_hexInputFocused.set(true)\"\n (focusout)=\"_hexInputFocused.set(false)\">\n <input\n type=\"text\"\n [formControl]=\"_hexInput\"\n maxlength=\"9\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n placeholder=\"#000000\"\n class=\"w-full font-mono text-sm border border-slate-200 rounded-lg px-2.5 py-1.5 text-slate-700 uppercase tracking-wide bg-white focus:outline-none focus:ring-2 focus:ring-slate-300 focus:border-slate-400 transition-colors\"\n (input)=\"_onHexInput($event)\"\n (keydown.enter)=\"_applyHexAndClose()\" />\n </div>\n <span class=\"text-xs font-semibold text-slate-400 uppercase shrink-0 w-8 text-center select-none\">\n {{ format() }}\n </span>\n </div>\n\n <!-- Swatches / Presets -->\n @if (presets().length) {\n <div class=\"border-t border-slate-100 pt-2\">\n <div class=\"flex flex-wrap gap-1.5\">\n @for (swatch of presets(); track swatch) {\n <button\n type=\"button\"\n class=\"w-6 h-6 rounded border border-black/10 transition-all duration-150 hover:scale-110 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-offset-1 focus:ring-slate-400\"\n [style.background-color]=\"swatch\"\n [title]=\"swatch\"\n (click)=\"_selectPreset(swatch)\">\n </button>\n }\n </div>\n </div>\n }\n\n </div>\n </div>\n </ng-template>\n\n <!-- ── Bottom message ────────────────────────────────────────────────────── -->\n @if (_isInvalid()) {\n <p class=\"text-xs text-red-500 flex items-center gap-1\">\n <span clx-icon name=\"error\" size=\"xs\"></span>\n {{ errorMessage() }}\n </p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5 w-full' },\n})\nexport class ClxColorPickerComponent implements ControlValueAccessor {\n\n // ── Unique label id ────────────────────────────────────────────────────────\n private static _seq = 0;\n protected readonly _labelId = `clx-cp-label-${++ClxColorPickerComponent._seq}`;\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('Selecciona un color');\n readonly size = input<ClxColorPickerSize>('md');\n readonly format = input<ClxColorPickerFormat>('hex');\n readonly presets = input<string[]>([]);\n readonly activeColor = input<ClxColorInput>('indigo');\n readonly hint = input<string>('');\n readonly errorMessage = input<string>('Este campo es requerido');\n readonly disabled = input<boolean>(false);\n\n // ── Color state (HSV model) ────────────────────────────────────────────────\n protected readonly _hue = signal(220); // 0–360\n protected readonly _saturation = signal(0.65); // 0–1\n protected readonly _brightness = signal(0.85); // 0–1\n private readonly _hasColor = signal(false);\n\n // ── Panel state ────────────────────────────────────────────────────────────\n protected readonly _isOpen = signal(false);\n\n // ── Hex input inside panel ─────────────────────────────────────────────────\n protected readonly _hexInput = new FormControl<string>('');\n protected readonly _hexInputFocused = signal(false);\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n private readonly _ngControl = inject(NgControl, { optional: true, self: true });\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _sso = inject(ScrollStrategyOptions);\n private readonly _wasTouched = signal(false);\n private readonly _cvaDisabled = signal(false);\n\n readonly _scrollStrategy = this._sso.reposition();\n\n private _onChange: (v: string | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Drag state (plain fields — not signals) ────────────────────────────────\n private _dragTarget: 'gradient' | 'hue' | null = null;\n private _dragRect: DOMRect | null = null;\n\n constructor() {\n if (this._ngControl) this._ngControl.valueAccessor = this;\n\n // Sync hex input display when color changes (only when user is not typing)\n effect(() => {\n const hex = this._hexValue().toUpperCase();\n if (!this._hexInputFocused()) {\n this._hexInput.setValue(hex, { emitEvent: false });\n }\n });\n }\n\n // ── Overlay positions ──────────────────────────────────────────────────────\n readonly _positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n ];\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n protected readonly _sizeConfig = computed(() => COLOR_PICKER_SIZE_MAP[this.size()]);\n protected readonly _hasValue = computed(() => this._hasColor());\n\n protected readonly _isInvalid = computed(() =>\n this._wasTouched() && (this._ngControl?.control?.invalid ?? false),\n );\n\n /** Pure hue color — used for gradient background and hue thumb */\n protected readonly _hueBackground = computed(() =>\n `hsl(${this._hue()}, 100%, 50%)`,\n );\n\n /** Full hex value from current HSV state */\n protected readonly _hexValue = computed(() => {\n const [r, g, b] = hsvToRgb(this._hue(), this._saturation(), this._brightness());\n return rgbToHex(r, g, b);\n });\n\n /** Swatch color: current hex if a color is selected, neutral gray otherwise */\n protected readonly _swatchColor = computed(() =>\n this._hasColor() ? this._hexValue() : '#e2e8f0',\n );\n\n /** What to display in the trigger field */\n protected readonly _displayValue = computed(() =>\n this._hasColor() ? this._hexValue().toUpperCase() : '',\n );\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeConfig().hint} text-gray-400`,\n );\n\n protected readonly _displayClass = computed(() => {\n const s = this._sizeConfig();\n const color = this._hasColor() ? 'text-slate-700 font-mono' : 'text-gray-400';\n return `flex-1 ${s.text} ${color} truncate`;\n });\n\n protected readonly _triggerClass = computed(() => {\n const s = this._sizeConfig();\n const base = 'relative flex items-center rounded-md border transition-all duration-200 outline-none w-full';\n if (this._disabled()) {\n return `${base} ${s.minH} border-gray-200 bg-gray-50 cursor-not-allowed opacity-60`;\n }\n if (this._isInvalid()) {\n return `${base} ${s.minH} border-red-400 focus-within:ring-2 focus-within:ring-red-500/20 bg-white cursor-pointer`;\n }\n return `${base} ${s.minH} border-slate-200 ${resolveColor(this.activeColor()).focusWithin} bg-white cursor-pointer`;\n });\n\n protected readonly _chevronClass = computed(() =>\n this._isOpen()\n ? 'transition-transform duration-200 rotate-180'\n : 'transition-transform duration-200',\n );\n\n // ── Panel control ──────────────────────────────────────────────────────────\n protected _togglePanel(): void {\n this._isOpen() ? this._closePanel() : this._openPanel();\n }\n\n private _openPanel(): void {\n this._hexInput.setValue(\n this._hasColor() ? this._hexValue().toUpperCase() : '',\n { emitEvent: false },\n );\n this._isOpen.set(true);\n }\n\n protected _closePanel(): void {\n this._isOpen.set(false);\n this._hexInputFocused.set(false);\n this._onTouched();\n this._wasTouched.set(true);\n }\n\n // ── Drag — gradient (SV picker) ───────────────────────────────────────────\n protected _onGradientPointerDown(event: PointerEvent): void {\n event.preventDefault();\n this._dragTarget = 'gradient';\n this._dragRect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n this._updateSV(event.clientX, event.clientY);\n }\n\n // ── Drag — hue slider ─────────────────────────────────────────────────────\n protected _onHuePointerDown(event: PointerEvent): void {\n event.preventDefault();\n this._dragTarget = 'hue';\n this._dragRect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n this._updateHue(event.clientX);\n }\n\n @HostListener('document:pointermove', ['$event'])\n protected _onDocPointerMove(event: PointerEvent): void {\n if (!this._dragTarget || !this._dragRect) return;\n if (this._dragTarget === 'gradient') this._updateSV(event.clientX, event.clientY);\n if (this._dragTarget === 'hue') this._updateHue(event.clientX);\n }\n\n @HostListener('document:pointerup')\n protected _onDocPointerUp(): void {\n this._dragTarget = null;\n this._dragRect = null;\n }\n\n private _updateSV(clientX: number, clientY: number): void {\n const rect = this._dragRect!;\n const s = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n const v = Math.max(0, Math.min(1, 1 - (clientY - rect.top) / rect.height));\n this._saturation.set(s);\n this._brightness.set(v);\n this._hasColor.set(true);\n this._emitValue();\n }\n\n private _updateHue(clientX: number): void {\n const rect = this._dragRect!;\n const h = Math.max(0, Math.min(360, ((clientX - rect.left) / rect.width) * 360));\n this._hue.set(h);\n this._hasColor.set(true);\n this._emitValue();\n }\n\n // ── Hex input ──────────────────────────────────────────────────────────────\n protected _onHexInput(event: Event): void {\n let val = (event.target as HTMLInputElement).value.trim();\n if (!val.startsWith('#')) val = '#' + val;\n if (val.length === 7) {\n const rgb = hexToRgb(val);\n if (rgb) {\n const [h, s, v] = rgbToHsv(...rgb);\n this._hue.set(h);\n this._saturation.set(s);\n this._brightness.set(v);\n this._hasColor.set(true);\n this._emitValue();\n }\n }\n }\n\n protected _applyHexAndClose(): void {\n let val = (this._hexInput.value ?? '').trim();\n if (!val.startsWith('#')) val = '#' + val;\n const rgb = hexToRgb(val);\n if (rgb) {\n const [h, s, v] = rgbToHsv(...rgb);\n this._hue.set(h);\n this._saturation.set(s);\n this._brightness.set(v);\n this._hasColor.set(true);\n this._emitValue();\n }\n this._closePanel();\n }\n\n // ── Preset selection ───────────────────────────────────────────────────────\n protected _selectPreset(color: string): void {\n const rgb = hexToRgb(color);\n if (rgb) {\n const [h, s, v] = rgbToHsv(...rgb);\n this._hue.set(h);\n this._saturation.set(s);\n this._brightness.set(v);\n this._hasColor.set(true);\n this._emitValue();\n }\n this._closePanel();\n }\n\n // ── Clear ──────────────────────────────────────────────────────────────────\n protected _clearValue(): void {\n this._hasColor.set(false);\n this._onChange(null);\n }\n\n // ── Events ────────────────────────────────────────────────────────────────\n protected _onTriggerKeydown(event: KeyboardEvent): void {\n if ((event.key === 'Enter' || event.key === ' ') && !this._disabled()) {\n this._togglePanel();\n event.preventDefault();\n }\n }\n\n protected _onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._closePanel();\n }\n\n @HostListener('keydown.escape')\n onEscape(): void {\n if (this._isOpen()) this._closePanel();\n }\n\n // ── Emit formatted value ───────────────────────────────────────────────────\n private _emitValue(): void {\n const h = this._hue(), s = this._saturation(), v = this._brightness();\n const [r, g, b] = hsvToRgb(h, s, v);\n let value: string;\n switch (this.format()) {\n case 'rgb': value = rgbToRgbString(r, g, b); break;\n case 'hsl': value = rgbToHslString(r, g, b); break;\n default: value = rgbToHex(r, g, b); break;\n }\n this._onChange(value);\n }\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n writeValue(value: string | null): void {\n if (!value) {\n this._hasColor.set(false);\n return;\n }\n this._hasColor.set(true);\n let hex = value.trim();\n // Parse rgb(r, g, b)\n if (hex.startsWith('rgb')) {\n const m = hex.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) hex = rgbToHex(+m[1], +m[2], +m[3]);\n }\n const rgb = hexToRgb(hex);\n if (rgb) {\n const [h, s, v] = rgbToHsv(...rgb);\n this._hue.set(h);\n this._saturation.set(s);\n this._brightness.set(v);\n }\n }\n\n registerOnChange(fn: (v: string | null) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n setDisabledState(disabled: boolean): void { this._cvaDisabled.set(disabled); }\n}\n","import type { ClxDatepickerSize } from '../types/clx-datepicker.types';\n\nexport const DATEPICKER_SIZE_MAP: Record<ClxDatepickerSize, {\n trigger: string;\n label: string;\n hint: string;\n iconSize: 'xs' | 'sm' | 'md';\n}> = {\n sm: { trigger: 'h-8 text-sm', label: 'text-xs font-medium', hint: 'text-xs', iconSize: 'xs' },\n md: { trigger: 'h-10 text-sm', label: 'text-sm font-medium', hint: 'text-xs', iconSize: 'sm' },\n lg: { trigger: 'h-12 text-base', label: 'text-sm font-medium', hint: 'text-sm', iconSize: 'md' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n HostListener,\n inject,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { OverlayModule, ConnectedPosition, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxDatepickerSize, ClxDatepickerStatus } from '../../../types/clx-datepicker.types';\nimport { DATEPICKER_SIZE_MAP } from '../../../configs/datepicker.config';\nimport { INPUT_STATUS_MAP } from '../../../configs/input.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\ninterface CalendarDay {\n date: Date;\n inMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n}\n\nconst MONTH_NAMES_ES = [\n 'Enero','Febrero','Marzo','Abril','Mayo','Junio',\n 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre',\n];\nconst DAY_LABELS = ['Do','Lu','Ma','Mi','Ju','Vi','Sa'];\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n}\n\nfunction startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\n@Component({\n selector: 'clx-datepicker',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, OverlayModule],\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ClxDatepickerComponent), multi: true }],\n template: `\n @if (label()) {\n <label [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <div\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n [class]=\"_triggerClass()\"\n (click)=\"!_disabled() && _togglePanel()\"\n (keydown.enter)=\"!_disabled() && _togglePanel()\"\n (keydown.space)=\"!_disabled() && _togglePanel()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-expanded]=\"_isOpen()\"\n aria-label=\"Selecciona una fecha\">\n\n <div [class]=\"_prefixCellCls()\">\n <span clx-icon name=\"calendar_today\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n\n <span [class]=\"_displayClass()\">{{ _displayValue() }}</span>\n\n @if (_value() && !_disabled()) {\n <div class=\"absolute right-0 top-0 h-full flex items-center pr-1\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"close\" [iconOnly]=\"true\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation(); _clear()\"></button>\n </div>\n }\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayMinWidth]=\"_overlayWidth()\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_closePanel()\"\n (overlayKeydown)=\"_onOverlayKeydown($event)\">\n\n <div [class]=\"_panelClass()\" role=\"dialog\" aria-label=\"Calendario\">\n\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-slate-100\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"chevron_left\" [iconOnly]=\"true\" (click)=\"_prevMonth()\"></button>\n <button type=\"button\" [class]=\"_headerLabelCls()\" (click)=\"_toggleYearView()\">\n {{ _headerLabel() }}\n </button>\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"chevron_right\" [iconOnly]=\"true\" (click)=\"_nextMonth()\"></button>\n </div>\n\n @if (_showYearPicker()) {\n <div class=\"p-3 grid grid-cols-4 gap-1 max-h-52 overflow-y-auto\">\n @for (year of _yearList(); track year) {\n <button type=\"button\" [class]=\"_yearBtnCls(year)\" (click)=\"_selectYear(year)\">{{ year }}</button>\n }\n </div>\n } @else {\n <div class=\"grid grid-cols-7 px-3 pt-3 pb-1\">\n @for (day of _dayLabels; track day) {\n <div class=\"text-center text-xs font-semibold text-slate-400 py-1\">{{ day }}</div>\n }\n </div>\n <div class=\"grid grid-cols-7 px-3 pb-3 gap-y-0.5\">\n @for (cell of _calendarDays(); track cell.date.getTime()) {\n <button type=\"button\" [class]=\"_dayCls(cell)\" [disabled]=\"cell.isDisabled\"\n (click)=\"!cell.isDisabled && _selectDate(cell.date)\">\n {{ cell.date.getDate() }}\n </button>\n }\n </div>\n }\n\n <div class=\"flex items-center justify-between px-4 py-2 border-t border-slate-100\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" size=\"sm\" (click)=\"_selectToday()\">Hoy</button>\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"sm\" (click)=\"_closePanel()\">Cerrar</button>\n </div>\n\n </div>\n </ng-template>\n\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5' },\n})\nexport class ClxDatepickerComponent implements ControlValueAccessor {\n @ViewChild('origin') origin!: ElementRef;\n\n readonly label = input<string>('');\n readonly placeholder = input<string>('Selecciona una fecha');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxDatepickerSize>('md');\n readonly status = input<ClxDatepickerStatus>('default');\n readonly statusMessage = input<string>('');\n readonly hint = input<string>('');\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly value = input<Date | null>(null);\n readonly disabled = input<boolean>(false);\n\n readonly _value = signal<Date | null>(null);\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n private readonly _cursorYear = signal(new Date().getFullYear());\n private readonly _cursorMonth = signal(new Date().getMonth());\n protected readonly _isOpen = signal(false);\n protected readonly _showYearPicker = signal(false);\n protected readonly _dayLabels = DAY_LABELS;\n\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _sso = inject(ScrollStrategyOptions);\n readonly _scrollStrategy = this._sso.reposition();\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => {\n this._value.set(v);\n if (v) { this._cursorYear.set(v.getFullYear()); this._cursorMonth.set(v.getMonth()); }\n });\n });\n\n private _onChange: (v: Date | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n readonly _positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n ];\n\n protected readonly _sizeConfig = computed(() => DATEPICKER_SIZE_MAP[this.size()]);\n protected readonly _statusCfg = computed(() => INPUT_STATUS_MAP[this.status()]);\n protected readonly _overlayWidth = computed(() => {\n this._isOpen();\n return this._el.nativeElement.getBoundingClientRect().width;\n });\n\n protected readonly _labelClass = computed(() => `${this._sizeConfig().label} text-slate-700 leading-none`);\n protected readonly _hintClass = computed(() => `${this._sizeConfig().hint} text-gray-400`);\n protected readonly _statusMsgClass = computed(() => `${this._sizeConfig().hint} ${this._statusCfg().msgCls}`);\n\n protected readonly _prefixCellCls = computed(() => {\n const t = resolveColor(this.color());\n return `px-3 flex items-center shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n protected readonly _triggerClass = computed(() => {\n const size = this._sizeConfig();\n const status = this._statusCfg();\n const focus = resolveColor(this.color()).focus;\n const border = this._disabled() ? 'border-gray-200 bg-gray-50' : `${status.border} focus:outline-none ${focus}`;\n const cursor = this._disabled() ? 'cursor-not-allowed opacity-60' : 'cursor-pointer';\n return `relative flex items-stretch ${size.trigger} rounded-md border ${border} ${cursor} overflow-hidden transition-all duration-200 select-none`;\n });\n\n protected readonly _displayClass = computed(() => {\n const hasValue = !!this._value();\n const color = this._disabled() ? 'text-gray-400' : hasValue ? 'text-slate-700' : 'text-gray-400';\n return `flex-1 pl-3 pr-9 flex items-center text-sm ${color} truncate`;\n });\n\n protected readonly _displayValue = computed(() => {\n const v = this._value();\n if (!v) return this.placeholder();\n return v.toLocaleDateString('es-MX', { day: '2-digit', month: 'long', year: 'numeric' });\n });\n\n protected readonly _panelClass = computed(() =>\n 'bg-white rounded-xl shadow-xl border border-slate-200 overflow-hidden w-full min-w-70',\n );\n\n protected readonly _headerLabel = computed(() =>\n `${MONTH_NAMES_ES[this._cursorMonth()]} ${this._cursorYear()}`,\n );\n\n protected readonly _headerLabelCls = computed(() => {\n const t = resolveColor(this.color());\n return `${t.hoverBgMuted} text-sm font-semibold text-slate-700 px-3 py-1 rounded-lg transition-colors`;\n });\n\n protected readonly _yearList = computed(() => {\n const y = this._cursorYear();\n const years: number[] = [];\n for (let i = y - 12; i <= y + 12; i++) years.push(i);\n return years;\n });\n\n protected readonly _calendarDays = computed((): CalendarDay[] => {\n const year = this._cursorYear();\n const month = this._cursorMonth();\n const today = startOfDay(new Date());\n const selected = this._value() ? startOfDay(this._value()!) : null;\n const min = this.minDate() ? startOfDay(this.minDate()!) : null;\n const max = this.maxDate() ? startOfDay(this.maxDate()!) : null;\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const days: CalendarDay[] = [];\n\n for (let i = firstDay.getDay() - 1; i >= 0; i--) {\n const d = new Date(year, month, -i);\n days.push({ date: d, inMonth: false, isToday: isSameDay(d, today), isSelected: false, isDisabled: true });\n }\n for (let d = 1; d <= lastDay.getDate(); d++) {\n const date = new Date(year, month, d);\n const disabled = (min !== null && date < min) || (max !== null && date > max);\n days.push({ date, inMonth: true, isToday: isSameDay(date, today), isSelected: selected ? isSameDay(date, selected) : false, isDisabled: disabled });\n }\n for (let i = 1; i <= 42 - days.length; i++) {\n const d = new Date(year, month + 1, i);\n days.push({ date: d, inMonth: false, isToday: isSameDay(d, today), isSelected: false, isDisabled: true });\n }\n return days;\n });\n\n protected _dayCls(cell: CalendarDay): string {\n const base = 'w-9 h-9 flex items-center justify-center text-sm rounded-full transition-colors focus:outline-none mx-auto';\n const t = resolveColor(this.color());\n if (cell.isSelected) return `${base} ${t.bg} ${t.text} font-semibold`;\n if (cell.isDisabled) return `${base} text-gray-200 cursor-not-allowed`;\n if (!cell.inMonth) return `${base} text-gray-300 ${t.hoverBgMuted} cursor-pointer`;\n let cls = `${base} text-slate-700 ${t.hoverBgMuted} cursor-pointer`;\n if (cell.isToday) cls += ` ring-2 ${t.ring}`;\n return cls;\n }\n\n protected _yearBtnCls(year: number): string {\n const base = 'py-1.5 text-sm rounded-lg transition-colors text-center';\n const t = resolveColor(this.color());\n return year === this._cursorYear()\n ? `${base} ${t.bg} ${t.text} font-semibold`\n : `${base} text-slate-600 ${t.hoverBgMuted} cursor-pointer`;\n }\n\n protected _togglePanel(): void { this._isOpen() ? this._closePanel() : this._openPanel(); }\n protected _closePanel(): void { this._isOpen.set(false); this._showYearPicker.set(false); this._onTouched(); }\n protected _toggleYearView(): void { this._showYearPicker.update(v => !v); }\n protected _selectYear(year: number): void { this._cursorYear.set(year); this._showYearPicker.set(false); }\n\n private _openPanel(): void {\n const v = this._value();\n if (v) { this._cursorYear.set(v.getFullYear()); this._cursorMonth.set(v.getMonth()); }\n this._showYearPicker.set(false);\n this._isOpen.set(true);\n }\n\n protected _prevMonth(): void {\n let m = this._cursorMonth() - 1, y = this._cursorYear();\n if (m < 0) { m = 11; y--; }\n this._cursorMonth.set(m); this._cursorYear.set(y);\n }\n\n protected _nextMonth(): void {\n let m = this._cursorMonth() + 1, y = this._cursorYear();\n if (m > 11) { m = 0; y++; }\n this._cursorMonth.set(m); this._cursorYear.set(y);\n }\n\n protected _selectDate(date: Date): void {\n const d = startOfDay(date);\n this._value.set(d);\n this._onChange(d);\n this._closePanel();\n }\n\n protected _selectToday(): void {\n const today = startOfDay(new Date());\n const min = this.minDate() ? startOfDay(this.minDate()!) : null;\n const max = this.maxDate() ? startOfDay(this.maxDate()!) : null;\n if ((min && today < min) || (max && today > max)) return;\n this._selectDate(today);\n }\n\n protected _clear(): void { this._value.set(null); this._onChange(null); }\n\n @HostListener('keydown.escape')\n onEscape(): void { if (this._isOpen()) this._closePanel(); }\n\n protected _onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._closePanel();\n }\n\n writeValue(val: Date | null): void {\n this._cvaConnected = true;\n const d = val ? startOfDay(val) : null;\n this._value.set(d);\n if (d) { this._cursorYear.set(d.getFullYear()); this._cursorMonth.set(d.getMonth()); }\n }\n\n registerOnChange(fn: (v: Date | null) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n setDisabledState(disabled: boolean): void { this._cvaDisabled.set(disabled); }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n HostListener,\n inject,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { OverlayModule, ConnectedPosition, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxDateRange, ClxDateRangePickerSize, ClxDateRangePickerStatus } from '../../../types/clx-date-range-picker.types';\nimport { DATEPICKER_SIZE_MAP } from '../../../configs/datepicker.config';\nimport { INPUT_STATUS_MAP } from '../../../configs/input.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\n\n// ── Calendar helpers ───────────────────────────────────────────────────────────\ninterface CalendarDay {\n date: Date;\n inMonth: boolean;\n isToday: boolean;\n isDisabled: boolean;\n}\n\nconst MONTH_NAMES_ES = [\n 'Enero','Febrero','Marzo','Abril','Mayo','Junio',\n 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre',\n];\nconst DAY_LABELS = ['Do','Lu','Ma','Mi','Ju','Vi','Sa'];\n\nfunction startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\nfunction isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\nfunction isBefore(a: Date, b: Date): boolean { return a.getTime() < b.getTime(); }\nfunction isAfter(a: Date, b: Date): boolean { return a.getTime() > b.getTime(); }\nfunction isBetween(d: Date, from: Date, to: Date): boolean {\n return d.getTime() > from.getTime() && d.getTime() < to.getTime();\n}\nfunction formatShort(d: Date): string {\n return d.toLocaleDateString('es-MX', { day: '2-digit', month: 'short', year: 'numeric' });\n}\nfunction addMonths(year: number, month: number, delta: number): { year: number; month: number } {\n let m = month + delta;\n let y = year;\n while (m > 11) { m -= 12; y++; }\n while (m < 0) { m += 12; y--; }\n return { year: y, month: m };\n}\nfunction buildCalendar(year: number, month: number, minDate: Date | null, maxDate: Date | null): CalendarDay[] {\n const today = startOfDay(new Date());\n const min = minDate ? startOfDay(minDate) : null;\n const max = maxDate ? startOfDay(maxDate) : null;\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const days: CalendarDay[] = [];\n for (let i = firstDay.getDay() - 1; i >= 0; i--) {\n const d = new Date(year, month, -i);\n days.push({ date: d, inMonth: false, isToday: isSameDay(d, today), isDisabled: true });\n }\n for (let d = 1; d <= lastDay.getDate(); d++) {\n const date = new Date(year, month, d);\n const disabled = (min !== null && date < min) || (max !== null && date > max);\n days.push({ date, inMonth: true, isToday: isSameDay(date, today), isDisabled: disabled });\n }\n for (let i = 1; i <= 42 - days.length; i++) {\n const d = new Date(year, month + 1, i);\n days.push({ date: d, inMonth: false, isToday: isSameDay(d, today), isDisabled: true });\n }\n return days;\n}\n\n// ── Presets ────────────────────────────────────────────────────────────────────\ninterface DatePreset { label: string; range: () => ClxDateRange }\nconst DATE_PRESETS: DatePreset[] = [\n { label: 'Hoy', range: () => { const t = startOfDay(new Date()); return { from: t, to: t }; } },\n { label: 'Esta semana', range: () => { const t = startOfDay(new Date()); const d = t.getDay(); const f = new Date(t); f.setDate(t.getDate() - d); const e = new Date(f); e.setDate(f.getDate() + 6); return { from: f, to: e }; } },\n { label: 'Este mes', range: () => { const t = new Date(); return { from: new Date(t.getFullYear(), t.getMonth(), 1), to: new Date(t.getFullYear(), t.getMonth() + 1, 0) }; } },\n { label: 'Mes anterior', range: () => { const t = new Date(); return { from: new Date(t.getFullYear(), t.getMonth() - 1, 1), to: new Date(t.getFullYear(), t.getMonth(), 0) }; } },\n { label: 'Último trimestre', range: () => { const t = new Date(); const q = Math.floor(t.getMonth() / 3); return { from: new Date(t.getFullYear(), (q - 1) * 3, 1), to: new Date(t.getFullYear(), q * 3, 0) }; } },\n { label: 'Este año', range: () => { const y = new Date().getFullYear(); return { from: new Date(y, 0, 1), to: new Date(y, 11, 31) }; } },\n];\n\n@Component({\n selector: 'clx-date-range-picker',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, OverlayModule],\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ClxDateRangePickerComponent), multi: true }],\n template: `\n @if (label()) {\n <label [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <!-- ── Trigger ─────────────────────────────────────────────────────────── -->\n <div\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n [class]=\"_triggerClass()\"\n (click)=\"!_disabled() && _togglePanel()\"\n (keydown.enter)=\"!_disabled() && _togglePanel()\"\n (keydown.space)=\"!_disabled() && _togglePanel()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-expanded]=\"_isOpen()\"\n aria-label=\"Selecciona un rango de fechas\">\n\n <div [class]=\"_prefixCellCls()\">\n <span clx-icon name=\"date_range\" [size]=\"_sizeConfig().iconSize\"></span>\n </div>\n\n <span [class]=\"_displayClass()\">{{ _displayValue() }}</span>\n\n @if (_hasValue() && !_disabled()) {\n <div class=\"absolute right-0 top-0 h-full flex items-center pr-1\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"close\" [iconOnly]=\"true\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation(); _clear()\"></button>\n </div>\n }\n </div>\n\n <!-- ── Overlay panel ───────────────────────────────────────────────────── -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_cancel()\"\n (overlayKeydown)=\"_onOverlayKeydown($event)\">\n\n <div class=\"bg-white rounded-xl shadow-xl border border-slate-200 overflow-hidden\" role=\"dialog\" aria-label=\"Rango de fechas\">\n\n <div class=\"flex\">\n\n <!-- Presets sidebar -->\n <div class=\"flex flex-col border-r border-slate-100 py-3 shrink-0 min-w-36\">\n <p class=\"px-4 pb-2 text-xs font-semibold text-slate-400 uppercase tracking-wide\">Presets</p>\n @for (preset of _presets; track preset.label) {\n <button type=\"button\" [class]=\"_presetCls(preset)\" (click)=\"_applyPreset(preset)\">\n {{ preset.label }}\n </button>\n }\n </div>\n\n <!-- Calendars -->\n <div class=\"flex flex-col\">\n <div class=\"flex divide-x divide-slate-100\">\n\n <!-- Left calendar (cursor month) -->\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"chevron_left\" [iconOnly]=\"true\" (click)=\"_prevMonth()\"></button>\n <span class=\"text-sm font-semibold text-slate-700\">{{ _leftLabel() }}</span>\n <div class=\"w-9\"></div>\n </div>\n <div class=\"grid grid-cols-7 mb-1\">\n @for (day of _dayLabels; track day) {\n <div class=\"w-9 text-center text-xs font-semibold text-slate-400 py-1\">{{ day }}</div>\n }\n </div>\n <div class=\"grid grid-cols-7 gap-y-0.5\">\n @for (cell of _leftDays(); track cell.date.getTime()) {\n <button type=\"button\" [class]=\"_dayCls(cell)\"\n [disabled]=\"cell.isDisabled\"\n (mouseenter)=\"!cell.isDisabled && _onHover(cell.date)\"\n (mouseleave)=\"_hoverDate.set(null)\"\n (click)=\"!cell.isDisabled && _selectDate(cell.date)\">\n {{ cell.date.getDate() }}\n </button>\n }\n </div>\n </div>\n\n <!-- Right calendar (cursor month + 1) -->\n <div class=\"p-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"w-9\"></div>\n <span class=\"text-sm font-semibold text-slate-700\">{{ _rightLabel() }}</span>\n <button clx-button variant=\"ghost\" [color]=\"color()\" shape=\"circle\" size=\"sm\"\n icon=\"chevron_right\" [iconOnly]=\"true\" (click)=\"_nextMonth()\"></button>\n </div>\n <div class=\"grid grid-cols-7 mb-1\">\n @for (day of _dayLabels; track day) {\n <div class=\"w-9 text-center text-xs font-semibold text-slate-400 py-1\">{{ day }}</div>\n }\n </div>\n <div class=\"grid grid-cols-7 gap-y-0.5\">\n @for (cell of _rightDays(); track cell.date.getTime()) {\n <button type=\"button\" [class]=\"_dayCls(cell)\"\n [disabled]=\"cell.isDisabled\"\n (mouseenter)=\"!cell.isDisabled && _onHover(cell.date)\"\n (mouseleave)=\"_hoverDate.set(null)\"\n (click)=\"!cell.isDisabled && _selectDate(cell.date)\">\n {{ cell.date.getDate() }}\n </button>\n }\n </div>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"flex items-center justify-between px-4 py-3 border-t border-slate-100\">\n <span class=\"text-xs text-slate-500\">\n @if (_draftFrom()) {\n {{ _formatShort(_draftFrom()!) }}\n @if (_draftTo()) { <span class=\"mx-1\">→</span> {{ _formatShort(_draftTo()!) }} }\n @else { <span class=\"mx-1 text-slate-300\">→ ...</span> }\n } @else {\n Selecciona fecha de inicio\n }\n </span>\n <div class=\"flex items-center gap-2\">\n <button clx-button variant=\"ghost\" color=\"slate\" size=\"sm\" (click)=\"_cancel()\">Cancelar</button>\n <button clx-button variant=\"solid\" [color]=\"color()\" size=\"sm\"\n [disabled]=\"!_canApply()\"\n (click)=\"_apply()\">\n Aplicar\n </button>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n </ng-template>\n\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5' },\n})\nexport class ClxDateRangePickerComponent implements ControlValueAccessor {\n\n readonly label = input<string>('');\n readonly placeholder = input<string>('Selecciona un rango');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxDateRangePickerSize>('md');\n readonly status = input<ClxDateRangePickerStatus>('default');\n readonly statusMessage = input<string>('');\n readonly hint = input<string>('');\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly value = input<ClxDateRange | null>(null);\n readonly disabled = input<boolean>(false);\n\n // ── Committed value (emitted on Apply) ────────────────────────────────────\n private readonly _committed = signal<ClxDateRange | null>(null);\n private _cvaConnected = false;\n\n // ── Draft (in-progress selection inside the panel) ────────────────────────\n protected readonly _draftFrom = signal<Date | null>(null);\n protected readonly _draftTo = signal<Date | null>(null);\n protected readonly _hoverDate = signal<Date | null>(null);\n\n protected readonly _presets = DATE_PRESETS;\n protected readonly _dayLabels = DAY_LABELS;\n\n private readonly _cvaDisabled = signal(false);\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n protected readonly _isOpen = signal(false);\n\n // Cursor: left calendar month\n private readonly _cursorYear = signal(new Date().getFullYear());\n private readonly _cursorMonth = signal(new Date().getMonth());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => {\n this._committed.set(v);\n if (v) {\n this._draftFrom.set(startOfDay(v.from));\n this._draftTo.set(startOfDay(v.to));\n this._cursorYear.set(v.from.getFullYear());\n this._cursorMonth.set(v.from.getMonth());\n } else {\n this._draftFrom.set(null);\n this._draftTo.set(null);\n }\n });\n });\n\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _sso = inject(ScrollStrategyOptions);\n readonly _scrollStrategy = this._sso.reposition();\n\n private _onChange: (v: ClxDateRange | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n readonly _positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n ];\n\n // ── Config ─────────────────────────────────────────────────────────────────\n protected readonly _sizeConfig = computed(() => DATEPICKER_SIZE_MAP[this.size()]);\n protected readonly _statusCfg = computed(() => INPUT_STATUS_MAP[this.status()]);\n\n // ── Calendar labels ────────────────────────────────────────────────────────\n protected readonly _leftLabel = computed(() =>\n `${MONTH_NAMES_ES[this._cursorMonth()]} ${this._cursorYear()}`,\n );\n protected readonly _rightLabel = computed(() => {\n const { year, month } = addMonths(this._cursorYear(), this._cursorMonth(), 1);\n return `${MONTH_NAMES_ES[month]} ${year}`;\n });\n\n // ── Calendar days ──────────────────────────────────────────────────────────\n protected readonly _leftDays = computed(() =>\n buildCalendar(this._cursorYear(), this._cursorMonth(), this.minDate(), this.maxDate()),\n );\n protected readonly _rightDays = computed(() => {\n const { year, month } = addMonths(this._cursorYear(), this._cursorMonth(), 1);\n return buildCalendar(year, month, this.minDate(), this.maxDate());\n });\n\n // ── Display ────────────────────────────────────────────────────────────────\n protected readonly _hasValue = computed(() => !!this._committed());\n protected readonly _displayValue = computed(() => {\n const r = this._committed();\n if (!r) return this.placeholder();\n return `${formatShort(r.from)} — ${formatShort(r.to)}`;\n });\n protected readonly _canApply = computed(() => !!this._draftFrom() && !!this._draftTo());\n\n // ── Classes ────────────────────────────────────────────────────────────────\n protected readonly _labelClass = computed(() => `${this._sizeConfig().label} text-slate-700 leading-none`);\n protected readonly _hintClass = computed(() => `${this._sizeConfig().hint} text-gray-400`);\n protected readonly _statusMsgClass = computed(() => `${this._sizeConfig().hint} ${this._statusCfg().msgCls}`);\n\n protected readonly _prefixCellCls = computed(() => {\n const t = resolveColor(this.color());\n return `px-3 flex items-center shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n protected readonly _triggerClass = computed(() => {\n const size = this._sizeConfig();\n const status = this._statusCfg();\n const focus = resolveColor(this.color()).focus;\n const border = this._disabled() ? 'border-gray-200 bg-gray-50' : `${status.border} focus:outline-none ${focus}`;\n const cursor = this._disabled() ? 'cursor-not-allowed opacity-60' : 'cursor-pointer';\n return `relative flex items-stretch ${size.trigger} rounded-md border ${border} ${cursor} overflow-hidden transition-all duration-200 select-none`;\n });\n\n protected readonly _displayClass = computed(() => {\n const color = this._disabled() ? 'text-gray-400' : this._hasValue() ? 'text-slate-700' : 'text-gray-400';\n return `flex-1 pl-3 pr-9 flex items-center text-sm ${color} truncate`;\n });\n\n // ── Day cell styling ───────────────────────────────────────────────────────\n protected _dayCls(cell: CalendarDay): string {\n const t = resolveColor(this.color());\n const base = 'w-9 h-9 flex items-center justify-center text-sm transition-colors focus:outline-none relative';\n\n if (cell.isDisabled) return `${base} text-gray-200 cursor-not-allowed rounded-full`;\n\n const d = startOfDay(cell.date);\n const from = this._draftFrom();\n const to = this._draftTo();\n const hover = this._hoverDate();\n const effTo = to ?? (hover && from && isAfter(hover, from) ? hover : null);\n\n const isFrom = !!from && isSameDay(d, from);\n const isTo = !!effTo && isSameDay(d, effTo);\n const inBetween = !!from && !!effTo && isBetween(d, from, effTo);\n\n if (isFrom && isTo) return `${base} ${t.bg} ${t.text} font-semibold rounded-full cursor-pointer`;\n if (isFrom) return `${base} ${t.bg} ${t.text} font-semibold rounded-l-full cursor-pointer`;\n if (isTo) return `${base} ${t.bg} ${t.text} font-semibold rounded-r-full cursor-pointer`;\n if (inBetween) return `${base} ${t.bgSubtle} ${t.textSubtle} rounded-none cursor-pointer`;\n\n if (!cell.inMonth) return `${base} text-gray-300 ${t.hoverBgMuted} rounded-full cursor-pointer`;\n\n let cls = `${base} text-slate-700 ${t.hoverBgMuted} rounded-full cursor-pointer`;\n if (cell.isToday) cls += ` ring-2 ${t.ring}`;\n return cls;\n }\n\n // ── Preset styling ─────────────────────────────────────────────────────────\n protected _presetCls(preset: DatePreset): string {\n const r = preset.range();\n const from = this._draftFrom();\n const to = this._draftTo();\n const active = from && to && isSameDay(from, r.from) && isSameDay(to, r.to);\n const t = resolveColor(this.color());\n const base = 'text-left px-4 py-1.5 text-xs whitespace-nowrap transition-colors';\n return active\n ? `${base} ${t.bgSubtle} ${t.textSubtle} font-semibold`\n : `${base} text-slate-600 hover:bg-slate-50`;\n }\n\n protected _formatShort(d: Date): string { return formatShort(d); }\n\n // ── Selection logic ────────────────────────────────────────────────────────\n protected _selectDate(date: Date): void {\n const d = startOfDay(date);\n const from = this._draftFrom();\n\n // Reset and start new if no from, or both already set, or clicked before from\n if (!from || (from && this._draftTo()) || isBefore(d, from)) {\n this._draftFrom.set(d);\n this._draftTo.set(null);\n this._hoverDate.set(null);\n } else {\n this._draftTo.set(d);\n this._hoverDate.set(null);\n }\n }\n\n protected _onHover(date: Date): void {\n if (this._draftFrom() && !this._draftTo()) {\n this._hoverDate.set(startOfDay(date));\n }\n }\n\n protected _applyPreset(preset: DatePreset): void {\n const r = preset.range();\n this._draftFrom.set(r.from);\n this._draftTo.set(r.to);\n this._hoverDate.set(null);\n // Navigate left calendar to preset start month\n this._cursorYear.set(r.from.getFullYear());\n this._cursorMonth.set(r.from.getMonth());\n }\n\n // ── Panel control ──────────────────────────────────────────────────────────\n protected _togglePanel(): void { this._isOpen() ? this._cancel() : this._openPanel(); }\n\n private _openPanel(): void {\n // Init draft from committed value\n const r = this._committed();\n if (r) {\n this._draftFrom.set(r.from);\n this._draftTo.set(r.to);\n this._cursorYear.set(r.from.getFullYear());\n this._cursorMonth.set(r.from.getMonth());\n } else {\n this._draftFrom.set(null);\n this._draftTo.set(null);\n }\n this._hoverDate.set(null);\n this._isOpen.set(true);\n }\n\n protected _cancel(): void {\n this._isOpen.set(false);\n this._onTouched();\n }\n\n protected _apply(): void {\n const from = this._draftFrom();\n const to = this._draftTo();\n if (!from || !to) return;\n const range: ClxDateRange = { from, to };\n this._committed.set(range);\n this._onChange(range);\n this._isOpen.set(false);\n this._onTouched();\n }\n\n protected _clear(): void {\n this._committed.set(null);\n this._draftFrom.set(null);\n this._draftTo.set(null);\n this._onChange(null);\n }\n\n // ── Navigation ─────────────────────────────────────────────────────────────\n protected _prevMonth(): void {\n const { year, month } = addMonths(this._cursorYear(), this._cursorMonth(), -1);\n this._cursorYear.set(year); this._cursorMonth.set(month);\n }\n\n protected _nextMonth(): void {\n const { year, month } = addMonths(this._cursorYear(), this._cursorMonth(), 1);\n this._cursorYear.set(year); this._cursorMonth.set(month);\n }\n\n @HostListener('keydown.escape')\n onEscape(): void { if (this._isOpen()) this._cancel(); }\n\n protected _onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._cancel();\n }\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n writeValue(val: ClxDateRange | null): void {\n this._cvaConnected = true;\n const r = val ?? null;\n this._committed.set(r);\n if (r) {\n this._draftFrom.set(startOfDay(r.from));\n this._draftTo.set(startOfDay(r.to));\n this._cursorYear.set(r.from.getFullYear());\n this._cursorMonth.set(r.from.getMonth());\n } else {\n this._draftFrom.set(null);\n this._draftTo.set(null);\n }\n }\n\n registerOnChange(fn: (v: ClxDateRange | null) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n setDisabledState(disabled: boolean): void { this._cvaDisabled.set(disabled); }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ClxModalComponent } from '../../advanced/clx-modal/clx-modal.component';\nimport { ClxInputComponent } from '../clx-input/clx-input.component';\nimport { CLX_MODAL_REF } from '../../../configs/modal.config';\n\n@Component({\n selector: 'clx-editor-link-modal',\n standalone: true,\n imports: [ClxModalComponent, ClxInputComponent, ReactiveFormsModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <clx-modal\n size=\"sm\"\n [confirmButton]=\"{ text: 'Insertar', color: 'indigo' }\"\n [cancelButton]=\"{ text: 'Cancelar', color: 'slate', variant: 'ghost' }\"\n [showCancelButton]=\"true\"\n (confirmClick)=\"_confirm()\"\n (cancelClick)=\"_cancel()\">\n\n <span clx-modal-title class=\"text-base font-semibold text-slate-800\">\n Insertar enlace\n </span>\n\n <form [formGroup]=\"_form\" class=\"space-y-4\" (ngSubmit)=\"_confirm()\">\n <clx-input\n label=\"Texto\"\n placeholder=\"Texto del enlace\"\n formControlName=\"text\"\n color=\"indigo\">\n </clx-input>\n <clx-input\n label=\"URL\"\n placeholder=\"https://ejemplo.com\"\n formControlName=\"url\"\n [status]=\"_urlInvalid() ? 'error' : 'default'\"\n statusMessage=\"Ingresa una URL válida\"\n color=\"indigo\">\n </clx-input>\n </form>\n\n </clx-modal>\n `,\n})\nexport class ClxEditorLinkModalComponent {\n private readonly _modalRef = inject(CLX_MODAL_REF, { optional: true });\n\n protected readonly _form = new FormGroup({\n text: new FormControl('', { nonNullable: true }),\n url: new FormControl('', { nonNullable: true, validators: [Validators.required, Validators.pattern(/^https?:\\/\\/.+/)] }),\n });\n\n protected readonly _urlInvalid = signal(false);\n\n protected _confirm(): void {\n const url = this._form.controls.url.value.trim();\n const text = this._form.controls.text.value.trim();\n if (!url || this._form.controls.url.invalid) {\n this._urlInvalid.set(true);\n return;\n }\n this._modalRef?.close({ url, text });\n }\n\n protected _cancel(): void {\n this._modalRef?.close(undefined);\n }\n}\n","import type { ClxEditorSize } from '../types/clx-editor.types';\n\nexport const EDITOR_SIZE_MAP: Record<ClxEditorSize, {\n minH: string;\n maxH: string;\n text: string;\n label: string;\n hint: string;\n toolbar: string;\n}> = {\n sm: { minH: 'min-h-[120px]', maxH: 'max-h-[200px]', text: 'text-sm', label: 'text-xs font-medium', hint: 'text-xs', toolbar: 'p-1 gap-0.5' },\n md: { minH: 'min-h-[180px]', maxH: 'max-h-[320px]', text: 'text-sm', label: 'text-sm font-medium', hint: 'text-xs', toolbar: 'p-1.5 gap-0.5' },\n lg: { minH: 'min-h-[260px]', maxH: 'max-h-[480px]', text: 'text-base', label: 'text-sm font-medium', hint: 'text-sm', toolbar: 'p-2 gap-1' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n model,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ComponentPortal, PortalModule } from '@angular/cdk/portal';\nimport { ClxAnimateService } from '../../../services/clx-animate.service';\nimport {\n CLX_MODAL_ANIM_CONFIG,\n MODAL_ANIM_DEFAULTS,\n type ClxModalAnimConfig,\n} from '../../../configs/modal.config';\n\n/**\n * Internal shell component — mounted via ComponentPortal onto the CDK overlay.\n * Renders the user's component via a second ComponentPortal inside cdkPortalOutlet.\n * Owns the enter / exit animation so every modal gets consistent motion.\n */\n@Component({\n selector: 'clx-modal-wrapper',\n standalone: true,\n imports: [PortalModule],\n template: `<ng-container [cdkPortalOutlet]=\"portal()\" />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display:contents' },\n})\nexport class ClxModalWrapperComponent implements OnInit {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n portal = model<ComponentPortal<any> | null>(null);\n\n private readonly _animate = inject(ClxAnimateService);\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _animConfig = inject<ClxModalAnimConfig>(CLX_MODAL_ANIM_CONFIG, { optional: true })\n ?? MODAL_ANIM_DEFAULTS;\n\n /** Resolved by ClxModalService so closeWithAnimation can call through */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClose?: (result?: any) => void;\n\n ngOnInit(): void {\n const target = this._panel();\n if (target) {\n this._animate.animate(target, {\n animation: this._animConfig.animationIn as never,\n duration: this._animConfig.animationDuration,\n trigger: 'manual',\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n closeWithAnimation(result?: any): void {\n const target = this._panel();\n if (!target) { this.onClose?.(result); return; }\n\n this._animate\n .animate(target, {\n animation: this._animConfig.animationOut as never,\n duration: this._animConfig.animationDuration,\n trigger: 'manual',\n fillMode: 'forwards',\n })\n .then(() => this.onClose?.(result));\n }\n\n /**\n * Returns the first real element child of this wrapper — which is the\n * rendered panel (clx-modal host) inserted by cdkPortalOutlet.\n * The wrapper itself is display:contents so the panel is its direct child.\n */\n private _panel(): HTMLElement | null {\n return (this._el.nativeElement as HTMLElement).firstElementChild as HTMLElement | null;\n }\n}\n","import {\n inject,\n Injectable,\n Injector,\n} from '@angular/core';\nimport {\n Overlay,\n OverlayConfig,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport type { ClxModalConfig, ClxModalRef } from '../types/clx-modal.types';\nimport {\n CLX_MODAL_DATA,\n CLX_MODAL_REF,\n CLX_MODAL_SIZE,\n CLX_MODAL_ANIM_CONFIG,\n MODAL_ANIM_DEFAULTS,\n type ClxModalAnimConfig,\n} from '../configs/modal.config';\nimport { ClxModalWrapperComponent } from '../components/advanced/clx-modal/clx-modal-wrapper.component';\n\n@Injectable({ providedIn: 'root' })\nexport class ClxModalService {\n private readonly _overlay: Overlay;\n private readonly _injector: Injector;\n private readonly _focusTrapFactory: FocusTrapFactory;\n\n constructor() {\n this._overlay = inject(Overlay);\n this._injector = inject(Injector);\n this._focusTrapFactory = inject(FocusTrapFactory);\n }\n\n open<R = unknown, D = unknown>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: new (...args: any[]) => any,\n config: ClxModalConfig<D> = {},\n ): ClxModalRef<R> {\n const {\n hasBackdrop = true,\n disableClose = false,\n panelClass = [],\n size = 'md',\n data,\n animationIn = MODAL_ANIM_DEFAULTS.animationIn,\n animationOut = MODAL_ANIM_DEFAULTS.animationOut,\n animationDuration = MODAL_ANIM_DEFAULTS.animationDuration,\n } = config;\n\n const animConfig: ClxModalAnimConfig = { animationIn, animationOut, animationDuration };\n\n let _resolve!: (value: R | undefined) => void;\n const _afterClosed = new Promise<R | undefined>(res => (_resolve = res));\n let _focusTrap: FocusTrap | null = null;\n let _closing = false;\n\n /** Plays exit animation then tears down the overlay. */\n const closeViaAnimation = (result?: R) => {\n if (_closing) return;\n _closing = true;\n wrapperRef.instance.closeWithAnimation(result);\n };\n\n const modalRef: ClxModalRef<R> = {\n close(result?: R): void { closeViaAnimation(result); },\n afterClosed(): Promise<R | undefined> { return _afterClosed; },\n };\n\n const extraClasses = Array.isArray(panelClass) ? panelClass : [panelClass];\n\n const overlayRef: OverlayRef = this._overlay.create(new OverlayConfig({\n hasBackdrop,\n backdropClass: 'clx-modal-backdrop',\n panelClass: extraClasses,\n scrollStrategy: this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),\n }));\n\n Object.assign(overlayRef.overlayElement.style, {\n position: 'fixed',\n inset: '0',\n width: '100vw',\n height: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1rem',\n boxSizing: 'border-box',\n });\n\n const innerInjector = Injector.create({\n parent: this._injector,\n providers: [\n { provide: CLX_MODAL_DATA, useValue: data ?? null },\n { provide: CLX_MODAL_REF, useValue: modalRef },\n { provide: CLX_MODAL_ANIM_CONFIG, useValue: animConfig },\n { provide: CLX_MODAL_SIZE, useValue: size },\n ],\n });\n\n // Attach wrapper — CDK creates the backdrop on attach()\n const wrapperPortal = new ComponentPortal(ClxModalWrapperComponent, null, innerInjector);\n const wrapperRef = overlayRef.attach(wrapperPortal) as import('@angular/core').ComponentRef<ClxModalWrapperComponent>;\n\n // Wire the actual teardown through the wrapper instance\n wrapperRef.instance.onClose = (result?: R) => {\n _focusTrap?.destroy();\n overlayRef.dispose();\n _resolve(result);\n };\n\n // Mount user component inside the wrapper via a second portal\n const contentPortal = new ComponentPortal(component, null, innerInjector);\n wrapperRef.instance.portal.set(contentPortal);\n\n if (hasBackdrop && !disableClose) {\n overlayRef.backdropClick().subscribe(() => closeViaAnimation());\n }\n if (!disableClose) {\n overlayRef.keydownEvents().subscribe(e => { if (e.key === 'Escape') closeViaAnimation(); });\n }\n\n _focusTrap = this._focusTrapFactory.create(overlayRef.overlayElement);\n _focusTrap.focusInitialElementWhenReady();\n\n return modalRef;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n signal,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxSelectComponent } from '../clx-select/clx-select.component';\nimport { ClxEditorLinkModalComponent } from './clx-editor-link-modal.component';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxEditorSize } from '../../../types/clx-editor.types';\nimport type { ClxSelectOption } from '../../../types/clx-select.types';\nimport { INPUT_STATUS_MAP } from '../../../configs/input.config';\nimport { EDITOR_SIZE_MAP } from '../../../configs/editor.config';\nimport { ClxModalService } from '../../../services/clx-modal.service';\n\nlet _clxEditorId = 0;\n\ninterface ToolBtn {\n cmd: string;\n arg?: string;\n icon: string;\n title: string;\n mark?: string;\n}\n\nconst TOOLBAR_GROUPS: ToolBtn[][] = [\n [\n { cmd: 'bold', icon: 'format_bold', title: 'Negrita', mark: 'bold' },\n { cmd: 'italic', icon: 'format_italic', title: 'Cursiva', mark: 'italic' },\n { cmd: 'underline', icon: 'format_underlined', title: 'Subrayado', mark: 'underline' },\n { cmd: 'strikeThrough', icon: 'strikethrough_s', title: 'Tachado', mark: 'strikeThrough' },\n ],\n [\n { cmd: 'superscript', icon: 'superscript', title: 'Superíndice', mark: 'superscript' },\n { cmd: 'subscript', icon: 'subscript', title: 'Subíndice', mark: 'subscript' },\n ],\n [\n { cmd: 'justifyLeft', icon: 'format_align_left', title: 'Izquierda', mark: 'justifyLeft' },\n { cmd: 'justifyCenter', icon: 'format_align_center', title: 'Centrar', mark: 'justifyCenter'},\n { cmd: 'justifyRight', icon: 'format_align_right', title: 'Derecha', mark: 'justifyRight' },\n { cmd: 'justifyFull', icon: 'format_align_justify', title: 'Justificar', mark: 'justifyFull' },\n ],\n [\n { cmd: 'blockquote', icon: 'format_quote', title: 'Cita' },\n { cmd: 'insertCode', icon: 'code', title: 'Código' },\n ],\n [\n { cmd: 'insertUnorderedList', icon: 'format_list_bulleted', title: 'Lista viñetas', mark: 'insertUnorderedList' },\n { cmd: 'insertOrderedList', icon: 'format_list_numbered', title: 'Lista numerada', mark: 'insertOrderedList' },\n { cmd: 'outdent', icon: 'format_indent_decrease', title: 'Quitar sangría' },\n { cmd: 'indent', icon: 'format_indent_increase', title: 'Sangría' },\n ],\n [\n { cmd: 'createLink', icon: 'link', title: 'Enlace' },\n { cmd: 'removeFormat', icon: 'format_clear', title: 'Limpiar formato' },\n { cmd: 'undo', icon: 'undo', title: 'Deshacer' },\n { cmd: 'redo', icon: 'redo', title: 'Rehacer' },\n ],\n];\n\nconst FONT_OPTIONS: ClxSelectOption[] = [\n { value: 'Roboto', label: 'Roboto' },\n { value: 'Arial', label: 'Arial' },\n { value: 'Georgia', label: 'Georgia' },\n { value: 'Times New Roman', label: 'Times New Roman' },\n { value: 'Courier New', label: 'Courier New' },\n { value: 'Verdana', label: 'Verdana' },\n { value: 'Trebuchet MS', label: 'Trebuchet MS' },\n { value: 'sans-serif', label: 'Sans Serif' },\n { value: 'serif', label: 'Serif' },\n { value: 'monospace', label: 'Mono' },\n];\n\nconst HEADING_OPTIONS: ClxSelectOption[] = [\n { value: 'p', label: 'Normal' },\n { value: 'h1', label: 'H1' },\n { value: 'h2', label: 'H2' },\n { value: 'h3', label: 'H3' },\n];\n\n@Component({\n selector: 'clx-editor',\n standalone: true,\n imports: [ClxIconComponent, ClxButtonComponent, ClxSelectComponent, ReactiveFormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxEditorComponent),\n multi: true,\n },\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [`\n .clx-editor-body:empty::before {\n content: attr(data-placeholder);\n color: #9ca3af;\n pointer-events: none;\n }\n .clx-editor-body:focus { outline: none; }\n .clx-editor-body p { margin: 0 0 .4em; }\n .clx-editor-body p:last-child { margin-bottom: 0; }\n .clx-editor-body h1 { font-size: 1.5em; font-weight: 700; margin: .5em 0; }\n .clx-editor-body h2 { font-size: 1.25em; font-weight: 600; margin: .5em 0; }\n .clx-editor-body h3 { font-size: 1.1em; font-weight: 600; margin: .5em 0; }\n .clx-editor-body ul,\n .clx-editor-body ol { padding-left: 1.5em; margin: .35em 0; }\n .clx-editor-body li { margin: .1em 0; }\n .clx-editor-body blockquote {\n border-left: 3px solid #e2e8f0;\n padding-left: .75em;\n color: #64748b;\n margin: .4em 0;\n }\n .clx-editor-body code {\n background: #f1f5f9;\n border-radius: 3px;\n padding: .1em .3em;\n font-size: .875em;\n font-family: ui-monospace, monospace;\n }\n .clx-editor-body a { color: #6366f1; text-decoration: underline; }\n .clx-editor-body hr { border: none; border-top: 1px solid #e2e8f0; margin: .6em 0; }\n\n /* ── Color picker buttons ── */\n .clx-editor-color-btn {\n position: relative;\n overflow: hidden;\n }\n .clx-editor-color-btn input[type=color] {\n position: absolute;\n inset: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n border: none;\n padding: 0;\n }\n\n /* ── Toolbar selects wrapper ── */\n .clx-editor-toolbar-select clx-select .flex.flex-col { gap: 0 !important; }\n\n /* ── HTML source textarea ── */\n .clx-editor-source {\n width: 100%;\n resize: none;\n border: none;\n outline: none;\n background: #0f172a;\n color: #e2e8f0;\n font-family: ui-monospace, 'Cascadia Code', 'Fira Code', monospace;\n font-size: .8125rem;\n line-height: 1.6;\n padding: 1rem;\n tab-size: 2;\n }\n `],\n template: `\n @if (label()) {\n <span [id]=\"_editorId + '-label'\" [class]=\"_sizeCfg().label + ' text-slate-700 leading-none'\">\n {{ label() }}\n </span>\n }\n\n <div [class]=\"_shellClass()\">\n\n <!-- ── Toolbar ────────────────────────────────────────────────────── -->\n @if (!_disabled()) {\n <div [class]=\"_toolbarClass()\">\n\n @if (!_sourceMode()) {\n\n <!-- Font family -->\n <div class=\"clx-editor-toolbar-select\" style=\"min-width:110px\" (mousedown)=\"_saveRange()\">\n <clx-select\n placeholder=\"Fuente\"\n [options]=\"_fontOptions\"\n [activeColor]=\"color()\"\n size=\"sm\"\n [formControl]=\"_fontCtrl\"\n (ngModelChange)=\"_onSelectFont($event)\">\n </clx-select>\n </div>\n\n <div class=\"clx-editor-divider mx-1\"></div>\n\n <!-- Heading -->\n <div class=\"clx-editor-toolbar-select\" style=\"min-width:90px\" (mousedown)=\"_saveRange()\">\n <clx-select\n placeholder=\"Estilo\"\n [options]=\"_headingOptions\"\n [activeColor]=\"color()\"\n size=\"sm\"\n [formControl]=\"_headingCtrl\"\n (ngModelChange)=\"_onSelectHeading($event)\">\n </clx-select>\n </div>\n\n <div class=\"clx-editor-divider mx-1\"></div>\n\n <!-- Mark buttons -->\n @for (group of _groups; track $index) {\n @for (btn of group; track btn.cmd) {\n <button\n clx-button\n [variant]=\"_btnVariant(btn.mark)\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n [icon]=\"btn.icon\"\n [iconOnly]=\"true\"\n [title]=\"btn.title\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_exec(btn.cmd, btn.arg)\">\n </button>\n }\n @if (!$last) {\n <div class=\"clx-editor-divider mx-1\"></div>\n }\n }\n\n <div class=\"clx-editor-divider mx-1\"></div>\n\n <!-- Text color -->\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n [iconOnly]=\"true\"\n title=\"Color de texto\"\n class=\"clx-editor-color-btn\"\n (mousedown)=\"_saveRange()\">\n <span clx-icon name=\"format_color_text\" size=\"sm\"></span>\n <input type=\"color\" (input)=\"_execVal('foreColor', $event)\">\n </button>\n\n <!-- Highlight -->\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n [iconOnly]=\"true\"\n title=\"Resaltado\"\n class=\"clx-editor-color-btn\"\n (mousedown)=\"_saveRange()\">\n <span clx-icon name=\"format_color_fill\" size=\"sm\"></span>\n <input type=\"color\" value=\"#fef08a\" (input)=\"_execVal('hiliteColor', $event)\">\n </button>\n\n <div class=\"clx-editor-divider mx-1\"></div>\n }\n\n <!-- HTML source toggle -->\n <button\n clx-button\n [variant]=\"_sourceMode() ? 'light' : 'ghost'\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n icon=\"html\"\n [iconOnly]=\"true\"\n title=\"Ver/editar HTML\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_toggleSource()\">\n </button>\n\n <!-- Copy HTML -->\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n size=\"xs\"\n shape=\"rounded\"\n [icon]=\"_copied() ? 'check' : 'content_copy'\"\n [iconOnly]=\"true\"\n title=\"Copiar HTML al portapapeles\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"_copyHtml()\">\n </button>\n\n </div>\n }\n\n <!-- ── Rich text area ─────────────────────────────────────────────── -->\n @if (!_sourceMode()) {\n <div\n #bodyEl\n [id]=\"_editorId\"\n role=\"textbox\"\n aria-multiline=\"true\"\n [attr.aria-labelledby]=\"label() ? _editorId + '-label' : null\"\n [attr.aria-placeholder]=\"placeholder()\"\n [attr.aria-disabled]=\"_disabled() ? 'true' : null\"\n class=\"clx-editor-body\"\n [attr.contenteditable]=\"_disabled() ? 'false' : 'true'\"\n [class]=\"_bodyClass()\"\n [attr.data-placeholder]=\"placeholder()\"\n (input)=\"_onInput()\"\n (blur)=\"_onBlur()\"\n (paste)=\"_onPaste($event)\"\n (keydown)=\"_onKeydown($event)\"\n ></div>\n }\n\n <!-- ── HTML source area ───────────────────────────────────────────── -->\n @if (_sourceMode()) {\n <textarea\n #sourceEl\n class=\"clx-editor-source\"\n [class]=\"_sourceClass()\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n [value]=\"_sourceValue()\"\n (input)=\"_onSourceInput($event)\"\n ></textarea>\n }\n\n </div>\n\n <!-- ── Bottom message ───────────────────────────────────────────────── -->\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_sizeCfg().hint + ' text-gray-400'\">{{ hint() }}</p>\n }\n `,\n host: { class: 'flex flex-col gap-1.5' },\n})\nexport class ClxEditorComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('Escribe aquí...');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxEditorSize>('md');\n readonly status = input<'default' | 'error' | 'success'>('default');\n readonly statusMessage = input<string>('');\n readonly hint = input<string>('');\n readonly disabled = input<boolean>(false);\n\n // ── View ─────────────────────────────────────────────────────────────────\n @ViewChild('bodyEl', { static: false }) private _bodyEl!: ElementRef<HTMLDivElement>;\n @ViewChild('sourceEl', { static: false }) private _sourceEl!: ElementRef<HTMLTextAreaElement>;\n\n // ── Services ─────────────────────────────────────────────────────────────\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _zone: NgZone;\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _modal = inject(ClxModalService);\n\n // ── Select options ────────────────────────────────────────────────────────\n protected readonly _fontOptions = FONT_OPTIONS;\n protected readonly _headingOptions = HEADING_OPTIONS;\n\n // ── Toolbar FormControls (drive clx-select) ───────────────────────────────\n protected readonly _fontCtrl = new FormControl<string>('Roboto');\n protected readonly _headingCtrl = new FormControl<string>('p');\n\n // ── State ─────────────────────────────────────────────────────────────────\n private readonly _cvaDisabled = signal(false);\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n protected readonly _tick = signal(0);\n protected readonly _sourceMode = signal(false);\n protected readonly _sourceValue = signal('');\n protected readonly _copied = signal(false);\n\n protected readonly _editorId = `clx-editor-${++_clxEditorId}`;\n protected readonly _groups = TOOLBAR_GROUPS;\n\n private _savedRange: Range | null = null;\n private _pendingValue: string | null = null;\n private _selectionUnsub: (() => void) | null = null;\n private _copiedTimer: ReturnType<typeof setTimeout> | null = null;\n\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n }\n\n // ── Lifecycle ─────────────────────────────────────────────────────────────\n ngAfterViewInit(): void {\n document.execCommand('defaultParagraphSeparator', false, 'p');\n\n if (this._pendingValue !== null) {\n this._bodyEl.nativeElement.innerHTML = this._pendingValue;\n this._pendingValue = null;\n }\n\n this._zone.runOutsideAngular(() => {\n const handler = () => {\n const active = document.activeElement;\n const body = this._bodyEl?.nativeElement;\n if (!body || (active !== body && !body.contains(active))) return;\n this._zone.run(() => this._tick.update(v => v + 1));\n };\n document.addEventListener('selectionchange', handler);\n this._selectionUnsub = () => document.removeEventListener('selectionchange', handler);\n });\n\n this._destroyRef.onDestroy(() => this._selectionUnsub?.());\n }\n\n ngOnDestroy(): void {\n this._selectionUnsub?.();\n if (this._copiedTimer) clearTimeout(this._copiedTimer);\n }\n\n // ── Computed ──────────────────────────────────────────────────────────────\n protected readonly _sizeCfg = computed(() => EDITOR_SIZE_MAP[this.size()]);\n\n protected readonly _shellClass = computed(() => {\n const statusCfg = INPUT_STATUS_MAP[this.status()];\n if (this._disabled()) {\n return 'rounded-xl border border-gray-200 bg-gray-50 overflow-hidden opacity-60 cursor-not-allowed';\n }\n const focus = this.status() !== 'default'\n ? statusCfg.ring.replace(/focus:/g, 'focus-within:')\n : resolveColor(this.color()).focusWithin;\n return `rounded-xl border ${statusCfg.border} ${focus} overflow-hidden bg-white transition-all duration-200`;\n });\n\n protected readonly _toolbarClass = computed(() =>\n `flex flex-wrap items-center gap-1 ${this._sizeCfg().toolbar} border-b border-slate-100 bg-white`,\n );\n\n protected readonly _bodyClass = computed(() => {\n const size = this._sizeCfg();\n const base = `${size.minH} ${size.maxH} overflow-y-auto ${size.text} p-4 focus:outline-none`;\n return this._disabled() ? `${base} pointer-events-none select-none` : base;\n });\n\n protected readonly _sourceClass = computed(() => {\n const size = this._sizeCfg();\n return `${size.minH} ${size.maxH} overflow-y-auto ${size.text}`;\n });\n\n protected readonly _statusMsgClass = computed(() =>\n `${this._sizeCfg().hint} ${INPUT_STATUS_MAP[this.status()].msgCls}`,\n );\n\n // ── Toolbar button variant (active vs ghost) ──────────────────────────────\n protected _btnVariant(mark?: string): 'light' | 'ghost' {\n void this._tick();\n return (mark && document.queryCommandState(mark)) ? 'light' : 'ghost';\n }\n\n // ── Select handlers ───────────────────────────────────────────────────────\n protected _onSelectFont(value: string | number | (string | number)[] | null): void {\n if (!value) return;\n this._restoreRange();\n document.execCommand('fontName', false, String(value));\n this._bodyEl?.nativeElement.focus();\n this._emitChange();\n }\n\n protected _onSelectHeading(value: string | number | (string | number)[] | null): void {\n if (!value) return;\n this._restoreRange();\n document.execCommand('formatBlock', false, String(value));\n this._bodyEl?.nativeElement.focus();\n this._emitChange();\n }\n\n // ── Source mode toggle ────────────────────────────────────────────────────\n protected _toggleSource(): void {\n if (this._sourceMode()) {\n const html = this._sourceEl?.nativeElement.value ?? this._sourceValue();\n this._sourceMode.set(false);\n setTimeout(() => {\n if (this._bodyEl) {\n this._bodyEl.nativeElement.innerHTML = html;\n this._onChange(html);\n }\n });\n } else {\n const html = this._bodyEl?.nativeElement.innerHTML ?? '';\n this._sourceValue.set(html);\n this._sourceMode.set(true);\n }\n }\n\n // ── Copy HTML ─────────────────────────────────────────────────────────────\n protected _copyHtml(): void {\n const html = this._sourceMode()\n ? (this._sourceEl?.nativeElement.value ?? this._sourceValue())\n : (this._bodyEl?.nativeElement.innerHTML ?? '');\n navigator.clipboard.writeText(html).then(() => {\n this._copied.set(true);\n if (this._copiedTimer) clearTimeout(this._copiedTimer);\n this._copiedTimer = setTimeout(() => this._copied.set(false), 2000);\n });\n }\n\n // ── Commands ──────────────────────────────────────────────────────────────\n protected _exec(cmd: string, arg?: string): void {\n if (this._disabled()) return;\n if (cmd === 'blockquote') { this._restoreRange(); this._wrapBlockquote(); return; }\n if (cmd === 'insertCode') { this._restoreRange(); this._wrapCode(); return; }\n if (cmd === 'createLink') { this._openLinkModal(); return; }\n this._bodyEl.nativeElement.focus();\n this._restoreRange();\n document.execCommand(cmd, false, arg);\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n protected _execVal(cmd: string, event: Event): void {\n if (this._disabled()) return;\n const val = (event.target as HTMLSelectElement | HTMLInputElement).value;\n this._restoreRange();\n document.execCommand(cmd, false, val);\n this._bodyEl.nativeElement.focus();\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n // ── Link modal ────────────────────────────────────────────────────────────\n private _openLinkModal(): void {\n this._saveRange();\n const ref = this._modal.open<{ url: string; text: string }>(ClxEditorLinkModalComponent, { size: 'sm' });\n ref.afterClosed().then((result: { url: string; text: string } | undefined) => {\n if (!result?.url) return;\n this._restoreRange();\n this._bodyEl.nativeElement.focus();\n // If text provided and selection is collapsed, insert the text first\n const sel = window.getSelection();\n if (result.text && sel && sel.rangeCount > 0 && sel.getRangeAt(0).collapsed) {\n document.execCommand('insertText', false, result.text);\n // Re-select the inserted text\n const range = sel.getRangeAt(0);\n range.setStart(range.startContainer, range.startOffset - result.text.length);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n document.execCommand('createLink', false, result.url);\n this._emitChange();\n this._tick.update(v => v + 1);\n });\n }\n\n // ── Range save/restore ────────────────────────────────────────────────────\n protected _saveRange(): void {\n const sel = window.getSelection();\n if (sel && sel.rangeCount > 0) {\n this._savedRange = sel.getRangeAt(0).cloneRange();\n }\n }\n\n private _restoreRange(): void {\n if (!this._savedRange) return;\n const sel = window.getSelection();\n if (!sel) return;\n sel.removeAllRanges();\n sel.addRange(this._savedRange);\n }\n\n // ── Paste: keep HTML structure, strip unsafe ──────────────────────────────\n protected _onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const cd = event.clipboardData;\n if (!cd) return;\n const html = cd.getData('text/html');\n if (html) {\n document.execCommand('insertHTML', false, this._sanitizePaste(html));\n } else {\n document.execCommand('insertText', false, cd.getData('text/plain'));\n }\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n private _sanitizePaste(html: string): string {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n doc.querySelectorAll('script,style,meta,link,head').forEach(el => el.remove());\n doc.body.querySelectorAll('*').forEach(el => {\n Array.from(el.attributes).forEach(attr => {\n if (attr.name.startsWith('on') || attr.name === 'srcdoc') el.removeAttribute(attr.name);\n });\n });\n return doc.body.innerHTML;\n }\n\n // ── Source textarea input ─────────────────────────────────────────────────\n protected _onSourceInput(event: Event): void {\n const html = (event.target as HTMLTextAreaElement).value;\n this._sourceValue.set(html);\n this._onChange(html);\n }\n\n // ── Blockquote & code ─────────────────────────────────────────────────────\n private _wrapBlockquote(): void {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const bq = document.createElement('blockquote');\n bq.appendChild(range.extractContents());\n range.insertNode(bq);\n range.setStartAfter(bq);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n private _wrapCode(): void {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const code = document.createElement('code');\n code.appendChild(range.extractContents());\n range.insertNode(code);\n range.setStartAfter(code);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n protected _onInput(): void {\n this._emitChange();\n this._tick.update(v => v + 1);\n }\n\n protected _onBlur(): void {\n this._saveRange();\n this._onTouched();\n }\n\n protected _onKeydown(e: KeyboardEvent): void {\n if (this._disabled()) e.preventDefault();\n }\n\n private _emitChange(): void {\n this._onChange(this._bodyEl.nativeElement.innerHTML);\n }\n\n // ── CVA ───────────────────────────────────────────────────────────────────\n writeValue(html: string): void {\n const value = html ?? '';\n if (this._sourceMode()) {\n this._sourceValue.set(value);\n return;\n }\n if (!this._bodyEl) {\n this._pendingValue = value;\n return;\n }\n const el = this._bodyEl.nativeElement;\n if (el.innerHTML !== value) el.innerHTML = value;\n }\n\n registerOnChange(fn: (v: string) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n this._cdr.markForCheck();\n }\n}\n","export const SWITCH_SIZE_MAP = {\n sm: { track: 'w-9 h-5', thumb: 'w-4 h-4', translate: 'translate-x-4', label: 'text-xs' },\n md: { track: 'w-12 h-6', thumb: 'w-5 h-5', translate: 'translate-x-6', label: 'text-sm' },\n lg: { track: 'w-14 h-7', thumb: 'w-6 h-6', translate: 'translate-x-7', label: 'text-base' },\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport { SWITCH_SIZE_MAP } from '../../../configs/switch.config';\n\ntype ClxSwitchSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'label[clx-switch]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxSwitchComponent),\n multi: true,\n },\n ],\n template: `\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n [checked]=\"_checked()\"\n [disabled]=\"_disabled()\"\n (change)=\"_handleChange($event)\"\n (blur)=\"_handleBlur()\"\n />\n <div [class]=\"_trackClass()\">\n <div [class]=\"_thumbClass()\"></div>\n </div>\n @if (label()) {\n <span [class]=\"_labelClass()\">{{ label() }}</span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'relative inline-flex items-center gap-2 select-none',\n '[style.opacity]': '_disabled() ? \"0.5\" : null',\n '[style.cursor]': '_disabled() ? \"not-allowed\" : \"pointer\"',\n '[style.pointer-events]': '_disabled() ? \"none\" : null',\n },\n})\nexport class ClxSwitchComponent implements ControlValueAccessor {\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxSwitchSize>('md');\n readonly label = input<string>('');\n /** Initial value for standalone use (without FormControl) */\n readonly value = input<boolean>(false);\n /** Disabled state for standalone use (without FormControl) */\n readonly disabled = input<boolean>(false);\n\n readonly _checked = signal(false);\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._checked.set(v));\n });\n\n private _onChange: (v: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n\n protected readonly _sizeConfig = computed(() => SWITCH_SIZE_MAP[this.size()]);\n\n protected readonly _trackClass = computed(() => {\n const base = `${this._sizeConfig().track} relative rounded-full transition-all duration-200 flex-shrink-0`;\n return `${base} ${this._checked() ? resolveColor(this.color()).bg : 'bg-gray-300'}`;\n });\n\n protected readonly _thumbClass = computed(() => {\n const base = `${this._sizeConfig().thumb} absolute top-[2px] left-[2px] bg-white rounded-full shadow-sm transition-all duration-200`;\n return this._checked() ? `${base} ${this._sizeConfig().translate}` : base;\n });\n\n protected readonly _labelClass = computed(() =>\n `${this._sizeConfig().label} text-slate-700 leading-none`,\n );\n\n writeValue(val: boolean): void {\n this._cvaConnected = true;\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(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n protected _handleChange(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this._checked.set(checked);\n this._onChange(checked);\n }\n\n protected _handleBlur(): void {\n this._onTouched();\n }\n}\n","import type { ClxTextareaSize } from '../types/clx-textarea.types';\n\n// ── Size map ─────────────────────────────────────────────────────────────────\nexport const TEXTAREA_SIZE_MAP: Record<ClxTextareaSize, {\n textarea: string;\n label: string;\n hint: string;\n iconSize: 'xs' | 'sm' | 'md';\n iconRight: string;\n padDefaultL: string;\n padDefaultR: string;\n padRight: string; // with suffix icon\n}> = {\n sm: {\n textarea: 'text-sm py-1.5 min-h-[72px]',\n label: 'text-xs font-medium',\n hint: 'text-xs',\n iconSize: 'xs',\n iconRight: 'right-2.5',\n padDefaultL: 'pl-3',\n padDefaultR: 'pr-3',\n padRight: 'pr-8',\n },\n md: {\n textarea: 'text-sm py-2 min-h-[96px]',\n label: 'text-sm font-medium',\n hint: 'text-xs',\n iconSize: 'sm',\n iconRight: 'right-3',\n padDefaultL: 'pl-3',\n padDefaultR: 'pr-3',\n padRight: 'pr-9',\n },\n lg: {\n textarea: 'text-base py-2.5 min-h-[120px]',\n label: 'text-sm font-medium',\n hint: 'text-sm',\n iconSize: 'md',\n iconRight: 'right-3.5',\n padDefaultL: 'pl-4',\n padDefaultR: 'pr-4',\n padRight: 'pr-10',\n },\n};\n\n// ── Resize map ────────────────────────────────────────────────────────────────\nexport const TEXTAREA_RESIZE_MAP = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxTextareaStatus, ClxTextareaSize, ClxTextareaResize } from '../../../types/clx-textarea.types';\nimport { INPUT_STATUS_MAP } from '../../../configs/input.config';\nimport { TEXTAREA_SIZE_MAP, TEXTAREA_RESIZE_MAP } from '../../../configs/textarea.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\nlet _clxTextareaIdCounter = 0;\n\n@Component({\n selector: 'clx-textarea',\n standalone: true,\n imports: [ClxIconComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClxTextareaComponent),\n multi: true,\n },\n ],\n template: `\n @if (label()) {\n <label [for]=\"_taId\" [class]=\"_labelClass()\">{{ label() }}</label>\n }\n\n <!-- ── Outer wrapper: flex row — border + focus ring live here ─────── -->\n <div [class]=\"_wrapperClass()\">\n\n <!-- Prefix icon cell (flex sibling, stretches full height) -->\n @if (prefixIcon()) {\n <div [class]=\"_prefixCellCls()\">\n <span clx-icon [name]=\"prefixIcon()\" [size]=\"_sizeCfg().iconSize\"></span>\n </div>\n }\n\n <!-- ── Inner wrapper: relative, grows to fill, holds textarea + overlays -->\n <div class=\"relative flex-1 min-w-0\">\n\n <textarea\n [id]=\"_taId\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"_disabled()\"\n [rows]=\"rows()\"\n [value]=\"_value()\"\n [class]=\"_textareaClass()\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur()\"\n ></textarea>\n\n <!-- Status icon — top-right of the textarea area -->\n @if (status() !== 'default') {\n <div [class]=\"_suffixIconWrapCls()\" [style.color]=\"_statusCfg().iconColor\">\n <span clx-icon [name]=\"_statusCfg().iconName\" [size]=\"_sizeCfg().iconSize\"></span>\n </div>\n } @else if (suffixIcon()) {\n <div [class]=\"_suffixIconWrapCls()\">\n <span clx-icon [name]=\"suffixIcon()\" [size]=\"_sizeCfg().iconSize\" class=\"text-gray-400\"></span>\n </div>\n }\n\n <!-- Character counter -->\n @if (maxLength() > 0) {\n <span [class]=\"_counterClass()\">{{ _value().length }} / {{ maxLength() }}</span>\n }\n </div>\n </div>\n\n <!-- ── Bottom message ────────────────────────────────────────────────── -->\n @if (statusMessage() && status() !== 'default') {\n <p [class]=\"_statusMsgClass()\">{{ statusMessage() }}</p>\n } @else if (hint()) {\n <p [class]=\"_hintClass()\">{{ hint() }}</p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col gap-1.5' },\n})\nexport class ClxTextareaComponent implements ControlValueAccessor {\n\n // ── Inputs ───────────────────────────────────────────────────────────────\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxTextareaSize>('md');\n readonly status = input<ClxTextareaStatus>('default');\n readonly statusMessage = input<string>('');\n readonly hint = input<string>('');\n readonly prefixIcon = input<string>('');\n readonly suffixIcon = input<string>('');\n readonly resize = input<ClxTextareaResize>('vertical');\n readonly rows = input<number>(3);\n readonly maxLength = input<number>(0);\n readonly value = input<string>('');\n readonly disabled = input<boolean>(false);\n\n // ── Internal state ───────────────────────────────────────────────────────\n protected readonly _taId = `clx-textarea-${++_clxTextareaIdCounter}`;\n readonly _value = signal('');\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n protected readonly _disabled = computed(() => this._cvaDisabled() || this.disabled());\n\n private readonly _valueEffect = effect(() => {\n const v = this.value();\n if (!this._cvaConnected) untracked(() => this._value.set(v));\n });\n\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Computed shortcuts ───────────────────────────────────────────────────\n protected readonly _sizeCfg = computed(() => TEXTAREA_SIZE_MAP[this.size()]);\n protected readonly _statusCfg = computed(() => INPUT_STATUS_MAP[this.status()]);\n\n // ── Classes ──────────────────────────────────────────────────────────────\n protected readonly _labelClass = computed(() =>\n `${this._sizeCfg().label} text-slate-700 leading-none`,\n );\n\n protected readonly _hintClass = computed(() =>\n `${this._sizeCfg().hint} text-gray-400`,\n );\n\n /**\n * Outer flex wrapper — owns the border, border-radius and focus ring.\n * The border sits here (not on the textarea) so the prefix cell blends in\n * seamlessly, exactly like clx-input does in flex mode.\n */\n protected readonly _wrapperClass = computed(() => {\n const statusCfg = this._statusCfg();\n\n if (this._disabled()) {\n return 'flex items-stretch rounded-md border border-gray-200 overflow-hidden transition-all duration-200';\n }\n\n const focusCls = this.status() !== 'default'\n ? statusCfg.ring.replace(/focus:/g, 'focus-within:')\n : resolveColor(this.color()).focusWithin;\n\n const border = statusCfg.border;\n return `flex items-stretch rounded-md border ${border} ${focusCls} overflow-hidden transition-all duration-200`;\n });\n\n /** Prefix icon cell — flex column, full height of the wrapper */\n protected readonly _prefixCellCls = computed(() => {\n if (this._disabled()) {\n return 'flex items-start justify-center pt-2.5 px-2.5 shrink-0 border-r bg-gray-50 text-gray-300 border-gray-200';\n }\n const t = resolveColor(this.color());\n return `flex items-start justify-center pt-2.5 px-2.5 shrink-0 border-r ${t.bgSubtle} ${t.textSubtle} ${t.borderLight}`;\n });\n\n /** Textarea itself — no border (border lives on the wrapper), fills flex-1 */\n protected readonly _textareaClass = computed(() => {\n const size = this._sizeCfg();\n const resizeCls = TEXTAREA_RESIZE_MAP[this.resize()];\n const hasSuffix = this.status() !== 'default' || !!this.suffixIcon();\n const pr = hasSuffix ? size.padRight : size.padDefaultR;\n const maxLen = this.maxLength() > 0 ? 'pb-6' : '';\n const base = `w-full ${size.textarea} ${size.padDefaultL} ${pr} outline-none ${resizeCls} ${maxLen}`.trim();\n\n if (this._disabled()) {\n return `${base} bg-gray-50 cursor-not-allowed text-gray-400 placeholder:text-gray-300`;\n }\n return `${base} bg-white text-slate-700 placeholder:text-gray-400`;\n });\n\n /** Suffix icon — absolute inside the inner relative wrapper */\n protected readonly _suffixIconWrapCls = computed(() => {\n const size = this._sizeCfg();\n return `absolute ${size.iconRight} top-2.5 pointer-events-none flex items-center`;\n });\n\n protected readonly _statusMsgClass = computed(() =>\n `${this._sizeCfg().hint} ${this._statusCfg().msgCls}`,\n );\n\n protected readonly _counterClass = computed(() => {\n const over = this._value().length >= this.maxLength();\n return `absolute bottom-1.5 right-2.5 text-[10px] leading-none pointer-events-none select-none ${over ? 'text-red-500' : 'text-gray-400'}`;\n });\n\n // ── CVA ──────────────────────────────────────────────────────────────────\n writeValue(val: string): void {\n this._cvaConnected = true;\n this._value.set(val ?? '');\n }\n\n registerOnChange(fn: (v: string) => void): void { this._onChange = fn; }\n registerOnTouched(fn: () => void): void { this._onTouched = fn; }\n setDisabledState(disabled: boolean): void { this._cvaDisabled.set(disabled); }\n\n // ── Handlers ─────────────────────────────────────────────────────────────\n protected _handleInput(event: Event): void {\n const val = (event.target as HTMLTextAreaElement).value;\n this._value.set(val);\n this._onChange(val);\n }\n\n protected _handleBlur(): void {\n this._onTouched();\n }\n}\n","import type { ClxUploadSize } from '../types/clx-upload.types';\n\nexport const UPLOAD_SIZE_MAP: Record<ClxUploadSize, {\n zone: string;\n icon: 'sm' | 'md' | 'lg' | 'xl';\n title: string;\n hint: string;\n}> = {\n sm: { zone: 'py-5 px-6 gap-2', icon: 'md', title: 'text-sm', hint: 'text-xs' },\n md: { zone: 'py-9 px-8 gap-3', icon: 'lg', title: 'text-sm', hint: 'text-xs' },\n lg: { zone: 'py-12 px-10 gap-4', icon: 'xl', title: 'text-base', hint: 'text-sm' },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport { UPLOAD_SIZE_MAP } from '../../../configs/upload.config';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport type { ClxUploadError, ClxUploadSize } from '../../../types/clx-upload.types';\n\n@Component({\n selector: 'clx-upload',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n template: `\n <!-- Hidden file input -->\n <input\n #fileInput\n type=\"file\"\n class=\"sr-only\"\n [accept]=\"accept() || undefined\"\n [multiple]=\"multiple()\"\n [disabled]=\"_disabled()\"\n (change)=\"_onInputChange($event)\"\n />\n\n <!-- Optional label slot -->\n <ng-content select=\"[clx-label]\"></ng-content>\n\n <!-- ── Dropzone ──────────────────────────────────────────────────────────── -->\n <div\n [class]=\"_zoneClass()\"\n (click)=\"!_disabled() && _fileInput().nativeElement.click()\"\n (dragover)=\"_onDragOver($event)\"\n (dragleave)=\"_onDragLeave()\"\n (drop)=\"_onDrop($event)\">\n\n <span\n clx-icon\n name=\"cloud_upload\"\n [size]=\"_sizeConfig().icon\"\n [class]=\"_iconClass()\">\n </span>\n\n <div class=\"space-y-1 text-center\">\n <p [class]=\"'font-medium text-slate-700 ' + _sizeConfig().title\">\n Arrastra tu archivo aquí\n </p>\n <p [class]=\"'text-slate-500 ' + _sizeConfig().hint\">\n o\n <span [class]=\"'cursor-pointer font-medium hover:underline underline-offset-2 ' + _linkClass()\">\n {{ _buttonText() }}\n </span>\n </p>\n <p [class]=\"'text-slate-400 ' + _sizeConfig().hint\">{{ _hintText() }}</p>\n </div>\n </div>\n\n <!-- ── File list ─────────────────────────────────────────────────────────── -->\n @if (_files().length) {\n <div class=\"mt-3 space-y-2\">\n @for (file of _files(); track file.name + file.size) {\n <div [class]=\"_fileItemClass()\">\n <span clx-icon name=\"description\" size=\"sm\" [class]=\"_fileIconClass() + ' shrink-0'\"></span>\n <span class=\"flex-1 text-sm text-slate-700 font-medium truncate\">{{ file.name }}</span>\n <span class=\"text-xs text-slate-500 shrink-0\">{{ _formatSize(file.size) }}</span>\n <button\n clx-button\n variant=\"ghost\"\n [color]=\"color()\"\n shape=\"circle\"\n size=\"sm\"\n icon=\"close\"\n [iconOnly]=\"true\"\n (click)=\"_removeFile(file); $event.stopPropagation()\">\n </button>\n </div>\n }\n </div>\n }\n\n <!-- ── Error message ─────────────────────────────────────────────────────── -->\n @if (_errorMessage()) {\n <p class=\"mt-1.5 flex items-center gap-1.5 text-xs text-red-500\">\n <span clx-icon name=\"error\" size=\"xs\"></span>\n {{ _errorMessage() }}\n </p>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block w-full',\n },\n})\nexport class ClxUploadComponent implements ControlValueAccessor {\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly multiple = input<boolean>(false);\n readonly accept = input<string>('');\n /** Max file size in bytes. 0 = no limit. */\n readonly maxFileSize = input<number>(0);\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxUploadSize>('md');\n readonly disabled = input<boolean>(false);\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n readonly onUploadError = output<{ file: File; error: ClxUploadError }>();\n readonly onUploadSuccess = output<File[]>();\n\n // ── Internal state ─────────────────────────────────────────────────────────\n readonly _files = signal<File[]>([]);\n readonly _isDragging = signal(false);\n readonly _errorKey = signal<ClxUploadError | null>(null);\n\n // ── CVA ────────────────────────────────────────────────────────────────────\n private readonly _ngControl = inject(NgControl, { optional: true, self: true });\n private readonly _cvaDisabled = signal(false);\n private _cvaConnected = false;\n\n private _onChange: (v: File | File[] | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Template refs ──────────────────────────────────────────────────────────\n protected readonly _fileInput = viewChild.required<ElementRef<HTMLInputElement>>('fileInput');\n\n constructor() {\n if (this._ngControl) this._ngControl.valueAccessor = this;\n }\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _disabled = computed(() =>\n this._cvaDisabled() || this.disabled(),\n );\n\n protected readonly _sizeConfig = computed(() =>\n UPLOAD_SIZE_MAP[this.size()],\n );\n\n protected readonly _isError = computed(() =>\n this._errorKey() !== null,\n );\n\n protected readonly _fileItemClass = computed(() => {\n const t = resolveColor(this.color());\n return `flex items-center gap-2 rounded-lg border px-3 py-2 transition-colors ${t.borderLight} ${t.bgSubtle}`;\n });\n\n protected readonly _fileIconClass = computed(() =>\n resolveColor(this.color()).textSubtle,\n );\n\n protected readonly _zoneClass = computed(() => {\n const base = [\n 'flex flex-col items-center justify-center text-center',\n 'w-full rounded-xl border-2 border-dashed transition-all duration-200',\n this._sizeConfig().zone,\n ].join(' ');\n\n const t = resolveColor(this.color());\n\n if (this._disabled()) {\n return `${base} border-slate-200 bg-slate-50 opacity-50 cursor-not-allowed`;\n }\n if (this._isError()) {\n return `${base} border-red-400 bg-red-50/40 cursor-pointer`;\n }\n if (this._isDragging()) {\n return `${base} ${t.border} ${t.bgSubtle} cursor-copy`;\n }\n return `${base} border-slate-200 bg-white ${t.hoverBg.replace('hover:bg-', 'hover:border-')} ${t.hoverBgMuted} cursor-pointer`;\n });\n\n protected readonly _iconClass = computed(() => {\n if (this._isError()) return 'text-red-400';\n if (this._isDragging()) return resolveColor(this.color()).textSubtle;\n return 'text-slate-300';\n });\n\n protected readonly _linkClass = computed(() =>\n resolveColor(this.color()).textSubtle,\n );\n\n protected readonly _buttonText = computed(() =>\n this.multiple() ? 'Seleccionar archivos' : 'Seleccionar archivo',\n );\n\n protected readonly _hintText = computed(() => {\n const accept = this.accept().trim();\n const maxSize = this.maxFileSize();\n const parts: string[] = [];\n\n if (accept === '.pdf') {\n parts.push('Soporta archivos .pdf');\n } else if (accept === 'image/*') {\n parts.push('Soporta imágenes (PNG, JPG, etc.)');\n } else if (accept) {\n parts.push(`Formatos: ${accept}`);\n }\n\n if (this.multiple()) parts.push('Puedes subir varios archivos');\n\n if (maxSize > 0) {\n parts.push(`Máx. ${this._formatSize(maxSize)} por archivo`);\n }\n\n return parts.join(' · ') || 'Todos los archivos son aceptados';\n });\n\n protected readonly _errorMessage = computed(() => {\n switch (this._errorKey()) {\n case 'fileType': return 'Formato de archivo no permitido';\n case 'fileSize': return `Archivo demasiado grande (máx. ${this._formatSize(this.maxFileSize())})`;\n default: return null;\n }\n });\n\n // Auto-trim to 1 file when multiple switches off\n private readonly _multipleEffect = effect(() => {\n const multi = this.multiple();\n if (!multi) {\n untracked(() => {\n this._files.update(f => f.length > 1 ? [f[f.length - 1]] : f);\n });\n }\n });\n\n // ── CVA implementation ─────────────────────────────────────────────────────\n writeValue(value: File | File[] | null): void {\n this._cvaConnected = true;\n if (!value) {\n this._files.set([]);\n } else if (Array.isArray(value)) {\n this._files.set(value);\n } else {\n this._files.set([value]);\n }\n }\n\n registerOnChange(fn: (v: File | File[] | null) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this._cvaDisabled.set(disabled);\n }\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n protected _onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n if (files?.length) this._addFiles(files);\n // Reset so same file can be re-selected\n input.value = '';\n }\n\n protected _onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this._disabled()) this._isDragging.set(true);\n }\n\n protected _onDragLeave(): void {\n this._isDragging.set(false);\n }\n\n protected _onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this._isDragging.set(false);\n if (this._disabled()) return;\n const files = event.dataTransfer?.files;\n if (files?.length) this._addFiles(files);\n }\n\n protected _removeFile(file: File): void {\n this._files.update(current => current.filter(f => f !== file));\n this._errorKey.set(null);\n this._ngControl?.control?.setErrors(null);\n this._emit();\n this._onTouched();\n }\n\n // ── Helpers ────────────────────────────────────────────────────────────────\n private _addFiles(rawFiles: FileList | File[]): void {\n const files = Array.from(rawFiles);\n let firstError: ClxUploadError | null = null;\n const valid: File[] = [];\n\n for (const file of files) {\n if (this.accept() && !this._isAccepted(file)) {\n this.onUploadError.emit({ file, error: 'fileType' });\n if (!firstError) firstError = 'fileType';\n continue;\n }\n const maxSize = this.maxFileSize();\n if (maxSize > 0 && file.size > maxSize) {\n this.onUploadError.emit({ file, error: 'fileSize' });\n if (!firstError) firstError = 'fileSize';\n continue;\n }\n valid.push(file);\n }\n\n if (firstError) {\n this._errorKey.set(firstError);\n this._ngControl?.control?.setErrors(\n firstError === 'fileType' ? { fileType: true } : { fileSize: true },\n );\n } else {\n this._errorKey.set(null);\n this._ngControl?.control?.setErrors(null);\n }\n\n if (valid.length === 0) return;\n\n // A valid file arrived — always clear the error regardless of mixed batch\n this._errorKey.set(null);\n this._ngControl?.control?.setErrors(null);\n\n this._files.update(current =>\n this.multiple() ? [...current, ...valid] : [valid[valid.length - 1]],\n );\n\n this._emit();\n this._onTouched();\n this.onUploadSuccess.emit(valid);\n }\n\n private _isAccepted(file: File): boolean {\n const raw = this.accept().trim();\n if (!raw) return true;\n\n return raw.split(',').map(s => s.trim().toLowerCase()).some(pattern => {\n if (!pattern) return false;\n if (pattern.startsWith('.')) {\n return file.name.toLowerCase().endsWith(pattern);\n }\n if (pattern.endsWith('/*')) {\n return file.type.toLowerCase().startsWith(pattern.slice(0, -1));\n }\n return file.type.toLowerCase() === pattern;\n });\n }\n\n private _emit(): void {\n const files = this._files();\n const value: File | File[] | null = this.multiple()\n ? files\n : (files[0] ?? null);\n this._onChange(value);\n }\n\n protected _formatSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n if (bytes < 1_024) return `${bytes} B`;\n if (bytes < 1_048_576) return `${(bytes / 1_024).toFixed(1)} KB`;\n return `${(bytes / 1_048_576).toFixed(1)} MB`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'clx-step',\n standalone: true,\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block w-full' },\n})\nexport class ClxStepComponent {\n readonly label = input.required<string>();\n readonly description = input<string>('');\n readonly icon = input<string>('');\n /** Bind to a form's valid state or a custom signal to gate the Next button */\n readonly isValid = input<boolean>(true);\n\n /** Exposed so the parent wizard can toggle visibility imperatively */\n readonly nativeEl: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement;\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n DestroyRef,\n inject,\n input,\n output,\n QueryList,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ClxStepComponent } from './clx-step.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxTabsComponent } from '../../advanced/clx-tabs/clx-tabs.component';\nimport type { ClxWizardColor, ClxWizardOrientation } from '../../../types/clx-wizard.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxTabItem } from '../../../types/clx-tabs.types';\n\n@Component({\n selector: 'clx-wizard',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent, ClxTabsComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [`\n @keyframes clx-wizard-fade-slide {\n from { opacity: 0; transform: translateX(10px); }\n to { opacity: 1; transform: translateX(0); }\n }\n .clx-wizard-step-enter {\n animation: clx-wizard-fade-slide 220ms cubic-bezier(.4,0,.2,1) both;\n }\n @keyframes clx-wizard-fill {\n from { width: 0%; }\n to { width: 100%; }\n }\n .clx-wizard-connector-fill {\n animation: clx-wizard-fill 300ms ease both;\n }\n clx-step[data-active='false'] { display: none; }\n `],\n template: `\n <div [class]=\"_rootClass()\">\n\n <!-- ══ HORIZONTAL: clx-tabs indicator ═══════════════════════════════ -->\n @if (orientation() === 'horizontal') {\n <clx-tabs\n [tabs]=\"_tabItems()\"\n [clxColor]=\"color()\"\n [activeTab]=\"_currentIndexStr()\"\n (activeTabChange)=\"_onTabChange($event)\"\n />\n }\n\n <!-- ══ VERTICAL: Circle + connector indicator ═════════════════════════ -->\n @if (orientation() === 'vertical') {\n <div class=\"flex flex-col items-center gap-0 shrink-0 pt-1\">\n @for (step of _steps; track step; let i = $index; let last = $last) {\n <div class=\"flex flex-col items-center\">\n <!-- Circle -->\n <button\n type=\"button\"\n [class]=\"_circleClass(i)\"\n [disabled]=\"_isTabDisabled(i) || null\"\n (click)=\"_onCircleClick(i)\"\n [attr.aria-label]=\"step.label()\"\n [attr.aria-current]=\"i === _currentIndex() ? 'step' : null\"\n >\n @if (_stepStatus(i) === 'completed') {\n <span clx-icon name=\"check\" [size]=\"'xs'\"></span>\n } @else if (_stepStatus(i) === 'error') {\n <span clx-icon name=\"close\" [size]=\"'xs'\"></span>\n } @else if (step.icon()) {\n <span clx-icon [name]=\"step.icon()\" [size]=\"'xs'\"></span>\n } @else {\n <span class=\"text-xs font-bold leading-none select-none\">{{ i + 1 }}</span>\n }\n </button>\n <!-- Connector -->\n @if (!last) {\n <div class=\"relative w-0.5 h-8 bg-slate-200 overflow-hidden\">\n @if (_stepStatus(i) === 'completed') {\n <div [class]=\"'clx-wizard-connector-fill absolute inset-0 ' + _connectorFillColor()\"></div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- ══ Step content ═══════════════════════════════════════════════════ -->\n <div class=\"flex-1 min-w-0 overflow-hidden pt-4\">\n <div class=\"clx-wizard-step-enter\" [attr.data-step-key]=\"_currentIndex()\">\n <ng-content />\n </div>\n </div>\n\n <!-- ══ Footer ═════════════════════════════════════════════════════════ -->\n <div class=\"flex items-center justify-between gap-3 pt-4 border-t border-slate-100\">\n <div class=\"flex-1\">\n <ng-content select=\"[clx-wizard-footer-start]\" />\n </div>\n\n <div class=\"flex items-center gap-3\">\n @if (_currentIndex() > 0) {\n <button\n clx-button\n [color]=\"color()\"\n variant=\"ghost\"\n size=\"sm\"\n icon=\"arrow_back\"\n (click)=\"prev()\"\n >{{ prevLabel() }}</button>\n }\n\n @if (_currentIndex() < _lastIndex()) {\n <button\n clx-button\n [color]=\"color()\"\n variant=\"solid\"\n size=\"sm\"\n icon=\"arrow_forward\"\n iconPosition=\"right\"\n [disabled]=\"!_currentStepValid()\"\n (click)=\"next()\"\n >{{ nextLabel() }}</button>\n } @else {\n <button\n clx-button\n color=\"green\"\n variant=\"solid\"\n size=\"sm\"\n icon=\"check_circle\"\n iconPosition=\"right\"\n [disabled]=\"!_currentStepValid()\"\n (click)=\"_onFinish()\"\n >{{ finishLabel() }}</button>\n }\n </div>\n </div>\n </div>\n `,\n})\nexport class ClxWizardComponent implements AfterContentInit {\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly color = input<ClxWizardColor>('indigo');\n readonly orientation = input<ClxWizardOrientation>('horizontal');\n readonly linear = input<boolean>(true);\n readonly prevLabel = input<string>('Anterior');\n readonly nextLabel = input<string>('Siguiente');\n readonly finishLabel = input<string>('Finalizar');\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n readonly stepChange = output<number>();\n readonly finish = output<void>();\n\n private readonly _destroyRef = inject(DestroyRef);\n\n // ── Content children ───────────────────────────────────────────────────────\n @ContentChildren(ClxStepComponent) private _stepQuery!: QueryList<ClxStepComponent>;\n\n // ── State ──────────────────────────────────────────────────────────────────\n protected _steps: ClxStepComponent[] = [];\n protected readonly _currentIndex = signal(0);\n\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n ngAfterContentInit(): void {\n this._steps = this._stepQuery.toArray();\n this._syncActiveAttrs();\n this._stepQuery.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._steps = this._stepQuery.toArray();\n this._syncActiveAttrs();\n });\n }\n\n private _syncActiveAttrs(): void {\n this._steps.forEach((step, i) => {\n step.nativeEl.setAttribute('data-active', String(i === this._currentIndex()));\n });\n }\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _lastIndex = computed(() => Math.max(0, this._steps.length - 1));\n\n protected readonly _currentStepValid = computed(() => {\n const step = this._steps[this._currentIndex()];\n return step ? step.isValid() : true;\n });\n\n protected readonly _connectorFillColor = computed(() => resolveColor(this.color()).bg);\n protected readonly _currentIndexStr = computed(() => String(this._currentIndex()));\n\n protected readonly _tabItems = computed<ClxTabItem[]>(() =>\n this._steps.map((step, i) => ({\n id: String(i),\n label: step.label(),\n icon: step.icon() || undefined,\n disabled: this.linear() ? i > this._currentIndex() : false,\n }))\n );\n\n protected _onTabChange(id: string): void {\n const i = Number(id);\n if (!isNaN(i) && !this._isTabDisabled(i)) this._goTo(i);\n }\n\n // ── Step status ────────────────────────────────────────────────────────────\n protected _stepStatus(i: number): 'active' | 'completed' | 'pending' | 'error' {\n const current = this._currentIndex();\n if (i < current) return 'completed';\n if (i === current) return 'active';\n return 'pending';\n }\n\n protected _isTabDisabled(i: number): boolean {\n if (!this.linear()) return false;\n return i > this._currentIndex();\n }\n\n protected _onCircleClick(i: number): void {\n if (this._isTabDisabled(i)) return;\n this._goTo(i);\n }\n\n // ── Navigation API ─────────────────────────────────────────────────────────\n next(): void {\n if (!this._currentStepValid()) return;\n this._goTo(Math.min(this._currentIndex() + 1, this._lastIndex()));\n }\n\n prev(): void {\n this._goTo(Math.max(this._currentIndex() - 1, 0));\n }\n\n goTo(index: number): void {\n if (index < 0 || index > this._lastIndex()) return;\n if (this.linear() && index > this._currentIndex()) return;\n this._goTo(index);\n }\n\n private _goTo(index: number): void {\n this._currentIndex.set(index);\n this._syncActiveAttrs();\n this.stepChange.emit(index);\n }\n\n protected _onFinish(): void {\n if (!this._currentStepValid()) return;\n this.finish.emit();\n }\n\n // ── Class helpers ──────────────────────────────────────────────────────────\n protected readonly _rootClass = computed(() => {\n const vert = this.orientation() === 'vertical';\n return `flex gap-0 w-full ${vert ? 'flex-row gap-6' : 'flex-col'}`;\n });\n\n // ── Circle (vertical) ─────────────────────────────────────────────────────\n protected _circleClass(i: number): string {\n const base = 'relative z-10 flex items-center justify-center w-9 h-9 rounded-full transition-all duration-200 shrink-0 focus:outline-none';\n const status = this._stepStatus(i);\n const color = this.color();\n const ptr = !this._isTabDisabled(i) ? 'cursor-pointer' : 'cursor-default';\n\n const t = resolveColor(color);\n if (status === 'completed') return `${base} ${t.bg} ${t.text} ${ptr}`;\n if (status === 'active') return `${base} border-2 ${t.border} ${t.textSubtle} bg-white`;\n if (status === 'error') return `${base} bg-red-500 text-white ${ptr}`;\n return `${base} border-2 border-slate-200 text-slate-400 bg-white ${ptr}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n NgZone,\n OnDestroy,\n OnInit,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-app-layout',\n standalone: true,\n imports: [ClxIconComponent, CdkScrollable],\n template: `\n <!-- Mobile backdrop -->\n @if (_showBackdrop()) {\n <div\n class=\"fixed inset-0 z-20 bg-slate-900/60\"\n aria-hidden=\"true\"\n (click)=\"closeSidebar()\">\n </div>\n }\n\n <!-- Sidebar -->\n <aside\n [class]=\"_sidebarCls()\"\n (mouseenter)=\"_onSidebarEnter()\"\n (mouseleave)=\"_onSidebarLeave()\"\n aria-label=\"Navegación principal\">\n\n <!-- Brand slot -->\n <div class=\"border-b border-slate-700/50 shrink-0 overflow-hidden\">\n <ng-content select=\"clx-brand\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-h-0\">\n <ng-content select=\"[clx-sidebar]\"></ng-content>\n </div>\n </aside>\n\n <!-- Right panel -->\n <div class=\"flex-1 flex flex-col overflow-hidden min-w-0\">\n\n <header class=\"h-16 shrink-0 bg-white border-b border-slate-200 flex items-center z-10 px-4 gap-3\">\n <!-- Toggle button desktop -->\n <button\n type=\"button\"\n class=\"hidden lg:flex items-center justify-center w-8 h-8 rounded-md text-slate-500 hover:text-slate-700 hover:bg-slate-100 transition-colors shrink-0\"\n (click)=\"_toggleCollapsed()\">\n <span clx-icon [name]=\"collapsed() ? 'menu_open' : 'menu'\" size=\"sm\"></span>\n </button>\n <!-- Toggle button mobile -->\n <button\n type=\"button\"\n class=\"flex lg:hidden items-center justify-center w-8 h-8 rounded-md text-slate-500 hover:text-slate-700 hover:bg-slate-100 transition-colors shrink-0\"\n (click)=\"toggleSidebar()\">\n <span clx-icon name=\"menu\" size=\"sm\"></span>\n </button>\n\n <ng-content select=\"[clx-header]\"></ng-content>\n </header>\n\n <main cdkScrollable class=\"flex-1 overflow-y-auto bg-white\">\n <ng-content></ng-content>\n </main>\n\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex h-screen overflow-hidden' },\n})\nexport class ClxAppLayoutComponent implements OnInit, OnDestroy {\n\n private readonly _zone: NgZone;\n private readonly _document: Document;\n\n readonly activeColor = input<ClxColorInput>('indigo');\n\n readonly _sidebarOpen = signal(false);\n readonly collapsed = signal(false);\n readonly _hovered = signal(false);\n private readonly _isMobile = signal(true);\n\n readonly collapsedChange = output<boolean>();\n readonly expandedChange = output<boolean>();\n\n constructor() {\n const zone = inject(NgZone, { optional: true });\n this._zone = zone ?? { run: (fn: () => void) => fn(), runOutsideAngular: (fn: () => void) => fn() } as unknown as NgZone;\n this._document = inject(DOCUMENT);\n }\n\n protected readonly _showBackdrop = computed(() => this._sidebarOpen() && this._isMobile());\n\n readonly _isExpanded = computed(() => !this.collapsed() || this._hovered());\n\n protected readonly _sidebarCls = computed(() => {\n const isDesktopCollapsed = this.collapsed() && !this._isMobile();\n const hovered = this._hovered();\n let width: string;\n if (isDesktopCollapsed && hovered) {\n width = 'w-72';\n } else if (isDesktopCollapsed) {\n width = 'w-20';\n } else {\n width = 'w-72';\n }\n const isOverlay = isDesktopCollapsed && hovered;\n return [\n `fixed inset-y-0 left-0 z-30 ${width} flex flex-col`,\n 'bg-slate-900 overflow-hidden shrink-0',\n 'transition-[width,transform] duration-300 ease-in-out',\n isOverlay ? 'shadow-2xl' : '',\n 'lg:transition-[width] lg:relative lg:inset-auto lg:z-30 lg:translate-x-0',\n (!this._isMobile() || this._sidebarOpen()) ? 'translate-x-0' : '-translate-x-full',\n ].join(' ');\n });\n\n private _mql!: MediaQueryList;\n private _mqlListener!: (e: MediaQueryListEvent) => void;\n\n ngOnInit(): void {\n const win = this._document.defaultView;\n if (!win) return;\n\n this._mql = win.matchMedia('(min-width: 1024px)');\n this._isMobile.set(!this._mql.matches);\n if (this._mql.matches) this._sidebarOpen.set(true);\n\n this._mqlListener = (e: MediaQueryListEvent) => {\n this._zone.run(() => {\n this._isMobile.set(!e.matches);\n if (e.matches) {\n this._sidebarOpen.set(true);\n } else {\n this._sidebarOpen.set(false);\n this.collapsed.set(false);\n this.collapsedChange.emit(false);\n }\n });\n };\n\n this._mql.addEventListener('change', this._mqlListener);\n }\n\n ngOnDestroy(): void {\n this._mql?.removeEventListener('change', this._mqlListener);\n }\n\n _toggleCollapsed(): void {\n const next = !this.collapsed();\n this.collapsed.set(next);\n this._hovered.set(false);\n this.collapsedChange.emit(next);\n }\n\n _onSidebarEnter(): void {\n if (this.collapsed() && !this._isMobile()) {\n this._hovered.set(true);\n this.expandedChange.emit(true);\n }\n }\n\n _onSidebarLeave(): void {\n if (this._hovered()) {\n this._hovered.set(false);\n this.expandedChange.emit(false);\n }\n }\n\n toggleSidebar(): void { this._sidebarOpen.update(v => !v); }\n openSidebar(): void { this._sidebarOpen.set(true); }\n closeSidebar(): void { this._sidebarOpen.set(false); }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'clx-brand',\n standalone: true,\n template: `\n <div [class]=\"collapsed() ? 'flex items-center justify-center py-4' : 'flex items-center gap-3 px-4 py-4'\">\n <img [src]=\"logo()\" [alt]=\"name()\" class=\"h-8 w-8 shrink-0 object-contain\" />\n @if (!collapsed()) {\n <div class=\"min-w-0 overflow-hidden\">\n <p class=\"text-white text-sm font-semibold truncate leading-tight\">{{ name() }}</p>\n @if (description()) {\n <p class=\"text-slate-400 text-xs truncate leading-tight\">{{ description() }}</p>\n }\n </div>\n }\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxBrandComponent {\n readonly logo = input.required<string>();\n readonly name = input.required<string>();\n readonly description = input<string>('');\n readonly collapsed = input<boolean>(false);\n}\n","\n// ── Item geometry ──────────────────────────────────────────────────────────────\nexport const NAV_ITEM_BASE = 'flex items-center gap-3 w-full text-sm font-medium transition-colors duration-150 cursor-pointer select-none';\nexport const NAV_ITEM_L1 = 'px-6 py-3';\nexport const NAV_ITEM_L2 = 'pl-4 pr-3 py-2';\nexport const NAV_ITEM_IDLE = 'text-slate-400';\n\n// ── Children container ─────────────────────────────────────────────────────────\nexport const NAV_CHILDREN_WRAPPER = 'grid transition-all duration-300 ease-in-out';\nexport const NAV_CHILDREN_INNER = 'overflow-hidden';\nexport const NAV_CHILDREN_LIST = 'ml-6 py-1 space-y-0.5';\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport {\n NAV_ITEM_BASE,\n NAV_ITEM_L1,\n NAV_ITEM_L2,\n NAV_ITEM_IDLE,\n} from '../../../configs/nav.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-menu-item',\n standalone: true,\n imports: [ClxIconComponent, RouterLink, RouterLinkActive],\n template: `\n @if (routerLink()) {\n <a\n [routerLink]=\"routerLink()\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n [class]=\"rla.isActive ? _activeCls() : _idleCls()\"\n [title]=\"collapsed() ? label() : ''\">\n @if (icon()) {\n <span clx-icon [name]=\"icon()\" size=\"sm\" [class]=\"rla.isActive || nested() ? _iconCls() : 'text-slate-500'\"></span>\n }\n @if (!collapsed()) {\n <span class=\"flex-1 text-left truncate\">{{ label() }}</span>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"active() ? _activeCls() : _idleCls()\"\n [title]=\"collapsed() ? label() : ''\"\n (click)=\"itemClick.emit()\">\n @if (icon()) {\n <span clx-icon [name]=\"icon()\" size=\"sm\" [class]=\"active() || nested() ? _iconCls() : 'text-slate-500'\"></span>\n }\n @if (!collapsed()) {\n <span class=\"flex-1 text-left truncate\">{{ label() }}</span>\n }\n </button>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxMenuItemComponent {\n\n readonly label = input.required<string>();\n readonly icon = input<string>('');\n readonly active = input<boolean>(false);\n readonly color = input<ClxColorInput>('indigo');\n readonly nested = input<boolean>(false);\n readonly collapsed = input<boolean>(false);\n\n readonly routerLink = input<string | any[]>('');\n readonly routerLinkActiveOptions = input<{ exact: boolean }>({ exact: false });\n\n readonly itemClick = output<void>();\n\n private readonly _inheritedColor = signal<ClxColorInput | null>(null);\n private readonly _resolvedColor = computed(() => this._inheritedColor() ?? this.color());\n\n inheritColor(c: ClxColorInput): void { this._inheritedColor.set(c); }\n\n private readonly _geom = computed(() => {\n if (this.collapsed()) return 'w-full py-3 px-0 justify-center';\n return this.nested() ? NAV_ITEM_L2 : NAV_ITEM_L1;\n });\n\n protected readonly _iconCls = computed(() => resolveColor(this._resolvedColor()).textSubtle);\n\n protected readonly _idleCls = computed(() => {\n const t = resolveColor(this._resolvedColor());\n return `${NAV_ITEM_BASE} ${this._geom()} ${NAV_ITEM_IDLE} ${t.hoverBgMuted}`;\n });\n\n protected readonly _activeCls = computed(() => {\n const t = resolveColor(this._resolvedColor());\n if (this.collapsed()) {\n return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold`;\n }\n return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px] ${t.hoverBgMuted}`;\n });\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n DestroyRef,\n effect,\n inject,\n input,\n QueryList,\n signal,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport {\n NAV_ITEM_BASE,\n NAV_ITEM_L1,\n NAV_ITEM_IDLE,\n NAV_CHILDREN_WRAPPER,\n NAV_CHILDREN_INNER,\n NAV_CHILDREN_LIST,\n} from '../../../configs/nav.config';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport { ClxMenuItemComponent } from '../clx-menu-item/clx-menu-item.component';\n\n@Component({\n selector: 'clx-menu',\n standalone: true,\n imports: [ClxIconComponent, RouterLink, RouterLinkActive],\n template: `\n @if (routerLink()) {\n <a\n [routerLink]=\"routerLink()\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n [class]=\"_buttonCls(rla.isActive)\"\n [title]=\"collapsed() ? label() : ''\"\n (click)=\"$event.preventDefault(); !collapsed() && _toggle()\">\n @if (icon()) {\n <span clx-icon [name]=\"icon()\" size=\"sm\" [class]=\"_iconCls()\"></span>\n }\n @if (!collapsed()) {\n <span class=\"flex-1 text-left truncate\">{{ label() }}</span>\n <span\n clx-icon\n name=\"expand_more\"\n size=\"sm\"\n class=\"shrink-0 transition-transform duration-300\"\n [style.transform]=\"_isExpanded() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n </span>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"_buttonCls(active())\"\n [title]=\"collapsed() ? label() : ''\"\n (click)=\"!collapsed() && _toggle()\">\n @if (icon()) {\n <span clx-icon [name]=\"icon()\" size=\"sm\" [class]=\"_iconCls()\"></span>\n }\n @if (!collapsed()) {\n <span class=\"flex-1 text-left truncate\">{{ label() }}</span>\n <span\n clx-icon\n name=\"expand_more\"\n size=\"sm\"\n class=\"shrink-0 transition-transform duration-300\"\n [style.transform]=\"_isExpanded() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n </span>\n }\n </button>\n }\n\n <div\n [class]=\"NAV_CHILDREN_WRAPPER\"\n [style.grid-template-rows]=\"(!collapsed() && _isExpanded()) ? '1fr' : '0fr'\">\n <div [class]=\"NAV_CHILDREN_INNER\">\n <div [class]=\"NAV_CHILDREN_LIST\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxMenuComponent implements AfterContentInit, AfterViewInit {\n\n readonly label = input.required<string>();\n readonly icon = input<string>('');\n readonly color = input<ClxColorInput>('indigo');\n readonly collapsed = input<boolean>(false);\n readonly active = input<boolean>(false);\n\n readonly routerLink = input<string | any[]>('');\n readonly routerLinkActiveOptions = input<{ exact: boolean }>({ exact: false });\n\n readonly _isExpanded = signal(false);\n\n @ViewChild(RouterLinkActive)\n private readonly _rla?: RouterLinkActive;\n\n @ContentChildren(ClxMenuItemComponent, { descendants: true })\n private readonly _childItems!: QueryList<ClxMenuItemComponent>;\n\n private readonly _destroyRef = inject(DestroyRef);\n\n constructor() {\n effect(() => { if (this.active()) this._isExpanded.set(true); });\n effect(() => { if (this.collapsed()) this._isExpanded.set(false); });\n }\n\n ngAfterViewInit(): void {\n if (this._rla) {\n this._rla.isActiveChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isActive: boolean) => {\n if (isActive) this._isExpanded.set(true);\n });\n }\n }\n\n protected readonly _iconCls = computed(() => resolveColor(this.color()).textSubtle);\n\n protected _buttonCls(isActive: boolean): string {\n const geom = this.collapsed() ? 'w-full py-3 px-0 justify-center' : NAV_ITEM_L1;\n const base = `${NAV_ITEM_BASE} ${geom}`;\n const t = resolveColor(this.color());\n if (isActive) {\n if (this.collapsed()) return `${base} ${t.textSubtle} font-semibold`;\n return `${base} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px]`;\n }\n return `${base} ${NAV_ITEM_IDLE} ${t.hoverBgMuted}`;\n }\n\n protected readonly NAV_CHILDREN_WRAPPER = NAV_CHILDREN_WRAPPER;\n protected readonly NAV_CHILDREN_INNER = NAV_CHILDREN_INNER;\n protected readonly NAV_CHILDREN_LIST = NAV_CHILDREN_LIST;\n\n ngAfterContentInit(): void {\n this._syncChildren();\n this._childItems.changes\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => this._syncChildren());\n }\n\n private _syncChildren(): void {\n const color = this.color();\n this._childItems.forEach(c => c.inheritColor(color));\n }\n\n protected _toggle(): void {\n this._isExpanded.update(v => !v);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'clx-nav-group',\n standalone: true,\n template: `\n @if (!collapsed()) {\n <span class=\"block px-6 pt-5 pb-1 text-[10px] font-bold uppercase tracking-widest text-slate-500 select-none\">{{ label() }}</span>\n } @else {\n <span class=\"flex items-center justify-center w-full py-3\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-slate-600\"></span>\n </span>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxNavGroupComponent {\n readonly label = input.required<string>();\n readonly collapsed = input<boolean>(false);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ConnectedPosition, OverlayModule, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport { ClxAvatarComponent } from '../../base/clx-avatar/clx-avatar.component';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxBadgeComponent } from '../../base/clx-badge/clx-badge.component';\n\n\nexport interface ClxProfileMenuItem {\n label: string;\n icon: string;\n action: string;\n}\n\n@Component({\n selector: 'clx-profile',\n standalone: true,\n imports: [OverlayModule, ClxAvatarComponent, ClxButtonComponent, ClxBadgeComponent],\n template: `\n <!-- ── Trigger ─────────────────────────────────────────────────────────── -->\n <button\n #origin=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n type=\"button\"\n class=\"flex items-center gap-2 rounded-full focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 cursor-pointer\"\n [class]=\"_ringClass()\"\n (click)=\"_toggle()\">\n <clx-avatar\n [initials]=\"_initials()\"\n [src]=\"avatarSrc()\"\n [color]=\"color()\"\n size=\"sm\" />\n </button>\n\n <!-- ── Overlay panel ─────────────────────────────────────────────────── -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"_close()\"\n (overlayKeydown)=\"_onKeydown($event)\">\n\n <div class=\"w-64 bg-white rounded-2xl shadow-xl border border-slate-200 overflow-hidden mt-2\">\n\n <!-- Header: avatar + name + role -->\n <div class=\"px-4 py-4 flex items-center gap-3\" [class]=\"_headerBgClass()\">\n <clx-avatar\n [initials]=\"_initials()\"\n [src]=\"avatarSrc()\"\n [color]=\"color()\"\n size=\"md\" />\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-sm font-semibold text-slate-800 truncate\">{{ fullName() }}</p>\n <p class=\"text-xs text-slate-500 truncate\">{{ username() }}</p>\n @if (role()) {\n <span clx-badge [color]=\"color()\" variant=\"light\" size=\"sm\" class=\"mt-1\">{{ role() }}</span>\n }\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"border-t border-slate-100\"></div>\n\n <!-- Menu items -->\n @if (menuItems().length) {\n <div class=\"p-1.5\">\n @for (item of menuItems(); track item.action) {\n <button clx-button variant=\"ghost\" [color]=\"color()\" [block]=\"true\" [icon]=\"item.icon\"\n class=\"justify-start rounded-xl!\"\n (click)=\"_onAction(item.action)\">\n {{ item.label }}\n </button>\n }\n </div>\n <div class=\"border-t border-slate-100 mx-3\"></div>\n }\n\n <!-- Sign out -->\n <div class=\"p-1.5\">\n <button clx-button variant=\"ghost\" color=\"red\" [block]=\"true\" icon=\"logout\"\n class=\"justify-start rounded-xl!\"\n (click)=\"_onSignOut()\">\n {{ signOutLabel() }}\n </button>\n </div>\n\n </div>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'relative inline-flex items-center' },\n})\nexport class ClxProfileComponent {\n\n // ── Inputs ──────────────────────────────────────────────────────────────────\n readonly firstName = input<string>('');\n readonly lastName = input<string>('');\n readonly username = input<string>('');\n readonly role = input<string>('');\n readonly avatarSrc = input<string | null>(null);\n readonly color = input<ClxColorInput>('indigo');\n readonly menuItems = input<ClxProfileMenuItem[]>([]);\n readonly signOutLabel = input<string>('Cerrar sesión');\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n readonly menuAction = output<string>();\n readonly signOut = output<void>();\n\n // ── CDK Overlay ─────────────────────────────────────────────────name──────────────────────\n private readonly _sso = inject(ScrollStrategyOptions);\n readonly _scrollStrategy = this._sso.reposition();\n\n readonly _positions: ConnectedPosition[] = [\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 8 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -8 },\n ];\n\n // ── State ────────────────────────────────────────────────────────────────────\n protected readonly _isOpen = signal(false);\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n readonly fullName = computed(() =>\n `${this.firstName()} ${this.lastName()}`.trim() || this.username()\n );\n\n protected readonly _initials = computed(() => {\n const f = this.firstName().charAt(0).toUpperCase();\n const l = this.lastName().charAt(0).toUpperCase();\n return f && l ? `${f}${l}` : (f || this.username().charAt(0).toUpperCase());\n });\n\n protected readonly _ringClass = computed(() => {\n const t = resolveColor(this.color());\n return `focus-visible:${t.ringBase}`;\n });\n\n protected readonly _headerBgClass = computed(() => {\n const t = resolveColor(this.color());\n return `${t.bgSubtle}`;\n });\n\n\n // ── Methods ──────────────────────────────────────────────────────────────────\n protected _toggle(): void { this._isOpen.update(v => !v); }\n protected _close(): void { this._isOpen.set(false); }\n\n protected _onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this._close();\n }\n\n protected _onAction(action: string): void {\n this.menuAction.emit(action);\n this._close();\n }\n\n protected _onSignOut(): void {\n this.signOut.emit();\n this._close();\n }\n}\n","import type { ClxTableSort } from '../types/clx-table.types';\n\n// ── Base classes ─────────────────────────────────────────────────────────────\nexport const TABLE_BASE_CLASS = 'w-full text-left border-collapse text-sm';\nexport const TABLE_HEADER_CELL_CLASS = 'px-4 py-3 font-semibold whitespace-nowrap';\nexport const TABLE_CELL_CLASS = 'px-4 py-3 border-b border-slate-100 text-slate-700';\nexport const TABLE_ROW_CLASS = '';\n\n// ── Alignment ────────────────────────────────────────────────────────────────\nexport const TABLE_ALIGN_MAP: Record<'left' | 'center' | 'right', string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\n// ── Sort icons ───────────────────────────────────────────────────────────────\nexport const TABLE_SORT_ICON_MAP: Record<ClxTableSort | 'none', string> = {\n asc: 'arrow_upward',\n desc: 'arrow_downward',\n none: 'swap_vert',\n};\n","import {\n contentChild,\n Directive,\n Input,\n TemplateRef,\n} from '@angular/core';\n\n// ── Contexto tipado para celdas ────────────────────────────────────────────\nexport interface ClxCellContext<T> {\n $implicit: T;\n index: number;\n}\n\n// ── Header template dentro de clxColumn ───────────────────────────────────\n@Directive({\n selector: 'ng-template[clxHeaderCell]',\n standalone: true,\n})\nexport class ClxHeaderCellDirective<_T> {\n constructor(public readonly templateRef: TemplateRef<void>) {}\n}\n\n// ── Cell template dentro de clxColumn ─────────────────────────────────────\n@Directive({\n selector: 'ng-template[clxCell]',\n standalone: true,\n})\nexport class ClxCellDirective<T> {\n constructor(public readonly templateRef: TemplateRef<ClxCellContext<T>>) {}\n\n // Permite que Angular infiera el tipo del contexto con `let-row`\n static ngTemplateContextGuard<T>(\n _dir: ClxCellDirective<T>,\n _ctx: unknown,\n ): _ctx is ClxCellContext<T> {\n return true;\n }\n}\n\n// ── Contenedor de columna personalizada ───────────────────────────────────\n@Directive({\n selector: '[clxColumn]',\n standalone: true,\n})\nexport class ClxColumnDefDirective<T> {\n @Input('clxColumn') name!: string;\n\n readonly headerCell = contentChild(ClxHeaderCellDirective<T>);\n readonly cell = contentChild(ClxCellDirective<T>);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\n\n@Component({\n selector: 'clx-page-empty',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col items-center justify-center w-full px-6 text-center' },\n template: `\n <div [class]=\"_iconWrap()\">\n <span clx-icon [name]=\"icon()\" [size]=\"_iconSize()\" class=\"text-slate-300\"></span>\n </div>\n\n <p [class]=\"_titleCls()\">{{ title() }}</p>\n\n @if (description()) {\n <p [class]=\"_descCls()\">{{ description() }}</p>\n }\n\n @if (ctaLabel()) {\n <button\n clx-button\n [color]=\"ctaColor()\"\n variant=\"solid\"\n [icon]=\"ctaIcon()\"\n [class]=\"_ctaCls()\"\n (click)=\"cta.emit()\">\n {{ ctaLabel() }}\n </button>\n }\n `,\n})\nexport class ClxPageEmptyComponent {\n readonly icon = input<string>('inbox');\n readonly title = input<string>('Sin resultados');\n readonly description = input<string>('');\n readonly ctaLabel = input<string>('');\n readonly ctaIcon = input<string>('add');\n readonly ctaColor = input<ClxColorInput>('indigo');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n\n readonly cta = output<void>();\n\n protected _iconWrap() {\n const s = this.size();\n const sz = s === 'sm' ? 'w-12 h-12' : s === 'lg' ? 'w-20 h-20' : 'w-16 h-16';\n return `${sz} rounded-2xl bg-slate-100 flex items-center justify-center mb-4`;\n }\n\n protected _iconSize(): 'sm' | 'md' | 'lg' | 'xl' {\n const s = this.size();\n return s === 'sm' ? 'md' : s === 'lg' ? 'xl' : 'lg';\n }\n\n protected _titleCls() {\n const s = this.size();\n return s === 'sm'\n ? 'text-sm font-semibold text-slate-600 mb-1'\n : s === 'lg'\n ? 'text-xl font-semibold text-slate-700 mb-2'\n : 'text-base font-semibold text-slate-700 mb-1';\n }\n\n protected _descCls() {\n const s = this.size();\n return `${s === 'lg' ? 'text-sm' : 'text-xs'} text-slate-400 max-w-xs mb-5`;\n }\n\n protected _ctaCls() {\n return this.size() === 'sm' ? 'mt-3' : 'mt-5';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport type { ClxTableColumn, ClxTableSort } from '../../../../types/clx-table.types';\nimport type { ClxTablePageEvent, ClxTableSelectionEvent, ClxTableSortEvent } from '../../../../types/clx-table.types';\nimport type { ClxColorInput } from '../../../../types/clx-color.types';\nimport { resolveColor, parseColorInput } from '../../../../types/clx-color.types';\nimport {\n TABLE_BASE_CLASS,\n TABLE_HEADER_CELL_CLASS,\n TABLE_CELL_CLASS,\n TABLE_ROW_CLASS,\n TABLE_ALIGN_MAP,\n} from '../../../../configs/table.configs';\nimport { ClxColumnDefDirective } from '../../../../directives/clx-table-cell.directive';\nimport { ClxCheckboxComponent } from '../../../forms/clx-checkbox/clx-checkbox.component';\nimport { ClxInputComponent } from '../../../forms/clx-input/clx-input.component';\nimport { ClxSkeletonComponent } from '../../../base/clx-skeleton/clx-skeleton.component';\nimport { ClxIconComponent } from '../../../base/clx-icon/clx-icon.component';\nimport { ClxPaginationComponent } from '../../../advanced/clx-pagination/clx-pagination.component';\nimport { ClxPageEmptyComponent } from '../../../pages/clx-page-empty/clx-page-empty.component';\n\n@Component({\n selector: 'clx-table',\n standalone: true,\n imports: [\n FormsModule,\n NgTemplateOutlet,\n ClxCheckboxComponent,\n ClxInputComponent,\n ClxSkeletonComponent,\n ClxIconComponent,\n ClxPaginationComponent,\n ClxPageEmptyComponent,\n ],\n template: `\n <!-- ── Toolbar: búsqueda ──────────────────────────────────────────────── -->\n @if (searchable() && !loading()) {\n <div class=\"mb-3 max-w-80 min-w-40\">\n <clx-input\n placeholder=\"Buscar...\"\n size=\"sm\"\n suffixIcon=\"search\"\n [color]=\"color()\"\n [(ngModel)]=\"searchQuery\">\n </clx-input>\n </div>\n }\n\n @if (loading()) {\n <!-- ── Loading State ───────────────────────────────────────────────── -->\n <div class=\"space-y-3\">\n @for (row of [1, 2, 3, 4, 5]; track row) {\n <div class=\"flex items-center gap-4\">\n @if (selectable()) {\n <clx-skeleton variant=\"circular\" size=\"xs\"></clx-skeleton>\n }\n @for (col of columns(); track col.key) {\n <clx-skeleton variant=\"text\" size=\"md\" [style.width]=\"col.width || '120px'\"></clx-skeleton>\n }\n </div>\n }\n </div>\n } @else if (_filteredData().length === 0) {\n <!-- ── Empty State ─────────────────────────────────────────────────── -->\n <div class=\"py-10\">\n <clx-page-empty\n size=\"sm\"\n [icon]=\"emptyIcon()\"\n [title]=\"_emptyTitle()\"\n [description]=\"_emptyDescription()\" />\n </div>\n } @else {\n <!-- ── Tabla ───────────────────────────────────────────────────────── -->\n <div class=\"overflow-x-auto\">\n <table [class]=\"_tableClass()\">\n <thead>\n <tr [class]=\"_headerClass()\">\n @if (selectable()) {\n <th [class]=\"_headerCellClass()\"\n [class.rounded-tl-lg]=\"true\"\n [class.rounded-bl-lg]=\"true\"\n class=\"w-10 text-center\">\n <clx-checkbox\n [color]=\"color()\"\n [ngModel]=\"_allSelected()\"\n (ngModelChange)=\"_handleSelectAll($event)\">\n </clx-checkbox>\n </th>\n }\n\n @for (col of columns(); track col.key; let first = $first; let last = $last) {\n <th\n [class]=\"_getHeaderCellClass(col)\"\n [class.rounded-tl-lg]=\"first && !selectable()\"\n [class.rounded-bl-lg]=\"first && !selectable()\"\n [class.rounded-tr-lg]=\"last\"\n [class.rounded-br-lg]=\"last\"\n [style.width]=\"col.width\"\n (click)=\"col.sortable && _handleSort(col.key)\">\n <div class=\"flex items-center gap-1.5\"\n [class.justify-end]=\"col.align === 'right'\"\n [class.justify-center]=\"col.align === 'center'\">\n @if (_getColumnDef(col.key)?.headerCell()?.templateRef; as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n } @else {\n <span>{{ col.header || col.key }}</span>\n }\n @if (col.sortable) {\n <span class=\"opacity-50\">\n @if (sortKey() === col.key && sortDir() === 'asc') {\n <span clx-icon name=\"arrow_upward\" size=\"xs\"></span>\n } @else if (sortKey() === col.key && sortDir() === 'desc') {\n <span clx-icon name=\"arrow_downward\" size=\"xs\"></span>\n } @else {\n <span clx-icon name=\"swap_vert\" size=\"xs\"></span>\n }\n </span>\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (item of _paginatedData(); track i; let i = $index) {\n <tr [class]=\"_rowClass()\">\n @if (selectable()) {\n <td [class]=\"_cellClass()\" class=\"text-center\">\n <clx-checkbox\n [color]=\"color()\"\n [ngModel]=\"_isSelected(item)\"\n (ngModelChange)=\"_handleSelectItem(item, $event)\">\n </clx-checkbox>\n </td>\n }\n\n @for (col of columns(); track col.key) {\n <td [class]=\"_getDataCellClass(col)\">\n @if (_getColumnDef(col.key)?.cell()?.templateRef; as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: i }\">\n </ng-container>\n } @else {\n {{ _getCellValue(item, col.key) }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!-- ── Footer: clx-pagination ────────────────────────────────────────── -->\n @if (pagination()) {\n <div class=\"border-t border-slate-100 pt-3\">\n <clx-pagination\n size=\"sm\"\n [totalItems]=\"_totalItems()\"\n [color]=\"color()\"\n [(currentPage)]=\"_currentPage\"\n [(pageSize)]=\"pageSize\"\n (pageChange)=\"_onPaginationPageChange($event.page)\">\n </clx-pagination>\n </div>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n})\nexport class ClxTableComponent<T = any> {\n // ── Inputs ─────────────────────────────────────────────────────────────────\n readonly data = input.required<T[]>();\n readonly columns = input<ClxTableColumn<T>[]>([]);\n readonly loading = input<boolean>(false);\n readonly selectable = input<boolean>(false);\n readonly searchable = input<boolean>(true);\n readonly pagination = input<boolean>(true);\n readonly color = input<ClxColorInput>('indigo');\n readonly emptyIcon = input<string>('table_chart');\n readonly emptyTitle = input<string>('');\n readonly emptyDescription = input<string>('');\n\n // ── Models ─────────────────────────────────────────────────────────────────\n readonly sortKey = model<string | null>(null);\n readonly sortDir = model<ClxTableSort | null>(null);\n readonly pageIndex = model(0);\n readonly pageSize = model(5);\n readonly _currentPage = model(1);\n readonly searchQuery = model('');\n readonly selectedItems = model<T[]>([]);\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n readonly sortChange = output<ClxTableSortEvent>();\n readonly pageChange = output<ClxTablePageEvent>();\n readonly selectionChange = output<ClxTableSelectionEvent<T>>();\n\n // ── Content Children ───────────────────────────────────────────────────────\n private readonly _columnDefs = contentChildren(ClxColumnDefDirective);\n\n protected _onPaginationPageChange(page: number): void {\n const idx = page - 1;\n this.pageIndex.set(idx);\n this.pageChange.emit({ pageIndex: idx, pageSize: this.pageSize() });\n }\n\n // ── Computed ───────────────────────────────────────────────────────────────\n protected readonly _tableClass = computed(() => {\n const { color } = parseColorInput(this.color());\n const stripe = `[&_tbody_tr:nth-child(even)]:bg-${color}-50/50`;\n return `${TABLE_BASE_CLASS} ${stripe}`;\n });\n\n protected readonly _headerClass = computed(() => {\n const t = resolveColor(this.color());\n return `${t.bgSubtle} ${t.textSubtle}`;\n });\n protected readonly _headerCellClass = computed(() => TABLE_HEADER_CELL_CLASS);\n protected readonly _cellClass = computed(() => TABLE_CELL_CLASS);\n protected readonly _rowClass = computed(() => TABLE_ROW_CLASS);\n\n private readonly _columnDefMap = computed(() => {\n const map = new Map<string, ClxColumnDefDirective<T>>();\n for (const def of this._columnDefs()) {\n map.set(def.name, def as ClxColumnDefDirective<T>);\n }\n return map;\n });\n\n protected _getColumnDef(key: string): ClxColumnDefDirective<T> | undefined {\n return this._columnDefMap().get(key);\n }\n\n protected readonly _filteredData = computed(() => {\n let result = [...this.data()];\n\n const query = this.searchQuery().toLowerCase().trim();\n if (query) {\n result = result.filter(item =>\n Object.values(item as object).some(val =>\n String(val).toLowerCase().includes(query)\n )\n );\n }\n\n const key = this.sortKey();\n const dir = this.sortDir();\n if (key && dir) {\n result.sort((a, b) => {\n const aVal = (a as Record<string, unknown>)[key];\n const bVal = (b as Record<string, unknown>)[key];\n const cmp = String(aVal).localeCompare(String(bVal));\n return dir === 'asc' ? cmp : -cmp;\n });\n }\n\n return result;\n });\n\n protected readonly _paginatedData = computed(() => {\n const filtered = this._filteredData();\n if (!this.pagination()) return filtered;\n const start = this.pageIndex() * this.pageSize();\n return filtered.slice(start, start + this.pageSize());\n });\n\n protected readonly _totalItems = computed(() => this._filteredData().length);\n\n protected readonly _emptyTitle = computed(() =>\n this.emptyTitle() || (this.searchQuery() ? 'Sin resultados' : 'No hay datos')\n );\n\n protected readonly _emptyDescription = computed(() =>\n this.emptyDescription() ||\n (this.searchQuery()\n ? `No se encontraron elementos para \"${this.searchQuery()}\"`\n : 'No hay datos para mostrar.')\n );\n\n protected readonly _allSelected = computed(() => {\n const current = this._paginatedData();\n return current.length > 0 && current.every(item => this._isSelected(item));\n });\n\n protected _isSelected(item: T): boolean {\n return this.selectedItems().some(s => s === item);\n }\n\n protected _getAlignClass(align: 'left' | 'center' | 'right'): string {\n return TABLE_ALIGN_MAP[align];\n }\n\n protected _getHeaderCellClass(col: ClxTableColumn<T>): string {\n const align = this._getAlignClass(col.align || 'left');\n const cursor = col.sortable ? 'cursor-pointer select-none' : '';\n const extra = col.headerClass || '';\n return `${TABLE_HEADER_CELL_CLASS} ${align} ${cursor} ${extra}`.trim();\n }\n\n protected _getDataCellClass(col: ClxTableColumn<T>): string {\n const align = this._getAlignClass(col.align || 'left');\n const extra = col.cellClass || '';\n return `${TABLE_CELL_CLASS} ${align} ${extra}`.trim();\n }\n\n protected _getCellValue(item: T, key: string): unknown {\n return (item as Record<string, unknown>)[key];\n }\n\n protected _handleSort(key: string): void {\n const currentDir = this.sortKey() === key ? this.sortDir() : null;\n const newDir: ClxTableSort | null =\n currentDir === null ? 'asc' : currentDir === 'asc' ? 'desc' : null;\n\n this.sortKey.set(newDir ? key : null);\n this.sortDir.set(newDir);\n this.pageIndex.set(0);\n this._currentPage.set(1);\n this.sortChange.emit({ key, direction: newDir });\n }\n\n protected _handleSelectAll(checked: boolean): void {\n const current = this._paginatedData();\n if (checked) {\n const next = [...this.selectedItems()];\n current.forEach(item => { if (!next.includes(item)) next.push(item); });\n this.selectedItems.set(next);\n } else {\n this.selectedItems.set(this.selectedItems().filter(item => !current.includes(item)));\n }\n this.selectionChange.emit({\n selected: this.selectedItems(),\n allSelected: checked && current.length > 0,\n });\n }\n\n protected _handleSelectItem(item: T, checked: boolean): void {\n if (checked) {\n this.selectedItems.update(s => [...s, item]);\n } else {\n this.selectedItems.update(s => s.filter(x => x !== item));\n }\n this.selectionChange.emit({ selected: this.selectedItems(), allSelected: false });\n }\n}\n","export const WISHLIST_PAGE_SIZE_DEFAULT = 6;\n\nexport const WISHLIST_SORT_OPTIONS = [\n { value: 'default', label: 'Default' },\n { value: 'price-asc', label: 'Price: Low to High' },\n { value: 'price-desc', label: 'Price: High to Low' },\n { value: 'rating', label: 'Top Rated' },\n { value: 'name', label: 'Name A–Z' },\n];\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxWishlistItem, ClxWishlistPageChangeEvent } from '../../../types/clx-wishlist.types';\nimport type { ClxSelectOption } from '../../../types/clx-select.types';\nimport { WISHLIST_PAGE_SIZE_DEFAULT, WISHLIST_SORT_OPTIONS } from '../../../configs/wishlist.config';\nimport { ClxButtonComponent } from '../../../components/base/clx-button/clx-button.component';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\nimport { ClxSkeletonComponent } from '../../../components/base/clx-skeleton/clx-skeleton.component';\nimport { ClxPaginationComponent } from '../../../components/advanced/clx-pagination/clx-pagination.component';\nimport { ClxInputComponent } from '../../../components/forms/clx-input/clx-input.component';\nimport { ClxSelectComponent } from '../../../components/forms/clx-select/clx-select.component';\nimport { ClxTooltipDirective } from '../../../directives/clx-tooltip.directive';\n\n@Component({\n selector: 'clx-wishlist',\n standalone: true,\n imports: [\n CurrencyPipe,\n FormsModule,\n ClxButtonComponent,\n ClxBadgeComponent,\n ClxIconComponent,\n ClxSkeletonComponent,\n ClxPaginationComponent,\n ClxInputComponent,\n ClxSelectComponent,\n ClxTooltipDirective\n ],\n template: `\n <div class=\"flex flex-col gap-6\">\n\n <!-- ── Top Bar ──────────────────────────────────────────────────────── -->\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-3\">\n <div class=\"flex-1 min-w-0\">\n <clx-input\n type=\"search\"\n placeholder=\"Search Here\"\n prefixIcon=\"search\"\n size=\"md\"\n [color]=\"color()\"\n [(ngModel)]=\"_searchModel\"\n (ngModelChange)=\"handleSearch($event)\"\n />\n </div>\n <div class=\"w-full sm:w-52 shrink-0\">\n <clx-select\n placeholder=\"Sort By\"\n [options]=\"sortOptions()\"\n [activeColor]=\"color()\"\n size=\"md\"\n [(ngModel)]=\"_sortModel\"\n (ngModelChange)=\"handleSort($event)\"\n />\n </div>\n </div>\n\n <!-- ── Info Bar ─────────────────────────────────────────────────────── -->\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between gap-3\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-slate-500 text-sm\">Adding</span>\n <span class=\"font-bold text-slate-700 text-sm\">{{ _totalItems() }}</span>\n <span clx-badge variant=\"light\" [color]=\"color()\" size=\"sm\">items</span>\n <span class=\"text-slate-500 text-sm\">to your wishlist</span>\n </div>\n <button\n clx-button\n variant=\"light\"\n [color]=\"color()\"\n size=\"sm\"\n icon=\"arrow_forward\"\n iconPosition=\"right\"\n [disabled]=\"_totalItems() === 0\"\n (click)=\"handleCheckoutAll()\"\n >Checkout All</button>\n </div>\n\n <!-- ── List ─────────────────────────────────────────────────────────── -->\n @if (loading()) {\n\n <div class=\"flex flex-col gap-4\">\n @for (s of _skeletonItems; track $index) {\n <div class=\"bg-white rounded-2xl overflow-hidden flex flex-col sm:flex-row items-stretch shadow-sm\">\n <div class=\"shrink-0 aspect-square sm:aspect-auto sm:w-44 bg-slate-200 animate-pulse\"></div>\n <div class=\"p-3 flex flex-col gap-3 flex-1\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"60%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"85%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"40%\" />\n <div class=\"flex gap-2 mt-auto\">\n <clx-skeleton variant=\"rectangular\" height=\"36px\" width=\"100%\" />\n </div>\n </div>\n </div>\n }\n </div>\n\n } @else if (_pagedItems().length === 0) {\n\n <div class=\"flex flex-col items-center justify-center py-20 gap-4 text-slate-400\">\n <span clx-icon name=\"heart_broken\" size=\"xl\"></span>\n <p class=\"text-base font-medium\">Your wishlist is empty</p>\n <p class=\"text-sm\">Start adding items you love!</p>\n </div>\n\n } @else {\n\n <div class=\"grid grid-cols-1 xl:grid-cols-2 gap-4\">\n @for (item of _pagedItems(); track item.id; let first = $first) {\n <!-- misma estructura y clases que clx-product layout=horizontal -->\n <article [class]=\"_cardClass\">\n\n <!-- Image Container -->\n <div [class]=\"_imageContainerClass\">\n @if (item.main_image) {\n <img [src]=\"item.main_image\" [alt]=\"item.name\" [class]=\"_imageClass\" [loading]=\"first ? 'eager' : 'lazy'\" />\n } @else {\n <div class=\"w-full h-full flex items-center justify-center bg-slate-100\">\n <span class=\"material-symbols-outlined text-slate-300\" style=\"font-size:48px\">image</span>\n </div>\n }\n\n <!-- Discount badge — misma posición que status badges en clx-product -->\n @if (_discountPercent(item)) {\n <div class=\"absolute top-3 left-3\">\n <span clx-badge variant=\"solid\" color=\"red\" size=\"sm\" shape=\"pill\">\n {{ _discountPercent(item) }}% Off\n </span>\n </div>\n }\n\n <!-- Out-of-stock overlay -->\n @if (!item.in_stock) {\n <div [class]=\"_overlayClass\"></div>\n }\n </div>\n\n <!-- Content -->\n <div [class]=\"_contentClass\">\n <div class=\"flex-1 min-w-0 mr-11\">\n <h3 [class]=\"_titleClass\">{{ item.name }}</h3>\n @if (item.description) {\n <p [class]=\"_descClass\">{{ item.description }}</p>\n }\n\n <!-- Price -->\n <div class=\"flex items-baseline gap-2 mt-2\">\n <span [class]=\"_priceClass\">{{ (item.sale_price ?? item.product_sale_price) | currency:'COP':'symbol':'1.0-0' }}</span>\n @if (item.has_discount && item.discount_price) {\n <span class=\"text-sm text-slate-400 line-through\">\n {{ item.discount_price | currency:'COP':'symbol':'1.0-0' }}\n </span>\n }\n </div>\n </div>\n\n <!-- Delete button — esquina superior derecha de la card -->\n <div class=\"absolute top-3 right-3 z-10\">\n <button\n clx-button\n variant=\"ghost\"\n color=\"red\"\n size=\"md\"\n icon=\"delete\"\n [iconOnly]=\"true\"\n shape=\"circle\"\n clxTooltip=\"Eliminar de favoritos\"\n clxTooltipPosition=\"left\"\n clxTooltipColor=\"red\"\n (click)=\"handleRemove(item)\"\n ></button>\n </div>\n\n <!-- Actions -->\n <div [class]=\"_actionsClass\">\n <button\n clx-button\n [color]=\"color()\"\n variant=\"solid\"\n size=\"md\"\n icon=\"shopping_cart\"\n iconPosition=\"left\"\n [disabled]=\"!item.in_stock\"\n [block]=\"true\"\n (click)=\"onAddToCart.emit(item)\"\n >Añadir al carrito</button>\n </div>\n </div>\n\n </article>\n }\n </div>\n\n }\n\n <!-- ── Footer ───────────────────────────────────────────────────────── -->\n @if (!loading() && _totalItems() > 0) {\n <div class=\"border-t border-slate-100 pt-3\">\n <clx-pagination\n size=\"sm\"\n [totalItems]=\"_totalItems()\"\n [color]=\"color()\"\n [(currentPage)]=\"currentPage\"\n [(pageSize)]=\"pageSize\"\n (pageChange)=\"handlePageChange($event)\">\n </clx-pagination>\n </div>\n }\n\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClxWishlistComponent {\n readonly items = input<ClxWishlistItem[]>([]);\n readonly loading = input<boolean>(false);\n readonly color = input<ClxColorInput>('indigo');\n readonly sortOptions = input<ClxSelectOption[]>(WISHLIST_SORT_OPTIONS);\n\n readonly currentPage = model<number>(1);\n readonly pageSize = model<number>(WISHLIST_PAGE_SIZE_DEFAULT);\n readonly sortValue = model<string>('default');\n readonly searchValue = model<string>('');\n\n protected _searchModel = '';\n protected _sortModel: string | null = null;\n\n readonly onRemove = output<ClxWishlistItem>();\n readonly onAddToCart = output<ClxWishlistItem>();\n readonly onSearchChange = output<string>();\n readonly onSortChange = output<string>();\n readonly onPageChange = output<ClxWishlistPageChangeEvent>();\n readonly onCheckoutAll = output<ClxWishlistItem[]>();\n\n readonly _skeletonItems = Array.from({ length: 6 });\n\n protected readonly _cardClass = 'bg-white rounded-2xl shadow-sm transition-[box-shadow,transform] duration-300 overflow-hidden group hover:shadow-xl hover:-translate-y-0.5 flex flex-col sm:flex-row';\n protected readonly _imageContainerClass = 'relative shrink-0 w-full aspect-square sm:aspect-auto sm:w-40 overflow-hidden rounded-t-2xl sm:rounded-t-none sm:rounded-l-2xl';\n protected readonly _imageClass = 'w-full h-full object-cover transition-transform duration-500 group-hover:scale-105';\n protected readonly _contentClass = 'relative flex flex-col gap-2 flex-1 p-3 min-w-0';\n protected readonly _actionsClass = 'mt-auto pt-2 flex flex-col gap-2';\n protected readonly _overlayClass = 'absolute inset-0 bg-white/50 rounded-t-2xl sm:rounded-t-none sm:rounded-l-2xl';\n protected readonly _titleClass = 'font-semibold truncate text-base text-slate-900 pr-6';\n protected readonly _descClass = 'text-sm line-clamp-2 text-slate-500 mt-0.5';\n protected readonly _priceClass = 'text-lg font-bold text-slate-900';\n\n protected readonly _filtered = computed(() => {\n const q = this.searchValue().toLowerCase().trim();\n const s = this.sortValue();\n const price = (i: ClxWishlistItem) => i.sale_price ?? i.product_sale_price;\n let list = q\n ? this.items().filter(i => i.name.toLowerCase().includes(q))\n : [...this.items()];\n if (s === 'price-asc') list = list.sort((a, b) => price(a) - price(b));\n if (s === 'price-desc') list = list.sort((a, b) => price(b) - price(a));\n if (s === 'name') list = list.sort((a, b) => a.name.localeCompare(b.name));\n return list;\n });\n\n protected readonly _totalItems = computed(() => this._filtered().length);\n\n protected readonly _pagedItems = computed(() => {\n const ps = this.pageSize();\n const start = (this.currentPage() - 1) * ps;\n return this._filtered().slice(start, start + ps);\n });\n\n protected _discountPercent(item: ClxWishlistItem): number {\n if (!item.has_discount) return 0;\n if (item.discount_percentage) return Math.round(item.discount_percentage);\n const sale = item.sale_price ?? item.product_sale_price;\n if (item.discount_price && item.discount_price > sale) {\n return Math.round(((item.discount_price - sale) / item.discount_price) * 100);\n }\n return 0;\n }\n\n handleSearch(val: string): void {\n this._searchModel = val;\n this.searchValue.set(val);\n this.currentPage.set(1);\n this.onSearchChange.emit(val);\n }\n\n handleSort(val: string | number | (string | number)[] | null): void {\n const raw = Array.isArray(val) ? val[0] : val;\n const v = raw != null ? String(raw) : 'default';\n this._sortModel = v;\n this.sortValue.set(v);\n this.currentPage.set(1);\n this.onSortChange.emit(v);\n }\n\n handlePageChange(e: { page: number; pageSize: number }): void {\n this.currentPage.set(e.page);\n this.onPageChange.emit(e);\n }\n\n handleRemove(item: ClxWishlistItem): void {\n this.onRemove.emit(item);\n const newTotal = this._totalItems() - 1;\n const lastPage = Math.max(1, Math.ceil(newTotal / this.pageSize()));\n if (this.currentPage() > lastPage) this.currentPage.set(lastPage);\n }\n\n handleCheckoutAll(): void {\n this.onCheckoutAll.emit(this._filtered());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxCartItem, ClxCouponResult } from '../../../types/clx-cart.types';\nimport { ClxButtonComponent } from '../../../components/base/clx-button/clx-button.component';\nimport { ClxBadgeComponent } from '../../../components/base/clx-badge/clx-badge.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\nimport { ClxSkeletonComponent } from '../../../components/base/clx-skeleton/clx-skeleton.component';\nimport { ClxInputComponent } from '../../../components/forms/clx-input/clx-input.component';\nimport { ClxRatingComponent } from '../../../components/base/clx-rating/clx-rating.component';\n\n@Component({\n selector: 'clx-cart',\n standalone: true,\n imports: [\n CurrencyPipe,\n FormsModule,\n ClxButtonComponent,\n ClxBadgeComponent,\n ClxIconComponent,\n ClxSkeletonComponent,\n ClxInputComponent,\n ClxRatingComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- ── Loading ─────────────────────────────────────────────────────────────── -->\n @if (loading()) {\n\n <div class=\"flex flex-col lg:flex-row gap-6\">\n <div class=\"flex-1 flex flex-col gap-3\">\n @for (s of _skeletons; track $index) {\n <div class=\"bg-white rounded-2xl p-4 flex gap-4 shadow-sm\">\n <clx-skeleton variant=\"rectangular\" width=\"112px\" height=\"112px\" />\n <div class=\"flex flex-col gap-2 flex-1\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"55%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"35%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"25%\" />\n </div>\n </div>\n }\n </div>\n <div class=\"w-full lg:w-80 shrink-0\">\n <div class=\"bg-white rounded-2xl p-5 flex flex-col gap-3 shadow-sm\">\n <clx-skeleton variant=\"text\" size=\"md\" width=\"50%\" />\n <clx-skeleton variant=\"rectangular\" height=\"40px\" width=\"100%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"80%\" />\n <clx-skeleton variant=\"text\" size=\"sm\" width=\"60%\" />\n <clx-skeleton variant=\"rectangular\" height=\"44px\" width=\"100%\" />\n </div>\n </div>\n </div>\n\n <!-- ── Empty ───────────────────────────────────────────────────────────────── -->\n } @else if (items().length === 0) {\n\n <div class=\"flex flex-col items-center justify-center py-24 gap-4 text-slate-400\">\n <span clx-icon name=\"shopping_cart\" size=\"xl\"></span>\n <p class=\"text-base font-semibold text-slate-600\">Tu carrito está vacío</p>\n <p class=\"text-sm\">Agrega productos para continuar.</p>\n </div>\n\n <!-- ── Main layout ─────────────────────────────────────────────────────────── -->\n } @else {\n\n <div class=\"flex flex-col lg:flex-row gap-6 items-start\">\n\n <!-- ══ LEFT — Items list ══════════════════════════════════════════════════ -->\n <div class=\"w-full lg:flex-1 min-w-0 flex flex-col gap-4\">\n\n <!-- Top bar -->\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <h2 class=\"text-base font-semibold text-slate-700\">Cart Items</h2>\n <span clx-badge variant=\"light\" [color]=\"color()\" size=\"sm\">{{ _totalUnits() }}</span>\n </div>\n <button\n clx-button variant=\"ghost\" color=\"red\" size=\"sm\" icon=\"delete_sweep\"\n (click)=\"onClearCart.emit()\">\n Vaciar\n </button>\n </div>\n\n <!-- Item cards -->\n @for (item of items(); track item.id) {\n <article class=\"bg-white rounded-2xl shadow-sm flex gap-0 overflow-hidden group transition-[box-shadow,transform] duration-300 hover:shadow-xl hover:-translate-y-0.5\">\n\n <!-- Image — fixed square -->\n <div class=\"relative shrink-0 w-28 h-28 lg:w-36 lg:h-36 overflow-hidden bg-slate-100\">\n @if (item.main_image) {\n <img [src]=\"item.main_image\" [alt]=\"item.name\"\n class=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\" />\n } @else {\n <div class=\"w-full h-full flex items-center justify-center\">\n <span clx-icon name=\"image\" size=\"lg\" class=\"text-slate-300\"></span>\n </div>\n }\n @if (item.has_discount && item.discount_percentage) {\n <div class=\"absolute top-2 left-2\">\n <span clx-badge variant=\"solid\" color=\"red\" size=\"sm\" shape=\"pill\">\n -{{ item.discount_percentage }}%\n </span>\n </div>\n }\n @if (!item.in_stock) {\n <div class=\"absolute inset-0 bg-white/60 flex items-end justify-center pb-2\">\n <span clx-badge variant=\"solid\" color=\"slate\" size=\"sm\">Agotado</span>\n </div>\n }\n </div>\n\n <!-- Content -->\n <div class=\"relative flex flex-col gap-1.5 flex-1 p-3 min-w-0\">\n\n <!-- Remove -->\n <div class=\"absolute top-2 right-2 z-10\">\n <button\n clx-button variant=\"ghost\" color=\"red\" size=\"sm\"\n icon=\"close\" [iconOnly]=\"true\" shape=\"circle\"\n (click)=\"onRemove.emit(item)\">\n </button>\n </div>\n\n <!-- Title block -->\n <div class=\"pr-8\">\n <p class=\"text-xs text-slate-400 truncate\">{{ item.trademark }}</p>\n <h3 class=\"text-sm font-semibold text-slate-800 leading-snug line-clamp-2\">{{ item.name }}</h3>\n <p class=\"text-xs font-mono text-slate-400 mt-0.5\">{{ item.sku }}</p>\n </div>\n\n @if (item.rating) {\n <div class=\"flex items-center gap-1.5\">\n <clx-rating [value]=\"item.rating\" [max]=\"5\" color=\"amber\" />\n @if (item.review_count) {\n <span class=\"text-xs text-slate-400\">({{ item.review_count }})</span>\n }\n </div>\n }\n\n <!-- Price + Quantity row -->\n <div class=\"flex items-center justify-between gap-2 mt-auto flex-wrap\">\n\n <!-- Price -->\n <div class=\"flex items-baseline gap-1.5\">\n <span class=\"text-base font-bold text-slate-900\">\n {{ item.unit_price | currency:'COP':'symbol':'1.0-0' }}\n </span>\n @if (item.has_discount && item.original_price) {\n <span class=\"text-xs text-slate-400 line-through\">\n {{ item.original_price | currency:'COP':'symbol':'1.0-0' }}\n </span>\n }\n </div>\n\n <!-- Quantity control -->\n <div class=\"flex items-center border border-slate-200 rounded-xl overflow-hidden\">\n <button\n clx-button variant=\"ghost\" color=\"slate\" size=\"sm\"\n icon=\"remove\" [iconOnly]=\"true\"\n [disabled]=\"item.quantity <= 1\"\n (click)=\"onQuantityChange.emit({ item, quantity: item.quantity - 1 })\">\n </button>\n <span class=\"w-8 text-center text-sm font-semibold text-slate-700 select-none\">\n {{ item.quantity }}\n </span>\n <button\n clx-button variant=\"ghost\" [color]=\"color()\" size=\"sm\"\n icon=\"add\" [iconOnly]=\"true\"\n [disabled]=\"!item.in_stock || (!!item.max_quantity && item.quantity >= item.max_quantity)\"\n (click)=\"onQuantityChange.emit({ item, quantity: item.quantity + 1 })\">\n </button>\n </div>\n\n <!-- Line total -->\n <p class=\"text-sm font-bold text-slate-700\">\n {{ (item.unit_price * item.quantity) | currency:'COP':'symbol':'1.0-0' }}\n </p>\n\n </div>\n </div>\n\n </article>\n }\n\n </div>\n\n <!-- ══ RIGHT — Order Summary ══════════════════════════════════════════════ -->\n <aside class=\"w-full lg:w-80 shrink-0 lg:sticky lg:top-6 flex flex-col gap-4\">\n\n <div class=\"bg-white rounded-2xl shadow-sm p-5 flex flex-col gap-4\">\n <h2 class=\"text-base font-semibold text-slate-800\">Order Summary</h2>\n\n <!-- Coupon -->\n <div class=\"space-y-2\">\n <p class=\"text-xs font-medium text-slate-500\">¿Tienes un cupón de descuento?</p>\n <div class=\"flex gap-2\">\n <div class=\"flex-1\">\n <clx-input\n placeholder=\"Código de cupón\"\n prefixIcon=\"confirmation_number\"\n size=\"sm\"\n [color]=\"color()\"\n [(ngModel)]=\"_couponCode\"\n [disabled]=\"!!coupon()?.valid\" />\n </div>\n @if (coupon()?.valid) {\n <button\n clx-button variant=\"ghost\" color=\"red\" size=\"sm\"\n icon=\"close\" [iconOnly]=\"true\" shape=\"circle\"\n (click)=\"removeCoupon()\">\n </button>\n } @else {\n <button\n clx-button [color]=\"color()\" variant=\"solid\" size=\"sm\" shape=\"pill\"\n [disabled]=\"!_couponCode.trim()\"\n (click)=\"applyCoupon()\">\n Aplicar\n </button>\n }\n </div>\n @if (coupon()) {\n @if (coupon()!.valid) {\n <div class=\"flex items-center gap-1.5 text-emerald-600\">\n <span clx-icon name=\"check_circle\" size=\"sm\"></span>\n <code class=\"text-xs font-bold\">{{ coupon()!.code }}</code>\n <span class=\"text-xs\">aplicado</span>\n </div>\n } @else {\n <p class=\"text-xs text-red-500\">{{ coupon()!.message ?? 'Cupón inválido' }}</p>\n }\n }\n </div>\n\n <!-- Divider -->\n <div class=\"border-t border-slate-100\"></div>\n\n <!-- Totals -->\n <dl class=\"flex flex-col gap-2.5 text-sm\">\n <div class=\"flex justify-between text-slate-600\">\n <dt>Subtotal <span class=\"text-slate-400 text-xs\">({{ _totalUnits() }} items)</span></dt>\n <dd class=\"font-medium\">{{ _subtotal() | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n @if (_savingsAmount() > 0) {\n <div class=\"flex justify-between text-emerald-600\">\n <dt>Descuento productos</dt>\n <dd class=\"font-medium\">-{{ _savingsAmount() | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n }\n @if (coupon()?.valid) {\n <div class=\"flex justify-between text-emerald-600\">\n <dt>\n Cupón\n <code class=\"bg-emerald-50 px-1 rounded text-xs ml-1\">{{ coupon()!.code }}</code>\n </dt>\n <dd class=\"font-medium\">-{{ _couponDiscount() | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n }\n <div class=\"flex justify-between border-t border-slate-100 pt-2.5\">\n <dt class=\"font-bold text-slate-800\">Total</dt>\n <dd class=\"text-xl font-black text-slate-900\">{{ _total() | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n </dl>\n\n <!-- Checkout -->\n <button\n clx-button [color]=\"color()\" variant=\"solid\" size=\"lg\"\n icon=\"arrow_forward\" iconPosition=\"right\" [block]=\"true\"\n (click)=\"onCheckout.emit()\">\n Proceder al pago\n </button>\n\n <!-- Security note -->\n <div class=\"flex items-center justify-center gap-1.5 text-slate-400 text-xs\">\n <span clx-icon name=\"lock\" size=\"sm\"></span>\n <span>Pago 100% seguro</span>\n </div>\n\n </div>\n\n </aside>\n\n </div>\n\n }\n `,\n})\nexport class ClxCartComponent {\n readonly items = input<ClxCartItem[]>([]);\n readonly loading = input<boolean>(false);\n readonly color = input<ClxColorInput>('indigo');\n readonly coupon = model<ClxCouponResult | null>(null);\n\n readonly onRemove = output<ClxCartItem>();\n readonly onQuantityChange = output<{ item: ClxCartItem; quantity: number }>();\n readonly onClearCart = output<void>();\n readonly onApplyCoupon = output<string>();\n readonly onCheckout = output<void>();\n\n protected _couponCode = '';\n protected readonly _skeletons = Array.from({ length: 3 });\n\n protected readonly _subtotal = computed(() =>\n this.items().reduce((s, i) => s + i.unit_price * i.quantity, 0),\n );\n\n protected readonly _savingsAmount = computed(() =>\n this.items().reduce((s, i) => {\n if (!i.has_discount || !i.original_price) return s;\n return s + (i.original_price - i.unit_price) * i.quantity;\n }, 0),\n );\n\n protected readonly _couponDiscount = computed(() => {\n const c = this.coupon();\n if (!c?.valid) return 0;\n return c.type === 'percent'\n ? Math.round(this._subtotal() * (c.value / 100))\n : c.value;\n });\n\n protected readonly _total = computed(() =>\n Math.max(0, this._subtotal() - this._couponDiscount()),\n );\n\n protected readonly _totalUnits = computed(() =>\n this.items().reduce((s, i) => s + i.quantity, 0),\n );\n\n applyCoupon(): void {\n const code = this._couponCode.trim();\n if (code) this.onApplyCoupon.emit(code);\n }\n\n removeCoupon(): void {\n this._couponCode = '';\n this.coupon.set(null);\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\nimport { CLX_MODAL_REF, CLX_MODAL_DATA } from '../../../configs/modal.config';\nimport { ClxDrawerComponent } from '../../../components/advanced/clx-drawer/clx-drawer.component';\nimport { ClxIconComponent } from '../../../components/base/clx-icon/clx-icon.component';\nimport type { ClxCartItem, ClxCouponResult } from '../../../types/clx-cart.types';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\n\nexport interface ClxCartSummaryData {\n items: ClxCartItem[];\n subtotal: number;\n savingsAmount: number;\n couponDiscount: number;\n coupon: ClxCouponResult | null;\n total: number;\n color: ClxColorInput;\n}\n\n@Component({\n selector: 'clx-cart-summary-drawer',\n standalone: true,\n imports: [CurrencyPipe, ClxDrawerComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <clx-drawer\n size=\"md\"\n [confirmButton]=\"{ text: 'Proceder al pago', color: data.color, variant: 'solid' }\"\n [cancelButton]=\"{ text: 'Seguir comprando', color: 'slate', variant: 'ghost' }\"\n [showCancelButton]=\"true\"\n (confirmClick)=\"_confirm()\"\n (cancelClick)=\"_cancel()\">\n\n <div clx-drawer-title class=\"flex items-center gap-2\">\n <span clx-icon name=\"receipt_long\" size=\"sm\" class=\"text-slate-500\"></span>\n <span class=\"text-base font-semibold text-slate-900\">Resumen del pedido</span>\n </div>\n\n <div class=\"space-y-5\">\n\n <!-- Items list -->\n <ul class=\"space-y-3\">\n @for (item of data.items; track item.id) {\n <li class=\"flex items-center gap-3\">\n <div class=\"shrink-0 w-12 h-12 rounded-lg overflow-hidden bg-slate-100\">\n @if (item.main_image) {\n <img [src]=\"item.main_image\" [alt]=\"item.name\" class=\"w-full h-full object-cover\" />\n } @else {\n <div class=\"w-full h-full flex items-center justify-center\">\n <span clx-icon name=\"image\" size=\"sm\" class=\"text-slate-300\"></span>\n </div>\n }\n </div>\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-sm font-medium text-slate-800 truncate\">{{ item.name }}</p>\n <p class=\"text-xs text-slate-400\">x{{ item.quantity }}</p>\n </div>\n <span class=\"text-sm font-semibold text-slate-700 shrink-0\">\n {{ (item.unit_price * item.quantity) | currency:'COP':'symbol':'1.0-0' }}\n </span>\n </li>\n }\n </ul>\n\n <!-- Divider -->\n <div class=\"border-t border-slate-100\"></div>\n\n <!-- Totals -->\n <dl class=\"space-y-2\">\n <div class=\"flex justify-between text-sm text-slate-600\">\n <dt>Subtotal</dt>\n <dd class=\"font-medium\">{{ data.subtotal | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n @if (data.savingsAmount > 0) {\n <div class=\"flex justify-between text-sm text-emerald-600\">\n <dt>Descuento</dt>\n <dd class=\"font-medium\">-{{ data.savingsAmount | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n }\n @if (data.coupon?.valid) {\n <div class=\"flex justify-between text-sm text-emerald-600\">\n <dt>\n Cupón\n <code class=\"bg-emerald-50 px-1 rounded text-xs ml-1\">{{ data.coupon!.code }}</code>\n </dt>\n <dd class=\"font-medium\">-{{ data.couponDiscount | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n }\n <div class=\"border-t border-slate-100 pt-2 flex justify-between\">\n <dt class=\"font-bold text-slate-800\">Total</dt>\n <dd class=\"text-xl font-black text-slate-900\">{{ data.total | currency:'COP':'symbol':'1.0-0' }}</dd>\n </div>\n </dl>\n\n <!-- Secure badge -->\n <div class=\"flex items-center gap-2 text-slate-400 text-xs\">\n <span clx-icon name=\"lock\" size=\"sm\"></span>\n <span>Pago seguro — tus datos están protegidos</span>\n </div>\n\n </div>\n\n </clx-drawer>\n `,\n})\nexport class ClxCartSummaryDrawer {\n readonly data = inject<ClxCartSummaryData>(CLX_MODAL_DATA);\n private readonly _ref = inject(CLX_MODAL_REF);\n\n protected _confirm(): void { this._ref.close(true); }\n protected _cancel(): void { this._ref.close(false); }\n}\n","import {\n Directive,\n ElementRef,\n OnInit,\n OnChanges,\n SimpleChanges,\n inject,\n PLATFORM_ID,\n DestroyRef,\n input,\n output,\n numberAttribute,\n booleanAttribute,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { ClxAnimateName, ClxAnimateTrigger, ClxAnimateConfig, ClxAnimateEvent } from '../types/clx-animate.types';\nimport { ClxAnimateService } from '../services/clx-animate.service';\n\n@Directive({\n selector: '[clxAnimate]',\n standalone: true,\n exportAs: 'clxAnimate',\n})\nexport class ClxAnimateDirective implements OnInit, OnChanges {\n\n // ─── Inputs ───────────────────────────────────────────────────────────────\n readonly clxAnimate = input.required<ClxAnimateName>();\n readonly trigger = input<ClxAnimateTrigger>('manual');\n readonly duration = input<number, number>(undefined as unknown as number, { transform: numberAttribute });\n readonly delay = input<number, number>(undefined as unknown as number, { transform: numberAttribute });\n readonly repeat = input<number | 'infinite'>();\n readonly easing = input<string>();\n readonly fillMode = input<ClxAnimateConfig['fillMode']>();\n readonly once = input<boolean, boolean>(false, { transform: booleanAttribute });\n readonly threshold = input<number, number>(undefined as unknown as number, { transform: numberAttribute });\n\n // ─── Outputs ──────────────────────────────────────────────────────────────\n readonly animationStart = output<void>();\n readonly animationEnd = output<ClxAnimateEvent>();\n\n // ─── Dependencias ─────────────────────────────────────────────────────────\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly service = inject(ClxAnimateService);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n\n // ─── Estado interno ───────────────────────────────────────────────────────\n private _abortCtrl?: AbortController;\n private _unobserve?: () => void;\n private _hasPlayed = false;\n private _initialized = false;\n private _destroyed = false;\n\n get nativeElement(): HTMLElement { return this.el.nativeElement; }\n\n // ─── Ciclo de vida ────────────────────────────────────────────────────────\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n this._initialized = true;\n this._bindTrigger(this.trigger());\n this.destroyRef.onDestroy(() => {\n this._destroyed = true;\n this._teardown();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._initialized) return;\n if ('trigger' in changes) {\n this._unbindTrigger();\n this._bindTrigger(this.trigger());\n }\n }\n\n // ─── API pública ──────────────────────────────────────────────────────────\n\n /**\n * Ejecuta la animación. Retorna una Promise que resuelve al terminar.\n * El output animationEnd se emite al resolverse la Promise.\n */\n play(overrides?: Partial<ClxAnimateConfig>): Promise<void> {\n this.animationStart.emit();\n return this.service\n .runAnimation(this.nativeElement, this._buildConfig(overrides))\n .then(() => {\n if (this._destroyed) return;\n this.animationEnd.emit({\n element: this.nativeElement,\n animation: this.clxAnimate(),\n timestamp: Date.now(),\n });\n });\n }\n\n stop(): void {\n this.service.stop(this.nativeElement);\n }\n\n // ─── Privado ──────────────────────────────────────────────────────────────\n\n private _buildConfig(overrides?: Partial<ClxAnimateConfig>): ClxAnimateConfig {\n return this.service.buildConfig(\n {\n animation: this.clxAnimate(),\n trigger: this.trigger(),\n ...(this.duration() !== undefined && { duration: this.duration() }),\n ...(this.delay() !== undefined && { delay: this.delay() }),\n ...(this.repeat() !== undefined && { repeat: this.repeat() }),\n ...(this.easing() !== undefined && { easing: this.easing() }),\n ...(this.fillMode() !== undefined && { fillMode: this.fillMode() }),\n ...(this.threshold() !== undefined && { threshold: this.threshold() }),\n once: this.once(),\n },\n overrides ?? {},\n );\n }\n\n private _bindTrigger(trigger: ClxAnimateTrigger): void {\n const el = this.nativeElement;\n this._abortCtrl = new AbortController();\n const { signal } = this._abortCtrl;\n\n switch (trigger) {\n case 'click':\n el.addEventListener('click', () => this.play(), { signal });\n break;\n case 'hover':\n el.addEventListener('mouseenter', () => this.play(), { signal });\n break;\n case 'hoverLeave':\n el.addEventListener('mouseleave', () => this.play(), { signal });\n break;\n case 'onEnter':\n this._bindIntersection(true);\n break;\n case 'onLeave':\n this._bindIntersection(false);\n break;\n case 'manual':\n break;\n }\n }\n\n private _bindIntersection(playOnEnter: boolean): void {\n const config = this._buildConfig();\n const threshold = config.threshold ?? 0.1;\n\n this._unobserve = this.service.observe(this.nativeElement, threshold, (isIntersecting) => {\n const shouldPlay = playOnEnter ? isIntersecting : !isIntersecting;\n if (!shouldPlay) return;\n if (this._hasPlayed && config.once) return;\n\n this._hasPlayed = true;\n this.play();\n\n if (config.once) {\n this._unobserve?.();\n this._unobserve = undefined;\n }\n });\n }\n\n private _unbindTrigger(): void {\n this._abortCtrl?.abort();\n this._abortCtrl = undefined;\n this._unobserve?.();\n this._unobserve = undefined;\n this._hasPlayed = false;\n }\n\n private _teardown(): void {\n this._unbindTrigger();\n this.service.stop(this.nativeElement);\n }\n}\n","import {\n Directive,\n ContentChildren,\n QueryList,\n inject,\n DestroyRef,\n input,\n numberAttribute,\n} from '@angular/core';\nimport { ClxAnimateDirective } from './clx-animate.directive';\n\n@Directive({\n selector: '[clxAnimateGroup]',\n standalone: true,\n exportAs: 'clxAnimateGroup',\n})\nexport class ClxAnimateGroupDirective {\n readonly stagger = input<number, number>(100, { transform: numberAttribute });\n\n @ContentChildren(ClxAnimateDirective, { descendants: true })\n children!: QueryList<ClxAnimateDirective>;\n\n private readonly destroyRef = inject(DestroyRef);\n private _pendingTimers: ReturnType<typeof setTimeout>[] = [];\n\n constructor() {\n this.destroyRef.onDestroy(() => this._clearTimers());\n }\n\n /**\n * Ejecuta todos los hijos en secuencia escalonada (stagger).\n * Cancela cualquier stagger previo en vuelo antes de iniciar uno nuevo.\n * Retorna una Promise que resuelve cuando todos los hijos terminan.\n */\n playAll(): Promise<void[]> {\n this._clearTimers();\n const stagger = this.stagger();\n\n return Promise.all(\n this.children.map((child, i) =>\n new Promise<void>(resolve => {\n const id = setTimeout(() => {\n this._pendingTimers = this._pendingTimers.filter(t => t !== id);\n child.play().then(resolve);\n }, i * stagger);\n this._pendingTimers.push(id);\n }),\n ),\n );\n }\n\n /** Detiene todos los hijos y cancela los timers de stagger pendientes. */\n stopAll(): void {\n this._clearTimers();\n this.children.forEach(child => child.stop());\n }\n\n private _clearTimers(): void {\n this._pendingTimers.forEach(id => clearTimeout(id));\n this._pendingTimers = [];\n }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { FocusTrapFactory, FocusTrap } from '@angular/cdk/a11y';\n\nimport { ClxAlertComponent } from '../components/advanced/clx-alert/clx-alert.component';\nimport { CLX_ALERT_OPTIONS, CLX_ALERT_RESOLVE, ALERT_DEFAULTS } from '../configs/alert.config';\nimport type { ClxAlertOptions, ClxAlertResult, ClxAlertType } from '../types/clx-alert.types';\n\n@Injectable({ providedIn: 'root' })\nexport class ClxAlertService {\n private readonly _overlay: Overlay;\n private readonly _injector: Injector;\n private readonly _focusTrapFactory: FocusTrapFactory;\n\n constructor() {\n this._overlay = inject(Overlay);\n this._injector = inject(Injector);\n this._focusTrapFactory = inject(FocusTrapFactory);\n }\n\n // ─── Core open ────────────────────────────────────────────────────────────\n\n open(options: ClxAlertOptions = {}): Promise<ClxAlertResult> {\n const backdrop = options.backdrop ?? ALERT_DEFAULTS.backdrop;\n const disableClose = options.disableClose ?? ALERT_DEFAULTS.disableClose;\n\n let _resolve!: (v: ClxAlertResult) => void;\n const promise = new Promise<ClxAlertResult>(res => (_resolve = res));\n\n let _focusTrap: FocusTrap | null = null;\n\n // Wrap resolve so we can dispose the overlay after the exit animation\n const resolve = (result: ClxAlertResult) => {\n _focusTrap?.destroy();\n overlayRef.dispose();\n _resolve(result);\n };\n\n const overlayRef: OverlayRef = this._overlay.create(new OverlayConfig({\n hasBackdrop: backdrop,\n backdropClass: 'clx-alert-backdrop',\n scrollStrategy: this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),\n }));\n\n // Make the overlay pane a flex centering layer\n Object.assign(overlayRef.overlayElement.style, {\n position: 'fixed',\n inset: '0',\n width: '100vw',\n height: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1rem',\n boxSizing: 'border-box',\n });\n\n const innerInjector = Injector.create({\n parent: this._injector,\n providers: [\n { provide: CLX_ALERT_OPTIONS, useValue: options },\n { provide: CLX_ALERT_RESOLVE, useValue: resolve },\n ],\n });\n\n overlayRef.attach(new ComponentPortal(ClxAlertComponent, null, innerInjector));\n\n if (backdrop && !disableClose) {\n overlayRef.backdropClick().subscribe(() => resolve(false));\n }\n if (!disableClose) {\n overlayRef.keydownEvents().subscribe(e => { if (e.key === 'Escape') resolve(false); });\n }\n\n _focusTrap = this._focusTrapFactory.create(overlayRef.overlayElement);\n _focusTrap.focusInitialElementWhenReady();\n\n return promise;\n }\n\n // ─── Convenience shortcuts ────────────────────────────────────────────────\n\n success(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({ type: 'success', title, message, ...opts });\n }\n\n error(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({ type: 'danger', title, message, ...opts });\n }\n\n warning(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({ type: 'warning', title, message, ...opts });\n }\n\n info(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({ type: 'info', title, message, ...opts });\n }\n\n confirm(title: string, message?: string, opts: Partial<ClxAlertOptions> = {}): Promise<ClxAlertResult> {\n return this.open({\n type: 'confirm',\n title,\n message,\n showCancelButton: true,\n ...opts,\n });\n }\n}\n","import {\n inject,\n Injectable,\n Injector,\n} from '@angular/core';\nimport {\n Overlay,\n OverlayConfig,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport type { ClxDrawerConfig, ClxDrawerRef } from '../types/clx-drawer.types';\nimport { CLX_MODAL_DATA, CLX_MODAL_REF } from '../configs/modal.config';\nimport { CLX_DRAWER_SIZE, DRAWER_WIDTH_MAP } from '../configs/drawer.config';\nimport { ClxModalWrapperComponent } from '../components/advanced/clx-modal/clx-modal-wrapper.component';\n\n@Injectable({ providedIn: 'root' })\nexport class ClxDrawerService {\n private readonly _overlay: Overlay;\n private readonly _injector: Injector;\n private readonly _focusTrapFactory: FocusTrapFactory;\n\n constructor() {\n this._overlay = inject(Overlay);\n this._injector = inject(Injector);\n this._focusTrapFactory = inject(FocusTrapFactory);\n }\n\n open<R = unknown, D = unknown>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: new (...args: any[]) => any,\n config: ClxDrawerConfig<D> = {},\n ): ClxDrawerRef<R> {\n const {\n hasBackdrop = false,\n disableClose = false,\n panelClass = [],\n size = 'md',\n data,\n } = config;\n\n let _resolve!: (value: R | undefined) => void;\n const _afterClosed = new Promise<R | undefined>(res => (_resolve = res));\n let _focusTrap: FocusTrap | null = null;\n\n const drawerRef: ClxDrawerRef<R> = {\n close(result?: R): void {\n _focusTrap?.destroy();\n overlayRef.dispose();\n _resolve(result);\n },\n afterClosed(): Promise<R | undefined> {\n return _afterClosed;\n },\n };\n\n const extraClasses = Array.isArray(panelClass) ? panelClass : [panelClass];\n\n const overlayRef: OverlayRef = this._overlay.create(new OverlayConfig({\n hasBackdrop,\n backdropClass: 'clx-modal-backdrop',\n panelClass: extraClasses,\n scrollStrategy: this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global().right('0').top('0'),\n }));\n\n const innerInjector = Injector.create({\n parent: this._injector,\n providers: [\n { provide: CLX_MODAL_DATA, useValue: data ?? null },\n { provide: CLX_MODAL_REF, useValue: drawerRef },\n { provide: CLX_DRAWER_SIZE, useValue: size },\n ],\n });\n\n // Attach wrapper via ComponentPortal — CDK creates backdrop on attach()\n const wrapperPortal = new ComponentPortal(ClxModalWrapperComponent, null, innerInjector);\n const wrapperRef = overlayRef.attach(wrapperPortal) as import('@angular/core').ComponentRef<ClxModalWrapperComponent>;\n\n // El pane ya tiene width/height del OverlayConfig.\n // Solo desactivamos pointer-events en el overlay element (no en el pane)\n // para que el click-through funcione cuando no hay backdrop.\n overlayRef.overlayElement.style.pointerEvents = 'none';\n (wrapperRef.location.nativeElement as HTMLElement).style.pointerEvents = 'auto';\n\n // Mount user component inside the wrapper via a second portal\n const contentPortal = new ComponentPortal(component, null, innerInjector);\n wrapperRef.instance.portal.set(contentPortal);\n\n if (hasBackdrop && !disableClose) {\n overlayRef.backdropClick().subscribe(() => drawerRef.close());\n }\n if (!disableClose) {\n overlayRef.keydownEvents().subscribe(e => { if (e.key === 'Escape') drawerRef.close(); });\n }\n\n _focusTrap = this._focusTrapFactory.create(overlayRef.overlayElement);\n _focusTrap.focusInitialElementWhenReady();\n\n return drawerRef;\n }\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n inject,\n Injectable,\n} from '@angular/core';\n\nimport { ClxToastContainerComponent } from '../components/advanced/clx-toast/clx-toast-container.component';\nimport {\n TOAST_DEFAULTS,\n TOAST_ANIM_IN_MAP,\n} from '../configs/toast.config';\nimport type { ClxToastEntry, ClxToastOptions, ClxToastPosition } from '../types/clx-toast.types';\n\n@Injectable({ providedIn: 'root' })\nexport class ClxToastService {\n private readonly _appRef: ApplicationRef;\n private readonly _containers = new Map<ClxToastPosition, ComponentRef<ClxToastContainerComponent>>();\n\n constructor() {\n this._appRef = inject(ApplicationRef);\n }\n\n // ─── Core show ─────────────────────────────────────────────────────────────\n\n show(options: ClxToastOptions): void {\n const position = options.position ?? TOAST_DEFAULTS.position;\n const container = this._getOrCreateContainer(position);\n\n const entry: ClxToastEntry = {\n id: this._uid(),\n type: options.type ?? TOAST_DEFAULTS.type,\n message: options.message,\n title: options.title,\n icon: options.icon,\n position,\n duration: options.duration ?? TOAST_DEFAULTS.duration,\n showProgress: options.showProgress ?? TOAST_DEFAULTS.showProgress,\n pauseOnHover: options.pauseOnHover ?? TOAST_DEFAULTS.pauseOnHover,\n animationIn: options.animationIn ?? TOAST_ANIM_IN_MAP[position],\n animationOut: options.animationOut ?? TOAST_DEFAULTS.animationOut,\n animationDuration: options.animationDuration ?? TOAST_DEFAULTS.animationDuration,\n action: options.action,\n removing: false,\n };\n\n const isBottom = position.startsWith('bottom');\n container.instance.entries.update((list: ClxToastEntry[]) =>\n isBottom ? [...list, entry] : [entry, ...list],\n );\n }\n\n // ─── Convenience shortcuts ─────────────────────────────────────────────────\n\n success(message: string, opts: Partial<ClxToastOptions> = {}): void {\n this.show({ ...opts, type: 'green', message });\n }\n\n error(message: string, opts: Partial<ClxToastOptions> = {}): void {\n this.show({ ...opts, type: 'red', message });\n }\n\n warning(message: string, opts: Partial<ClxToastOptions> = {}): void {\n this.show({ ...opts, type: 'amber', message });\n }\n\n info(message: string, opts: Partial<ClxToastOptions> = {}): void {\n this.show({ ...opts, type: 'sky', message });\n }\n\n /** Dismiss all toasts across all containers immediately (no exit anim). */\n dismissAll(): void {\n this._containers.forEach(ref => ref.instance.entries.set([]));\n }\n\n // ─── Container management ──────────────────────────────────────────────────\n\n private _getOrCreateContainer(position: ClxToastPosition): ComponentRef<ClxToastContainerComponent> {\n const existing = this._containers.get(position);\n if (existing) return existing;\n\n const ref = createComponent(ClxToastContainerComponent, {\n environmentInjector: this._appRef.injector,\n });\n\n ref.setInput('position', position);\n this._appRef.attachView(ref.hostView);\n document.body.appendChild(ref.location.nativeElement);\n\n this._containers.set(position, ref);\n return ref;\n }\n\n // ─── Utilities ─────────────────────────────────────────────────────────────\n\n private _uid(): string {\n return `toast-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n }\n}\n","import type { ClxProgressBarSize } from '../types/clx-progress-bar.types';\n\nexport const PROGRESS_BAR_SIZE_MAP: Record<ClxProgressBarSize, string> = {\n xs: 'h-1',\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { resolveColor } from '../../../types/clx-color.types';\nimport type { ClxColorInput } from '../../../types/clx-color.types';\nimport type { ClxProgressBarSize, ClxProgressBarVariant } from '../../../types/clx-progress-bar.types';\nimport { PROGRESS_BAR_SIZE_MAP } from '../../../configs/progress-bar.config';\n\n@Component({\n selector: 'clx-progress-bar',\n standalone: true,\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [`\n @keyframes clx-pb-indeterminate {\n 0% { transform: translateX(-100%) scaleX(.4); }\n 40% { transform: translateX(0%) scaleX(.4); }\n 100% { transform: translateX(100%) scaleX(.4); }\n }\n .clx-pb-indeterminate {\n animation: clx-pb-indeterminate 1.4s ease-in-out infinite;\n }\n @keyframes clx-pb-stripe {\n from { background-position: 1rem 0; }\n to { background-position: 0 0; }\n }\n .clx-pb-striped {\n background-image: linear-gradient(\n 45deg,\n rgba(255,255,255,.18) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255,255,255,.18) 50%,\n rgba(255,255,255,.18) 75%,\n transparent 75%,\n transparent\n );\n background-size: 1rem 1rem;\n animation: clx-pb-stripe 1s linear infinite;\n }\n `],\n host: { class: 'flex flex-col gap-1.5 w-full' },\n template: `\n @if (label() || showValue()) {\n <div class=\"flex items-center justify-between gap-2\">\n @if (label()) {\n <span [class]=\"_labelCls()\">{{ label() }}</span>\n }\n @if (showValue()) {\n <span class=\"text-xs font-medium text-slate-500 tabular-nums shrink-0\">\n {{ _displayValue() }}\n </span>\n }\n </div>\n }\n\n <!-- Track -->\n <div\n class=\"w-full overflow-hidden rounded-full bg-slate-100\"\n [class]=\"_trackH()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"variant() === 'indeterminate' ? null : value()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-label]=\"label() || null\">\n\n <!-- Fill -->\n <div\n class=\"h-full rounded-full transition-all duration-500 ease-out\"\n [class]=\"_fillCls()\"\n [style.width]=\"variant() === 'indeterminate' ? '40%' : _pct() + '%'\">\n </div>\n </div>\n `,\n})\nexport class ClxProgressBarComponent {\n readonly value = input<number>(0);\n readonly max = input<number>(100);\n readonly color = input<ClxColorInput>('indigo');\n readonly size = input<ClxProgressBarSize>('md');\n readonly variant = input<ClxProgressBarVariant>('solid');\n readonly label = input<string>('');\n readonly showValue = input<boolean>(false);\n readonly valueFormat = input<'percent' | 'fraction' | 'value'>('percent');\n\n protected readonly _pct = computed(() => {\n const m = this.max();\n if (!m) return 0;\n return Math.min(100, Math.max(0, (this.value() / m) * 100));\n });\n\n protected readonly _trackH = computed(() => PROGRESS_BAR_SIZE_MAP[this.size()]);\n\n protected readonly _labelCls = computed(() => {\n const size = this.size();\n return size === 'xs' || size === 'sm' ? 'text-xs text-slate-600' : 'text-sm text-slate-600';\n });\n\n protected readonly _displayValue = computed(() => {\n const fmt = this.valueFormat();\n if (fmt === 'fraction') return `${this.value()} / ${this.max()}`;\n if (fmt === 'value') return `${this.value()}`;\n return `${Math.round(this._pct())}%`;\n });\n\n protected readonly _fillCls = computed(() => {\n const t = resolveColor(this.color());\n const v = this.variant();\n let cls = t.bg;\n if (v === 'indeterminate') cls += ' clx-pb-indeterminate';\n if (v === 'striped') cls += ' clx-pb-striped';\n return cls;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-page-not-found',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col items-center justify-center min-h-[60vh] px-6 text-center' },\n template: `\n <div class=\"w-20 h-20 rounded-2xl bg-indigo-50 flex items-center justify-center mb-6\">\n <span clx-icon name=\"search_off\" size=\"xl\" class=\"text-indigo-400\"></span>\n </div>\n\n <p class=\"text-7xl font-black text-slate-200 leading-none select-none mb-2\">404</p>\n <h1 class=\"text-xl font-semibold text-slate-800 mb-2\">{{ title() }}</h1>\n <p class=\"text-slate-400 max-w-sm mb-8\">{{ description() }}</p>\n\n @if (backLabel()) {\n <button\n clx-button\n color=\"indigo\"\n variant=\"solid\"\n icon=\"arrow_back\"\n (click)=\"back.emit()\">\n {{ backLabel() }}\n </button>\n }\n `,\n})\nexport class ClxPageNotFoundComponent {\n readonly title = input<string>('Página no encontrada');\n readonly description = input<string>('La ruta que buscas no existe o fue movida.');\n readonly backLabel = input<string>('Volver al inicio');\n\n readonly back = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-page-unauthorized',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col items-center justify-center min-h-[60vh] px-6 text-center' },\n template: `\n <div class=\"w-20 h-20 rounded-2xl bg-amber-50 flex items-center justify-center mb-6\">\n <span clx-icon name=\"lock\" size=\"xl\" class=\"text-amber-400\"></span>\n </div>\n\n <p class=\"text-7xl font-black text-slate-200 leading-none select-none mb-2\">{{ code() }}</p>\n <h1 class=\"text-xl font-semibold text-slate-800 mb-2\">{{ title() }}</h1>\n <p class=\"text-slate-400 max-w-sm mb-8\">{{ description() }}</p>\n\n <div class=\"flex items-center gap-3\">\n @if (loginLabel()) {\n <button\n clx-button\n color=\"indigo\"\n variant=\"solid\"\n icon=\"login\"\n (click)=\"login.emit()\">\n {{ loginLabel() }}\n </button>\n }\n @if (backLabel()) {\n <button\n clx-button\n color=\"slate\"\n variant=\"ghost\"\n icon=\"arrow_back\"\n (click)=\"back.emit()\">\n {{ backLabel() }}\n </button>\n }\n </div>\n `,\n})\nexport class ClxPageUnauthorizedComponent {\n readonly code = input<number>(401);\n readonly title = input<string>('Sin autorización');\n readonly description = input<string>('No tienes permisos para acceder a esta sección.');\n readonly loginLabel = input<string>('Iniciar sesión');\n readonly backLabel = input<string>('Volver');\n\n readonly login = output<void>();\n readonly back = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClxButtonComponent } from '../../base/clx-button/clx-button.component';\nimport { ClxIconComponent } from '../../base/clx-icon/clx-icon.component';\n\n@Component({\n selector: 'clx-page-server-error',\n standalone: true,\n imports: [ClxButtonComponent, ClxIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col items-center justify-center min-h-[60vh] px-6 text-center' },\n template: `\n <div class=\"w-20 h-20 rounded-2xl bg-red-50 flex items-center justify-center mb-6\">\n <span clx-icon name=\"error_outline\" size=\"xl\" class=\"text-red-400\"></span>\n </div>\n\n <p class=\"text-7xl font-black text-slate-200 leading-none select-none mb-2\">500</p>\n <h1 class=\"text-xl font-semibold text-slate-800 mb-2\">{{ title() }}</h1>\n <p class=\"text-slate-400 max-w-sm mb-8\">{{ description() }}</p>\n\n @if (errorId()) {\n <p class=\"text-xs font-mono text-slate-300 mb-6\">ID: {{ errorId() }}</p>\n }\n\n <div class=\"flex items-center gap-3\">\n @if (retryLabel()) {\n <button\n clx-button\n color=\"red\"\n variant=\"solid\"\n icon=\"refresh\"\n (click)=\"retry.emit()\">\n {{ retryLabel() }}\n </button>\n }\n @if (backLabel()) {\n <button\n clx-button\n color=\"slate\"\n variant=\"ghost\"\n icon=\"arrow_back\"\n (click)=\"back.emit()\">\n {{ backLabel() }}\n </button>\n }\n </div>\n `,\n})\nexport class ClxPageServerErrorComponent {\n readonly title = input<string>('Error del servidor');\n readonly description = input<string>('Ocurrió un problema inesperado. Intenta de nuevo en unos momentos.');\n readonly retryLabel = input<string>('Reintentar');\n readonly backLabel = input<string>('Volver');\n readonly errorId = input<string>('');\n\n readonly retry = output<void>();\n readonly back = output<void>();\n}\n","// --- Widgets ---\nexport * from './lib/general/widgets/clx-stat-card/clx-stat-card.component';\nexport * from './lib/types/clx-stat-card.types';\n\n\n// --- Apps ---\nexport * from './lib/apps/e-commerce/clx-product/clx-product.component';\nexport * from './lib/apps/e-commerce/clx-product-detail/clx-product-detail.component';\nexport * from './lib/types/clx-product-detail.types';\n\n// --- Components ---\nexport * from './lib/components/advanced/clx-tree/clx-tree.component';\nexport * from './lib/types/clx-tree.types';\nexport * from './lib/components/advanced/clx-filter-panel/clx-filter-panel.component';\nexport * from './lib/types/clx-filter-panel.types';\nexport * from './lib/components/advanced/clx-alert/clx-alert.component';\nexport * from './lib/components/advanced/clx-carousel/clx-carousel.component';\nexport * from './lib/directives/clx-carousel.directive';\nexport * from './lib/components/advanced/clx-tabs/clx-tabs.component';\nexport * from './lib/components/advanced/clx-drawer/clx-drawer.component';\nexport * from './lib/components/advanced/clx-modal/clx-modal.component';\nexport * from './lib/components/advanced/clx-pagination/clx-pagination.component';\nexport * from './lib/components/advanced/clx-toast/clx-toast-container.component';\nexport * from './lib/components/advanced/clx-toast/clx-toast.component';\nexport * from './lib/components/base/clx-card/clx-card.component';\nexport * from './lib/components/base/clx-card/clx-card-header.directive';\nexport * from './lib/components/base/clx-card/clx-card-body.directive';\nexport * from './lib/components/base/clx-card/clx-card-footer.directive';\nexport * from './lib/types/clx-card.types';\nexport * from './lib/components/base/clx-stepper/clx-stepper.component';\nexport * from './lib/types/clx-stepper.types';\nexport * from './lib/components/base/clx-avatar/clx-avatar.component';\nexport * from './lib/components/base/clx-button-group/clx-button-group.component';\nexport * from './lib/components/base/clx-list/clx-list.component';\nexport * from './lib/components/base/clx-list/clx-list-item.component';\nexport * from './lib/components/base/clx-rating/clx-rating.component';\nexport * from './lib/components/base/clx-badge/clx-badge.component';\nexport * from './lib/components/base/clx-button/clx-button.component';\nexport * from './lib/components/base/clx-icon/clx-icon.component';\nexport * from './lib/components/base/clx-skeleton/clx-skeleton.component';\nexport * from './lib/components/base/clx-spinner/clx-spinner.component';\nexport * from './lib/components/base/clx-tag/clx-tag.component';\nexport * from './lib/components/base/clx-tooltip/clx-tooltip.component';\nexport * from './lib/components/base/clx-timeline/clx-timeline.component';\nexport * from './lib/components/base/clx-timeline/clx-timeline-item.component';\nexport * from './lib/components/charts/chartjs/clx-chart/clx-chart.component';\nexport * from './lib/components/forms/clx-checkbox/clx-checkbox.component';\nexport * from './lib/components/forms/clx-colorpicker/clx-colorpicker.component';\nexport * from './lib/components/forms/clx-datepicker/clx-datepicker.component';\nexport * from './lib/components/forms/clx-date-range-picker/clx-date-range-picker.component';\nexport * from './lib/types/clx-date-range-picker.types';\nexport * from './lib/components/forms/clx-editor/clx-editor-link-modal.component';\nexport * from './lib/components/forms/clx-editor/clx-editor.component';\nexport * from './lib/components/forms/clx-input/clx-input.component';\nexport * from './lib/components/forms/clx-number/clx-number.component';\nexport * from './lib/components/forms/clx-radio/clx-radio-group.component';\nexport * from './lib/components/forms/clx-radio/clx-radio.component';\nexport * from './lib/components/forms/clx-select/clx-select.component';\nexport * from './lib/components/forms/clx-slider/clx-slider.component';\nexport * from './lib/components/forms/clx-switch/clx-switch.component';\nexport * from './lib/components/forms/clx-textarea/clx-textarea.component';\nexport * from './lib/components/forms/clx-upload/clx-upload.component';\nexport * from './lib/components/forms/clx-wizard/clx-step.component';\nexport * from './lib/components/forms/clx-wizard/clx-wizard.component';\nexport * from './lib/components/layout/clx-app-layout/clx-app-layout.component';\nexport * from './lib/components/layout/clx-brand/clx-brand.component';\nexport * from './lib/components/layout/clx-menu-item/clx-menu-item.component';\nexport * from './lib/components/layout/clx-menu/clx-menu.component';\nexport * from './lib/components/layout/clx-nav-group/clx-nav-group.component';\nexport * from './lib/components/layout/clx-profile/clx-profile.component';\nexport * from './lib/components/tables/basic/clx-table/clx-table.component';\nexport * from './lib/apps/e-commerce/clx-wishlist/clx-wishlist.component';\nexport * from './lib/apps/e-commerce/clx-cart/clx-cart.component';\nexport * from './lib/apps/e-commerce/clx-cart/clx-cart-summary-drawer';\nexport * from './lib/types/clx-cart.types';\n\n\n// --- DI Tokens ---\nexport { CLX_MODAL_DATA, CLX_MODAL_REF, CLX_MODAL_ANIM_CONFIG } from './lib/configs/modal.config';\nexport { CLX_ALERT_OPTIONS, CLX_ALERT_RESOLVE } from './lib/configs/alert.config';\nexport { CLX_TOAST_DEFAULTS } from './lib/configs/toast.config';\n\n// --- Directives ---\nexport * from './lib/directives/clx-animate-group.directive';\nexport * from './lib/directives/clx-animate.directive';\nexport * from './lib/directives/clx-table-cell.directive';\nexport * from './lib/directives/clx-tab.directive';\nexport * from './lib/directives/clx-tooltip.directive';\n\n// --- Services ---\nexport * from './lib/services/clx-alert.service';\nexport * from './lib/services/clx-animate.service';\nexport * from './lib/services/clx-drawer.service';\nexport * from './lib/services/clx-modal.service';\nexport * from './lib/services/clx-toast.service';\n\n// --- Types ---\nexport * from './lib/types/clx-alert.types';\nexport * from './lib/types/clx-button-group.types';\nexport * from './lib/types/clx-list.types';\nexport * from './lib/types/clx-carousel.types';\nexport * from './lib/types/clx-tabs.types';\nexport * from './lib/types/clx-animate.types';\nexport * from './lib/types/clx-avatar.types';\nexport * from './lib/types/clx-badge.types';\nexport * from './lib/types/clx-button.types';\nexport * from './lib/types/clx-chart.types';\nexport * from './lib/types/clx-checkbox.types';\nexport * from './lib/types/clx-color.types';\nexport * from './lib/types/clx-colorpicker.types';\nexport * from './lib/types/clx-datepicker.types';\nexport * from './lib/types/clx-progress-bar.types';\nexport * from './lib/components/base/clx-progress-bar/clx-progress-bar.component';\nexport * from './lib/components/pages/clx-page-not-found/clx-page-not-found.component';\nexport * from './lib/components/pages/clx-page-unauthorized/clx-page-unauthorized.component';\nexport * from './lib/components/pages/clx-page-server-error/clx-page-server-error.component';\nexport * from './lib/components/pages/clx-page-empty/clx-page-empty.component';\nexport * from './lib/types/clx-drawer.types';\nexport * from './lib/types/clx-editor.types';\nexport * from './lib/types/clx-input.types';\nexport * from './lib/types/clx-modal.types';\nexport * from './lib/types/clx-number.types';\nexport * from './lib/types/clx-pagination.types';\nexport * from './lib/types/clx-radio.types';\nexport * from './lib/types/clx-select.types';\nexport * from './lib/types/clx-shape.types';\nexport * from './lib/types/clx-size.types';\nexport * from './lib/types/clx-skeleton.types';\nexport * from './lib/types/clx-slider.types';\nexport * from './lib/types/clx-spinner.types';\nexport * from './lib/types/clx-table.types';\nexport * from './lib/types/clx-tag.types';\nexport * from './lib/types/clx-textarea.types';\nexport * from './lib/types/clx-toast.types';\nexport * from './lib/types/clx-tooltip.types';\nexport * from './lib/types/clx-upload.types';\nexport * from './lib/types/clx-wizard.types';\nexport * from './lib/types/clx-product.types';\nexport * from './lib/types/clx-wishlist.types';\nexport * from './lib/types/clx-timeline.types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","MONTH_NAMES_ES","DAY_LABELS","isSameDay","startOfDay"],"mappings":"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"}
|