@lesterarte/sefin-ui 0.0.3-dev.0 → 0.0.3-dev.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.
package/README.md CHANGED
@@ -208,12 +208,77 @@ ThemeLoader.loadTheme('dark');
208
208
 
209
209
  ## Tipografía
210
210
 
211
- La librería usa la fuente **Pluto** de Secretaría de Finanzas:
212
- - **Pluto-Light** (300)
213
- - **Pluto-Regular** (400)
214
- - **Pluto-Bold** (700)
211
+ La librería usa la fuente **Pluto** de Secretaría de Finanzas según las guías de marca:
212
+ - **Pluto-Light** (300) - Para texto ligero
213
+ - **Pluto-Regular** (400) - Para texto normal y body
214
+ - **Pluto-Bold** (700) - Para títulos y encabezados
215
+
216
+ ### ⚠️ Importante: Incluir Archivos de Fuente
217
+
218
+ La librería define las declaraciones `@font-face` para Pluto, pero **debes proporcionar los archivos de fuente en tu aplicación consumidora**.
219
+
220
+ #### Opción 1: Archivos locales (Recomendado)
221
+
222
+ 1. **Copia los archivos de fuente** a tu proyecto en la carpeta `src/assets/fonts/`:
223
+ ```
224
+ src/
225
+ └── assets/
226
+ └── fonts/
227
+ ├── Pluto-Regular.woff2
228
+ ├── Pluto-Regular.woff
229
+ ├── Pluto-Bold.woff2
230
+ ├── Pluto-Bold.woff
231
+ ├── Pluto-Light.woff2
232
+ └── Pluto-Light.woff
233
+ ```
234
+
235
+ 2. **Configura Angular** para copiar los assets en `angular.json`:
236
+ ```json
237
+ {
238
+ "assets": [
239
+ "src/favicon.ico",
240
+ "src/assets",
241
+ {
242
+ "glob": "**/*",
243
+ "input": "src/assets/fonts",
244
+ "output": "/assets/fonts"
245
+ }
246
+ ]
247
+ }
248
+ ```
249
+
250
+ 3. **Los estilos de la librería buscarán automáticamente** los archivos en `./assets/fonts/`
251
+
252
+ #### Opción 2: CDN o fuente externa
253
+
254
+ Si prefieres usar una fuente desde CDN o servidor externo, puedes sobrescribir las rutas en tu `styles.scss`:
215
255
 
216
- Nota: Debes incluir los archivos de fuente Pluto en tu proyecto.
256
+ ```scss
257
+ @font-face {
258
+ font-family: 'Pluto';
259
+ src: url('https://tu-cdn.com/fonts/Pluto-Regular.woff2') format('woff2');
260
+ font-weight: 400;
261
+ font-style: normal;
262
+ font-display: swap;
263
+ }
264
+
265
+ @font-face {
266
+ font-family: 'Pluto';
267
+ src: url('https://tu-cdn.com/fonts/Pluto-Bold.woff2') format('woff2');
268
+ font-weight: 700;
269
+ font-style: normal;
270
+ font-display: swap;
271
+ }
272
+ ```
273
+
274
+ #### Formatos de fuente soportados
275
+
276
+ La librería busca los archivos en este orden de prioridad:
277
+ 1. `.woff2` (recomendado - mejor compresión)
278
+ 2. `.woff` (fallback)
279
+ 3. `.ttf` (fallback)
280
+
281
+ **Nota:** Si no incluyes los archivos de fuente, el navegador usará las fuentes de fallback del sistema (Arial, Roboto, etc.).
217
282
 
218
283
  ## Desarrollo
219
284
 
@@ -1,9 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Output, Input, ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';
3
- import * as i1 from '@angular/common';
2
+ import { EventEmitter, Output, Input, ChangeDetectionStrategy, Component } from '@angular/core';
4
3
  import { CommonModule } from '@angular/common';
5
- import * as i2 from '@angular/forms';
6
- import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
7
4
 
8
5
  /**
9
6
  * Color design tokens as TypeScript constants
@@ -486,315 +483,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
486
483
  type: Output
487
484
  }] } });
488
485
 
489
- class IconComponent {
490
- name = '';
491
- size = 'md';
492
- class = '';
493
- get iconClasses() {
494
- return [
495
- 'sefin-icon',
496
- `sefin-icon--${this.size}`,
497
- this.class,
498
- ]
499
- .filter(Boolean)
500
- .join(' ');
501
- }
502
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
503
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: IconComponent, isStandalone: true, selector: "sefin-icon", inputs: { name: "name", size: "size", class: "class" }, ngImport: i0, template: "<span [class]=\"iconClasses\" [attr.aria-label]=\"name\">\n <ng-content></ng-content>\n</span>\n\n", styles: [".sefin-icon{display:inline-flex;align-items:center;justify-content:center;color:currentColor}.sefin-icon--sm{width:16px;height:16px;font-size:16px}.sefin-icon--md{width:24px;height:24px;font-size:24px}.sefin-icon--lg{width:32px;height:32px;font-size:32px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
504
- }
505
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IconComponent, decorators: [{
506
- type: Component,
507
- args: [{ selector: 'sefin-icon', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span [class]=\"iconClasses\" [attr.aria-label]=\"name\">\n <ng-content></ng-content>\n</span>\n\n", styles: [".sefin-icon{display:inline-flex;align-items:center;justify-content:center;color:currentColor}.sefin-icon--sm{width:16px;height:16px;font-size:16px}.sefin-icon--md{width:24px;height:24px;font-size:24px}.sefin-icon--lg{width:32px;height:32px;font-size:32px}\n"] }]
508
- }], propDecorators: { name: [{
509
- type: Input
510
- }], size: [{
511
- type: Input
512
- }], class: [{
513
- type: Input
514
- }] } });
515
-
516
- class InputComponent {
517
- type = 'text';
518
- placeholder = '';
519
- size = 'md';
520
- disabled = false;
521
- required = false;
522
- readonly = false;
523
- class = '';
524
- id = '';
525
- blur = new EventEmitter();
526
- focus = new EventEmitter();
527
- value = '';
528
- onChange = (value) => { };
529
- onTouched = () => { };
530
- onInput(event) {
531
- const target = event.target;
532
- this.value = target.value;
533
- this.onChange(this.value);
534
- }
535
- onBlur(event) {
536
- this.onTouched();
537
- this.blur.emit(event);
538
- }
539
- onFocus(event) {
540
- this.focus.emit(event);
541
- }
542
- writeValue(value) {
543
- this.value = value || '';
544
- }
545
- registerOnChange(fn) {
546
- this.onChange = fn;
547
- }
548
- registerOnTouched(fn) {
549
- this.onTouched = fn;
550
- }
551
- setDisabledState(isDisabled) {
552
- this.disabled = isDisabled;
553
- }
554
- get inputClasses() {
555
- return [
556
- 'sefin-input',
557
- `sefin-input--${this.size}`,
558
- this.disabled ? 'sefin-input--disabled' : '',
559
- this.class,
560
- ]
561
- .filter(Boolean)
562
- .join(' ');
563
- }
564
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
565
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: InputComponent, isStandalone: true, selector: "sefin-input", inputs: { type: "type", placeholder: "placeholder", size: "size", disabled: "disabled", required: "required", readonly: "readonly", class: "class", id: "id" }, outputs: { blur: "blur", focus: "focus" }, providers: [
566
- {
567
- provide: NG_VALUE_ACCESSOR,
568
- useExisting: forwardRef(() => InputComponent),
569
- multi: true,
570
- },
571
- ], ngImport: i0, template: "<input\n [type]=\"type\"\n [id]=\"id\"\n [class]=\"inputClasses\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n/>\n\n", styles: [".sefin-input{width:100%;font-family:var(--sefin-font-family-base);color:var(--sefin-color-text);background-color:var(--sefin-color-surface);border:1px solid var(--sefin-color-border);border-radius:var(--sefin-radius-md, 8px);transition:all .2s ease-in-out;outline:none}.sefin-input::placeholder{color:var(--sefin-color-text-secondary)}.sefin-input:focus{border-color:var(--sefin-color-border-focus);box-shadow:0 0 0 3px rgba(var(--sefin-color-primary-rgb, 33, 150, 243),.1)}.sefin-input:disabled{background-color:var(--sefin-color-surface-hover);color:var(--sefin-color-text-disabled);cursor:not-allowed}.sefin-input--sm{padding:var(--sefin-spacing-sm, 8px) var(--sefin-spacing-md, 16px);font-size:var(--sefin-font-size-sm, .875rem);min-height:32px}.sefin-input--md{padding:var(--sefin-spacing-md, 16px);font-size:var(--sefin-font-size-base, 1rem);min-height:40px}.sefin-input--lg{padding:var(--sefin-spacing-lg, 24px);font-size:var(--sefin-font-size-lg, 1.125rem);min-height:48px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
572
- }
573
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: InputComponent, decorators: [{
574
- type: Component,
575
- args: [{ selector: 'sefin-input', standalone: true, imports: [CommonModule, FormsModule], providers: [
576
- {
577
- provide: NG_VALUE_ACCESSOR,
578
- useExisting: forwardRef(() => InputComponent),
579
- multi: true,
580
- },
581
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<input\n [type]=\"type\"\n [id]=\"id\"\n [class]=\"inputClasses\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n/>\n\n", styles: [".sefin-input{width:100%;font-family:var(--sefin-font-family-base);color:var(--sefin-color-text);background-color:var(--sefin-color-surface);border:1px solid var(--sefin-color-border);border-radius:var(--sefin-radius-md, 8px);transition:all .2s ease-in-out;outline:none}.sefin-input::placeholder{color:var(--sefin-color-text-secondary)}.sefin-input:focus{border-color:var(--sefin-color-border-focus);box-shadow:0 0 0 3px rgba(var(--sefin-color-primary-rgb, 33, 150, 243),.1)}.sefin-input:disabled{background-color:var(--sefin-color-surface-hover);color:var(--sefin-color-text-disabled);cursor:not-allowed}.sefin-input--sm{padding:var(--sefin-spacing-sm, 8px) var(--sefin-spacing-md, 16px);font-size:var(--sefin-font-size-sm, .875rem);min-height:32px}.sefin-input--md{padding:var(--sefin-spacing-md, 16px);font-size:var(--sefin-font-size-base, 1rem);min-height:40px}.sefin-input--lg{padding:var(--sefin-spacing-lg, 24px);font-size:var(--sefin-font-size-lg, 1.125rem);min-height:48px}\n"] }]
582
- }], propDecorators: { type: [{
583
- type: Input
584
- }], placeholder: [{
585
- type: Input
586
- }], size: [{
587
- type: Input
588
- }], disabled: [{
589
- type: Input
590
- }], required: [{
591
- type: Input
592
- }], readonly: [{
593
- type: Input
594
- }], class: [{
595
- type: Input
596
- }], id: [{
597
- type: Input
598
- }], blur: [{
599
- type: Output
600
- }], focus: [{
601
- type: Output
602
- }] } });
603
-
604
486
  /**
605
487
  * Atoms index
606
488
  */
607
489
 
608
- class FormFieldComponent {
609
- label = '';
610
- hint = '';
611
- error = '';
612
- required = false;
613
- disabled = false;
614
- inputId = '';
615
- inputType = 'text';
616
- placeholder = '';
617
- size = 'md';
618
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
619
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: FormFieldComponent, isStandalone: true, selector: "sefin-form-field", inputs: { label: "label", hint: "hint", error: "error", required: "required", disabled: "disabled", inputId: "inputId", inputType: "inputType", placeholder: "placeholder", size: "size" }, ngImport: i0, template: "<div class=\"sefin-form-field\">\n <label *ngIf=\"label\" [for]=\"inputId\" class=\"sefin-form-field__label\">\n {{ label }}\n <span *ngIf=\"required\" class=\"sefin-form-field__required\">*</span>\n </label>\n <sefin-input\n [id]=\"inputId\"\n [type]=\"inputType\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [size]=\"size\"\n [class.sefin-form-field__input--error]=\"!!error\"\n ></sefin-input>\n <div *ngIf=\"hint && !error\" class=\"sefin-form-field__hint\">{{ hint }}</div>\n <div *ngIf=\"error\" class=\"sefin-form-field__error\">{{ error }}</div>\n</div>\n\n", styles: [".sefin-form-field{display:flex;flex-direction:column;gap:var(--sefin-spacing-sm, 8px);width:100%}.sefin-form-field__label{font-size:var(--sefin-font-size-sm, .875rem);font-weight:var(--sefin-font-weight-medium, 500);color:var(--sefin-color-text)}.sefin-form-field__required{color:var(--sefin-color-error);margin-left:2px}.sefin-form-field__hint{font-size:var(--sefin-font-size-xs, .75rem);color:var(--sefin-color-text-secondary)}.sefin-form-field__error{font-size:var(--sefin-font-size-xs, .75rem);color:var(--sefin-color-error)}.sefin-form-field__input--error{border-color:var(--sefin-color-error)!important}.sefin-form-field__input--error:focus{box-shadow:0 0 0 3px #f443361a!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InputComponent, selector: "sefin-input", inputs: ["type", "placeholder", "size", "disabled", "required", "readonly", "class", "id"], outputs: ["blur", "focus"] }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
620
- }
621
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: FormFieldComponent, decorators: [{
622
- type: Component,
623
- args: [{ selector: 'sefin-form-field', standalone: true, imports: [CommonModule, InputComponent, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sefin-form-field\">\n <label *ngIf=\"label\" [for]=\"inputId\" class=\"sefin-form-field__label\">\n {{ label }}\n <span *ngIf=\"required\" class=\"sefin-form-field__required\">*</span>\n </label>\n <sefin-input\n [id]=\"inputId\"\n [type]=\"inputType\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [size]=\"size\"\n [class.sefin-form-field__input--error]=\"!!error\"\n ></sefin-input>\n <div *ngIf=\"hint && !error\" class=\"sefin-form-field__hint\">{{ hint }}</div>\n <div *ngIf=\"error\" class=\"sefin-form-field__error\">{{ error }}</div>\n</div>\n\n", styles: [".sefin-form-field{display:flex;flex-direction:column;gap:var(--sefin-spacing-sm, 8px);width:100%}.sefin-form-field__label{font-size:var(--sefin-font-size-sm, .875rem);font-weight:var(--sefin-font-weight-medium, 500);color:var(--sefin-color-text)}.sefin-form-field__required{color:var(--sefin-color-error);margin-left:2px}.sefin-form-field__hint{font-size:var(--sefin-font-size-xs, .75rem);color:var(--sefin-color-text-secondary)}.sefin-form-field__error{font-size:var(--sefin-font-size-xs, .75rem);color:var(--sefin-color-error)}.sefin-form-field__input--error{border-color:var(--sefin-color-error)!important}.sefin-form-field__input--error:focus{box-shadow:0 0 0 3px #f443361a!important}\n"] }]
624
- }], propDecorators: { label: [{
625
- type: Input
626
- }], hint: [{
627
- type: Input
628
- }], error: [{
629
- type: Input
630
- }], required: [{
631
- type: Input
632
- }], disabled: [{
633
- type: Input
634
- }], inputId: [{
635
- type: Input
636
- }], inputType: [{
637
- type: Input
638
- }], placeholder: [{
639
- type: Input
640
- }], size: [{
641
- type: Input
642
- }] } });
643
-
644
- class DropdownComponent {
645
- options = [];
646
- placeholder = 'Select an option';
647
- disabled = false;
648
- size = 'md';
649
- selectionChange = new EventEmitter();
650
- isOpen = false;
651
- selectedOption = null;
652
- toggle() {
653
- if (!this.disabled) {
654
- this.isOpen = !this.isOpen;
655
- }
656
- }
657
- selectOption(option) {
658
- if (!option.disabled) {
659
- this.selectedOption = option;
660
- this.isOpen = false;
661
- this.selectionChange.emit(option.value);
662
- }
663
- }
664
- get displayText() {
665
- return this.selectedOption?.label || this.placeholder;
666
- }
667
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
668
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: DropdownComponent, isStandalone: true, selector: "sefin-dropdown", inputs: { options: "options", placeholder: "placeholder", disabled: "disabled", size: "size" }, outputs: { selectionChange: "selectionChange" }, ngImport: i0, template: "<div class=\"sefin-dropdown\" [class.sefin-dropdown--open]=\"isOpen\">\n <sefin-button\n [variant]=\"'outline'\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n (clicked)=\"toggle()\"\n class=\"sefin-dropdown__trigger\"\n >\n {{ displayText }}\n <span class=\"sefin-dropdown__arrow\">\u25BC</span>\n </sefin-button>\n <div *ngIf=\"isOpen\" class=\"sefin-dropdown__menu\">\n <button\n *ngFor=\"let option of options\"\n [class.sefin-dropdown__option--disabled]=\"option.disabled\"\n [class.sefin-dropdown__option--selected]=\"selectedOption?.value === option.value\"\n class=\"sefin-dropdown__option\"\n (click)=\"selectOption(option)\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </button>\n </div>\n</div>\n\n", styles: [".sefin-dropdown{position:relative;width:100%}.sefin-dropdown__trigger{width:100%;justify-content:space-between}.sefin-dropdown__arrow{margin-left:var(--sefin-spacing-sm, 8px);transition:transform .2s ease-in-out}.sefin-dropdown--open .sefin-dropdown__arrow{transform:rotate(180deg)}.sefin-dropdown__menu{position:absolute;top:calc(100% + var(--sefin-spacing-xs, 4px));left:0;right:0;background-color:var(--sefin-color-surface);border:1px solid var(--sefin-color-border);border-radius:var(--sefin-radius-md, 8px);box-shadow:var(--sefin-shadow-lg);z-index:1000;max-height:300px;overflow-y:auto}.sefin-dropdown__option{width:100%;padding:var(--sefin-spacing-md, 16px);text-align:left;background:none;border:none;cursor:pointer;color:var(--sefin-color-text);font-size:var(--sefin-font-size-base, 1rem);transition:background-color .2s ease-in-out}.sefin-dropdown__option:hover:not(:disabled){background-color:var(--sefin-color-surface-hover)}.sefin-dropdown__option--selected{background-color:var(--sefin-color-primary);color:#fff}.sefin-dropdown__option--disabled{opacity:.5;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "sefin-button", inputs: ["variant", "size", "disabled", "type", "class"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
669
- }
670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DropdownComponent, decorators: [{
671
- type: Component,
672
- args: [{ selector: 'sefin-dropdown', standalone: true, imports: [CommonModule, ButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sefin-dropdown\" [class.sefin-dropdown--open]=\"isOpen\">\n <sefin-button\n [variant]=\"'outline'\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n (clicked)=\"toggle()\"\n class=\"sefin-dropdown__trigger\"\n >\n {{ displayText }}\n <span class=\"sefin-dropdown__arrow\">\u25BC</span>\n </sefin-button>\n <div *ngIf=\"isOpen\" class=\"sefin-dropdown__menu\">\n <button\n *ngFor=\"let option of options\"\n [class.sefin-dropdown__option--disabled]=\"option.disabled\"\n [class.sefin-dropdown__option--selected]=\"selectedOption?.value === option.value\"\n class=\"sefin-dropdown__option\"\n (click)=\"selectOption(option)\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </button>\n </div>\n</div>\n\n", styles: [".sefin-dropdown{position:relative;width:100%}.sefin-dropdown__trigger{width:100%;justify-content:space-between}.sefin-dropdown__arrow{margin-left:var(--sefin-spacing-sm, 8px);transition:transform .2s ease-in-out}.sefin-dropdown--open .sefin-dropdown__arrow{transform:rotate(180deg)}.sefin-dropdown__menu{position:absolute;top:calc(100% + var(--sefin-spacing-xs, 4px));left:0;right:0;background-color:var(--sefin-color-surface);border:1px solid var(--sefin-color-border);border-radius:var(--sefin-radius-md, 8px);box-shadow:var(--sefin-shadow-lg);z-index:1000;max-height:300px;overflow-y:auto}.sefin-dropdown__option{width:100%;padding:var(--sefin-spacing-md, 16px);text-align:left;background:none;border:none;cursor:pointer;color:var(--sefin-color-text);font-size:var(--sefin-font-size-base, 1rem);transition:background-color .2s ease-in-out}.sefin-dropdown__option:hover:not(:disabled){background-color:var(--sefin-color-surface-hover)}.sefin-dropdown__option--selected{background-color:var(--sefin-color-primary);color:#fff}.sefin-dropdown__option--disabled{opacity:.5;cursor:not-allowed}\n"] }]
673
- }], propDecorators: { options: [{
674
- type: Input
675
- }], placeholder: [{
676
- type: Input
677
- }], disabled: [{
678
- type: Input
679
- }], size: [{
680
- type: Input
681
- }], selectionChange: [{
682
- type: Output
683
- }] } });
684
-
685
- class CardComponent {
686
- variant = 'default';
687
- class = '';
688
- get cardClasses() {
689
- return [
690
- 'sefin-card',
691
- `sefin-card--${this.variant}`,
692
- this.class,
693
- ]
694
- .filter(Boolean)
695
- .join(' ');
696
- }
697
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
698
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: CardComponent, isStandalone: true, selector: "sefin-card", inputs: { variant: "variant", class: "class" }, ngImport: i0, template: "<div [class]=\"cardClasses\">\n <ng-content></ng-content>\n</div>\n\n", styles: [".sefin-card{background-color:var(--sefin-color-surface);border-radius:var(--sefin-radius-lg, 12px);padding:var(--sefin-spacing-lg, 24px);transition:all .2s ease-in-out}.sefin-card--default{background-color:var(--sefin-color-surface)}.sefin-card--elevated{background-color:var(--sefin-color-background-elevated);box-shadow:var(--sefin-shadow-md)}.sefin-card--outlined{background-color:var(--sefin-color-surface);border:1px solid var(--sefin-color-border)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
699
- }
700
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CardComponent, decorators: [{
701
- type: Component,
702
- args: [{ selector: 'sefin-card', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"cardClasses\">\n <ng-content></ng-content>\n</div>\n\n", styles: [".sefin-card{background-color:var(--sefin-color-surface);border-radius:var(--sefin-radius-lg, 12px);padding:var(--sefin-spacing-lg, 24px);transition:all .2s ease-in-out}.sefin-card--default{background-color:var(--sefin-color-surface)}.sefin-card--elevated{background-color:var(--sefin-color-background-elevated);box-shadow:var(--sefin-shadow-md)}.sefin-card--outlined{background-color:var(--sefin-color-surface);border:1px solid var(--sefin-color-border)}\n"] }]
703
- }], propDecorators: { variant: [{
704
- type: Input
705
- }], class: [{
706
- type: Input
707
- }] } });
708
-
709
- /**
710
- * Molecules index
711
- */
712
-
713
- class HeaderComponent {
714
- title = '';
715
- logo = '';
716
- showUserMenu = true;
717
- userName = '';
718
- logoClick = new EventEmitter();
719
- menuClick = new EventEmitter();
720
- userMenuClick = new EventEmitter();
721
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
722
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: HeaderComponent, isStandalone: true, selector: "sefin-header", inputs: { title: "title", logo: "logo", showUserMenu: "showUserMenu", userName: "userName" }, outputs: { logoClick: "logoClick", menuClick: "menuClick", userMenuClick: "userMenuClick" }, ngImport: i0, template: "<header class=\"sefin-header\">\n <div class=\"sefin-header__left\">\n <div *ngIf=\"logo\" class=\"sefin-header__logo\" (click)=\"logoClick.emit()\">\n <img [src]=\"logo\" [alt]=\"title\" />\n </div>\n <h1 *ngIf=\"title\" class=\"sefin-header__title\">{{ title }}</h1>\n </div>\n <div class=\"sefin-header__right\">\n <sefin-button\n *ngIf=\"showUserMenu\"\n variant=\"ghost\"\n size=\"md\"\n (clicked)=\"userMenuClick.emit()\"\n class=\"sefin-header__user-menu\"\n >\n <sefin-icon name=\"user\" size=\"md\"></sefin-icon>\n <span *ngIf=\"userName\">{{ userName }}</span>\n </sefin-button>\n <sefin-button\n variant=\"ghost\"\n size=\"md\"\n (clicked)=\"menuClick.emit()\"\n class=\"sefin-header__menu-button\"\n >\n <sefin-icon name=\"menu\" size=\"md\">\u2630</sefin-icon>\n </sefin-button>\n </div>\n</header>\n\n", styles: [".sefin-header{display:flex;align-items:center;justify-content:space-between;padding:var(--sefin-spacing-md, 16px) var(--sefin-spacing-lg, 24px);background-color:var(--sefin-color-surface);border-bottom:1px solid var(--sefin-color-border);box-shadow:var(--sefin-shadow-sm)}.sefin-header__left{display:flex;align-items:center;gap:var(--sefin-spacing-md, 16px)}.sefin-header__logo{cursor:pointer;display:flex;align-items:center}.sefin-header__logo img{height:40px;width:auto}.sefin-header__title{font-size:var(--sefin-font-size-xl, 1.25rem);font-weight:var(--sefin-font-weight-semibold, 600);color:var(--sefin-color-text);margin:0}.sefin-header__right,.sefin-header__user-menu{display:flex;align-items:center;gap:var(--sefin-spacing-sm, 8px)}.sefin-header__menu-button{display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "sefin-button", inputs: ["variant", "size", "disabled", "type", "class"], outputs: ["clicked"] }, { kind: "component", type: IconComponent, selector: "sefin-icon", inputs: ["name", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
723
- }
724
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: HeaderComponent, decorators: [{
725
- type: Component,
726
- args: [{ selector: 'sefin-header', standalone: true, imports: [CommonModule, ButtonComponent, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"sefin-header\">\n <div class=\"sefin-header__left\">\n <div *ngIf=\"logo\" class=\"sefin-header__logo\" (click)=\"logoClick.emit()\">\n <img [src]=\"logo\" [alt]=\"title\" />\n </div>\n <h1 *ngIf=\"title\" class=\"sefin-header__title\">{{ title }}</h1>\n </div>\n <div class=\"sefin-header__right\">\n <sefin-button\n *ngIf=\"showUserMenu\"\n variant=\"ghost\"\n size=\"md\"\n (clicked)=\"userMenuClick.emit()\"\n class=\"sefin-header__user-menu\"\n >\n <sefin-icon name=\"user\" size=\"md\"></sefin-icon>\n <span *ngIf=\"userName\">{{ userName }}</span>\n </sefin-button>\n <sefin-button\n variant=\"ghost\"\n size=\"md\"\n (clicked)=\"menuClick.emit()\"\n class=\"sefin-header__menu-button\"\n >\n <sefin-icon name=\"menu\" size=\"md\">\u2630</sefin-icon>\n </sefin-button>\n </div>\n</header>\n\n", styles: [".sefin-header{display:flex;align-items:center;justify-content:space-between;padding:var(--sefin-spacing-md, 16px) var(--sefin-spacing-lg, 24px);background-color:var(--sefin-color-surface);border-bottom:1px solid var(--sefin-color-border);box-shadow:var(--sefin-shadow-sm)}.sefin-header__left{display:flex;align-items:center;gap:var(--sefin-spacing-md, 16px)}.sefin-header__logo{cursor:pointer;display:flex;align-items:center}.sefin-header__logo img{height:40px;width:auto}.sefin-header__title{font-size:var(--sefin-font-size-xl, 1.25rem);font-weight:var(--sefin-font-weight-semibold, 600);color:var(--sefin-color-text);margin:0}.sefin-header__right,.sefin-header__user-menu{display:flex;align-items:center;gap:var(--sefin-spacing-sm, 8px)}.sefin-header__menu-button{display:flex;align-items:center}\n"] }]
727
- }], propDecorators: { title: [{
728
- type: Input
729
- }], logo: [{
730
- type: Input
731
- }], showUserMenu: [{
732
- type: Input
733
- }], userName: [{
734
- type: Input
735
- }], logoClick: [{
736
- type: Output
737
- }], menuClick: [{
738
- type: Output
739
- }], userMenuClick: [{
740
- type: Output
741
- }] } });
742
-
743
- class LoginFormComponent {
744
- email = '';
745
- password = '';
746
- error = '';
747
- submit = new EventEmitter();
748
- onSubmit() {
749
- if (this.email && this.password) {
750
- this.error = '';
751
- this.submit.emit({
752
- email: this.email,
753
- password: this.password,
754
- });
755
- }
756
- else {
757
- this.error = 'Please fill in all fields';
758
- }
759
- }
760
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LoginFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
761
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: LoginFormComponent, isStandalone: true, selector: "sefin-login-form", outputs: { submit: "submit" }, ngImport: i0, template: "<sefin-card variant=\"elevated\" class=\"sefin-login-form\">\n <h2 class=\"sefin-login-form__title\">Sign In</h2>\n <form (ngSubmit)=\"onSubmit()\" class=\"sefin-login-form__form\">\n <sefin-form-field\n label=\"Email\"\n inputId=\"email\"\n inputType=\"email\"\n placeholder=\"Enter your email\"\n [required]=\"true\"\n [(ngModel)]=\"email\"\n name=\"email\"\n ></sefin-form-field>\n <sefin-form-field\n label=\"Password\"\n inputId=\"password\"\n inputType=\"password\"\n placeholder=\"Enter your password\"\n [required]=\"true\"\n [(ngModel)]=\"password\"\n name=\"password\"\n ></sefin-form-field>\n <div *ngIf=\"error\" class=\"sefin-login-form__error\">{{ error }}</div>\n <sefin-button\n type=\"submit\"\n variant=\"primary\"\n size=\"lg\"\n class=\"sefin-login-form__submit\"\n >\n Sign In\n </sefin-button>\n </form>\n</sefin-card>\n\n", styles: [".sefin-login-form{max-width:400px;width:100%}.sefin-login-form__title{font-size:var(--sefin-font-size-2xl, 1.5rem);font-weight:var(--sefin-font-weight-semibold, 600);margin-bottom:var(--sefin-spacing-xl, 32px);text-align:center}.sefin-login-form__form{display:flex;flex-direction:column;gap:var(--sefin-spacing-lg, 24px)}.sefin-login-form__error{padding:var(--sefin-spacing-md, 16px);background-color:#f443361a;color:var(--sefin-color-error);border-radius:var(--sefin-radius-md, 8px);font-size:var(--sefin-font-size-sm, .875rem)}.sefin-login-form__submit{width:100%;margin-top:var(--sefin-spacing-md, 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormFieldComponent, selector: "sefin-form-field", inputs: ["label", "hint", "error", "required", "disabled", "inputId", "inputType", "placeholder", "size"] }, { kind: "component", type: ButtonComponent, selector: "sefin-button", inputs: ["variant", "size", "disabled", "type", "class"], outputs: ["clicked"] }, { kind: "component", type: CardComponent, selector: "sefin-card", inputs: ["variant", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
762
- }
763
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LoginFormComponent, decorators: [{
764
- type: Component,
765
- args: [{ selector: 'sefin-login-form', standalone: true, imports: [CommonModule, FormsModule, FormFieldComponent, ButtonComponent, CardComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<sefin-card variant=\"elevated\" class=\"sefin-login-form\">\n <h2 class=\"sefin-login-form__title\">Sign In</h2>\n <form (ngSubmit)=\"onSubmit()\" class=\"sefin-login-form__form\">\n <sefin-form-field\n label=\"Email\"\n inputId=\"email\"\n inputType=\"email\"\n placeholder=\"Enter your email\"\n [required]=\"true\"\n [(ngModel)]=\"email\"\n name=\"email\"\n ></sefin-form-field>\n <sefin-form-field\n label=\"Password\"\n inputId=\"password\"\n inputType=\"password\"\n placeholder=\"Enter your password\"\n [required]=\"true\"\n [(ngModel)]=\"password\"\n name=\"password\"\n ></sefin-form-field>\n <div *ngIf=\"error\" class=\"sefin-login-form__error\">{{ error }}</div>\n <sefin-button\n type=\"submit\"\n variant=\"primary\"\n size=\"lg\"\n class=\"sefin-login-form__submit\"\n >\n Sign In\n </sefin-button>\n </form>\n</sefin-card>\n\n", styles: [".sefin-login-form{max-width:400px;width:100%}.sefin-login-form__title{font-size:var(--sefin-font-size-2xl, 1.5rem);font-weight:var(--sefin-font-weight-semibold, 600);margin-bottom:var(--sefin-spacing-xl, 32px);text-align:center}.sefin-login-form__form{display:flex;flex-direction:column;gap:var(--sefin-spacing-lg, 24px)}.sefin-login-form__error{padding:var(--sefin-spacing-md, 16px);background-color:#f443361a;color:var(--sefin-color-error);border-radius:var(--sefin-radius-md, 8px);font-size:var(--sefin-font-size-sm, .875rem)}.sefin-login-form__submit{width:100%;margin-top:var(--sefin-spacing-md, 16px)}\n"] }]
766
- }], propDecorators: { submit: [{
767
- type: Output
768
- }] } });
769
-
770
- class ToolbarComponent {
771
- title = '';
772
- actions = [];
773
- actionClick = new EventEmitter();
774
- onActionClick(action) {
775
- action.action();
776
- this.actionClick.emit(action);
777
- }
778
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
779
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: ToolbarComponent, isStandalone: true, selector: "sefin-toolbar", inputs: { title: "title", actions: "actions" }, outputs: { actionClick: "actionClick" }, ngImport: i0, template: "<div class=\"sefin-toolbar\">\n <h2 *ngIf=\"title\" class=\"sefin-toolbar__title\">{{ title }}</h2>\n <div class=\"sefin-toolbar__actions\">\n <sefin-button\n *ngFor=\"let action of actions\"\n [variant]=\"action.variant || 'primary'\"\n size=\"md\"\n (clicked)=\"onActionClick(action)\"\n >\n <sefin-icon *ngIf=\"action.icon\" [name]=\"action.icon\" size=\"sm\"></sefin-icon>\n {{ action.label }}\n </sefin-button>\n </div>\n</div>\n\n", styles: [".sefin-toolbar{display:flex;align-items:center;justify-content:space-between;padding:var(--sefin-spacing-lg, 24px);background-color:var(--sefin-color-background-elevated);border-bottom:1px solid var(--sefin-color-border)}.sefin-toolbar__title{font-size:var(--sefin-font-size-xl, 1.25rem);font-weight:var(--sefin-font-weight-semibold, 600);color:var(--sefin-color-text);margin:0}.sefin-toolbar__actions{display:flex;align-items:center;gap:var(--sefin-spacing-md, 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "sefin-button", inputs: ["variant", "size", "disabled", "type", "class"], outputs: ["clicked"] }, { kind: "component", type: IconComponent, selector: "sefin-icon", inputs: ["name", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
780
- }
781
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ToolbarComponent, decorators: [{
782
- type: Component,
783
- args: [{ selector: 'sefin-toolbar', standalone: true, imports: [CommonModule, ButtonComponent, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sefin-toolbar\">\n <h2 *ngIf=\"title\" class=\"sefin-toolbar__title\">{{ title }}</h2>\n <div class=\"sefin-toolbar__actions\">\n <sefin-button\n *ngFor=\"let action of actions\"\n [variant]=\"action.variant || 'primary'\"\n size=\"md\"\n (clicked)=\"onActionClick(action)\"\n >\n <sefin-icon *ngIf=\"action.icon\" [name]=\"action.icon\" size=\"sm\"></sefin-icon>\n {{ action.label }}\n </sefin-button>\n </div>\n</div>\n\n", styles: [".sefin-toolbar{display:flex;align-items:center;justify-content:space-between;padding:var(--sefin-spacing-lg, 24px);background-color:var(--sefin-color-background-elevated);border-bottom:1px solid var(--sefin-color-border)}.sefin-toolbar__title{font-size:var(--sefin-font-size-xl, 1.25rem);font-weight:var(--sefin-font-weight-semibold, 600);color:var(--sefin-color-text);margin:0}.sefin-toolbar__actions{display:flex;align-items:center;gap:var(--sefin-spacing-md, 16px)}\n"] }]
784
- }], propDecorators: { title: [{
785
- type: Input
786
- }], actions: [{
787
- type: Input
788
- }], actionClick: [{
789
- type: Output
790
- }] } });
791
-
792
- /**
793
- * Organisms index
794
- */
795
-
796
490
  /*
797
- * Public API Surface of @sefin/sefin-ui
491
+ * Public API Surface of @lesterarte/sefin-ui
798
492
  */
799
493
  // Design Tokens
800
494
  // Styles (for importing in consuming apps)
@@ -804,5 +498,5 @@ const STYLES_PATH = './styles/index.scss';
804
498
  * Generated bundle index. Do not edit.
805
499
  */
806
500
 
807
- export { BORDER_RADIUS_TOKENS, BRAND_THEME, ButtonComponent, COLOR_TOKENS, CardComponent, DARK_THEME, DESIGN_TOKENS, DropdownComponent, FormFieldComponent, HeaderComponent, IconComponent, InputComponent, LIGHT_THEME, LoginFormComponent, SHADOW_TOKENS, SPACING_TOKENS, STYLES_PATH, TYPOGRAPHY_TOKENS, ThemeLoader, ToolbarComponent };
501
+ export { BORDER_RADIUS_TOKENS, BRAND_THEME, ButtonComponent, COLOR_TOKENS, DARK_THEME, DESIGN_TOKENS, LIGHT_THEME, SHADOW_TOKENS, SPACING_TOKENS, STYLES_PATH, TYPOGRAPHY_TOKENS, ThemeLoader };
808
502
  //# sourceMappingURL=lesterarte-sefin-ui.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"lesterarte-sefin-ui.mjs","sources":["../../../src/tokens/colors.ts","../../../src/tokens/spacing.ts","../../../src/tokens/typography.ts","../../../src/tokens/border-radius.ts","../../../src/tokens/shadow.ts","../../../src/tokens/index.ts","../../../src/themes/light-theme.ts","../../../src/themes/dark-theme.ts","../../../src/themes/brand-theme.ts","../../../src/themes/index.ts","../../../src/utils/theme-loader.ts","../../../src/utils/index.ts","../../../src/shared/types.ts","../../../src/shared/index.ts","../../../src/atoms/button/button.component.ts","../../../src/atoms/button/button.component.html","../../../src/atoms/icon/icon.component.ts","../../../src/atoms/icon/icon.component.html","../../../src/atoms/input/input.component.ts","../../../src/atoms/input/input.component.html","../../../src/atoms/index.ts","../../../src/molecules/form-field/form-field.component.ts","../../../src/molecules/form-field/form-field.component.html","../../../src/molecules/dropdown/dropdown.component.ts","../../../src/molecules/dropdown/dropdown.component.html","../../../src/molecules/card/card.component.ts","../../../src/molecules/card/card.component.html","../../../src/molecules/index.ts","../../../src/organisms/header/header.component.ts","../../../src/organisms/header/header.component.html","../../../src/organisms/login-form/login-form.component.ts","../../../src/organisms/login-form/login-form.component.html","../../../src/organisms/toolbar/toolbar.component.ts","../../../src/organisms/toolbar/toolbar.component.html","../../../src/organisms/index.ts","../../../src/public-api.ts","../../../src/lesterarte-sefin-ui.ts"],"sourcesContent":["/**\n * Color design tokens as TypeScript constants\n * Based on Secretaría de Finanzas brand guidelines\n * These values are the source of truth for all color tokens\n */\n\nexport const COLOR_TOKENS = {\n // Primary colors - Secretaría de Finanzas brand colors\n primary: {\n // Light Blue (Azul Claro) - Primary brand color\n 50: '#e6f7fb',\n 100: '#b3e5f0',\n 200: '#80d3e5',\n 300: '#4dc1da',\n 400: '#2ab0cf',\n 500: '#55C3D8', // Primary Light Blue from brand guidelines\n 600: '#4aafc4',\n 700: '#3f9bb0',\n 800: '#34879c',\n 900: '#297388',\n },\n // Secondary colors - Grays from brand guidelines\n secondary: {\n // Based on Dark Gray and Light Gray from brand\n 50: '#f5f5f5',\n 100: '#e8e8e8',\n 200: '#cecece', // Light Gray from brand guidelines\n 300: '#b5b5b5',\n 400: '#9b9b9b',\n 500: '#828282',\n 600: '#686868',\n 700: '#4f4f4f',\n 800: '#383838', // Dark Gray from brand guidelines\n 900: '#2a2a2a',\n },\n // Neutral colors - Based on brand grays\n neutral: {\n 50: '#ffffff', // White from brand guidelines\n 100: '#f5f5f5',\n 200: '#cecece', // Light Gray\n 300: '#b5b5b5',\n 400: '#9b9b9b',\n 500: '#828282',\n 600: '#686868',\n 700: '#4f4f4f',\n 800: '#383838', // Dark Gray\n 900: '#2a2a2a',\n },\n // Semantic colors - Keeping standard semantic colors\n success: {\n 50: '#e8f5e9',\n 100: '#c8e6c9',\n 200: '#a5d6a7',\n 300: '#81c784',\n 400: '#66bb6a',\n 500: '#4caf50',\n 600: '#43a047',\n 700: '#388e3c',\n 800: '#2e7d32',\n 900: '#1b5e20',\n },\n warning: {\n 50: '#fff3e0',\n 100: '#ffe0b2',\n 200: '#ffcc80',\n 300: '#ffb74d',\n 400: '#ffa726',\n 500: '#ff9800',\n 600: '#fb8c00',\n 700: '#f57c00',\n 800: '#ef6c00',\n 900: '#e65100',\n },\n error: {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n },\n info: {\n 50: '#e0f2f1',\n 100: '#b2dfdb',\n 200: '#80cbc4',\n 300: '#4db6ac',\n 400: '#26a69a',\n 500: '#009688',\n 600: '#00897b',\n 700: '#00796b',\n 800: '#00695c',\n 900: '#004d40',\n },\n // Brand-specific colors\n brand: {\n darkGray: '#383838', // Dark Gray from brand guidelines\n lightGray: '#cecece', // Light Gray from brand guidelines\n lightBlue: '#55C3D8', // Light Blue from brand guidelines\n white: '#ffffff', // White from brand guidelines\n },\n} as const;\n\n/**\n * Color token names for CSS variable generation\n */\nexport type ColorTokenName =\n | 'primary'\n | 'secondary'\n | 'neutral'\n | 'success'\n | 'warning'\n | 'error'\n | 'info'\n | 'brand';\n\nexport type ColorShade = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\n","/**\n * Spacing design tokens\n * Based on 8px grid system\n */\n\nexport const SPACING_TOKENS = {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n '2xl': '48px',\n '3xl': '64px',\n '4xl': '96px',\n '5xl': '128px',\n} as const;\n\nexport type SpacingToken = keyof typeof SPACING_TOKENS;\n\n","/**\n * Typography design tokens\n * Based on Secretaría de Finanzas brand guidelines - Pluto typeface\n */\n\nexport const TYPOGRAPHY_TOKENS = {\n fontFamily: {\n base: \"'Pluto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n mono: \"'Fira Code', 'Courier New', monospace\",\n },\n fontSize: {\n xs: '0.75rem', // 12px\n sm: '0.875rem', // 14px\n base: '1rem', // 16px\n lg: '1.125rem', // 18px\n xl: '1.25rem', // 20px\n '2xl': '1.5rem', // 24px\n '3xl': '1.875rem', // 30px\n '4xl': '2.25rem', // 36px\n '5xl': '3rem', // 48px\n },\n fontWeight: {\n light: 300, // Pluto-Light\n normal: 400, // Pluto-Regular\n medium: 500,\n semibold: 600,\n bold: 700, // Pluto-Bold\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n} as const;\n\nexport type TypographyToken = keyof typeof TYPOGRAPHY_TOKENS;\n","/**\n * Border radius design tokens\n */\n\nexport const BORDER_RADIUS_TOKENS = {\n none: '0',\n sm: '4px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n '2xl': '24px',\n full: '9999px',\n} as const;\n\nexport type BorderRadiusToken = keyof typeof BORDER_RADIUS_TOKENS;\n\n","/**\n * Shadow design tokens\n */\n\nexport const SHADOW_TOKENS = {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n} as const;\n\nexport type ShadowToken = keyof typeof SHADOW_TOKENS;\n\n","/**\n * Design tokens index\n * Central export for all design tokens\n */\n\nexport * from './colors';\nexport * from './spacing';\nexport * from './typography';\nexport * from './border-radius';\nexport * from './shadow';\n\n/**\n * All design tokens combined\n */\nexport const DESIGN_TOKENS = {\n colors: () => import('./colors').then(m => m.COLOR_TOKENS),\n spacing: () => import('./spacing').then(m => m.SPACING_TOKENS),\n typography: () => import('./typography').then(m => m.TYPOGRAPHY_TOKENS),\n borderRadius: () => import('./border-radius').then(m => m.BORDER_RADIUS_TOKENS),\n shadow: () => import('./shadow').then(m => m.SHADOW_TOKENS),\n};\n\n","import { COLOR_TOKENS } from '../tokens/colors';\n\n/**\n * Light theme configuration\n * Based on Secretaría de Finanzas brand colors\n */\nexport const LIGHT_THEME = {\n name: 'light',\n colors: {\n // Primary color is Light Blue from brand\n primary: COLOR_TOKENS.brand.lightBlue,\n 'primary-dark': COLOR_TOKENS.primary[700],\n 'primary-light': COLOR_TOKENS.primary[300],\n // Secondary uses Dark Gray\n secondary: COLOR_TOKENS.brand.darkGray,\n 'secondary-dark': COLOR_TOKENS.secondary[900],\n 'secondary-light': COLOR_TOKENS.secondary[600],\n // Background uses White and Light Gray\n background: COLOR_TOKENS.brand.white,\n 'background-elevated': COLOR_TOKENS.brand.white,\n surface: COLOR_TOKENS.brand.white,\n 'surface-hover': COLOR_TOKENS.brand.lightGray,\n // Text uses Dark Gray\n text: COLOR_TOKENS.brand.darkGray,\n 'text-secondary': COLOR_TOKENS.secondary[600],\n 'text-disabled': COLOR_TOKENS.secondary[400],\n // Borders use Light Gray\n border: COLOR_TOKENS.brand.lightGray,\n 'border-focus': COLOR_TOKENS.brand.lightBlue,\n // Semantic colors\n success: COLOR_TOKENS.success[500],\n warning: COLOR_TOKENS.warning[500],\n error: COLOR_TOKENS.error[500],\n info: COLOR_TOKENS.info[500],\n },\n} as const;\n","import { COLOR_TOKENS } from '../tokens/colors';\n\n/**\n * Dark theme configuration\n * Based on Secretaría de Finanzas brand colors (inverted)\n */\nexport const DARK_THEME = {\n name: 'dark',\n colors: {\n // Primary color remains Light Blue\n primary: COLOR_TOKENS.brand.lightBlue,\n 'primary-dark': COLOR_TOKENS.primary[300],\n 'primary-light': COLOR_TOKENS.primary[700],\n // Secondary uses Light Gray for contrast\n secondary: COLOR_TOKENS.brand.lightGray,\n 'secondary-dark': COLOR_TOKENS.secondary[400],\n 'secondary-light': COLOR_TOKENS.secondary[200],\n // Background uses Dark Gray\n background: COLOR_TOKENS.brand.darkGray,\n 'background-elevated': COLOR_TOKENS.secondary[700],\n surface: COLOR_TOKENS.secondary[700],\n 'surface-hover': COLOR_TOKENS.secondary[600],\n // Text uses White and Light Gray\n text: COLOR_TOKENS.brand.white,\n 'text-secondary': COLOR_TOKENS.brand.lightGray,\n 'text-disabled': COLOR_TOKENS.secondary[500],\n // Borders use medium gray\n border: COLOR_TOKENS.secondary[600],\n 'border-focus': COLOR_TOKENS.brand.lightBlue,\n // Semantic colors\n success: COLOR_TOKENS.success[400],\n warning: COLOR_TOKENS.warning[400],\n error: COLOR_TOKENS.error[400],\n info: COLOR_TOKENS.info[400],\n },\n} as const;\n","import { COLOR_TOKENS } from '../tokens/colors';\n\n/**\n * Brand theme configuration\n * Exact colors from Secretaría de Finanzas brand guidelines\n */\nexport const BRAND_THEME = {\n name: 'brand',\n colors: {\n // Primary: Light Blue from brand guidelines\n primary: COLOR_TOKENS.brand.lightBlue, // #55C3D8\n 'primary-dark': COLOR_TOKENS.primary[700],\n 'primary-light': COLOR_TOKENS.primary[300],\n // Secondary: Dark Gray from brand guidelines\n secondary: COLOR_TOKENS.brand.darkGray, // #383838\n 'secondary-dark': COLOR_TOKENS.secondary[900],\n 'secondary-light': COLOR_TOKENS.secondary[600],\n // Background: White from brand guidelines\n background: COLOR_TOKENS.brand.white, // #ffffff\n 'background-elevated': COLOR_TOKENS.brand.white,\n surface: COLOR_TOKENS.brand.white,\n 'surface-hover': COLOR_TOKENS.brand.lightGray, // #cecece\n // Text: Dark Gray from brand guidelines\n text: COLOR_TOKENS.brand.darkGray, // #383838\n 'text-secondary': COLOR_TOKENS.secondary[600],\n 'text-disabled': COLOR_TOKENS.secondary[400],\n // Border: Light Gray from brand guidelines\n border: COLOR_TOKENS.brand.lightGray, // #cecece\n 'border-focus': COLOR_TOKENS.brand.lightBlue, // #55C3D8\n // Semantic colors\n success: COLOR_TOKENS.success[500],\n warning: COLOR_TOKENS.warning[500],\n error: COLOR_TOKENS.error[500],\n info: COLOR_TOKENS.info[500],\n },\n} as const;\n","/**\n * Themes index\n */\nexport * from './light-theme';\nexport * from './dark-theme';\nexport * from './brand-theme';\n\nexport type Theme = 'light' | 'dark' | 'brand';\n\n","import { LIGHT_THEME } from '../themes/light-theme';\nimport { DARK_THEME } from '../themes/dark-theme';\nimport { BRAND_THEME } from '../themes/brand-theme';\nimport { SPACING_TOKENS } from '../tokens/spacing';\nimport { TYPOGRAPHY_TOKENS } from '../tokens/typography';\nimport { BORDER_RADIUS_TOKENS } from '../tokens/border-radius';\nimport { SHADOW_TOKENS } from '../tokens/shadow';\nimport type { Theme } from '../themes';\n\n/**\n * Theme loader utility\n * Generates CSS variables from design tokens\n */\nexport class ThemeLoader {\n /**\n * Load a theme and apply it to the document root\n */\n static loadTheme(themeName: Theme = 'light'): void {\n const theme = this.getTheme(themeName);\n const root = document.documentElement;\n\n // Apply color tokens\n Object.entries(theme.colors).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-color-${key}`, value);\n });\n\n // Apply spacing tokens\n Object.entries(SPACING_TOKENS).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-spacing-${key}`, value);\n });\n\n // Apply typography tokens\n Object.entries(TYPOGRAPHY_TOKENS.fontFamily).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-font-family-${key}`, value);\n });\n Object.entries(TYPOGRAPHY_TOKENS.fontSize).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-font-size-${key}`, value);\n });\n Object.entries(TYPOGRAPHY_TOKENS.fontWeight).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-font-weight-${key}`, String(value));\n });\n Object.entries(TYPOGRAPHY_TOKENS.lineHeight).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-line-height-${key}`, String(value));\n });\n\n // Apply border radius tokens\n Object.entries(BORDER_RADIUS_TOKENS).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-radius-${key}`, value);\n });\n\n // Apply shadow tokens\n Object.entries(SHADOW_TOKENS).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-shadow-${key}`, value);\n });\n\n // Set theme attribute for CSS selectors\n root.setAttribute('data-theme', themeName);\n }\n\n /**\n * Get theme configuration by name\n */\n private static getTheme(themeName: Theme) {\n switch (themeName) {\n case 'dark':\n return DARK_THEME;\n case 'brand':\n return BRAND_THEME;\n case 'light':\n default:\n return LIGHT_THEME;\n }\n }\n\n /**\n * Get all CSS variables as a string (useful for SSR or static generation)\n */\n static getThemeCSS(themeName: Theme = 'light'): string {\n const theme = this.getTheme(themeName);\n let css = ':root {\\n';\n\n // Color tokens\n Object.entries(theme.colors).forEach(([key, value]) => {\n css += ` --sefin-color-${key}: ${value};\\n`;\n });\n\n // Spacing tokens\n Object.entries(SPACING_TOKENS).forEach(([key, value]) => {\n css += ` --sefin-spacing-${key}: ${value};\\n`;\n });\n\n // Typography tokens\n Object.entries(TYPOGRAPHY_TOKENS.fontFamily).forEach(([key, value]) => {\n css += ` --sefin-font-family-${key}: ${value};\\n`;\n });\n Object.entries(TYPOGRAPHY_TOKENS.fontSize).forEach(([key, value]) => {\n css += ` --sefin-font-size-${key}: ${value};\\n`;\n });\n Object.entries(TYPOGRAPHY_TOKENS.fontWeight).forEach(([key, value]) => {\n css += ` --sefin-font-weight-${key}: ${value};\\n`;\n });\n Object.entries(TYPOGRAPHY_TOKENS.lineHeight).forEach(([key, value]) => {\n css += ` --sefin-line-height-${key}: ${value};\\n`;\n });\n\n // Border radius tokens\n Object.entries(BORDER_RADIUS_TOKENS).forEach(([key, value]) => {\n css += ` --sefin-radius-${key}: ${value};\\n`;\n });\n\n // Shadow tokens\n Object.entries(SHADOW_TOKENS).forEach(([key, value]) => {\n css += ` --sefin-shadow-${key}: ${value};\\n`;\n });\n\n css += '}\\n';\n return css;\n }\n}\n\n","/**\n * Utilities index\n */\nexport * from './theme-loader';\n\n","/**\n * Shared types and interfaces\n */\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\nexport type InputSize = 'sm' | 'md' | 'lg';\nexport type CardVariant = 'default' | 'elevated' | 'outlined';\n\nexport interface BaseComponent {\n disabled?: boolean;\n class?: string;\n}\n\n","/**\n * Shared index\n */\nexport * from './types';\n\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonVariant, ButtonSize } from '../../shared/types';\n\n@Component({\n selector: 'sefin-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent {\n @Input() variant: ButtonVariant = 'primary';\n @Input() size: ButtonSize = 'md';\n @Input() disabled = false;\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() class = '';\n\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n onClick(event: MouseEvent): void {\n if (!this.disabled) {\n this.clicked.emit(event);\n }\n }\n\n get buttonClasses(): string {\n return [\n 'sefin-button',\n `sefin-button--${this.variant}`,\n `sefin-button--${this.size}`,\n this.disabled ? 'sefin-button--disabled' : '',\n this.class,\n ]\n .filter(Boolean)\n .join(' ');\n }\n}\n\n","<button [type]=\"type\" [disabled]=\"disabled\" [class]=\"buttonClasses\" (click)=\"onClick($event)\">\n <ng-content></ng-content>\n</button>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'sefin-icon',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconComponent {\n @Input() name = '';\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() class = '';\n\n get iconClasses(): string {\n return [\n 'sefin-icon',\n `sefin-icon--${this.size}`,\n this.class,\n ]\n .filter(Boolean)\n .join(' ');\n }\n}\n\n","<span [class]=\"iconClasses\" [attr.aria-label]=\"name\">\n <ng-content></ng-content>\n</span>\n\n","import { Component, Input, Output, EventEmitter, forwardRef, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { InputSize } from '../../shared/types';\n\n@Component({\n selector: 'sefin-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n ],\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputComponent implements ControlValueAccessor {\n @Input() type: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' = 'text';\n @Input() placeholder = '';\n @Input() size: InputSize = 'md';\n @Input() disabled = false;\n @Input() required = false;\n @Input() readonly = false;\n @Input() class = '';\n @Input() id = '';\n\n @Output() blur = new EventEmitter<FocusEvent>();\n @Output() focus = new EventEmitter<FocusEvent>();\n\n value = '';\n private onChange = (value: string) => {};\n private onTouched = () => {};\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value = target.value;\n this.onChange(this.value);\n }\n\n onBlur(event: FocusEvent): void {\n this.onTouched();\n this.blur.emit(event);\n }\n\n onFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n writeValue(value: string): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n get inputClasses(): string {\n return [\n 'sefin-input',\n `sefin-input--${this.size}`,\n this.disabled ? 'sefin-input--disabled' : '',\n this.class,\n ]\n .filter(Boolean)\n .join(' ');\n }\n}\n\n","<input\n [type]=\"type\"\n [id]=\"id\"\n [class]=\"inputClasses\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n/>\n\n","/**\n * Atoms index\n */\nexport * from './button/button.component';\nexport * from './icon/icon.component';\nexport * from './input/input.component';\n\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputComponent } from '../../atoms/input/input.component';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'sefin-form-field',\n standalone: true,\n imports: [CommonModule, InputComponent, FormsModule],\n templateUrl: './form-field.component.html',\n styleUrls: ['./form-field.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormFieldComponent {\n @Input() label = '';\n @Input() hint = '';\n @Input() error = '';\n @Input() required = false;\n @Input() disabled = false;\n @Input() inputId = '';\n @Input() inputType: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' = 'text';\n @Input() placeholder = '';\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n}\n\n","<div class=\"sefin-form-field\">\n <label *ngIf=\"label\" [for]=\"inputId\" class=\"sefin-form-field__label\">\n {{ label }}\n <span *ngIf=\"required\" class=\"sefin-form-field__required\">*</span>\n </label>\n <sefin-input\n [id]=\"inputId\"\n [type]=\"inputType\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [size]=\"size\"\n [class.sefin-form-field__input--error]=\"!!error\"\n ></sefin-input>\n <div *ngIf=\"hint && !error\" class=\"sefin-form-field__hint\">{{ hint }}</div>\n <div *ngIf=\"error\" class=\"sefin-form-field__error\">{{ error }}</div>\n</div>\n\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent } from '../../atoms/button/button.component';\n\nexport interface DropdownOption {\n label: string;\n value: any;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'sefin-dropdown',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownComponent {\n @Input() options: DropdownOption[] = [];\n @Input() placeholder = 'Select an option';\n @Input() disabled = false;\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n\n @Output() selectionChange = new EventEmitter<any>();\n\n isOpen = false;\n selectedOption: DropdownOption | null = null;\n\n toggle(): void {\n if (!this.disabled) {\n this.isOpen = !this.isOpen;\n }\n }\n\n selectOption(option: DropdownOption): void {\n if (!option.disabled) {\n this.selectedOption = option;\n this.isOpen = false;\n this.selectionChange.emit(option.value);\n }\n }\n\n get displayText(): string {\n return this.selectedOption?.label || this.placeholder;\n }\n}\n\n","<div class=\"sefin-dropdown\" [class.sefin-dropdown--open]=\"isOpen\">\n <sefin-button\n [variant]=\"'outline'\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n (clicked)=\"toggle()\"\n class=\"sefin-dropdown__trigger\"\n >\n {{ displayText }}\n <span class=\"sefin-dropdown__arrow\">▼</span>\n </sefin-button>\n <div *ngIf=\"isOpen\" class=\"sefin-dropdown__menu\">\n <button\n *ngFor=\"let option of options\"\n [class.sefin-dropdown__option--disabled]=\"option.disabled\"\n [class.sefin-dropdown__option--selected]=\"selectedOption?.value === option.value\"\n class=\"sefin-dropdown__option\"\n (click)=\"selectOption(option)\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </button>\n </div>\n</div>\n\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CardVariant } from '../../shared/types';\n\n@Component({\n selector: 'sefin-card',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardComponent {\n @Input() variant: CardVariant = 'default';\n @Input() class = '';\n\n get cardClasses(): string {\n return [\n 'sefin-card',\n `sefin-card--${this.variant}`,\n this.class,\n ]\n .filter(Boolean)\n .join(' ');\n }\n}\n\n","<div [class]=\"cardClasses\">\n <ng-content></ng-content>\n</div>\n\n","/**\n * Molecules index\n */\nexport * from './form-field/form-field.component';\nexport * from './dropdown/dropdown.component';\nexport * from './card/card.component';\n\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { IconComponent } from '../../atoms/icon/icon.component';\n\n@Component({\n selector: 'sefin-header',\n standalone: true,\n imports: [CommonModule, ButtonComponent, IconComponent],\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent {\n @Input() title = '';\n @Input() logo = '';\n @Input() showUserMenu = true;\n @Input() userName = '';\n\n @Output() logoClick = new EventEmitter<void>();\n @Output() menuClick = new EventEmitter<void>();\n @Output() userMenuClick = new EventEmitter<void>();\n}\n\n","<header class=\"sefin-header\">\n <div class=\"sefin-header__left\">\n <div *ngIf=\"logo\" class=\"sefin-header__logo\" (click)=\"logoClick.emit()\">\n <img [src]=\"logo\" [alt]=\"title\" />\n </div>\n <h1 *ngIf=\"title\" class=\"sefin-header__title\">{{ title }}</h1>\n </div>\n <div class=\"sefin-header__right\">\n <sefin-button\n *ngIf=\"showUserMenu\"\n variant=\"ghost\"\n size=\"md\"\n (clicked)=\"userMenuClick.emit()\"\n class=\"sefin-header__user-menu\"\n >\n <sefin-icon name=\"user\" size=\"md\"></sefin-icon>\n <span *ngIf=\"userName\">{{ userName }}</span>\n </sefin-button>\n <sefin-button\n variant=\"ghost\"\n size=\"md\"\n (clicked)=\"menuClick.emit()\"\n class=\"sefin-header__menu-button\"\n >\n <sefin-icon name=\"menu\" size=\"md\">☰</sefin-icon>\n </sefin-button>\n </div>\n</header>\n\n","import { Component, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FormFieldComponent } from '../../molecules/form-field/form-field.component';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { CardComponent } from '../../molecules/card/card.component';\n\nexport interface LoginCredentials {\n email: string;\n password: string;\n}\n\n@Component({\n selector: 'sefin-login-form',\n standalone: true,\n imports: [CommonModule, FormsModule, FormFieldComponent, ButtonComponent, CardComponent],\n templateUrl: './login-form.component.html',\n styleUrls: ['./login-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoginFormComponent {\n email = '';\n password = '';\n error = '';\n\n @Output() submit = new EventEmitter<LoginCredentials>();\n\n onSubmit(): void {\n if (this.email && this.password) {\n this.error = '';\n this.submit.emit({\n email: this.email,\n password: this.password,\n });\n } else {\n this.error = 'Please fill in all fields';\n }\n }\n}\n\n","<sefin-card variant=\"elevated\" class=\"sefin-login-form\">\n <h2 class=\"sefin-login-form__title\">Sign In</h2>\n <form (ngSubmit)=\"onSubmit()\" class=\"sefin-login-form__form\">\n <sefin-form-field\n label=\"Email\"\n inputId=\"email\"\n inputType=\"email\"\n placeholder=\"Enter your email\"\n [required]=\"true\"\n [(ngModel)]=\"email\"\n name=\"email\"\n ></sefin-form-field>\n <sefin-form-field\n label=\"Password\"\n inputId=\"password\"\n inputType=\"password\"\n placeholder=\"Enter your password\"\n [required]=\"true\"\n [(ngModel)]=\"password\"\n name=\"password\"\n ></sefin-form-field>\n <div *ngIf=\"error\" class=\"sefin-login-form__error\">{{ error }}</div>\n <sefin-button\n type=\"submit\"\n variant=\"primary\"\n size=\"lg\"\n class=\"sefin-login-form__submit\"\n >\n Sign In\n </sefin-button>\n </form>\n</sefin-card>\n\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { IconComponent } from '../../atoms/icon/icon.component';\n\nexport interface ToolbarAction {\n label: string;\n icon?: string;\n variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\n action: () => void;\n}\n\n@Component({\n selector: 'sefin-toolbar',\n standalone: true,\n imports: [CommonModule, ButtonComponent, IconComponent],\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarComponent {\n @Input() title = '';\n @Input() actions: ToolbarAction[] = [];\n\n @Output() actionClick = new EventEmitter<ToolbarAction>();\n\n onActionClick(action: ToolbarAction): void {\n action.action();\n this.actionClick.emit(action);\n }\n}\n\n","<div class=\"sefin-toolbar\">\n <h2 *ngIf=\"title\" class=\"sefin-toolbar__title\">{{ title }}</h2>\n <div class=\"sefin-toolbar__actions\">\n <sefin-button\n *ngFor=\"let action of actions\"\n [variant]=\"action.variant || 'primary'\"\n size=\"md\"\n (clicked)=\"onActionClick(action)\"\n >\n <sefin-icon *ngIf=\"action.icon\" [name]=\"action.icon\" size=\"sm\"></sefin-icon>\n {{ action.label }}\n </sefin-button>\n </div>\n</div>\n\n","/**\n * Organisms index\n */\nexport * from './header/header.component';\nexport * from './login-form/login-form.component';\nexport * from './toolbar/toolbar.component';\n\n","/*\n * Public API Surface of @sefin/sefin-ui\n */\n\n// Design Tokens\nexport * from './tokens';\n\n// Themes\nexport * from './themes';\n\n// Utilities\nexport * from './utils';\n\n// Shared\nexport * from './shared';\n\n// Atoms\nexport * from './atoms';\n\n// Molecules\nexport * from './molecules';\n\n// Organisms\nexport * from './organisms';\n\n// Styles (for importing in consuming apps)\nexport const STYLES_PATH = './styles/index.scss';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAAA;;;;AAIG;AAEI,MAAM,YAAY,GAAG;;AAE1B,IAAA,OAAO,EAAE;;AAEP,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;;AAED,IAAA,SAAS,EAAE;;AAET,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;;AAED,IAAA,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;AACb,QAAA,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;;AAED,IAAA,OAAO,EAAE;AACP,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;;AAED,IAAA,KAAK,EAAE;QACL,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,SAAS;AACjB,KAAA;;;;;;;;ACvGH;;;AAGG;AAEI,MAAM,cAAc,GAAG;AAC5B,IAAA,EAAE,EAAE,KAAK;AACT,IAAA,EAAE,EAAE,KAAK;AACT,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,KAAK,EAAE,OAAO;;;;;;;;ACdhB;;;AAGG;AAEI,MAAM,iBAAiB,GAAG;AAC/B,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,qGAAqG;AAC3G,QAAA,IAAI,EAAE,uCAAuC;AAC9C,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,EAAE,EAAE,SAAS;QACb,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,UAAU;QACd,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,MAAM;AACd,KAAA;AACD,IAAA,UAAU,EAAE;QACV,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;AACX,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,GAAG;AACV,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;;;;;;;;AChCH;;AAEG;AAEI,MAAM,oBAAoB,GAAG;AAClC,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,EAAE,EAAE,KAAK;AACT,IAAA,EAAE,EAAE,KAAK;AACT,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,IAAI,EAAE,QAAQ;;;;;;;;ACXhB;;AAEG;AAEI,MAAM,aAAa,GAAG;AAC3B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,EAAE,EAAE,iCAAiC;AACrC,IAAA,EAAE,EAAE,uEAAuE;AAC3E,IAAA,EAAE,EAAE,yEAAyE;AAC7E,IAAA,EAAE,EAAE,2EAA2E;AAC/E,IAAA,KAAK,EAAE,uCAAuC;;;;;;;;ACVhD;;;AAGG;AAQH;;AAEG;AACI,MAAM,aAAa,GAAG;AAC3B,IAAA,MAAM,EAAE,MAAM,sDAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AAC1D,IAAA,OAAO,EAAE,MAAM,uDAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;AAC9D,IAAA,UAAU,EAAE,MAAM,0DAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC;AACvE,IAAA,YAAY,EAAE,MAAM,4DAAyB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;AAC/E,IAAA,MAAM,EAAE,MAAM,sDAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;;;ACjB7D;;;AAGG;AACI,MAAM,WAAW,GAAG;AACzB,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,MAAM,EAAE;;AAEN,QAAA,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;AACrC,QAAA,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACzC,QAAA,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;;AAE1C,QAAA,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ;AACtC,QAAA,gBAAgB,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;AAC7C,QAAA,iBAAiB,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAE9C,QAAA,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK;AACpC,QAAA,qBAAqB,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK;AAC/C,QAAA,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK;AACjC,QAAA,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;;AAE7C,QAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ;AACjC,QAAA,gBAAgB,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;AAC7C,QAAA,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAE5C,QAAA,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;AACpC,QAAA,cAAc,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;;AAE5C,QAAA,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,QAAA,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,QAAA,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7B,KAAA;;;AChCH;;;AAGG;AACI,MAAM,UAAU,GAAG;AACxB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE;;AAEN,QAAA,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;AACrC,QAAA,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACzC,QAAA,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;;AAE1C,QAAA,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;AACvC,QAAA,gBAAgB,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;AAC7C,QAAA,iBAAiB,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAE9C,QAAA,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ;AACvC,QAAA,qBAAqB,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;AAClD,QAAA,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,QAAA,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAE5C,QAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK;AAC9B,QAAA,gBAAgB,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;AAC9C,QAAA,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAE5C,QAAA,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;AACnC,QAAA,cAAc,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;;AAE5C,QAAA,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,QAAA,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,QAAA,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7B,KAAA;;;AChCH;;;AAGG;AACI,MAAM,WAAW,GAAG;AACzB,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,MAAM,EAAE;;AAEN,QAAA,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;AACrC,QAAA,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACzC,QAAA,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;;AAE1C,QAAA,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ;AACtC,QAAA,gBAAgB,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;AAC7C,QAAA,iBAAiB,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAE9C,QAAA,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK;AACpC,QAAA,qBAAqB,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK;AAC/C,QAAA,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK;AACjC,QAAA,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;;AAE7C,QAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ;AACjC,QAAA,gBAAgB,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;AAC7C,QAAA,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAE5C,QAAA,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;AACpC,QAAA,cAAc,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;;AAE5C,QAAA,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,QAAA,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,QAAA,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7B,KAAA;;;AClCH;;AAEG;;ACOH;;;AAGG;MACU,WAAW,CAAA;AACtB;;AAEG;AACH,IAAA,OAAO,SAAS,CAAC,SAAA,GAAmB,OAAO,EAAA;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe;;AAGrC,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YACpD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAE,EAAE,KAAK,CAAC;AACvD,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YACtD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,gBAAA,EAAmB,GAAG,CAAA,CAAE,EAAE,KAAK,CAAC;AACzD,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YACpE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAAE,EAAE,KAAK,CAAC;AAC7D,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YAClE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE,EAAE,KAAK,CAAC;AAC3D,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpE,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpE,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YAC5D,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,EAAE,KAAK,CAAC;AACxD,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YACrD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,EAAE,KAAK,CAAC;AACxD,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC;IAC5C;AAEA;;AAEG;IACK,OAAO,QAAQ,CAAC,SAAgB,EAAA;QACtC,QAAQ,SAAS;AACf,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,UAAU;AACnB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,WAAW;AACpB,YAAA,KAAK,OAAO;AACZ,YAAA;AACE,gBAAA,OAAO,WAAW;;IAExB;AAEA;;AAEG;AACH,IAAA,OAAO,WAAW,CAAC,SAAA,GAAmB,OAAO,EAAA;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACtC,IAAI,GAAG,GAAG,WAAW;;AAGrB,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpD,YAAA,GAAG,IAAI,CAAA,gBAAA,EAAmB,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK;AAC9C,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACtD,YAAA,GAAG,IAAI,CAAA,kBAAA,EAAqB,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK;AAChD,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpE,YAAA,GAAG,IAAI,CAAA,sBAAA,EAAyB,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK;AACpD,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAClE,YAAA,GAAG,IAAI,CAAA,oBAAA,EAAuB,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK;AAClD,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpE,YAAA,GAAG,IAAI,CAAA,sBAAA,EAAyB,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK;AACpD,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpE,YAAA,GAAG,IAAI,CAAA,sBAAA,EAAyB,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK;AACpD,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC5D,YAAA,GAAG,IAAI,CAAA,iBAAA,EAAoB,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK;AAC/C,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACrD,YAAA,GAAG,IAAI,CAAA,iBAAA,EAAoB,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK;AAC/C,QAAA,CAAC,CAAC;QAEF,GAAG,IAAI,KAAK;AACZ,QAAA,OAAO,GAAG;IACZ;AACD;;ACtHD;;AAEG;;ACFH;;AAEG;;ACFH;;AAEG;;MCUU,eAAe,CAAA;IACjB,OAAO,GAAkB,SAAS;IAClC,IAAI,GAAe,IAAI;IACvB,QAAQ,GAAG,KAAK;IAChB,IAAI,GAAkC,QAAQ;IAC9C,KAAK,GAAG,EAAE;AAET,IAAA,OAAO,GAAG,IAAI,YAAY,EAAc;AAElD,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B;IACF;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO;YACL,cAAc;YACd,CAAA,cAAA,EAAiB,IAAI,CAAC,OAAO,CAAA,CAAE;YAC/B,CAAA,cAAA,EAAiB,IAAI,CAAC,IAAI,CAAA,CAAE;YAC5B,IAAI,CAAC,QAAQ,GAAG,wBAAwB,GAAG,EAAE;AAC7C,YAAA,IAAI,CAAC,KAAK;AACX;aACE,MAAM,CAAC,OAAO;aACd,IAAI,CAAC,GAAG,CAAC;IACd;uGAzBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ5B,kJAGA,EAAA,MAAA,EAAA,CAAA,w7DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDIY,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,kJAAA,EAAA,MAAA,EAAA,CAAA,w7DAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;;MERU,aAAa,CAAA;IACf,IAAI,GAAG,EAAE;IACT,IAAI,GAAuB,IAAI;IAC/B,KAAK,GAAG,EAAE;AAEnB,IAAA,IAAI,WAAW,GAAA;QACb,OAAO;YACL,YAAY;YACZ,CAAA,YAAA,EAAe,IAAI,CAAC,IAAI,CAAA,CAAE;AAC1B,YAAA,IAAI,CAAC,KAAK;AACX;aACE,MAAM,CAAC,OAAO;aACd,IAAI,CAAC,GAAG,CAAC;IACd;uGAbW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECX1B,qGAIA,EAAA,MAAA,EAAA,CAAA,mQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEY,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKX,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qGAAA,EAAA,MAAA,EAAA,CAAA,mQAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;;MEMU,cAAc,CAAA;IAChB,IAAI,GAA6D,MAAM;IACvE,WAAW,GAAG,EAAE;IAChB,IAAI,GAAc,IAAI;IACtB,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IAChB,KAAK,GAAG,EAAE;IACV,EAAE,GAAG,EAAE;AAEN,IAAA,IAAI,GAAG,IAAI,YAAY,EAAc;AACrC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAc;IAEhD,KAAK,GAAG,EAAE;AACF,IAAA,QAAQ,GAAG,CAAC,KAAa,KAAI,EAAE,CAAC;AAChC,IAAA,SAAS,GAAG,MAAK,EAAE,CAAC;AAE5B,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,MAAM,CAAC,KAAiB,EAAA;QACtB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACvB;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO;YACL,aAAa;YACb,CAAA,aAAA,EAAgB,IAAI,CAAC,IAAI,CAAA,CAAE;YAC3B,IAAI,CAAC,QAAQ,GAAG,uBAAuB,GAAG,EAAE;AAC5C,YAAA,IAAI,CAAC,KAAK;AACX;aACE,MAAM,CAAC,OAAO;aACd,IAAI,CAAC,GAAG,CAAC;IACd;uGAzDW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAXd;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfH,gTAcA,EAAA,MAAA,EAAA,CAAA,y9BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDNY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAYxB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAf1B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,SAAA,EACzB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,gTAAA,EAAA,MAAA,EAAA,CAAA,y9BAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;;AE/BH;;AAEG;;MCWU,kBAAkB,CAAA;IACpB,KAAK,GAAG,EAAE;IACV,IAAI,GAAG,EAAE;IACT,KAAK,GAAG,EAAE;IACV,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAG,EAAE;IACZ,SAAS,GAA6D,MAAM;IAC5E,WAAW,GAAG,EAAE;IAChB,IAAI,GAAuB,IAAI;uGAT7B,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,wQCb/B,koBAkBA,EAAA,MAAA,EAAA,CAAA,orBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,+KAAE,WAAW,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKxC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,EAAE,WAAW,CAAC,EAAA,eAAA,EAGnC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,koBAAA,EAAA,MAAA,EAAA,CAAA,orBAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEJU,iBAAiB,CAAA;IACnB,OAAO,GAAqB,EAAE;IAC9B,WAAW,GAAG,kBAAkB;IAChC,QAAQ,GAAG,KAAK;IAChB,IAAI,GAAuB,IAAI;AAE9B,IAAA,eAAe,GAAG,IAAI,YAAY,EAAO;IAEnD,MAAM,GAAG,KAAK;IACd,cAAc,GAA0B,IAAI;IAE5C,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;QAC5B;IACF;AAEA,IAAA,YAAY,CAAC,MAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACpB,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM;AAC5B,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACzC;IACF;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,IAAI,CAAC,WAAW;IACvD;uGA3BW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB9B,4xBAyBA,EAAA,MAAA,EAAA,CAAA,skCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZY,YAAY,gQAAE,eAAe,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAK5B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,eAAe,CAAC,EAAA,eAAA,EAGvB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4xBAAA,EAAA,MAAA,EAAA,CAAA,skCAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBAEA;;;MEZU,aAAa,CAAA;IACf,OAAO,GAAgB,SAAS;IAChC,KAAK,GAAG,EAAE;AAEnB,IAAA,IAAI,WAAW,GAAA;QACb,OAAO;YACL,YAAY;YACZ,CAAA,YAAA,EAAe,IAAI,CAAC,OAAO,CAAA,CAAE;AAC7B,YAAA,IAAI,CAAC,KAAK;AACX;aACE,MAAM,CAAC,OAAO;aACd,IAAI,CAAC,GAAG,CAAC;IACd;uGAZW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ1B,wEAIA,EAAA,MAAA,EAAA,CAAA,0cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDGY,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKX,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wEAAA,EAAA,MAAA,EAAA,CAAA,0cAAA,CAAA,EAAA;;sBAG9C;;sBACA;;;AEdH;;AAEG;;MCWU,eAAe,CAAA;IACjB,KAAK,GAAG,EAAE;IACV,IAAI,GAAG,EAAE;IACT,YAAY,GAAG,IAAI;IACnB,QAAQ,GAAG,EAAE;AAEZ,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;uGARvC,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,mQCb5B,i5BA6BA,EAAA,MAAA,EAAA,CAAA,kyBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,yIAAE,aAAa,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAK3C,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,eAAA,EAGtC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,i5BAAA,EAAA,MAAA,EAAA,CAAA,kyBAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MEDU,kBAAkB,CAAA;IAC7B,KAAK,GAAG,EAAE;IACV,QAAQ,GAAG,EAAE;IACb,KAAK,GAAG,EAAE;AAEA,IAAA,MAAM,GAAG,IAAI,YAAY,EAAoB;IAEvD,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,2BAA2B;QAC1C;IACF;uGAjBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpB/B,w8BAiCA,EAAA,MAAA,EAAA,CAAA,mmBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAK5E,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,eAAA,EAGvE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,w8BAAA,EAAA,MAAA,EAAA,CAAA,mmBAAA,CAAA,EAAA;;sBAO9C;;;MELU,gBAAgB,CAAA;IAClB,KAAK,GAAG,EAAE;IACV,OAAO,GAAoB,EAAE;AAE5B,IAAA,WAAW,GAAG,IAAI,YAAY,EAAiB;AAEzD,IAAA,aAAa,CAAC,MAAqB,EAAA;QACjC,MAAM,CAAC,MAAM,EAAE;AACf,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;uGATW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,kKCpB7B,geAeA,EAAA,MAAA,EAAA,CAAA,wdAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDAY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,yIAAE,aAAa,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAK3C,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAR5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,eAAA,EAGtC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,geAAA,EAAA,MAAA,EAAA,CAAA,wdAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBAEA;;;AExBH;;AAEG;;ACFH;;AAEG;AAEH;AAqBA;AACO,MAAM,WAAW,GAAG;;AC1B3B;;AAEG;;;;"}
1
+ {"version":3,"file":"lesterarte-sefin-ui.mjs","sources":["../../../src/tokens/colors.ts","../../../src/tokens/spacing.ts","../../../src/tokens/typography.ts","../../../src/tokens/border-radius.ts","../../../src/tokens/shadow.ts","../../../src/tokens/index.ts","../../../src/themes/light-theme.ts","../../../src/themes/dark-theme.ts","../../../src/themes/brand-theme.ts","../../../src/themes/index.ts","../../../src/utils/theme-loader.ts","../../../src/utils/index.ts","../../../src/shared/types.ts","../../../src/shared/index.ts","../../../src/atoms/button/button.component.ts","../../../src/atoms/button/button.component.html","../../../src/atoms/index.ts","../../../src/public-api.ts","../../../src/lesterarte-sefin-ui.ts"],"sourcesContent":["/**\n * Color design tokens as TypeScript constants\n * Based on Secretaría de Finanzas brand guidelines\n * These values are the source of truth for all color tokens\n */\n\nexport const COLOR_TOKENS = {\n // Primary colors - Secretaría de Finanzas brand colors\n primary: {\n // Light Blue (Azul Claro) - Primary brand color\n 50: '#e6f7fb',\n 100: '#b3e5f0',\n 200: '#80d3e5',\n 300: '#4dc1da',\n 400: '#2ab0cf',\n 500: '#55C3D8', // Primary Light Blue from brand guidelines\n 600: '#4aafc4',\n 700: '#3f9bb0',\n 800: '#34879c',\n 900: '#297388',\n },\n // Secondary colors - Grays from brand guidelines\n secondary: {\n // Based on Dark Gray and Light Gray from brand\n 50: '#f5f5f5',\n 100: '#e8e8e8',\n 200: '#cecece', // Light Gray from brand guidelines\n 300: '#b5b5b5',\n 400: '#9b9b9b',\n 500: '#828282',\n 600: '#686868',\n 700: '#4f4f4f',\n 800: '#383838', // Dark Gray from brand guidelines\n 900: '#2a2a2a',\n },\n // Neutral colors - Based on brand grays\n neutral: {\n 50: '#ffffff', // White from brand guidelines\n 100: '#f5f5f5',\n 200: '#cecece', // Light Gray\n 300: '#b5b5b5',\n 400: '#9b9b9b',\n 500: '#828282',\n 600: '#686868',\n 700: '#4f4f4f',\n 800: '#383838', // Dark Gray\n 900: '#2a2a2a',\n },\n // Semantic colors - Keeping standard semantic colors\n success: {\n 50: '#e8f5e9',\n 100: '#c8e6c9',\n 200: '#a5d6a7',\n 300: '#81c784',\n 400: '#66bb6a',\n 500: '#4caf50',\n 600: '#43a047',\n 700: '#388e3c',\n 800: '#2e7d32',\n 900: '#1b5e20',\n },\n warning: {\n 50: '#fff3e0',\n 100: '#ffe0b2',\n 200: '#ffcc80',\n 300: '#ffb74d',\n 400: '#ffa726',\n 500: '#ff9800',\n 600: '#fb8c00',\n 700: '#f57c00',\n 800: '#ef6c00',\n 900: '#e65100',\n },\n error: {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n },\n info: {\n 50: '#e0f2f1',\n 100: '#b2dfdb',\n 200: '#80cbc4',\n 300: '#4db6ac',\n 400: '#26a69a',\n 500: '#009688',\n 600: '#00897b',\n 700: '#00796b',\n 800: '#00695c',\n 900: '#004d40',\n },\n // Brand-specific colors\n brand: {\n darkGray: '#383838', // Dark Gray from brand guidelines\n lightGray: '#cecece', // Light Gray from brand guidelines\n lightBlue: '#55C3D8', // Light Blue from brand guidelines\n white: '#ffffff', // White from brand guidelines\n },\n} as const;\n\n/**\n * Color token names for CSS variable generation\n */\nexport type ColorTokenName =\n | 'primary'\n | 'secondary'\n | 'neutral'\n | 'success'\n | 'warning'\n | 'error'\n | 'info'\n | 'brand';\n\nexport type ColorShade = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\n","/**\n * Spacing design tokens\n * Based on 8px grid system\n */\n\nexport const SPACING_TOKENS = {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n '2xl': '48px',\n '3xl': '64px',\n '4xl': '96px',\n '5xl': '128px',\n} as const;\n\nexport type SpacingToken = keyof typeof SPACING_TOKENS;\n\n","/**\n * Typography design tokens\n * Based on Secretaría de Finanzas brand guidelines - Pluto typeface\n */\n\nexport const TYPOGRAPHY_TOKENS = {\n fontFamily: {\n base: \"'Pluto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n mono: \"'Fira Code', 'Courier New', monospace\",\n },\n fontSize: {\n xs: '0.75rem', // 12px\n sm: '0.875rem', // 14px\n base: '1rem', // 16px\n lg: '1.125rem', // 18px\n xl: '1.25rem', // 20px\n '2xl': '1.5rem', // 24px\n '3xl': '1.875rem', // 30px\n '4xl': '2.25rem', // 36px\n '5xl': '3rem', // 48px\n },\n fontWeight: {\n light: 300, // Pluto-Light\n normal: 400, // Pluto-Regular\n medium: 500,\n semibold: 600,\n bold: 700, // Pluto-Bold\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n} as const;\n\nexport type TypographyToken = keyof typeof TYPOGRAPHY_TOKENS;\n","/**\n * Border radius design tokens\n */\n\nexport const BORDER_RADIUS_TOKENS = {\n none: '0',\n sm: '4px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n '2xl': '24px',\n full: '9999px',\n} as const;\n\nexport type BorderRadiusToken = keyof typeof BORDER_RADIUS_TOKENS;\n\n","/**\n * Shadow design tokens\n */\n\nexport const SHADOW_TOKENS = {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n} as const;\n\nexport type ShadowToken = keyof typeof SHADOW_TOKENS;\n\n","/**\n * Design tokens index\n * Central export for all design tokens\n */\n\nexport * from './colors';\nexport * from './spacing';\nexport * from './typography';\nexport * from './border-radius';\nexport * from './shadow';\n\n/**\n * All design tokens combined\n */\nexport const DESIGN_TOKENS = {\n colors: () => import('./colors').then(m => m.COLOR_TOKENS),\n spacing: () => import('./spacing').then(m => m.SPACING_TOKENS),\n typography: () => import('./typography').then(m => m.TYPOGRAPHY_TOKENS),\n borderRadius: () => import('./border-radius').then(m => m.BORDER_RADIUS_TOKENS),\n shadow: () => import('./shadow').then(m => m.SHADOW_TOKENS),\n};\n\n","import { COLOR_TOKENS } from '../tokens/colors';\n\n/**\n * Light theme configuration\n * Based on Secretaría de Finanzas brand colors\n */\nexport const LIGHT_THEME = {\n name: 'light',\n colors: {\n // Primary color is Light Blue from brand\n primary: COLOR_TOKENS.brand.lightBlue,\n 'primary-dark': COLOR_TOKENS.primary[700],\n 'primary-light': COLOR_TOKENS.primary[300],\n // Secondary uses Dark Gray\n secondary: COLOR_TOKENS.brand.darkGray,\n 'secondary-dark': COLOR_TOKENS.secondary[900],\n 'secondary-light': COLOR_TOKENS.secondary[600],\n // Background uses White and Light Gray\n background: COLOR_TOKENS.brand.white,\n 'background-elevated': COLOR_TOKENS.brand.white,\n surface: COLOR_TOKENS.brand.white,\n 'surface-hover': COLOR_TOKENS.brand.lightGray,\n // Text uses Dark Gray\n text: COLOR_TOKENS.brand.darkGray,\n 'text-secondary': COLOR_TOKENS.secondary[600],\n 'text-disabled': COLOR_TOKENS.secondary[400],\n // Borders use Light Gray\n border: COLOR_TOKENS.brand.lightGray,\n 'border-focus': COLOR_TOKENS.brand.lightBlue,\n // Semantic colors\n success: COLOR_TOKENS.success[500],\n warning: COLOR_TOKENS.warning[500],\n error: COLOR_TOKENS.error[500],\n info: COLOR_TOKENS.info[500],\n },\n} as const;\n","import { COLOR_TOKENS } from '../tokens/colors';\n\n/**\n * Dark theme configuration\n * Based on Secretaría de Finanzas brand colors (inverted)\n */\nexport const DARK_THEME = {\n name: 'dark',\n colors: {\n // Primary color remains Light Blue\n primary: COLOR_TOKENS.brand.lightBlue,\n 'primary-dark': COLOR_TOKENS.primary[300],\n 'primary-light': COLOR_TOKENS.primary[700],\n // Secondary uses Light Gray for contrast\n secondary: COLOR_TOKENS.brand.lightGray,\n 'secondary-dark': COLOR_TOKENS.secondary[400],\n 'secondary-light': COLOR_TOKENS.secondary[200],\n // Background uses Dark Gray\n background: COLOR_TOKENS.brand.darkGray,\n 'background-elevated': COLOR_TOKENS.secondary[700],\n surface: COLOR_TOKENS.secondary[700],\n 'surface-hover': COLOR_TOKENS.secondary[600],\n // Text uses White and Light Gray\n text: COLOR_TOKENS.brand.white,\n 'text-secondary': COLOR_TOKENS.brand.lightGray,\n 'text-disabled': COLOR_TOKENS.secondary[500],\n // Borders use medium gray\n border: COLOR_TOKENS.secondary[600],\n 'border-focus': COLOR_TOKENS.brand.lightBlue,\n // Semantic colors\n success: COLOR_TOKENS.success[400],\n warning: COLOR_TOKENS.warning[400],\n error: COLOR_TOKENS.error[400],\n info: COLOR_TOKENS.info[400],\n },\n} as const;\n","import { COLOR_TOKENS } from '../tokens/colors';\n\n/**\n * Brand theme configuration\n * Exact colors from Secretaría de Finanzas brand guidelines\n */\nexport const BRAND_THEME = {\n name: 'brand',\n colors: {\n // Primary: Light Blue from brand guidelines\n primary: COLOR_TOKENS.brand.lightBlue, // #55C3D8\n 'primary-dark': COLOR_TOKENS.primary[700],\n 'primary-light': COLOR_TOKENS.primary[300],\n // Secondary: Dark Gray from brand guidelines\n secondary: COLOR_TOKENS.brand.darkGray, // #383838\n 'secondary-dark': COLOR_TOKENS.secondary[900],\n 'secondary-light': COLOR_TOKENS.secondary[600],\n // Background: White from brand guidelines\n background: COLOR_TOKENS.brand.white, // #ffffff\n 'background-elevated': COLOR_TOKENS.brand.white,\n surface: COLOR_TOKENS.brand.white,\n 'surface-hover': COLOR_TOKENS.brand.lightGray, // #cecece\n // Text: Dark Gray from brand guidelines\n text: COLOR_TOKENS.brand.darkGray, // #383838\n 'text-secondary': COLOR_TOKENS.secondary[600],\n 'text-disabled': COLOR_TOKENS.secondary[400],\n // Border: Light Gray from brand guidelines\n border: COLOR_TOKENS.brand.lightGray, // #cecece\n 'border-focus': COLOR_TOKENS.brand.lightBlue, // #55C3D8\n // Semantic colors\n success: COLOR_TOKENS.success[500],\n warning: COLOR_TOKENS.warning[500],\n error: COLOR_TOKENS.error[500],\n info: COLOR_TOKENS.info[500],\n },\n} as const;\n","/**\n * Themes index\n */\nexport * from './light-theme';\nexport * from './dark-theme';\nexport * from './brand-theme';\n\nexport type Theme = 'light' | 'dark' | 'brand';\n\n","import { LIGHT_THEME } from '../themes/light-theme';\nimport { DARK_THEME } from '../themes/dark-theme';\nimport { BRAND_THEME } from '../themes/brand-theme';\nimport { SPACING_TOKENS } from '../tokens/spacing';\nimport { TYPOGRAPHY_TOKENS } from '../tokens/typography';\nimport { BORDER_RADIUS_TOKENS } from '../tokens/border-radius';\nimport { SHADOW_TOKENS } from '../tokens/shadow';\nimport type { Theme } from '../themes';\n\n/**\n * Theme loader utility\n * Generates CSS variables from design tokens\n */\nexport class ThemeLoader {\n /**\n * Load a theme and apply it to the document root\n */\n static loadTheme(themeName: Theme = 'light'): void {\n const theme = this.getTheme(themeName);\n const root = document.documentElement;\n\n // Apply color tokens\n Object.entries(theme.colors).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-color-${key}`, value);\n });\n\n // Apply spacing tokens\n Object.entries(SPACING_TOKENS).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-spacing-${key}`, value);\n });\n\n // Apply typography tokens\n Object.entries(TYPOGRAPHY_TOKENS.fontFamily).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-font-family-${key}`, value);\n });\n Object.entries(TYPOGRAPHY_TOKENS.fontSize).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-font-size-${key}`, value);\n });\n Object.entries(TYPOGRAPHY_TOKENS.fontWeight).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-font-weight-${key}`, String(value));\n });\n Object.entries(TYPOGRAPHY_TOKENS.lineHeight).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-line-height-${key}`, String(value));\n });\n\n // Apply border radius tokens\n Object.entries(BORDER_RADIUS_TOKENS).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-radius-${key}`, value);\n });\n\n // Apply shadow tokens\n Object.entries(SHADOW_TOKENS).forEach(([key, value]) => {\n root.style.setProperty(`--sefin-shadow-${key}`, value);\n });\n\n // Set theme attribute for CSS selectors\n root.setAttribute('data-theme', themeName);\n }\n\n /**\n * Get theme configuration by name\n */\n private static getTheme(themeName: Theme) {\n switch (themeName) {\n case 'dark':\n return DARK_THEME;\n case 'brand':\n return BRAND_THEME;\n case 'light':\n default:\n return LIGHT_THEME;\n }\n }\n\n /**\n * Get all CSS variables as a string (useful for SSR or static generation)\n */\n static getThemeCSS(themeName: Theme = 'light'): string {\n const theme = this.getTheme(themeName);\n let css = ':root {\\n';\n\n // Color tokens\n Object.entries(theme.colors).forEach(([key, value]) => {\n css += ` --sefin-color-${key}: ${value};\\n`;\n });\n\n // Spacing tokens\n Object.entries(SPACING_TOKENS).forEach(([key, value]) => {\n css += ` --sefin-spacing-${key}: ${value};\\n`;\n });\n\n // Typography tokens\n Object.entries(TYPOGRAPHY_TOKENS.fontFamily).forEach(([key, value]) => {\n css += ` --sefin-font-family-${key}: ${value};\\n`;\n });\n Object.entries(TYPOGRAPHY_TOKENS.fontSize).forEach(([key, value]) => {\n css += ` --sefin-font-size-${key}: ${value};\\n`;\n });\n Object.entries(TYPOGRAPHY_TOKENS.fontWeight).forEach(([key, value]) => {\n css += ` --sefin-font-weight-${key}: ${value};\\n`;\n });\n Object.entries(TYPOGRAPHY_TOKENS.lineHeight).forEach(([key, value]) => {\n css += ` --sefin-line-height-${key}: ${value};\\n`;\n });\n\n // Border radius tokens\n Object.entries(BORDER_RADIUS_TOKENS).forEach(([key, value]) => {\n css += ` --sefin-radius-${key}: ${value};\\n`;\n });\n\n // Shadow tokens\n Object.entries(SHADOW_TOKENS).forEach(([key, value]) => {\n css += ` --sefin-shadow-${key}: ${value};\\n`;\n });\n\n css += '}\\n';\n return css;\n }\n}\n\n","/**\n * Utilities index\n */\nexport * from './theme-loader';\n\n","/**\n * Shared types and interfaces\n */\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\nexport type InputSize = 'sm' | 'md' | 'lg';\nexport type CardVariant = 'default' | 'elevated' | 'outlined';\n\nexport interface BaseComponent {\n disabled?: boolean;\n class?: string;\n}\n\n","/**\n * Shared index\n */\nexport * from './types';\n\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonVariant, ButtonSize } from '../../shared/types';\n\n@Component({\n selector: 'sefin-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent {\n @Input() variant: ButtonVariant = 'primary';\n @Input() size: ButtonSize = 'md';\n @Input() disabled = false;\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() class = '';\n\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n onClick(event: MouseEvent): void {\n if (!this.disabled) {\n this.clicked.emit(event);\n }\n }\n\n get buttonClasses(): string {\n return [\n 'sefin-button',\n `sefin-button--${this.variant}`,\n `sefin-button--${this.size}`,\n this.disabled ? 'sefin-button--disabled' : '',\n this.class,\n ]\n .filter(Boolean)\n .join(' ');\n }\n}\n\n","<button [type]=\"type\" [disabled]=\"disabled\" [class]=\"buttonClasses\" (click)=\"onClick($event)\">\n <ng-content></ng-content>\n</button>\n","/**\n * Atoms index\n */\nexport * from './button/button.component';\n\n","/*\n * Public API Surface of @lesterarte/sefin-ui\n */\n\n// Design Tokens\nexport * from './tokens';\n\n// Themes\nexport * from './themes';\n\n// Utilities\nexport * from './utils';\n\n// Shared\nexport * from './shared';\n\n// Atoms\nexport * from './atoms';\n\n// Styles (for importing in consuming apps)\nexport const STYLES_PATH = './styles/index.scss';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lesterarte/sefin-ui",
3
- "version": "0.0.3-dev.0",
3
+ "version": "0.0.3-dev.1",
4
4
  "description": "Sefin Design System - A comprehensive Angular UI library based on Atomic Design and design tokens",
5
5
  "keywords": [
6
6
  "angular",
@@ -1,6 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { EventEmitter } from '@angular/core';
3
- import { ControlValueAccessor } from '@angular/forms';
4
3
 
5
4
  /**
6
5
  * Color design tokens as TypeScript constants
@@ -481,125 +480,7 @@ declare class ButtonComponent {
481
480
  static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "sefin-button", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "type": { "alias": "type"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
482
481
  }
483
482
 
484
- declare class IconComponent {
485
- name: string;
486
- size: 'sm' | 'md' | 'lg';
487
- class: string;
488
- get iconClasses(): string;
489
- static ɵfac: i0.ɵɵFactoryDeclaration<IconComponent, never>;
490
- static ɵcmp: i0.ɵɵComponentDeclaration<IconComponent, "sefin-icon", never, { "name": { "alias": "name"; "required": false; }; "size": { "alias": "size"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
491
- }
492
-
493
- declare class InputComponent implements ControlValueAccessor {
494
- type: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';
495
- placeholder: string;
496
- size: InputSize;
497
- disabled: boolean;
498
- required: boolean;
499
- readonly: boolean;
500
- class: string;
501
- id: string;
502
- blur: EventEmitter<FocusEvent>;
503
- focus: EventEmitter<FocusEvent>;
504
- value: string;
505
- private onChange;
506
- private onTouched;
507
- onInput(event: Event): void;
508
- onBlur(event: FocusEvent): void;
509
- onFocus(event: FocusEvent): void;
510
- writeValue(value: string): void;
511
- registerOnChange(fn: (value: string) => void): void;
512
- registerOnTouched(fn: () => void): void;
513
- setDisabledState(isDisabled: boolean): void;
514
- get inputClasses(): string;
515
- static ɵfac: i0.ɵɵFactoryDeclaration<InputComponent, never>;
516
- static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "sefin-input", never, { "type": { "alias": "type"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "class": { "alias": "class"; "required": false; }; "id": { "alias": "id"; "required": false; }; }, { "blur": "blur"; "focus": "focus"; }, never, never, true, never>;
517
- }
518
-
519
- declare class FormFieldComponent {
520
- label: string;
521
- hint: string;
522
- error: string;
523
- required: boolean;
524
- disabled: boolean;
525
- inputId: string;
526
- inputType: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';
527
- placeholder: string;
528
- size: 'sm' | 'md' | 'lg';
529
- static ɵfac: i0.ɵɵFactoryDeclaration<FormFieldComponent, never>;
530
- static ɵcmp: i0.ɵɵComponentDeclaration<FormFieldComponent, "sefin-form-field", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "error": { "alias": "error"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "inputType": { "alias": "inputType"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
531
- }
532
-
533
- interface DropdownOption {
534
- label: string;
535
- value: any;
536
- disabled?: boolean;
537
- }
538
- declare class DropdownComponent {
539
- options: DropdownOption[];
540
- placeholder: string;
541
- disabled: boolean;
542
- size: 'sm' | 'md' | 'lg';
543
- selectionChange: EventEmitter<any>;
544
- isOpen: boolean;
545
- selectedOption: DropdownOption | null;
546
- toggle(): void;
547
- selectOption(option: DropdownOption): void;
548
- get displayText(): string;
549
- static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, never>;
550
- static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "sefin-dropdown", never, { "options": { "alias": "options"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
551
- }
552
-
553
- declare class CardComponent {
554
- variant: CardVariant;
555
- class: string;
556
- get cardClasses(): string;
557
- static ɵfac: i0.ɵɵFactoryDeclaration<CardComponent, never>;
558
- static ɵcmp: i0.ɵɵComponentDeclaration<CardComponent, "sefin-card", never, { "variant": { "alias": "variant"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
559
- }
560
-
561
- declare class HeaderComponent {
562
- title: string;
563
- logo: string;
564
- showUserMenu: boolean;
565
- userName: string;
566
- logoClick: EventEmitter<void>;
567
- menuClick: EventEmitter<void>;
568
- userMenuClick: EventEmitter<void>;
569
- static ɵfac: i0.ɵɵFactoryDeclaration<HeaderComponent, never>;
570
- static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "sefin-header", never, { "title": { "alias": "title"; "required": false; }; "logo": { "alias": "logo"; "required": false; }; "showUserMenu": { "alias": "showUserMenu"; "required": false; }; "userName": { "alias": "userName"; "required": false; }; }, { "logoClick": "logoClick"; "menuClick": "menuClick"; "userMenuClick": "userMenuClick"; }, never, never, true, never>;
571
- }
572
-
573
- interface LoginCredentials {
574
- email: string;
575
- password: string;
576
- }
577
- declare class LoginFormComponent {
578
- email: string;
579
- password: string;
580
- error: string;
581
- submit: EventEmitter<LoginCredentials>;
582
- onSubmit(): void;
583
- static ɵfac: i0.ɵɵFactoryDeclaration<LoginFormComponent, never>;
584
- static ɵcmp: i0.ɵɵComponentDeclaration<LoginFormComponent, "sefin-login-form", never, {}, { "submit": "submit"; }, never, never, true, never>;
585
- }
586
-
587
- interface ToolbarAction {
588
- label: string;
589
- icon?: string;
590
- variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';
591
- action: () => void;
592
- }
593
- declare class ToolbarComponent {
594
- title: string;
595
- actions: ToolbarAction[];
596
- actionClick: EventEmitter<ToolbarAction>;
597
- onActionClick(action: ToolbarAction): void;
598
- static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarComponent, never>;
599
- static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarComponent, "sefin-toolbar", never, { "title": { "alias": "title"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionClick": "actionClick"; }, never, never, true, never>;
600
- }
601
-
602
483
  declare const STYLES_PATH = "./styles/index.scss";
603
484
 
604
- export { BORDER_RADIUS_TOKENS, BRAND_THEME, ButtonComponent, COLOR_TOKENS, CardComponent, DARK_THEME, DESIGN_TOKENS, DropdownComponent, FormFieldComponent, HeaderComponent, IconComponent, InputComponent, LIGHT_THEME, LoginFormComponent, SHADOW_TOKENS, SPACING_TOKENS, STYLES_PATH, TYPOGRAPHY_TOKENS, ThemeLoader, ToolbarComponent };
605
- export type { BaseComponent, BorderRadiusToken, ButtonSize, ButtonVariant, CardVariant, ColorShade, ColorTokenName, DropdownOption, InputSize, LoginCredentials, ShadowToken, SpacingToken, Theme, ToolbarAction, TypographyToken };
485
+ export { BORDER_RADIUS_TOKENS, BRAND_THEME, ButtonComponent, COLOR_TOKENS, DARK_THEME, DESIGN_TOKENS, LIGHT_THEME, SHADOW_TOKENS, SPACING_TOKENS, STYLES_PATH, TYPOGRAPHY_TOKENS, ThemeLoader };
486
+ export type { BaseComponent, BorderRadiusToken, ButtonSize, ButtonVariant, CardVariant, ColorShade, ColorTokenName, InputSize, ShadowToken, SpacingToken, Theme, TypographyToken };