valtech-components 4.0.13 → 4.0.15

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 (27) hide show
  1. package/esm2022/lib/components/organisms/invite-member-modal/invite-member-modal.component.mjs +3 -9
  2. package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.component.mjs +159 -66
  3. package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.i18n.mjs +17 -9
  4. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +2 -2
  5. package/esm2022/lib/services/app-version/app-version.service.mjs +10 -4
  6. package/esm2022/lib/services/app-version/config.mjs +6 -1
  7. package/esm2022/lib/services/app-version/index.mjs +2 -2
  8. package/esm2022/lib/services/app-version/types.mjs +1 -1
  9. package/esm2022/lib/services/org/types.mjs +9 -2
  10. package/esm2022/lib/version.mjs +2 -2
  11. package/esm2022/public-api.mjs +1 -1
  12. package/fesm2022/valtech-components.mjs +196 -84
  13. package/fesm2022/valtech-components.mjs.map +1 -1
  14. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
  15. package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
  16. package/lib/components/organisms/article/article.component.d.ts +4 -4
  17. package/lib/components/organisms/landing-steps/landing-steps.component.d.ts +1 -1
  18. package/lib/components/organisms/member-import-modal/member-import-modal.component.d.ts +5 -3
  19. package/lib/services/app-version/app-version.service.d.ts +4 -2
  20. package/lib/services/app-version/config.d.ts +6 -1
  21. package/lib/services/app-version/index.d.ts +1 -1
  22. package/lib/services/app-version/types.d.ts +20 -0
  23. package/lib/services/org/types.d.ts +12 -1
  24. package/lib/version.d.ts +1 -1
  25. package/package.json +1 -1
  26. package/public-api.d.ts +1 -1
  27. package/src/lib/components/styles/overrides.scss +8 -0
@@ -43,7 +43,7 @@ export declare class RightsFooterComponent {
43
43
  /**
44
44
  * Computed helper for color prop in template.
45
45
  */
46
- propsColor: import("@angular/core").Signal<"success" | "medium" | "primary" | "secondary" | "tertiary" | "warning" | "danger" | "light" | "dark">;
46
+ propsColor: import("@angular/core").Signal<"primary" | "secondary" | "tertiary" | "success" | "warning" | "danger" | "light" | "medium" | "dark">;
47
47
  /**
48
48
  * Computed helper for withMargin prop in template.
49
49
  */
@@ -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;
@@ -76,7 +76,7 @@ export declare class ArticleComponent implements OnInit {
76
76
  getHighlightColor(element: ArticleElement): string;
77
77
  getButtonProps(element: ArticleElement): {
78
78
  actionType?: import("valtech-components").ActionType;
79
- expand?: "full" | "block";
79
+ expand?: "block" | "full";
80
80
  link?: string;
81
81
  href?: string;
82
82
  routerLink?: string | any[];
@@ -91,9 +91,9 @@ export declare class ArticleComponent implements OnInit {
91
91
  contentInterpolation?: Record<string, string | number>;
92
92
  icon?: import("valtech-components").IconMetada;
93
93
  shape?: "round";
94
- size?: "default" | "small" | "large";
95
- fill?: "default" | "clear" | "outline" | "solid";
96
- type: "reset" | "submit" | "button";
94
+ size?: "small" | "default" | "large";
95
+ fill?: "outline" | "clear" | "solid" | "default";
96
+ type: "submit" | "button" | "reset";
97
97
  token?: string;
98
98
  ref?: any;
99
99
  handler?: (value: any) => any;
@@ -4,7 +4,7 @@ export declare class LandingStepsComponent {
4
4
  private readonly props_;
5
5
  set props(v: LandingStepsMetadata);
6
6
  readonly p: import("@angular/core").Signal<LandingStepsMetadata>;
7
- readonly cols: import("@angular/core").Signal<2 | 3 | 4>;
7
+ readonly cols: import("@angular/core").Signal<3 | 4 | 2>;
8
8
  readonly accentColor: import("@angular/core").Signal<string>;
9
9
  static ɵfac: i0.ɵɵFactoryDeclaration<LandingStepsComponent, never>;
10
10
  static ɵcmp: i0.ɵɵComponentDeclaration<LandingStepsComponent, "val-landing-steps", never, { "props": { "alias": "props"; "required": false; }; }, {}, never, never, true, never>;
@@ -1,7 +1,7 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
3
  import { InputMetadata } from '../../types';
4
- import { ImportMembersResponse, ImportRowResult } from '../../../services/org/types';
4
+ import { ImportMembersResponse, ImportRowResult, OrgRole } from '../../../services/org/types';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
7
7
  * `val-member-import-modal` — panel de carga masiva de miembros (ADR-023 fase 6).
@@ -18,7 +18,7 @@ export declare class MemberImportModalComponent implements OnInit {
18
18
  /** Org destino del import. */
19
19
  orgId: string;
20
20
  /** Nombres de roles disponibles (para el hint). Opcional. */
21
- availableRoles: string[];
21
+ availableRoles: OrgRole[];
22
22
  /** Callback tras una importación exitosa (≥1 fila procesada) — refresca la lista. */
23
23
  onSuccess?: () => void;
24
24
  /** Inyectado por `ModalService.open`. */
@@ -28,9 +28,11 @@ export declare class MemberImportModalComponent implements OnInit {
28
28
  /** Namespace i18n. */
29
29
  i18nNamespace: string;
30
30
  csv: string;
31
- sendActivation: boolean;
31
+ readonly importMode: import("@angular/core").WritableSignal<"file" | "paste">;
32
32
  readonly onConflictControl: FormControl<string>;
33
+ readonly sendActivationControl: FormControl<boolean>;
33
34
  readonly conflictSelectProps: import("@angular/core").Signal<Partial<InputMetadata>>;
35
+ readonly sendActivationProps: import("@angular/core").Signal<InputMetadata>;
34
36
  readonly submitting: import("@angular/core").WritableSignal<boolean>;
35
37
  readonly errorMsg: import("@angular/core").WritableSignal<string>;
36
38
  readonly results: import("@angular/core").WritableSignal<ImportMembersResponse>;
@@ -7,6 +7,8 @@ export declare class AppVersionService {
7
7
  /** AppConfigService es opcional: la app puede no wirearlo. */
8
8
  private readonly appConfig;
9
9
  private readonly serviceConfig;
10
+ /** Plugin nativo opcional: provisto por apps Capacitor para Play Store / App Store. */
11
+ private readonly platformPlugin;
10
12
  private readonly document;
11
13
  private readonly destroyRef;
12
14
  /** True cuando el SW reportó un bundle nuevo listo (`VERSION_READY`). */
@@ -40,8 +42,8 @@ export declare class AppVersionService {
40
42
  /**
41
43
  * Aplica la actualización pendiente.
42
44
  *
43
- * Si el SW está habilitado, activa la versión descargada y recarga; si no,
44
- * solo recarga la página (la web obtiene el bundle nuevo del servidor).
45
+ * Si hay un plugin de plataforma (nativo/Capacitor), delega en él (ej. Play Store).
46
+ * Si no, activa la versión SW si está disponible y recarga la página.
45
47
  */
46
48
  applyUpdate(): Promise<void>;
47
49
  /**
@@ -4,11 +4,16 @@
4
4
  * Provider e injection token para el servicio de verificación de versión.
5
5
  */
6
6
  import { EnvironmentProviders, InjectionToken } from '@angular/core';
7
- import { AppVersionServiceConfig } from './types';
7
+ import { AppVersionPlatformPlugin, AppVersionServiceConfig } from './types';
8
8
  /**
9
9
  * Token de inyección para la configuración de AppVersionService.
10
10
  */
11
11
  export declare const VALTECH_APP_VERSION: InjectionToken<Required<AppVersionServiceConfig>>;
12
+ /**
13
+ * Token de inyección para el plugin de plataforma nativa.
14
+ * Provisto opcionalmente por apps que corren en iOS/Android vía Capacitor.
15
+ */
16
+ export declare const APP_VERSION_PLATFORM_PLUGIN: InjectionToken<AppVersionPlatformPlugin>;
12
17
  /**
13
18
  * Provee el servicio de verificación de versión a la aplicación Angular.
14
19
  *
@@ -19,5 +19,5 @@
19
19
  * ```
20
20
  */
21
21
  export * from './types';
22
- export { VALTECH_APP_VERSION, provideValtechAppVersion } from './config';
22
+ export { VALTECH_APP_VERSION, APP_VERSION_PLATFORM_PLUGIN, provideValtechAppVersion } from './config';
23
23
  export { AppVersionService } from './app-version.service';
@@ -33,3 +33,23 @@ export declare const DEFAULT_CHECK_INTERVAL_MS: number;
33
33
  * Configuración por defecto del servicio.
34
34
  */
35
35
  export declare const DEFAULT_APP_VERSION_SERVICE_CONFIG: Required<AppVersionServiceConfig>;
36
+ /**
37
+ * Plugin de plataforma para comportamiento nativo de actualizaciones.
38
+ *
39
+ * Implementado por la app consumidora y provisto via `APP_VERSION_PLATFORM_PLUGIN`.
40
+ * Permite redirigir al Play Store / App Store en lugar de recargar la página.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * // android-update.plugin.ts
45
+ * @Injectable({ providedIn: 'root' })
46
+ * export class AndroidUpdatePlugin implements AppVersionPlatformPlugin {
47
+ * async applyUpdate(): Promise<void> {
48
+ * window.open('https://play.google.com/store/apps/details?id=com.myapp', '_system');
49
+ * }
50
+ * }
51
+ * ```
52
+ */
53
+ export interface AppVersionPlatformPlugin {
54
+ applyUpdate(): Promise<void>;
55
+ }
@@ -83,7 +83,18 @@ export interface OrgRole {
83
83
  description?: string;
84
84
  permissions?: string[];
85
85
  isSystem?: boolean;
86
- }
86
+ /** Nombre legible por idioma. Backend autoritativo (ADR-024). nil para roles custom. */
87
+ displayName?: {
88
+ es?: string;
89
+ en?: string;
90
+ [lang: string]: string | undefined;
91
+ };
92
+ }
93
+ /**
94
+ * Resuelve el label legible de un rol para el idioma dado.
95
+ * Fallback: displayName en otro idioma → role.name (snake_case).
96
+ */
97
+ export declare function resolveRoleLabel(role: OrgRole, lang: string): string;
87
98
  export interface ListOrgRolesResponse {
88
99
  operationId: string;
89
100
  roles: OrgRole[];
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.13";
5
+ export declare const VERSION = "4.0.15";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valtech-components",
3
- "version": "4.0.13",
3
+ "version": "4.0.15",
4
4
  "private": false,
5
5
  "bin": {
6
6
  "valtech-firebase-config": "./src/lib/services/firebase/scripts/generate-sw-config.js"
package/public-api.d.ts CHANGED
@@ -360,7 +360,7 @@ export * from './lib/services/legal-link/legal-link.service';
360
360
  export * from './lib/services/firebase';
361
361
  export * from './lib/services/auth';
362
362
  export { OrgService } from './lib/services/org/org.service';
363
- export type { Organization, OrgType, OrgPlan, CreateOrgRequest, UpdateOrgRequest, InviteUserRequest, InviteUserResponse, LeaveOrgResponse, ListMyOrgsResponse, OrgResponse, OrgMember, ListOrgMembersResponse, PendingInvitation, ListPendingInvitationsResponse, AcceptInvitationResponse, OrgRole, ListOrgRolesResponse, ChangeMemberRoleRequest, ChangeMemberRoleResponse, ImportUserRow, ImportOnConflict, ImportMembersRequest, ImportRowStatus, ImportRowResult, ImportSummary, ImportMembersResponse, } from './lib/services/org/types';
363
+ export type { Organization, OrgType, OrgPlan, CreateOrgRequest, UpdateOrgRequest, InviteUserRequest, InviteUserResponse, LeaveOrgResponse, ListMyOrgsResponse, OrgResponse, OrgMember, ListOrgMembersResponse, PendingInvitation, ListPendingInvitationsResponse, AcceptInvitationResponse, OrgRole, resolveRoleLabel, ListOrgRolesResponse, ChangeMemberRoleRequest, ChangeMemberRoleResponse, ImportUserRow, ImportOnConflict, ImportMembersRequest, ImportRowStatus, ImportRowResult, ImportSummary, ImportMembersResponse, } from './lib/services/org/types';
364
364
  export { ApiKeyService } from './lib/services/apikeys/api-keys.service';
365
365
  export type { ClientApiKey, ClientApiKeyWithSecret, CreateApiKeyRequest, CreateApiKeyResponse, ListApiKeysResponse, AvailablePermissionsResponse, RevokeApiKeyResponse, } from './lib/services/apikeys/types';
366
366
  export * from './lib/services/i18n';
@@ -265,6 +265,14 @@ ion-modal.modal-sheet ion-header ion-toolbar:last-of-type {
265
265
  padding-bottom: 0.5rem !important;
266
266
  }
267
267
 
268
+ /* Sheet modals (breakpoints): ion-content calcula su altura contra el viewport
269
+ completo, no contra la altura restringida del sheet → el usuario no puede
270
+ scrollear. --overflow: hidden auto fuerza scroll vertical en todos los modales
271
+ de las apps del factory. */
272
+ ion-modal ion-content {
273
+ --overflow: hidden auto;
274
+ }
275
+
268
276
  // Estilos para enlaces procesados automáticamente
269
277
  .processed-link {
270
278
  color: var(--ion-color-primary, #3880ff);