valtech-components 4.0.990 → 4.0.992

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.
Files changed (24) hide show
  1. package/esm2022/lib/components/organisms/survey-builder/survey-builder.component.mjs +12 -4
  2. package/esm2022/lib/components/organisms/survey-builder/types.mjs +1 -1
  3. package/esm2022/lib/services/errors/error-logging.interceptor.mjs +30 -5
  4. package/esm2022/lib/services/i18n/i18n.service.mjs +17 -4
  5. package/esm2022/lib/version.mjs +2 -2
  6. package/fesm2022/valtech-components.mjs +57 -11
  7. package/fesm2022/valtech-components.mjs.map +1 -1
  8. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +2 -2
  9. package/lib/components/molecules/cta-card/cta-card.component.d.ts +1 -1
  10. package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
  11. package/lib/components/molecules/load-more/load-more.component.d.ts +1 -1
  12. package/lib/components/molecules/metric-card/metric-card.component.d.ts +1 -1
  13. package/lib/components/molecules/operation-reference/operation-reference.component.d.ts +1 -1
  14. package/lib/components/organisms/account-view/account-view.component.d.ts +1 -1
  15. package/lib/components/organisms/article/article.component.d.ts +5 -5
  16. package/lib/components/organisms/auth-cta/auth-cta.component.d.ts +1 -1
  17. package/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.d.ts +1 -1
  18. package/lib/components/organisms/organization-view/organization-view.component.d.ts +1 -1
  19. package/lib/components/organisms/survey-builder/survey-builder.component.d.ts +1 -0
  20. package/lib/components/organisms/survey-builder/types.d.ts +10 -0
  21. package/lib/services/errors/error-logging.interceptor.d.ts +9 -1
  22. package/lib/services/i18n/i18n.service.d.ts +14 -1
  23. package/lib/version.d.ts +1 -1
  24. package/package.json +1 -1
@@ -53,11 +53,11 @@ export declare class RightsFooterComponent {
53
53
  /**
54
54
  * Computed helper for align prop in template.
55
55
  */
56
- propsAlign: import("@angular/core").Signal<"left" | "center" | "right">;
56
+ propsAlign: import("@angular/core").Signal<"right" | "center" | "left">;
57
57
  /**
58
58
  * Computed helper for color prop in template.
59
59
  */
60
- propsColor: import("@angular/core").Signal<"success" | "medium" | "primary" | "secondary" | "tertiary" | "warning" | "danger" | "light" | "dark">;
60
+ propsColor: import("@angular/core").Signal<"light" | "dark" | "medium" | "primary" | "secondary" | "tertiary" | "success" | "warning" | "danger">;
61
61
  /**
62
62
  * Computed helper for withMargin prop in template.
63
63
  */
@@ -35,7 +35,7 @@ export declare class CtaCardComponent {
35
35
  /** Emitted with the token of the clicked action button */
36
36
  onAction: EventEmitter<string>;
37
37
  /** Merged configuration with defaults */
38
- config: import("@angular/core").Signal<CtaCardMetadata & Required<Pick<CtaCardMetadata, "borderRadius" | "bordered" | "shadowed" | "align" | "padding">>>;
38
+ config: import("@angular/core").Signal<CtaCardMetadata & Required<Pick<CtaCardMetadata, "padding" | "borderRadius" | "bordered" | "shadowed" | "align">>>;
39
39
  getBackground(): string;
40
40
  getColor(): string | null;
41
41
  static ɵfac: i0.ɵɵFactoryDeclaration<CtaCardComponent, never>;
@@ -42,7 +42,7 @@ export declare class FeaturesListComponent {
42
42
  iconSize: number;
43
43
  mode: "horizontal" | "vertical";
44
44
  gap: "small" | "medium" | "large";
45
- alignment: "center" | "start";
45
+ alignment: "start" | "center";
46
46
  imageShape: "circle" | "square";
47
47
  maxVisible: number;
48
48
  showMoreLabel?: string;
@@ -26,7 +26,7 @@ export declare class LoadMoreComponent {
26
26
  readonly color: import("@angular/core").Signal<string>;
27
27
  readonly fill: import("@angular/core").Signal<string>;
28
28
  readonly shape: import("@angular/core").Signal<string>;
29
- readonly size: import("@angular/core").Signal<"small" | "default" | "large">;
29
+ readonly size: import("@angular/core").Signal<"small" | "large" | "default">;
30
30
  readonly threshold: import("@angular/core").Signal<string>;
31
31
  readonly label: import("@angular/core").Signal<string>;
32
32
  private readonly _pendingComplete;
@@ -28,7 +28,7 @@ export declare class MetricCardComponent {
28
28
  /** Emitted with the token of the clicked action */
29
29
  onAction: EventEmitter<string>;
30
30
  /** Merged configuration with defaults */
31
- config: import("@angular/core").Signal<MetricCardMetadata & Required<Pick<MetricCardMetadata, "borderRadius" | "bordered" | "shadowed" | "padding">>>;
31
+ config: import("@angular/core").Signal<MetricCardMetadata & Required<Pick<MetricCardMetadata, "padding" | "borderRadius" | "bordered" | "shadowed">>>;
32
32
  static ɵfac: i0.ɵɵFactoryDeclaration<MetricCardComponent, never>;
33
33
  static ɵcmp: i0.ɵɵComponentDeclaration<MetricCardComponent, "val-metric-card", never, { "props": { "alias": "props"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
34
34
  }
@@ -6,7 +6,7 @@ export declare class OperationReferenceComponent {
6
6
  protected label: import("@angular/core").Signal<string>;
7
7
  protected copiedLabel: import("@angular/core").Signal<string>;
8
8
  protected copyAriaLabel: import("@angular/core").Signal<string>;
9
- protected align: import("@angular/core").Signal<"center" | "start" | "end">;
9
+ protected align: import("@angular/core").Signal<"start" | "end" | "center">;
10
10
  protected copyValue(): void;
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<OperationReferenceComponent, never>;
12
12
  static ɵcmp: i0.ɵɵComponentDeclaration<OperationReferenceComponent, "val-operation-reference", never, { "props": { "alias": "props"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -34,7 +34,7 @@ export declare class AccountViewComponent {
34
34
  * mergea con los defaults — `@Input` gana sobre route data.
35
35
  */
36
36
  config?: AccountViewConfig;
37
- readonly resolvedConfig: import("@angular/core").Signal<Required<Omit<AccountViewConfig, "onOrgSwitched" | "onOrgCreated" | "onLoggedOut" | "onAccountDeleted">> & Pick<AccountViewConfig, "onOrgSwitched" | "onOrgCreated" | "onLoggedOut" | "onAccountDeleted">>;
37
+ readonly resolvedConfig: import("@angular/core").Signal<Required<Omit<AccountViewConfig, "onOrgCreated" | "onOrgSwitched" | "onLoggedOut" | "onAccountDeleted">> & Pick<AccountViewConfig, "onOrgCreated" | "onOrgSwitched" | "onLoggedOut" | "onAccountDeleted">>;
38
38
  /** Namespace i18n resuelto (capturado para llamadas no-reactivas). */
39
39
  private get ns();
40
40
  readonly createOrgOpen: import("@angular/core").WritableSignal<boolean>;
@@ -69,7 +69,7 @@ export declare class ArticleComponent implements OnInit, AfterViewInit {
69
69
  linkConfig?: import("valtech-components").LinkProcessorConfig;
70
70
  allowPartialBold?: boolean;
71
71
  authorColor?: import("@ionic/core").Color;
72
- alignment?: "left" | "center" | "right";
72
+ alignment?: "right" | "center" | "left";
73
73
  showQuoteMark?: boolean;
74
74
  };
75
75
  getHighlightTextProps(element: ArticleElement): {
@@ -88,7 +88,7 @@ export declare class ArticleComponent implements OnInit, AfterViewInit {
88
88
  getHighlightColor(element: ArticleElement): string;
89
89
  getButtonProps(element: ArticleElement): {
90
90
  actionType?: import("valtech-components").ActionType;
91
- expand?: "full" | "block";
91
+ expand?: "block" | "full";
92
92
  link?: string;
93
93
  href?: string;
94
94
  routerLink?: string | any[];
@@ -103,9 +103,9 @@ export declare class ArticleComponent implements OnInit, AfterViewInit {
103
103
  contentInterpolation?: Record<string, string | number>;
104
104
  icon?: import("valtech-components").IconMetada;
105
105
  shape?: "round";
106
- size?: "small" | "default" | "large";
107
- fill?: "default" | "clear" | "outline" | "solid" | "tint";
108
- type: "reset" | "submit" | "button";
106
+ size?: "small" | "large" | "default";
107
+ fill?: "solid" | "clear" | "outline" | "default" | "tint";
108
+ type: "submit" | "button" | "reset";
109
109
  token?: string;
110
110
  ariaLabel?: string;
111
111
  ref?: any;
@@ -35,7 +35,7 @@ export declare class AuthCtaComponent {
35
35
  onRegister: EventEmitter<void>;
36
36
  constructor();
37
37
  /** Merged configuration with defaults */
38
- config: import("@angular/core").Signal<AuthCtaMetadata & Required<Pick<AuthCtaMetadata, "borderRadius" | "align" | "padding">>>;
38
+ config: import("@angular/core").Signal<AuthCtaMetadata & Required<Pick<AuthCtaMetadata, "padding" | "borderRadius" | "align">>>;
39
39
  loginLabel: import("@angular/core").Signal<string>;
40
40
  registerLabel: import("@angular/core").Signal<string>;
41
41
  topLogoProps: import("@angular/core").Signal<{
@@ -90,7 +90,7 @@ export declare class NotificationPreferencesViewComponent implements OnInit, OnD
90
90
  readonly busyLabel: import("@angular/core").Signal<string>;
91
91
  readonly contextMessage: import("@angular/core").Signal<string>;
92
92
  readonly alertVariant: import("@angular/core").Signal<"warning" | "danger" | "info">;
93
- readonly alertIcon: import("@angular/core").Signal<"alert-circle-outline" | "close-circle-outline">;
93
+ readonly alertIcon: import("@angular/core").Signal<"close-circle-outline" | "alert-circle-outline">;
94
94
  readonly toggleProps: import("@angular/core").Signal<ToggleInputMetadata>;
95
95
  readonly retryButtonProps: import("@angular/core").Signal<Partial<ButtonMetadata>>;
96
96
  readonly tokenPreview: import("@angular/core").Signal<string>;
@@ -53,7 +53,7 @@ export declare class OrganizationViewComponent {
53
53
  * `resolvedConfig` mergea con los defaults — `@Input` gana sobre route data.
54
54
  */
55
55
  config?: OrganizationViewConfig;
56
- readonly resolvedConfig: import("@angular/core").Signal<Required<Omit<OrganizationViewConfig, "onOrgCreated" | "onOrgEdited" | "onMemberInvited" | "onOwnershipTransferred" | "onLeftOrg" | "onOrgDeleted">> & Pick<OrganizationViewConfig, "onOrgCreated" | "onOrgEdited" | "onMemberInvited" | "onOwnershipTransferred" | "onLeftOrg" | "onOrgDeleted">>;
56
+ readonly resolvedConfig: import("@angular/core").Signal<Required<Omit<OrganizationViewConfig, "onOrgEdited" | "onMemberInvited" | "onOwnershipTransferred" | "onLeftOrg" | "onOrgDeleted" | "onOrgCreated">> & Pick<OrganizationViewConfig, "onOrgEdited" | "onMemberInvited" | "onOwnershipTransferred" | "onLeftOrg" | "onOrgDeleted" | "onOrgCreated">>;
57
57
  /** Namespace i18n resuelto (capturado para llamadas no-reactivas). */
58
58
  private get ns();
59
59
  readonly org: import("@angular/core").WritableSignal<Organization>;
@@ -66,6 +66,7 @@ export declare class SurveyBuilderComponent implements OnInit {
66
66
  draftQuestion(field: EditableFieldDef): void;
67
67
  applyQuestion(field: EditableFieldDef): void;
68
68
  save(): Promise<void>;
69
+ private hydrate;
69
70
  private rowFromField;
70
71
  static ɵfac: i0.ɵɵFactoryDeclaration<SurveyBuilderComponent, never>;
71
72
  static ɵcmp: i0.ɵɵComponentDeclaration<SurveyBuilderComponent, "val-survey-builder", never, { "props": { "alias": "props"; "required": false; }; }, { "saved": "saved"; "draft": "draft"; }, never, never, true, never>;
@@ -56,6 +56,16 @@ export interface SurveyBuilderMetadata {
56
56
  * y emite `draft` sin tocar la red.
57
57
  */
58
58
  persist?: boolean;
59
+ /**
60
+ * Siembra el builder con una encuesta que ya existe, sin ir a buscarla.
61
+ *
62
+ * Va de la mano de `persist: false`: la app que tiene endpoint propio ya
63
+ * recibió la encuesta en su listado, así que pedirla de nuevo por el endpoint
64
+ * genérico sería una lectura de más — y encima por una vía que exige
65
+ * `apps:manage`. Con `typeId` el builder carga Y guarda solo; con `initial`
66
+ * solo se llena.
67
+ */
68
+ initial?: SurveyDraftEvent;
59
69
  }
60
70
  export interface SurveyBuilderSaveEvent {
61
71
  typeConfig: RequestTypeConfig;
@@ -16,7 +16,15 @@ export declare const EXPECTED_NOT_FOUND: HttpContextToken<boolean>;
16
16
  * Interceptor HTTP de observabilidad (Capa 1 del estándar de manejo de errores).
17
17
  *
18
18
  * Para CADA respuesta HTTP con error:
19
- * 1. Normaliza el error con `interpretError`.
19
+ * 0. Si es un GET (idempotente) que falló con 502/503/504, reintenta hasta 2
20
+ * veces con un backoff corto (400ms/800ms) ANTES de pasar al resto del
21
+ * pipeline — el caso típico es un cold-start de Lambda en dev: 3-4
22
+ * requests en paralelo al bootstrap (auth/profile + runs + org/{id})
23
+ * pegan contra lambdas frías al mismo tiempo, todas 504, y ~2s después ya
24
+ * están tibias y funcionan. Detectado en Merotz dev 2026-08-17. Nunca
25
+ * reintenta POST/PUT/DELETE/PATCH (no son idempotentes) ni 4xx (error de
26
+ * negocio, reintentar no lo arregla).
27
+ * 1. Si sigue fallando tras los reintentos: normaliza el error con `interpretError`.
20
28
  * 2. Loguea un evento estructurado a consola con el prefijo `[HTTP]`.
21
29
  * 3. Reporta el error a Firebase Analytics (`source: 'http'`), si hay analytics.
22
30
  *
@@ -128,7 +128,20 @@ export declare class I18nService {
128
128
  */
129
129
  hasNamespace(namespace: string): boolean;
130
130
  /**
131
- * Carga idioma guardado en localStorage o detecta del navegador
131
+ * Carga el idioma guardado en localStorage, o adivina desde el navegador.
132
+ *
133
+ * La detección de acá es PROVISIONAL y NO se persiste, a propósito. El
134
+ * constructor corre antes que el APP_INITIALIZER de `provideValtechI18n`,
135
+ * que es quien conoce la config real de la app. Cuando esto persistía el
136
+ * idioma detectado, el initializer leía esa misma clave un instante después,
137
+ * la tomaba por preferencia guardada del usuario y entraba por la rama
138
+ * `stored` — así que `detectBrowserLanguage: false` no tenía efecto en
139
+ * ninguna app del factory. Escribir acá fabricaba una preferencia que el
140
+ * usuario nunca expresó.
141
+ *
142
+ * Persistir es responsabilidad de `setLanguage()`, que se llama cuando la
143
+ * elección sí es del usuario (o cuando el initializer ya decidió con la
144
+ * config a la vista).
132
145
  */
133
146
  private loadStoredLanguage;
134
147
  /**
package/lib/version.d.ts CHANGED
@@ -2,4 +2,4 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export declare const VERSION = "4.0.990";
5
+ export declare const VERSION = "4.0.992";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valtech-components",
3
- "version": "4.0.990",
3
+ "version": "4.0.992",
4
4
  "private": false,
5
5
  "bin": {
6
6
  "valtech-firebase-config": "./src/lib/services/firebase/scripts/generate-sw-config.js"