@synthex-engineers/refined-tech 1.0.0 → 1.0.1

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,"sources":["../../src/components/library/animated-dropdown/angular/animated-dropdown.component.ts","../../src/components/library/badge-status/angular/badge-status.component.ts","../../src/components/library/bento-grid-card/angular/bento-grid-card.component.ts","../../src/components/library/button-outline/angular/button-outline.component.ts","../../src/components/library/button-primary/angular/button-primary.component.ts","../../src/components/library/button-secondary/angular/button-secondary.component.ts","../../src/components/library/client-trust-card/angular/client-trust-card.component.ts","../../src/components/library/command-k-trigger/angular/command-k-trigger.component.ts","../../src/components/library/dropdown-select/angular/dropdown-select.component.ts","../../src/components/library/gsap-footer-bounce/angular/footer-bounce.component.ts","../../src/components/library/gsap-magnetic-button/angular/magnetic-button.component.ts","../../src/components/library/gsap-preloader/angular/preloader.component.ts","../../src/components/library/help-tooltip/angular/help-tooltip.component.ts","../../src/components/library/input-text/angular/input-text.component.ts","../../src/components/library/language-selector-dropdown/angular/language-selector-dropdown.component.ts","../../src/components/library/language-selector-pill/angular/language-selector-pill.component.ts","../../src/components/library/magic-link-card/angular/magic-link-card.component.ts","../../src/components/library/manifesto-icon-box/angular/manifesto-icon-box.component.ts","../../src/components/library/metric-card/angular/metric-card.component.ts","../../src/components/library/modal-dialog/angular/modal-dialog.component.ts","../../src/components/library/process-step-card/angular/process-step-card.component.ts","../../src/components/library/role-view-switcher/angular/role-view-switcher.component.ts","../../src/components/library/solution-bento-card/angular/solution-bento-card.component.ts","../../src/components/library/table-ledger-row/angular/table-ledger-row.component.ts","../../src/components/library/timer-widget/angular/timer-widget.component.ts","../../src/components/library/toggle-switch/angular/toggle-switch.component.ts","../../src/components/library/wavy-underline-heading/angular/wavy-underline-heading.component.ts","../../src/components/library/workspace-switcher/angular/workspace-switcher.component.ts"],"names":["AnimatedDropdownComponent","input","model","signal","HostListener","Component","CommonModule","ChangeDetectionStrategy","BadgeStatusComponent","BentoCardComponent","ButtonOutlineComponent","output","ButtonPrimaryComponent","ButtonSecondaryComponent","ClientTrustCardComponent","CommandKTriggerComponent","DropdownSelectComponent","FooterBounceComponent","viewChild","afterNextRender","gsap","MagneticButtonComponent","PreloaderComponent","MorphSVGPlugin","HelpTooltipComponent","InputTextComponent","LanguageSelectorDropdownComponent","LanguageSelectorPillComponent","MagicLinkCardComponent","ManifestoIconBoxComponent","MetricCardComponent","ModalDialogComponent","ProcessStepCardComponent","RoleViewSwitcherComponent","SolutionBentoCardComponent","TableLedgerRowComponent","computed","TimerWidgetComponent","ToggleSwitchComponent","WavyUnderlineHeadingComponent","WorkspaceSwitcherComponent"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Component, ChangeDetectionStrategy, input, model, signal, HostListener, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface DropdownItem<T = any> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'st-animated-dropdown',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-block w-full font-sans text-left\">\n <!-- Botón Trigger -->\n <button\n type=\"button\"\n (click)=\"toggle()\"\n [disabled]=\"disabled()\"\n class=\"w-full flex items-center justify-between gap-3 bg-charcoal border border-slateBorder hover:border-slateBorder-focus px-4 py-2.5 rounded-xl text-sm text-white focus:outline-none focus:border-pistachio disabled:opacity-60 disabled:cursor-not-allowed transition-all cursor-pointer shadow-inner group\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n >\n <div class=\"flex items-center gap-2 truncate\">\n <span class=\"w-2 h-2 rounded-full bg-pistachio shrink-0\"></span>\n <span class=\"truncate\">{{ selectedLabel() || placeholder() }}</span>\n </div>\n <svg\n class=\"w-4 h-4 text-muted transition-transform duration-200 ease-out group-hover:text-white shrink-0\"\n [class.rotate-180]=\"isOpen()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Panel Desplegable con Animación Suave -->\n <div\n class=\"absolute left-0 mt-2 w-full bg-slateSurface-card border border-slateBorder rounded-xl shadow-2xl py-1.5 z-40 overflow-hidden transition-all duration-200 ease-out origin-top\"\n [class.opacity-100]=\"isOpen()\"\n [class.scale-100]=\"isOpen()\"\n [class.pointer-events-auto]=\"isOpen()\"\n [class.opacity-0]=\"!isOpen()\"\n [class.scale-95]=\"!isOpen()\"\n [class.pointer-events-none]=\"!isOpen()\"\n role=\"listbox\"\n >\n @if (header()) {\n <div class=\"px-3.5 py-1.5 text-xs font-mono text-muted uppercase tracking-wider border-b border-slateBorder/50\">\n {{ header() }}\n </div>\n }\n @for (item of items(); track item.value) {\n <button\n type=\"button\"\n (click)=\"selectItem(item)\"\n [disabled]=\"item.disabled\"\n class=\"w-full text-left px-3.5 py-2.5 hover:bg-slateBorder text-white flex items-center justify-between text-xs transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed\"\n >\n <span [class.text-white]=\"item.value === value()\" [class.text-muted]=\"item.value !== value()\">\n {{ item.label }}\n </span>\n @if (item.value === value()) {\n <span class=\"text-pistachio font-bold\">✓</span>\n }\n </button>\n }\n </div>\n </div>\n `,\n})\nexport class AnimatedDropdownComponent {\n items = input<DropdownItem[]>([]);\n placeholder = input<string>('Seleccionar...');\n header = input<string>('Opciones Disponibles');\n disabled = input<boolean>(false);\n value = model<any>(null);\n\n isOpen = signal<boolean>(false);\n\n constructor(private hostEl: ElementRef) {}\n\n toggle() {\n if (!this.disabled()) {\n this.isOpen.update((v) => !v);\n }\n }\n\n selectItem(item: DropdownItem) {\n if (!item.disabled) {\n this.value.set(item.value);\n this.isOpen.set(false);\n }\n }\n\n selectedLabel(): string {\n const current = this.items().find((it) => it.value === this.value());\n return current ? current.label : '';\n }\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: MouseEvent) {\n if (!this.hostEl.nativeElement.contains(event.target)) {\n this.isOpen.set(false);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-badge-status',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <span class=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-mono bg-slateSurface text-pistachio border border-slateBorder\">\r\n <span\r\n class=\"w-1.5 h-1.5 rounded-full\"\r\n [class.bg-pistachio]=\"status() === 'success'\"\r\n [class.bg-amber-500]=\"status() === 'warning'\"\r\n [class.bg-red-500]=\"status() === 'error'\"\r\n [class.bg-muted]=\"status() === 'neutral'\"\r\n ></span>\r\n {{ label() }}\r\n </span>\r\n `,\r\n})\r\nexport class BadgeStatusComponent {\r\n label = input.required<string>();\r\n status = input<'success' | 'warning' | 'error' | 'neutral'>('success');\r\n}\r\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-bento-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"p-5 rounded-2xl bg-slateSurface-card border border-slateBorder hover:border-pistachio/40 transition-all flex flex-col gap-2 w-64 font-sans\">\n <div class=\"w-7 h-7 rounded-lg bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio\">\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n <h4 class=\"text-xs font-semibold text-white\">{{ title() }}</h4>\n <p class=\"text-xs text-muted leading-relaxed\">{{ description() }}</p>\n </div>\n `,\n})\nexport class BentoCardComponent {\n title = input.required<string>();\n description = input.required<string>();\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-button-outline',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <button\r\n [type]=\"type()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onClick.emit($event)\"\r\n class=\"bg-transparent text-pistachio border border-pistachio/70 hover:bg-pistachio/10 hover:border-pistachio disabled:opacity-50 disabled:cursor-not-allowed px-4 py-2 rounded-md font-medium text-xs transition-colors shadow-sm inline-flex items-center justify-center gap-1.5 cursor-pointer font-sans\"\r\n >\r\n <ng-content></ng-content>\r\n </button>\r\n `,\r\n})\r\nexport class ButtonOutlineComponent {\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n disabled = input<boolean>(false);\r\n onClick = output<MouseEvent>();\r\n}\r\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-button-primary',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <button\r\n [type]=\"type()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onClick.emit($event)\"\r\n class=\"bg-pistachio text-charcoal hover:bg-pistachio-hover disabled:opacity-50 disabled:cursor-not-allowed px-4 py-2 rounded-md font-medium text-xs transition-colors shadow-sm active:scale-95 inline-flex items-center justify-center gap-1.5 cursor-pointer font-sans\"\r\n >\r\n <ng-content></ng-content>\r\n </button>\r\n `,\r\n})\r\nexport class ButtonPrimaryComponent {\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n disabled = input<boolean>(false);\r\n onClick = output<MouseEvent>();\r\n}\r\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-button-secondary',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <button\r\n [type]=\"type()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onClick.emit($event)\"\r\n class=\"bg-slateSurface text-white border border-slateBorder hover:bg-slateBorder hover:border-slateBorder-focus disabled:opacity-50 disabled:cursor-not-allowed px-4 py-2 rounded-md font-medium text-xs transition-colors shadow-sm inline-flex items-center justify-center gap-1.5 cursor-pointer font-sans\"\r\n >\r\n <ng-content></ng-content>\r\n </button>\r\n `,\r\n})\r\nexport class ButtonSecondaryComponent {\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n disabled = input<boolean>(false);\r\n onClick = output<MouseEvent>();\r\n}\r\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-client-trust-card',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <a\r\n [href]=\"href()\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"group inline-flex items-center gap-4 sm:gap-5 px-6 sm:px-8 py-3.5 sm:py-4 rounded-2xl bg-slateSurface/60 border border-slateBorder hover:border-pistachio/50 hover:bg-slateCard/80 hover:scale-105 active:scale-95 transition-all duration-300 shadow-sm cursor-pointer font-sans\"\r\n [attr.aria-label]=\"clientName() + (location() ? ' - ' + location() : '')\"\r\n >\r\n @if (logoSrc()) {\r\n <img\r\n [src]=\"logoSrc()\"\r\n [alt]=\"clientName()\"\r\n class=\"h-7 sm:h-8 w-auto object-contain opacity-90 group-hover:opacity-100 transition-opacity\"\r\n width=\"120\"\r\n height=\"44\"\r\n loading=\"lazy\"\r\n />\r\n } @else {\r\n <div class=\"w-8 h-8 rounded-lg bg-slateSurface border border-slateBorder flex items-center justify-center text-pistachio shrink-0\">\r\n <svg class=\"w-5 h-5 text-pistachio transition-transform duration-300 group-hover:scale-105\" viewBox=\"0 0 32 32\" fill=\"none\">\r\n <path d=\"M7 21L12 16L16 19L24 10\" stroke=\"#E0F9B5\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <circle cx=\"24\" cy=\"10\" r=\"2\" fill=\"#E0F9B5\" />\r\n <path d=\"M19 10H24V15\" stroke=\"#E0F9B5\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n }\r\n\r\n <div class=\"text-left border-l border-slateBorder/60 pl-4 sm:pl-5\">\r\n <span class=\"block font-display font-bold text-base sm:text-lg text-white group-hover:text-pistachio transition-colors leading-tight\">\r\n {{ clientName() }}\r\n </span>\r\n @if (location()) {\r\n <span class=\"block text-sm font-sans text-muted leading-tight mt-0.5\">\r\n {{ location() }}\r\n </span>\r\n }\r\n </div>\r\n </a>\r\n `,\r\n})\r\nexport class ClientTrustCardComponent {\r\n clientName = input<string>('SD-M GmbH');\r\n location = input<string>('Alemania');\r\n href = input<string>('https://sd-kpi.com/');\r\n logoSrc = input<string>('/brand/sd-m-logo-dark.png');\r\n}\r\n","import { Component, ChangeDetectionStrategy, output, input } from '@angular/core';\n\n@Component({\n selector: 'st-command-k-trigger',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n (click)=\"onOpen.emit()\"\n class=\"flex items-center justify-between gap-3 bg-slateSurface text-muted border border-slateBorder px-3 py-1.5 rounded-md text-xs hover:border-pistachio/40 transition-colors w-48 cursor-pointer font-sans\"\n >\n <span class=\"flex items-center gap-1.5\">\n <svg class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"/></svg>\n <span>{{ placeholder() }}</span>\n </span>\n <kbd class=\"bg-charcoal border border-slateBorder text-xs px-1.5 py-0.5 rounded text-white font-mono\">{{ shortcut() }}</kbd>\n </button>\n `,\n})\nexport class CommandKTriggerComponent {\n placeholder = input<string>('Buscar o ejecutar...');\n shortcut = input<string>('Ctrl K');\n onOpen = output<void>();\n}\n","import { Component, ChangeDetectionStrategy, input, model, output, signal, HostListener, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface DropdownOption<T = any> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'st-dropdown-select',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"w-full space-y-1.5 font-sans text-left relative\">\n @if (label()) {\n <label class=\"block text-xs font-medium text-white/80\">\n {{ label() }}\n @if (required()) {\n <span class=\"text-pistachio ml-0.5\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <!-- Trigger Con Animación Suave y Chevron -->\n <button\n type=\"button\"\n (click)=\"toggle()\"\n [disabled]=\"disabled()\"\n class=\"w-full flex items-center justify-between gap-3 bg-charcoal border border-slateBorder hover:border-slateBorder-focus px-4 py-2.5 rounded-xl text-sm text-white focus:outline-none focus:border-pistachio disabled:opacity-60 disabled:cursor-not-allowed transition-all cursor-pointer shadow-inner group\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n >\n <div class=\"flex items-center gap-2 truncate\">\n <span class=\"w-2 h-2 rounded-full bg-pistachio shrink-0\"></span>\n <span class=\"truncate\">{{ selectedLabel() || placeholder() || 'Seleccionar opción' }}</span>\n </div>\n <svg\n class=\"w-4 h-4 text-muted transition-transform duration-200 ease-out group-hover:text-white shrink-0\"\n [class.rotate-180]=\"isOpen()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Panel Desplegable con Animación Suave -->\n <div\n class=\"absolute left-0 mt-2 w-full bg-slateSurface-card border border-slateBorder rounded-xl shadow-2xl py-1.5 z-50 overflow-hidden transition-all duration-200 ease-out origin-top\"\n [class.opacity-100]=\"isOpen()\"\n [class.scale-100]=\"isOpen()\"\n [class.pointer-events-auto]=\"isOpen()\"\n [class.opacity-0]=\"!isOpen()\"\n [class.scale-95]=\"!isOpen()\"\n [class.pointer-events-none]=\"!isOpen()\"\n role=\"listbox\"\n >\n @for (opt of options(); track opt.value) {\n <button\n type=\"button\"\n (click)=\"select(opt)\"\n [disabled]=\"opt.disabled\"\n class=\"w-full text-left px-3.5 py-2.5 hover:bg-slateBorder text-white flex items-center justify-between text-xs transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed\"\n >\n <span [class.text-white]=\"opt.value === value()\" [class.text-muted]=\"opt.value !== value()\">\n {{ opt.label }}\n </span>\n @if (opt.value === value()) {\n <span class=\"text-pistachio font-bold\">✓</span>\n }\n </button>\n }\n </div>\n </div>\n\n @if (errorText()) {\n <p class=\"text-xs text-red-400 mt-1\">{{ errorText() }}</p>\n }\n </div>\n `,\n})\nexport class DropdownSelectComponent {\n id = input<string>(`st-select-${Math.random().toString(36).substring(2, 9)}`);\n label = input<string>('');\n placeholder = input<string>('');\n required = input<boolean>(false);\n disabled = input<boolean>(false);\n errorText = input<string | null>(null);\n options = input<DropdownOption[]>([]);\n value = model<any>('');\n valueChanged = output<any>();\n\n readonly isOpen = signal<boolean>(false);\n\n constructor(private hostEl: ElementRef) {}\n\n toggle(): void {\n if (!this.disabled()) {\n this.isOpen.update((v) => !v);\n }\n }\n\n select(opt: DropdownOption): void {\n if (!opt.disabled) {\n this.value.set(opt.value);\n this.valueChanged.emit(opt.value);\n this.isOpen.set(false);\n }\n }\n\n selectedLabel(): string {\n const current = this.options().find((o) => o.value === this.value());\n return current ? current.label : '';\n }\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: MouseEvent): void {\n if (!this.hostEl.nativeElement.contains(event.target)) {\n this.isOpen.set(false);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, ElementRef, viewChild, afterNextRender, input } from '@angular/core';\r\nimport gsap from 'gsap';\r\n\r\n@Component({\r\n selector: 'st-footer-bounce',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div class=\"relative w-full overflow-hidden bg-charcoal border border-slateBorder rounded-xl p-4 flex flex-col items-center justify-center gap-3\">\r\n <svg class=\"w-full h-16\" viewBox=\"0 0 1440 320\" preserveAspectRatio=\"none\">\r\n <path\r\n #curve\r\n [attr.fill]=\"color()\"\r\n d=\"M 0,160 Q 720,160 1440,160 L 1440,320 L 0,320 Z\"\r\n ></path>\r\n </svg>\r\n <button\r\n type=\"button\"\r\n (click)=\"triggerBounce()\"\r\n class=\"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-slateSurface hover:bg-slateBorder text-white border border-slateBorder text-xs font-mono transition-colors cursor-pointer\"\r\n >\r\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"/></svg>\r\n <span>Recargar animación</span>\r\n </button>\r\n </div>\r\n `,\r\n})\r\nexport class FooterBounceComponent {\r\n color = input<string>('#E0F9B5');\r\n curveRef = viewChild<ElementRef<SVGPathElement>>('curve');\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.triggerBounce();\r\n });\r\n }\r\n\r\n triggerBounce(): void {\r\n const el = this.curveRef()?.nativeElement;\r\n if (!el) return;\r\n\r\n gsap.fromTo(\r\n el,\r\n { attr: { d: 'M 0,160 Q 720,310 1440,160 L 1440,320 L 0,320 Z' } },\r\n {\r\n duration: 2.2,\r\n attr: { d: 'M 0,160 Q 720,160 1440,160 L 1440,320 L 0,320 Z' },\r\n ease: 'elastic.out(1.8, 0.22)',\r\n overwrite: 'auto',\r\n }\r\n );\r\n }\r\n}\r\n","import { Component, ChangeDetectionStrategy, ElementRef, viewChild, afterNextRender, input, output } from '@angular/core';\r\nimport gsap from 'gsap';\r\n\r\n@Component({\r\n selector: 'st-magnetic-button',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <button\r\n #btn\r\n [type]=\"type()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onClick.emit($event)\"\r\n class=\"px-4 py-2.5 rounded-lg bg-slateSurface text-white border border-slateBorder text-sm font-medium hover:border-pistachio transition-colors relative cursor-pointer font-sans inline-flex items-center justify-center gap-2 select-none shadow-sm active:scale-95\"\r\n >\r\n <ng-content></ng-content>\r\n </button>\r\n `,\r\n})\r\nexport class MagneticButtonComponent {\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n disabled = input<boolean>(false);\r\n strength = input<number>(0.35);\r\n onClick = output<MouseEvent>();\r\n\r\n btnRef = viewChild<ElementRef<HTMLButtonElement>>('btn');\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n const el = this.btnRef()?.nativeElement;\r\n if (!el) return;\r\n\r\n const xTo = gsap.quickTo(el, 'x', { duration: 0.3, ease: 'power2.out' });\r\n const yTo = gsap.quickTo(el, 'y', { duration: 0.3, ease: 'power2.out' });\r\n\r\n el.addEventListener('mousemove', (e: MouseEvent) => {\r\n const { left, top, width, height } = el.getBoundingClientRect();\r\n const x = (e.clientX - (left + width / 2)) * this.strength();\r\n const y = (e.clientY - (top + height / 2)) * this.strength();\r\n xTo(x);\r\n yTo(y);\r\n });\r\n\r\n el.addEventListener('mouseleave', () => {\r\n xTo(0);\r\n yTo(0);\r\n });\r\n });\r\n }\r\n}\r\n","import { Component, ChangeDetectionStrategy, ElementRef, viewChild, afterNextRender, output } from '@angular/core';\r\nimport gsap from 'gsap';\r\nimport { MorphSVGPlugin } from 'gsap/MorphSVGPlugin';\r\n\r\n@Component({\r\n selector: 'st-preloader',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div #container class=\"p-6 bg-charcoal border border-slateBorder rounded-xl flex flex-col items-center justify-center gap-4 w-full\">\r\n <svg\r\n viewBox=\"0 0 350 100\"\r\n class=\"w-full max-w-[360px] overflow-visible select-none\"\r\n >\r\n <defs>\r\n <path id=\"st-target-bracket-left\" d=\"M 40 29 L 18 50 L 40 71 L 44.5 66.5 L 27 50 L 44.5 33.5 Z\" />\r\n <path id=\"st-target-slash\" d=\"M 50.5 70 L 64.5 30 L 68.5 31.5 L 54.5 71.5 Z\" />\r\n <path id=\"st-target-bracket-right\" d=\"M 74 29 L 96 50 L 74 71 L 69.5 66.5 L 87 50 L 69.5 33.5 Z\" />\r\n <path id=\"st-target-char-s\" d=\"M135.12 68.59L135.12 68.59Q130.42 68.59 127.02 67.08Q123.62 65.57 120.86 62.38L120.86 62.38L126.37 56.93Q128.21 59.09 130.42 60.22Q132.64 61.36 135.66 61.36L135.66 61.36Q138.36 61.36 139.84 60.39Q141.33 59.41 141.33 57.69L141.33 57.69Q141.33 55.90 140.03 54.82Q138.74 53.74 136.71 53.02Q134.69 52.29 132.39 51.45Q130.10 50.61 128.05 49.34Q125.99 48.07 124.72 45.97Q123.46 43.86 123.46 40.51L123.46 40.51Q123.46 37.00 125.16 34.49Q126.86 31.98 129.88 30.63Q132.91 29.28 136.85 29.28L136.85 29.28Q140.84 29.28 144.16 30.71Q147.49 32.14 149.65 34.52L149.65 34.52L144.14 39.97Q142.41 38.19 140.66 37.33Q138.90 36.46 136.69 36.46L136.69 36.46Q134.42 36.46 133.15 37.30Q131.88 38.14 131.88 39.70L131.88 39.70Q131.88 41.38 133.15 42.35Q134.42 43.32 136.47 44.05Q138.52 44.78 140.82 45.62Q143.11 46.45 145.14 47.78Q147.16 49.10 148.46 51.29Q149.75 53.47 149.75 56.93L149.75 56.93Q149.75 62.44 145.87 65.52Q141.98 68.59 135.12 68.59Z\" />\r\n <path id=\"st-target-char-y\" d=\"M164.23 79.07L155.75 79.07L161.69 66.22L151.70 41.76L160.61 41.76L165.85 57.74L171.19 41.76L180.10 41.76L168.87 68.11L164.23 79.07Z\" />\r\n <path id=\"st-target-char-n\" d=\"M191.50 68L183.23 68L183.23 41.76L191.50 41.76L191.50 43.86Q194.41 41.22 198.84 41.22L198.84 41.22Q201.70 41.22 203.97 42.59Q206.24 43.97 207.53 46.24Q208.83 48.51 208.83 51.21L208.83 51.21L208.83 68L200.57 68L200.57 53.04Q200.57 50.99 199.30 49.72Q198.03 48.45 196.09 48.45L196.09 48.45Q194.09 48.45 192.79 49.72Q191.50 50.99 191.50 53.04L191.50 53.04L191.50 68Z\" />\r\n <path id=\"st-target-char-t\" d=\"M226.11 68L217.85 68L217.85 48.78L211.91 48.78L211.91 41.76L217.85 41.76L217.85 30.90L226.11 30.90L226.11 41.76L232.05 41.76L232.05 48.78L226.11 48.78L226.11 68Z\" />\r\n <path id=\"st-target-char-h\" d=\"M243.93 68L235.67 68L235.67 28.80L243.93 28.80L243.93 43.70Q246.74 41.22 251.00 41.22L251.00 41.22Q254.03 41.22 256.35 42.48Q258.67 43.75 259.97 46.02Q261.26 48.29 261.26 51.21L261.26 51.21L261.26 68L253.00 68L253.00 53.04Q253.00 50.99 251.73 49.72Q250.46 48.45 248.52 48.45L248.52 48.45Q246.52 48.45 245.23 49.72Q243.93 50.99 243.93 53.04L243.93 53.04L243.93 68Z\" />\r\n <path id=\"st-target-char-e\" d=\"M279.52 68.59L279.52 68.59Q275.25 68.59 271.93 66.84Q268.61 65.08 266.72 61.98Q264.83 58.87 264.83 54.88L264.83 54.88Q264.83 50.94 266.69 47.86Q268.55 44.78 271.74 42.97Q274.93 41.16 278.92 41.16L278.92 41.16Q282.76 41.16 285.75 42.86Q288.75 44.56 290.45 47.51Q292.15 50.45 292.15 54.28L292.15 54.28Q292.15 55.74 291.77 57.58L291.77 57.58L272.98 57.63Q273.63 59.85 275.30 61.03Q276.98 62.22 279.46 62.22L279.46 62.22Q283.40 62.22 285.73 59.52L285.73 59.52L290.26 64.06Q288.32 66.33 285.56 67.46Q282.81 68.59 279.52 68.59ZM278.98 47.48L278.98 47.48Q276.71 47.48 275.14 48.67Q273.58 49.86 272.98 51.96L272.98 51.96L284.43 51.91Q283.40 47.48 278.98 47.48Z\" />\r\n <path id=\"st-target-char-x\" d=\"M302.52 68L293.50 68L302.90 54.61L293.99 41.76L303.65 41.76L308.03 48.88L312.46 41.76L321.42 41.76L312.67 54.45L321.96 68L312.40 68L307.54 60.17L302.52 68Z\" />\r\n </defs>\r\n\r\n <g class=\"st-morph-group\">\r\n <path class=\"st-shape-0\" d=\"M 18 50 L 44 32 L 44 68 Z\" fill=\"#E0F9B5\" />\r\n <path class=\"st-shape-1\" d=\"M 54 30 L 63 30 L 63 70 L 54 70 Z\" fill=\"#E0F9B5\" />\r\n <path class=\"st-shape-2\" d=\"M 96 50 L 70 68 L 70 32 Z\" fill=\"#E0F9B5\" />\r\n <path class=\"st-shape-3\" d=\"M 135 34 A 16 16 0 1 0 135 66 A 16 16 0 1 0 135 34 Z\" fill=\"#FFFFFF\" />\r\n <path class=\"st-shape-4\" d=\"M 152 40 L 180 40 L 166 75 Z\" fill=\"#FFFFFF\" />\r\n <path class=\"st-shape-5\" d=\"M 183 41 L 209 41 L 209 67 L 183 67 Z\" fill=\"#FFFFFF\" />\r\n <path class=\"st-shape-6\" d=\"M 215 31 L 229 31 L 229 68 L 215 68 Z\" fill=\"#FFFFFF\" />\r\n <path class=\"st-shape-7\" d=\"M 235 29 L 261 29 L 261 68 L 235 68 Z\" fill=\"#FFFFFF\" />\r\n <path class=\"st-shape-8\" d=\"M 278 41 A 14 14 0 1 0 278 69 A 14 14 0 1 0 278 41 Z\" fill=\"#FFFFFF\" />\r\n <path class=\"st-shape-9\" d=\"M 308 41 L 322 55 L 308 69 L 294 55 Z\" fill=\"#FFFFFF\" />\r\n </g>\r\n </svg>\r\n <button\r\n type=\"button\"\r\n (click)=\"restart()\"\r\n class=\"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-lg bg-slateSurface hover:bg-slateBorder text-white border border-slateBorder hover:border-pistachio/50 text-xs font-mono transition-all cursor-pointer shadow-sm active:scale-95\"\r\n >\r\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"></path>\r\n </svg>\r\n <span>Recargar animación</span>\r\n </button>\r\n </div>\r\n `,\r\n})\r\nexport class PreloaderComponent {\r\n containerRef = viewChild<ElementRef<HTMLDivElement>>('container');\r\n onFinish = output<void>();\r\n\r\n private initialPaths = [\r\n 'M 18 50 L 44 32 L 44 68 Z',\r\n 'M 54 30 L 63 30 L 63 70 L 54 70 Z',\r\n 'M 96 50 L 70 68 L 70 32 Z',\r\n 'M 135 34 A 16 16 0 1 0 135 66 A 16 16 0 1 0 135 34 Z',\r\n 'M 152 40 L 180 40 L 166 75 Z',\r\n 'M 183 41 L 209 41 L 209 67 L 183 67 Z',\r\n 'M 215 31 L 229 31 L 229 68 L 215 68 Z',\r\n 'M 235 29 L 261 29 L 261 68 L 235 68 Z',\r\n 'M 278 41 A 14 14 0 1 0 278 69 A 14 14 0 1 0 278 41 Z',\r\n 'M 308 41 L 322 55 L 308 69 L 294 55 Z',\r\n ];\r\n\r\n private targets = [\r\n '#st-target-bracket-left',\r\n '#st-target-slash',\r\n '#st-target-bracket-right',\r\n '#st-target-char-s',\r\n '#st-target-char-y',\r\n '#st-target-char-n',\r\n '#st-target-char-t',\r\n '#st-target-char-h',\r\n '#st-target-char-e',\r\n '#st-target-char-x',\r\n ];\r\n\r\n constructor() {\r\n gsap.registerPlugin(MorphSVGPlugin);\r\n\r\n afterNextRender(() => {\r\n this.restart();\r\n });\r\n }\r\n\r\n restart(): void {\r\n const el = this.containerRef()?.nativeElement;\r\n if (!el) return;\r\n\r\n // Resetear a las formas geométricas iniciales\r\n this.initialPaths.forEach((path, i) => {\r\n const shape = el.querySelector(`.st-shape-${i}`);\r\n if (shape) {\r\n shape.setAttribute('d', path);\r\n }\r\n });\r\n\r\n const group = el.querySelector('.st-morph-group');\r\n const tl = gsap.timeline({\r\n onComplete: () => this.onFinish.emit(),\r\n overwrite: 'auto',\r\n });\r\n\r\n tl.fromTo(group, { opacity: 0 }, { opacity: 1, duration: 0.3, ease: 'power2.out' });\r\n\r\n this.targets.forEach((targetSelector, i) => {\r\n tl.to(\r\n el.querySelector(`.st-shape-${i}`),\r\n {\r\n morphSVG: targetSelector,\r\n duration: 0.85,\r\n ease: 'power2.inOut',\r\n },\r\n 0.15 + i * 0.035\r\n );\r\n });\r\n }\r\n}\r\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'st-help-tooltip',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-flex items-center group/tooltip font-sans select-none\">\n <button\n type=\"button\"\n class=\"w-5 h-5 rounded-full bg-slateSurface border border-slateBorder text-muted hover:text-pistachio hover:border-pistachio/50 flex items-center justify-center text-xs font-mono transition-colors cursor-help focus:outline-none focus:border-pistachio\"\n [attr.aria-label]=\"ariaLabel() || text()\"\n >\n ?\n </button>\n\n <div\n class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-2 rounded-xl bg-charcoal border border-slateBorder shadow-2xl text-xs text-white/90 whitespace-normal w-56 text-center opacity-0 scale-95 pointer-events-none group-hover/tooltip:opacity-100 group-hover/tooltip:scale-100 group-focus-within/tooltip:opacity-100 group-focus-within/tooltip:scale-100 transition-all duration-200 ease-out z-50 origin-bottom\"\n role=\"tooltip\"\n >\n @if (title()) {\n <div class=\"flex items-center justify-center gap-1.5 mb-1 text-pistachio font-semibold font-mono text-xs\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio\"></span>\n <span>{{ title() }}</span>\n </div>\n }\n <p class=\"text-xs text-muted leading-relaxed\">\n {{ text() }}\n </p>\n <div class=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1 w-2 h-2 bg-charcoal border-r border-b border-slateBorder rotate-45\"></div>\n </div>\n </div>\n `,\n})\nexport class HelpTooltipComponent {\n text = input.required<string>();\n title = input<string>('Información');\n ariaLabel = input<string>('');\n}\n","import { Component, ChangeDetectionStrategy, model, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-input-text',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <input\r\n type=\"text\"\r\n [placeholder]=\"placeholder()\"\r\n [disabled]=\"disabled()\"\r\n [value]=\"value()\"\r\n (input)=\"value.set($any($event.target).value)\"\r\n class=\"bg-charcoal border border-slateBorder focus:border-pistachio focus:outline-none focus:ring-1 focus:ring-pistachio text-white px-3 py-1.5 rounded-md text-xs font-mono transition-all w-48 placeholder-muted disabled:opacity-50\"\r\n />\r\n `,\r\n})\r\nexport class InputTextComponent {\r\n placeholder = input<string>('');\r\n disabled = input<boolean>(false);\r\n value = model<string>('');\r\n}\r\n","import { Component, ChangeDetectionStrategy, input, output, signal } from '@angular/core';\n\n@Component({\n selector: 'st-language-selector-dropdown',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-block text-left shrink-0 font-sans\">\n <button\n type=\"button\"\n (click)=\"isOpen.set(!isOpen())\"\n class=\"flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-code font-medium text-white/80 hover:text-white bg-slateSurface hover:bg-slateBorder/80 border border-slateBorder hover:border-pistachio/50 transition-all cursor-pointer shadow-sm group select-none\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"'Idioma: ' + currentLang().toUpperCase()\"\n >\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio shrink-0\"></span>\n <span class=\"tracking-wider uppercase text-pistachio font-bold\">\n {{ currentLang() }}\n </span>\n <svg\n class=\"w-3.5 h-3.5 text-white/50 transition-transform duration-200 ease-out group-hover:text-white shrink-0\"\n [class.rotate-180]=\"isOpen()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n @if (isOpen()) {\n <div\n class=\"absolute right-0 mt-2 w-44 bg-charcoal border border-slateBorder rounded-xl shadow-2xl py-1.5 z-50 overflow-hidden origin-top\"\n role=\"listbox\"\n >\n <div class=\"px-3 py-1 text-xs font-mono text-muted uppercase tracking-wider border-b border-slateBorder/50\">\n Idioma / Language\n </div>\n\n <button\n type=\"button\"\n (click)=\"selectLang('es')\"\n class=\"w-full text-left px-3 py-2 hover:bg-slateBorder flex items-center justify-between text-xs font-code transition-colors cursor-pointer\"\n [class.text-white]=\"currentLang() === 'es'\"\n [class.text-muted]=\"currentLang() !== 'es'\"\n >\n <div class=\"flex items-center gap-2\">\n <span class=\"text-white/60 font-mono text-xs\">ES</span>\n <span [class.font-medium]=\"currentLang() === 'es'\">Español</span>\n </div>\n @if (currentLang() === 'es') {\n <span class=\"text-pistachio font-bold\">✓</span>\n }\n </button>\n\n <button\n type=\"button\"\n (click)=\"selectLang('en')\"\n class=\"w-full text-left px-3 py-2 hover:bg-slateBorder flex items-center justify-between text-xs font-code transition-colors cursor-pointer\"\n [class.text-white]=\"currentLang() === 'en'\"\n [class.text-muted]=\"currentLang() !== 'en'\"\n >\n <div class=\"flex items-center gap-2\">\n <span class=\"text-white/60 font-mono text-xs\">EN</span>\n <span [class.font-medium]=\"currentLang() === 'en'\">English</span>\n </div>\n @if (currentLang() === 'en') {\n <span class=\"text-pistachio font-bold\">✓</span>\n }\n </button>\n </div>\n }\n </div>\n `,\n})\nexport class LanguageSelectorDropdownComponent {\n currentLang = input<'es' | 'en'>('es');\n langChange = output<'es' | 'en'>();\n isOpen = signal<boolean>(false);\n\n selectLang(lang: 'es' | 'en'): void {\n this.isOpen.set(false);\n if (lang !== this.currentLang()) {\n this.langChange.emit(lang);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\n\n@Component({\n selector: 'st-language-selector-pill',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n (click)=\"toggleLang()\"\n class=\"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-code font-medium text-white/80 hover:text-white bg-slateSurface hover:bg-slateBorder/80 border border-slateBorder hover:border-pistachio/50 transition-all cursor-pointer shadow-sm group active:scale-95 select-none\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio shrink-0\"></span>\n <span\n [class.text-pistachio]=\"currentLang() === 'es'\"\n [class.font-bold]=\"currentLang() === 'es'\"\n [class.text-white]=\"currentLang() !== 'es'\"\n [class.opacity-40]=\"currentLang() !== 'es'\"\n >\n ES\n </span>\n <span class=\"text-white/30 font-light\">/</span>\n <span\n [class.text-pistachio]=\"currentLang() === 'en'\"\n [class.font-bold]=\"currentLang() === 'en'\"\n [class.text-white]=\"currentLang() !== 'en'\"\n [class.opacity-40]=\"currentLang() !== 'en'\"\n class=\"group-hover:opacity-100 transition-opacity\"\n >\n EN\n </span>\n </button>\n `,\n})\nexport class LanguageSelectorPillComponent {\n currentLang = input<'es' | 'en'>('es');\n langChange = output<'es' | 'en'>();\n\n get nextLang(): 'es' | 'en' {\n return this.currentLang() === 'es' ? 'en' : 'es';\n }\n\n ariaLabel(): string {\n return `Idioma: ${this.currentLang().toUpperCase()} - Cambiar a ${this.nextLang.toUpperCase()}`;\n }\n\n toggleLang(): void {\n this.langChange.emit(this.nextLang);\n }\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-magic-link-card',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div class=\"p-6 rounded-2xl bg-slateSurface-card border border-slateBorder max-w-sm w-full text-center flex flex-col items-center gap-3 font-sans\">\r\n <div class=\"w-10 h-10 rounded-xl bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio\">\r\n <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/>\r\n </svg>\r\n </div>\r\n\r\n <h3 class=\"text-sm font-semibold text-white\">Revisa tu bandeja de entrada</h3>\r\n <p class=\"text-xs text-muted leading-relaxed\">\r\n Hemos enviado un enlace de acceso seguro a <span class=\"text-white font-mono\">{{ email() }}</span>.\r\n </p>\r\n\r\n <button\r\n type=\"button\"\r\n (click)=\"onResend.emit()\"\r\n class=\"mt-2 text-xs text-pistachio hover:underline cursor-pointer\"\r\n >\r\n Reenviar enlace de acceso\r\n </button>\r\n </div>\r\n `,\r\n})\r\nexport class MagicLinkCardComponent {\r\n email = input.required<string>();\r\n onResend = output<void>();\r\n}\r\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-icon-box',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div\r\n [style.width.px]=\"size()\"\r\n [style.height.px]=\"size()\"\r\n class=\"rounded-xl bg-pistachio flex items-center justify-center shadow-sm\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\" [style.width.px]=\"size() * 0.6\" [style.height.px]=\"size() * 0.6\">\r\n <g stroke=\"#111111\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" transform=\"translate(41, 56)\">\r\n <polyline points=\"40,24 14,46 40,68\" />\r\n <line x1=\"53\" y1=\"72\" x2=\"69\" y2=\"20\" />\r\n <polyline points=\"82,24 108,46 82,68\" />\r\n </g>\r\n </svg>\r\n </div>\r\n `,\r\n})\r\nexport class ManifestoIconBoxComponent {\r\n size = input<number>(40);\r\n}\r\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-metric-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"p-4 rounded-xl bg-slateSurface border border-slateBorder flex flex-col gap-1 w-56 font-sans\">\n <span class=\"text-xs text-muted uppercase font-mono tracking-wider\">{{ label() }}</span>\n <span class=\"text-2xl font-bold text-white font-mono\">{{ value() }}</span>\n @if (trend()) {\n <span class=\"text-xs text-pistachio font-mono\">↑ {{ trend() }}</span>\n }\n </div>\n `,\n})\nexport class MetricCardComponent {\n label = input.required<string>();\n value = input.required<string>();\n trend = input<string>();\n}\n","import { Component, ChangeDetectionStrategy, input, model, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'st-modal-dialog',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (visible()) {\n <div\n class=\"fixed inset-0 w-screen h-screen min-h-screen z-50 flex items-center justify-center p-4 bg-black/80 backdrop-blur-md animate-in fade-in duration-150\"\n (click)=\"onBackdropClick($event)\"\n >\n <div\n [class]=\"sizeClass()\"\n class=\"w-full bg-slateCard border border-slateBorder rounded-2xl shadow-2xl overflow-hidden flex flex-col max-h-[90vh] animate-in zoom-in-95 duration-150\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- Cabecera -->\n <div class=\"px-6 py-4 sm:px-7 sm:py-5 border-b border-slateBorder-subtle flex items-center justify-between gap-4\">\n <div class=\"min-w-0\">\n <h2 class=\"text-lg sm:text-xl font-bold text-white font-display tracking-tight truncate\">\n {{ title() }}\n </h2>\n @if (subtitle()) {\n <p class=\"text-xs text-muted mt-0.5 truncate\">{{ subtitle() }}</p>\n }\n </div>\n\n @if (showCloseButton()) {\n <button\n type=\"button\"\n (click)=\"cerrar()\"\n class=\"w-8 h-8 rounded-lg text-muted hover:text-white hover:bg-slateBorder-subtle transition-colors flex items-center justify-center cursor-pointer flex-shrink-0\"\n title=\"Cerrar modal\"\n aria-label=\"Cerrar modal\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path d=\"M18 6L6 18M6 6l12 12\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n }\n </div>\n\n <!-- Cuerpo -->\n <div class=\"p-6 sm:p-7 overflow-y-auto flex-1 space-y-4\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer opcional -->\n <ng-content select=\"[slot=footer]\"></ng-content>\n </div>\n </div>\n }\n `,\n})\nexport class ModalDialogComponent {\n visible = model<boolean>(false);\n title = input<string>('');\n subtitle = input<string>('');\n size = input<'sm' | 'md' | 'lg' | 'xl' | '2xl'>('md');\n showCloseButton = input<boolean>(true);\n closeOnBackdrop = input<boolean>(true);\n\n closed = output<void>();\n\n sizeClass(): string {\n switch (this.size()) {\n case 'sm':\n return 'max-w-md';\n case 'md':\n return 'max-w-lg';\n case 'lg':\n return 'max-w-2xl';\n case 'xl':\n return 'max-w-3xl';\n case '2xl':\n return 'max-w-4xl';\n default:\n return 'max-w-lg';\n }\n }\n\n cerrar(): void {\n this.visible.set(false);\n this.closed.emit();\n }\n\n onBackdropClick(_event: MouseEvent): void {\n if (this.closeOnBackdrop()) {\n this.cerrar();\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-process-step-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <article class=\"p-8 rounded-3xl bg-slateSurface/80 border border-slateBorder hover:border-pistachio/40 transition-all duration-300 flex flex-col justify-between group shadow-sm font-sans h-full\">\n <div>\n <div class=\"flex items-center justify-between mb-6\">\n <span class=\"text-2xl sm:text-3xl font-mono font-bold text-pistachio tracking-tight\">\n {{ stepNumber() }}\n </span>\n <div class=\"w-8 h-8 rounded-lg bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio\">\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" />\n </svg>\n </div>\n </div>\n\n <h3 class=\"text-xl font-display font-bold text-white mb-3 group-hover:text-pistachio transition-colors\">\n {{ title() }}\n </h3>\n\n <p class=\"text-sm text-muted font-sans leading-relaxed\">\n {{ description() }}\n </p>\n </div>\n\n @if (badge()) {\n <div class=\"mt-8 pt-4 border-t border-slateBorder/50 text-sm font-mono text-muted\">\n {{ badge() }}\n </div>\n }\n </article>\n `,\n})\nexport class ProcessStepCardComponent {\n stepNumber = input<string>('01');\n title = input<string>('');\n description = input<string>('');\n badge = input<string>('');\n}\n","import { Component, ChangeDetectionStrategy, input, output, signal } from '@angular/core';\n\nexport type ActivePerspective = 'ADMIN' | 'USER_LABORAL' | 'USER_AUTONOMO';\n\n@Component({\n selector: 'st-role-view-switcher',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-block text-left select-none\">\n <button\n type=\"button\"\n (click)=\"isOpen.set(!isOpen())\"\n class=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-xl bg-charcoal-surface hover:bg-slateSurface border border-slateBorder text-xs text-white transition-all shadow-xs cursor-pointer\"\n >\n @switch (activePerspective()) {\n @case ('ADMIN') {\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" /></svg>\n <span class=\"font-medium text-white\">Admin</span>\n }\n @case ('USER_LABORAL') {\n <svg class=\"w-3.5 h-3.5 text-white\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" /></svg>\n <span class=\"font-medium text-white\">Colaborador</span>\n }\n @case ('USER_AUTONOMO') {\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" /></svg>\n <span class=\"font-medium text-white\">Autónomo</span>\n }\n }\n <svg class=\"w-3.5 h-3.5 text-muted transition-transform duration-200\" [class.rotate-180]=\"isOpen()\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n @if (isOpen()) {\n <div class=\"absolute right-0 mt-2 w-48 rounded-xl bg-charcoal-surface border border-slateBorder shadow-2xl p-1 z-50\">\n <button\n type=\"button\"\n (click)=\"select('ADMIN')\"\n class=\"w-full flex items-center justify-between px-3 py-2 rounded-lg text-xs hover:bg-slateSurface transition-colors cursor-pointer\"\n >\n <div class=\"flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" /></svg>\n <span [class.text-white]=\"activePerspective() === 'ADMIN'\" [class.text-muted]=\"activePerspective() !== 'ADMIN'\" class=\"font-medium\">Admin</span>\n </div>\n @if (activePerspective() === 'ADMIN') {\n <span class=\"text-pistachio font-bold text-xs\">✓</span>\n }\n </button>\n <button\n type=\"button\"\n (click)=\"select('USER_LABORAL')\"\n class=\"w-full flex items-center justify-between px-3 py-2 rounded-lg text-xs hover:bg-slateSurface transition-colors cursor-pointer\"\n >\n <div class=\"flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5 text-white\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" /></svg>\n <span [class.text-white]=\"activePerspective() === 'USER_LABORAL'\" [class.text-muted]=\"activePerspective() !== 'USER_LABORAL'\" class=\"font-medium\">Colaborador</span>\n </div>\n @if (activePerspective() === 'USER_LABORAL') {\n <span class=\"text-pistachio font-bold text-xs\">✓</span>\n }\n </button>\n <button\n type=\"button\"\n (click)=\"select('USER_AUTONOMO')\"\n class=\"w-full flex items-center justify-between px-3 py-2 rounded-lg text-xs hover:bg-slateSurface transition-colors cursor-pointer\"\n >\n <div class=\"flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" /></svg>\n <span [class.text-white]=\"activePerspective() === 'USER_AUTONOMO'\" [class.text-muted]=\"activePerspective() !== 'USER_AUTONOMO'\" class=\"font-medium\">Autónomo</span>\n </div>\n @if (activePerspective() === 'USER_AUTONOMO') {\n <span class=\"text-pistachio font-bold text-xs\">✓</span>\n }\n </button>\n </div>\n }\n </div>\n `,\n})\nexport class RoleViewSwitcherComponent {\n activePerspective = input<ActivePerspective>('ADMIN');\n onPerspectiveChange = output<ActivePerspective>();\n readonly isOpen = signal<boolean>(false);\n\n select(p: ActivePerspective): void {\n this.onPerspectiveChange.emit(p);\n this.isOpen.set(false);\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-solution-bento-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <article class=\"p-8 sm:p-10 rounded-3xl bg-slateSurface/80 border border-slateBorder hover:border-pistachio/40 transition-all duration-300 flex flex-col justify-between group shadow-sm font-sans h-full\">\n <div>\n <div class=\"flex items-center justify-between mb-6\">\n <div class=\"w-12 h-12 rounded-xl bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio group-hover:scale-105 transition-transform\">\n <svg class=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n </svg>\n </div>\n @if (badge()) {\n <span class=\"px-3 py-1 rounded-full bg-slateCard text-pistachio text-sm font-mono font-semibold border border-slateBorder\">\n {{ badge() }}\n </span>\n }\n </div>\n\n <h3 class=\"text-2xl sm:text-3xl font-display font-bold text-white mb-4 group-hover:text-pistachio transition-colors\">\n {{ title() }}\n </h3>\n\n <p class=\"text-sm sm:text-base text-muted font-sans leading-relaxed mb-8\">\n {{ description() }}\n </p>\n\n @if (bulletPoints().length > 0) {\n <ul class=\"space-y-3 mb-10 text-sm font-sans text-white/80\">\n @for (point of bulletPoints(); track point) {\n <li class=\"flex items-start gap-3\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio mt-2 shrink-0\"></span>\n <span>{{ point }}</span>\n </li>\n }\n </ul>\n }\n </div>\n\n <div>\n <a\n [href]=\"ctaHref()\"\n class=\"inline-flex items-center justify-between w-full px-5 py-3.5 rounded-xl bg-slateCard hover:bg-slateBorder/80 text-white hover:text-pistachio border border-slateBorder hover:border-pistachio/50 font-display font-semibold text-sm transition-all duration-200 group/btn\"\n >\n <span>{{ ctaText() }}</span>\n <svg class=\"w-4 h-4 text-pistachio transform group-hover/btn:translate-x-1 transition-transform\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14 5l7 7m0 0l-7 7m7-7H3\" />\n </svg>\n </a>\n </div>\n </article>\n `,\n})\nexport class SolutionBentoCardComponent {\n title = input<string>('');\n description = input<string>('');\n badge = input<string>('');\n bulletPoints = input<string[]>([]);\n ctaText = input<string>('Ver tarifas');\n ctaHref = input<string>('/servicios/');\n}\n","import { Component, ChangeDetectionStrategy, input, output, computed } from '@angular/core';\n\n@Component({\n selector: 'st-ledger-row',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"flex items-center justify-between py-2 px-3 bg-charcoal hover:bg-charcoal-surface border-b border-slateBorder text-xs font-mono transition-colors\">\n <div class=\"flex items-center gap-3\">\n <span class=\"text-muted w-12\">#{{ index() }}</span>\n <button\n type=\"button\"\n (click)=\"onCopyHash.emit(hash())\"\n class=\"text-pistachio hover:underline cursor-pointer\"\n title=\"Copiar hash completo\"\n >\n {{ truncatedHash() }}\n </button>\n </div>\n\n <div class=\"flex items-center gap-4\">\n <span class=\"text-muted text-xs\">{{ timestamp() }}</span>\n @if (verified()) {\n <span class=\"inline-flex items-center gap-1 text-xs text-pistachio\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio\"></span>\n Sellado\n </span>\n } @else {\n <span class=\"inline-flex items-center gap-1 text-xs text-amber-500\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-amber-500\"></span>\n Pendiente\n </span>\n }\n </div>\n </div>\n `,\n})\nexport class TableLedgerRowComponent {\n index = input.required<number>();\n hash = input.required<string>();\n timestamp = input.required<string>();\n verified = input<boolean>(true);\n onCopyHash = output<string>();\n\n truncatedHash = computed(() => {\n const h = this.hash();\n if (h.length <= 16) return h;\n return `${h.slice(0, 8)}...${h.slice(-8)}`;\n });\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-timer-widget',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div class=\"inline-flex items-center gap-3 bg-charcoal border border-slateBorder px-3.5 py-2 rounded-lg font-mono text-sm\">\r\n <span\r\n class=\"w-2.5 h-2.5 rounded-full\"\r\n [class.bg-pistachio]=\"active()\"\r\n [class.bg-muted]=\"!active()\"\r\n ></span>\r\n <span class=\"text-white font-bold tracking-wider\">{{ time() }}</span>\r\n <button\r\n type=\"button\"\r\n (click)=\"onToggle.emit()\"\r\n class=\"text-xs font-medium text-pistachio hover:text-pistachio-hover hover:underline cursor-pointer\"\r\n >\r\n {{ active() ? 'Pausar' : 'Reanudar' }}\r\n </button>\r\n </div>\r\n `,\r\n})\r\nexport class TimerWidgetComponent {\r\n time = input<string>('00:00:00');\r\n active = input<boolean>(false);\r\n onToggle = output<void>();\r\n}\r\n","import { Component, ChangeDetectionStrategy, model, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'st-toggle-switch',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <label class=\"inline-flex items-center gap-2 cursor-pointer font-sans\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"checked()\"\r\n (change)=\"checked.set($any($event.target).checked)\"\r\n class=\"sr-only peer\"\r\n >\r\n <div class=\"w-8 h-4 bg-slateBorder rounded-full peer peer-checked:after:translate-x-full after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-charcoal after:rounded-full after:h-3 after:w-3 after:transition-all peer-checked:bg-pistachio relative\"></div>\r\n @if (label()) {\r\n <span class=\"text-xs text-white font-medium\">{{ label() }}</span>\r\n }\r\n </label>\r\n `,\r\n})\r\nexport class ToggleSwitchComponent {\r\n label = input<string>('');\r\n checked = model<boolean>(false);\r\n}\r\n","import { Component, ChangeDetectionStrategy, ElementRef, viewChild, afterNextRender, input } from '@angular/core';\nimport gsap from 'gsap';\n\n@Component({\n selector: 'st-wavy-underline-heading',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"w-full flex flex-col items-center justify-center gap-3 p-4 bg-charcoal border border-slateBorder rounded-xl font-display text-center\">\n <h2 class=\"text-xl sm:text-2xl md:text-3xl font-bold text-white tracking-tight leading-snug\">\n @if (prefixText()) {\n <span>{{ prefixText() }} </span>\n }\n <span class=\"relative inline-block text-pistachio\">\n <span class=\"relative z-10\">{{ highlightText() }}</span>\n <svg\n class=\"absolute left-0 -bottom-2 w-full h-3 overflow-visible pointer-events-none\"\n viewBox=\"0 0 300 16\"\n preserveAspectRatio=\"none\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n #wavyPath\n d=\"M2 10 Q 35 2, 75 9 T 150 9 T 225 9 T 298 9\"\n [attr.stroke]=\"strokeColor()\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n ></path>\n </svg>\n </span>\n </h2>\n\n @if (showReload()) {\n <button\n type=\"button\"\n (click)=\"triggerAnimation()\"\n class=\"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-slateSurface hover:bg-slateBorder text-white border border-slateBorder text-xs font-mono transition-colors cursor-pointer mt-2\"\n >\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"/></svg>\n <span>Recargar animación</span>\n </button>\n }\n </div>\n `,\n})\nexport class WavyUnderlineHeadingComponent {\n prefixText = input<string>('Ingeniería con');\n highlightText = input<string>('total transparencia.');\n strokeColor = input<string>('#E0F9B5');\n showReload = input<boolean>(true);\n\n wavyPathRef = viewChild<ElementRef<SVGPathElement>>('wavyPath');\n\n constructor() {\n afterNextRender(() => {\n this.triggerAnimation();\n });\n }\n\n triggerAnimation(): void {\n const el = this.wavyPathRef()?.nativeElement;\n if (!el) return;\n\n const length = Math.ceil(el.getTotalLength()) + 20;\n gsap.fromTo(\n el,\n {\n strokeDasharray: length,\n strokeDashoffset: length,\n opacity: 1,\n },\n {\n strokeDashoffset: 0,\n duration: 0.8,\n ease: 'power2.inOut',\n overwrite: 'auto',\n }\n );\n }\n}\n","import { Component, ChangeDetectionStrategy, input, output, signal } from '@angular/core';\n\nexport interface WorkspaceItem {\n id: string;\n name: string;\n isMain?: boolean;\n}\n\n@Component({\n selector: 'st-workspace-switcher',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-block font-sans text-xs\">\n <button\n type=\"button\"\n (click)=\"isOpen.set(!isOpen())\"\n class=\"flex items-center gap-2 bg-charcoal border border-slateBorder hover:border-pistachio/40 px-3 py-1.5 rounded-lg text-white transition-colors cursor-pointer\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\" width=\"18\" height=\"18\">\n <rect x=\"10\" y=\"10\" width=\"180\" height=\"180\" rx=\"52\" fill=\"#E0F9B5\" />\n <g stroke=\"#111111\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" transform=\"translate(41, 56)\">\n <polyline points=\"40,24 14,46 40,68\" />\n <line x1=\"53\" y1=\"72\" x2=\"69\" y2=\"20\" />\n <polyline points=\"82,24 108,46 82,68\" />\n </g>\n </svg>\n <span class=\"font-medium text-white\">{{ currentWorkspace()?.name || 'Seleccionar Empresa' }}</span>\n <span class=\"text-muted text-xs font-mono\">▾</span>\n </button>\n\n @if (isOpen()) {\n <div class=\"absolute left-0 mt-1 w-52 bg-slateSurface-card border border-slateBorder rounded-lg shadow-xl z-50 py-1 overflow-hidden\">\n @for (item of workspaces(); track item.id) {\n <button\n type=\"button\"\n (click)=\"selectWorkspace(item)\"\n class=\"w-full text-left px-3 py-2 hover:bg-slateBorder text-white flex items-center justify-between text-xs transition-colors\"\n >\n <span>{{ item.name }}</span>\n @if (item.id === currentWorkspace()?.id) {\n <span class=\"text-pistachio\">✓</span>\n }\n </button>\n }\n </div>\n }\n </div>\n `,\n})\nexport class WorkspaceSwitcherComponent {\n workspaces = input<WorkspaceItem[]>([\n { id: 'synthex', name: 'Synthex Matriz', isMain: true },\n { id: 'filial-de', name: 'Synthex GmbH (Alemania)' },\n ]);\n currentWorkspace = input<WorkspaceItem>({ id: 'synthex', name: 'Synthex Matriz', isMain: true });\n onSelect = output<WorkspaceItem>();\n\n isOpen = signal<boolean>(false);\n\n selectWorkspace(item: WorkspaceItem) {\n this.onSelect.emit(item);\n this.isOpen.set(false);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/components/library/animated-dropdown/angular/animated-dropdown.component.ts","../../src/components/library/badge-status/angular/badge-status.component.ts","../../src/components/library/bento-grid-card/angular/bento-grid-card.component.ts","../../src/components/library/button-outline/angular/button-outline.component.ts","../../src/components/library/button-primary/angular/button-primary.component.ts","../../src/components/library/button-secondary/angular/button-secondary.component.ts","../../src/components/library/client-trust-card/angular/client-trust-card.component.ts","../../src/components/library/command-k-trigger/angular/command-k-trigger.component.ts","../../src/components/library/dropdown-select/angular/dropdown-select.component.ts","../../src/components/library/gsap-footer-bounce/angular/footer-bounce.component.ts","../../src/components/library/gsap-magnetic-button/angular/magnetic-button.component.ts","../../src/components/library/gsap-preloader/angular/preloader.component.ts","../../src/components/library/help-tooltip/angular/help-tooltip.component.ts","../../src/components/library/input-text/angular/input-text.component.ts","../../src/components/library/language-selector-dropdown/angular/language-selector-dropdown.component.ts","../../src/components/library/language-selector-pill/angular/language-selector-pill.component.ts","../../src/components/library/magic-link-card/angular/magic-link-card.component.ts","../../src/components/library/manifesto-icon-box/angular/manifesto-icon-box.component.ts","../../src/components/library/metric-card/angular/metric-card.component.ts","../../src/components/library/modal-dialog/angular/modal-dialog.component.ts","../../src/components/library/process-step-card/angular/process-step-card.component.ts","../../src/components/library/role-view-switcher/angular/role-view-switcher.component.ts","../../src/components/library/solution-bento-card/angular/solution-bento-card.component.ts","../../src/components/library/table-ledger-row/angular/table-ledger-row.component.ts","../../src/components/library/timer-widget/angular/timer-widget.component.ts","../../src/components/library/toggle-switch/angular/toggle-switch.component.ts","../../src/components/library/wavy-underline-heading/angular/wavy-underline-heading.component.ts","../../src/components/library/workspace-switcher/angular/workspace-switcher.component.ts"],"names":["AnimatedDropdownComponent","input","model","signal","HostListener","Component","CommonModule","ChangeDetectionStrategy","BadgeStatusComponent","BentoCardComponent","ButtonOutlineComponent","output","ButtonPrimaryComponent","ButtonSecondaryComponent","ClientTrustCardComponent","CommandKTriggerComponent","DropdownSelectComponent","FooterBounceComponent","viewChild","afterNextRender","gsap","MagneticButtonComponent","PreloaderComponent","MorphSVGPlugin","HelpTooltipComponent","InputTextComponent","LanguageSelectorDropdownComponent","LanguageSelectorPillComponent","MagicLinkCardComponent","ManifestoIconBoxComponent","MetricCardComponent","ModalDialogComponent","ProcessStepCardComponent","RoleViewSwitcherComponent","SolutionBentoCardComponent","TableLedgerRowComponent","computed","TimerWidgetComponent","ToggleSwitchComponent","WavyUnderlineHeadingComponent","WorkspaceSwitcherComponent"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Component, ChangeDetectionStrategy, input, model, signal, HostListener, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface DropdownItem<T = any> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'st-animated-dropdown',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-block w-full font-sans text-left\">\n <!-- Botón Trigger -->\n <button\n type=\"button\"\n (click)=\"toggle()\"\n [disabled]=\"disabled()\"\n class=\"w-full flex items-center justify-between gap-3 bg-charcoal border border-slateBorder hover:border-slateBorder-focus px-4 py-2.5 rounded-xl text-sm text-white focus:outline-none focus:border-pistachio disabled:opacity-60 disabled:cursor-not-allowed transition-all cursor-pointer shadow-inner group\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n >\n <div class=\"flex items-center gap-2 truncate\">\n <span class=\"w-2 h-2 rounded-full bg-pistachio shrink-0\"></span>\n <span class=\"truncate\">{{ selectedLabel() || placeholder() }}</span>\n </div>\n <svg\n class=\"w-4 h-4 text-muted transition-transform duration-200 ease-out group-hover:text-white shrink-0\"\n [class.rotate-180]=\"isOpen()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Panel Desplegable con Animación Suave -->\n <div\n class=\"absolute left-0 mt-2 w-full bg-slateSurface-card border border-slateBorder rounded-xl shadow-2xl py-1.5 z-40 overflow-hidden transition-all duration-200 ease-out origin-top\"\n [class.opacity-100]=\"isOpen()\"\n [class.scale-100]=\"isOpen()\"\n [class.pointer-events-auto]=\"isOpen()\"\n [class.opacity-0]=\"!isOpen()\"\n [class.scale-95]=\"!isOpen()\"\n [class.pointer-events-none]=\"!isOpen()\"\n role=\"listbox\"\n >\n @if (header()) {\n <div class=\"px-3.5 py-1.5 text-xs font-mono text-muted uppercase tracking-wider border-b border-slateBorder/50\">\n {{ header() }}\n </div>\n }\n @for (item of items(); track item.value) {\n <button\n type=\"button\"\n (click)=\"selectItem(item)\"\n [disabled]=\"item.disabled\"\n class=\"w-full text-left px-3.5 py-2.5 hover:bg-slateBorder text-white flex items-center justify-between text-xs transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed\"\n >\n <span [class.text-white]=\"item.value === value()\" [class.text-muted]=\"item.value !== value()\">\n {{ item.label }}\n </span>\n @if (item.value === value()) {\n <span class=\"text-pistachio font-bold\">✓</span>\n }\n </button>\n }\n </div>\n </div>\n `,\n})\nexport class AnimatedDropdownComponent {\n items = input<DropdownItem[]>([]);\n placeholder = input<string>('Seleccionar...');\n header = input<string>('Opciones Disponibles');\n disabled = input<boolean>(false);\n value = model<any>(null);\n\n isOpen = signal<boolean>(false);\n\n constructor(private hostEl: ElementRef) {}\n\n toggle() {\n if (!this.disabled()) {\n this.isOpen.update((v) => !v);\n }\n }\n\n selectItem(item: DropdownItem) {\n if (!item.disabled) {\n this.value.set(item.value);\n this.isOpen.set(false);\n }\n }\n\n selectedLabel(): string {\n const current = this.items().find((it) => it.value === this.value());\n return current ? current.label : '';\n }\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: MouseEvent) {\n if (!this.hostEl.nativeElement.contains(event.target)) {\n this.isOpen.set(false);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-badge-status',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-mono bg-slateSurface text-pistachio border border-slateBorder\">\n <span\n class=\"w-1.5 h-1.5 rounded-full\"\n [class.bg-pistachio]=\"status() === 'success'\"\n [class.bg-amber-500]=\"status() === 'warning'\"\n [class.bg-red-500]=\"status() === 'error'\"\n [class.bg-muted]=\"status() === 'neutral'\"\n ></span>\n {{ label() }}\n </span>\n `,\n})\nexport class BadgeStatusComponent {\n label = input.required<string>();\n status = input<'success' | 'warning' | 'error' | 'neutral'>('success');\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-bento-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"p-5 rounded-2xl bg-slateSurface-card border border-slateBorder hover:border-pistachio/40 transition-all flex flex-col gap-2 w-64 font-sans\">\n <div class=\"w-7 h-7 rounded-lg bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio\">\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n <h4 class=\"text-xs font-semibold text-white\">{{ title() }}</h4>\n <p class=\"text-xs text-muted leading-relaxed\">{{ description() }}</p>\n </div>\n `,\n})\nexport class BentoCardComponent {\n title = input.required<string>();\n description = input.required<string>();\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\n\n@Component({\n selector: 'st-button-outline',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n [type]=\"type()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick.emit($event)\"\n class=\"bg-transparent text-pistachio border border-pistachio/70 hover:bg-pistachio/10 hover:border-pistachio disabled:opacity-50 disabled:cursor-not-allowed px-4 py-2 rounded-md font-medium text-xs transition-colors shadow-sm inline-flex items-center justify-center gap-1.5 cursor-pointer font-sans\"\n >\n <ng-content></ng-content>\n </button>\n `,\n})\nexport class ButtonOutlineComponent {\n type = input<'button' | 'submit' | 'reset'>('button');\n disabled = input<boolean>(false);\n onClick = output<MouseEvent>();\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\n\n@Component({\n selector: 'st-button-primary',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n [type]=\"type()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick.emit($event)\"\n class=\"bg-pistachio text-charcoal hover:bg-pistachio-hover disabled:opacity-50 disabled:cursor-not-allowed px-4 py-2 rounded-md font-medium text-xs transition-colors shadow-sm active:scale-95 inline-flex items-center justify-center gap-1.5 cursor-pointer font-sans\"\n >\n <ng-content></ng-content>\n </button>\n `,\n})\nexport class ButtonPrimaryComponent {\n type = input<'button' | 'submit' | 'reset'>('button');\n disabled = input<boolean>(false);\n onClick = output<MouseEvent>();\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\n\n@Component({\n selector: 'st-button-secondary',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n [type]=\"type()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick.emit($event)\"\n class=\"bg-slateSurface text-white border border-slateBorder hover:bg-slateBorder hover:border-slateBorder-focus disabled:opacity-50 disabled:cursor-not-allowed px-4 py-2 rounded-md font-medium text-xs transition-colors shadow-sm inline-flex items-center justify-center gap-1.5 cursor-pointer font-sans\"\n >\n <ng-content></ng-content>\n </button>\n `,\n})\nexport class ButtonSecondaryComponent {\n type = input<'button' | 'submit' | 'reset'>('button');\n disabled = input<boolean>(false);\n onClick = output<MouseEvent>();\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-client-trust-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <a\n [href]=\"href()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"group inline-flex items-center gap-4 sm:gap-5 px-6 sm:px-8 py-3.5 sm:py-4 rounded-2xl bg-slateSurface/60 border border-slateBorder hover:border-pistachio/50 hover:bg-slateCard/80 hover:scale-105 active:scale-95 transition-all duration-300 shadow-sm cursor-pointer font-sans\"\n [attr.aria-label]=\"clientName() + (location() ? ' - ' + location() : '')\"\n >\n @if (logoSrc()) {\n <img\n [src]=\"logoSrc()\"\n [alt]=\"clientName()\"\n class=\"h-7 sm:h-8 w-auto object-contain opacity-90 group-hover:opacity-100 transition-opacity\"\n width=\"120\"\n height=\"44\"\n loading=\"lazy\"\n />\n } @else {\n <div class=\"w-8 h-8 rounded-lg bg-slateSurface border border-slateBorder flex items-center justify-center text-pistachio shrink-0\">\n <svg class=\"w-5 h-5 text-pistachio transition-transform duration-300 group-hover:scale-105\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path d=\"M7 21L12 16L16 19L24 10\" stroke=\"#E0F9B5\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <circle cx=\"24\" cy=\"10\" r=\"2\" fill=\"#E0F9B5\" />\n <path d=\"M19 10H24V15\" stroke=\"#E0F9B5\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n }\n\n <div class=\"text-left border-l border-slateBorder/60 pl-4 sm:pl-5\">\n <span class=\"block font-display font-bold text-base sm:text-lg text-white group-hover:text-pistachio transition-colors leading-tight\">\n {{ clientName() }}\n </span>\n @if (location()) {\n <span class=\"block text-sm font-sans text-muted leading-tight mt-0.5\">\n {{ location() }}\n </span>\n }\n </div>\n </a>\n `,\n})\nexport class ClientTrustCardComponent {\n clientName = input<string>('SD-M GmbH');\n location = input<string>('Alemania');\n href = input<string>('https://sd-kpi.com/');\n logoSrc = input<string>('/brand/sd-m-logo-dark.png');\n}\n","import { Component, ChangeDetectionStrategy, output, input } from '@angular/core';\n\n@Component({\n selector: 'st-command-k-trigger',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n (click)=\"onOpen.emit()\"\n class=\"flex items-center justify-between gap-3 bg-slateSurface text-muted border border-slateBorder px-3 py-1.5 rounded-md text-xs hover:border-pistachio/40 transition-colors w-48 cursor-pointer font-sans\"\n >\n <span class=\"flex items-center gap-1.5\">\n <svg class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"/></svg>\n <span>{{ placeholder() }}</span>\n </span>\n <kbd class=\"bg-charcoal border border-slateBorder text-xs px-1.5 py-0.5 rounded text-white font-mono\">{{ shortcut() }}</kbd>\n </button>\n `,\n})\nexport class CommandKTriggerComponent {\n placeholder = input<string>('Buscar o ejecutar...');\n shortcut = input<string>('Ctrl K');\n onOpen = output<void>();\n}\n","import { Component, ChangeDetectionStrategy, input, model, output, signal, HostListener, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface DropdownOption<T = any> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'st-dropdown-select',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"w-full space-y-1.5 font-sans text-left relative\">\n @if (label()) {\n <label class=\"block text-xs font-medium text-white/80\">\n {{ label() }}\n @if (required()) {\n <span class=\"text-pistachio ml-0.5\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <!-- Trigger Con Animación Suave y Chevron -->\n <button\n type=\"button\"\n (click)=\"toggle()\"\n [disabled]=\"disabled()\"\n class=\"w-full flex items-center justify-between gap-3 bg-charcoal border border-slateBorder hover:border-slateBorder-focus px-4 py-2.5 rounded-xl text-sm text-white focus:outline-none focus:border-pistachio disabled:opacity-60 disabled:cursor-not-allowed transition-all cursor-pointer shadow-inner group\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n >\n <div class=\"flex items-center gap-2 truncate\">\n <span class=\"w-2 h-2 rounded-full bg-pistachio shrink-0\"></span>\n <span class=\"truncate\">{{ selectedLabel() || placeholder() || 'Seleccionar opción' }}</span>\n </div>\n <svg\n class=\"w-4 h-4 text-muted transition-transform duration-200 ease-out group-hover:text-white shrink-0\"\n [class.rotate-180]=\"isOpen()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Panel Desplegable con Animación Suave -->\n <div\n class=\"absolute left-0 mt-2 w-full bg-slateSurface-card border border-slateBorder rounded-xl shadow-2xl py-1.5 z-50 overflow-hidden transition-all duration-200 ease-out origin-top\"\n [class.opacity-100]=\"isOpen()\"\n [class.scale-100]=\"isOpen()\"\n [class.pointer-events-auto]=\"isOpen()\"\n [class.opacity-0]=\"!isOpen()\"\n [class.scale-95]=\"!isOpen()\"\n [class.pointer-events-none]=\"!isOpen()\"\n role=\"listbox\"\n >\n @for (opt of options(); track opt.value) {\n <button\n type=\"button\"\n (click)=\"select(opt)\"\n [disabled]=\"opt.disabled\"\n class=\"w-full text-left px-3.5 py-2.5 hover:bg-slateBorder text-white flex items-center justify-between text-xs transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed\"\n >\n <span [class.text-white]=\"opt.value === value()\" [class.text-muted]=\"opt.value !== value()\">\n {{ opt.label }}\n </span>\n @if (opt.value === value()) {\n <span class=\"text-pistachio font-bold\">✓</span>\n }\n </button>\n }\n </div>\n </div>\n\n @if (errorText()) {\n <p class=\"text-xs text-red-400 mt-1\">{{ errorText() }}</p>\n }\n </div>\n `,\n})\nexport class DropdownSelectComponent {\n id = input<string>(`st-select-${Math.random().toString(36).substring(2, 9)}`);\n label = input<string>('');\n placeholder = input<string>('');\n required = input<boolean>(false);\n disabled = input<boolean>(false);\n errorText = input<string | null>(null);\n options = input<DropdownOption[]>([]);\n value = model<any>('');\n valueChanged = output<any>();\n\n readonly isOpen = signal<boolean>(false);\n\n constructor(private hostEl: ElementRef) {}\n\n toggle(): void {\n if (!this.disabled()) {\n this.isOpen.update((v) => !v);\n }\n }\n\n select(opt: DropdownOption): void {\n if (!opt.disabled) {\n this.value.set(opt.value);\n this.valueChanged.emit(opt.value);\n this.isOpen.set(false);\n }\n }\n\n selectedLabel(): string {\n const current = this.options().find((o) => o.value === this.value());\n return current ? current.label : '';\n }\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: MouseEvent): void {\n if (!this.hostEl.nativeElement.contains(event.target)) {\n this.isOpen.set(false);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, ElementRef, viewChild, afterNextRender, input } from '@angular/core';\nimport gsap from 'gsap';\n\n@Component({\n selector: 'st-footer-bounce',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative w-full overflow-hidden bg-charcoal border border-slateBorder rounded-xl p-4 flex flex-col items-center justify-center gap-3\">\n <svg class=\"w-full h-16\" viewBox=\"0 0 1440 320\" preserveAspectRatio=\"none\">\n <path\n #curve\n [attr.fill]=\"color()\"\n d=\"M 0,160 Q 720,160 1440,160 L 1440,320 L 0,320 Z\"\n ></path>\n </svg>\n <button\n type=\"button\"\n (click)=\"triggerBounce()\"\n class=\"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-slateSurface hover:bg-slateBorder text-white border border-slateBorder text-xs font-mono transition-colors cursor-pointer\"\n >\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"/></svg>\n <span>Recargar animación</span>\n </button>\n </div>\n `,\n})\nexport class FooterBounceComponent {\n color = input<string>('#E0F9B5');\n curveRef = viewChild<ElementRef<SVGPathElement>>('curve');\n\n constructor() {\n afterNextRender(() => {\n this.triggerBounce();\n });\n }\n\n triggerBounce(): void {\n const el = this.curveRef()?.nativeElement;\n if (!el) return;\n\n gsap.fromTo(\n el,\n { attr: { d: 'M 0,160 Q 720,310 1440,160 L 1440,320 L 0,320 Z' } },\n {\n duration: 2.2,\n attr: { d: 'M 0,160 Q 720,160 1440,160 L 1440,320 L 0,320 Z' },\n ease: 'elastic.out(1.8, 0.22)',\n overwrite: 'auto',\n }\n );\n }\n}\n","import { Component, ChangeDetectionStrategy, ElementRef, viewChild, afterNextRender, input, output } from '@angular/core';\nimport gsap from 'gsap';\n\n@Component({\n selector: 'st-magnetic-button',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n #btn\n [type]=\"type()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick.emit($event)\"\n class=\"px-4 py-2.5 rounded-lg bg-slateSurface text-white border border-slateBorder text-sm font-medium hover:border-pistachio transition-colors relative cursor-pointer font-sans inline-flex items-center justify-center gap-2 select-none shadow-sm active:scale-95\"\n >\n <ng-content></ng-content>\n </button>\n `,\n})\nexport class MagneticButtonComponent {\n type = input<'button' | 'submit' | 'reset'>('button');\n disabled = input<boolean>(false);\n strength = input<number>(0.35);\n onClick = output<MouseEvent>();\n\n btnRef = viewChild<ElementRef<HTMLButtonElement>>('btn');\n\n constructor() {\n afterNextRender(() => {\n const el = this.btnRef()?.nativeElement;\n if (!el) return;\n\n const xTo = gsap.quickTo(el, 'x', { duration: 0.3, ease: 'power2.out' });\n const yTo = gsap.quickTo(el, 'y', { duration: 0.3, ease: 'power2.out' });\n\n el.addEventListener('mousemove', (e: MouseEvent) => {\n const { left, top, width, height } = el.getBoundingClientRect();\n const x = (e.clientX - (left + width / 2)) * this.strength();\n const y = (e.clientY - (top + height / 2)) * this.strength();\n xTo(x);\n yTo(y);\n });\n\n el.addEventListener('mouseleave', () => {\n xTo(0);\n yTo(0);\n });\n });\n }\n}\n","import { Component, ChangeDetectionStrategy, ElementRef, viewChild, afterNextRender, output } from '@angular/core';\nimport gsap from 'gsap';\nimport { MorphSVGPlugin } from 'gsap/MorphSVGPlugin';\n\n@Component({\n selector: 'st-preloader',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div #container class=\"p-6 bg-charcoal border border-slateBorder rounded-xl flex flex-col items-center justify-center gap-4 w-full\">\n <svg\n viewBox=\"0 0 350 100\"\n class=\"w-full max-w-[360px] overflow-visible select-none\"\n >\n <defs>\n <path id=\"st-target-bracket-left\" d=\"M 40 29 L 18 50 L 40 71 L 44.5 66.5 L 27 50 L 44.5 33.5 Z\" />\n <path id=\"st-target-slash\" d=\"M 50.5 70 L 64.5 30 L 68.5 31.5 L 54.5 71.5 Z\" />\n <path id=\"st-target-bracket-right\" d=\"M 74 29 L 96 50 L 74 71 L 69.5 66.5 L 87 50 L 69.5 33.5 Z\" />\n <path id=\"st-target-char-s\" d=\"M135.12 68.59L135.12 68.59Q130.42 68.59 127.02 67.08Q123.62 65.57 120.86 62.38L120.86 62.38L126.37 56.93Q128.21 59.09 130.42 60.22Q132.64 61.36 135.66 61.36L135.66 61.36Q138.36 61.36 139.84 60.39Q141.33 59.41 141.33 57.69L141.33 57.69Q141.33 55.90 140.03 54.82Q138.74 53.74 136.71 53.02Q134.69 52.29 132.39 51.45Q130.10 50.61 128.05 49.34Q125.99 48.07 124.72 45.97Q123.46 43.86 123.46 40.51L123.46 40.51Q123.46 37.00 125.16 34.49Q126.86 31.98 129.88 30.63Q132.91 29.28 136.85 29.28L136.85 29.28Q140.84 29.28 144.16 30.71Q147.49 32.14 149.65 34.52L149.65 34.52L144.14 39.97Q142.41 38.19 140.66 37.33Q138.90 36.46 136.69 36.46L136.69 36.46Q134.42 36.46 133.15 37.30Q131.88 38.14 131.88 39.70L131.88 39.70Q131.88 41.38 133.15 42.35Q134.42 43.32 136.47 44.05Q138.52 44.78 140.82 45.62Q143.11 46.45 145.14 47.78Q147.16 49.10 148.46 51.29Q149.75 53.47 149.75 56.93L149.75 56.93Q149.75 62.44 145.87 65.52Q141.98 68.59 135.12 68.59Z\" />\n <path id=\"st-target-char-y\" d=\"M164.23 79.07L155.75 79.07L161.69 66.22L151.70 41.76L160.61 41.76L165.85 57.74L171.19 41.76L180.10 41.76L168.87 68.11L164.23 79.07Z\" />\n <path id=\"st-target-char-n\" d=\"M191.50 68L183.23 68L183.23 41.76L191.50 41.76L191.50 43.86Q194.41 41.22 198.84 41.22L198.84 41.22Q201.70 41.22 203.97 42.59Q206.24 43.97 207.53 46.24Q208.83 48.51 208.83 51.21L208.83 51.21L208.83 68L200.57 68L200.57 53.04Q200.57 50.99 199.30 49.72Q198.03 48.45 196.09 48.45L196.09 48.45Q194.09 48.45 192.79 49.72Q191.50 50.99 191.50 53.04L191.50 53.04L191.50 68Z\" />\n <path id=\"st-target-char-t\" d=\"M226.11 68L217.85 68L217.85 48.78L211.91 48.78L211.91 41.76L217.85 41.76L217.85 30.90L226.11 30.90L226.11 41.76L232.05 41.76L232.05 48.78L226.11 48.78L226.11 68Z\" />\n <path id=\"st-target-char-h\" d=\"M243.93 68L235.67 68L235.67 28.80L243.93 28.80L243.93 43.70Q246.74 41.22 251.00 41.22L251.00 41.22Q254.03 41.22 256.35 42.48Q258.67 43.75 259.97 46.02Q261.26 48.29 261.26 51.21L261.26 51.21L261.26 68L253.00 68L253.00 53.04Q253.00 50.99 251.73 49.72Q250.46 48.45 248.52 48.45L248.52 48.45Q246.52 48.45 245.23 49.72Q243.93 50.99 243.93 53.04L243.93 53.04L243.93 68Z\" />\n <path id=\"st-target-char-e\" d=\"M279.52 68.59L279.52 68.59Q275.25 68.59 271.93 66.84Q268.61 65.08 266.72 61.98Q264.83 58.87 264.83 54.88L264.83 54.88Q264.83 50.94 266.69 47.86Q268.55 44.78 271.74 42.97Q274.93 41.16 278.92 41.16L278.92 41.16Q282.76 41.16 285.75 42.86Q288.75 44.56 290.45 47.51Q292.15 50.45 292.15 54.28L292.15 54.28Q292.15 55.74 291.77 57.58L291.77 57.58L272.98 57.63Q273.63 59.85 275.30 61.03Q276.98 62.22 279.46 62.22L279.46 62.22Q283.40 62.22 285.73 59.52L285.73 59.52L290.26 64.06Q288.32 66.33 285.56 67.46Q282.81 68.59 279.52 68.59ZM278.98 47.48L278.98 47.48Q276.71 47.48 275.14 48.67Q273.58 49.86 272.98 51.96L272.98 51.96L284.43 51.91Q283.40 47.48 278.98 47.48Z\" />\n <path id=\"st-target-char-x\" d=\"M302.52 68L293.50 68L302.90 54.61L293.99 41.76L303.65 41.76L308.03 48.88L312.46 41.76L321.42 41.76L312.67 54.45L321.96 68L312.40 68L307.54 60.17L302.52 68Z\" />\n </defs>\n\n <g class=\"st-morph-group\">\n <path class=\"st-shape-0\" d=\"M 18 50 L 44 32 L 44 68 Z\" fill=\"#E0F9B5\" />\n <path class=\"st-shape-1\" d=\"M 54 30 L 63 30 L 63 70 L 54 70 Z\" fill=\"#E0F9B5\" />\n <path class=\"st-shape-2\" d=\"M 96 50 L 70 68 L 70 32 Z\" fill=\"#E0F9B5\" />\n <path class=\"st-shape-3\" d=\"M 135 34 A 16 16 0 1 0 135 66 A 16 16 0 1 0 135 34 Z\" fill=\"#FFFFFF\" />\n <path class=\"st-shape-4\" d=\"M 152 40 L 180 40 L 166 75 Z\" fill=\"#FFFFFF\" />\n <path class=\"st-shape-5\" d=\"M 183 41 L 209 41 L 209 67 L 183 67 Z\" fill=\"#FFFFFF\" />\n <path class=\"st-shape-6\" d=\"M 215 31 L 229 31 L 229 68 L 215 68 Z\" fill=\"#FFFFFF\" />\n <path class=\"st-shape-7\" d=\"M 235 29 L 261 29 L 261 68 L 235 68 Z\" fill=\"#FFFFFF\" />\n <path class=\"st-shape-8\" d=\"M 278 41 A 14 14 0 1 0 278 69 A 14 14 0 1 0 278 41 Z\" fill=\"#FFFFFF\" />\n <path class=\"st-shape-9\" d=\"M 308 41 L 322 55 L 308 69 L 294 55 Z\" fill=\"#FFFFFF\" />\n </g>\n </svg>\n <button\n type=\"button\"\n (click)=\"restart()\"\n class=\"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-lg bg-slateSurface hover:bg-slateBorder text-white border border-slateBorder hover:border-pistachio/50 text-xs font-mono transition-all cursor-pointer shadow-sm active:scale-95\"\n >\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"></path>\n </svg>\n <span>Recargar animación</span>\n </button>\n </div>\n `,\n})\nexport class PreloaderComponent {\n containerRef = viewChild<ElementRef<HTMLDivElement>>('container');\n onFinish = output<void>();\n\n private initialPaths = [\n 'M 18 50 L 44 32 L 44 68 Z',\n 'M 54 30 L 63 30 L 63 70 L 54 70 Z',\n 'M 96 50 L 70 68 L 70 32 Z',\n 'M 135 34 A 16 16 0 1 0 135 66 A 16 16 0 1 0 135 34 Z',\n 'M 152 40 L 180 40 L 166 75 Z',\n 'M 183 41 L 209 41 L 209 67 L 183 67 Z',\n 'M 215 31 L 229 31 L 229 68 L 215 68 Z',\n 'M 235 29 L 261 29 L 261 68 L 235 68 Z',\n 'M 278 41 A 14 14 0 1 0 278 69 A 14 14 0 1 0 278 41 Z',\n 'M 308 41 L 322 55 L 308 69 L 294 55 Z',\n ];\n\n private targets = [\n '#st-target-bracket-left',\n '#st-target-slash',\n '#st-target-bracket-right',\n '#st-target-char-s',\n '#st-target-char-y',\n '#st-target-char-n',\n '#st-target-char-t',\n '#st-target-char-h',\n '#st-target-char-e',\n '#st-target-char-x',\n ];\n\n constructor() {\n gsap.registerPlugin(MorphSVGPlugin);\n\n afterNextRender(() => {\n this.restart();\n });\n }\n\n restart(): void {\n const el = this.containerRef()?.nativeElement;\n if (!el) return;\n\n // Resetear a las formas geométricas iniciales\n this.initialPaths.forEach((path, i) => {\n const shape = el.querySelector(`.st-shape-${i}`);\n if (shape) {\n shape.setAttribute('d', path);\n }\n });\n\n const group = el.querySelector('.st-morph-group');\n const tl = gsap.timeline({\n onComplete: () => this.onFinish.emit(),\n overwrite: 'auto',\n });\n\n tl.fromTo(group, { opacity: 0 }, { opacity: 1, duration: 0.3, ease: 'power2.out' });\n\n this.targets.forEach((targetSelector, i) => {\n tl.to(\n el.querySelector(`.st-shape-${i}`),\n {\n morphSVG: targetSelector,\n duration: 0.85,\n ease: 'power2.inOut',\n },\n 0.15 + i * 0.035\n );\n });\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'st-help-tooltip',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-flex items-center group/tooltip font-sans select-none\">\n <button\n type=\"button\"\n class=\"w-5 h-5 rounded-full bg-slateSurface border border-slateBorder text-muted hover:text-pistachio hover:border-pistachio/50 flex items-center justify-center text-xs font-mono transition-colors cursor-help focus:outline-none focus:border-pistachio\"\n [attr.aria-label]=\"ariaLabel() || text()\"\n >\n ?\n </button>\n\n <div\n class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-2 rounded-xl bg-charcoal border border-slateBorder shadow-2xl text-xs text-white/90 whitespace-normal w-56 text-center opacity-0 scale-95 pointer-events-none group-hover/tooltip:opacity-100 group-hover/tooltip:scale-100 group-focus-within/tooltip:opacity-100 group-focus-within/tooltip:scale-100 transition-all duration-200 ease-out z-50 origin-bottom\"\n role=\"tooltip\"\n >\n @if (title()) {\n <div class=\"flex items-center justify-center gap-1.5 mb-1 text-pistachio font-semibold font-mono text-xs\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio\"></span>\n <span>{{ title() }}</span>\n </div>\n }\n <p class=\"text-xs text-muted leading-relaxed\">\n {{ text() }}\n </p>\n <div class=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1 w-2 h-2 bg-charcoal border-r border-b border-slateBorder rotate-45\"></div>\n </div>\n </div>\n `,\n})\nexport class HelpTooltipComponent {\n text = input.required<string>();\n title = input<string>('Información');\n ariaLabel = input<string>('');\n}\n","import { Component, ChangeDetectionStrategy, model, input } from '@angular/core';\n\n@Component({\n selector: 'st-input-text',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <input\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [value]=\"value()\"\n (input)=\"value.set($any($event.target).value)\"\n class=\"bg-charcoal border border-slateBorder focus:border-pistachio focus:outline-none focus:ring-1 focus:ring-pistachio text-white px-3 py-1.5 rounded-md text-xs font-mono transition-all w-48 placeholder-muted disabled:opacity-50\"\n />\n `,\n})\nexport class InputTextComponent {\n placeholder = input<string>('');\n disabled = input<boolean>(false);\n value = model<string>('');\n}\n","import { Component, ChangeDetectionStrategy, input, output, signal } from '@angular/core';\n\n@Component({\n selector: 'st-language-selector-dropdown',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-block text-left shrink-0 font-sans\">\n <button\n type=\"button\"\n (click)=\"isOpen.set(!isOpen())\"\n class=\"flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-code font-medium text-white/80 hover:text-white bg-slateSurface hover:bg-slateBorder/80 border border-slateBorder hover:border-pistachio/50 transition-all cursor-pointer shadow-sm group select-none\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"'Idioma: ' + currentLang().toUpperCase()\"\n >\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio shrink-0\"></span>\n <span class=\"tracking-wider uppercase text-pistachio font-bold\">\n {{ currentLang() }}\n </span>\n <svg\n class=\"w-3.5 h-3.5 text-white/50 transition-transform duration-200 ease-out group-hover:text-white shrink-0\"\n [class.rotate-180]=\"isOpen()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n @if (isOpen()) {\n <div\n class=\"absolute right-0 mt-2 w-44 bg-charcoal border border-slateBorder rounded-xl shadow-2xl py-1.5 z-50 overflow-hidden origin-top\"\n role=\"listbox\"\n >\n <div class=\"px-3 py-1 text-xs font-mono text-muted uppercase tracking-wider border-b border-slateBorder/50\">\n Idioma / Language\n </div>\n\n <button\n type=\"button\"\n (click)=\"selectLang('es')\"\n class=\"w-full text-left px-3 py-2 hover:bg-slateBorder flex items-center justify-between text-xs font-code transition-colors cursor-pointer\"\n [class.text-white]=\"currentLang() === 'es'\"\n [class.text-muted]=\"currentLang() !== 'es'\"\n >\n <div class=\"flex items-center gap-2\">\n <span class=\"text-white/60 font-mono text-xs\">ES</span>\n <span [class.font-medium]=\"currentLang() === 'es'\">Español</span>\n </div>\n @if (currentLang() === 'es') {\n <span class=\"text-pistachio font-bold\">✓</span>\n }\n </button>\n\n <button\n type=\"button\"\n (click)=\"selectLang('en')\"\n class=\"w-full text-left px-3 py-2 hover:bg-slateBorder flex items-center justify-between text-xs font-code transition-colors cursor-pointer\"\n [class.text-white]=\"currentLang() === 'en'\"\n [class.text-muted]=\"currentLang() !== 'en'\"\n >\n <div class=\"flex items-center gap-2\">\n <span class=\"text-white/60 font-mono text-xs\">EN</span>\n <span [class.font-medium]=\"currentLang() === 'en'\">English</span>\n </div>\n @if (currentLang() === 'en') {\n <span class=\"text-pistachio font-bold\">✓</span>\n }\n </button>\n </div>\n }\n </div>\n `,\n})\nexport class LanguageSelectorDropdownComponent {\n currentLang = input<'es' | 'en'>('es');\n langChange = output<'es' | 'en'>();\n isOpen = signal<boolean>(false);\n\n selectLang(lang: 'es' | 'en'): void {\n this.isOpen.set(false);\n if (lang !== this.currentLang()) {\n this.langChange.emit(lang);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\n\n@Component({\n selector: 'st-language-selector-pill',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n (click)=\"toggleLang()\"\n class=\"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-code font-medium text-white/80 hover:text-white bg-slateSurface hover:bg-slateBorder/80 border border-slateBorder hover:border-pistachio/50 transition-all cursor-pointer shadow-sm group active:scale-95 select-none\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio shrink-0\"></span>\n <span\n [class.text-pistachio]=\"currentLang() === 'es'\"\n [class.font-bold]=\"currentLang() === 'es'\"\n [class.text-white]=\"currentLang() !== 'es'\"\n [class.opacity-40]=\"currentLang() !== 'es'\"\n >\n ES\n </span>\n <span class=\"text-white/30 font-light\">/</span>\n <span\n [class.text-pistachio]=\"currentLang() === 'en'\"\n [class.font-bold]=\"currentLang() === 'en'\"\n [class.text-white]=\"currentLang() !== 'en'\"\n [class.opacity-40]=\"currentLang() !== 'en'\"\n class=\"group-hover:opacity-100 transition-opacity\"\n >\n EN\n </span>\n </button>\n `,\n})\nexport class LanguageSelectorPillComponent {\n currentLang = input<'es' | 'en'>('es');\n langChange = output<'es' | 'en'>();\n\n get nextLang(): 'es' | 'en' {\n return this.currentLang() === 'es' ? 'en' : 'es';\n }\n\n ariaLabel(): string {\n return `Idioma: ${this.currentLang().toUpperCase()} - Cambiar a ${this.nextLang.toUpperCase()}`;\n }\n\n toggleLang(): void {\n this.langChange.emit(this.nextLang);\n }\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\n\n@Component({\n selector: 'st-magic-link-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"p-6 rounded-2xl bg-slateSurface-card border border-slateBorder max-w-sm w-full text-center flex flex-col items-center gap-3 font-sans\">\n <div class=\"w-10 h-10 rounded-xl bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio\">\n <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/>\n </svg>\n </div>\n\n <h3 class=\"text-sm font-semibold text-white\">Revisa tu bandeja de entrada</h3>\n <p class=\"text-xs text-muted leading-relaxed\">\n Hemos enviado un enlace de acceso seguro a <span class=\"text-white font-mono\">{{ email() }}</span>.\n </p>\n\n <button\n type=\"button\"\n (click)=\"onResend.emit()\"\n class=\"mt-2 text-xs text-pistachio hover:underline cursor-pointer\"\n >\n Reenviar enlace de acceso\n </button>\n </div>\n `,\n})\nexport class MagicLinkCardComponent {\n email = input.required<string>();\n onResend = output<void>();\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-icon-box',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n class=\"rounded-xl bg-pistachio flex items-center justify-center shadow-sm\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\" [style.width.px]=\"size() * 0.6\" [style.height.px]=\"size() * 0.6\">\n <g stroke=\"#111111\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" transform=\"translate(41, 56)\">\n <polyline points=\"40,24 14,46 40,68\" />\n <line x1=\"53\" y1=\"72\" x2=\"69\" y2=\"20\" />\n <polyline points=\"82,24 108,46 82,68\" />\n </g>\n </svg>\n </div>\n `,\n})\nexport class ManifestoIconBoxComponent {\n size = input<number>(40);\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-metric-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"p-4 rounded-xl bg-slateSurface border border-slateBorder flex flex-col gap-1 w-56 font-sans\">\n <span class=\"text-xs text-muted uppercase font-mono tracking-wider\">{{ label() }}</span>\n <span class=\"text-2xl font-bold text-white font-mono\">{{ value() }}</span>\n @if (trend()) {\n <span class=\"text-xs text-pistachio font-mono\">↑ {{ trend() }}</span>\n }\n </div>\n `,\n})\nexport class MetricCardComponent {\n label = input.required<string>();\n value = input.required<string>();\n trend = input<string>();\n}\n","import { Component, ChangeDetectionStrategy, input, model, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'st-modal-dialog',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (visible()) {\n <div\n class=\"fixed inset-0 w-screen h-screen min-h-screen z-50 flex items-center justify-center p-4 bg-black/80 backdrop-blur-md animate-in fade-in duration-150\"\n (click)=\"onBackdropClick($event)\"\n >\n <div\n [class]=\"sizeClass()\"\n class=\"w-full bg-slateCard border border-slateBorder rounded-2xl shadow-2xl overflow-hidden flex flex-col max-h-[90vh] animate-in zoom-in-95 duration-150\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- Cabecera -->\n <div class=\"px-6 py-4 sm:px-7 sm:py-5 border-b border-slateBorder-subtle flex items-center justify-between gap-4\">\n <div class=\"min-w-0\">\n <h2 class=\"text-lg sm:text-xl font-bold text-white font-display tracking-tight truncate\">\n {{ title() }}\n </h2>\n @if (subtitle()) {\n <p class=\"text-xs text-muted mt-0.5 truncate\">{{ subtitle() }}</p>\n }\n </div>\n\n @if (showCloseButton()) {\n <button\n type=\"button\"\n (click)=\"cerrar()\"\n class=\"w-8 h-8 rounded-lg text-muted hover:text-white hover:bg-slateBorder-subtle transition-colors flex items-center justify-center cursor-pointer flex-shrink-0\"\n title=\"Cerrar modal\"\n aria-label=\"Cerrar modal\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path d=\"M18 6L6 18M6 6l12 12\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n }\n </div>\n\n <!-- Cuerpo -->\n <div class=\"p-6 sm:p-7 overflow-y-auto flex-1 space-y-4\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer opcional -->\n <ng-content select=\"[slot=footer]\"></ng-content>\n </div>\n </div>\n }\n `,\n})\nexport class ModalDialogComponent {\n visible = model<boolean>(false);\n title = input<string>('');\n subtitle = input<string>('');\n size = input<'sm' | 'md' | 'lg' | 'xl' | '2xl'>('md');\n showCloseButton = input<boolean>(true);\n closeOnBackdrop = input<boolean>(true);\n\n closed = output<void>();\n\n sizeClass(): string {\n switch (this.size()) {\n case 'sm':\n return 'max-w-md';\n case 'md':\n return 'max-w-lg';\n case 'lg':\n return 'max-w-2xl';\n case 'xl':\n return 'max-w-3xl';\n case '2xl':\n return 'max-w-4xl';\n default:\n return 'max-w-lg';\n }\n }\n\n cerrar(): void {\n this.visible.set(false);\n this.closed.emit();\n }\n\n onBackdropClick(_event: MouseEvent): void {\n if (this.closeOnBackdrop()) {\n this.cerrar();\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-process-step-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <article class=\"p-8 rounded-3xl bg-slateSurface/80 border border-slateBorder hover:border-pistachio/40 transition-all duration-300 flex flex-col justify-between group shadow-sm font-sans h-full\">\n <div>\n <div class=\"flex items-center justify-between mb-6\">\n <span class=\"text-2xl sm:text-3xl font-mono font-bold text-pistachio tracking-tight\">\n {{ stepNumber() }}\n </span>\n <div class=\"w-8 h-8 rounded-lg bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio\">\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" />\n </svg>\n </div>\n </div>\n\n <h3 class=\"text-xl font-display font-bold text-white mb-3 group-hover:text-pistachio transition-colors\">\n {{ title() }}\n </h3>\n\n <p class=\"text-sm text-muted font-sans leading-relaxed\">\n {{ description() }}\n </p>\n </div>\n\n @if (badge()) {\n <div class=\"mt-8 pt-4 border-t border-slateBorder/50 text-sm font-mono text-muted\">\n {{ badge() }}\n </div>\n }\n </article>\n `,\n})\nexport class ProcessStepCardComponent {\n stepNumber = input<string>('01');\n title = input<string>('');\n description = input<string>('');\n badge = input<string>('');\n}\n","import { Component, ChangeDetectionStrategy, input, output, signal } from '@angular/core';\n\nexport type ActivePerspective = 'ADMIN' | 'USER_LABORAL' | 'USER_AUTONOMO';\n\n@Component({\n selector: 'st-role-view-switcher',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-block text-left select-none\">\n <button\n type=\"button\"\n (click)=\"isOpen.set(!isOpen())\"\n class=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-xl bg-charcoal-surface hover:bg-slateSurface border border-slateBorder text-xs text-white transition-all shadow-xs cursor-pointer\"\n >\n @switch (activePerspective()) {\n @case ('ADMIN') {\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" /></svg>\n <span class=\"font-medium text-white\">Admin</span>\n }\n @case ('USER_LABORAL') {\n <svg class=\"w-3.5 h-3.5 text-white\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" /></svg>\n <span class=\"font-medium text-white\">Colaborador</span>\n }\n @case ('USER_AUTONOMO') {\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" /></svg>\n <span class=\"font-medium text-white\">Autónomo</span>\n }\n }\n <svg class=\"w-3.5 h-3.5 text-muted transition-transform duration-200\" [class.rotate-180]=\"isOpen()\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n @if (isOpen()) {\n <div class=\"absolute right-0 mt-2 w-48 rounded-xl bg-charcoal-surface border border-slateBorder shadow-2xl p-1 z-50\">\n <button\n type=\"button\"\n (click)=\"select('ADMIN')\"\n class=\"w-full flex items-center justify-between px-3 py-2 rounded-lg text-xs hover:bg-slateSurface transition-colors cursor-pointer\"\n >\n <div class=\"flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" /></svg>\n <span [class.text-white]=\"activePerspective() === 'ADMIN'\" [class.text-muted]=\"activePerspective() !== 'ADMIN'\" class=\"font-medium\">Admin</span>\n </div>\n @if (activePerspective() === 'ADMIN') {\n <span class=\"text-pistachio font-bold text-xs\">✓</span>\n }\n </button>\n <button\n type=\"button\"\n (click)=\"select('USER_LABORAL')\"\n class=\"w-full flex items-center justify-between px-3 py-2 rounded-lg text-xs hover:bg-slateSurface transition-colors cursor-pointer\"\n >\n <div class=\"flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5 text-white\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" /></svg>\n <span [class.text-white]=\"activePerspective() === 'USER_LABORAL'\" [class.text-muted]=\"activePerspective() !== 'USER_LABORAL'\" class=\"font-medium\">Colaborador</span>\n </div>\n @if (activePerspective() === 'USER_LABORAL') {\n <span class=\"text-pistachio font-bold text-xs\">✓</span>\n }\n </button>\n <button\n type=\"button\"\n (click)=\"select('USER_AUTONOMO')\"\n class=\"w-full flex items-center justify-between px-3 py-2 rounded-lg text-xs hover:bg-slateSurface transition-colors cursor-pointer\"\n >\n <div class=\"flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" /></svg>\n <span [class.text-white]=\"activePerspective() === 'USER_AUTONOMO'\" [class.text-muted]=\"activePerspective() !== 'USER_AUTONOMO'\" class=\"font-medium\">Autónomo</span>\n </div>\n @if (activePerspective() === 'USER_AUTONOMO') {\n <span class=\"text-pistachio font-bold text-xs\">✓</span>\n }\n </button>\n </div>\n }\n </div>\n `,\n})\nexport class RoleViewSwitcherComponent {\n activePerspective = input<ActivePerspective>('ADMIN');\n onPerspectiveChange = output<ActivePerspective>();\n readonly isOpen = signal<boolean>(false);\n\n select(p: ActivePerspective): void {\n this.onPerspectiveChange.emit(p);\n this.isOpen.set(false);\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'st-solution-bento-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <article class=\"p-8 sm:p-10 rounded-3xl bg-slateSurface/80 border border-slateBorder hover:border-pistachio/40 transition-all duration-300 flex flex-col justify-between group shadow-sm font-sans h-full\">\n <div>\n <div class=\"flex items-center justify-between mb-6\">\n <div class=\"w-12 h-12 rounded-xl bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio group-hover:scale-105 transition-transform\">\n <svg class=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n </svg>\n </div>\n @if (badge()) {\n <span class=\"px-3 py-1 rounded-full bg-slateCard text-pistachio text-sm font-mono font-semibold border border-slateBorder\">\n {{ badge() }}\n </span>\n }\n </div>\n\n <h3 class=\"text-2xl sm:text-3xl font-display font-bold text-white mb-4 group-hover:text-pistachio transition-colors\">\n {{ title() }}\n </h3>\n\n <p class=\"text-sm sm:text-base text-muted font-sans leading-relaxed mb-8\">\n {{ description() }}\n </p>\n\n @if (bulletPoints().length > 0) {\n <ul class=\"space-y-3 mb-10 text-sm font-sans text-white/80\">\n @for (point of bulletPoints(); track point) {\n <li class=\"flex items-start gap-3\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio mt-2 shrink-0\"></span>\n <span>{{ point }}</span>\n </li>\n }\n </ul>\n }\n </div>\n\n <div>\n <a\n [href]=\"ctaHref()\"\n class=\"inline-flex items-center justify-between w-full px-5 py-3.5 rounded-xl bg-slateCard hover:bg-slateBorder/80 text-white hover:text-pistachio border border-slateBorder hover:border-pistachio/50 font-display font-semibold text-sm transition-all duration-200 group/btn\"\n >\n <span>{{ ctaText() }}</span>\n <svg class=\"w-4 h-4 text-pistachio transform group-hover/btn:translate-x-1 transition-transform\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14 5l7 7m0 0l-7 7m7-7H3\" />\n </svg>\n </a>\n </div>\n </article>\n `,\n})\nexport class SolutionBentoCardComponent {\n title = input<string>('');\n description = input<string>('');\n badge = input<string>('');\n bulletPoints = input<string[]>([]);\n ctaText = input<string>('Ver tarifas');\n ctaHref = input<string>('/servicios/');\n}\n","import { Component, ChangeDetectionStrategy, input, output, computed } from '@angular/core';\n\n@Component({\n selector: 'st-ledger-row',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"flex items-center justify-between py-2 px-3 bg-charcoal hover:bg-charcoal-surface border-b border-slateBorder text-xs font-mono transition-colors\">\n <div class=\"flex items-center gap-3\">\n <span class=\"text-muted w-12\">#{{ index() }}</span>\n <button\n type=\"button\"\n (click)=\"onCopyHash.emit(hash())\"\n class=\"text-pistachio hover:underline cursor-pointer\"\n title=\"Copiar hash completo\"\n >\n {{ truncatedHash() }}\n </button>\n </div>\n\n <div class=\"flex items-center gap-4\">\n <span class=\"text-muted text-xs\">{{ timestamp() }}</span>\n @if (verified()) {\n <span class=\"inline-flex items-center gap-1 text-xs text-pistachio\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-pistachio\"></span>\n Sellado\n </span>\n } @else {\n <span class=\"inline-flex items-center gap-1 text-xs text-amber-500\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-amber-500\"></span>\n Pendiente\n </span>\n }\n </div>\n </div>\n `,\n})\nexport class TableLedgerRowComponent {\n index = input.required<number>();\n hash = input.required<string>();\n timestamp = input.required<string>();\n verified = input<boolean>(true);\n onCopyHash = output<string>();\n\n truncatedHash = computed(() => {\n const h = this.hash();\n if (h.length <= 16) return h;\n return `${h.slice(0, 8)}...${h.slice(-8)}`;\n });\n}\n","import { Component, ChangeDetectionStrategy, input, output } from '@angular/core';\n\n@Component({\n selector: 'st-timer-widget',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"inline-flex items-center gap-3 bg-charcoal border border-slateBorder px-3.5 py-2 rounded-lg font-mono text-sm\">\n <span\n class=\"w-2.5 h-2.5 rounded-full\"\n [class.bg-pistachio]=\"active()\"\n [class.bg-muted]=\"!active()\"\n ></span>\n <span class=\"text-white font-bold tracking-wider\">{{ time() }}</span>\n <button\n type=\"button\"\n (click)=\"onToggle.emit()\"\n class=\"text-xs font-medium text-pistachio hover:text-pistachio-hover hover:underline cursor-pointer\"\n >\n {{ active() ? 'Pausar' : 'Reanudar' }}\n </button>\n </div>\n `,\n})\nexport class TimerWidgetComponent {\n time = input<string>('00:00:00');\n active = input<boolean>(false);\n onToggle = output<void>();\n}\n","import { Component, ChangeDetectionStrategy, model, input } from '@angular/core';\n\n@Component({\n selector: 'st-toggle-switch',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label class=\"inline-flex items-center gap-2 cursor-pointer font-sans\">\n <input\n type=\"checkbox\"\n [checked]=\"checked()\"\n (change)=\"checked.set($any($event.target).checked)\"\n class=\"sr-only peer\"\n >\n <div class=\"w-8 h-4 bg-slateBorder rounded-full peer peer-checked:after:translate-x-full after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-charcoal after:rounded-full after:h-3 after:w-3 after:transition-all peer-checked:bg-pistachio relative\"></div>\n @if (label()) {\n <span class=\"text-xs text-white font-medium\">{{ label() }}</span>\n }\n </label>\n `,\n})\nexport class ToggleSwitchComponent {\n label = input<string>('');\n checked = model<boolean>(false);\n}\n","import { Component, ChangeDetectionStrategy, ElementRef, viewChild, afterNextRender, input } from '@angular/core';\nimport gsap from 'gsap';\n\n@Component({\n selector: 'st-wavy-underline-heading',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"w-full flex flex-col items-center justify-center gap-3 p-4 bg-charcoal border border-slateBorder rounded-xl font-display text-center\">\n <h2 class=\"text-xl sm:text-2xl md:text-3xl font-bold text-white tracking-tight leading-snug\">\n @if (prefixText()) {\n <span>{{ prefixText() }} </span>\n }\n <span class=\"relative inline-block text-pistachio\">\n <span class=\"relative z-10\">{{ highlightText() }}</span>\n <svg\n class=\"absolute left-0 -bottom-2 w-full h-3 overflow-visible pointer-events-none\"\n viewBox=\"0 0 300 16\"\n preserveAspectRatio=\"none\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n #wavyPath\n d=\"M2 10 Q 35 2, 75 9 T 150 9 T 225 9 T 298 9\"\n [attr.stroke]=\"strokeColor()\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n ></path>\n </svg>\n </span>\n </h2>\n\n @if (showReload()) {\n <button\n type=\"button\"\n (click)=\"triggerAnimation()\"\n class=\"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-slateSurface hover:bg-slateBorder text-white border border-slateBorder text-xs font-mono transition-colors cursor-pointer mt-2\"\n >\n <svg class=\"w-3.5 h-3.5 text-pistachio\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"/></svg>\n <span>Recargar animación</span>\n </button>\n }\n </div>\n `,\n})\nexport class WavyUnderlineHeadingComponent {\n prefixText = input<string>('Ingeniería con');\n highlightText = input<string>('total transparencia.');\n strokeColor = input<string>('#E0F9B5');\n showReload = input<boolean>(true);\n\n wavyPathRef = viewChild<ElementRef<SVGPathElement>>('wavyPath');\n\n constructor() {\n afterNextRender(() => {\n this.triggerAnimation();\n });\n }\n\n triggerAnimation(): void {\n const el = this.wavyPathRef()?.nativeElement;\n if (!el) return;\n\n const length = Math.ceil(el.getTotalLength()) + 20;\n gsap.fromTo(\n el,\n {\n strokeDasharray: length,\n strokeDashoffset: length,\n opacity: 1,\n },\n {\n strokeDashoffset: 0,\n duration: 0.8,\n ease: 'power2.inOut',\n overwrite: 'auto',\n }\n );\n }\n}\n","import { Component, ChangeDetectionStrategy, input, output, signal } from '@angular/core';\n\nexport interface WorkspaceItem {\n id: string;\n name: string;\n isMain?: boolean;\n}\n\n@Component({\n selector: 'st-workspace-switcher',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"relative inline-block font-sans text-xs\">\n <button\n type=\"button\"\n (click)=\"isOpen.set(!isOpen())\"\n class=\"flex items-center gap-2 bg-charcoal border border-slateBorder hover:border-pistachio/40 px-3 py-1.5 rounded-lg text-white transition-colors cursor-pointer\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\" width=\"18\" height=\"18\">\n <rect x=\"10\" y=\"10\" width=\"180\" height=\"180\" rx=\"52\" fill=\"#E0F9B5\" />\n <g stroke=\"#111111\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" transform=\"translate(41, 56)\">\n <polyline points=\"40,24 14,46 40,68\" />\n <line x1=\"53\" y1=\"72\" x2=\"69\" y2=\"20\" />\n <polyline points=\"82,24 108,46 82,68\" />\n </g>\n </svg>\n <span class=\"font-medium text-white\">{{ currentWorkspace()?.name || 'Seleccionar Empresa' }}</span>\n <span class=\"text-muted text-xs font-mono\">▾</span>\n </button>\n\n @if (isOpen()) {\n <div class=\"absolute left-0 mt-1 w-52 bg-slateSurface-card border border-slateBorder rounded-lg shadow-xl z-50 py-1 overflow-hidden\">\n @for (item of workspaces(); track item.id) {\n <button\n type=\"button\"\n (click)=\"selectWorkspace(item)\"\n class=\"w-full text-left px-3 py-2 hover:bg-slateBorder text-white flex items-center justify-between text-xs transition-colors\"\n >\n <span>{{ item.name }}</span>\n @if (item.id === currentWorkspace()?.id) {\n <span class=\"text-pistachio\">✓</span>\n }\n </button>\n }\n </div>\n }\n </div>\n `,\n})\nexport class WorkspaceSwitcherComponent {\n workspaces = input<WorkspaceItem[]>([\n { id: 'synthex', name: 'Synthex Matriz', isMain: true },\n { id: 'filial-de', name: 'Synthex GmbH (Alemania)' },\n ]);\n currentWorkspace = input<WorkspaceItem>({ id: 'synthex', name: 'Synthex Matriz', isMain: true });\n onSelect = output<WorkspaceItem>();\n\n isOpen = signal<boolean>(false);\n\n selectWorkspace(item: WorkspaceItem) {\n this.onSelect.emit(item);\n this.isOpen.set(false);\n }\n}\n"]}