valtech-components 2.0.192 → 2.0.193
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 +67 -13
- package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +15 -1
- package/esm2022/lib/components/atoms/avatar/types.mjs +1 -1
- package/esm2022/lib/components/atoms/box/box.component.mjs +17 -1
- package/esm2022/lib/components/atoms/box/types.mjs +1 -1
- package/esm2022/lib/components/atoms/button/button.component.mjs +15 -1
- package/esm2022/lib/components/atoms/display/display.component.mjs +11 -1
- package/esm2022/lib/components/atoms/display/types.mjs +1 -1
- package/esm2022/lib/components/atoms/divider/divider.component.mjs +11 -2
- package/esm2022/lib/components/atoms/divider/types.mjs +1 -1
- package/esm2022/lib/components/atoms/href/href.component.mjs +12 -1
- package/esm2022/lib/components/atoms/href/types.mjs +1 -1
- package/esm2022/lib/components/atoms/icon/icon.component.mjs +11 -1
- package/esm2022/lib/components/atoms/icon/types.mjs +1 -1
- package/esm2022/lib/components/atoms/image/image.component.mjs +13 -3
- package/esm2022/lib/components/atoms/image/types.mjs +1 -1
- package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +11 -1
- package/esm2022/lib/components/atoms/progress-bar/types.mjs +1 -1
- package/esm2022/lib/components/atoms/text/text.component.mjs +11 -1
- package/esm2022/lib/components/atoms/text/types.mjs +1 -1
- package/esm2022/lib/components/atoms/title/title.component.mjs +11 -1
- package/esm2022/lib/components/atoms/title/types.mjs +1 -1
- package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +11 -1
- package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +15 -1
- package/esm2022/lib/components/molecules/button-group/types.mjs +1 -1
- package/esm2022/lib/components/molecules/card/card.component.mjs +15 -1
- package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +9 -1
- package/esm2022/lib/components/molecules/comment-input/comment-input.component.mjs +11 -1
- package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +11 -1
- package/esm2022/lib/components/molecules/content-loader/types.mjs +1 -1
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +11 -1
- package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +11 -1
- package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +11 -1
- package/esm2022/lib/components/molecules/expandable-text/types.mjs +1 -1
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +16 -6
- package/esm2022/lib/components/molecules/hint/hint.component.mjs +11 -1
- package/esm2022/lib/components/molecules/hour-input/hour-input.component.mjs +11 -1
- package/esm2022/lib/components/molecules/link/link.component.mjs +12 -1
- package/esm2022/lib/components/molecules/link/types.mjs +1 -1
- package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +11 -1
- package/esm2022/lib/components/molecules/links-cake/types.mjs +1 -1
- package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +31 -3
- package/esm2022/lib/components/molecules/notes-box/types.mjs +1 -1
- package/esm2022/lib/components/molecules/number-input/number-input.component.mjs +11 -1
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +11 -1
- package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +11 -1
- package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +11 -1
- package/esm2022/lib/components/molecules/progress-status/types.mjs +1 -1
- package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +12 -1
- package/esm2022/lib/components/molecules/prompter/types.mjs +1 -1
- package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +11 -1
- package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +27 -5
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +11 -1
- package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +13 -3
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +14 -17
- package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +11 -1
- package/esm2022/lib/components/molecules/title-block/types.mjs +1 -1
- package/esm2022/lib/components/organisms/banner/banner.component.mjs +25 -3
- package/esm2022/lib/components/organisms/banner/types.mjs +1 -1
- package/esm2022/lib/components/organisms/footer/footer.component.mjs +23 -2
- package/esm2022/lib/components/organisms/footer/types.mjs +1 -1
- package/esm2022/lib/components/organisms/header/header.component.mjs +20 -1
- package/esm2022/lib/components/organisms/header/types.mjs +1 -1
- package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +31 -1
- package/esm2022/lib/components/organisms/item-list/types.mjs +1 -1
- package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +20 -1
- package/esm2022/lib/components/organisms/no-content/types.mjs +1 -1
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +46 -12
- package/esm2022/lib/components/organisms/toolbar/types.mjs +1 -1
- package/esm2022/lib/components/organisms/wizard/types.mjs +4 -1
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +44 -1
- package/esm2022/lib/services/download.service.mjs +18 -1
- package/esm2022/lib/services/icons.service.mjs +8 -1
- package/esm2022/lib/services/in-app-browser.service.mjs +12 -1
- package/esm2022/lib/services/local-storage.service.mjs +22 -1
- package/esm2022/lib/services/navigation.service.mjs +22 -1
- package/esm2022/lib/services/theme.service.mjs +46 -2
- package/esm2022/lib/services/toast.service.mjs +14 -2
- package/esm2022/lib/shared/utils/dom.mjs +11 -1
- package/esm2022/lib/shared/utils/styles.mjs +13 -1
- package/esm2022/lib/shared/utils/text.mjs +11 -1
- package/fesm2022/valtech-components.mjs +812 -47
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/avatar/avatar.component.d.ts +11 -0
- package/lib/components/atoms/avatar/types.d.ts +8 -0
- package/lib/components/atoms/box/box.component.d.ts +13 -0
- package/lib/components/atoms/box/types.d.ts +10 -0
- package/lib/components/atoms/button/button.component.d.ts +12 -0
- package/lib/components/atoms/display/display.component.d.ts +7 -0
- package/lib/components/atoms/display/types.d.ts +7 -0
- package/lib/components/atoms/divider/divider.component.d.ts +17 -0
- package/lib/components/atoms/divider/types.d.ts +7 -0
- package/lib/components/atoms/href/href.component.d.ts +10 -0
- package/lib/components/atoms/href/types.d.ts +10 -0
- package/lib/components/atoms/icon/icon.component.d.ts +7 -0
- package/lib/components/atoms/icon/types.d.ts +7 -0
- package/lib/components/atoms/image/image.component.d.ts +14 -0
- package/lib/components/atoms/image/types.d.ts +14 -0
- package/lib/components/atoms/progress-bar/progress-bar.component.d.ts +10 -0
- package/lib/components/atoms/progress-bar/types.d.ts +10 -0
- package/lib/components/atoms/text/text.component.d.ts +8 -0
- package/lib/components/atoms/text/types.d.ts +8 -0
- package/lib/components/atoms/title/title.component.d.ts +9 -0
- package/lib/components/atoms/title/types.d.ts +9 -0
- package/lib/components/molecules/alert-box/alert-box.component.d.ts +7 -0
- package/lib/components/molecules/button-group/button-group.component.d.ts +10 -0
- package/lib/components/molecules/button-group/types.d.ts +7 -0
- package/lib/components/molecules/card/card.component.d.ts +14 -0
- package/lib/components/molecules/comment-input/comment-input.component.d.ts +6 -0
- package/lib/components/molecules/content-loader/content-loader.component.d.ts +8 -0
- package/lib/components/molecules/content-loader/types.d.ts +8 -0
- package/lib/components/molecules/date-input/date-input.component.d.ts +6 -0
- package/lib/components/molecules/email-input/email-input.component.d.ts +6 -0
- package/lib/components/molecules/expandable-text/expandable-text.component.d.ts +8 -0
- package/lib/components/molecules/expandable-text/types.d.ts +8 -0
- package/lib/components/molecules/file-input/file-input.component.d.ts +6 -1
- package/lib/components/molecules/hint/hint.component.d.ts +6 -0
- package/lib/components/molecules/hour-input/hour-input.component.d.ts +5 -0
- package/lib/components/molecules/link/link.component.d.ts +10 -0
- package/lib/components/molecules/link/types.d.ts +10 -0
- package/lib/components/molecules/links-cake/links-cake.component.d.ts +7 -0
- package/lib/components/molecules/links-cake/types.d.ts +7 -0
- package/lib/components/molecules/notes-box/notes-box.component.d.ts +11 -0
- package/lib/components/molecules/notes-box/types.d.ts +11 -0
- package/lib/components/molecules/number-input/number-input.component.d.ts +6 -0
- package/lib/components/molecules/password-input/password-input.component.d.ts +7 -1
- package/lib/components/molecules/pin-input/pin-input.component.d.ts +5 -0
- package/lib/components/molecules/progress-status/progress-status.component.d.ts +9 -0
- package/lib/components/molecules/progress-status/types.d.ts +10 -0
- package/lib/components/molecules/prompter/prompter.component.d.ts +12 -0
- package/lib/components/molecules/prompter/types.d.ts +12 -0
- package/lib/components/molecules/radio-input/radio-input.component.d.ts +6 -0
- package/lib/components/molecules/searchbar/searchbar.component.d.ts +14 -2
- package/lib/components/molecules/select-input/select-input.component.d.ts +8 -0
- package/lib/components/molecules/select-search/select-search.component.d.ts +9 -2
- package/lib/components/molecules/text-input/text-input.component.d.ts +7 -0
- package/lib/components/molecules/title-block/title-block.component.d.ts +8 -0
- package/lib/components/molecules/title-block/types.d.ts +8 -0
- package/lib/components/organisms/banner/types.d.ts +14 -0
- package/lib/components/organisms/footer/footer.component.d.ts +24 -0
- package/lib/components/organisms/footer/types.d.ts +10 -0
- package/lib/components/organisms/header/header.component.d.ts +10 -0
- package/lib/components/organisms/header/types.d.ts +10 -0
- package/lib/components/organisms/item-list/item-list.component.d.ts +20 -0
- package/lib/components/organisms/item-list/types.d.ts +43 -0
- package/lib/components/organisms/no-content/no-content.component.d.ts +10 -0
- package/lib/components/organisms/no-content/types.d.ts +10 -0
- package/lib/components/organisms/toolbar/toolbar.component.d.ts +40 -3
- package/lib/components/organisms/toolbar/types.d.ts +15 -0
- package/lib/components/organisms/wizard/types.d.ts +22 -0
- package/lib/components/organisms/wizard/wizard.component.d.ts +32 -0
- package/lib/services/download.service.d.ts +13 -0
- package/lib/services/icons.service.d.ts +3 -0
- package/lib/services/in-app-browser.service.d.ts +7 -0
- package/lib/services/local-storage.service.d.ts +21 -0
- package/lib/services/navigation.service.d.ts +24 -0
- package/lib/services/theme.service.d.ts +42 -0
- package/lib/services/toast.service.d.ts +12 -0
- package/lib/shared/utils/dom.d.ts +10 -0
- package/lib/shared/utils/styles.d.ts +12 -0
- package/lib/shared/utils/text.d.ts +10 -0
- package/package.json +1 -1
- package/src/lib/components/styles/overrides.scss +11 -3
- package/src/lib/components/styles/variables.scss +1 -0
- package/styles/fonts.scss +0 -35
- package/src/lib/assets/fonts/Khula-Bold.ttf +0 -0
- package/src/lib/assets/fonts/Khula-ExtraBold.ttf +0 -0
- package/src/lib/assets/fonts/Khula-Light.ttf +0 -0
- package/src/lib/assets/fonts/Khula-Regular.ttf +0 -0
- package/src/lib/assets/fonts/Khula-SemiBold.ttf +0 -0
- package/src/lib/assets/fonts/OFL.txt +0 -93
|
@@ -15,8 +15,22 @@ import * as i2 from '@ionic/angular';
|
|
|
15
15
|
import { IonicModule } from '@ionic/angular';
|
|
16
16
|
import { BehaviorSubject } from 'rxjs';
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* val-avatar
|
|
20
|
+
*
|
|
21
|
+
* Displays a user or profile image, optionally with a box style and different sizes.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* <val-avatar [props]="{ image: 'url', size: 'medium', box: true }" (onClick)="handler()"></val-avatar>
|
|
25
|
+
*
|
|
26
|
+
* @input props: AvatarMetadata - Configuration for the avatar (image, size, box, default image)
|
|
27
|
+
* @output onClick - Emits when the avatar is clicked
|
|
28
|
+
*/
|
|
18
29
|
class AvatarComponent {
|
|
19
30
|
constructor() {
|
|
31
|
+
/**
|
|
32
|
+
* Event emitted when the avatar is clicked.
|
|
33
|
+
*/
|
|
20
34
|
this.onClick = new EventEmitter();
|
|
21
35
|
}
|
|
22
36
|
ngOnInit() { }
|
|
@@ -44,7 +58,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
44
58
|
}] } });
|
|
45
59
|
|
|
46
60
|
/* eslint-disable no-underscore-dangle */
|
|
61
|
+
/**
|
|
62
|
+
* Service for registering and managing custom Ionicons icons in the application.
|
|
63
|
+
* Automatically registers a set of commonly used icons on initialization.
|
|
64
|
+
*/
|
|
47
65
|
class IconService {
|
|
66
|
+
/**
|
|
67
|
+
* Registers a set of Ionicons icons for use throughout the app.
|
|
68
|
+
*/
|
|
48
69
|
constructor() {
|
|
49
70
|
addIcons({
|
|
50
71
|
addOutline,
|
|
@@ -81,8 +102,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
81
102
|
}]
|
|
82
103
|
}], ctorParameters: () => [] });
|
|
83
104
|
|
|
105
|
+
/**
|
|
106
|
+
* val-box
|
|
107
|
+
*
|
|
108
|
+
* A stylized card container for grouping content, with optional icon, color, border, and click event.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* <val-box [props]="{ color: 'primary', rounded: true, icon: 'star' }" (onClick)="handler()">
|
|
112
|
+
* <div body>Content here</div>
|
|
113
|
+
* </val-box>
|
|
114
|
+
*
|
|
115
|
+
* @input props: BoxMetadata - Configuration for the box (color, icon, border, etc.)
|
|
116
|
+
* @output onClick - Emits when the box or its icon is clicked
|
|
117
|
+
*/
|
|
84
118
|
class BoxComponent {
|
|
85
119
|
constructor(icon) {
|
|
120
|
+
/**
|
|
121
|
+
* Event emitted when the box or its icon is clicked.
|
|
122
|
+
*/
|
|
86
123
|
this.onClick = new EventEmitter();
|
|
87
124
|
}
|
|
88
125
|
ngOnInit() { }
|
|
@@ -196,7 +233,16 @@ var ToolbarActionType;
|
|
|
196
233
|
ToolbarActionType["BUTTON"] = "BUTTON";
|
|
197
234
|
})(ToolbarActionType || (ToolbarActionType = {}));
|
|
198
235
|
|
|
236
|
+
/**
|
|
237
|
+
* Service for downloading files and opening links in new tabs.
|
|
238
|
+
* Provides utility methods for browser-based file downloads and extracting file names from URLs.
|
|
239
|
+
*/
|
|
199
240
|
class DownloadService {
|
|
241
|
+
/**
|
|
242
|
+
* Extracts the file name from a given URL.
|
|
243
|
+
* @param url The file URL
|
|
244
|
+
* @returns The file name
|
|
245
|
+
*/
|
|
200
246
|
getFileNameFromUrl(url) {
|
|
201
247
|
try {
|
|
202
248
|
const pathSegments = url.split('/');
|
|
@@ -209,6 +255,10 @@ class DownloadService {
|
|
|
209
255
|
return 'filename';
|
|
210
256
|
}
|
|
211
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* Opens a given URL in a new browser tab and triggers download if possible.
|
|
260
|
+
* @param url The file URL
|
|
261
|
+
*/
|
|
212
262
|
openNewTab(url) {
|
|
213
263
|
if (url) {
|
|
214
264
|
const fileName = this.getFileNameFromUrl(url);
|
|
@@ -224,6 +274,10 @@ class DownloadService {
|
|
|
224
274
|
console.error('La URL no está definida');
|
|
225
275
|
}
|
|
226
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* Downloads a file from the browser using fetch and triggers a download dialog.
|
|
279
|
+
* @param url The file URL
|
|
280
|
+
*/
|
|
227
281
|
downloadLinkFromBrowser(url) {
|
|
228
282
|
console.log('trying to download file from url');
|
|
229
283
|
if (url) {
|
|
@@ -258,13 +312,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
258
312
|
}] });
|
|
259
313
|
|
|
260
314
|
/* eslint-disable no-underscore-dangle */
|
|
315
|
+
/**
|
|
316
|
+
* Service for opening URLs using Capacitor's InAppBrowser plugin.
|
|
317
|
+
* Provides a method to open links in a popover-style browser within the app.
|
|
318
|
+
*/
|
|
261
319
|
class InAppBrowserService {
|
|
262
320
|
constructor() {
|
|
321
|
+
/**
|
|
322
|
+
* Default options for the in-app browser.
|
|
323
|
+
*/
|
|
263
324
|
this.options = {
|
|
264
325
|
presentationStyle: 'popover',
|
|
265
326
|
url: '',
|
|
266
327
|
};
|
|
267
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* Opens a URL using Capacitor's InAppBrowser with the configured options.
|
|
331
|
+
* @param url The URL to open
|
|
332
|
+
*/
|
|
268
333
|
async openWithInAppBrowser(url) {
|
|
269
334
|
await Browser.open({ ...this.options, url });
|
|
270
335
|
}
|
|
@@ -278,14 +343,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
278
343
|
}]
|
|
279
344
|
}], ctorParameters: () => [] });
|
|
280
345
|
|
|
346
|
+
/**
|
|
347
|
+
* Service for navigation and routing within the application.
|
|
348
|
+
* Supports navigation with data transfer, in-app browser, and opening links in new tabs.
|
|
349
|
+
*/
|
|
281
350
|
class NavigationService {
|
|
282
351
|
constructor() {
|
|
283
352
|
this.router = inject(Router);
|
|
284
353
|
this.inAppBrowser = inject(InAppBrowserService);
|
|
285
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* Opens a URL using the in-app browser service.
|
|
357
|
+
* @param url The URL to open
|
|
358
|
+
*/
|
|
286
359
|
navigateInApp(url) {
|
|
287
360
|
this.inAppBrowser.openWithInAppBrowser(url);
|
|
288
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* Navigates to a route and transfers data using Angular Router state.
|
|
364
|
+
* @param route The route to navigate to
|
|
365
|
+
* @param dataTransfer The data to transfer
|
|
366
|
+
*/
|
|
289
367
|
navigateWithData(route, dataTransfer) {
|
|
290
368
|
const navigationExtras = {
|
|
291
369
|
state: {
|
|
@@ -294,12 +372,20 @@ class NavigationService {
|
|
|
294
372
|
};
|
|
295
373
|
this.router.navigate([route], navigationExtras);
|
|
296
374
|
}
|
|
375
|
+
/**
|
|
376
|
+
* Navigates to a URL using Angular Router.
|
|
377
|
+
* @param url The URL to navigate to
|
|
378
|
+
*/
|
|
297
379
|
navigateByUrl(url) {
|
|
298
380
|
this.router
|
|
299
381
|
.navigateByUrl(url)
|
|
300
382
|
.then(response => { })
|
|
301
383
|
.catch(error => { });
|
|
302
384
|
}
|
|
385
|
+
/**
|
|
386
|
+
* Opens a URL in a new browser tab.
|
|
387
|
+
* @param url The URL to open
|
|
388
|
+
*/
|
|
303
389
|
openInNewTab(url) {
|
|
304
390
|
window.open(url, '_blank', 'noopener,noreferrer');
|
|
305
391
|
}
|
|
@@ -313,11 +399,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
313
399
|
}]
|
|
314
400
|
}], ctorParameters: () => [] });
|
|
315
401
|
|
|
402
|
+
/**
|
|
403
|
+
* val-button
|
|
404
|
+
*
|
|
405
|
+
* A customizable button supporting icons, loading state, navigation, and custom handlers.
|
|
406
|
+
*
|
|
407
|
+
* @example
|
|
408
|
+
* <val-button [props]="{ text: 'Save', color: 'primary', icon: { name: 'save', slot: 'start' } }" (onClick)="handler()"></val-button>
|
|
409
|
+
*
|
|
410
|
+
* @input props: ButtonMetadata - Configuration for the button (text, color, icon, state, etc.)
|
|
411
|
+
* @output onClick - Emits when the button is clicked
|
|
412
|
+
*/
|
|
316
413
|
class ButtonComponent {
|
|
317
414
|
constructor(download, icon, navigation) {
|
|
318
415
|
this.download = download;
|
|
319
416
|
this.navigation = navigation;
|
|
320
417
|
this.states = ComponentStates;
|
|
418
|
+
/**
|
|
419
|
+
* Event emitted when the button is clicked.
|
|
420
|
+
*/
|
|
321
421
|
this.onClick = new EventEmitter();
|
|
322
422
|
}
|
|
323
423
|
ngOnInit() { }
|
|
@@ -601,6 +701,16 @@ const SecondarySolidBlockIconHrefButton = (text, icon, href, target) => {
|
|
|
601
701
|
return { ...SecondarySolidBlockIconButton(text, icon), href, target };
|
|
602
702
|
};
|
|
603
703
|
|
|
704
|
+
/**
|
|
705
|
+
* val-display
|
|
706
|
+
*
|
|
707
|
+
* Displays prominent text or titles with custom color and size.
|
|
708
|
+
*
|
|
709
|
+
* @example
|
|
710
|
+
* <val-display [props]="{ content: 'Title', color: 'dark', size: 'large' }"></val-display>
|
|
711
|
+
*
|
|
712
|
+
* @input props: DisplayMetadata - Configuration for the display (content, color, size)
|
|
713
|
+
*/
|
|
604
714
|
class DisplayComponent {
|
|
605
715
|
constructor() { }
|
|
606
716
|
ngOnInit() { }
|
|
@@ -626,7 +736,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
626
736
|
type: Input
|
|
627
737
|
}] } });
|
|
628
738
|
|
|
629
|
-
|
|
739
|
+
/**
|
|
740
|
+
* val-divider
|
|
741
|
+
*
|
|
742
|
+
* A horizontal divider for separating content sections.
|
|
743
|
+
*
|
|
744
|
+
* @example
|
|
745
|
+
* <val-divider [props]="{ size: 'medium', color: 'light', fill: 'solid' }"></val-divider>
|
|
746
|
+
*
|
|
747
|
+
* @input props: DividerMetadata - Configuration for the divider (size, color, fill)
|
|
748
|
+
*/
|
|
630
749
|
class DividerComponent {
|
|
631
750
|
constructor() { }
|
|
632
751
|
ngOnInit() { }
|
|
@@ -640,6 +759,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
640
759
|
type: Input
|
|
641
760
|
}] } });
|
|
642
761
|
|
|
762
|
+
/**
|
|
763
|
+
* val-href
|
|
764
|
+
*
|
|
765
|
+
* A styled anchor/link element, supporting download and click events.
|
|
766
|
+
*
|
|
767
|
+
* @example
|
|
768
|
+
* <val-href [props]="{ url: 'https://...', text: 'Open', color: 'primary', download: true }" (onClick)="handler()"></val-href>
|
|
769
|
+
*
|
|
770
|
+
* @input props: HrefMetadata - Configuration for the link (url, text, color, download, etc.)
|
|
771
|
+
* @output onClick - Emits when the link is clicked
|
|
772
|
+
*/
|
|
643
773
|
class HrefComponent {
|
|
644
774
|
constructor(downloadService) {
|
|
645
775
|
this.downloadService = downloadService;
|
|
@@ -686,6 +816,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
686
816
|
type: Output
|
|
687
817
|
}] } });
|
|
688
818
|
|
|
819
|
+
/**
|
|
820
|
+
* val-icon
|
|
821
|
+
*
|
|
822
|
+
* Displays an icon from the Ionicons set, with configurable size and color.
|
|
823
|
+
*
|
|
824
|
+
* @example
|
|
825
|
+
* <val-icon [props]="{ name: 'star', size: 'large', color: 'warning' }"></val-icon>
|
|
826
|
+
*
|
|
827
|
+
* @input props: IconMetadata - Configuration for the icon (name, color, size)
|
|
828
|
+
*/
|
|
689
829
|
class IconComponent {
|
|
690
830
|
constructor(service) { }
|
|
691
831
|
ngOnInit() { }
|
|
@@ -699,6 +839,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
699
839
|
type: Input
|
|
700
840
|
}] } });
|
|
701
841
|
|
|
842
|
+
/**
|
|
843
|
+
* val-image
|
|
844
|
+
*
|
|
845
|
+
* Displays an image with various display options (bordered, shaded, dark, etc).
|
|
846
|
+
*
|
|
847
|
+
* @example
|
|
848
|
+
* <val-image [props]="{ src: 'url', alt: 'desc', width: 100, height: 100, bordered: true }"></val-image>
|
|
849
|
+
*
|
|
850
|
+
* @input props: ImageMetadata - Configuration for the image (src, alt, size, mode, etc.)
|
|
851
|
+
*/
|
|
702
852
|
class ImageComponent {
|
|
703
853
|
constructor() {
|
|
704
854
|
this.available = true;
|
|
@@ -715,7 +865,7 @@ class ImageComponent {
|
|
|
715
865
|
<img
|
|
716
866
|
[ngClass]="['image', props.mode, props.size]"
|
|
717
867
|
[ngStyle]="{
|
|
718
|
-
content: 'var(' + props.src + ')'
|
|
868
|
+
content: 'var(' + props.src + ')',
|
|
719
869
|
}"
|
|
720
870
|
[class.bordered]="props.bordered"
|
|
721
871
|
[class.shaded]="props.shaded"
|
|
@@ -749,7 +899,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
749
899
|
<img
|
|
750
900
|
[ngClass]="['image', props.mode, props.size]"
|
|
751
901
|
[ngStyle]="{
|
|
752
|
-
content: 'var(' + props.src + ')'
|
|
902
|
+
content: 'var(' + props.src + ')',
|
|
753
903
|
}"
|
|
754
904
|
[class.bordered]="props.bordered"
|
|
755
905
|
[class.shaded]="props.shaded"
|
|
@@ -779,6 +929,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
779
929
|
type: Input
|
|
780
930
|
}] } });
|
|
781
931
|
|
|
932
|
+
/**
|
|
933
|
+
* val-progress-bar
|
|
934
|
+
*
|
|
935
|
+
* A progress bar for indicating completion or loading state.
|
|
936
|
+
*
|
|
937
|
+
* @example
|
|
938
|
+
* <val-progress-bar [props]="{ progress: 0.5, color: 'success', size: 'small' }"></val-progress-bar>
|
|
939
|
+
*
|
|
940
|
+
* @input props: ProgressBarMetadata - Configuration for the progress bar (progress, color, size, etc.)
|
|
941
|
+
*/
|
|
782
942
|
class ProgressBarComponent {
|
|
783
943
|
constructor() { }
|
|
784
944
|
ngOnInit() { }
|
|
@@ -810,6 +970,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
810
970
|
type: Input
|
|
811
971
|
}] } });
|
|
812
972
|
|
|
973
|
+
/**
|
|
974
|
+
* val-text
|
|
975
|
+
*
|
|
976
|
+
* For displaying styled text with color, size, and bold options.
|
|
977
|
+
*
|
|
978
|
+
* @example
|
|
979
|
+
* <val-text [props]="{ content: 'Some text', color: 'medium', size: 'small', bold: true }"></val-text>
|
|
980
|
+
*
|
|
981
|
+
* @input props: TextMetadata - Configuration for the text (content, color, size, bold)
|
|
982
|
+
*/
|
|
813
983
|
class TextComponent {
|
|
814
984
|
constructor() { }
|
|
815
985
|
ngOnInit() { }
|
|
@@ -831,6 +1001,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
831
1001
|
type: Input
|
|
832
1002
|
}] } });
|
|
833
1003
|
|
|
1004
|
+
/**
|
|
1005
|
+
* val-title
|
|
1006
|
+
*
|
|
1007
|
+
* A styled title or heading, with options for size, color, and boldness.
|
|
1008
|
+
*
|
|
1009
|
+
* @example
|
|
1010
|
+
* <val-title [props]="{ content: 'Section', size: 'large', color: 'primary', bold: true }"></val-title>
|
|
1011
|
+
*
|
|
1012
|
+
* @input props: TitleMetadata - Configuration for the title (content, color, size, bold, thin)
|
|
1013
|
+
*/
|
|
834
1014
|
class TitleComponent {
|
|
835
1015
|
constructor() { }
|
|
836
1016
|
ngOnInit() { }
|
|
@@ -862,6 +1042,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
862
1042
|
type: Input
|
|
863
1043
|
}] } });
|
|
864
1044
|
|
|
1045
|
+
/**
|
|
1046
|
+
* val-alert-box
|
|
1047
|
+
*
|
|
1048
|
+
* Displays an alert box with an icon and text, using a styled box container.
|
|
1049
|
+
*
|
|
1050
|
+
* @example
|
|
1051
|
+
* <val-alert-box [props]="{ box: {...}, icon: {...}, text: {...} }"></val-alert-box>
|
|
1052
|
+
*
|
|
1053
|
+
* @input props: AlertBoxMetadata - Configuration for the alert box (box, icon, text)
|
|
1054
|
+
*/
|
|
865
1055
|
class AlertBoxComponent {
|
|
866
1056
|
constructor() { }
|
|
867
1057
|
ngOnInit() { }
|
|
@@ -889,8 +1079,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
889
1079
|
type: Input
|
|
890
1080
|
}] } });
|
|
891
1081
|
|
|
1082
|
+
/**
|
|
1083
|
+
* val-button-group
|
|
1084
|
+
*
|
|
1085
|
+
* Displays a group of buttons with configurable layout and position.
|
|
1086
|
+
*
|
|
1087
|
+
* @example
|
|
1088
|
+
* <val-button-group [props]="{ buttons: [...], position: 'center', columned: false }" (onClick)="handler($event)"></val-button-group>
|
|
1089
|
+
*
|
|
1090
|
+
* @input props: ButtonGroupMetadata - Configuration for the button group (buttons, position, columned)
|
|
1091
|
+
* @output onClick - Emits the token of the clicked button
|
|
1092
|
+
*/
|
|
892
1093
|
class ButtonGroupComponent {
|
|
893
1094
|
constructor() {
|
|
1095
|
+
/**
|
|
1096
|
+
* Event emitted with the token of the clicked button.
|
|
1097
|
+
*/
|
|
894
1098
|
this.onClick = new EventEmitter();
|
|
895
1099
|
}
|
|
896
1100
|
ngOnInit() { }
|
|
@@ -949,8 +1153,22 @@ var CardSection;
|
|
|
949
1153
|
CardSection[CardSection["footerExtra"] = 4] = "footerExtra";
|
|
950
1154
|
})(CardSection || (CardSection = {}));
|
|
951
1155
|
|
|
1156
|
+
/**
|
|
1157
|
+
* val-card
|
|
1158
|
+
*
|
|
1159
|
+
* A flexible card component supporting images, titles, content, actions, and custom sections.
|
|
1160
|
+
*
|
|
1161
|
+
* @example
|
|
1162
|
+
* <val-card [props]="{ type: 'native', title: 'Card', image: 'url', content: '...', actions: [...] }" (onClick)="handler($event)"></val-card>
|
|
1163
|
+
*
|
|
1164
|
+
* @input props: CardMetadata - Configuration for the card (type, title, image, content, actions, etc.)
|
|
1165
|
+
* @output onClick - Emits a CardClickEvent when the card or an action is clicked
|
|
1166
|
+
*/
|
|
952
1167
|
class CardComponent {
|
|
953
1168
|
constructor() {
|
|
1169
|
+
/**
|
|
1170
|
+
* Event emitted when the card or an action is clicked.
|
|
1171
|
+
*/
|
|
954
1172
|
this.onClick = new EventEmitter();
|
|
955
1173
|
this.types = CardType;
|
|
956
1174
|
this.actionTypes = ToolbarActionType;
|
|
@@ -1303,6 +1521,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1303
1521
|
type: Output
|
|
1304
1522
|
}] } });
|
|
1305
1523
|
|
|
1524
|
+
/**
|
|
1525
|
+
* val-check-input
|
|
1526
|
+
*
|
|
1527
|
+
* A simple checkbox input for boolean values or agreements.
|
|
1528
|
+
*
|
|
1529
|
+
* @example
|
|
1530
|
+
* <val-check-input></val-check-input>
|
|
1531
|
+
*/
|
|
1306
1532
|
class CheckInputComponent {
|
|
1307
1533
|
constructor() { }
|
|
1308
1534
|
ngOnInit() { }
|
|
@@ -1314,6 +1540,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1314
1540
|
args: [{ selector: 'val-check-input', standalone: true, imports: [CommonModule, IonCheckbox], template: ` <ion-checkbox>I agree to the terms and conditions</ion-checkbox> ` }]
|
|
1315
1541
|
}], ctorParameters: () => [] });
|
|
1316
1542
|
|
|
1543
|
+
/**
|
|
1544
|
+
* val-comment-input
|
|
1545
|
+
*
|
|
1546
|
+
* A textarea input for multi-line comments, integrated with Angular forms.
|
|
1547
|
+
*
|
|
1548
|
+
* @example
|
|
1549
|
+
* <val-comment-input [props]="{ control: myControl, range: { max: 200 } }"></val-comment-input>
|
|
1550
|
+
*
|
|
1551
|
+
* @input props: InputMetadata - Configuration for the textarea (form control, range, etc.)
|
|
1552
|
+
*/
|
|
1317
1553
|
class CommentInputComponent {
|
|
1318
1554
|
constructor() { }
|
|
1319
1555
|
ngOnInit() { }
|
|
@@ -1331,6 +1567,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1331
1567
|
type: Input
|
|
1332
1568
|
}] } });
|
|
1333
1569
|
|
|
1570
|
+
/**
|
|
1571
|
+
* val-content-loader
|
|
1572
|
+
*
|
|
1573
|
+
* A loading spinner with optional text, for indicating loading states.
|
|
1574
|
+
*
|
|
1575
|
+
* @example
|
|
1576
|
+
* <val-content-loader [props]="{ size: 'large', color: 'primary', text: 'Loading...' }"></val-content-loader>
|
|
1577
|
+
*
|
|
1578
|
+
* @input props: ContentLoaderMetadata - Configuration for the loader (size, color, text, etc.)
|
|
1579
|
+
*/
|
|
1334
1580
|
class ContentLoaderComponent {
|
|
1335
1581
|
constructor() { }
|
|
1336
1582
|
ngOnInit() { }
|
|
@@ -1358,6 +1604,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1358
1604
|
type: Input
|
|
1359
1605
|
}] } });
|
|
1360
1606
|
|
|
1607
|
+
/**
|
|
1608
|
+
* val-date-input
|
|
1609
|
+
*
|
|
1610
|
+
* A date picker input integrated with Angular forms, using Ionic's datetime component.
|
|
1611
|
+
*
|
|
1612
|
+
* @example
|
|
1613
|
+
* <val-date-input [props]="{ control: myControl, hint: 'Select a date' }"></val-date-input>
|
|
1614
|
+
*
|
|
1615
|
+
* @input props: InputMetadata - Configuration for the date input (form control, hint, etc.)
|
|
1616
|
+
*/
|
|
1361
1617
|
class DateInputComponent {
|
|
1362
1618
|
constructor() { }
|
|
1363
1619
|
ngOnInit() { }
|
|
@@ -1425,6 +1681,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1425
1681
|
type: Input
|
|
1426
1682
|
}] } });
|
|
1427
1683
|
|
|
1684
|
+
/**
|
|
1685
|
+
* val-email-input
|
|
1686
|
+
*
|
|
1687
|
+
* An email input field integrated with Angular forms.
|
|
1688
|
+
*
|
|
1689
|
+
* @example
|
|
1690
|
+
* <val-email-input [props]="{ control: myControl, placeholder: 'Enter your email' }"></val-email-input>
|
|
1691
|
+
*
|
|
1692
|
+
* @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)
|
|
1693
|
+
*/
|
|
1428
1694
|
class EmailInputComponent {
|
|
1429
1695
|
constructor() { }
|
|
1430
1696
|
ngOnInit() { }
|
|
@@ -1438,6 +1704,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1438
1704
|
type: Input
|
|
1439
1705
|
}] } });
|
|
1440
1706
|
|
|
1707
|
+
/**
|
|
1708
|
+
* Resolves a color string to a valid CSS value for use in styles.
|
|
1709
|
+
* Supports Ionic color names, CSS variables, and custom colors.
|
|
1710
|
+
*
|
|
1711
|
+
* @param color The color name, CSS variable, or custom color string
|
|
1712
|
+
* @returns A valid CSS color value
|
|
1713
|
+
*
|
|
1714
|
+
* @example
|
|
1715
|
+
* resolveColor('primary'); // returns 'var(--ion-color-primary)'
|
|
1716
|
+
* resolveColor('--my-custom-color'); // returns 'var(--my-custom-color)'
|
|
1717
|
+
* resolveColor('#ff0000'); // returns '#ff0000'
|
|
1718
|
+
*/
|
|
1441
1719
|
function resolveColor(color) {
|
|
1442
1720
|
// Si el color empieza con "--", se asume que es una variable CSS válida
|
|
1443
1721
|
if (color.startsWith('--')) {
|
|
@@ -1463,6 +1741,16 @@ function resolveColor(color) {
|
|
|
1463
1741
|
return color;
|
|
1464
1742
|
}
|
|
1465
1743
|
|
|
1744
|
+
/**
|
|
1745
|
+
* val-expandable-text
|
|
1746
|
+
*
|
|
1747
|
+
* A text component that can be expanded/collapsed to show more or less content.
|
|
1748
|
+
*
|
|
1749
|
+
* @example
|
|
1750
|
+
* <val-expandable-text [props]="{ content: '...', limit: 180, color: 'primary', expandText: 'más' }"></val-expandable-text>
|
|
1751
|
+
*
|
|
1752
|
+
* @input props: ExpandableTextInput - Configuration for the expandable text (content, limit, color, expandText)
|
|
1753
|
+
*/
|
|
1466
1754
|
class ExpandableTextComponent {
|
|
1467
1755
|
constructor() {
|
|
1468
1756
|
this.expanded = false;
|
|
@@ -1517,6 +1805,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1517
1805
|
type: Input
|
|
1518
1806
|
}] } });
|
|
1519
1807
|
|
|
1808
|
+
/**
|
|
1809
|
+
* val-file-input
|
|
1810
|
+
*
|
|
1811
|
+
* A file input component for uploading files, integrated with Angular forms.
|
|
1812
|
+
*
|
|
1813
|
+
* @example
|
|
1814
|
+
* <val-file-input [props]="{ control: myControl }"></val-file-input>
|
|
1815
|
+
*
|
|
1816
|
+
* @input props: InputMetadata - Configuration for the file input (form control, etc.)
|
|
1817
|
+
*/
|
|
1520
1818
|
class FileInputComponent {
|
|
1521
1819
|
constructor() {
|
|
1522
1820
|
this.contrastButton = {
|
|
@@ -1551,7 +1849,7 @@ class FileInputComponent {
|
|
|
1551
1849
|
</div>
|
|
1552
1850
|
<val-button [props]="contrastButton" (onClick)="fileInput.click()"></val-button>
|
|
1553
1851
|
</div>
|
|
1554
|
-
`, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.file-container{margin-top:.25rem}.name-container{display:flex;flex-direction:row;align-items:
|
|
1852
|
+
`, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.file-container{margin-top:.25rem}.name-container{display:flex;flex-direction:row;align-items:center}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["props"], outputs: ["onClick"] }] }); }
|
|
1555
1853
|
}
|
|
1556
1854
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FileInputComponent, decorators: [{
|
|
1557
1855
|
type: Component,
|
|
@@ -1572,14 +1870,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1572
1870
|
</div>
|
|
1573
1871
|
<val-button [props]="contrastButton" (onClick)="fileInput.click()"></val-button>
|
|
1574
1872
|
</div>
|
|
1575
|
-
`, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.file-container{margin-top:.25rem}.name-container{display:flex;flex-direction:row;align-items:
|
|
1576
|
-
}], ctorParameters: () => [], propDecorators: {
|
|
1873
|
+
`, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.file-container{margin-top:.25rem}.name-container{display:flex;flex-direction:row;align-items:center}\n"] }]
|
|
1874
|
+
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
1875
|
+
type: Input
|
|
1876
|
+
}], fileInput: [{
|
|
1577
1877
|
type: ViewChild,
|
|
1578
1878
|
args: ['fileInput']
|
|
1579
|
-
}], props: [{
|
|
1580
|
-
type: Input
|
|
1581
1879
|
}] } });
|
|
1582
1880
|
|
|
1881
|
+
/**
|
|
1882
|
+
* val-hint
|
|
1883
|
+
*
|
|
1884
|
+
* Displays validation error messages for a form input, using Angular forms.
|
|
1885
|
+
*
|
|
1886
|
+
* @example
|
|
1887
|
+
* <val-hint [props]="{ control: myControl, errors: { required: 'Required field' } }"></val-hint>
|
|
1888
|
+
*
|
|
1889
|
+
* @input props: InputMetadata - Configuration for the input (form control, errors, etc.)
|
|
1890
|
+
*/
|
|
1583
1891
|
class HintComponent {
|
|
1584
1892
|
constructor() { }
|
|
1585
1893
|
ngOnInit() { }
|
|
@@ -1627,6 +1935,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1627
1935
|
type: Input
|
|
1628
1936
|
}] } });
|
|
1629
1937
|
|
|
1938
|
+
/**
|
|
1939
|
+
* val-hour-input
|
|
1940
|
+
*
|
|
1941
|
+
* A time picker input integrated with Angular forms, using Ionic's datetime component.
|
|
1942
|
+
*
|
|
1943
|
+
* @example
|
|
1944
|
+
* <val-hour-input [props]="{ control: myControl }"></val-hour-input>
|
|
1945
|
+
*
|
|
1946
|
+
* @input props: InputMetadata - Configuration for the time input (form control, etc.)
|
|
1947
|
+
*/
|
|
1630
1948
|
class HourInputComponent {
|
|
1631
1949
|
constructor() { }
|
|
1632
1950
|
ngOnInit() { }
|
|
@@ -1640,6 +1958,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1640
1958
|
type: Input
|
|
1641
1959
|
}] } });
|
|
1642
1960
|
|
|
1961
|
+
/**
|
|
1962
|
+
* val-link
|
|
1963
|
+
*
|
|
1964
|
+
* A stylized link button with navigation support for internal, in-app, or new tab links.
|
|
1965
|
+
*
|
|
1966
|
+
* @example
|
|
1967
|
+
* <val-link [props]="{ text: 'Go', color: 'primary', link: '/home', type: 'internal' }" (onClick)="handler($event)"></val-link>
|
|
1968
|
+
*
|
|
1969
|
+
* @input props: LinkMetadata - Configuration for the link (text, color, link, type, etc.)
|
|
1970
|
+
* @output onClick - Emits the token of the clicked link
|
|
1971
|
+
*/
|
|
1643
1972
|
class LinkComponent {
|
|
1644
1973
|
constructor() {
|
|
1645
1974
|
this.onClick = new EventEmitter();
|
|
@@ -1687,6 +2016,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1687
2016
|
type: Output
|
|
1688
2017
|
}] } });
|
|
1689
2018
|
|
|
2019
|
+
/**
|
|
2020
|
+
* val-links-cake
|
|
2021
|
+
*
|
|
2022
|
+
* Displays a list of links with an optional title, styled as a "cake" of links.
|
|
2023
|
+
*
|
|
2024
|
+
* @example
|
|
2025
|
+
* <val-links-cake [props]="{ title: 'Links', links: [...], size: 'medium' }"></val-links-cake>
|
|
2026
|
+
*
|
|
2027
|
+
* @input props: LinkCakeMetadata - Configuration for the links cake (title, links, size)
|
|
2028
|
+
*/
|
|
1690
2029
|
class LinksCakeComponent {
|
|
1691
2030
|
constructor() { }
|
|
1692
2031
|
ngOnInit() { }
|
|
@@ -1722,12 +2061,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1722
2061
|
type: Input
|
|
1723
2062
|
}] } });
|
|
1724
2063
|
|
|
2064
|
+
/**
|
|
2065
|
+
* val-notes-box
|
|
2066
|
+
*
|
|
2067
|
+
* Displays a styled notes/info box with optional prefix and configurable color, size, and padding.
|
|
2068
|
+
*
|
|
2069
|
+
* @example
|
|
2070
|
+
* <val-notes-box [props]="{ text: 'Note', prefix: 'Info', color: 'primary', textColor: 'dark', size: 'medium', rounded: true, padding: '8px' }"></val-notes-box>
|
|
2071
|
+
*
|
|
2072
|
+
* @input props: NotesBoxMetadata - Configuration for the notes box (text, prefix, color, textColor, size, rounded, padding)
|
|
2073
|
+
*/
|
|
1725
2074
|
class NotesBoxComponent {
|
|
1726
2075
|
constructor() { }
|
|
1727
2076
|
ngOnInit() { }
|
|
1728
2077
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotesBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1729
2078
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: NotesBoxComponent, isStandalone: true, selector: "val-notes-box", inputs: { props: "props" }, ngImport: i0, template: `
|
|
1730
|
-
<val-box
|
|
2079
|
+
<val-box
|
|
2080
|
+
[props]="{
|
|
2081
|
+
icon: '',
|
|
2082
|
+
bordered: false,
|
|
2083
|
+
color: props.color,
|
|
2084
|
+
leftBorder: true,
|
|
2085
|
+
rounded: props.rounded,
|
|
2086
|
+
padding: props.padding,
|
|
2087
|
+
}"
|
|
2088
|
+
>
|
|
1731
2089
|
<div [ngClass]="['content-container', props.size]" body>
|
|
1732
2090
|
@if (props.prefix) {
|
|
1733
2091
|
<val-text
|
|
@@ -1742,7 +2100,16 @@ class NotesBoxComponent {
|
|
|
1742
2100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotesBoxComponent, decorators: [{
|
|
1743
2101
|
type: Component,
|
|
1744
2102
|
args: [{ selector: 'val-notes-box', standalone: true, imports: [CommonModule, BoxComponent, TextComponent], template: `
|
|
1745
|
-
<val-box
|
|
2103
|
+
<val-box
|
|
2104
|
+
[props]="{
|
|
2105
|
+
icon: '',
|
|
2106
|
+
bordered: false,
|
|
2107
|
+
color: props.color,
|
|
2108
|
+
leftBorder: true,
|
|
2109
|
+
rounded: props.rounded,
|
|
2110
|
+
padding: props.padding,
|
|
2111
|
+
}"
|
|
2112
|
+
>
|
|
1746
2113
|
<div [ngClass]="['content-container', props.size]" body>
|
|
1747
2114
|
@if (props.prefix) {
|
|
1748
2115
|
<val-text
|
|
@@ -1757,6 +2124,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1757
2124
|
type: Input
|
|
1758
2125
|
}] } });
|
|
1759
2126
|
|
|
2127
|
+
/**
|
|
2128
|
+
* val-number-input
|
|
2129
|
+
*
|
|
2130
|
+
* A number input field integrated with Angular forms.
|
|
2131
|
+
*
|
|
2132
|
+
* @example
|
|
2133
|
+
* <val-number-input [props]="{ control: myControl, placeholder: 'Enter a number' }"></val-number-input>
|
|
2134
|
+
*
|
|
2135
|
+
* @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)
|
|
2136
|
+
*/
|
|
1760
2137
|
class NumberInputComponent {
|
|
1761
2138
|
constructor() { }
|
|
1762
2139
|
ngOnInit() { }
|
|
@@ -1770,6 +2147,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1770
2147
|
type: Input
|
|
1771
2148
|
}] } });
|
|
1772
2149
|
|
|
2150
|
+
/**
|
|
2151
|
+
* val-password-input
|
|
2152
|
+
*
|
|
2153
|
+
* A password input field with show/hide toggle, integrated with Angular forms.
|
|
2154
|
+
*
|
|
2155
|
+
* @example
|
|
2156
|
+
* <val-password-input [props]="{ control: myControl, placeholder: 'Enter password' }"></val-password-input>
|
|
2157
|
+
*
|
|
2158
|
+
* @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)
|
|
2159
|
+
*/
|
|
1773
2160
|
class PasswordInputComponent {
|
|
1774
2161
|
constructor(icon) {
|
|
1775
2162
|
this.hidePassword = true;
|
|
@@ -1809,6 +2196,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1809
2196
|
type: Input
|
|
1810
2197
|
}] } });
|
|
1811
2198
|
|
|
2199
|
+
/**
|
|
2200
|
+
* val-pin-input
|
|
2201
|
+
*
|
|
2202
|
+
* A PIN code input using ng-otp-input, integrated with Angular forms.
|
|
2203
|
+
*
|
|
2204
|
+
* @example
|
|
2205
|
+
* <val-pin-input [props]="{ control: myControl }"></val-pin-input>
|
|
2206
|
+
*
|
|
2207
|
+
* @input props: InputMetadata - Configuration for the PIN input (form control, etc.)
|
|
2208
|
+
*/
|
|
1812
2209
|
class PinInputComponent {
|
|
1813
2210
|
constructor() {
|
|
1814
2211
|
this.codeLength = 5;
|
|
@@ -1850,6 +2247,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1850
2247
|
type: Input
|
|
1851
2248
|
}] } });
|
|
1852
2249
|
|
|
2250
|
+
/**
|
|
2251
|
+
* val-title-block
|
|
2252
|
+
*
|
|
2253
|
+
* Displays a block of titles (above, main, below) with configurable styles and positions.
|
|
2254
|
+
*
|
|
2255
|
+
* @example
|
|
2256
|
+
* <val-title-block [props]="{ title: {...}, aboveTitle: {...}, bellowTitle: {...}, position: 'center' }"></val-title-block>
|
|
2257
|
+
*
|
|
2258
|
+
* @input props: TitleBlockMetada - Configuration for the title block (title, aboveTitle, bellowTitle, position)
|
|
2259
|
+
*/
|
|
1853
2260
|
class TitleBlockComponent {
|
|
1854
2261
|
constructor() { }
|
|
1855
2262
|
ngOnInit() { }
|
|
@@ -1924,6 +2331,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1924
2331
|
}] } });
|
|
1925
2332
|
|
|
1926
2333
|
//TODO: support automatic or manual interval for messages. Include the interval number as a parameter.
|
|
2334
|
+
/**
|
|
2335
|
+
* val-progress-status
|
|
2336
|
+
*
|
|
2337
|
+
* Displays a progress bar with status messages and titles, useful for multi-step or loading processes.
|
|
2338
|
+
*
|
|
2339
|
+
* @example
|
|
2340
|
+
* <val-progress-status [props]="{ progress: 0.5, color: 'primary', size: 'medium', titles: {...}, messages: [...] }"></val-progress-status>
|
|
2341
|
+
*
|
|
2342
|
+
* @input props: ProgressStatusMetadata - Configuration for the progress status (progress, color, size, titles, messages)
|
|
2343
|
+
*/
|
|
1927
2344
|
class ProgressStatusComponent {
|
|
1928
2345
|
constructor() {
|
|
1929
2346
|
this.currentIndex = 0;
|
|
@@ -2013,6 +2430,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2013
2430
|
type: Input
|
|
2014
2431
|
}] } });
|
|
2015
2432
|
|
|
2433
|
+
/**
|
|
2434
|
+
* val-prompter
|
|
2435
|
+
*
|
|
2436
|
+
* Displays a prompt/info box with text, actions (buttons/links), and custom styles.
|
|
2437
|
+
*
|
|
2438
|
+
* @example
|
|
2439
|
+
* <val-prompter [props]="{ content: 'Message', buttons: [...], hrefs: [...], color: 'primary', size: 'medium' }"></val-prompter>
|
|
2440
|
+
*
|
|
2441
|
+
* @input props: PrompterMetadata - Configuration for the prompter (content, buttons, hrefs, color, size, etc.)
|
|
2442
|
+
* @output onClick - Emits when an action is clicked
|
|
2443
|
+
*/
|
|
2016
2444
|
class PrompterComponent {
|
|
2017
2445
|
constructor() {
|
|
2018
2446
|
this.onClick = new EventEmitter();
|
|
@@ -2101,6 +2529,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2101
2529
|
type: Output
|
|
2102
2530
|
}] } });
|
|
2103
2531
|
|
|
2532
|
+
/**
|
|
2533
|
+
* val-radio-input
|
|
2534
|
+
*
|
|
2535
|
+
* A radio group input for selecting one option, integrated with Angular forms.
|
|
2536
|
+
*
|
|
2537
|
+
* @example
|
|
2538
|
+
* <val-radio-input [props]="{ control: myControl, options: [{ id: '1', name: 'Option 1' }] }"></val-radio-input>
|
|
2539
|
+
*
|
|
2540
|
+
* @input props: InputMetadata - Configuration for the radio input (form control, options, etc.)
|
|
2541
|
+
*/
|
|
2104
2542
|
class RadioInputComponent {
|
|
2105
2543
|
constructor() { }
|
|
2106
2544
|
ngOnInit() { }
|
|
@@ -2128,13 +2566,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2128
2566
|
type: Input
|
|
2129
2567
|
}] } });
|
|
2130
2568
|
|
|
2569
|
+
/**
|
|
2570
|
+
* Removes diacritical marks (accents) from a string using Unicode normalization.
|
|
2571
|
+
* Useful for text search and comparison.
|
|
2572
|
+
*
|
|
2573
|
+
* @param text The input string
|
|
2574
|
+
* @returns The normalized string without diacritical marks
|
|
2575
|
+
*
|
|
2576
|
+
* @example
|
|
2577
|
+
* replaceSpecialChars('canción') // returns 'cancion'
|
|
2578
|
+
*/
|
|
2131
2579
|
const replaceSpecialChars = (text) => text.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
2132
2580
|
|
|
2581
|
+
/**
|
|
2582
|
+
* val-searchbar
|
|
2583
|
+
*
|
|
2584
|
+
* A search bar component with debounce and event emitters for filtering, focus, and blur.
|
|
2585
|
+
*
|
|
2586
|
+
* @example
|
|
2587
|
+
* <val-searchbar (filterEvent)="onFilter($event)" (focusEvent)="onFocus()" (blurEvent)="onBlur()"></val-searchbar>
|
|
2588
|
+
*
|
|
2589
|
+
* @input disabled - Whether the searchbar is disabled.
|
|
2590
|
+
* @output filterEvent - Emits the search term on input.
|
|
2591
|
+
* @output focusEvent - Emits when the searchbar gains focus.
|
|
2592
|
+
* @output blurEvent - Emits when the searchbar loses focus.
|
|
2593
|
+
*/
|
|
2133
2594
|
class SearchbarComponent {
|
|
2134
2595
|
constructor() {
|
|
2596
|
+
/**
|
|
2597
|
+
* Emits the search term on input.
|
|
2598
|
+
*/
|
|
2599
|
+
this.filterEvent = new EventEmitter();
|
|
2600
|
+
/**
|
|
2601
|
+
* Emits when the searchbar gains focus.
|
|
2602
|
+
*/
|
|
2135
2603
|
this.focusEvent = new EventEmitter();
|
|
2604
|
+
/**
|
|
2605
|
+
* Emits when the searchbar loses focus.
|
|
2606
|
+
*/
|
|
2136
2607
|
this.blurEvent = new EventEmitter();
|
|
2137
|
-
this.filterEvent = new EventEmitter();
|
|
2138
2608
|
}
|
|
2139
2609
|
onSearch($event) {
|
|
2140
2610
|
const searchTerm = $event.detail.value;
|
|
@@ -2147,7 +2617,7 @@ class SearchbarComponent {
|
|
|
2147
2617
|
this.blurEvent.emit();
|
|
2148
2618
|
}
|
|
2149
2619
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2150
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchbarComponent, isStandalone: true, selector: "val-searchbar", inputs: { disabled: "disabled" }, outputs: {
|
|
2620
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchbarComponent, isStandalone: true, selector: "val-searchbar", inputs: { disabled: "disabled" }, outputs: { filterEvent: "filterEvent", focusEvent: "focusEvent", blurEvent: "blurEvent" }, ngImport: i0, template: `
|
|
2151
2621
|
<ion-searchbar
|
|
2152
2622
|
mode="ios"
|
|
2153
2623
|
debounce="500"
|
|
@@ -2180,14 +2650,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2180
2650
|
`, styles: ["ion-searchbar{--cancel-button-color: var(--ion-color-dark);--background: var(--ion-color-light);font-family:var(--ion-default-font),Arial,sans-serif}\n"] }]
|
|
2181
2651
|
}], ctorParameters: () => [], propDecorators: { disabled: [{
|
|
2182
2652
|
type: Input
|
|
2653
|
+
}], filterEvent: [{
|
|
2654
|
+
type: Output
|
|
2183
2655
|
}], focusEvent: [{
|
|
2184
2656
|
type: Output
|
|
2185
2657
|
}], blurEvent: [{
|
|
2186
2658
|
type: Output
|
|
2187
|
-
}], filterEvent: [{
|
|
2188
|
-
type: Output
|
|
2189
2659
|
}] } });
|
|
2190
2660
|
|
|
2661
|
+
/**
|
|
2662
|
+
* val-select-search
|
|
2663
|
+
*
|
|
2664
|
+
* A searchable select/dropdown input with modal and filtering, integrated with Angular forms.
|
|
2665
|
+
*
|
|
2666
|
+
* @example
|
|
2667
|
+
* <val-select-search [props]="{ control: myControl, label: 'Choose', options: [{ id: '1', name: 'Option 1' }] }"></val-select-search>
|
|
2668
|
+
*
|
|
2669
|
+
* @input props: InputMetadata - Configuration for the select input (form control, label, options, etc.)
|
|
2670
|
+
*/
|
|
2191
2671
|
class SelectSearchComponent {
|
|
2192
2672
|
constructor() {
|
|
2193
2673
|
this.label = 'Seleccionar';
|
|
@@ -2472,7 +2952,7 @@ class SelectSearchComponent {
|
|
|
2472
2952
|
</ion-content>
|
|
2473
2953
|
</ng-template>
|
|
2474
2954
|
</ion-modal>
|
|
2475
|
-
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonModal, selector: "ion-modal" }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: SearchbarComponent, selector: "val-searchbar", inputs: ["disabled"], outputs: ["
|
|
2955
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonModal, selector: "ion-modal" }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: SearchbarComponent, selector: "val-searchbar", inputs: ["disabled"], outputs: ["filterEvent", "focusEvent", "blurEvent"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
|
|
2476
2956
|
}
|
|
2477
2957
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectSearchComponent, decorators: [{
|
|
2478
2958
|
type: Component,
|
|
@@ -2531,6 +3011,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2531
3011
|
type: Input
|
|
2532
3012
|
}] } });
|
|
2533
3013
|
|
|
3014
|
+
/**
|
|
3015
|
+
* val-select-input
|
|
3016
|
+
*
|
|
3017
|
+
* A select/dropdown input integrated with Angular forms, using Ionic's select component.
|
|
3018
|
+
*
|
|
3019
|
+
* @example
|
|
3020
|
+
* <val-select-input [props]="{ control: myControl, label: 'Choose', options: [{ id: '1', name: 'Option 1' }] }"></val-select-input>
|
|
3021
|
+
*
|
|
3022
|
+
* @input props: InputMetadata - Configuration for the select input (form control, label, options, etc.)
|
|
3023
|
+
*/
|
|
2534
3024
|
class SearchSelectorComponent {
|
|
2535
3025
|
constructor() {
|
|
2536
3026
|
this.customModalOptions = {
|
|
@@ -2580,34 +3070,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2580
3070
|
type: Input
|
|
2581
3071
|
}] } });
|
|
2582
3072
|
|
|
3073
|
+
/**
|
|
3074
|
+
* val-text-input
|
|
3075
|
+
*
|
|
3076
|
+
* A text input field integrated with Angular forms.
|
|
3077
|
+
*
|
|
3078
|
+
* @example
|
|
3079
|
+
* <val-text-input [props]="{ control: myControl, placeholder: 'Enter text', ... }"></val-text-input>
|
|
3080
|
+
*
|
|
3081
|
+
* @input props: InputMetadata - Configuration for the input (form control, placeholder, label, etc.)
|
|
3082
|
+
*/
|
|
2583
3083
|
class TextInputComponent {
|
|
2584
3084
|
constructor() {
|
|
2585
3085
|
this.states = ComponentStates;
|
|
2586
3086
|
}
|
|
2587
|
-
ngOnInit() {
|
|
2588
|
-
}
|
|
3087
|
+
ngOnInit() { }
|
|
2589
3088
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2590
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TextInputComponent, isStandalone: true, selector: "val-text-input", inputs: { props: "props" }, ngImport: i0, template: `
|
|
2591
|
-
<ion-input
|
|
2592
|
-
[formControl]="props.control"
|
|
2593
|
-
type="text"
|
|
2594
|
-
[placeholder]="props.placeholder"
|
|
2595
|
-
/>
|
|
2596
|
-
`, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }] }); }
|
|
3089
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TextInputComponent, isStandalone: true, selector: "val-text-input", inputs: { props: "props" }, ngImport: i0, template: ` <ion-input [formControl]="props.control" type="text" [placeholder]="props.placeholder" /> `, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }] }); }
|
|
2597
3090
|
}
|
|
2598
3091
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextInputComponent, decorators: [{
|
|
2599
3092
|
type: Component,
|
|
2600
|
-
args: [{ selector: 'val-text-input', standalone: true, imports: [ReactiveFormsModule, IonInput], template: `
|
|
2601
|
-
<ion-input
|
|
2602
|
-
[formControl]="props.control"
|
|
2603
|
-
type="text"
|
|
2604
|
-
[placeholder]="props.placeholder"
|
|
2605
|
-
/>
|
|
2606
|
-
`, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"] }]
|
|
3093
|
+
args: [{ selector: 'val-text-input', standalone: true, imports: [ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="props.control" type="text" [placeholder]="props.placeholder" /> `, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"] }]
|
|
2607
3094
|
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
2608
3095
|
type: Input
|
|
2609
3096
|
}] } });
|
|
2610
3097
|
|
|
3098
|
+
/**
|
|
3099
|
+
* val-banner
|
|
3100
|
+
*
|
|
3101
|
+
* Displays a banner with title block, actions, and optional close button.
|
|
3102
|
+
*
|
|
3103
|
+
* @example
|
|
3104
|
+
* <val-banner [props]="{ content: {...}, actions: {...}, closable: true, bordered: true, mode: 'center', alignment: 'center', padding: '8px' }" (onClick)="handler($event)" (onClose)="closeHandler()"></val-banner>
|
|
3105
|
+
*
|
|
3106
|
+
* @input props: BannerMetadata - Configuration for the banner (content, actions, closable, bordered, mode, alignment, padding)
|
|
3107
|
+
* @output onClick - Emits when an action is clicked
|
|
3108
|
+
* @output onClose - Emits when the banner is closed
|
|
3109
|
+
*/
|
|
2611
3110
|
class BannerComponent {
|
|
2612
3111
|
constructor() {
|
|
2613
3112
|
this.onClick = new EventEmitter();
|
|
@@ -2623,7 +3122,12 @@ class BannerComponent {
|
|
|
2623
3122
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2624
3123
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BannerComponent, isStandalone: true, selector: "val-banner", inputs: { props: "props" }, outputs: { onClick: "onClick", onClose: "onClose" }, ngImport: i0, template: `
|
|
2625
3124
|
<val-box
|
|
2626
|
-
[props]="{
|
|
3125
|
+
[props]="{
|
|
3126
|
+
icon: props.closable ? 'close-outline' : '',
|
|
3127
|
+
bordered: props.bordered,
|
|
3128
|
+
color: '',
|
|
3129
|
+
padding: props.padding,
|
|
3130
|
+
}"
|
|
2627
3131
|
(onClick)="closeHandler()"
|
|
2628
3132
|
>
|
|
2629
3133
|
<div [ngClass]="['content-container', props.mode, props.alignment]" body>
|
|
@@ -2650,7 +3154,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2650
3154
|
type: Component,
|
|
2651
3155
|
args: [{ selector: 'val-banner', standalone: true, imports: [CommonModule, BoxComponent, TitleBlockComponent, ButtonGroupComponent], template: `
|
|
2652
3156
|
<val-box
|
|
2653
|
-
[props]="{
|
|
3157
|
+
[props]="{
|
|
3158
|
+
icon: props.closable ? 'close-outline' : '',
|
|
3159
|
+
bordered: props.bordered,
|
|
3160
|
+
color: '',
|
|
3161
|
+
padding: props.padding,
|
|
3162
|
+
}"
|
|
2654
3163
|
(onClick)="closeHandler()"
|
|
2655
3164
|
>
|
|
2656
3165
|
<div [ngClass]="['content-container', props.mode, props.alignment]" body>
|
|
@@ -2680,38 +3189,72 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2680
3189
|
type: Output
|
|
2681
3190
|
}] } });
|
|
2682
3191
|
|
|
3192
|
+
/**
|
|
3193
|
+
* ToolbarComponent
|
|
3194
|
+
*
|
|
3195
|
+
* Componente de barra de herramientas reutilizable para encabezados y pies de página.
|
|
3196
|
+
* Permite acciones, botón de retroceso, menú y personalización de colores y título.
|
|
3197
|
+
*
|
|
3198
|
+
* @example
|
|
3199
|
+
* <val-toolbar [props]="{ title: 'Mi App', withBack: true, actions: [...] }" (onClick)="handleToolbarAction($event)"></val-toolbar>
|
|
3200
|
+
*
|
|
3201
|
+
* @input props {ToolbarMetadata} - Metadatos de la barra de herramientas.
|
|
3202
|
+
* @output onClick - Emite el token de la acción clicada.
|
|
3203
|
+
*/
|
|
2683
3204
|
class ToolbarComponent {
|
|
2684
3205
|
constructor(navCtrl, icon) {
|
|
2685
3206
|
this.navCtrl = navCtrl;
|
|
3207
|
+
/**
|
|
3208
|
+
* Evento emitido al hacer click en una acción o botón de la barra.
|
|
3209
|
+
*/
|
|
2686
3210
|
this.onClick = new EventEmitter();
|
|
2687
3211
|
this.actionTypes = ToolbarActionType;
|
|
2688
3212
|
addIcons({ chevronBackOutline });
|
|
2689
3213
|
}
|
|
2690
3214
|
ngOnInit() { }
|
|
3215
|
+
/**
|
|
3216
|
+
* Emite el token de la acción clicada.
|
|
3217
|
+
* @param token Token de la acción
|
|
3218
|
+
*/
|
|
3219
|
+
clickHandler(token) {
|
|
3220
|
+
this.onClick.emit(token);
|
|
3221
|
+
}
|
|
3222
|
+
/**
|
|
3223
|
+
* Navega hacia atrás usando NavController.
|
|
3224
|
+
*/
|
|
2691
3225
|
goBack() {
|
|
2692
3226
|
this.navCtrl.back();
|
|
2693
3227
|
}
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
leftActions() {
|
|
2698
|
-
return this.props.actions.filter(x => x.position === 'left');
|
|
2699
|
-
}
|
|
3228
|
+
/**
|
|
3229
|
+
* Determina si hay acciones a la derecha.
|
|
3230
|
+
*/
|
|
2700
3231
|
someInRight() {
|
|
2701
3232
|
return !!this.props.actions.find(x => x.position === 'right');
|
|
2702
3233
|
}
|
|
3234
|
+
/**
|
|
3235
|
+
* Determina si hay acciones a la izquierda.
|
|
3236
|
+
*/
|
|
2703
3237
|
someInLeft() {
|
|
2704
3238
|
return !!this.props.actions.find(x => x.position === 'left');
|
|
2705
3239
|
}
|
|
2706
|
-
|
|
2707
|
-
|
|
3240
|
+
/**
|
|
3241
|
+
* Devuelve las acciones de la derecha.
|
|
3242
|
+
*/
|
|
3243
|
+
rightActions() {
|
|
3244
|
+
return this.props.actions.filter(x => x.position === 'right');
|
|
3245
|
+
}
|
|
3246
|
+
/**
|
|
3247
|
+
* Devuelve las acciones de la izquierda.
|
|
3248
|
+
*/
|
|
3249
|
+
leftActions() {
|
|
3250
|
+
return this.props.actions.filter(x => x.position === 'left');
|
|
2708
3251
|
}
|
|
2709
3252
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolbarComponent, deps: [{ token: i2.NavController }, { token: IconService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2710
3253
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ToolbarComponent, isStandalone: true, selector: "val-toolbar", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
|
|
2711
3254
|
<ion-toolbar [color]="props.color" [class.background]="props.color === 'background'">
|
|
2712
3255
|
<ng-container *ngIf="props.withBack">
|
|
2713
3256
|
<ion-buttons class="left-buttons" slot="start" *ngIf="props.withBack">
|
|
2714
|
-
<ion-button fill="clear" (click)="goBack()" [color]="props.textColor">
|
|
3257
|
+
<ion-button fill="clear" (click)="goBack()" [color]="props.textColor" style="margin-left: 8px;">
|
|
2715
3258
|
<ion-icon name="chevron-back-outline" [slot]="props.backText ? 'start' : 'icon-only'"></ion-icon>
|
|
2716
3259
|
<ion-text *ngIf="props.backText">{{ props.backText }}</ion-text>
|
|
2717
3260
|
</ion-button>
|
|
@@ -2783,7 +3326,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2783
3326
|
<ion-toolbar [color]="props.color" [class.background]="props.color === 'background'">
|
|
2784
3327
|
<ng-container *ngIf="props.withBack">
|
|
2785
3328
|
<ion-buttons class="left-buttons" slot="start" *ngIf="props.withBack">
|
|
2786
|
-
<ion-button fill="clear" (click)="goBack()" [color]="props.textColor">
|
|
3329
|
+
<ion-button fill="clear" (click)="goBack()" [color]="props.textColor" style="margin-left: 8px;">
|
|
2787
3330
|
<ion-icon name="chevron-back-outline" [slot]="props.backText ? 'start' : 'icon-only'"></ion-icon>
|
|
2788
3331
|
<ion-text *ngIf="props.backText">{{ props.backText }}</ion-text>
|
|
2789
3332
|
</ion-button>
|
|
@@ -2843,11 +3386,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2843
3386
|
type: Output
|
|
2844
3387
|
}] } });
|
|
2845
3388
|
|
|
3389
|
+
/**
|
|
3390
|
+
* FooterComponent
|
|
3391
|
+
*
|
|
3392
|
+
* Componente de pie de página reutilizable para aplicaciones Ionic/Angular.
|
|
3393
|
+
* Permite mostrar una barra de herramientas (toolbar) y contenido adicional.
|
|
3394
|
+
*
|
|
3395
|
+
* @example
|
|
3396
|
+
* <val-footer [props]="footerProps" (onClick)="handleFooterAction($event)">
|
|
3397
|
+
* <div extra>Contenido extra</div>
|
|
3398
|
+
* </val-footer>
|
|
3399
|
+
*
|
|
3400
|
+
* @input props {FooterMetadata} - Metadatos del pie de página y su toolbar.
|
|
3401
|
+
* @output onClick - Emite el token de la acción clicada en la toolbar.
|
|
3402
|
+
*/
|
|
2846
3403
|
class FooterComponent {
|
|
2847
3404
|
constructor() {
|
|
3405
|
+
/**
|
|
3406
|
+
* Evento emitido al hacer click en una acción de la toolbar.
|
|
3407
|
+
*/
|
|
2848
3408
|
this.onClick = new EventEmitter();
|
|
2849
3409
|
}
|
|
2850
3410
|
ngOnInit() { }
|
|
3411
|
+
/**
|
|
3412
|
+
* Emite el token de la acción clicada en la toolbar.
|
|
3413
|
+
* @param token Token de la acción
|
|
3414
|
+
*/
|
|
2851
3415
|
clickHandler(token) {
|
|
2852
3416
|
this.onClick.emit(token);
|
|
2853
3417
|
}
|
|
@@ -2974,6 +3538,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2974
3538
|
type: Output
|
|
2975
3539
|
}] } });
|
|
2976
3540
|
|
|
3541
|
+
/**
|
|
3542
|
+
* Scrolls smoothly to the top of the element with the given id.
|
|
3543
|
+
* @param id The id of the element to scroll to
|
|
3544
|
+
*/
|
|
2977
3545
|
const goToTop = (id) => {
|
|
2978
3546
|
const element = document.getElementById(id);
|
|
2979
3547
|
if (element) {
|
|
@@ -2984,6 +3552,12 @@ const goToTop = (id) => {
|
|
|
2984
3552
|
});
|
|
2985
3553
|
}
|
|
2986
3554
|
};
|
|
3555
|
+
/**
|
|
3556
|
+
* Checks if the bottom of the given ElementRef is within the viewport.
|
|
3557
|
+
* Useful for determining if a form or element is fully visible.
|
|
3558
|
+
* @param elementRef The Angular ElementRef to check
|
|
3559
|
+
* @returns True if the element's bottom is at or above the window's bottom
|
|
3560
|
+
*/
|
|
2987
3561
|
const isAtEnd = (elementRef) => {
|
|
2988
3562
|
const formElement = elementRef.nativeElement;
|
|
2989
3563
|
const rect = formElement.getBoundingClientRect();
|
|
@@ -3248,11 +3822,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
3248
3822
|
type: Output
|
|
3249
3823
|
}] } });
|
|
3250
3824
|
|
|
3825
|
+
/**
|
|
3826
|
+
* HeaderComponent
|
|
3827
|
+
*
|
|
3828
|
+
* Componente de encabezado reutilizable para aplicaciones Ionic/Angular.
|
|
3829
|
+
* Permite mostrar una barra de herramientas (toolbar) configurable.
|
|
3830
|
+
*
|
|
3831
|
+
* @example
|
|
3832
|
+
* <val-header [props]="headerProps" (onClick)="handleHeaderAction($event)"></val-header>
|
|
3833
|
+
*
|
|
3834
|
+
* @input props {HeaderMetadata} - Metadatos del encabezado y su toolbar.
|
|
3835
|
+
* @output onClick - Emite el token de la acción clicada en la toolbar.
|
|
3836
|
+
*/
|
|
3251
3837
|
class HeaderComponent {
|
|
3252
3838
|
constructor() {
|
|
3839
|
+
/**
|
|
3840
|
+
* Evento emitido al hacer click en una acción de la toolbar.
|
|
3841
|
+
*/
|
|
3253
3842
|
this.onClick = new EventEmitter();
|
|
3254
3843
|
}
|
|
3255
3844
|
ngOnInit() { }
|
|
3845
|
+
/**
|
|
3846
|
+
* Emite el token de la acción clicada en la toolbar.
|
|
3847
|
+
* @param token Token de la acción
|
|
3848
|
+
*/
|
|
3256
3849
|
clickHandler(token) {
|
|
3257
3850
|
this.onClick.emit(token);
|
|
3258
3851
|
}
|
|
@@ -3276,20 +3869,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
3276
3869
|
type: Output
|
|
3277
3870
|
}] } });
|
|
3278
3871
|
|
|
3872
|
+
/**
|
|
3873
|
+
* ItemListComponent
|
|
3874
|
+
*
|
|
3875
|
+
* Componente de lista reutilizable para mostrar una colección de elementos con diferentes modos de visualización (texto, subtítulo, avatar, icono, ruta, acciones).
|
|
3876
|
+
* Permite acciones por elemento, indicadores de no leído, y personalización de estilos.
|
|
3877
|
+
*
|
|
3878
|
+
* @example
|
|
3879
|
+
* <val-item-list [props]="{ title: 'Usuarios', items: [{ text: 'Juan', mode: 'avatar', image: 'avatar.jpg' }] }" (onClick)="handleClick($event)"></val-item-list>
|
|
3880
|
+
*
|
|
3881
|
+
* @input props {ListMetadata} - Metadatos de la lista y sus elementos.
|
|
3882
|
+
* @output onClick - Emite el token del elemento clicado.
|
|
3883
|
+
* @output onActionClick - Emite el token de la acción clicada en un elemento.
|
|
3884
|
+
*/
|
|
3279
3885
|
class ItemListComponent {
|
|
3280
3886
|
constructor(icon) {
|
|
3281
3887
|
this.states = ComponentStates;
|
|
3282
3888
|
this.defaultColor = 'primary';
|
|
3889
|
+
/**
|
|
3890
|
+
* Evento emitido al hacer click en un elemento de la lista.
|
|
3891
|
+
*/
|
|
3283
3892
|
this.onClick = new EventEmitter();
|
|
3893
|
+
/**
|
|
3894
|
+
* Evento emitido al hacer click en una acción de un elemento.
|
|
3895
|
+
*/
|
|
3284
3896
|
this.onActionClick = new EventEmitter();
|
|
3285
3897
|
}
|
|
3286
3898
|
ngOnInit() { }
|
|
3899
|
+
/**
|
|
3900
|
+
* Emite el token del elemento clicado.
|
|
3901
|
+
* @param token Token del elemento
|
|
3902
|
+
*/
|
|
3287
3903
|
clickHandler(token) {
|
|
3288
3904
|
this.onClick.emit(token);
|
|
3289
3905
|
}
|
|
3906
|
+
/**
|
|
3907
|
+
* Emite el token de la acción clicada.
|
|
3908
|
+
* @param token Token de la acción
|
|
3909
|
+
*/
|
|
3290
3910
|
onActionClickHandler(token) {
|
|
3291
3911
|
this.onActionClick.emit(token);
|
|
3292
3912
|
}
|
|
3913
|
+
/**
|
|
3914
|
+
* Devuelve el color de borde de la lista.
|
|
3915
|
+
*/
|
|
3293
3916
|
color() {
|
|
3294
3917
|
return resolveColor(this.props.color || this.defaultColor);
|
|
3295
3918
|
}
|
|
@@ -3650,11 +4273,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
3650
4273
|
type: Output
|
|
3651
4274
|
}] } });
|
|
3652
4275
|
|
|
4276
|
+
/**
|
|
4277
|
+
* NoContentComponent
|
|
4278
|
+
*
|
|
4279
|
+
* Componente para mostrar una pantalla de "sin contenido" con imagen y banners opcionales arriba y abajo.
|
|
4280
|
+
* Útil para estados vacíos, errores o mensajes informativos.
|
|
4281
|
+
*
|
|
4282
|
+
* @example
|
|
4283
|
+
* <val-no-content [props]="{ image: { src: 'empty.svg' }, bottomContent: { ... } }"></val-no-content>
|
|
4284
|
+
*
|
|
4285
|
+
* @input props {NoContentMetadata} - Metadatos de la imagen y banners a mostrar.
|
|
4286
|
+
* @output onClick - Emite el token de acción de los banners si corresponde.
|
|
4287
|
+
*/
|
|
3653
4288
|
class NoContentComponent {
|
|
3654
4289
|
constructor() {
|
|
4290
|
+
/**
|
|
4291
|
+
* Evento emitido al hacer click en un banner.
|
|
4292
|
+
*/
|
|
3655
4293
|
this.onClick = new EventEmitter();
|
|
3656
4294
|
}
|
|
3657
4295
|
ngOnInit() { }
|
|
4296
|
+
/**
|
|
4297
|
+
* Emite el token de acción del banner clicado.
|
|
4298
|
+
* @param token Token de la acción
|
|
4299
|
+
*/
|
|
3658
4300
|
onClickHandler(token) {
|
|
3659
4301
|
this.onClick.emit(token);
|
|
3660
4302
|
}
|
|
@@ -3690,6 +4332,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
3690
4332
|
type: Output
|
|
3691
4333
|
}] } });
|
|
3692
4334
|
|
|
4335
|
+
/**
|
|
4336
|
+
* Enumera los posibles movimientos de navegación en el wizard.
|
|
4337
|
+
*/
|
|
3693
4338
|
var MOTION;
|
|
3694
4339
|
(function (MOTION) {
|
|
3695
4340
|
MOTION[MOTION["BACKWARD"] = 0] = "BACKWARD";
|
|
@@ -3797,18 +4442,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
3797
4442
|
type: Output
|
|
3798
4443
|
}] } });
|
|
3799
4444
|
|
|
4445
|
+
/**
|
|
4446
|
+
* WizardComponent
|
|
4447
|
+
*
|
|
4448
|
+
* Componente para flujos de pasos (wizard) reutilizable, con soporte para estados, errores y navegación entre pasos.
|
|
4449
|
+
* Permite mostrar contenido personalizado por paso y manejar acciones de navegación.
|
|
4450
|
+
*
|
|
4451
|
+
* @example
|
|
4452
|
+
* <val-wizard [props]="wizardProps" (onClick)="handleWizardNav($event)">
|
|
4453
|
+
* <div step>Contenido del paso</div>
|
|
4454
|
+
* </val-wizard>
|
|
4455
|
+
*
|
|
4456
|
+
* @input props {WizardMetadata} - Metadatos del wizard, pasos y estado.
|
|
4457
|
+
* @output onClick - Emite el paso actual y la acción de navegación (MOTION).
|
|
4458
|
+
*/
|
|
3800
4459
|
class WizardComponent {
|
|
3801
4460
|
constructor() {
|
|
4461
|
+
/**
|
|
4462
|
+
* Evento emitido al hacer click en una acción de navegación.
|
|
4463
|
+
*/
|
|
3802
4464
|
this.onClick = new EventEmitter();
|
|
3803
4465
|
this.wrapperId = 'wizard-wrapper';
|
|
3804
4466
|
}
|
|
3805
4467
|
ngOnInit() { }
|
|
4468
|
+
/**
|
|
4469
|
+
* Cambia el estado del wizard a 'WORKING' y deshabilita los botones del paso actual.
|
|
4470
|
+
*/
|
|
3806
4471
|
working() {
|
|
3807
4472
|
this.props.state = ComponentStates.WORKING;
|
|
3808
4473
|
this.Current.buttons.map(x => {
|
|
3809
4474
|
x.state = ComponentStates.DISABLED;
|
|
3810
4475
|
});
|
|
3811
4476
|
}
|
|
4477
|
+
/**
|
|
4478
|
+
* Cambia el estado del wizard a 'ENABLED' y habilita los botones del paso actual.
|
|
4479
|
+
* No realiza cambios si ya está en estado 'ENABLED'.
|
|
4480
|
+
*/
|
|
3812
4481
|
done() {
|
|
3813
4482
|
if (this.props.state === ComponentStates.ENABLED) {
|
|
3814
4483
|
return;
|
|
@@ -3818,9 +4487,16 @@ class WizardComponent {
|
|
|
3818
4487
|
x.state = ComponentStates.ENABLED;
|
|
3819
4488
|
});
|
|
3820
4489
|
}
|
|
4490
|
+
/**
|
|
4491
|
+
* Devuelve el paso actual del wizard.
|
|
4492
|
+
*/
|
|
3821
4493
|
get Current() {
|
|
3822
4494
|
return this.props.steps[this.props.current];
|
|
3823
4495
|
}
|
|
4496
|
+
/**
|
|
4497
|
+
* Cambia el paso actual del wizard y hace scroll al inicio.
|
|
4498
|
+
* @param newStep Nuevo índice de paso
|
|
4499
|
+
*/
|
|
3824
4500
|
setCurrent(newStep) {
|
|
3825
4501
|
if (newStep === this.props.current) {
|
|
3826
4502
|
return;
|
|
@@ -3828,6 +4504,10 @@ class WizardComponent {
|
|
|
3828
4504
|
this.props.current = newStep;
|
|
3829
4505
|
goToTop(this.wrapperId);
|
|
3830
4506
|
}
|
|
4507
|
+
/**
|
|
4508
|
+
* Establece el estado de error y muestra el mensaje de error en el banner inferior.
|
|
4509
|
+
* @param error Mensaje de error a mostrar
|
|
4510
|
+
*/
|
|
3831
4511
|
setError(error) {
|
|
3832
4512
|
if (this.props.state === ComponentStates.ERROR) {
|
|
3833
4513
|
return;
|
|
@@ -3836,10 +4516,18 @@ class WizardComponent {
|
|
|
3836
4516
|
this.props.state = ComponentStates.ERROR;
|
|
3837
4517
|
goToTop(this.wrapperId);
|
|
3838
4518
|
}
|
|
4519
|
+
/**
|
|
4520
|
+
* Reinicia el estado de error y vuelve a estado 'ENABLED'.
|
|
4521
|
+
*/
|
|
3839
4522
|
reset() {
|
|
3840
4523
|
this.props.error.titles.bottomContent.content.bellowTitle.content = '';
|
|
3841
4524
|
this.done();
|
|
3842
4525
|
}
|
|
4526
|
+
/**
|
|
4527
|
+
* Maneja el click en el banner de error y emite el evento de navegación.
|
|
4528
|
+
* Si el token contiene 'retry', reinicia el wizard.
|
|
4529
|
+
* @param token Token de la acción clicada
|
|
4530
|
+
*/
|
|
3843
4531
|
clickHandler(token) {
|
|
3844
4532
|
if (!token) {
|
|
3845
4533
|
return;
|
|
@@ -3922,25 +4610,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
3922
4610
|
`, styles: [".layout-container{margin:0 auto;padding:0;width:100%;box-sizing:border-box;margin-bottom:1rem;padding-top:.5rem}@media (max-width: 768px){.layout-container{max-width:100%}}@media (min-width: 768px){.layout-container{margin:0 auto;max-width:33.75rem;margin-bottom:1.5rem}}@media (min-width: 1200px){.layout-container{margin:0 auto;max-width:45rem}}\n"] }]
|
|
3923
4611
|
}] });
|
|
3924
4612
|
|
|
4613
|
+
const LANG = 'LANG';
|
|
4614
|
+
const THEME = 'THEME';
|
|
4615
|
+
|
|
4616
|
+
/**
|
|
4617
|
+
* Utility service for interacting with browser localStorage in a type-safe way.
|
|
4618
|
+
* Provides static methods for setting, getting, removing, and clearing items.
|
|
4619
|
+
*/
|
|
3925
4620
|
class LocalStorageService {
|
|
4621
|
+
/**
|
|
4622
|
+
* Stores a value in localStorage under the given reference key.
|
|
4623
|
+
* @param reference The key to store the value under
|
|
4624
|
+
* @param value The value to store
|
|
4625
|
+
*/
|
|
3926
4626
|
static set(reference, value) {
|
|
3927
4627
|
localStorage.setItem(reference, JSON.stringify(value));
|
|
3928
4628
|
}
|
|
4629
|
+
/**
|
|
4630
|
+
* Retrieves a value from localStorage by key.
|
|
4631
|
+
* @param reference The key to retrieve
|
|
4632
|
+
* @returns The parsed value
|
|
4633
|
+
*/
|
|
3929
4634
|
static get(reference) {
|
|
3930
4635
|
const value = localStorage.getItem(reference);
|
|
3931
4636
|
return JSON.parse(value);
|
|
3932
4637
|
}
|
|
4638
|
+
/**
|
|
4639
|
+
* Removes an item from localStorage by key.
|
|
4640
|
+
* @param reference The key to remove
|
|
4641
|
+
*/
|
|
3933
4642
|
static remove(reference) {
|
|
3934
4643
|
localStorage.removeItem(reference);
|
|
3935
4644
|
}
|
|
4645
|
+
/**
|
|
4646
|
+
* Clears all items from localStorage.
|
|
4647
|
+
*/
|
|
3936
4648
|
static clear() {
|
|
3937
4649
|
localStorage.clear();
|
|
3938
4650
|
}
|
|
3939
4651
|
}
|
|
3940
4652
|
|
|
3941
|
-
|
|
3942
|
-
|
|
3943
|
-
|
|
4653
|
+
/**
|
|
4654
|
+
* Service for managing application themes (light, dark, auto).
|
|
4655
|
+
* Handles user preferences, system theme detection, and theme toggling.
|
|
4656
|
+
* Uses localStorage to persist the selected theme.
|
|
4657
|
+
*/
|
|
3944
4658
|
var ThemeOption;
|
|
3945
4659
|
(function (ThemeOption) {
|
|
3946
4660
|
ThemeOption["LIGHT"] = "light";
|
|
@@ -3949,12 +4663,33 @@ var ThemeOption;
|
|
|
3949
4663
|
})(ThemeOption || (ThemeOption = {}));
|
|
3950
4664
|
class ThemeService {
|
|
3951
4665
|
constructor() {
|
|
4666
|
+
/**
|
|
4667
|
+
* Indicates if the light theme is active.
|
|
4668
|
+
*/
|
|
3952
4669
|
this.lightToggle = false;
|
|
4670
|
+
/**
|
|
4671
|
+
* Indicates if the dark theme is active.
|
|
4672
|
+
*/
|
|
3953
4673
|
this.darkToggle = false;
|
|
4674
|
+
/**
|
|
4675
|
+
* Indicates if the auto theme is active.
|
|
4676
|
+
*/
|
|
3954
4677
|
this.autoToggle = false;
|
|
4678
|
+
/**
|
|
4679
|
+
* The current selected theme option.
|
|
4680
|
+
*/
|
|
3955
4681
|
this.currentOption = ThemeOption.AUTO;
|
|
4682
|
+
/**
|
|
4683
|
+
* Enum with all available theme options.
|
|
4684
|
+
*/
|
|
3956
4685
|
this.themeOptions = ThemeOption;
|
|
4686
|
+
/**
|
|
4687
|
+
* Whether the system prefers dark mode.
|
|
4688
|
+
*/
|
|
3957
4689
|
this.prefersDark = false;
|
|
4690
|
+
/**
|
|
4691
|
+
* The default theme option.
|
|
4692
|
+
*/
|
|
3958
4693
|
this.default = ThemeOption.AUTO;
|
|
3959
4694
|
const current = LocalStorageService.get(THEME);
|
|
3960
4695
|
console.log('💡 ThemeConfig current::: ', current);
|
|
@@ -3989,20 +4724,38 @@ class ThemeService {
|
|
|
3989
4724
|
this.toggleTheme(ThemeOption.LIGHT, true);
|
|
3990
4725
|
this.toggleTheme(ThemeOption.DARK, false);
|
|
3991
4726
|
}
|
|
4727
|
+
/**
|
|
4728
|
+
* Returns true if the system prefers dark mode.
|
|
4729
|
+
*/
|
|
3992
4730
|
get IsDark() {
|
|
3993
4731
|
return this.prefersDark;
|
|
3994
4732
|
}
|
|
4733
|
+
/**
|
|
4734
|
+
* Gets the current theme option.
|
|
4735
|
+
*/
|
|
3995
4736
|
get Theme() {
|
|
3996
4737
|
return this.theme.value;
|
|
3997
4738
|
}
|
|
4739
|
+
/**
|
|
4740
|
+
* Sets the current theme option and persists it.
|
|
4741
|
+
*/
|
|
3998
4742
|
set Theme(theme) {
|
|
3999
4743
|
this.theme.next(theme);
|
|
4000
4744
|
LocalStorageService.set(THEME, theme);
|
|
4001
4745
|
}
|
|
4746
|
+
/**
|
|
4747
|
+
* Toggles a theme class on the document body.
|
|
4748
|
+
* @param name The theme name
|
|
4749
|
+
* @param shouldAdd Whether to add or remove the class
|
|
4750
|
+
*/
|
|
4002
4751
|
toggleTheme(name, shouldAdd) {
|
|
4003
4752
|
console.log('toggleTheme::: ', name, shouldAdd);
|
|
4004
4753
|
document.body.classList.toggle(name, shouldAdd);
|
|
4005
4754
|
}
|
|
4755
|
+
/**
|
|
4756
|
+
* Sets the user theme preference and updates toggles and theme classes.
|
|
4757
|
+
* @param option The selected theme option
|
|
4758
|
+
*/
|
|
4006
4759
|
toggleUserPreference(option) {
|
|
4007
4760
|
this.currentOption = option;
|
|
4008
4761
|
this.Theme = option;
|
|
@@ -4199,10 +4952,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
4199
4952
|
args: [ValtechConfigService]
|
|
4200
4953
|
}] }] });
|
|
4201
4954
|
|
|
4955
|
+
/**
|
|
4956
|
+
* Service for displaying toast notifications using Ionic's ToastController.
|
|
4957
|
+
* Provides methods to show and present toasts with custom options.
|
|
4958
|
+
*/
|
|
4202
4959
|
class ToastService {
|
|
4203
4960
|
constructor(toastController) {
|
|
4204
4961
|
this.toastController = toastController;
|
|
4205
4962
|
}
|
|
4963
|
+
/**
|
|
4964
|
+
* Presents a toast notification with the given options.
|
|
4965
|
+
* @param request Toast options (message, duration, position, color, etc.)
|
|
4966
|
+
*/
|
|
4206
4967
|
async presentToast(request) {
|
|
4207
4968
|
const toast = await this.toastController.create({
|
|
4208
4969
|
message: request.message,
|
|
@@ -4212,12 +4973,16 @@ class ToastService {
|
|
|
4212
4973
|
});
|
|
4213
4974
|
await toast.present();
|
|
4214
4975
|
}
|
|
4976
|
+
/**
|
|
4977
|
+
* Shows a toast notification and logs the result.
|
|
4978
|
+
* @param request Toast options (message, duration, position, color, etc.)
|
|
4979
|
+
*/
|
|
4215
4980
|
show(request) {
|
|
4216
4981
|
this.presentToast(request)
|
|
4217
4982
|
.then(() => {
|
|
4218
4983
|
console.info('Toast created');
|
|
4219
4984
|
})
|
|
4220
|
-
.catch(
|
|
4985
|
+
.catch(error => {
|
|
4221
4986
|
console.error(JSON.stringify(error));
|
|
4222
4987
|
});
|
|
4223
4988
|
}
|