valtech-components 2.0.340 → 2.0.341
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.
package/README.md
CHANGED
|
@@ -34,15 +34,18 @@ npm install valtech-components
|
|
|
34
34
|
Import the desired standalone components in your Angular modules or components:
|
|
35
35
|
|
|
36
36
|
```typescript
|
|
37
|
-
import {
|
|
37
|
+
import { inject } from '@angular/core';
|
|
38
|
+
import { TextComponent, ButtonComponent, LangService } from 'valtech-components';
|
|
38
39
|
|
|
39
40
|
@Component({
|
|
40
41
|
selector: 'your-component',
|
|
41
42
|
standalone: true,
|
|
42
43
|
imports: [
|
|
43
44
|
TextComponent,
|
|
45
|
+
ButtonComponent
|
|
44
46
|
],
|
|
45
47
|
template: `
|
|
48
|
+
<!-- Static text -->
|
|
46
49
|
<val-text
|
|
47
50
|
[props]="{
|
|
48
51
|
content: 'This is a body text.',
|
|
@@ -51,9 +54,38 @@ import { TextComponent } from 'valtech-components';
|
|
|
51
54
|
size: 'small'
|
|
52
55
|
}"
|
|
53
56
|
/>
|
|
54
|
-
|
|
57
|
+
|
|
58
|
+
<!-- Reactive text from global content -->
|
|
59
|
+
<val-text
|
|
60
|
+
[props]="{
|
|
61
|
+
contentKey: 'save',
|
|
62
|
+
contentClass: '_global',
|
|
63
|
+
contentFallback: 'Save',
|
|
64
|
+
color: 'primary',
|
|
65
|
+
bold: true,
|
|
66
|
+
size: 'medium'
|
|
67
|
+
}"
|
|
68
|
+
/>
|
|
69
|
+
|
|
70
|
+
<!-- Button with reactive text -->
|
|
71
|
+
<val-button
|
|
72
|
+
[props]="{
|
|
73
|
+
contentKey: 'cancel',
|
|
74
|
+
contentClass: '_global',
|
|
75
|
+
contentFallback: 'Cancel',
|
|
76
|
+
color: 'secondary',
|
|
77
|
+
type: 'button'
|
|
78
|
+
}"
|
|
79
|
+
(onClick)="handleCancel()"
|
|
80
|
+
/>
|
|
81
|
+
`
|
|
82
|
+
})
|
|
55
83
|
export class YourComponent {
|
|
56
|
-
|
|
84
|
+
langService = inject(LangService);
|
|
85
|
+
|
|
86
|
+
handleCancel() {
|
|
87
|
+
console.log('Cancel clicked');
|
|
88
|
+
}
|
|
57
89
|
}
|
|
58
90
|
```
|
|
59
91
|
|
|
@@ -66,9 +98,11 @@ The library includes a powerful reactive internationalization system with **Lang
|
|
|
66
98
|
- **Global Content**: Reusable texts like buttons ("Save", "Cancel"), states ("Loading", "Error"), and confirmations
|
|
67
99
|
- **Component-Specific Content**: Custom texts for individual components
|
|
68
100
|
- **Reactive Updates**: Text automatically updates when language changes
|
|
69
|
-
- **Interpolation Support**: Dynamic values in text strings
|
|
101
|
+
- **Interpolation Support**: Dynamic values in text strings with `{{variable}}` syntax
|
|
70
102
|
- **Type-Safe**: Full TypeScript support with autocompletion
|
|
71
|
-
- **Simple API**:
|
|
103
|
+
- **Simple API**: Direct LangService injection, no complex setup
|
|
104
|
+
- **Automatic Fallbacks**: Intelligent language fallback with console warnings
|
|
105
|
+
- **Unified System**: Single service for all content needs
|
|
72
106
|
|
|
73
107
|
### Available Global Content
|
|
74
108
|
|
|
@@ -77,6 +111,7 @@ The library includes a powerful reactive internationalization system with **Lang
|
|
|
77
111
|
- **States**: `loading`, `error`, `success`, `warning`, `info`, `noData`
|
|
78
112
|
- **Forms**: `searchPlaceholder`
|
|
79
113
|
- **Confirmations**: `deleteConfirmation`, `unsavedChanges`
|
|
114
|
+
- **General**: `language`, `areYouSure`, `copied`
|
|
80
115
|
|
|
81
116
|
### Basic Setup
|
|
82
117
|
|
|
@@ -107,78 +142,177 @@ bootstrapApplication(AppComponent, {
|
|
|
107
142
|
});
|
|
108
143
|
```
|
|
109
144
|
|
|
110
|
-
### Using
|
|
145
|
+
### Using LangService (Current API)
|
|
111
146
|
|
|
112
147
|
```typescript
|
|
113
148
|
// component.ts
|
|
114
149
|
import { inject } from '@angular/core';
|
|
115
|
-
import {
|
|
150
|
+
import { LangService } from 'valtech-components';
|
|
116
151
|
|
|
117
152
|
@Component({
|
|
118
153
|
template: `
|
|
119
|
-
<!-- Global content
|
|
120
|
-
<button>{{ saveButton$ | async }}</button>
|
|
121
|
-
<button>{{ cancelButton$ | async }}</button>
|
|
122
|
-
|
|
123
|
-
<!-- Global content with val-text -->
|
|
154
|
+
<!-- Global content using val-text -->
|
|
124
155
|
<val-text [props]="{
|
|
125
156
|
contentKey: 'ok',
|
|
157
|
+
contentClass: '_global',
|
|
126
158
|
color: 'primary',
|
|
127
159
|
size: 'large',
|
|
128
160
|
bold: true
|
|
129
161
|
}"></val-text>
|
|
130
162
|
|
|
131
|
-
<!-- Component-specific content
|
|
163
|
+
<!-- Component-specific content using val-text -->
|
|
132
164
|
<val-text [props]="{
|
|
133
165
|
contentKey: 'welcome',
|
|
134
166
|
contentClass: 'AppComponent',
|
|
167
|
+
contentFallback: 'Welcome',
|
|
135
168
|
color: 'secondary',
|
|
136
|
-
size: 'medium'
|
|
137
|
-
bold: false
|
|
169
|
+
size: 'medium'
|
|
138
170
|
}"></val-text>
|
|
139
171
|
|
|
140
172
|
<!-- Direct observable binding -->
|
|
141
173
|
<h2>{{ title$ | async }}</h2>
|
|
174
|
+
|
|
175
|
+
<!-- With interpolation -->
|
|
176
|
+
<p>{{ greeting$ | async }}</p>
|
|
142
177
|
`
|
|
143
178
|
})
|
|
144
179
|
export class MyComponent {
|
|
145
|
-
|
|
146
|
-
componentContent = this.content.forComponent('AppComponent');
|
|
180
|
+
langService = inject(LangService);
|
|
147
181
|
|
|
148
|
-
// Global content
|
|
149
|
-
saveButton$ = this.
|
|
150
|
-
cancelButton$ = this.
|
|
182
|
+
// Global content
|
|
183
|
+
saveButton$ = this.langService.getContent('_global', 'save', 'Save');
|
|
184
|
+
cancelButton$ = this.langService.getContent('_global', 'cancel', 'Cancel');
|
|
151
185
|
|
|
152
186
|
// Component-specific content
|
|
153
|
-
title$ = this.
|
|
187
|
+
title$ = this.langService.getContent('AppComponent', 'welcome', 'Welcome');
|
|
188
|
+
|
|
189
|
+
// Content with interpolation
|
|
190
|
+
greeting$ = this.langService.getContentWithInterpolation(
|
|
191
|
+
'AppComponent',
|
|
192
|
+
'personalizedGreeting',
|
|
193
|
+
{ name: 'John', count: 5 },
|
|
194
|
+
'Hello!'
|
|
195
|
+
);
|
|
154
196
|
|
|
155
197
|
// Switch language
|
|
156
198
|
changeLanguage() {
|
|
157
|
-
this.
|
|
199
|
+
const currentLang = this.langService.currentLang;
|
|
200
|
+
this.langService.setLang(currentLang === 'es' ? 'en' : 'es');
|
|
158
201
|
}
|
|
159
202
|
|
|
160
203
|
constructor() {}
|
|
161
204
|
}
|
|
162
205
|
```
|
|
163
206
|
|
|
164
|
-
### Content with Variables
|
|
207
|
+
### Content with Variables (Interpolation)
|
|
165
208
|
|
|
166
209
|
```typescript
|
|
167
|
-
// Component with interpolation
|
|
210
|
+
// Component with interpolation using the new API
|
|
168
211
|
export class UserComponent {
|
|
169
|
-
|
|
170
|
-
componentContent = this.content.forComponent('UserComponent');
|
|
212
|
+
langService = inject(LangService);
|
|
171
213
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
214
|
+
// Method 1: Direct service usage
|
|
215
|
+
greeting$ = this.langService.getContentWithInterpolation(
|
|
216
|
+
'UserComponent',
|
|
217
|
+
'personalizedGreeting',
|
|
218
|
+
{ name: 'John', count: 5 },
|
|
219
|
+
'Hello!'
|
|
220
|
+
);
|
|
178
221
|
// Results in: "Hello John, you have 5 messages"
|
|
222
|
+
|
|
223
|
+
// Method 2: Using val-text component
|
|
224
|
+
// In template:
|
|
225
|
+
// <val-text [props]="{
|
|
226
|
+
// contentKey: 'personalizedGreeting',
|
|
227
|
+
// contentClass: 'UserComponent',
|
|
228
|
+
// contentInterpolation: { name: 'John', count: 5 },
|
|
229
|
+
// contentFallback: 'Hello!'
|
|
230
|
+
// }"></val-text>
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Helper Functions
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
// Using utility helpers from simple-content
|
|
238
|
+
import {
|
|
239
|
+
fromContentWithInterpolation,
|
|
240
|
+
interpolateStaticContent,
|
|
241
|
+
shouldUseReactiveContent
|
|
242
|
+
} from 'valtech-components';
|
|
243
|
+
|
|
244
|
+
export class AdvancedComponent {
|
|
245
|
+
langService = inject(LangService);
|
|
246
|
+
|
|
247
|
+
// Using helper for reactive content with interpolation
|
|
248
|
+
message$ = fromContentWithInterpolation(this.langService, {
|
|
249
|
+
contentClass: 'MyComponent',
|
|
250
|
+
contentKey: 'message',
|
|
251
|
+
contentInterpolation: { count: 10 }
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
// Static content with interpolation
|
|
255
|
+
processStaticText() {
|
|
256
|
+
const text = interpolateStaticContent(
|
|
257
|
+
'You have {{count}} items',
|
|
258
|
+
{ count: 5 }
|
|
259
|
+
);
|
|
260
|
+
// Results in: "You have 5 items"
|
|
261
|
+
}
|
|
179
262
|
}
|
|
180
263
|
```
|
|
181
264
|
|
|
265
|
+
### Migration Guide
|
|
266
|
+
|
|
267
|
+
If you're migrating from the old `ContentService` API, here's a quick reference:
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
// OLD API (ContentService - removed)
|
|
271
|
+
content = inject(ContentService);
|
|
272
|
+
text$ = this.content.fromContent({ key: 'save' });
|
|
273
|
+
|
|
274
|
+
// NEW API (LangService - current)
|
|
275
|
+
langService = inject(LangService);
|
|
276
|
+
text$ = this.langService.getContent('_global', 'save', 'Save');
|
|
277
|
+
|
|
278
|
+
// OLD API (with interpolation)
|
|
279
|
+
text$ = this.content.fromContentWithInterpolation({
|
|
280
|
+
key: 'greeting',
|
|
281
|
+
interpolation: { name: 'John' }
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
// NEW API (with interpolation)
|
|
285
|
+
text$ = this.langService.getContentWithInterpolation(
|
|
286
|
+
'_global',
|
|
287
|
+
'greeting',
|
|
288
|
+
{ name: 'John' },
|
|
289
|
+
'Hello!'
|
|
290
|
+
);
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### Available Utility Functions
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
import {
|
|
297
|
+
shouldUseReactiveContent,
|
|
298
|
+
extractContentConfig,
|
|
299
|
+
interpolateStaticContent,
|
|
300
|
+
fromContentWithInterpolation
|
|
301
|
+
} from 'valtech-components';
|
|
302
|
+
|
|
303
|
+
// Check if metadata should use reactive content
|
|
304
|
+
const useReactive = shouldUseReactiveContent(metadata);
|
|
305
|
+
|
|
306
|
+
// Extract configuration from metadata
|
|
307
|
+
const config = extractContentConfig(metadata);
|
|
308
|
+
|
|
309
|
+
// Interpolate static strings
|
|
310
|
+
const result = interpolateStaticContent('Hello {{name}}!', { name: 'World' });
|
|
311
|
+
|
|
312
|
+
// Helper for reactive content with interpolation
|
|
313
|
+
const content$ = fromContentWithInterpolation(langService, metadata);
|
|
314
|
+
```
|
|
315
|
+
|
|
182
316
|
## 🔗 Automatic Link Processing
|
|
183
317
|
|
|
184
318
|
The library now includes automatic link detection and processing capabilities. Convert URLs and internal routes in text content into clickable links automatically:
|
|
@@ -246,11 +380,19 @@ processText(text: string) {
|
|
|
246
380
|
- `src/lib/components/molecules/` – Compound components (e.g., input groups, cards)
|
|
247
381
|
- `src/lib/components/organisms/` – Complex components (e.g., forms, toolbars)
|
|
248
382
|
- `src/lib/components/templates/` – Page templates and layouts
|
|
249
|
-
- `src/lib/components/_examples/` – Example components demonstrating features
|
|
250
383
|
- `src/lib/components/styles/` – Shared SCSS variables, mixins, and utilities
|
|
251
|
-
- `src/lib/services/` –
|
|
252
|
-
- `
|
|
253
|
-
|
|
384
|
+
- `src/lib/services/` – Core services:
|
|
385
|
+
- `lang-provider/` – **LangService** for reactive internationalization
|
|
386
|
+
- `theme.service.ts` – Theme management
|
|
387
|
+
- `navigation.service.ts` – Routing utilities
|
|
388
|
+
- `download.service.ts` – File download helpers
|
|
389
|
+
- `icons.service.ts` – Icon management
|
|
390
|
+
- `toast.service.ts` – Toast notifications
|
|
391
|
+
- `src/lib/shared/` – Shared utilities:
|
|
392
|
+
- `utils/simple-content.ts` – Content system helpers and interfaces
|
|
393
|
+
- `utils/content.ts` – Legacy content utilities (for backward compatibility)
|
|
394
|
+
- `pipes/process-links.pipe.ts` – Automatic link processing
|
|
395
|
+
- `constants/` – Shared constants
|
|
254
396
|
|
|
255
397
|
## License
|
|
256
398
|
|
|
@@ -12,7 +12,7 @@ export class InfoComponent {
|
|
|
12
12
|
this.icon = inject(IconService);
|
|
13
13
|
}
|
|
14
14
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InfoComponent, isStandalone: true, selector: "info", inputs: { props: "props" }, ngImport: i0, template: `
|
|
15
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InfoComponent, isStandalone: true, selector: "val-info", inputs: { props: "props" }, ngImport: i0, template: `
|
|
16
16
|
@if (props.image) {
|
|
17
17
|
<val-image style="display: contents;" [props]="props.image" />
|
|
18
18
|
}
|
|
@@ -29,7 +29,7 @@ export class InfoComponent {
|
|
|
29
29
|
}
|
|
30
30
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InfoComponent, decorators: [{
|
|
31
31
|
type: Component,
|
|
32
|
-
args: [{ selector: 'info', standalone: true, imports: [CommonModule, LinkComponent, TitleBlockComponent, ImageComponent, ButtonGroupComponent], template: `
|
|
32
|
+
args: [{ selector: 'val-info', standalone: true, imports: [CommonModule, LinkComponent, TitleBlockComponent, ImageComponent, ButtonGroupComponent], template: `
|
|
33
33
|
@if (props.image) {
|
|
34
34
|
<val-image style="display: contents;" [props]="props.image" />
|
|
35
35
|
}
|
|
@@ -46,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
46
46
|
}], propDecorators: { props: [{
|
|
47
47
|
type: Input
|
|
48
48
|
}] } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9pbmZvL2luZm8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtEQUErRDtBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQXVCOUQsTUFBTSxPQUFPLGFBQWE7SUFwQjFCO1FBcUJFLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FHNUI7K0dBSlksYUFBYTttR0FBYixhQUFhLGdHQWhCZDs7Ozs7Ozs7Ozs7OztHQWFULHlFQWRTLFlBQVksK0JBQUUsYUFBYSw4RkFBRSxtQkFBbUIsK0VBQUUsY0FBYyx5RUFBRSxvQkFBb0I7OzRGQWlCckYsYUFBYTtrQkFwQnpCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixDQUFDLFlBQ3ZGOzs7Ozs7Ozs7Ozs7O0dBYVQ7OEJBTVEsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2FwcC9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC50cyAoc29sbyBsYSBwYXJ0ZSBkZSBzdHlsZXMpXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi4vbGluay9saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUJsb2NrQ29tcG9uZW50IH0gZnJvbSAnLi4vdGl0bGUtYmxvY2svdGl0bGUtYmxvY2suY29tcG9uZW50JztcbmltcG9ydCB7IEltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvaW1hZ2UvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uLWdyb3VwL2J1dHRvbi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pY29ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEluZm9NZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtaW5mbycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIExpbmtDb21wb25lbnQsIFRpdGxlQmxvY2tDb21wb25lbnQsIEltYWdlQ29tcG9uZW50LCBCdXR0b25Hcm91cENvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChwcm9wcy5pbWFnZSkge1xuICAgICAgPHZhbC1pbWFnZSBzdHlsZT1cImRpc3BsYXk6IGNvbnRlbnRzO1wiIFtwcm9wc109XCJwcm9wcy5pbWFnZVwiIC8+XG4gICAgfVxuICAgIDx2YWwtdGl0bGUtYmxvY2sgc3R5bGU9XCJkaXNwbGF5OiBibG9jazttYXJnaW4tdG9wOiAxNnB4O1wiIFtwcm9wc109XCJwcm9wcy50aXRsZVwiIC8+XG5cbiAgICBAaWYgKHByb3BzLmxpbmspIHtcbiAgICAgIDx2YWwtbGluayBbcHJvcHNdPVwicHJvcHMubGlua1wiIC8+XG4gICAgfVxuXG4gICAgQGlmIChwcm9wcy5hY3Rpb25zKSB7XG4gICAgICA8dmFsLWJ1dHRvbi1ncm91cCBbcHJvcHNdPVwicHJvcHMuYWN0aW9uc1wiIC8+XG4gICAgfVxuICBgLFxuICBzdHlsZXM6IGBgLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZvQ29tcG9uZW50IHtcbiAgaWNvbiA9IGluamVjdChJY29uU2VydmljZSk7XG5cbiAgQElucHV0KCkgcHJvcHM6IEluZm9NZXRhZGF0YTtcbn1cbiJdfQ==
|
|
@@ -5739,7 +5739,7 @@ class InfoComponent {
|
|
|
5739
5739
|
this.icon = inject(IconService);
|
|
5740
5740
|
}
|
|
5741
5741
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5742
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InfoComponent, isStandalone: true, selector: "info", inputs: { props: "props" }, ngImport: i0, template: `
|
|
5742
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InfoComponent, isStandalone: true, selector: "val-info", inputs: { props: "props" }, ngImport: i0, template: `
|
|
5743
5743
|
@if (props.image) {
|
|
5744
5744
|
<val-image style="display: contents;" [props]="props.image" />
|
|
5745
5745
|
}
|
|
@@ -5756,7 +5756,7 @@ class InfoComponent {
|
|
|
5756
5756
|
}
|
|
5757
5757
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InfoComponent, decorators: [{
|
|
5758
5758
|
type: Component,
|
|
5759
|
-
args: [{ selector: 'info', standalone: true, imports: [CommonModule, LinkComponent, TitleBlockComponent, ImageComponent, ButtonGroupComponent], template: `
|
|
5759
|
+
args: [{ selector: 'val-info', standalone: true, imports: [CommonModule, LinkComponent, TitleBlockComponent, ImageComponent, ButtonGroupComponent], template: `
|
|
5760
5760
|
@if (props.image) {
|
|
5761
5761
|
<val-image style="display: contents;" [props]="props.image" />
|
|
5762
5762
|
}
|