@lesterarte/sefin-ui 0.0.3-dev.1 → 0.0.3
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,77 +208,12 @@ 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)
|
|
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`:
|
|
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)
|
|
255
215
|
|
|
256
|
-
|
|
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.).
|
|
216
|
+
Nota: Debes incluir los archivos de fuente Pluto en tu proyecto.
|
|
282
217
|
|
|
283
218
|
## Desarrollo
|
|
284
219
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Output, Input, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { EventEmitter, Output, Input, ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/common';
|
|
3
4
|
import { CommonModule } from '@angular/common';
|
|
5
|
+
import * as i2 from '@angular/forms';
|
|
6
|
+
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
9
|
* Color design tokens as TypeScript constants
|
|
@@ -483,12 +486,315 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
483
486
|
type: Output
|
|
484
487
|
}] } });
|
|
485
488
|
|
|
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
|
+
|
|
486
604
|
/**
|
|
487
605
|
* Atoms index
|
|
488
606
|
*/
|
|
489
607
|
|
|
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
|
+
|
|
490
796
|
/*
|
|
491
|
-
* Public API Surface of @
|
|
797
|
+
* Public API Surface of @sefin/sefin-ui
|
|
492
798
|
*/
|
|
493
799
|
// Design Tokens
|
|
494
800
|
// Styles (for importing in consuming apps)
|
|
@@ -498,5 +804,5 @@ const STYLES_PATH = './styles/index.scss';
|
|
|
498
804
|
* Generated bundle index. Do not edit.
|
|
499
805
|
*/
|
|
500
806
|
|
|
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 };
|
|
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 };
|
|
502
808
|
//# 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/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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"}
|
|
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { EventEmitter } from '@angular/core';
|
|
3
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Color design tokens as TypeScript constants
|
|
@@ -480,7 +481,125 @@ declare class ButtonComponent {
|
|
|
480
481
|
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>;
|
|
481
482
|
}
|
|
482
483
|
|
|
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
|
+
|
|
483
602
|
declare const STYLES_PATH = "./styles/index.scss";
|
|
484
603
|
|
|
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 };
|
|
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 };
|