valtech-components 2.0.325 → 2.0.328

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 (30) hide show
  1. package/esm2022/lib/components/atoms/button/button.component.mjs +18 -18
  2. package/esm2022/lib/components/atoms/display/display.component.mjs +13 -16
  3. package/esm2022/lib/components/atoms/text/text.component.mjs +19 -19
  4. package/esm2022/lib/components/atoms/title/title.component.mjs +7 -7
  5. package/esm2022/lib/components/atoms/title/types.mjs +6 -2
  6. package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +6 -6
  7. package/esm2022/lib/components/molecules/language-selector/language-selector.component.mjs +6 -17
  8. package/esm2022/lib/components/organisms/form/form.component.mjs +1 -1
  9. package/esm2022/lib/services/lang-provider/lang-provider.service.mjs +198 -2
  10. package/esm2022/lib/shared/utils/simple-content.mjs +119 -0
  11. package/esm2022/public-api.mjs +3 -4
  12. package/fesm2022/valtech-components.mjs +520 -837
  13. package/fesm2022/valtech-components.mjs.map +1 -1
  14. package/lib/components/atoms/button/button.component.d.ts +3 -3
  15. package/lib/components/atoms/display/display.component.d.ts +2 -3
  16. package/lib/components/atoms/text/text.component.d.ts +3 -3
  17. package/lib/components/atoms/title/title.component.d.ts +1 -2
  18. package/lib/components/atoms/title/types.d.ts +10 -4
  19. package/lib/components/molecules/alert-box/alert-box.component.d.ts +3 -3
  20. package/lib/components/molecules/language-selector/language-selector.component.d.ts +1 -3
  21. package/lib/services/lang-provider/lang-provider.service.d.ts +108 -1
  22. package/lib/shared/utils/simple-content.d.ts +120 -0
  23. package/package.json +1 -1
  24. package/public-api.d.ts +1 -3
  25. package/esm2022/lib/services/content-loader.service.mjs +0 -185
  26. package/esm2022/lib/services/content.service.mjs +0 -327
  27. package/esm2022/lib/shared/utils/reactive-content.mjs +0 -117
  28. package/lib/services/content-loader.service.d.ts +0 -98
  29. package/lib/services/content.service.d.ts +0 -296
  30. package/lib/shared/utils/reactive-content.d.ts +0 -109
@@ -1,327 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { createContentHelper, fromContent, fromMultipleContent, interpolateContent, } from '../shared/utils/content';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./lang-provider/lang-provider.service";
5
- /**
6
- * ContentService - High-level reactive content management service.
7
- *
8
- * This service provides a clean, convenient API for reactive content management
9
- * without requiring direct interaction with LangService. It acts as a facade
10
- * that simplifies the most common content operations.
11
- *
12
- * @example Basic usage:
13
- * ```typescript
14
- * @Component({})
15
- * export class MyComponent {
16
- * content = inject(ContentService);
17
- *
18
- * title$ = this.content.fromContent({
19
- * className: 'MyComponent',
20
- * key: 'title'
21
- * });
22
- *
23
- * constructor() {}
24
- * }
25
- * ```
26
- */
27
- export class ContentService {
28
- constructor(langService) {
29
- this.langService = langService;
30
- }
31
- /**
32
- * Get current language as an observable stream.
33
- * Emits whenever the language changes.
34
- */
35
- get currentLang$() {
36
- return this.langService.currentLang$;
37
- }
38
- /**
39
- * Get current language synchronously.
40
- */
41
- get currentLang() {
42
- return this.langService.currentLang;
43
- }
44
- /**
45
- * Set the current language.
46
- * This will trigger updates in all reactive content.
47
- *
48
- * @param lang - The language to set
49
- */
50
- setLang(lang) {
51
- this.langService.setLang(lang);
52
- }
53
- /**
54
- * Create a reactive content observable from a content key.
55
- * This is the primary method for reactive content with unified support
56
- * for both simple content and content with interpolation.
57
- *
58
- * @param config - Content configuration with optional interpolation. If className is omitted, searches in global content.
59
- * @returns Observable that emits the content string and updates on language change
60
- *
61
- * @example Simple global content:
62
- * ```typescript
63
- * // Searches in global content (no className needed)
64
- * okButton$ = this.content.fromContent({
65
- * key: 'ok',
66
- * fallback: 'OK'
67
- * });
68
- * ```
69
- *
70
- * @example Component-specific content:
71
- * ```typescript
72
- * title$ = this.content.fromContent({
73
- * className: 'HeaderComponent',
74
- * key: 'title',
75
- * fallback: 'Default Title'
76
- * });
77
- * ```
78
- *
79
- * @example Content with interpolation:
80
- * ```typescript
81
- * // Global content with interpolation
82
- * confirmation$ = this.content.fromContent({
83
- * key: 'deleteConfirmation',
84
- * interpolation: { itemName: 'archivo' }
85
- * });
86
- *
87
- * // Component content with interpolation
88
- * greeting$ = this.content.fromContent({
89
- * className: 'WelcomeComponent',
90
- * key: 'greeting',
91
- * interpolation: { name: 'John', count: 5 }
92
- * });
93
- * ```
94
- */
95
- fromContent(config) {
96
- return fromContent(this.langService, config);
97
- }
98
- /**
99
- * Create a reactive content observable with interpolation support.
100
- *
101
- * @deprecated Use fromContent() with interpolation property instead.
102
- * This method is kept for backward compatibility.
103
- *
104
- * @param config - Interpolated content configuration. If className is omitted, searches in global content.
105
- * @returns Observable that emits the interpolated content string
106
- *
107
- * @example Migration:
108
- * ```typescript
109
- * // OLD (deprecated):
110
- * greeting$ = this.content.fromContentWithInterpolation({
111
- * className: 'WelcomeComponent',
112
- * key: 'greeting',
113
- * interpolation: { name: 'John', count: 5 }
114
- * });
115
- *
116
- * // NEW (recommended):
117
- * greeting$ = this.content.fromContent({
118
- * className: 'WelcomeComponent',
119
- * key: 'greeting',
120
- * interpolation: { name: 'John', count: 5 }
121
- * });
122
- * ```
123
- */
124
- fromContentWithInterpolation(config) {
125
- // Delegate to the unified fromContent method
126
- return this.fromContent(config);
127
- }
128
- /**
129
- * Create multiple reactive content observables at once.
130
- * Useful when a component needs several content strings.
131
- *
132
- * @param className - The component class name
133
- * @param keys - Array of content keys to retrieve
134
- * @returns Observable that emits an object with all requested content
135
- *
136
- * @example
137
- * ```typescript
138
- * content$ = this.content.fromMultipleContent('FormComponent', [
139
- * 'title', 'submitButton', 'cancelButton'
140
- * ]);
141
- *
142
- * // In template
143
- * <ng-container *ngIf="content$ | async as content">
144
- * <h2>{{ content['title'] }}</h2>
145
- * <button>{{ content['submitButton'] }}</button>
146
- * <button>{{ content['cancelButton'] }}</button>
147
- * </ng-container>
148
- * ```
149
- */
150
- fromMultipleContent(className, keys) {
151
- return fromMultipleContent(this.langService, className, keys);
152
- }
153
- getText(classNameOrKey, keyOrFallback, fallback) {
154
- // Handle overloaded signatures
155
- if (keyOrFallback === undefined ||
156
- (typeof keyOrFallback === 'string' && fallback === undefined)) {
157
- // Single parameter or two parameters (key, fallback) - treat as global content
158
- return this.langService.getText('_global', classNameOrKey, keyOrFallback);
159
- }
160
- else {
161
- // Three parameters (className, key, fallback) - treat as component content
162
- return this.langService.getText(classNameOrKey, keyOrFallback, fallback);
163
- }
164
- }
165
- /**
166
- * Get a single global content string synchronously.
167
- * This is a convenience method that's equivalent to getText(key, fallback).
168
- *
169
- * @param key - The text key
170
- * @param fallback - Optional fallback text if key is not found
171
- * @returns The text string or fallback
172
- *
173
- * @example
174
- * ```typescript
175
- * const okText = this.content.getGlobalText('ok');
176
- * const cancelText = this.content.getGlobalText('cancel', 'Cancel');
177
- * ```
178
- */
179
- getGlobalText(key, fallback) {
180
- return this.langService.getText('_global', key, fallback);
181
- }
182
- /**
183
- * Check if a content key exists for a component.
184
- *
185
- * @param className - The component class name
186
- * @param key - The text key
187
- * @returns True if the key exists in any language
188
- *
189
- * @example
190
- * ```typescript
191
- * if (this.content.hasContent('MyComponent', 'optionalText')) {
192
- * // Show optional content
193
- * }
194
- * ```
195
- */
196
- hasContent(className, key) {
197
- return this.langService.hasContent(className, key);
198
- }
199
- /**
200
- * Helper function to interpolate values into a content string.
201
- * Useful for processing content strings manually.
202
- *
203
- * @param content - The content string with placeholders
204
- * @param values - Object with values to interpolate
205
- * @returns The interpolated string
206
- *
207
- * @example
208
- * ```typescript
209
- * const result = this.content.interpolate("Hello {name}!", { name: "World" });
210
- * // Returns: "Hello World!"
211
- * ```
212
- */
213
- interpolate(content, values) {
214
- return interpolateContent(content, values);
215
- }
216
- /**
217
- * Create a content helper bound to a specific component class.
218
- * This provides a scoped API for components that need multiple content strings.
219
- *
220
- * @param className - The component class name
221
- * @returns Content helper with methods scoped to the class
222
- *
223
- * @example
224
- * ```typescript
225
- * export class MyComponent {
226
- * private contentHelper = this.content.createHelper('MyComponent');
227
- *
228
- * ngOnInit() {
229
- * this.title$ = this.contentHelper.get('title');
230
- * this.allContent$ = this.contentHelper.getMultiple(['title', 'description']);
231
- * }
232
- *
233
- * constructor(private content: ContentService) {}
234
- * }
235
- * ```
236
- */
237
- createHelper(className) {
238
- return createContentHelper(this.langService, className);
239
- }
240
- /**
241
- * Create a scoped content service for a specific component class.
242
- * This provides an even more convenient API for components with many content needs.
243
- *
244
- * @param className - The component class name
245
- * @returns Scoped content service
246
- *
247
- * @example
248
- * ```typescript
249
- * export class MyComponent {
250
- * private content = inject(ContentService).forComponent('MyComponent');
251
- *
252
- * // Simple content
253
- * title$ = this.content.get('title');
254
- *
255
- * // Content with interpolation
256
- * greeting$ = this.content.get('greeting', {
257
- * interpolation: { name: 'John' }
258
- * });
259
- *
260
- * // Content with fallback
261
- * subtitle$ = this.content.get('subtitle', {
262
- * fallback: 'Default Subtitle'
263
- * });
264
- *
265
- * // Multiple texts
266
- * allTexts$ = this.content.getMultiple(['title', 'subtitle', 'description']);
267
- *
268
- * constructor() {}
269
- * }
270
- * ```
271
- */
272
- forComponent(className) {
273
- return {
274
- /**
275
- * Get a single content string reactively for this component.
276
- * Supports optional interpolation.
277
- */
278
- get: (key, options) => {
279
- return this.fromContent({
280
- className,
281
- key,
282
- fallback: options?.fallback,
283
- interpolation: options?.interpolation,
284
- });
285
- },
286
- /**
287
- * Get content with interpolation for this component.
288
- * @deprecated Use get() with interpolation option instead.
289
- */
290
- getWithInterpolation: (key, interpolation, fallback) => {
291
- return this.fromContent({
292
- className,
293
- key,
294
- interpolation,
295
- fallback,
296
- });
297
- },
298
- /**
299
- * Get multiple content strings for this component.
300
- */
301
- getMultiple: (keys) => {
302
- return this.fromMultipleContent(className, keys);
303
- },
304
- /**
305
- * Get a single content string synchronously for this component.
306
- */
307
- getText: (key, fallback) => {
308
- return this.getText(className, key, fallback);
309
- },
310
- /**
311
- * Check if a content key exists for this component.
312
- */
313
- hasContent: (key) => {
314
- return this.hasContent(className, key);
315
- },
316
- };
317
- }
318
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContentService, deps: [{ token: i1.LangService }], target: i0.ɵɵFactoryTarget.Injectable }); }
319
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContentService, providedIn: 'root' }); }
320
- }
321
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContentService, decorators: [{
322
- type: Injectable,
323
- args: [{
324
- providedIn: 'root',
325
- }]
326
- }], ctorParameters: () => [{ type: i1.LangService }] });
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvY29udGVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUdMLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGtCQUFrQixHQUNuQixNQUFNLHlCQUF5QixDQUFDOzs7QUFJakM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUVoRDs7O09BR0c7SUFDSCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLElBQWdCO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F5Q0c7SUFDSCxXQUFXLENBQUMsTUFBcUI7UUFDL0IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F5Qkc7SUFDSCw0QkFBNEIsQ0FDMUIsTUFBZ0Y7UUFFaEYsNkNBQTZDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxN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TyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6QyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7K0dBaFZVLGNBQWM7bUhBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ29udGVudENvbmZpZyxcbiAgSW50ZXJwb2xhdGVkQ29udGVudENvbmZpZyxcbiAgY3JlYXRlQ29udGVudEhlbHBlcixcbiAgZnJvbUNvbnRlbnQsXG4gIGZyb21NdWx0aXBsZUNvbnRlbnQsXG4gIGludGVycG9sYXRlQ29udGVudCxcbn0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2NvbnRlbnQnO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuL2xhbmctcHJvdmlkZXIvbGFuZy1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IExhbmdPcHRpb24gfSBmcm9tICcuL2xhbmctcHJvdmlkZXIvdHlwZXMnO1xuXG4vKipcbiAqIENvbnRlbnRTZXJ2aWNlIC0gSGlnaC1sZXZlbCByZWFjdGl2ZSBjb250ZW50IG1hbmFnZW1lbnQgc2VydmljZS5cbiAqXG4gKiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgYSBjbGVhbiwgY29udmVuaWVudCBBUEkgZm9yIHJlYWN0aXZlIGNvbnRlbnQgbWFuYWdlbWVudFxuICogd2l0aG91dCByZXF1aXJpbmcgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggTGFuZ1NlcnZpY2UuIEl0IGFjdHMgYXMgYSBmYWNhZGVcbiAqIHRoYXQgc2ltcGxpZmllcyB0aGUgbW9zdCBjb21tb24gY29udGVudCBvcGVyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7fSlcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIGNvbnRlbnQgPSBpbmplY3QoQ29udGVudFNlcnZpY2UpO1xuICpcbiAqICAgdGl0bGUkID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHtcbiAqICAgICBjbGFzc05hbWU6ICdNeUNvbXBvbmVudCcsXG4gKiAgICAga2V5OiAndGl0bGUnXG4gKiAgIH0pO1xuICpcbiAqICAgY29uc3RydWN0b3IoKSB7fVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBsYW5ndWFnZSBhcyBhbiBvYnNlcnZhYmxlIHN0cmVhbS5cbiAgICogRW1pdHMgd2hlbmV2ZXIgdGhlIGxhbmd1YWdlIGNoYW5nZXMuXG4gICAqL1xuICBnZXQgY3VycmVudExhbmckKCk6IE9ic2VydmFibGU8TGFuZ09wdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmxhbmdTZXJ2aWNlLmN1cnJlbnRMYW5nJDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBsYW5ndWFnZSBzeW5jaHJvbm91c2x5LlxuICAgKi9cbiAgZ2V0IGN1cnJlbnRMYW5nKCk6IExhbmdPcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmxhbmdTZXJ2aWNlLmN1cnJlbnRMYW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBsYW5ndWFnZS5cbiAgICogVGhpcyB3aWxsIHRyaWdnZXIgdXBkYXRlcyBpbiBhbGwgcmVhY3RpdmUgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIGxhbmcgLSBUaGUgbGFuZ3VhZ2UgdG8gc2V0XG4gICAqL1xuICBzZXRMYW5nKGxhbmc6IExhbmdPcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmxhbmdTZXJ2aWNlLnNldExhbmcobGFuZyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgcmVhY3RpdmUgY29udGVudCBvYnNlcnZhYmxlIGZyb20gYSBjb250ZW50IGtleS5cbiAgICogVGhpcyBpcyB0aGUgcHJpbWFyeSBtZXRob2QgZm9yIHJlYWN0aXZlIGNvbnRlbnQgd2l0aCB1bmlmaWVkIHN1cHBvcnRcbiAgICogZm9yIGJvdGggc2ltcGxlIGNvbnRlbnQgYW5kIGNvbnRlbnQgd2l0aCBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29udGVudCBjb25maWd1cmF0aW9uIHdpdGggb3B0aW9uYWwgaW50ZXJwb2xhdGlvbi4gSWYgY2xhc3NOYW1lIGlzIG9taXR0ZWQsIHNlYXJjaGVzIGluIGdsb2JhbCBjb250ZW50LlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGNvbnRlbnQgc3RyaW5nIGFuZCB1cGRhdGVzIG9uIGxhbmd1YWdlIGNoYW5nZVxuICAgKlxuICAgKiBAZXhhbXBsZSBTaW1wbGUgZ2xvYmFsIGNvbnRlbnQ6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gU2VhcmNoZXMgaW4gZ2xvYmFsIGNvbnRlbnQgKG5vIGNsYXNzTmFtZSBuZWVkZWQpXG4gICAqIG9rQnV0dG9uJCA9IHRoaXMuY29udGVudC5mcm9tQ29udGVudCh7XG4gICAqICAga2V5OiAnb2snLFxuICAgKiAgIGZhbGxiYWNrOiAnT0snXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgQ29tcG9uZW50LXNwZWNpZmljIGNvbnRlbnQ6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGl0bGUkID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHtcbiAgICogICBjbGFzc05hbWU6ICdIZWFkZXJDb21wb25lbnQnLFxuICAgKiAgIGtleTogJ3RpdGxlJyxcbiAgICogICBmYWxsYmFjazogJ0RlZmF1bHQgVGl0bGUnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgQ29udGVudCB3aXRoIGludGVycG9sYXRpb246XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gR2xvYmFsIGNvbnRlbnQgd2l0aCBpbnRlcnBvbGF0aW9uXG4gICAqIGNvbmZpcm1hdGlvbiQgPSB0aGlzLmNvbnRlbnQuZnJvbUNvbnRlbnQoe1xuICAgKiAgIGtleTogJ2RlbGV0ZUNvbmZpcm1hdGlvbicsXG4gICAqICAgaW50ZXJwb2xhdGlvbjogeyBpdGVtTmFtZTogJ2FyY2hpdm8nIH1cbiAgICogfSk7XG4gICAqXG4gICAqIC8vIENvbXBvbmVudCBjb250ZW50IHdpdGggaW50ZXJwb2xhdGlvblxuICAgKiBncmVldGluZyQgPSB0aGlzLmNvbnRlbnQuZnJvbUNvbnRlbnQoe1xuICAgKiAgIGNsYXNzTmFtZTogJ1dlbGNvbWVDb21wb25lbnQnLFxuICAgKiAgIGtleTogJ2dyZWV0aW5nJyxcbiAgICogICBpbnRlcnBvbGF0aW9uOiB7IG5hbWU6ICdKb2huJywgY291bnQ6IDUgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBmcm9tQ29udGVudChjb25maWc6IENvbnRlbnRDb25maWcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBmcm9tQ29udGVudCh0aGlzLmxhbmdTZXJ2aWNlLCBjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlYWN0aXZlIGNvbnRlbnQgb2JzZXJ2YWJsZSB3aXRoIGludGVycG9sYXRpb24gc3VwcG9ydC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGZyb21Db250ZW50KCkgd2l0aCBpbnRlcnBvbGF0aW9uIHByb3BlcnR5IGluc3RlYWQuXG4gICAqIFRoaXMgbWV0aG9kIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBJbnRlcnBvbGF0ZWQgY29udGVudCBjb25maWd1cmF0aW9uLiBJZiBjbGFzc05hbWUgaXMgb21pdHRlZCwgc2VhcmNoZXMgaW4gZ2xvYmFsIGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgaW50ZXJwb2xhdGVkIGNvbnRlbnQgc3RyaW5nXG4gICAqXG4gICAqIEBleGFtcGxlIE1pZ3JhdGlvbjpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBPTEQgKGRlcHJlY2F0ZWQpOlxuICAgKiBncmVldGluZyQgPSB0aGlzLmNvbnRlbnQuZnJvbUNvbnRlbnRXaXRoSW50ZXJwb2xhdGlvbih7XG4gICAqICAgY2xhc3NOYW1lOiAnV2VsY29tZUNvbXBvbmVudCcsXG4gICAqICAga2V5OiAnZ3JlZXRpbmcnLFxuICAgKiAgIGludGVycG9sYXRpb246IHsgbmFtZTogJ0pvaG4nLCBjb3VudDogNSB9XG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBORVcgKHJlY29tbWVuZGVkKTpcbiAgICogZ3JlZXRpbmckID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHtcbiAgICogICBjbGFzc05hbWU6ICdXZWxjb21lQ29tcG9uZW50JyxcbiAgICogICBrZXk6ICdncmVldGluZycsXG4gICAqICAgaW50ZXJwb2xhdGlvbjogeyBuYW1lOiAnSm9obicsIGNvdW50OiA1IH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgZnJvbUNvbnRlbnRXaXRoSW50ZXJwb2xhdGlvbihcbiAgICBjb25maWc6IEludGVycG9sYXRlZENvbnRlbnRDb25maWcgfCBPbWl0PEludGVycG9sYXRlZENvbnRlbnRDb25maWcsICdjbGFzc05hbWUnPlxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIC8vIERlbGVnYXRlIHRvIHRoZSB1bmlmaWVkIGZyb21Db250ZW50IG1ldGhvZFxuICAgIHJldHVybiB0aGlzLmZyb21Db250ZW50KGNvbmZpZyBhcyBDb250ZW50Q29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbXVsdGlwbGUgcmVhY3RpdmUgY29udGVudCBvYnNlcnZhYmxlcyBhdCBvbmNlLlxuICAgKiBVc2VmdWwgd2hlbiBhIGNvbXBvbmVudCBuZWVkcyBzZXZlcmFsIGNvbnRlbnQgc3RyaW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5cyAtIEFycmF5IG9mIGNvbnRlbnQga2V5cyB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gb2JqZWN0IHdpdGggYWxsIHJlcXVlc3RlZCBjb250ZW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29udGVudCQgPSB0aGlzLmNvbnRlbnQuZnJvbU11bHRpcGxlQ29udGVudCgnRm9ybUNvbXBvbmVudCcsIFtcbiAgICogICAndGl0bGUnLCAnc3VibWl0QnV0dG9uJywgJ2NhbmNlbEJ1dHRvbidcbiAgICogXSk7XG4gICAqXG4gICAqIC8vIEluIHRlbXBsYXRlXG4gICAqIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50JCB8IGFzeW5jIGFzIGNvbnRlbnRcIj5cbiAgICogICA8aDI+e3sgY29udGVudFsndGl0bGUnXSB9fTwvaDI+XG4gICAqICAgPGJ1dHRvbj57eyBjb250ZW50WydzdWJtaXRCdXR0b24nXSB9fTwvYnV0dG9uPlxuICAgKiAgIDxidXR0b24+e3sgY29udGVudFsnY2FuY2VsQnV0dG9uJ10gfX08L2J1dHRvbj5cbiAgICogPC9uZy1jb250YWluZXI+XG4gICAqIGBgYFxuICAgKi9cbiAgZnJvbU11bHRpcGxlQ29udGVudChjbGFzc05hbWU6IHN0cmluZywga2V5czogc3RyaW5nW10pOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICByZXR1cm4gZnJvbU11bHRpcGxlQ29udGVudCh0aGlzLmxhbmdTZXJ2aWNlLCBjbGFzc05hbWUsIGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZSBjb250ZW50IHN0cmluZyBzeW5jaHJvbm91c2x5IGZvciB0aGUgY3VycmVudCBsYW5ndWFnZS5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZS4gSWYgb21pdHRlZCwgc2VhcmNoZXMgaW4gZ2xvYmFsIGNvbnRlbnQuXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgdGV4dCBrZXlcbiAgICogQHBhcmFtIGZhbGxiYWNrIC0gT3B0aW9uYWwgZmFsbGJhY2sgdGV4dCBpZiBrZXkgaXMgbm90IGZvdW5kXG4gICAqIEByZXR1cm5zIFRoZSB0ZXh0IHN0cmluZyBvciBmYWxsYmFja1xuICAgKlxuICAgKiBAZXhhbXBsZSBDb21wb25lbnQtc3BlY2lmaWM6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdGl0bGUgPSB0aGlzLmNvbnRlbnQuZ2V0VGV4dCgnTXlDb21wb25lbnQnLCAndGl0bGUnKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBleGFtcGxlIEdsb2JhbCBjb250ZW50OlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG9rVGV4dCA9IHRoaXMuY29udGVudC5nZXRUZXh0KCdvaycpOyAvLyBGaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIGtleVxuICAgKiAvLyBvciBtb3JlIGV4cGxpY2l0bHk6XG4gICAqIGNvbnN0IG9rVGV4dCA9IHRoaXMuY29udGVudC5nZXRHbG9iYWxUZXh0KCdvaycpO1xuICAgKiBgYGBcbiAgICovXG4gIGdldFRleHQoY2xhc3NOYW1lOiBzdHJpbmcsIGtleT86IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmc7XG4gIGdldFRleHQoa2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRUZXh0KGNsYXNzTmFtZU9yS2V5OiBzdHJpbmcsIGtleU9yRmFsbGJhY2s/OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBIYW5kbGUgb3ZlcmxvYWRlZCBzaWduYXR1cmVzXG4gICAgaWYgKFxuICAgICAga2V5T3JGYWxsYmFjayA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAodHlwZW9mIGtleU9yRmFsbGJhY2sgPT09ICdzdHJpbmcnICYmIGZhbGxiYWNrID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyIG9yIHR3byBwYXJhbWV0ZXJzIChrZXksIGZhbGxiYWNrKSAtIHRyZWF0IGFzIGdsb2JhbCBjb250ZW50XG4gICAgICByZXR1cm4gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgY2xhc3NOYW1lT3JLZXksIGtleU9yRmFsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaHJlZSBwYXJhbWV0ZXJzIChjbGFzc05hbWUsIGtleSwgZmFsbGJhY2spIC0gdHJlYXQgYXMgY29tcG9uZW50IGNvbnRlbnRcbiAgICAgIHJldHVybiB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoY2xhc3NOYW1lT3JLZXksIGtleU9yRmFsbGJhY2ssIGZhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGdsb2JhbCBjb250ZW50IHN0cmluZyBzeW5jaHJvbm91c2x5LlxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQncyBlcXVpdmFsZW50IHRvIGdldFRleHQoa2V5LCBmYWxsYmFjaykuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgdGV4dCBrZXlcbiAgICogQHBhcmFtIGZhbGxiYWNrIC0gT3B0aW9uYWwgZmFsbGJhY2sgdGV4dCBpZiBrZXkgaXMgbm90IGZvdW5kXG4gICAqIEByZXR1cm5zIFRoZSB0ZXh0IHN0cmluZyBvciBmYWxsYmFja1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG9rVGV4dCA9IHRoaXMuY29udGVudC5nZXRHbG9iYWxUZXh0KCdvaycpO1xuICAgKiBjb25zdCBjYW5jZWxUZXh0ID0gdGhpcy5jb250ZW50LmdldEdsb2JhbFRleHQoJ2NhbmNlbCcsICdDYW5jZWwnKTtcbiAgICogYGBgXG4gICAqL1xuICBnZXRHbG9iYWxUZXh0KGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dCgnX2dsb2JhbCcsIGtleSwgZmFsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgY29udGVudCBrZXkgZXhpc3RzIGZvciBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGtleSBleGlzdHMgaW4gYW55IGxhbmd1YWdlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaWYgKHRoaXMuY29udGVudC5oYXNDb250ZW50KCdNeUNvbXBvbmVudCcsICdvcHRpb25hbFRleHQnKSkge1xuICAgKiAgIC8vIFNob3cgb3B0aW9uYWwgY29udGVudFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgaGFzQ29udGVudChjbGFzc05hbWU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYW5nU2VydmljZS5oYXNDb250ZW50KGNsYXNzTmFtZSwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gaW50ZXJwb2xhdGUgdmFsdWVzIGludG8gYSBjb250ZW50IHN0cmluZy5cbiAgICogVXNlZnVsIGZvciBwcm9jZXNzaW5nIGNvbnRlbnQgc3RyaW5ncyBtYW51YWxseS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCBzdHJpbmcgd2l0aCBwbGFjZWhvbGRlcnNcbiAgICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdCB3aXRoIHZhbHVlcyB0byBpbnRlcnBvbGF0ZVxuICAgKiBAcmV0dXJucyBUaGUgaW50ZXJwb2xhdGVkIHN0cmluZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IHRoaXMuY29udGVudC5pbnRlcnBvbGF0ZShcIkhlbGxvIHtuYW1lfSFcIiwgeyBuYW1lOiBcIldvcmxkXCIgfSk7XG4gICAqIC8vIFJldHVybnM6IFwiSGVsbG8gV29ybGQhXCJcbiAgICogYGBgXG4gICAqL1xuICBpbnRlcnBvbGF0ZShjb250ZW50OiBzdHJpbmcsIHZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4pOiBzdHJpbmcge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZUNvbnRlbnQoY29udGVudCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjb250ZW50IGhlbHBlciBib3VuZCB0byBhIHNwZWNpZmljIGNvbXBvbmVudCBjbGFzcy5cbiAgICogVGhpcyBwcm92aWRlcyBhIHNjb3BlZCBBUEkgZm9yIGNvbXBvbmVudHMgdGhhdCBuZWVkIG11bHRpcGxlIGNvbnRlbnQgc3RyaW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcmV0dXJucyBDb250ZW50IGhlbHBlciB3aXRoIG1ldGhvZHMgc2NvcGVkIHRvIHRoZSBjbGFzc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gICAqICAgcHJpdmF0ZSBjb250ZW50SGVscGVyID0gdGhpcy5jb250ZW50LmNyZWF0ZUhlbHBlcignTXlDb21wb25lbnQnKTtcbiAgICpcbiAgICogICBuZ09uSW5pdCgpIHtcbiAgICogICAgIHRoaXMudGl0bGUkID0gdGhpcy5jb250ZW50SGVscGVyLmdldCgndGl0bGUnKTtcbiAgICogICAgIHRoaXMuYWxsQ29udGVudCQgPSB0aGlzLmNvbnRlbnRIZWxwZXIuZ2V0TXVsdGlwbGUoWyd0aXRsZScsICdkZXNjcmlwdGlvbiddKTtcbiAgICogICB9XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250ZW50OiBDb250ZW50U2VydmljZSkge31cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGNyZWF0ZUhlbHBlcihjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVDb250ZW50SGVscGVyKHRoaXMubGFuZ1NlcnZpY2UsIGNsYXNzTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2NvcGVkIGNvbnRlbnQgc2VydmljZSBmb3IgYSBzcGVjaWZpYyBjb21wb25lbnQgY2xhc3MuXG4gICAqIFRoaXMgcHJvdmlkZXMgYW4gZXZlbiBtb3JlIGNvbnZlbmllbnQgQVBJIGZvciBjb21wb25lbnRzIHdpdGggbWFueSBjb250ZW50IG5lZWRzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEByZXR1cm5zIFNjb3BlZCBjb250ZW50IHNlcnZpY2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICAgKiAgIHByaXZhdGUgY29udGVudCA9IGluamVjdChDb250ZW50U2VydmljZSkuZm9yQ29tcG9uZW50KCdNeUNvbXBvbmVudCcpO1xuICAgKlxuICAgKiAgIC8vIFNpbXBsZSBjb250ZW50XG4gICAqICAgdGl0bGUkID0gdGhpcy5jb250ZW50LmdldCgndGl0bGUnKTtcbiAgICpcbiAgICogICAvLyBDb250ZW50IHdpdGggaW50ZXJwb2xhdGlvblxuICAgKiAgIGdyZWV0aW5nJCA9IHRoaXMuY29udGVudC5nZXQoJ2dyZWV0aW5nJywge1xuICAgKiAgICAgaW50ZXJwb2xhdGlvbjogeyBuYW1lOiAnSm9obicgfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiAgIC8vIENvbnRlbnQgd2l0aCBmYWxsYmFja1xuICAgKiAgIHN1YnRpdGxlJCA9IHRoaXMuY29udGVudC5nZXQoJ3N1YnRpdGxlJywge1xuICAgKiAgICAgZmFsbGJhY2s6ICdEZWZhdWx0IFN1YnRpdGxlJ1xuICAgKiAgIH0pO1xuICAgKlxuICAgKiAgIC8vIE11bHRpcGxlIHRleHRzXG4gICAqICAgYWxsVGV4dHMkID0gdGhpcy5jb250ZW50LmdldE11bHRpcGxlKFsndGl0bGUnLCAnc3VidGl0bGUnLCAnZGVzY3JpcHRpb24nXSk7XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IoKSB7fVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9yQ29tcG9uZW50KGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogR2V0IGEgc2luZ2xlIGNvbnRlbnQgc3RyaW5nIHJlYWN0aXZlbHkgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgICAgICogU3VwcG9ydHMgb3B0aW9uYWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgICAqL1xuICAgICAgZ2V0OiAoXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICBvcHRpb25zPzogeyBmYWxsYmFjaz86IHN0cmluZzsgaW50ZXJwb2xhdGlvbj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gfVxuICAgICAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUNvbnRlbnQoe1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgZmFsbGJhY2s6IG9wdGlvbnM/LmZhbGxiYWNrLFxuICAgICAgICAgIGludGVycG9sYXRpb246IG9wdGlvbnM/LmludGVycG9sYXRpb24sXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBHZXQgY29udGVudCB3aXRoIGludGVycG9sYXRpb24gZm9yIHRoaXMgY29tcG9uZW50LlxuICAgICAgICogQGRlcHJlY2F0ZWQgVXNlIGdldCgpIHdpdGggaW50ZXJwb2xhdGlvbiBvcHRpb24gaW5zdGVhZC5cbiAgICAgICAqL1xuICAgICAgZ2V0V2l0aEludGVycG9sYXRpb246IChcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIGludGVycG9sYXRpb246IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4sXG4gICAgICAgIGZhbGxiYWNrPzogc3RyaW5nXG4gICAgICApOiBPYnNlcnZhYmxlPHN0cmluZz4gPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tQ29udGVudCh7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uLFxuICAgICAgICAgIGZhbGxiYWNrLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogR2V0IG11bHRpcGxlIGNvbnRlbnQgc3RyaW5ncyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICAgKi9cbiAgICAgIGdldE11bHRpcGxlOiAoa2V5czogc3RyaW5nW10pOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbU11bHRpcGxlQ29udGVudChjbGFzc05hbWUsIGtleXMpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBHZXQgYSBzaW5nbGUgY29udGVudCBzdHJpbmcgc3luY2hyb25vdXNseSBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICAgKi9cbiAgICAgIGdldFRleHQ6IChrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0KGNsYXNzTmFtZSwga2V5LCBmYWxsYmFjayk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIENoZWNrIGlmIGEgY29udGVudCBrZXkgZXhpc3RzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICAgICAqL1xuICAgICAgaGFzQ29udGVudDogKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0NvbnRlbnQoY2xhc3NOYW1lLCBrZXkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1,117 +0,0 @@
1
- /**
2
- * Enhanced content utilities for multi-language component support.
3
- * Extends the base content utilities to provide specialized helpers for different component patterns.
4
- */
5
- /**
6
- * Helper class for managing reactive content in components.
7
- */
8
- export class ComponentContentHelper {
9
- constructor(contentService, defaultClassName) {
10
- this.contentService = contentService;
11
- this.defaultClassName = defaultClassName;
12
- }
13
- /**
14
- * Resolves content based on hybrid configuration (static vs reactive).
15
- */
16
- resolveContent(config) {
17
- // Static content takes precedence
18
- if (config.content !== undefined) {
19
- return config.content;
20
- }
21
- // Use reactive content if configured
22
- if (config.contentConfig) {
23
- return this.contentService.fromContent({
24
- className: config.contentConfig.className || this.defaultClassName || '_global',
25
- key: config.contentConfig.key,
26
- fallback: config.contentConfig.fallback,
27
- interpolation: config.contentConfig.interpolation,
28
- });
29
- }
30
- // No content configured
31
- return '';
32
- }
33
- /**
34
- * Resolves multiple text properties for components with multiple text fields.
35
- */
36
- resolveMultipleTexts(config) {
37
- const result = {};
38
- Object.entries(config.textConfigs).forEach(([property, contentConfig]) => {
39
- result[property] = this.contentService.fromContent({
40
- className: contentConfig.className || this.defaultClassName || '_global',
41
- key: contentConfig.key,
42
- fallback: contentConfig.fallback,
43
- interpolation: contentConfig.interpolation,
44
- });
45
- });
46
- return result;
47
- }
48
- /**
49
- * Creates a reactive content configuration for array items.
50
- * Useful for list components where items might have translatable text.
51
- */
52
- createArrayItemConfig(baseKey, index, fallback) {
53
- return {
54
- className: this.defaultClassName || '_global',
55
- key: `${baseKey}.${index}`,
56
- fallback: fallback,
57
- };
58
- }
59
- /**
60
- * Helper for button/action text that commonly needs translation.
61
- */
62
- createActionConfig(actionKey, fallback) {
63
- return {
64
- className: '_global',
65
- key: actionKey,
66
- fallback: fallback,
67
- };
68
- }
69
- }
70
- /**
71
- * Factory function to create content helpers for components.
72
- */
73
- export function createComponentContentHelper(contentService, componentClassName) {
74
- return new ComponentContentHelper(contentService, componentClassName);
75
- }
76
- /**
77
- * Utility function to determine if content should be reactive.
78
- */
79
- export function shouldUseReactiveContent(config) {
80
- return config.content === undefined && config.contentConfig !== undefined;
81
- }
82
- /**
83
- * Enhanced props factory for components that support reactive content.
84
- */
85
- export function createReactiveProps(contentHelper, staticProps, contentConfig) {
86
- return {
87
- ...staticProps,
88
- ...contentConfig,
89
- };
90
- }
91
- /**
92
- * Helper for list components that need to mix static and reactive content.
93
- */
94
- export class ListContentHelper {
95
- constructor(contentHelper) {
96
- this.contentHelper = contentHelper;
97
- }
98
- /**
99
- * Resolves a list configuration into final items.
100
- */
101
- resolveListItems(config) {
102
- const items = [];
103
- // Add static items first
104
- if (config.staticItems) {
105
- items.push(...config.staticItems);
106
- }
107
- // Add reactive items
108
- if (config.reactiveItems) {
109
- for (let i = 0; i < config.reactiveItems.count; i++) {
110
- const item = config.reactiveItems.itemTemplate(this.contentHelper, i);
111
- items.push(item);
112
- }
113
- }
114
- return items;
115
- }
116
- }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC91dGlscy9yZWFjdGl2ZS1jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQW1ESDs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFDVSxjQUE4QixFQUM5QixnQkFBeUI7UUFEekIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUztJQUNoQyxDQUFDO0lBRUo7O09BRUc7SUFDSCxjQUFjLENBQUMsTUFBMkI7UUFDeEMsa0NBQWtDO1FBQ2xDLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO2dCQUNyQyxTQUFTLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLFNBQVM7Z0JBQy9FLEdBQUcsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUc7Z0JBQzdCLFFBQVEsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVE7Z0JBQ3ZDLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWE7YUFDbEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLE1BQXVCO1FBQzFDLE1BQU0sTUFBTSxHQUF1QyxFQUFFLENBQUM7UUFFdEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRTtZQUN2RSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7Z0JBQ2pELFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxTQUFTO2dCQUN4RSxHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUc7Z0JBQ3RCLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUTtnQkFDaEMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxhQUFhO2FBQzNDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLE9BQWUsRUFBRSxLQUFhLEVBQUUsUUFBaUI7UUFDckUsT0FBTztZQUNMLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLElBQUksU0FBUztZQUM3QyxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksS0FBSyxFQUFFO1lBQzFCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FDaEIsU0FpQmEsRUFDYixRQUFpQjtRQUVqQixPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsR0FBRyxFQUFFLFNBQVM7WUFDZCxRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQzFDLGNBQThCLEVBQzlCLGtCQUEyQjtJQUUzQixPQUFPLElBQUksc0JBQXNCLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQTJCO0lBQ2xFLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUM7QUFDNUUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxhQUFxQyxFQUNyQyxXQUErQyxFQUMvQyxhQUFrQztJQUVsQyxPQUFPO1FBQ0wsR0FBRyxXQUFXO1FBQ2QsR0FBRyxhQUFhO0tBQ1osQ0FBQztBQUNULENBQUM7QUFtQkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQW9CLGFBQXFDO1FBQXJDLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtJQUFHLENBQUM7SUFFN0Q7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxNQUE4QjtRQUM3QyxNQUFNLEtBQUssR0FBUSxFQUFFLENBQUM7UUFFdEIseUJBQXlCO1FBQ3pCLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbmhhbmNlZCBjb250ZW50IHV0aWxpdGllcyBmb3IgbXVsdGktbGFuZ3VhZ2UgY29tcG9uZW50IHN1cHBvcnQuXG4gKiBFeHRlbmRzIHRoZSBiYXNlIGNvbnRlbnQgdXRpbGl0aWVzIHRvIHByb3ZpZGUgc3BlY2lhbGl6ZWQgaGVscGVycyBmb3IgZGlmZmVyZW50IGNvbXBvbmVudCBwYXR0ZXJucy5cbiAqL1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5cbi8qKlxuICogQmFzZSBjb25maWd1cmF0aW9uIGZvciByZWFjdGl2ZSBjb250ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aXZlQ29udGVudENvbmZpZyB7XG4gIC8qKiBDb250ZW50IGNsYXNzIG5hbWUgLSBkZWZhdWx0cyB0byAnX2dsb2JhbCcgaWYgbm90IHByb3ZpZGVkICovXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqIENvbnRlbnQga2V5ICovXG4gIGtleTogc3RyaW5nO1xuICAvKiogRmFsbGJhY2sgdGV4dCBpZiBjb250ZW50IGlzIG5vdCBmb3VuZCAqL1xuICBmYWxsYmFjaz86IHN0cmluZztcbiAgLyoqIEludGVycG9sYXRpb24gZGF0YSBmb3IgcGFyYW1ldGVyaXplZCBjb250ZW50ICovXG4gIGludGVycG9sYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGNvbXBvbmVudHMgdGhhdCBzdXBwb3J0IGJvdGggc3RhdGljIGFuZCByZWFjdGl2ZSBjb250ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh5YnJpZENvbnRlbnRDb25maWcge1xuICAvKiogU3RhdGljIGNvbnRlbnQgLSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgcmVhY3RpdmUgY29udGVudCAqL1xuICBjb250ZW50Pzogc3RyaW5nO1xuICAvKiogUmVhY3RpdmUgY29udGVudCBjb25maWd1cmF0aW9uICovXG4gIGNvbnRlbnRDb25maWc/OiBSZWFjdGl2ZUNvbnRlbnRDb25maWc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgY29tcG9uZW50cyB3aXRoIG11bHRpcGxlIHRleHQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdWx0aVRleHRDb25maWcge1xuICAvKiogTWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIHRoZWlyIGNvbnRlbnQgY29uZmlndXJhdGlvbnMgKi9cbiAgdGV4dENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIFJlYWN0aXZlQ29udGVudENvbmZpZz47XG59XG5cbi8qKlxuICogRW5oYW5jZWQgbWV0YWRhdGEgZm9yIGNvbXBvbmVudHMgdGhhdCBzdXBwb3J0IHJlYWN0aXZlIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RpdmVUZXh0TWV0YWRhdGEgZXh0ZW5kcyBIeWJyaWRDb250ZW50Q29uZmlnIHtcbiAgLy8gU3RhbmRhcmQgdGV4dCBwcm9wZXJ0aWVzXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnIHwgJ3hsYXJnZSc7XG4gIGNvbG9yPzogc3RyaW5nO1xuICBib2xkPzogYm9vbGVhbjtcblxuICAvLyBMaW5rIHByb2Nlc3NpbmcgKGZvciBhcHBsaWNhYmxlIGNvbXBvbmVudHMpXG4gIHByb2Nlc3NMaW5rcz86IGJvb2xlYW47XG4gIGxpbmtDb25maWc/OiBhbnk7XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBtYW5hZ2luZyByZWFjdGl2ZSBjb250ZW50IGluIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRDb250ZW50SGVscGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZWZhdWx0Q2xhc3NOYW1lPzogc3RyaW5nXG4gICkge31cblxuICAvKipcbiAgICogUmVzb2x2ZXMgY29udGVudCBiYXNlZCBvbiBoeWJyaWQgY29uZmlndXJhdGlvbiAoc3RhdGljIHZzIHJlYWN0aXZlKS5cbiAgICovXG4gIHJlc29sdmVDb250ZW50KGNvbmZpZzogSHlicmlkQ29udGVudENvbmZpZyk6IE9ic2VydmFibGU8c3RyaW5nPiB8IHN0cmluZyB7XG4gICAgLy8gU3RhdGljIGNvbnRlbnQgdGFrZXMgcHJlY2VkZW5jZVxuICAgIGlmIChjb25maWcuY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29uZmlnLmNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLy8gVXNlIHJlYWN0aXZlIGNvbnRlbnQgaWYgY29uZmlndXJlZFxuICAgIGlmIChjb25maWcuY29udGVudENvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGVudFNlcnZpY2UuZnJvbUNvbnRlbnQoe1xuICAgICAgICBjbGFzc05hbWU6IGNvbmZpZy5jb250ZW50Q29uZmlnLmNsYXNzTmFtZSB8fCB0aGlzLmRlZmF1bHRDbGFzc05hbWUgfHwgJ19nbG9iYWwnLFxuICAgICAgICBrZXk6IGNvbmZpZy5jb250ZW50Q29uZmlnLmtleSxcbiAgICAgICAgZmFsbGJhY2s6IGNvbmZpZy5jb250ZW50Q29uZmlnLmZhbGxiYWNrLFxuICAgICAgICBpbnRlcnBvbGF0aW9uOiBjb25maWcuY29udGVudENvbmZpZy5pbnRlcnBvbGF0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTm8gY29udGVudCBjb25maWd1cmVkXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIG11bHRpcGxlIHRleHQgcHJvcGVydGllcyBmb3IgY29tcG9uZW50cyB3aXRoIG11bHRpcGxlIHRleHQgZmllbGRzLlxuICAgKi9cbiAgcmVzb2x2ZU11bHRpcGxlVGV4dHMoY29uZmlnOiBNdWx0aVRleHRDb25maWcpOiBSZWNvcmQ8c3RyaW5nLCBPYnNlcnZhYmxlPHN0cmluZz4+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8c3RyaW5nPj4gPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKGNvbmZpZy50ZXh0Q29uZmlncykuZm9yRWFjaCgoW3Byb3BlcnR5LCBjb250ZW50Q29uZmlnXSkgPT4ge1xuICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IHRoaXMuY29udGVudFNlcnZpY2UuZnJvbUNvbnRlbnQoe1xuICAgICAgICBjbGFzc05hbWU6IGNvbnRlbnRDb25maWcuY2xhc3NOYW1lIHx8IHRoaXMuZGVmYXVsdENsYXNzTmFtZSB8fCAnX2dsb2JhbCcsXG4gICAgICAgIGtleTogY29udGVudENvbmZpZy5rZXksXG4gICAgICAgIGZhbGxiYWNrOiBjb250ZW50Q29uZmlnLmZhbGxiYWNrLFxuICAgICAgICBpbnRlcnBvbGF0aW9uOiBjb250ZW50Q29uZmlnLmludGVycG9sYXRpb24sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlYWN0aXZlIGNvbnRlbnQgY29uZmlndXJhdGlvbiBmb3IgYXJyYXkgaXRlbXMuXG4gICAqIFVzZWZ1bCBmb3IgbGlzdCBjb21wb25lbnRzIHdoZXJlIGl0ZW1zIG1pZ2h0IGhhdmUgdHJhbnNsYXRhYmxlIHRleHQuXG4gICAqL1xuICBjcmVhdGVBcnJheUl0ZW1Db25maWcoYmFzZUtleTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBmYWxsYmFjaz86IHN0cmluZyk6IFJlYWN0aXZlQ29udGVudENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYXNzTmFtZTogdGhpcy5kZWZhdWx0Q2xhc3NOYW1lIHx8ICdfZ2xvYmFsJyxcbiAgICAgIGtleTogYCR7YmFzZUtleX0uJHtpbmRleH1gLFxuICAgICAgZmFsbGJhY2s6IGZhbGxiYWNrLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZvciBidXR0b24vYWN0aW9uIHRleHQgdGhhdCBjb21tb25seSBuZWVkcyB0cmFuc2xhdGlvbi5cbiAgICovXG4gIGNyZWF0ZUFjdGlvbkNvbmZpZyhcbiAgICBhY3Rpb25LZXk6XG4gICAgICB8ICdvaydcbiAgICAgIHwgJ2NhbmNlbCdcbiAgICAgIHwgJ3NhdmUnXG4gICAgICB8ICdkZWxldGUnXG4gICAgICB8ICdlZGl0J1xuICAgICAgfCAnY2xvc2UnXG4gICAgICB8ICdiYWNrJ1xuICAgICAgfCAnbmV4dCdcbiAgICAgIHwgJ3ByZXZpb3VzJ1xuICAgICAgfCAnZmluaXNoJ1xuICAgICAgfCAnY29udGludWUnXG4gICAgICB8ICdhZGQnXG4gICAgICB8ICdyZW1vdmUnXG4gICAgICB8ICdzZWFyY2gnXG4gICAgICB8ICdmaWx0ZXInXG4gICAgICB8ICdzb3J0J1xuICAgICAgfCAncmVmcmVzaCcsXG4gICAgZmFsbGJhY2s/OiBzdHJpbmdcbiAgKTogUmVhY3RpdmVDb250ZW50Q29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NOYW1lOiAnX2dsb2JhbCcsXG4gICAgICBrZXk6IGFjdGlvbktleSxcbiAgICAgIGZhbGxiYWNrOiBmYWxsYmFjayxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgY29udGVudCBoZWxwZXJzIGZvciBjb21wb25lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50Q29udGVudEhlbHBlcihcbiAgY29udGVudFNlcnZpY2U6IENvbnRlbnRTZXJ2aWNlLFxuICBjb21wb25lbnRDbGFzc05hbWU/OiBzdHJpbmdcbik6IENvbXBvbmVudENvbnRlbnRIZWxwZXIge1xuICByZXR1cm4gbmV3IENvbXBvbmVudENvbnRlbnRIZWxwZXIoY29udGVudFNlcnZpY2UsIGNvbXBvbmVudENsYXNzTmFtZSk7XG59XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgY29udGVudCBzaG91bGQgYmUgcmVhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRVc2VSZWFjdGl2ZUNvbnRlbnQoY29uZmlnOiBIeWJyaWRDb250ZW50Q29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiBjb25maWcuY29udGVudCA9PT0gdW5kZWZpbmVkICYmIGNvbmZpZy5jb250ZW50Q29uZmlnICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRW5oYW5jZWQgcHJvcHMgZmFjdG9yeSBmb3IgY29tcG9uZW50cyB0aGF0IHN1cHBvcnQgcmVhY3RpdmUgY29udGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlUHJvcHM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICBjb250ZW50SGVscGVyOiBDb21wb25lbnRDb250ZW50SGVscGVyLFxuICBzdGF0aWNQcm9wczogT21pdDxULCBrZXlvZiBIeWJyaWRDb250ZW50Q29uZmlnPixcbiAgY29udGVudENvbmZpZzogSHlicmlkQ29udGVudENvbmZpZ1xuKTogVCB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGljUHJvcHMsXG4gICAgLi4uY29udGVudENvbmZpZyxcbiAgfSBhcyBUO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGxpc3QgY29tcG9uZW50cyB0aGF0IG1peCBzdGF0aWMgYW5kIGR5bmFtaWMgY29udGVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0Q29tcG9uZW50Q29uZmlnPFQ+IHtcbiAgLyoqIFN0YXRpYyBpdGVtcyB0aGF0IGRvbid0IG5lZWQgdHJhbnNsYXRpb24gKi9cbiAgc3RhdGljSXRlbXM/OiBUW107XG4gIC8qKiBSZWFjdGl2ZSBpdGVtcyBjb25maWd1cmF0aW9uICovXG4gIHJlYWN0aXZlSXRlbXM/OiB7XG4gICAgLyoqIEJhc2Uga2V5IGZvciB0aGUgaXRlbXMgKGUuZy4sICduYXZpZ2F0aW9uTGlua3MnKSAqL1xuICAgIGJhc2VLZXk6IHN0cmluZztcbiAgICAvKiogTnVtYmVyIG9mIGl0ZW1zIGV4cGVjdGVkICovXG4gICAgY291bnQ6IG51bWJlcjtcbiAgICAvKiogVGVtcGxhdGUgZm9yIGNyZWF0aW5nIGluZGl2aWR1YWwgaXRlbXMgKi9cbiAgICBpdGVtVGVtcGxhdGU6IChjb250ZW50SGVscGVyOiBDb21wb25lbnRDb250ZW50SGVscGVyLCBpbmRleDogbnVtYmVyKSA9PiBUO1xuICB9O1xufVxuXG4vKipcbiAqIEhlbHBlciBmb3IgbGlzdCBjb21wb25lbnRzIHRoYXQgbmVlZCB0byBtaXggc3RhdGljIGFuZCByZWFjdGl2ZSBjb250ZW50LlxuICovXG5leHBvcnQgY2xhc3MgTGlzdENvbnRlbnRIZWxwZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRlbnRIZWxwZXI6IENvbXBvbmVudENvbnRlbnRIZWxwZXIpIHt9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgbGlzdCBjb25maWd1cmF0aW9uIGludG8gZmluYWwgaXRlbXMuXG4gICAqL1xuICByZXNvbHZlTGlzdEl0ZW1zKGNvbmZpZzogTGlzdENvbXBvbmVudENvbmZpZzxUPik6IFRbXSB7XG4gICAgY29uc3QgaXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLy8gQWRkIHN0YXRpYyBpdGVtcyBmaXJzdFxuICAgIGlmIChjb25maWcuc3RhdGljSXRlbXMpIHtcbiAgICAgIGl0ZW1zLnB1c2goLi4uY29uZmlnLnN0YXRpY0l0ZW1zKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVhY3RpdmUgaXRlbXNcbiAgICBpZiAoY29uZmlnLnJlYWN0aXZlSXRlbXMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLnJlYWN0aXZlSXRlbXMuY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gY29uZmlnLnJlYWN0aXZlSXRlbXMuaXRlbVRlbXBsYXRlKHRoaXMuY29udGVudEhlbHBlciwgaSk7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG59XG4iXX0=
@@ -1,98 +0,0 @@
1
- import { Provider } from './lang-provider/content';
2
- import { LanguagesContent } from './lang-provider/types';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * ContentLoader Service - Dynamic content loading system.
6
- *
7
- * REFACTORED: Now uses ValtechConfigService properly instead of hacking LangService.
8
- * This provides a clean, maintainable way to register content dynamically.
9
- *
10
- * @example Basic usage:
11
- * ```typescript
12
- * // user-page.content.ts
13
- * export const UserPageContent = {
14
- * es: { title: 'Mi Página de Usuario', welcome: 'Bienvenido {{name}}' },
15
- * en: { title: 'My User Page', welcome: 'Welcome {{name}}' }
16
- * };
17
- *
18
- * // In component
19
- * import { UserPageContent } from './user-page.content';
20
- * registerContent('UserPage', UserPageContent);
21
- * ```
22
- */
23
- export declare class ContentLoaderService {
24
- private valtechConfig;
25
- private registeredContent;
26
- /**
27
- * Register content for a specific component/page class.
28
- * ✅ CLEAN: Uses proper ValtechConfigService API instead of hacking LangService
29
- */
30
- registerContent(className: string, content: LanguagesContent): void;
31
- /**
32
- * Register multiple content modules at once.
33
- */
34
- loadContent(contentModules: ContentModule[]): void;
35
- /**
36
- * Check if content is registered for a class.
37
- */
38
- hasContentFor(className: string): boolean;
39
- /**
40
- * Get all registered class names.
41
- */
42
- getRegisteredClasses(): string[];
43
- /**
44
- * Get registered content for a specific class.
45
- */
46
- getContentFor(className: string): LanguagesContent | undefined;
47
- /**
48
- * Remove content registration for a class.
49
- */
50
- unregisterContent(className: string): boolean;
51
- /**
52
- * Clear all registered content.
53
- */
54
- clearAllContent(): void;
55
- /**
56
- * Get current content provider state.
57
- * Useful for debugging.
58
- */
59
- getContentProvider(): Provider | undefined;
60
- /**
61
- * ✅ CLEAN: Add content to provider using proper API
62
- * @private
63
- */
64
- private addContentToProvider;
65
- static ɵfac: i0.ɵɵFactoryDeclaration<ContentLoaderService, never>;
66
- static ɵprov: i0.ɵɵInjectableDeclaration<ContentLoaderService>;
67
- }
68
- /**
69
- * Interface for content module registration.
70
- */
71
- export interface ContentModule {
72
- className: string;
73
- content: LanguagesContent;
74
- }
75
- /**
76
- * Helper function to create a content module.
77
- */
78
- export declare function createContentModule(className: string, content: LanguagesContent): ContentModule;
79
- /**
80
- * Simple function to register content directly.
81
- * ✅ IMPROVED: Cleaner global registry management
82
- */
83
- export declare function registerContent(className: string, content: LanguagesContent): void;
84
- /**
85
- * Load all content from the global registry.
86
- * ✅ IMPROVED: Better error handling and logging
87
- */
88
- export declare function loadRegisteredContent(contentLoader: ContentLoaderService): void;
89
- /**
90
- * ✅ NEW: Debugging helper
91
- * Get current global registry state
92
- */
93
- export declare function getRegisteredContentQueue(): ContentModule[];
94
- /**
95
- * ✅ NEW: Debugging helper
96
- * Clear the global registry without loading
97
- */
98
- export declare function clearRegisteredContentQueue(): void;