valtech-components 2.0.1023 → 2.0.1025

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 (37) hide show
  1. package/esm2022/lib/components/molecules/pill/pill.component.mjs +3 -3
  2. package/esm2022/lib/components/molecules/ticket-card/ticket-card.component.mjs +183 -0
  3. package/esm2022/lib/components/molecules/ticket-card/ticket-card.i18n.mjs +23 -0
  4. package/esm2022/lib/components/molecules/ticket-card/types.mjs +2 -0
  5. package/esm2022/lib/components/molecules/update-banner/update-banner.component.mjs +3 -3
  6. package/esm2022/lib/components/organisms/api-key-create-modal/api-key-create-modal.component.mjs +290 -0
  7. package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.component.mjs +316 -0
  8. package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.i18n.mjs +59 -0
  9. package/esm2022/lib/components/organisms/api-keys-view/api-keys.routes.mjs +27 -0
  10. package/esm2022/lib/components/organisms/api-keys-view/types.mjs +2 -0
  11. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +6 -12
  12. package/esm2022/lib/components/organisms/organization-view/organization-view.i18n.mjs +3 -3
  13. package/esm2022/lib/components/organisms/organization-view/types.mjs +1 -1
  14. package/esm2022/lib/components/organisms/qr-scanner/qr-scanner.component.mjs +310 -0
  15. package/esm2022/lib/components/organisms/qr-scanner/qr-scanner.i18n.mjs +28 -0
  16. package/esm2022/lib/components/organisms/qr-scanner/types.mjs +2 -0
  17. package/esm2022/lib/components/organisms/settings-hub/settings.routes.mjs +4 -1
  18. package/esm2022/lib/version.mjs +2 -2
  19. package/esm2022/public-api.mjs +10 -1
  20. package/fesm2022/valtech-components.mjs +3611 -2434
  21. package/fesm2022/valtech-components.mjs.map +1 -1
  22. package/lib/components/molecules/ticket-card/ticket-card.component.d.ts +42 -0
  23. package/lib/components/molecules/ticket-card/ticket-card.i18n.d.ts +22 -0
  24. package/lib/components/molecules/ticket-card/types.d.ts +45 -0
  25. package/lib/components/organisms/api-key-create-modal/api-key-create-modal.component.d.ts +56 -0
  26. package/lib/components/organisms/api-keys-view/api-keys-view.component.d.ts +58 -0
  27. package/lib/components/organisms/api-keys-view/api-keys-view.i18n.d.ts +6 -0
  28. package/lib/components/organisms/api-keys-view/api-keys.routes.d.ts +22 -0
  29. package/lib/components/organisms/api-keys-view/types.d.ts +8 -0
  30. package/lib/components/organisms/organization-view/types.d.ts +6 -0
  31. package/lib/components/organisms/qr-scanner/qr-scanner.component.d.ts +51 -0
  32. package/lib/components/organisms/qr-scanner/qr-scanner.i18n.d.ts +27 -0
  33. package/lib/components/organisms/qr-scanner/types.d.ts +31 -0
  34. package/lib/components/organisms/settings-hub/settings.routes.d.ts +5 -0
  35. package/lib/version.d.ts +1 -1
  36. package/package.json +3 -1
  37. package/public-api.d.ts +8 -0
@@ -0,0 +1,42 @@
1
+ import { QrCodeMetadata } from '../../atoms/qr-code/types';
2
+ import { QrResult } from '../../../services/qr-generator/types';
3
+ import { TicketCardMetadata, TicketCardStatus } from './types';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * val-ticket-card
7
+ *
8
+ * Tarjeta presentacional de una entrada de bingo: muestra el QR escaneable
9
+ * (generado del `qrToken` opaco firmado vía `QrGeneratorService`), el folio, el
10
+ * nombre del comprador (si hay) y un badge de estado (vendida / canjeada).
11
+ *
12
+ * Es la pieza que el vendedor le entrega al comprador tras la venta y que la
13
+ * taquilla escanea para canjear. Object-first (`input()` signal), i18n
14
+ * auto-registrado (namespace `TicketCard`). Estados negativos/neutros en gris
15
+ * muted (convención del factory — sin rojo de alarma).
16
+ *
17
+ * @example
18
+ * ```html
19
+ * <val-ticket-card [props]="{ qrToken: ticket.qrToken, folio: ticket.folio,
20
+ * buyerName: ticket.compradorNombre, status: 'sold', showShare: true }" />
21
+ * ```
22
+ */
23
+ export declare class TicketCardComponent {
24
+ /** Props object-first del componente. */
25
+ readonly props: import("@angular/core").InputSignal<TicketCardMetadata>;
26
+ private qrService;
27
+ private i18n;
28
+ /** QR generado (null mientras carga o si falló). */
29
+ readonly qr: import("@angular/core").WritableSignal<QrResult>;
30
+ /** Falló la generación del QR → fallback al token corto. */
31
+ readonly failed: import("@angular/core").WritableSignal<boolean>;
32
+ constructor();
33
+ private generate;
34
+ t(key: string): string;
35
+ readonly status: import("@angular/core").Signal<TicketCardStatus>;
36
+ readonly tokenShort: import("@angular/core").Signal<string>;
37
+ readonly folioText: import("@angular/core").Signal<string>;
38
+ readonly statusLabel: import("@angular/core").Signal<string>;
39
+ qrProps(q: QrResult): QrCodeMetadata;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketCardComponent, never>;
41
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketCardComponent, "val-ticket-card", never, { "props": { "alias": "props"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
42
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Defaults i18n (es/en) del `val-ticket-card`. Auto-registrados en el
3
+ * constructor del componente (namespace `TicketCard`) — el consumer NUNCA tiene
4
+ * que registrarlos. Override pasando los labels por props o registrando el
5
+ * namespace antes de montar el componente.
6
+ */
7
+ export declare const TICKET_CARD_I18N: {
8
+ readonly es: {
9
+ readonly folio: "Folio";
10
+ readonly statusSold: "Vendida";
11
+ readonly statusCheckedIn: "Canjeada";
12
+ readonly download: "Descargar";
13
+ readonly share: "Compartir";
14
+ };
15
+ readonly en: {
16
+ readonly folio: "Folio";
17
+ readonly statusSold: "Sold";
18
+ readonly statusCheckedIn: "Checked in";
19
+ readonly download: "Download";
20
+ readonly share: "Share";
21
+ };
22
+ };
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Estado de canje/venta que el ticket-card refleja en su badge.
3
+ *
4
+ * - `sold` — entrada vendida, todavía no canjeada (QR válido para canjear).
5
+ * - `checkedIn` — entrada ya canjeada (QR ya usado en puerta).
6
+ * - `neutral` — sin estado destacado (p.ej. solo se muestra el QR).
7
+ */
8
+ export type TicketCardStatus = 'sold' | 'checkedIn' | 'neutral';
9
+ /**
10
+ * Metadata (object-first) del componente `val-ticket-card`.
11
+ *
12
+ * Tarjeta presentacional de una entrada: muestra el QR (generado a partir del
13
+ * `qrToken` opaco firmado), el folio, el nombre del comprador (si hay) y un
14
+ * badge de estado. NO trae texto propio fijo — el consumer pasa los labels ya
15
+ * resueltos (`statusSoldLabel` / `statusCheckedInLabel` / `folioLabel`). El
16
+ * único texto auto-i18n son los defaults de esos labels (namespace `TicketCard`).
17
+ */
18
+ export interface TicketCardMetadata {
19
+ /**
20
+ * Token opaco firmado que va DENTRO del QR escaneable (formato
21
+ * `base64url.base64url`). Es exactamente el dato que la taquilla manda al
22
+ * endpoint de canje. El componente lo codifica en el QR tal cual.
23
+ */
24
+ qrToken: string;
25
+ /** Folio de la entrada (número visible junto al QR). */
26
+ folio?: number | string;
27
+ /** Nombre del comprador, si se capturó en la venta. */
28
+ buyerName?: string;
29
+ /** Estado de la entrada (controla el color/label del badge). */
30
+ status?: TicketCardStatus;
31
+ /** Título de la tarjeta (ej. nombre del evento). Opcional. */
32
+ title?: string;
33
+ /** Tamaño del QR en px (default 200). */
34
+ qrSize?: number;
35
+ /** Mostrar botón de descarga del QR. */
36
+ showDownload?: boolean;
37
+ /** Mostrar botón de compartir el QR. */
38
+ showShare?: boolean;
39
+ /** Label del prefijo de folio (default i18n: "Folio"). */
40
+ folioLabel?: string;
41
+ /** Label del badge cuando `status === 'sold'` (default: "Vendida"). */
42
+ statusSoldLabel?: string;
43
+ /** Label del badge cuando `status === 'checkedIn'` (default: "Canjeada"). */
44
+ statusCheckedInLabel?: string;
45
+ }
@@ -0,0 +1,56 @@
1
+ import { OnInit, EventEmitter } from '@angular/core';
2
+ import { FormMetadata, FormSubmit } from '../../types';
3
+ import { ClientApiKeyWithSecret } from '../../../services/apikeys/types';
4
+ import { LocalizedLabel, PermissionResource } from '../../../services/org/permission-catalog.service';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * `val-api-key-create-modal` — modal SÓLO para crear una Client API Key.
8
+ *
9
+ * Extraído de `val-api-keys-modal` bajo el proceso de ADR-021: la gestión (lista +
10
+ * revoke) vive ahora en la vista `val-api-keys-view`, y la creación en este modal,
11
+ * que `api-keys-view` abre vía `ModalService`. Header canónico (Regla #5): título en
12
+ * el body, botón Cerrar en el toolbar.
13
+ *
14
+ * Flujo: selector de permisos (filtrado por org/app) + form (nombre + expiración) →
15
+ * crea → muestra el secreto UNA vez con copia. Emite `(created)` al terminar (para
16
+ * que la vista refresque la lista) y `(dismissed)` al cerrar.
17
+ */
18
+ export declare class ApiKeyCreateModalComponent implements OnInit {
19
+ private i18n;
20
+ private apiKeys;
21
+ private catalog;
22
+ private auth;
23
+ /** Inyectado por `ModalService.open` — referencia para cerrar desde dentro. */
24
+ _modalRef?: {
25
+ dismiss: (data?: unknown, role?: string) => void;
26
+ };
27
+ /** Namespace i18n (comparte el de `val-api-keys-modal`). */
28
+ i18nNamespace: string;
29
+ /** Callback tras crear una key (pasado por `componentProps` — refresca la lista). */
30
+ onCreated?: () => void;
31
+ readonly catalogPermissions: import("@angular/core").WritableSignal<PermissionResource[]>;
32
+ readonly actionLabels: import("@angular/core").WritableSignal<Record<string, LocalizedLabel>>;
33
+ readonly selectedPerms: import("@angular/core").WritableSignal<string[]>;
34
+ readonly submitting: import("@angular/core").WritableSignal<boolean>;
35
+ readonly errorMsg: import("@angular/core").WritableSignal<string>;
36
+ readonly secret: import("@angular/core").WritableSignal<ClientApiKeyWithSecret>;
37
+ readonly copied: import("@angular/core").WritableSignal<boolean>;
38
+ /** Emite cuando se creó una key (además del callback `onCreated`). */
39
+ created: EventEmitter<void>;
40
+ readonly createForm: import("@angular/core").Signal<FormMetadata>;
41
+ constructor();
42
+ ngOnInit(): void;
43
+ /**
44
+ * Carga el catálogo y lo filtra a lo asignable a una API Key de la org: descarta
45
+ * `internal` (el backend ya los omite para no-staff) y los permisos de OTRAS apps.
46
+ */
47
+ private loadCatalog;
48
+ private activeOrgId;
49
+ onCreateSubmit(event: FormSubmit): void;
50
+ copy(secret: string): Promise<void>;
51
+ finishSecret(): void;
52
+ dismiss(): void;
53
+ t(key: string): string;
54
+ static ɵfac: i0.ɵɵFactoryDeclaration<ApiKeyCreateModalComponent, never>;
55
+ static ɵcmp: i0.ɵɵComponentDeclaration<ApiKeyCreateModalComponent, "val-api-key-create-modal", never, { "_modalRef": { "alias": "_modalRef"; "required": false; }; "i18nNamespace": { "alias": "i18nNamespace"; "required": false; }; "onCreated": { "alias": "onCreated"; "required": false; }; }, { "created": "created"; }, never, never, true, never>;
56
+ }
@@ -0,0 +1,58 @@
1
+ import { EmptyStateMetadata } from '../../molecules/empty-state/types';
2
+ import { ButtonMetadata } from '../../types';
3
+ import { ClientApiKey } from '../../../services/apikeys/types';
4
+ import { ApiKeysViewConfig } from './types';
5
+ import * as i0 from "@angular/core";
6
+ /** Key enriquecida con el perfil público (handle/avatar/name) de su creador. */
7
+ interface ApiKeyRow extends ClientApiKey {
8
+ creatorName?: string;
9
+ creatorHandle?: string;
10
+ creatorAvatar?: string;
11
+ }
12
+ /**
13
+ * `val-api-keys-view` — vista full-feature de gestión de Client API Keys (ADR-021).
14
+ *
15
+ * Reemplaza al `val-api-keys-modal` como pantalla propia: ofrece **crear** arriba
16
+ * (CTA que abre `val-api-key-create-modal`) y **lista** abajo, con quién la creó
17
+ * (avatar + handle, resuelto de `/profiles`) y la fecha de creación. Revocar con
18
+ * confirmación destructiva. Estados loading / error / empty (Capa 4).
19
+ *
20
+ * NO renderiza ion-content — vive dentro de `val-page-wrapper`. Header vía
21
+ * `NavigationService.setBackHeader`. i18n auto-registrado bajo `i18nNamespace`.
22
+ */
23
+ export declare class ApiKeysViewComponent {
24
+ private i18n;
25
+ private auth;
26
+ private apiKeys;
27
+ private firestore;
28
+ private nav;
29
+ private modalService;
30
+ private toast;
31
+ private confirmDialog;
32
+ private errors;
33
+ private route;
34
+ /** Config vía @Input (object-first); fallback al route data `apiKeysConfig`. */
35
+ config?: ApiKeysViewConfig;
36
+ readonly resolvedConfig: import("@angular/core").Signal<Required<ApiKeysViewConfig>>;
37
+ private get ns();
38
+ readonly keys: import("@angular/core").WritableSignal<ApiKeyRow[]>;
39
+ readonly loading: import("@angular/core").WritableSignal<boolean>;
40
+ readonly loadError: import("@angular/core").WritableSignal<unknown>;
41
+ readonly activeOrgId: import("@angular/core").Signal<string>;
42
+ readonly newKeyButton: import("@angular/core").Signal<Partial<ButtonMetadata>>;
43
+ readonly errorState: import("@angular/core").Signal<EmptyStateMetadata>;
44
+ readonly emptyState: import("@angular/core").Signal<EmptyStateMetadata>;
45
+ constructor();
46
+ revokeButton(k: ApiKeyRow): Partial<ButtonMetadata>;
47
+ load(): void;
48
+ /** Resuelve handle/avatar/name del creador (`createdBy`) desde `/profiles`. */
49
+ private enrichWithCreators;
50
+ creatorLabel(k: ApiKeyRow): string;
51
+ formatDate(iso?: string): string;
52
+ openCreate(): void;
53
+ revoke(k: ApiKeyRow): Promise<void>;
54
+ protected tt(key: string): string;
55
+ static ɵfac: i0.ɵɵFactoryDeclaration<ApiKeysViewComponent, never>;
56
+ static ɵcmp: i0.ɵɵComponentDeclaration<ApiKeysViewComponent, "val-api-keys-view", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
57
+ }
58
+ export {};
@@ -0,0 +1,6 @@
1
+ import { LanguagesContent } from '../../../services/i18n/types';
2
+ /**
3
+ * Defaults i18n (es/en) de `val-api-keys-view`. Auto-registrados si el consumer no
4
+ * proveyó el namespace `Settings.ApiKeys`.
5
+ */
6
+ export declare const API_KEYS_VIEW_I18N: LanguagesContent;
@@ -0,0 +1,22 @@
1
+ import { Routes } from '@angular/router';
2
+ import { ApiKeysViewConfig } from './types';
3
+ /**
4
+ * Helper para montar la vista de Client API Keys (`val-api-keys-view`) como ruta
5
+ * en una app del factory. El `config` se pasa por route `data` (`apiKeysConfig`) y
6
+ * el componente lo lee como fallback de su `@Input() config`.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * // settings.routes.ts
11
+ * import { provideValtechApiKeysRoutes } from 'valtech-components';
12
+ *
13
+ * export const settingsRoutes: Routes = [
14
+ * ...provideValtechApiKeysRoutes(), // → /app/settings/api-keys
15
+ * // ...provideValtechApiKeysRoutes({ path: 'integrations/keys' }),
16
+ * ];
17
+ * ```
18
+ */
19
+ export declare function provideValtechApiKeysRoutes(opts?: {
20
+ path?: string;
21
+ config?: ApiKeysViewConfig;
22
+ }): Routes;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Config acotada de `val-api-keys-view` (ADR-021: una vista full-feature no abre
3
+ * slots arbitrarios; si falta algo, se promueve un nuevo punto de extensión).
4
+ */
5
+ export interface ApiKeysViewConfig {
6
+ /** Namespace i18n de los textos de la vista. Default `Settings.ApiKeys`. */
7
+ i18nNamespace?: string;
8
+ }
@@ -45,6 +45,12 @@ export interface OrganizationViewConfig {
45
45
  * "Ver roles y permisos"). Default `'/app/settings/permissions'`.
46
46
  */
47
47
  viewPermissionsRoute?: string;
48
+ /**
49
+ * Ruta a la que navegar al gestionar las API Keys (botón "Gestionar" de la
50
+ * sección Integraciones). Apunta a `val-api-keys-view`
51
+ * (`provideValtechApiKeysRoutes`). Default `'/app/settings/api-keys'`.
52
+ */
53
+ apiKeysRoute?: string;
48
54
  /**
49
55
  * Ruta a la que redirigir tras salir de la organización.
50
56
  * Default `'/app/settings/account'`.
@@ -0,0 +1,51 @@
1
+ import { AfterViewInit, ElementRef, EventEmitter, OnDestroy } from '@angular/core';
2
+ import { QrScannerMetadata, QrScannerState } from './types';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * val-qr-scanner
6
+ *
7
+ * Organism: scanner de códigos QR por cámara (`@zxing/browser` +
8
+ * `@zxing/library`). Emite el texto decodificado por `(scanned)`.
9
+ *
10
+ * Maneja: permiso de cámara denegado (`denied`), ausencia de cámara
11
+ * (`no-camera`), selector cuando hay varias cámaras, y botón start/stop. Hace
12
+ * cleanup del stream en `ngOnDestroy`. i18n auto-registrado (namespace
13
+ * `QrScanner`).
14
+ *
15
+ * Object-first (`@Input() props`) + un único `@Output() scanned`.
16
+ *
17
+ * @example
18
+ * ```html
19
+ * <val-qr-scanner [props]="{ continuous: true }" (scanned)="onScan($event)" />
20
+ * ```
21
+ */
22
+ export declare class QrScannerComponent implements AfterViewInit, OnDestroy {
23
+ props: QrScannerMetadata;
24
+ /** Emite el texto decodificado del QR. */
25
+ scanned: EventEmitter<string>;
26
+ videoRef: ElementRef<HTMLVideoElement>;
27
+ private i18n;
28
+ readonly state: import("@angular/core").WritableSignal<QrScannerState>;
29
+ readonly devices: import("@angular/core").WritableSignal<MediaDeviceInfo[]>;
30
+ readonly activeDeviceId: import("@angular/core").WritableSignal<string>;
31
+ private reader;
32
+ private controls;
33
+ private lastValue;
34
+ private lastAt;
35
+ private viewReady;
36
+ constructor();
37
+ ngAfterViewInit(): void;
38
+ ngOnDestroy(): void;
39
+ t(key: string): string;
40
+ stateMessage(): string;
41
+ deviceLabel(d: MediaDeviceInfo): string;
42
+ start(deviceId?: string): Promise<void>;
43
+ stop(): void;
44
+ onSelectDevice(deviceId: string): Promise<void>;
45
+ private handleResult;
46
+ private handleStartError;
47
+ /** Detiene el decode + libera el stream de la cámara. */
48
+ private teardown;
49
+ static ɵfac: i0.ɵɵFactoryDeclaration<QrScannerComponent, never>;
50
+ static ɵcmp: i0.ɵɵComponentDeclaration<QrScannerComponent, "val-qr-scanner", never, { "props": { "alias": "props"; "required": false; }; }, { "scanned": "scanned"; }, never, never, true, never>;
51
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Defaults i18n (es/en) del `val-qr-scanner`. Auto-registrados en el
3
+ * constructor (namespace `QrScanner`) — el consumer NUNCA tiene que
4
+ * registrarlos. Override por props (start/stop) o registrando el namespace.
5
+ */
6
+ export declare const QR_SCANNER_I18N: {
7
+ readonly es: {
8
+ readonly start: "Iniciar cámara";
9
+ readonly stop: "Detener";
10
+ readonly starting: "Iniciando cámara…";
11
+ readonly hint: "Apunta la cámara al código QR de la entrada.";
12
+ readonly cameraLabel: "Cámara";
13
+ readonly denied: "No se pudo acceder a la cámara. Revisa los permisos del navegador e inténtalo de nuevo.";
14
+ readonly noCamera: "No se encontró ninguna cámara en este dispositivo.";
15
+ readonly error: "Ocurrió un problema con la cámara. Inténtalo de nuevo.";
16
+ };
17
+ readonly en: {
18
+ readonly start: "Start camera";
19
+ readonly stop: "Stop";
20
+ readonly starting: "Starting camera…";
21
+ readonly hint: "Point the camera at the ticket QR code.";
22
+ readonly cameraLabel: "Camera";
23
+ readonly denied: "Could not access the camera. Check your browser permissions and try again.";
24
+ readonly noCamera: "No camera was found on this device.";
25
+ readonly error: "Something went wrong with the camera. Please try again.";
26
+ };
27
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Metadata (object-first) del organism `val-qr-scanner`.
3
+ *
4
+ * Scanner de QR por cámara. Todos los campos son opcionales (la cámara
5
+ * funciona con defaults). El consumer pasa los labels ya resueltos por i18n;
6
+ * si no, el componente cae a sus defaults auto-registrados (namespace
7
+ * `QrScanner`).
8
+ */
9
+ export interface QrScannerMetadata {
10
+ /** Arrancar la cámara automáticamente al montar (default false). */
11
+ autoStart?: boolean;
12
+ /** Label del botón de iniciar (override del auto-i18n). */
13
+ startLabel?: string;
14
+ /** Label del botón de detener (override del auto-i18n). */
15
+ stopLabel?: string;
16
+ /**
17
+ * Mantener la cámara encendida tras un escaneo exitoso (default true). Si es
18
+ * `false`, el scanner se detiene solo al primer match — útil para flujos de
19
+ * un solo canje. Si es `true`, sigue escaneando (la página decide cuándo
20
+ * parar / reanudar).
21
+ */
22
+ continuous?: boolean;
23
+ /**
24
+ * Anti-rebote entre lecturas del MISMO valor, en ms (default 1500). Evita
25
+ * que el mismo QR dispare `scanned` muchas veces por segundo mientras está
26
+ * frente a la cámara.
27
+ */
28
+ dedupeMs?: number;
29
+ }
30
+ /** Estado interno del scanner (expuesto para feedback de UI). */
31
+ export type QrScannerState = 'idle' | 'starting' | 'scanning' | 'denied' | 'no-camera' | 'error';
@@ -5,6 +5,7 @@ import { SecurityViewConfig } from '../security-view/types';
5
5
  import { AccountViewConfig } from '../account-view/types';
6
6
  import { OrganizationViewConfig } from '../organization-view/types';
7
7
  import { NotificationPreferencesViewConfig } from '../notification-preferences-view/types';
8
+ import { ApiKeysViewConfig } from '../api-keys-view/types';
8
9
  import { PermissionsViewConfig } from '../permissions-view/types';
9
10
  import { SettingsHubConfig } from './types';
10
11
  /**
@@ -58,6 +59,10 @@ export interface ValtechSettingsRoutesOptions {
58
59
  includeNotificationPreferences?: boolean;
59
60
  /** Monta la ruta `permissions`. Default `true`. */
60
61
  includePermissions?: boolean;
62
+ /** Monta la ruta `api-keys` (`val-api-keys-view`). Default `false` (opt-in). */
63
+ includeApiKeys?: boolean;
64
+ /** Config de la vista API Keys (pass-through a `provideValtechApiKeysRoutes`). */
65
+ apiKeysConfig?: ApiKeysViewConfig;
61
66
  /** Path de la vista Preferencias. Default `'preferences'`. */
62
67
  preferencesPath?: string;
63
68
  /** Path de la vista Preferencias de notificaciones push. Default `'notifications'`. */
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 = "2.0.1023";
5
+ export declare const VERSION = "2.0.1025";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valtech-components",
3
- "version": "2.0.1023",
3
+ "version": "2.0.1025",
4
4
  "private": false,
5
5
  "bin": {
6
6
  "valtech-firebase-config": "./src/lib/services/firebase/scripts/generate-sw-config.js"
@@ -36,6 +36,8 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@capacitor/browser": "^6.0.3",
39
+ "@zxing/browser": "^0.2.0",
40
+ "@zxing/library": "^0.22.0",
39
41
  "compressorjs": "^1.3.0",
40
42
  "ng-otp-input": "^1.9.3",
41
43
  "ngx-image-cropper": "^9.0.0",
package/public-api.d.ts CHANGED
@@ -309,6 +309,10 @@ export * from './lib/components/organisms/member-detail-modal/member-detail-moda
309
309
  export * from './lib/components/organisms/member-detail-modal/types';
310
310
  export * from './lib/components/organisms/member-import-modal/member-import-modal.component';
311
311
  export * from './lib/components/organisms/api-keys-modal/api-keys-modal.component';
312
+ export * from './lib/components/organisms/api-key-create-modal/api-key-create-modal.component';
313
+ export * from './lib/components/organisms/api-keys-view/api-keys-view.component';
314
+ export * from './lib/components/organisms/api-keys-view/types';
315
+ export * from './lib/components/organisms/api-keys-view/api-keys.routes';
312
316
  export * from './lib/components/organisms/edit-org-modal/edit-org-modal.component';
313
317
  export * from './lib/components/organisms/transfer-ownership-modal/transfer-ownership-modal.component';
314
318
  export * from './lib/components/organisms/transfer-ownership-modal/types';
@@ -429,3 +433,7 @@ export * from './lib/components/molecules/content-card/content-card.component';
429
433
  export * from './lib/components/molecules/content-card/types';
430
434
  export * from './lib/components/organisms/auth-cta/auth-cta.component';
431
435
  export * from './lib/components/organisms/auth-cta/types';
436
+ export * from './lib/components/molecules/ticket-card/ticket-card.component';
437
+ export * from './lib/components/molecules/ticket-card/types';
438
+ export * from './lib/components/organisms/qr-scanner/qr-scanner.component';
439
+ export * from './lib/components/organisms/qr-scanner/types';