@telcomdev/ui 0.1.6 → 0.1.7

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.
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Optional Angular Material integration for @telcomdev/ui.
3
+ *
4
+ * Usage in a consuming app that already defines Material system tokens:
5
+ * @import '@telcomdev/ui/lib/theme/td-material-theme.css';
6
+ *
7
+ * This file only maps --td-* tokens to --mat-sys-* tokens when they exist.
8
+ * Every value keeps the TelcomDev fallback, so it is safe to import in apps
9
+ * without Angular Material too.
10
+ */
11
+
12
+ :root,
13
+ .td-theme-material {
14
+ --td-font-family: var(--mat-sys-body-large-font, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
15
+
16
+ --td-color-primary: var(--mat-sys-primary, #3157a4);
17
+ --td-color-primary-hover: color-mix(in srgb, var(--mat-sys-primary, #3157a4) 86%, #000);
18
+ --td-color-primary-active: color-mix(in srgb, var(--mat-sys-primary, #3157a4) 72%, #000);
19
+ --td-color-primary-soft: var(--mat-sys-primary-container, #eaf0fb);
20
+ --td-color-primary-subtle: color-mix(in srgb, var(--mat-sys-primary-container, #eaf0fb) 62%, var(--mat-sys-surface, #fff));
21
+ --td-color-on-primary: var(--mat-sys-on-primary, #ffffff);
22
+
23
+ --td-color-surface: var(--mat-sys-surface, #ffffff);
24
+ --td-color-surface-soft: var(--mat-sys-surface-container-low, #f6f8fb);
25
+ --td-color-surface-muted: var(--mat-sys-surface-container, #edf1f6);
26
+ --td-color-background: var(--mat-sys-background, var(--mat-sys-surface, #f3f6fa));
27
+
28
+ --td-color-border: var(--mat-sys-outline-variant, #dde3ee);
29
+ --td-color-border-strong: var(--mat-sys-outline, #c8d1df);
30
+
31
+ --td-color-text: var(--mat-sys-on-surface, #202b3d);
32
+ --td-color-text-muted: var(--mat-sys-on-surface-variant, #66758b);
33
+ --td-color-text-subtle: color-mix(in srgb, var(--mat-sys-on-surface-variant, #66758b) 74%, transparent);
34
+
35
+ --td-color-danger: var(--mat-sys-error, #b93a3a);
36
+ --td-color-danger-soft: var(--mat-sys-error-container, #fde7e7);
37
+ --td-color-success: var(--mat-sys-tertiary, #16784a);
38
+ --td-color-success-soft: var(--mat-sys-tertiary-container, #e2f5eb);
39
+ --td-color-warning: #a8660b;
40
+ --td-color-warning-soft: #fff2d8;
41
+ --td-color-info: var(--mat-sys-secondary, #2563a8);
42
+ --td-color-info-soft: var(--mat-sys-secondary-container, #e4effb);
43
+
44
+ --td-focus-ring: 0 0 0 3px color-mix(in srgb, var(--td-color-primary) 18%, transparent);
45
+ --td-danger-ring: 0 0 0 3px color-mix(in srgb, var(--td-color-danger) 16%, transparent);
46
+ }
@@ -0,0 +1,80 @@
1
+ :root,
2
+ .td-theme-light {
3
+ color-scheme: light;
4
+ --td-font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
5
+ --td-color-primary: #3157a4;
6
+ --td-color-primary-hover: #254680;
7
+ --td-color-primary-active: #1d3868;
8
+ --td-color-primary-soft: #eaf0fb;
9
+ --td-color-primary-subtle: #f4f7fd;
10
+ --td-color-on-primary: #ffffff;
11
+ --td-color-success: #16784a;
12
+ --td-color-success-soft: #e2f5eb;
13
+ --td-color-warning: #a8660b;
14
+ --td-color-warning-soft: #fff2d8;
15
+ --td-color-danger: #b93a3a;
16
+ --td-color-danger-soft: #fde7e7;
17
+ --td-color-info: #2563a8;
18
+ --td-color-info-soft: #e4effb;
19
+ --td-color-background: #f3f6fa;
20
+ --td-color-surface: #ffffff;
21
+ --td-color-surface-soft: #f6f8fb;
22
+ --td-color-surface-muted: #edf1f6;
23
+ --td-color-border: #dde3ee;
24
+ --td-color-border-strong: #c8d1df;
25
+ --td-color-text: #202b3d;
26
+ --td-color-text-muted: #66758b;
27
+ --td-color-text-subtle: #8b97a8;
28
+ --td-color-overlay: rgba(15, 23, 42, 0.52);
29
+ --td-shadow-sm: 0 8px 22px rgba(32, 43, 61, 0.08);
30
+ --td-shadow-md: 0 18px 46px rgba(32, 43, 61, 0.14);
31
+ --td-shadow-lg: 0 28px 75px rgba(15, 23, 42, 0.24);
32
+ --td-shadow-panel: 0 22px 55px rgba(15, 23, 42, 0.18);
33
+ --td-focus-ring: 0 0 0 3px color-mix(in srgb, var(--td-color-primary) 18%, transparent);
34
+ --td-danger-ring: 0 0 0 3px color-mix(in srgb, var(--td-color-danger) 16%, transparent);
35
+ --td-radius-sm: 0.55rem;
36
+ --td-radius-md: 0.75rem;
37
+ --td-radius-lg: 0.9rem;
38
+ --td-radius-xl: 1rem;
39
+ --td-radius-pill: 999px;
40
+ }
41
+
42
+ .td-theme-dark {
43
+ color-scheme: dark;
44
+ --td-font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
45
+ --td-color-primary: #8aa7e6;
46
+ --td-color-primary-hover: #a8bdf0;
47
+ --td-color-primary-active: #c3d1f7;
48
+ --td-color-primary-soft: #1f2b45;
49
+ --td-color-primary-subtle: #182235;
50
+ --td-color-on-primary: #ffffff;
51
+ --td-color-success: #56c28d;
52
+ --td-color-success-soft: #173828;
53
+ --td-color-warning: #e2a84d;
54
+ --td-color-warning-soft: #3e2c12;
55
+ --td-color-danger: #f07878;
56
+ --td-color-danger-soft: #462020;
57
+ --td-color-info: #79a9e8;
58
+ --td-color-info-soft: #182b43;
59
+ --td-color-background: #11141a;
60
+ --td-color-surface: #181b22;
61
+ --td-color-surface-soft: #20242d;
62
+ --td-color-surface-muted: #272d38;
63
+ --td-color-border: #343b49;
64
+ --td-color-border-strong: #465164;
65
+ --td-color-text: #eef2f8;
66
+ --td-color-text-muted: #a7b0be;
67
+ --td-color-text-subtle: #7f8898;
68
+ --td-color-overlay: rgba(0, 0, 0, 0.62);
69
+ --td-shadow-sm: 0 8px 22px rgba(0, 0, 0, 0.26);
70
+ --td-shadow-md: 0 20px 54px rgba(0, 0, 0, 0.36);
71
+ --td-shadow-lg: 0 28px 75px rgba(0, 0, 0, 0.42);
72
+ --td-shadow-panel: 0 22px 55px rgba(0, 0, 0, 0.36);
73
+ --td-focus-ring: 0 0 0 3px color-mix(in srgb, var(--td-color-primary) 22%, transparent);
74
+ --td-danger-ring: 0 0 0 3px color-mix(in srgb, var(--td-color-danger) 18%, transparent);
75
+ --td-radius-sm: 0.55rem;
76
+ --td-radius-md: 0.75rem;
77
+ --td-radius-lg: 0.9rem;
78
+ --td-radius-xl: 1rem;
79
+ --td-radius-pill: 999px;
80
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telcomdev/ui",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Librería UI reutilizable para los sistemas TelcomDev.",
5
5
  "keywords": [
6
6
  "angular",
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { AfterContentChecked, EventEmitter, OnChanges, OnDestroy, SimpleChanges, InjectionToken, Type, ModelSignal, OutputEmitterRef, TemplateRef, AfterContentInit } from '@angular/core';
2
+ import { AfterContentChecked, EventEmitter, OnChanges, OnDestroy, SimpleChanges, InjectionToken, Type, ModelSignal, OutputEmitterRef, AfterViewInit, TemplateRef, AfterContentInit } from '@angular/core';
3
3
  import { ControlValueAccessor } from '@angular/forms';
4
4
  import { FormCheckboxControl, WithOptionalFieldTree, DisabledReason, ValidationError, FormValueControl } from '@angular/forms/signals';
5
5
  import { ScrollStrategy } from '@angular/cdk/overlay';
@@ -812,6 +812,78 @@ declare class TdInput implements ControlValueAccessor, FormValueControl<TdInputV
812
812
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TdInput, "td-input", never, { "id": { "alias": "id"; "required": false; }; "label": { "alias": "label"; "required": false; }; "type": { "alias": "type"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "prefix": { "alias": "prefix"; "required": false; }; "suffix": { "alias": "suffix"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "disabledReasons": { "alias": "disabledReasons"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; }; "dark": { "alias": "dark"; "required": false; }; "showCounter": { "alias": "showCounter"; "required": false; "isSignal": true; }; "emptyValue": { "alias": "emptyValue"; "required": false; }; "sanitize": { "alias": "sanitize"; "required": false; }; "sanitizeValue": { "alias": "sanitizeValue"; "required": false; }; "mask": { "alias": "mask"; "required": false; }; "integerDigits": { "alias": "integerDigits"; "required": false; }; "decimalDigits": { "alias": "decimalDigits"; "required": false; }; "minValue": { "alias": "min"; "required": false; "isSignal": true; }; "maxValue": { "alias": "max"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; }; "minlength": { "alias": "minlength"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "touch": "touch"; "value": "valueChange"; }, never, never, true, never>;
813
813
  }
814
814
 
815
+ type TdTextareaValue = string | null;
816
+ type TdTextareaEmptyValue = 'auto' | 'null' | 'empty-string';
817
+ declare class TdTextarea implements AfterViewInit, ControlValueAccessor, FormValueControl<TdTextareaValue> {
818
+ private readonly cdr;
819
+ private readonly formBridge;
820
+ private readonly generatedId;
821
+ private readonly legacyMinLength;
822
+ private readonly legacyMaxLength;
823
+ private receivedNullValue;
824
+ private nativeTextarea?;
825
+ id: string;
826
+ label: string;
827
+ placeholder: string;
828
+ hint: string;
829
+ rows: number;
830
+ dark: boolean;
831
+ clearable: boolean;
832
+ emptyValue: TdTextareaEmptyValue;
833
+ autoResize: boolean;
834
+ maxAutoRows: number | null;
835
+ readonly name: _angular_core.InputSignal<string>;
836
+ readonly disabled: _angular_core.InputSignal<boolean>;
837
+ readonly disabledReasons: _angular_core.InputSignal<readonly WithOptionalFieldTree<DisabledReason>[]>;
838
+ readonly readonly: _angular_core.InputSignal<boolean>;
839
+ readonly hidden: _angular_core.InputSignal<boolean>;
840
+ readonly invalid: _angular_core.InputSignal<boolean>;
841
+ readonly pending: _angular_core.InputSignal<boolean>;
842
+ readonly dirty: _angular_core.InputSignal<boolean>;
843
+ readonly required: _angular_core.InputSignal<boolean>;
844
+ readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
845
+ readonly touched: _angular_core.ModelSignal<boolean>;
846
+ readonly touch: _angular_core.OutputEmitterRef<void>;
847
+ readonly error: _angular_core.InputSignal<string>;
848
+ readonly showCounter: _angular_core.InputSignal<boolean>;
849
+ readonly minLength: _angular_core.InputSignal<number | undefined>;
850
+ readonly maxLength: _angular_core.InputSignal<number | undefined>;
851
+ set minlength(value: number | null);
852
+ set maxlength(value: number | null);
853
+ readonly value: _angular_core.ModelSignal<TdTextareaValue>;
854
+ protected readonly focused: _angular_core.WritableSignal<boolean>;
855
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
856
+ protected readonly displayError: _angular_core.Signal<string>;
857
+ protected readonly hasError: _angular_core.Signal<boolean>;
858
+ protected readonly resolvedMinLength: _angular_core.Signal<number | null>;
859
+ protected readonly resolvedMaxLength: _angular_core.Signal<number | null>;
860
+ protected readonly currentLength: _angular_core.Signal<number>;
861
+ protected readonly counterVisible: _angular_core.Signal<boolean>;
862
+ protected readonly counterAtLimit: _angular_core.Signal<boolean>;
863
+ protected readonly hasSupportingContent: _angular_core.Signal<boolean>;
864
+ protected readonly hasValue: _angular_core.Signal<boolean>;
865
+ protected readonly labelFloating: _angular_core.Signal<boolean>;
866
+ protected get textareaId(): string;
867
+ protected get descriptionId(): string | null;
868
+ private onChange;
869
+ ngAfterViewInit(): void;
870
+ writeValue(value: unknown): void;
871
+ registerOnChange(fn: (value: TdTextareaValue) => void): void;
872
+ registerOnTouched(fn: () => void): void;
873
+ setDisabledState(disabled: boolean): void;
874
+ focus(options?: FocusOptions): void;
875
+ protected handleInput(event: Event): void;
876
+ protected handleFocus(): void;
877
+ protected handleBlur(): void;
878
+ protected clear(): void;
879
+ private setValue;
880
+ private resolveEmptyValue;
881
+ private resizeTextarea;
882
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TdTextarea, never>;
883
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TdTextarea, "td-textarea", never, { "id": { "alias": "id"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "dark": { "alias": "dark"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "emptyValue": { "alias": "emptyValue"; "required": false; }; "autoResize": { "alias": "autoResize"; "required": false; }; "maxAutoRows": { "alias": "maxAutoRows"; "required": false; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "disabledReasons": { "alias": "disabledReasons"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "showCounter": { "alias": "showCounter"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "minlength": { "alias": "minlength"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "touch": "touch"; "value": "valueChange"; }, never, never, true, never>;
884
+ static ngAcceptInputType_autoResize: unknown;
885
+ }
886
+
815
887
  interface TdSelectOption<T = unknown> {
816
888
  value: T;
817
889
  label: string;
@@ -1088,5 +1160,5 @@ declare class TdThemeService {
1088
1160
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<TdThemeService>;
1089
1161
  }
1090
1162
 
1091
- export { TD_DIALOG_CONFIG, TD_DIALOG_DATA, TD_ICONOS, TD_ICONOS_NOMBRES, TD_THEME_DARK_COLORS, TD_THEME_LIGHT_COLORS, TdAlerta, TdAutocompleteSelect, TdButton, TdCheckbox, TdDataTable, TdDatePicker, TdDialog, TdDialogActions, TdDialogClose, TdDialogPrimary, TdDialogRef, TdFooter, TdHeader, TdIcon, TdIconoRegistry, TdInput, TdSelect, TdSidebar, TdTab, TdTabs, TdThemeService, TelcomdevUi, createTdFormControlBridge };
1092
- export type { MenuSidebar, TdAlertaOpciones, TdAlertaTipo, TdButtonSize, TdButtonTone, TdButtonType, TdButtonVariant, TdDataTableAccion, TdDataTableAccionEvento, TdDataTableAlineacion, TdDataTableBoton, TdDataTableColumna, TdDataTableTipoColumna, TdDataTableTono, TdDatePickerMode, TdDatePickerValue, TdDateRange, TdDialogConfig, TdDialogPanelData, TdDialogRefLike, TdDialogTamano, TdFormControlBridge, TdHeaderAccionPerfil, TdHeaderNotificacion, TdIconoDefinicion, TdIconoNombre, TdIconoPersonalizado, TdInputEmptyValue, TdInputMask, TdInputSanitize, TdInputSanitizeFn, TdInputSanitizePreset, TdInputValue, TdSelectOption, TdSelectOverflowText, TdSelectScrollBehavior, TdSidebarModoCerrado, TdSidebarSeleccion, TdTabsAlignment, TdTabsVariant, TdThemeMode, TdThemePaletteColor };
1163
+ export { TD_DIALOG_CONFIG, TD_DIALOG_DATA, TD_ICONOS, TD_ICONOS_NOMBRES, TD_THEME_DARK_COLORS, TD_THEME_LIGHT_COLORS, TdAlerta, TdAutocompleteSelect, TdButton, TdCheckbox, TdDataTable, TdDatePicker, TdDialog, TdDialogActions, TdDialogClose, TdDialogPrimary, TdDialogRef, TdFooter, TdHeader, TdIcon, TdIconoRegistry, TdInput, TdSelect, TdSidebar, TdTab, TdTabs, TdTextarea, TdThemeService, TelcomdevUi, createTdFormControlBridge };
1164
+ export type { MenuSidebar, TdAlertaOpciones, TdAlertaTipo, TdButtonSize, TdButtonTone, TdButtonType, TdButtonVariant, TdDataTableAccion, TdDataTableAccionEvento, TdDataTableAlineacion, TdDataTableBoton, TdDataTableColumna, TdDataTableTipoColumna, TdDataTableTono, TdDatePickerMode, TdDatePickerValue, TdDateRange, TdDialogConfig, TdDialogPanelData, TdDialogRefLike, TdDialogTamano, TdFormControlBridge, TdHeaderAccionPerfil, TdHeaderNotificacion, TdIconoDefinicion, TdIconoNombre, TdIconoPersonalizado, TdInputEmptyValue, TdInputMask, TdInputSanitize, TdInputSanitizeFn, TdInputSanitizePreset, TdInputValue, TdSelectOption, TdSelectOverflowText, TdSelectScrollBehavior, TdSidebarModoCerrado, TdSidebarSeleccion, TdTabsAlignment, TdTabsVariant, TdTextareaEmptyValue, TdTextareaValue, TdThemeMode, TdThemePaletteColor };