valtech-components 2.0.445 → 2.0.446

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 (50) hide show
  1. package/esm2022/public-api.mjs +9 -6
  2. package/fesm2022/valtech-components.mjs +5 -3237
  3. package/fesm2022/valtech-components.mjs.map +1 -1
  4. package/lib/components/organisms/article/article.component.d.ts +5 -5
  5. package/package.json +1 -1
  6. package/public-api.d.ts +0 -5
  7. package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +0 -352
  8. package/esm2022/lib/components/molecules/feedback-form/types.mjs +0 -2
  9. package/esm2022/lib/services/auth/auth-state.service.mjs +0 -173
  10. package/esm2022/lib/services/auth/auth.service.mjs +0 -454
  11. package/esm2022/lib/services/auth/config.mjs +0 -76
  12. package/esm2022/lib/services/auth/guards.mjs +0 -194
  13. package/esm2022/lib/services/auth/index.mjs +0 -70
  14. package/esm2022/lib/services/auth/interceptor.mjs +0 -98
  15. package/esm2022/lib/services/auth/storage.service.mjs +0 -138
  16. package/esm2022/lib/services/auth/sync.service.mjs +0 -146
  17. package/esm2022/lib/services/auth/token.service.mjs +0 -113
  18. package/esm2022/lib/services/auth/types.mjs +0 -29
  19. package/esm2022/lib/services/content/content-types/blog.mjs +0 -275
  20. package/esm2022/lib/services/content/content-types/documentation.mjs +0 -303
  21. package/esm2022/lib/services/content/content-types/news.mjs +0 -277
  22. package/esm2022/lib/services/content/index.mjs +0 -51
  23. package/esm2022/lib/services/content/transformer.mjs +0 -265
  24. package/esm2022/lib/services/content/types.mjs +0 -41
  25. package/esm2022/lib/services/feedback/config.mjs +0 -49
  26. package/esm2022/lib/services/feedback/feedback.service.mjs +0 -174
  27. package/esm2022/lib/services/feedback/index.mjs +0 -44
  28. package/esm2022/lib/services/feedback/types.mjs +0 -30
  29. package/lib/components/molecules/feedback-form/feedback-form.component.d.ts +0 -56
  30. package/lib/components/molecules/feedback-form/types.d.ts +0 -54
  31. package/lib/services/auth/auth-state.service.d.ts +0 -85
  32. package/lib/services/auth/auth.service.d.ts +0 -146
  33. package/lib/services/auth/config.d.ts +0 -38
  34. package/lib/services/auth/guards.d.ts +0 -123
  35. package/lib/services/auth/index.d.ts +0 -63
  36. package/lib/services/auth/interceptor.d.ts +0 -22
  37. package/lib/services/auth/storage.service.d.ts +0 -48
  38. package/lib/services/auth/sync.service.d.ts +0 -49
  39. package/lib/services/auth/token.service.d.ts +0 -51
  40. package/lib/services/auth/types.d.ts +0 -315
  41. package/lib/services/content/content-types/blog.d.ts +0 -148
  42. package/lib/services/content/content-types/documentation.d.ts +0 -183
  43. package/lib/services/content/content-types/news.d.ts +0 -162
  44. package/lib/services/content/index.d.ts +0 -49
  45. package/lib/services/content/transformer.d.ts +0 -96
  46. package/lib/services/content/types.d.ts +0 -220
  47. package/lib/services/feedback/config.d.ts +0 -35
  48. package/lib/services/feedback/feedback.service.d.ts +0 -76
  49. package/lib/services/feedback/index.d.ts +0 -40
  50. package/lib/services/feedback/types.d.ts +0 -107
@@ -1,174 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { HttpClient } from '@angular/common/http';
3
- import { firstValueFrom } from 'rxjs';
4
- import { VALTECH_FEEDBACK_CONFIG } from './config';
5
- import * as i0 from "@angular/core";
6
- /**
7
- * Servicio para gestionar feedback de usuarios.
8
- *
9
- * @example
10
- * ```typescript
11
- * @Component({...})
12
- * export class MyComponent {
13
- * private feedbackService = inject(FeedbackService);
14
- *
15
- * async submitFeedback() {
16
- * const response = await this.feedbackService.createAsync(
17
- * 'feedback',
18
- * 'Mi comentario',
19
- * 'Descripción detallada...'
20
- * );
21
- * console.log('Feedback enviado:', response.feedbackId);
22
- * }
23
- * }
24
- * ```
25
- */
26
- export class FeedbackService {
27
- constructor() {
28
- this.config = inject(VALTECH_FEEDBACK_CONFIG);
29
- this.http = inject(HttpClient);
30
- }
31
- /**
32
- * URL base para endpoints de feedback.
33
- */
34
- get baseUrl() {
35
- return `${this.config.apiUrl}${this.config.feedbackPrefix}`;
36
- }
37
- /**
38
- * Captura el contexto del dispositivo automáticamente.
39
- */
40
- captureDeviceContext() {
41
- const ua = navigator.userAgent;
42
- return {
43
- browser: this.detectBrowser(ua),
44
- os: this.detectOS(ua),
45
- viewport: `${window.innerWidth}x${window.innerHeight}`,
46
- language: navigator.language,
47
- userAgent: ua,
48
- pageUrl: window.location.href,
49
- };
50
- }
51
- /**
52
- * Crea un nuevo feedback.
53
- *
54
- * @param type - Tipo de feedback
55
- * @param title - Título del feedback
56
- * @param description - Descripción detallada
57
- * @param attachments - URLs de archivos adjuntos (opcional)
58
- * @param contentRef - Referencia a contenido específico (opcional)
59
- * @returns Observable con la respuesta
60
- */
61
- create(type, title, description, attachments = [], contentRef) {
62
- const request = {
63
- type,
64
- title,
65
- description,
66
- attachments,
67
- contentRef,
68
- deviceContext: this.captureDeviceContext(),
69
- appId: this.config.appId,
70
- };
71
- return this.http.post(this.baseUrl, request);
72
- }
73
- /**
74
- * Crea un nuevo feedback (versión async/await).
75
- */
76
- async createAsync(type, title, description, attachments = [], contentRef) {
77
- return firstValueFrom(this.create(type, title, description, attachments, contentRef));
78
- }
79
- /**
80
- * Obtiene un feedback por ID (solo el propietario).
81
- *
82
- * @param feedbackId - ID del feedback
83
- * @returns Observable con la respuesta
84
- */
85
- getById(feedbackId) {
86
- return this.http.get(`${this.baseUrl}/${feedbackId}`);
87
- }
88
- /**
89
- * Obtiene un feedback por ID (versión async/await).
90
- */
91
- async getByIdAsync(feedbackId) {
92
- return firstValueFrom(this.getById(feedbackId));
93
- }
94
- /**
95
- * Valida si un archivo cumple con las restricciones.
96
- */
97
- validateFile(file) {
98
- // Verificar tamaño
99
- if (file.size > this.config.maxFileSize) {
100
- const maxSizeMB = Math.round(this.config.maxFileSize / (1024 * 1024));
101
- return {
102
- valid: false,
103
- error: `El archivo excede el tamaño máximo de ${maxSizeMB}MB`,
104
- };
105
- }
106
- // Verificar tipo
107
- const allowedTypes = this.config.allowedFileTypes || [];
108
- const isAllowed = allowedTypes.some((pattern) => {
109
- if (pattern.endsWith('/*')) {
110
- const baseType = pattern.replace('/*', '');
111
- return file.type.startsWith(baseType);
112
- }
113
- return file.type === pattern;
114
- });
115
- if (!isAllowed) {
116
- return {
117
- valid: false,
118
- error: 'Tipo de archivo no permitido',
119
- };
120
- }
121
- return { valid: true };
122
- }
123
- /**
124
- * Obtiene la configuración actual del servicio.
125
- */
126
- getConfig() {
127
- return this.config;
128
- }
129
- // =========================================================================
130
- // Helpers privados para detección de browser/OS
131
- // =========================================================================
132
- detectBrowser(ua) {
133
- if (ua.includes('Edg/'))
134
- return 'Edge';
135
- if (ua.includes('Chrome/'))
136
- return 'Chrome';
137
- if (ua.includes('Firefox/'))
138
- return 'Firefox';
139
- if (ua.includes('Safari/') && !ua.includes('Chrome'))
140
- return 'Safari';
141
- if (ua.includes('Opera') || ua.includes('OPR/'))
142
- return 'Opera';
143
- return 'Unknown';
144
- }
145
- detectOS(ua) {
146
- if (ua.includes('Windows NT 10'))
147
- return 'Windows 10';
148
- if (ua.includes('Windows NT 11'))
149
- return 'Windows 11';
150
- if (ua.includes('Windows'))
151
- return 'Windows';
152
- if (ua.includes('Mac OS X')) {
153
- const match = ua.match(/Mac OS X (\d+[._]\d+)/);
154
- if (match) {
155
- return `macOS ${match[1].replace('_', '.')}`;
156
- }
157
- return 'macOS';
158
- }
159
- if (ua.includes('Android'))
160
- return 'Android';
161
- if (ua.includes('iPhone') || ua.includes('iPad'))
162
- return 'iOS';
163
- if (ua.includes('Linux'))
164
- return 'Linux';
165
- return 'Unknown';
166
- }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
168
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackService, providedIn: 'root' }); }
169
- }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackService, decorators: [{
171
- type: Injectable,
172
- args: [{ providedIn: 'root' }]
173
- }] });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZmVlZGJhY2svZmVlZGJhY2suc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBVW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFFVSxXQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDekMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQTJKbkM7SUF6SkM7O09BRUc7SUFDSCxJQUFZLE9BQU87UUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDL0IsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMvQixFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDckIsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQ3RELFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixTQUFTLEVBQUUsRUFBRTtZQUNiLE9BQU8sRUFBRSxNQUFN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QUFTLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM3QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvRCxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDekMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzsrR0E1SlUsZUFBZTttSEFBZixlQUFlLGNBREYsTUFBTTs7NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZBTFRFQ0hfRkVFREJBQ0tfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlRmVlZGJhY2tSZXF1ZXN0LFxuICBDcmVhdGVGZWVkYmFja1Jlc3BvbnNlLFxuICBHZXRGZWVkYmFja1Jlc3BvbnNlLFxuICBEZXZpY2VDb250ZXh0LFxuICBGZWVkYmFja1R5cGUsXG4gIENvbnRlbnRSZWYsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgZ2VzdGlvbmFyIGZlZWRiYWNrIGRlIHVzdWFyaW9zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBmZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoRmVlZGJhY2tTZXJ2aWNlKTtcbiAqXG4gKiAgIGFzeW5jIHN1Ym1pdEZlZWRiYWNrKCkge1xuICogICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZWVkYmFja1NlcnZpY2UuY3JlYXRlQXN5bmMoXG4gKiAgICAgICAnZmVlZGJhY2snLFxuICogICAgICAgJ01pIGNvbWVudGFyaW8nLFxuICogICAgICAgJ0Rlc2NyaXBjacOzbiBkZXRhbGxhZGEuLi4nXG4gKiAgICAgKTtcbiAqICAgICBjb25zb2xlLmxvZygnRmVlZGJhY2sgZW52aWFkbzonLCByZXNwb25zZS5mZWVkYmFja0lkKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRmVlZGJhY2tTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWcgPSBpbmplY3QoVkFMVEVDSF9GRUVEQkFDS19DT05GSUcpO1xuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cbiAgLyoqXG4gICAqIFVSTCBiYXNlIHBhcmEgZW5kcG9pbnRzIGRlIGZlZWRiYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgYmFzZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9JHt0aGlzLmNvbmZpZy5mZWVkYmFja1ByZWZpeH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZWwgY29udGV4dG8gZGVsIGRpc3Bvc2l0aXZvIGF1dG9tw6F0aWNhbWVudGUuXG4gICAqL1xuICBjYXB0dXJlRGV2aWNlQ29udGV4dCgpOiBEZXZpY2VDb250ZXh0IHtcbiAgICBjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJyb3dzZXI6IHRoaXMuZGV0ZWN0QnJvd3Nlcih1YSksXG4gICAgICBvczogdGhpcy5kZXRlY3RPUyh1YSksXG4gICAgICB2aWV3cG9ydDogYCR7d2luZG93LmlubmVyV2lkdGh9eCR7d2luZG93LmlubmVySGVpZ2h0fWAsXG4gICAgICBsYW5ndWFnZTogbmF2aWdhdG9yLmxhbmd1YWdlLFxuICAgICAgdXNlckFnZW50OiB1YSxcbiAgICAgIHBhZ2VVcmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYSB1biBudWV2byBmZWVkYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBUaXBvIGRlIGZlZWRiYWNrXG4gICAqIEBwYXJhbSB0aXRsZSAtIFTDrXR1bG8gZGVsIGZlZWRiYWNrXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAtIERlc2NyaXBjacOzbiBkZXRhbGxhZGFcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRzIC0gVVJMcyBkZSBhcmNoaXZvcyBhZGp1bnRvcyAob3BjaW9uYWwpXG4gICAqIEBwYXJhbSBjb250ZW50UmVmIC0gUmVmZXJlbmNpYSBhIGNvbnRlbmlkbyBlc3BlY8OtZmljbyAob3BjaW9uYWwpXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgY29uIGxhIHJlc3B1ZXN0YVxuICAgKi9cbiAgY3JlYXRlKFxuICAgIHR5cGU6IEZlZWRiYWNrVHlwZSxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM6IHN0cmluZ1tdID0gW10sXG4gICAgY29udGVudFJlZj86IENvbnRlbnRSZWZcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVGZWVkYmFja1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdDogQ3JlYXRlRmVlZGJhY2tSZXF1ZXN0ID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHRpdGxlLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBhdHRhY2htZW50cyxcbiAgICAgIGNvbnRlbnRSZWYsXG4gICAgICBkZXZpY2VDb250ZXh0OiB0aGlzLmNhcHR1cmVEZXZpY2VDb250ZXh0KCksXG4gICAgICBhcHBJZDogdGhpcy5jb25maWcuYXBwSWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDcmVhdGVGZWVkYmFja1Jlc3BvbnNlPih0aGlzLmJhc2VVcmwsIHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWEgdW4gbnVldm8gZmVlZGJhY2sgKHZlcnNpw7NuIGFzeW5jL2F3YWl0KS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUFzeW5jKFxuICAgIHR5cGU6IEZlZWRiYWNrVHlwZSxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM6IHN0cmluZ1tdID0gW10sXG4gICAgY29udGVudFJlZj86IENvbnRlbnRSZWZcbiAgKTogUHJvbWlzZTxDcmVhdGVGZWVkYmFja1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5jcmVhdGUodHlwZSwgdGl0bGUsIGRlc2NyaXB0aW9uLCBhdHRhY2htZW50cywgY29udGVudFJlZilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW4gZmVlZGJhY2sgcG9yIElEIChzb2xvIGVsIHByb3BpZXRhcmlvKS5cbiAgICpcbiAgICogQHBhcmFtIGZlZWRiYWNrSWQgLSBJRCBkZWwgZmVlZGJhY2tcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBjb24gbGEgcmVzcHVlc3RhXG4gICAqL1xuICBnZXRCeUlkKGZlZWRiYWNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8R2V0RmVlZGJhY2tSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEdldEZlZWRiYWNrUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vJHtmZWVkYmFja0lkfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW4gZmVlZGJhY2sgcG9yIElEICh2ZXJzacOzbiBhc3luYy9hd2FpdCkuXG4gICAqL1xuICBhc3luYyBnZXRCeUlkQXN5bmMoZmVlZGJhY2tJZDogc3RyaW5nKTogUHJvbWlzZTxHZXRGZWVkYmFja1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuZ2V0QnlJZChmZWVkYmFja0lkKSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhIHNpIHVuIGFyY2hpdm8gY3VtcGxlIGNvbiBsYXMgcmVzdHJpY2Npb25lcy5cbiAgICovXG4gIHZhbGlkYXRlRmlsZShmaWxlOiBGaWxlKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gICAgLy8gVmVyaWZpY2FyIHRhbWHDsW9cbiAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5jb25maWcubWF4RmlsZVNpemUhKSB7XG4gICAgICBjb25zdCBtYXhTaXplTUIgPSBNYXRoLnJvdW5kKHRoaXMuY29uZmlnLm1heEZpbGVTaXplISAvICgxMDI0ICogMTAyNCkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYEVsIGFyY2hpdm8gZXhjZWRlIGVsIHRhbWHDsW8gbcOheGltbyBkZSAke21heFNpemVNQn1NQmAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciB0aXBvXG4gICAgY29uc3QgYWxsb3dlZFR5cGVzID0gdGhpcy5jb25maWcuYWxsb3dlZEZpbGVUeXBlcyB8fCBbXTtcbiAgICBjb25zdCBpc0FsbG93ZWQgPSBhbGxvd2VkVHlwZXMuc29tZSgocGF0dGVybikgPT4ge1xuICAgICAgaWYgKHBhdHRlcm4uZW5kc1dpdGgoJy8qJykpIHtcbiAgICAgICAgY29uc3QgYmFzZVR5cGUgPSBwYXR0ZXJuLnJlcGxhY2UoJy8qJywgJycpO1xuICAgICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoYmFzZVR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbGUudHlwZSA9PT0gcGF0dGVybjtcbiAgICB9KTtcblxuICAgIGlmICghaXNBbGxvd2VkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIGVycm9yOiAnVGlwbyBkZSBhcmNoaXZvIG5vIHBlcm1pdGlkbycsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBhY3R1YWwgZGVsIHNlcnZpY2lvLlxuICAgKi9cbiAgZ2V0Q29uZmlnKCk6IFJlYWRvbmx5PHR5cGVvZiB0aGlzLmNvbmZpZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSGVscGVycyBwcml2YWRvcyBwYXJhIGRldGVjY2nDs24gZGUgYnJvd3Nlci9PU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBkZXRlY3RCcm93c2VyKHVhOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh1YS5pbmNsdWRlcygnRWRnLycpKSByZXR1cm4gJ0VkZ2UnO1xuICAgIGlmICh1YS5pbmNsdWRlcygnQ2hyb21lLycpKSByZXR1cm4gJ0Nocm9tZSc7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdGaXJlZm94LycpKSByZXR1cm4gJ0ZpcmVmb3gnO1xuICAgIGlmICh1YS5pbmNsdWRlcygnU2FmYXJpLycpICYmICF1YS5pbmNsdWRlcygnQ2hyb21lJykpIHJldHVybiAnU2FmYXJpJztcbiAgICBpZiAodWEuaW5jbHVkZXMoJ09wZXJhJykgfHwgdWEuaW5jbHVkZXMoJ09QUi8nKSkgcmV0dXJuICdPcGVyYSc7XG4gICAgcmV0dXJuICdVbmtub3duJztcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0T1ModWE6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdXaW5kb3dzIE5UIDEwJykpIHJldHVybiAnV2luZG93cyAxMCc7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdXaW5kb3dzIE5UIDExJykpIHJldHVybiAnV2luZG93cyAxMSc7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdXaW5kb3dzJykpIHJldHVybiAnV2luZG93cyc7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdNYWMgT1MgWCcpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHVhLm1hdGNoKC9NYWMgT1MgWCAoXFxkK1suX11cXGQrKS8pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHJldHVybiBgbWFjT1MgJHttYXRjaFsxXS5yZXBsYWNlKCdfJywgJy4nKX1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdtYWNPUyc7XG4gICAgfVxuICAgIGlmICh1YS5pbmNsdWRlcygnQW5kcm9pZCcpKSByZXR1cm4gJ0FuZHJvaWQnO1xuICAgIGlmICh1YS5pbmNsdWRlcygnaVBob25lJykgfHwgdWEuaW5jbHVkZXMoJ2lQYWQnKSkgcmV0dXJuICdpT1MnO1xuICAgIGlmICh1YS5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdMaW51eCc7XG4gICAgcmV0dXJuICdVbmtub3duJztcbiAgfVxufVxuIl19
@@ -1,44 +0,0 @@
1
- /**
2
- * Valtech Feedback Service
3
- *
4
- * Servicio para gestionar feedback de usuarios a nivel de plataforma.
5
- *
6
- * @example
7
- * ```typescript
8
- * // main.ts - Configuración
9
- * import { provideValtechFeedback } from 'valtech-components';
10
- *
11
- * bootstrapApplication(AppComponent, {
12
- * providers: [
13
- * provideValtechAuth({ apiUrl: environment.apiUrl }),
14
- * provideValtechFeedback({
15
- * apiUrl: environment.apiUrl,
16
- * appId: 'my-app-name',
17
- * }),
18
- * ],
19
- * });
20
- *
21
- * // component.ts - Uso
22
- * import { FeedbackService } from 'valtech-components';
23
- *
24
- * @Component({...})
25
- * export class MyComponent {
26
- * private feedbackService = inject(FeedbackService);
27
- *
28
- * async submitFeedback() {
29
- * const response = await this.feedbackService.createAsync(
30
- * 'feedback',
31
- * 'Título',
32
- * 'Descripción...'
33
- * );
34
- * }
35
- * }
36
- * ```
37
- */
38
- // Configuration
39
- export { VALTECH_FEEDBACK_CONFIG, provideValtechFeedback, DEFAULT_FEEDBACK_CONFIG } from './config';
40
- // Service
41
- export { FeedbackService } from './feedback.service';
42
- // Types
43
- export { DEFAULT_FEEDBACK_TYPE_OPTIONS, } from './types';
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZlZWRiYWNrL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUFFSCxnQkFBZ0I7QUFDaEIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBHLFVBQVU7QUFDVixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsUUFBUTtBQUNSLE9BQU8sRUFZTCw2QkFBNkIsR0FDOUIsTUFBTSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhbHRlY2ggRmVlZGJhY2sgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgZ2VzdGlvbmFyIGZlZWRiYWNrIGRlIHVzdWFyaW9zIGEgbml2ZWwgZGUgcGxhdGFmb3JtYS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gbWFpbi50cyAtIENvbmZpZ3VyYWNpw7NuXG4gKiBpbXBvcnQgeyBwcm92aWRlVmFsdGVjaEZlZWRiYWNrIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZVZhbHRlY2hBdXRoKHsgYXBpVXJsOiBlbnZpcm9ubWVudC5hcGlVcmwgfSksXG4gKiAgICAgcHJvdmlkZVZhbHRlY2hGZWVkYmFjayh7XG4gKiAgICAgICBhcGlVcmw6IGVudmlyb25tZW50LmFwaVVybCxcbiAqICAgICAgIGFwcElkOiAnbXktYXBwLW5hbWUnLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSk7XG4gKlxuICogLy8gY29tcG9uZW50LnRzIC0gVXNvXG4gKiBpbXBvcnQgeyBGZWVkYmFja1NlcnZpY2UgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBwcml2YXRlIGZlZWRiYWNrU2VydmljZSA9IGluamVjdChGZWVkYmFja1NlcnZpY2UpO1xuICpcbiAqICAgYXN5bmMgc3VibWl0RmVlZGJhY2soKSB7XG4gKiAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZlZWRiYWNrU2VydmljZS5jcmVhdGVBc3luYyhcbiAqICAgICAgICdmZWVkYmFjaycsXG4gKiAgICAgICAnVMOtdHVsbycsXG4gKiAgICAgICAnRGVzY3JpcGNpw7NuLi4uJ1xuICogICAgICk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5cbi8vIENvbmZpZ3VyYXRpb25cbmV4cG9ydCB7IFZBTFRFQ0hfRkVFREJBQ0tfQ09ORklHLCBwcm92aWRlVmFsdGVjaEZlZWRiYWNrLCBERUZBVUxUX0ZFRURCQUNLX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcblxuLy8gU2VydmljZVxuZXhwb3J0IHsgRmVlZGJhY2tTZXJ2aWNlIH0gZnJvbSAnLi9mZWVkYmFjay5zZXJ2aWNlJztcblxuLy8gVHlwZXNcbmV4cG9ydCB7XG4gIFZhbHRlY2hGZWVkYmFja0NvbmZpZyxcbiAgRmVlZGJhY2tUeXBlLFxuICBGZWVkYmFja1N0YXR1cyxcbiAgQ29udGVudFR5cGUsXG4gIENvbnRlbnRSZWYsXG4gIERldmljZUNvbnRleHQsXG4gIEZlZWRiYWNrLFxuICBDcmVhdGVGZWVkYmFja1JlcXVlc3QsXG4gIENyZWF0ZUZlZWRiYWNrUmVzcG9uc2UsXG4gIEdldEZlZWRiYWNrUmVzcG9uc2UsXG4gIEZlZWRiYWNrVHlwZU9wdGlvbixcbiAgREVGQVVMVF9GRUVEQkFDS19UWVBFX09QVElPTlMsXG59IGZyb20gJy4vdHlwZXMnO1xuIl19
@@ -1,30 +0,0 @@
1
- /**
2
- * Configuración por defecto de tipos de feedback.
3
- */
4
- export const DEFAULT_FEEDBACK_TYPE_OPTIONS = [
5
- {
6
- value: 'issue',
7
- label: 'Reportar problema',
8
- description: 'Algo no funciona correctamente',
9
- icon: 'bug-outline',
10
- },
11
- {
12
- value: 'poor-content',
13
- label: 'Contenido incorrecto',
14
- description: 'Información incorrecta o desactualizada',
15
- icon: 'document-text-outline',
16
- },
17
- {
18
- value: 'feedback',
19
- label: 'Comentario general',
20
- description: 'Tu opinión o experiencia',
21
- icon: 'chatbubble-outline',
22
- },
23
- {
24
- value: 'suggestion',
25
- label: 'Sugerencia',
26
- description: 'Propuesta de mejora o nueva funcionalidad',
27
- icon: 'bulb-outline',
28
- },
29
- ];
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZlZWRiYWNrL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlIQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUF5QjtJQUNqRTtRQUNFLEtBQUssRUFBRSxPQUFPO1FBQ2QsS0FBSyxFQUFFLG1CQUFtQjtRQUMxQixXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLElBQUksRUFBRSxhQUFhO0tBQ3BCO0lBQ0Q7UUFDRSxLQUFLLEVBQUUsY0FBYztRQUNyQixLQUFLLEVBQUUsc0JBQXNCO1FBQzdCLFdBQVcsRUFBRSx5Q0FBeUM7UUFDdEQsSUFBSSxFQUFFLHVCQUF1QjtLQUM5QjtJQUNEO1FBQ0UsS0FBSyxFQUFFLFVBQVU7UUFDakIsS0FBSyxFQUFFLG9CQUFvQjtRQUMzQixXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLElBQUksRUFBRSxvQkFBb0I7S0FDM0I7SUFDRDtRQUNFLEtBQUssRUFBRSxZQUFZO1FBQ25CLEtBQUssRUFBRSxZQUFZO1FBQ25CLFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsSUFBSSxFQUFFLGNBQWM7S0FDckI7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmFjacOzbiBkZWwgc2VydmljaW8gZGUgRmVlZGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdGVjaEZlZWRiYWNrQ29uZmlnIHtcbiAgLyoqIFVSTCBiYXNlIGRlIGxhIEFQSSAqL1xuICBhcGlVcmw6IHN0cmluZztcbiAgLyoqIElEIGRlIGxhIGFwbGljYWNpw7NuIChlajogJ215LXZhbHRlY2gtYXBwJykgKi9cbiAgYXBwSWQ6IHN0cmluZztcbiAgLyoqIFByZWZpam8gcGFyYSBlbmRwb2ludHMgKGRlZmF1bHQ6ICcvdjEvZmVlZGJhY2snKSAqL1xuICBmZWVkYmFja1ByZWZpeD86IHN0cmluZztcbiAgLyoqIE7Dum1lcm8gbcOheGltbyBkZSBhZGp1bnRvcyAoZGVmYXVsdDogNSkgKi9cbiAgbWF4QXR0YWNobWVudHM/OiBudW1iZXI7XG4gIC8qKiBUYW1hw7FvIG3DoXhpbW8gcG9yIGFyY2hpdm8gZW4gYnl0ZXMgKGRlZmF1bHQ6IDEwTUIpICovXG4gIG1heEZpbGVTaXplPzogbnVtYmVyO1xuICAvKiogVGlwb3MgZGUgYXJjaGl2byBwZXJtaXRpZG9zIChkZWZhdWx0OiBbJ2ltYWdlLyonLCAndmlkZW8vKicsICdhcHBsaWNhdGlvbi9wZGYnXSkgKi9cbiAgYWxsb3dlZEZpbGVUeXBlcz86IHN0cmluZ1tdO1xuICAvKiogUnV0YSBlbiBGaXJlYmFzZSBTdG9yYWdlIHBhcmEgYWRqdW50b3MgKGRlZmF1bHQ6ICdmZWVkYmFjaycpICovXG4gIHN0b3JhZ2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRpcG9zIGRlIGZlZWRiYWNrIGRpc3BvbmlibGVzLlxuICovXG5leHBvcnQgdHlwZSBGZWVkYmFja1R5cGUgPSAnaXNzdWUnIHwgJ3Bvb3ItY29udGVudCcgfCAnZmVlZGJhY2snIHwgJ3N1Z2dlc3Rpb24nO1xuXG4vKipcbiAqIEVzdGFkbyBkZSB1biBmZWVkYmFjay5cbiAqL1xuZXhwb3J0IHR5cGUgRmVlZGJhY2tTdGF0dXMgPSAnbmV3JyB8ICdyZXZpZXdlZCcgfCAncmVzb2x2ZWQnO1xuXG4vKipcbiAqIFRpcG9zIGRlIGNvbnRlbmlkbyBwYXJhIHJlZmVyZW5jaWEuXG4gKi9cbmV4cG9ydCB0eXBlIENvbnRlbnRUeXBlID1cbiAgfCAnYXJ0aWNsZSdcbiAgfCAnZmFxJ1xuICB8ICduZXdzJ1xuICB8ICdwYWdlJ1xuICB8ICdwcm9kdWN0J1xuICB8ICdldmVudCdcbiAgfCAnb3RoZXInO1xuXG4vKipcbiAqIFJlZmVyZW5jaWEgYSBjb250ZW5pZG8gZXNwZWPDrWZpY28uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFJlZiB7XG4gIGNvbnRlbnRJZDogc3RyaW5nO1xuICBjb250ZW50VHlwZTogQ29udGVudFR5cGU7XG59XG5cbi8qKlxuICogQ29udGV4dG8gZGVsIGRpc3Bvc2l0aXZvIGRlbCB1c3VhcmlvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUNvbnRleHQge1xuICBicm93c2VyOiBzdHJpbmc7XG4gIG9zOiBzdHJpbmc7XG4gIHZpZXdwb3J0OiBzdHJpbmc7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHVzZXJBZ2VudDogc3RyaW5nO1xuICBwYWdlVXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW50cmFkYSBkZSBmZWVkYmFjayBjb21wbGV0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFjayB7XG4gIGZlZWRiYWNrSWQ6IHN0cmluZztcbiAgYXBwSWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHR5cGU6IEZlZWRiYWNrVHlwZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYXR0YWNobWVudHM6IHN0cmluZ1tdO1xuICBjb250ZW50UmVmPzogQ29udGVudFJlZjtcbiAgZGV2aWNlQ29udGV4dDogRGV2aWNlQ29udGV4dDtcbiAgc3RhdHVzOiBGZWVkYmFja1N0YXR1cztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBjcmVhciBmZWVkYmFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVGZWVkYmFja1JlcXVlc3Qge1xuICB0eXBlOiBGZWVkYmFja1R5cGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGF0dGFjaG1lbnRzPzogc3RyaW5nW107XG4gIGNvbnRlbnRSZWY/OiBDb250ZW50UmVmO1xuICBkZXZpY2VDb250ZXh0OiBEZXZpY2VDb250ZXh0O1xuICBhcHBJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGFsIGNyZWFyIGZlZWRiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUZlZWRiYWNrUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBmZWVkYmFja0lkOiBzdHJpbmc7XG4gIHN0YXR1czogRmVlZGJhY2tTdGF0dXM7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGFsIG9idGVuZXIgZmVlZGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmVlZGJhY2tSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGZlZWRiYWNrOiBGZWVkYmFjaztcbn1cblxuLyoqXG4gKiBPcGNpb25lcyBkZSB0aXBvIGRlIGZlZWRiYWNrIHBhcmEgVUkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tUeXBlT3B0aW9uIHtcbiAgdmFsdWU6IEZlZWRiYWNrVHlwZTtcbiAgbGFiZWw6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhY2nDs24gcG9yIGRlZmVjdG8gZGUgdGlwb3MgZGUgZmVlZGJhY2suXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFRURCQUNLX1RZUEVfT1BUSU9OUzogRmVlZGJhY2tUeXBlT3B0aW9uW10gPSBbXG4gIHtcbiAgICB2YWx1ZTogJ2lzc3VlJyxcbiAgICBsYWJlbDogJ1JlcG9ydGFyIHByb2JsZW1hJyxcbiAgICBkZXNjcmlwdGlvbjogJ0FsZ28gbm8gZnVuY2lvbmEgY29ycmVjdGFtZW50ZScsXG4gICAgaWNvbjogJ2J1Zy1vdXRsaW5lJyxcbiAgfSxcbiAge1xuICAgIHZhbHVlOiAncG9vci1jb250ZW50JyxcbiAgICBsYWJlbDogJ0NvbnRlbmlkbyBpbmNvcnJlY3RvJyxcbiAgICBkZXNjcmlwdGlvbjogJ0luZm9ybWFjacOzbiBpbmNvcnJlY3RhIG8gZGVzYWN0dWFsaXphZGEnLFxuICAgIGljb246ICdkb2N1bWVudC10ZXh0LW91dGxpbmUnLFxuICB9LFxuICB7XG4gICAgdmFsdWU6ICdmZWVkYmFjaycsXG4gICAgbGFiZWw6ICdDb21lbnRhcmlvIGdlbmVyYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnVHUgb3BpbmnDs24gbyBleHBlcmllbmNpYScsXG4gICAgaWNvbjogJ2NoYXRidWJibGUtb3V0bGluZScsXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGxhYmVsOiAnU3VnZXJlbmNpYScsXG4gICAgZGVzY3JpcHRpb246ICdQcm9wdWVzdGEgZGUgbWVqb3JhIG8gbnVldmEgZnVuY2lvbmFsaWRhZCcsXG4gICAgaWNvbjogJ2J1bGItb3V0bGluZScsXG4gIH0sXG5dO1xuIl19
@@ -1,56 +0,0 @@
1
- import { EventEmitter, OnInit } from '@angular/core';
2
- import { FormGroup } from '@angular/forms';
3
- import { FeedbackFormMetadata, FeedbackSubmitEvent } from './types';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * val-feedback-form
7
- *
8
- * Formulario reutilizable para enviar feedback desde cualquier parte de la aplicación.
9
- *
10
- * @example
11
- * ```html
12
- * <!-- Feedback general -->
13
- * <val-feedback-form
14
- * [props]="{ defaultType: 'feedback', showTypeSelector: true }"
15
- * (onSubmit)="handleSuccess($event)"
16
- * (onCancel)="closeModal()"
17
- * />
18
- *
19
- * <!-- Reportar contenido incorrecto -->
20
- * <val-feedback-form
21
- * [props]="{
22
- * defaultType: 'poor-content',
23
- * showTypeSelector: false,
24
- * contentRef: { contentId: article.id, contentType: 'article' },
25
- * submitButtonText: 'Reportar contenido'
26
- * }"
27
- * />
28
- * ```
29
- */
30
- export declare class FeedbackFormComponent implements OnInit {
31
- /**
32
- * Configuración del formulario.
33
- */
34
- props: FeedbackFormMetadata;
35
- /**
36
- * Evento emitido cuando el feedback se envía exitosamente.
37
- */
38
- onSubmit: EventEmitter<FeedbackSubmitEvent>;
39
- /**
40
- * Evento emitido cuando el usuario cancela.
41
- */
42
- onCancel: EventEmitter<void>;
43
- private fb;
44
- private feedbackService;
45
- form: FormGroup;
46
- typeOptions: import("../../../services/feedback").FeedbackTypeOption[];
47
- isSubmitting: import("@angular/core").WritableSignal<boolean>;
48
- isSuccess: import("@angular/core").WritableSignal<boolean>;
49
- error: import("@angular/core").WritableSignal<string>;
50
- constructor();
51
- ngOnInit(): void;
52
- handleSubmit(): Promise<void>;
53
- onCancelClick(): void;
54
- static ɵfac: i0.ɵɵFactoryDeclaration<FeedbackFormComponent, never>;
55
- static ɵcmp: i0.ɵɵComponentDeclaration<FeedbackFormComponent, "val-feedback-form", never, { "props": { "alias": "props"; "required": false; }; }, { "onSubmit": "onSubmit"; "onCancel": "onCancel"; }, never, never, true, never>;
56
- }
@@ -1,54 +0,0 @@
1
- import { FeedbackType, ContentRef, CreateFeedbackResponse, FeedbackTypeOption } from '../../../services/feedback/types';
2
- /**
3
- * Metadata para el componente FeedbackForm.
4
- */
5
- export interface FeedbackFormMetadata {
6
- /** Tipo de feedback preseleccionado */
7
- defaultType?: FeedbackType;
8
- /** Referencia a contenido (si aplica) */
9
- contentRef?: ContentRef;
10
- /** Mostrar selector de tipo (default: true) */
11
- showTypeSelector?: boolean;
12
- /** Tipos de feedback habilitados (por defecto todos) */
13
- enabledTypes?: FeedbackType[];
14
- /** Opciones personalizadas para tipos de feedback */
15
- typeOptions?: FeedbackTypeOption[];
16
- /** Placeholder para título */
17
- titlePlaceholder?: string;
18
- /** Placeholder para descripción */
19
- descriptionPlaceholder?: string;
20
- /** Label para campo de título */
21
- titleLabel?: string;
22
- /** Label para campo de descripción */
23
- descriptionLabel?: string;
24
- /** Texto del botón de envío */
25
- submitButtonText?: string;
26
- /** Texto del botón cancelar (si no se proporciona, no se muestra) */
27
- cancelButtonText?: string;
28
- /** Mostrar campo de adjuntos (default: true) */
29
- showAttachments?: boolean;
30
- /** Label para campo de adjuntos */
31
- attachmentsLabel?: string;
32
- /** Mensaje de éxito personalizado */
33
- successMessage?: string;
34
- /** CSS class adicional para el contenedor */
35
- cssClass?: string;
36
- /** Modo compacto (menos espaciado) */
37
- compact?: boolean;
38
- }
39
- /**
40
- * Evento emitido cuando el feedback se envía exitosamente.
41
- */
42
- export interface FeedbackSubmitEvent {
43
- response: CreateFeedbackResponse;
44
- type: FeedbackType;
45
- title: string;
46
- }
47
- /**
48
- * Estado del formulario.
49
- */
50
- export interface FeedbackFormState {
51
- isSubmitting: boolean;
52
- isSuccess: boolean;
53
- error: string | null;
54
- }
@@ -1,85 +0,0 @@
1
- import { AuthState, AuthUser, AuthError, MFAPendingState, StoredAuthState } from './types';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * Servicio para manejo de estado de autenticación con Angular Signals.
5
- * Proporciona estado reactivo inmutable.
6
- */
7
- export declare class AuthStateService {
8
- private _state;
9
- private _mfaPending;
10
- /** Estado completo de autenticación */
11
- readonly state: import("@angular/core").Signal<AuthState>;
12
- /** Estado de MFA pendiente */
13
- readonly mfaPending: import("@angular/core").Signal<MFAPendingState>;
14
- /** Usuario está autenticado */
15
- readonly isAuthenticated: import("@angular/core").Signal<boolean>;
16
- /** Estado de carga */
17
- readonly isLoading: import("@angular/core").Signal<boolean>;
18
- /** Token de acceso */
19
- readonly accessToken: import("@angular/core").Signal<string>;
20
- /** Roles del usuario */
21
- readonly roles: import("@angular/core").Signal<string[]>;
22
- /** Permisos del usuario */
23
- readonly permissions: import("@angular/core").Signal<string[]>;
24
- /** Usuario es super admin */
25
- readonly isSuperAdmin: import("@angular/core").Signal<boolean>;
26
- /** Error actual */
27
- readonly error: import("@angular/core").Signal<AuthError>;
28
- /** Información del usuario */
29
- readonly user: import("@angular/core").Signal<AuthUser>;
30
- /**
31
- * Establece el estado de carga.
32
- */
33
- setLoading(isLoading: boolean): void;
34
- /**
35
- * Establece el estado de autenticación exitosa.
36
- */
37
- setAuthenticated(data: {
38
- accessToken: string;
39
- refreshToken: string;
40
- userId?: string;
41
- email?: string;
42
- roles: string[];
43
- permissions: string[];
44
- isSuperAdmin: boolean;
45
- expiresAt: number;
46
- }): void;
47
- /**
48
- * Actualiza solo el access token (después de refresh).
49
- */
50
- updateAccessToken(accessToken: string, expiresIn: number): void;
51
- /**
52
- * Actualiza los permisos.
53
- */
54
- updatePermissions(roles: string[], permissions: string[], isSuperAdmin: boolean): void;
55
- /**
56
- * Establece un error de autenticación.
57
- */
58
- setError(error: AuthError): void;
59
- /**
60
- * Limpia el error.
61
- */
62
- clearError(): void;
63
- /**
64
- * Establece estado de MFA pendiente.
65
- */
66
- setMFAPending(mfaState: MFAPendingState): void;
67
- /**
68
- * Limpia el estado de MFA pendiente.
69
- */
70
- clearMFAPending(): void;
71
- /**
72
- * Resetea todo el estado a valores iniciales.
73
- */
74
- reset(): void;
75
- /**
76
- * Restaura estado desde datos almacenados.
77
- */
78
- restoreFromStorage(stored: Partial<StoredAuthState>): void;
79
- /**
80
- * Actualiza el userId y email (después de parsear el token).
81
- */
82
- updateUserInfo(userId: string, email: string): void;
83
- static ɵfac: i0.ɵɵFactoryDeclaration<AuthStateService, never>;
84
- static ɵprov: i0.ɵɵInjectableDeclaration<AuthStateService>;
85
- }
@@ -1,146 +0,0 @@
1
- import { OnDestroy } from '@angular/core';
2
- import { HttpClient } from '@angular/common/http';
3
- import { Router } from '@angular/router';
4
- import { Observable } from 'rxjs';
5
- import { AuthStateService } from './auth-state.service';
6
- import { TokenService } from './token.service';
7
- import { AuthStorageService } from './storage.service';
8
- import { AuthSyncService } from './sync.service';
9
- import { SigninRequest, SigninResponse, SignupRequest, SignupResponse, VerifyEmailRequest, VerifyEmailResponse, ResendCodeRequest, ResendCodeResponse, MFAVerifyResponse, RefreshResponse, GetPermissionsResponse, MFASetupResponse, MFAConfirmResponse, MFADisableResponse, MFAMethod, AuthError, ValtechAuthConfig } from './types';
10
- import { FirebaseService } from '../firebase';
11
- import * as i0 from "@angular/core";
12
- /**
13
- * Servicio principal de autenticación.
14
- *
15
- * @example
16
- * ```typescript
17
- * import { AuthService } from 'valtech-components';
18
- *
19
- * @Component({...})
20
- * export class LoginComponent {
21
- * private auth = inject(AuthService);
22
- *
23
- * async login() {
24
- * await firstValueFrom(this.auth.signin({ email, password }));
25
- * if (this.auth.mfaPending().required) {
26
- * // Mostrar UI de MFA
27
- * } else {
28
- * this.router.navigate(['/']);
29
- * }
30
- * }
31
- * }
32
- * ```
33
- */
34
- export declare class AuthService implements OnDestroy {
35
- private config;
36
- private http;
37
- private router;
38
- private stateService;
39
- private tokenService;
40
- private storageService;
41
- private syncService;
42
- private firebaseService;
43
- private refreshTimerId;
44
- private syncSubscription;
45
- constructor(config: ValtechAuthConfig, http: HttpClient, router: Router, stateService: AuthStateService, tokenService: TokenService, storageService: AuthStorageService, syncService: AuthSyncService, firebaseService: FirebaseService);
46
- /** Estado completo de autenticación */
47
- readonly state: import("@angular/core").Signal<import("./types").AuthState>;
48
- /** Usuario está autenticado */
49
- readonly isAuthenticated: import("@angular/core").Signal<boolean>;
50
- /** Estado de carga */
51
- readonly isLoading: import("@angular/core").Signal<boolean>;
52
- /** Información del usuario */
53
- readonly user: import("@angular/core").Signal<import("./types").AuthUser>;
54
- /** Token de acceso */
55
- readonly accessToken: import("@angular/core").Signal<string>;
56
- /** Roles del usuario */
57
- readonly roles: import("@angular/core").Signal<string[]>;
58
- /** Permisos del usuario */
59
- readonly permissions: import("@angular/core").Signal<string[]>;
60
- /** Usuario es super admin */
61
- readonly isSuperAdmin: import("@angular/core").Signal<boolean>;
62
- /** Estado de MFA pendiente */
63
- readonly mfaPending: import("@angular/core").Signal<import("./types").MFAPendingState>;
64
- /** Error actual */
65
- readonly error: import("@angular/core").Signal<AuthError>;
66
- /**
67
- * Inicializa el servicio de autenticación.
68
- * Llamado automáticamente por provideValtechAuth.
69
- */
70
- initialize(): Promise<void>;
71
- ngOnDestroy(): void;
72
- /**
73
- * Inicia sesión con email y contraseña.
74
- */
75
- signin(request: SigninRequest): Observable<SigninResponse>;
76
- /**
77
- * Registra un nuevo usuario.
78
- * El usuario queda en estado PENDING hasta verificar su email.
79
- */
80
- signup(request: SignupRequest): Observable<SignupResponse>;
81
- /**
82
- * Verifica email con código de 6 dígitos.
83
- * Si es exitoso, hace auto-login y retorna tokens.
84
- */
85
- verifyEmail(request: VerifyEmailRequest): Observable<VerifyEmailResponse>;
86
- /**
87
- * Reenvía código de verificación al email.
88
- */
89
- resendCode(request: ResendCodeRequest): Observable<ResendCodeResponse>;
90
- /**
91
- * Verifica código MFA.
92
- */
93
- verifyMFA(code: string): Observable<MFAVerifyResponse>;
94
- /**
95
- * Refresca el token de acceso.
96
- */
97
- refreshAccessToken(): Observable<RefreshResponse>;
98
- /**
99
- * Cierra sesión.
100
- */
101
- logout(): void;
102
- /**
103
- * Configura MFA para el usuario.
104
- */
105
- setupMFA(method: MFAMethod, phone?: string): Observable<MFASetupResponse>;
106
- /**
107
- * Confirma la configuración de MFA.
108
- */
109
- confirmMFA(code: string): Observable<MFAConfirmResponse>;
110
- /**
111
- * Deshabilita MFA.
112
- */
113
- disableMFA(password: string): Observable<MFADisableResponse>;
114
- /**
115
- * Obtiene los permisos actualizados del backend.
116
- */
117
- fetchPermissions(): Observable<GetPermissionsResponse>;
118
- /**
119
- * Verifica si el usuario tiene un permiso específico.
120
- * Formato: "resource:action" (ej: "templates:edit")
121
- */
122
- hasPermission(permission: string): boolean;
123
- /**
124
- * Verifica si el usuario tiene alguno de los permisos dados.
125
- */
126
- hasAnyPermission(permissions: string[]): boolean;
127
- /**
128
- * Verifica si el usuario tiene todos los permisos dados.
129
- */
130
- hasAllPermissions(permissions: string[]): boolean;
131
- /**
132
- * Verifica si el usuario tiene un rol específico.
133
- */
134
- hasRole(role: string): boolean;
135
- private get baseUrl();
136
- private handleSuccessfulAuth;
137
- private clearState;
138
- private startRefreshTimer;
139
- private stopRefreshTimer;
140
- private handleSyncEvent;
141
- private handleAuthError;
142
- private signInWithFirebase;
143
- private signOutFirebase;
144
- static ɵfac: i0.ɵɵFactoryDeclaration<AuthService, never>;
145
- static ɵprov: i0.ɵɵInjectableDeclaration<AuthService>;
146
- }
@@ -1,38 +0,0 @@
1
- import { EnvironmentProviders, InjectionToken } from '@angular/core';
2
- import { ValtechAuthConfig } from './types';
3
- /**
4
- * Token de inyección para la configuración de Auth.
5
- */
6
- export declare const VALTECH_AUTH_CONFIG: InjectionToken<ValtechAuthConfig>;
7
- /**
8
- * Configuración por defecto.
9
- */
10
- export declare const DEFAULT_AUTH_CONFIG: Partial<ValtechAuthConfig>;
11
- /**
12
- * Provee el servicio de autenticación a la aplicación Angular.
13
- *
14
- * @param config - Configuración de autenticación
15
- * @returns EnvironmentProviders para usar en bootstrapApplication
16
- *
17
- * @example
18
- * ```typescript
19
- * // main.ts
20
- * import { bootstrapApplication } from '@angular/platform-browser';
21
- * import { provideValtechAuth } from 'valtech-components';
22
- * import { environment } from './environments/environment';
23
- *
24
- * bootstrapApplication(AppComponent, {
25
- * providers: [
26
- * provideValtechAuth({
27
- * apiUrl: environment.apiUrl,
28
- * enableFirebaseIntegration: true,
29
- * }),
30
- * ],
31
- * });
32
- * ```
33
- */
34
- export declare function provideValtechAuth(config: ValtechAuthConfig): EnvironmentProviders;
35
- /**
36
- * Provee solo el interceptor (para apps que ya tienen AuthService configurado manualmente).
37
- */
38
- export declare function provideValtechAuthInterceptor(): EnvironmentProviders;