valtech-components 2.0.1034 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/esm2022/lib/components/atoms/box/box.component.mjs +6 -8
  2. package/esm2022/lib/components/atoms/button/factory.mjs +24 -217
  3. package/esm2022/lib/components/atoms/divider/divider.component.mjs +2 -4
  4. package/esm2022/lib/components/atoms/href/href.component.mjs +1 -2
  5. package/esm2022/lib/components/atoms/image/image.component.mjs +36 -3
  6. package/esm2022/lib/components/molecules/action-card/action-card.component.mjs +4 -9
  7. package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +4 -4
  8. package/esm2022/lib/components/molecules/card/card.component.mjs +53 -10
  9. package/esm2022/lib/components/molecules/checkbox-radio-input/checkbox-radio-input.component.mjs +27 -36
  10. package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +44 -6
  11. package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +32 -7
  12. package/esm2022/lib/components/molecules/comment/comment.component.mjs +28 -12
  13. package/esm2022/lib/components/molecules/cta-card/cta-card.component.mjs +4 -9
  14. package/esm2022/lib/components/molecules/date-picker/date-picker.component.mjs +240 -0
  15. package/esm2022/lib/components/molecules/date-picker/date-picker.i18n.mjs +6 -0
  16. package/esm2022/lib/components/molecules/date-picker/types.mjs +2 -0
  17. package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +7 -7
  18. package/esm2022/lib/components/molecules/features-list/features-list.component.mjs +159 -71
  19. package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +7 -3
  20. package/esm2022/lib/components/molecules/hint/hint.component.mjs +30 -5
  21. package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +75 -19
  22. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +42 -9
  23. package/esm2022/lib/components/molecules/permission-selector/types.mjs +1 -1
  24. package/esm2022/lib/components/molecules/rating/rating.component.mjs +88 -12
  25. package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +15 -7
  26. package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +93 -7
  27. package/esm2022/lib/components/organisms/change-email-modal/change-email-modal.component.mjs +5 -5
  28. package/esm2022/lib/components/organisms/change-password-modal/change-password-modal.component.mjs +4 -4
  29. package/esm2022/lib/components/organisms/form/form.component.mjs +62 -20
  30. package/esm2022/lib/components/organisms/login/login.component.mjs +8 -8
  31. package/esm2022/lib/components/organisms/mfa-modal/mfa-modal.component.mjs +3 -3
  32. package/esm2022/lib/components/types.mjs +1 -1
  33. package/esm2022/lib/services/presets/default-presets.mjs +45 -0
  34. package/esm2022/lib/services/presets/index.mjs +3 -1
  35. package/esm2022/lib/services/presets/preset.service.mjs +17 -4
  36. package/esm2022/lib/services/requests/request-form-builder.service.mjs +8 -3
  37. package/esm2022/lib/shared/utils/ionic-color.mjs +36 -0
  38. package/esm2022/lib/version.mjs +2 -2
  39. package/esm2022/public-api.mjs +4 -8
  40. package/fesm2022/valtech-components.mjs +1381 -1027
  41. package/fesm2022/valtech-components.mjs.map +1 -1
  42. package/lib/components/atoms/box/box.component.d.ts +2 -5
  43. package/lib/components/atoms/button/factory.d.ts +15 -69
  44. package/lib/components/atoms/divider/divider.component.d.ts +1 -4
  45. package/lib/components/atoms/href/href.component.d.ts +2 -3
  46. package/lib/components/atoms/image/image.component.d.ts +5 -0
  47. package/lib/components/molecules/action-card/action-card.component.d.ts +1 -1
  48. package/lib/components/molecules/card/card.component.d.ts +2 -1
  49. package/lib/components/molecules/checkbox-radio-input/checkbox-radio-input.component.d.ts +2 -3
  50. package/lib/components/molecules/chip-group/chip-group.component.d.ts +5 -0
  51. package/lib/components/molecules/command-display/command-display.component.d.ts +4 -0
  52. package/lib/components/molecules/comment/comment.component.d.ts +3 -0
  53. package/lib/components/molecules/cta-card/cta-card.component.d.ts +0 -1
  54. package/lib/components/molecules/date-picker/date-picker.component.d.ts +50 -0
  55. package/lib/components/molecules/date-picker/date-picker.i18n.d.ts +3 -0
  56. package/lib/components/molecules/date-picker/types.d.ts +30 -0
  57. package/lib/components/molecules/hint/hint.component.d.ts +11 -1
  58. package/lib/components/molecules/pagination/pagination.component.d.ts +5 -0
  59. package/lib/components/molecules/password-input/password-input.component.d.ts +4 -2
  60. package/lib/components/molecules/permission-selector/types.d.ts +1 -0
  61. package/lib/components/molecules/rating/rating.component.d.ts +11 -0
  62. package/lib/components/molecules/text-input/text-input.component.d.ts +21 -0
  63. package/lib/components/organisms/form/form.component.d.ts +19 -0
  64. package/lib/components/types.d.ts +21 -1
  65. package/lib/services/presets/default-presets.d.ts +22 -0
  66. package/lib/services/presets/index.d.ts +1 -0
  67. package/lib/services/presets/preset.service.d.ts +4 -0
  68. package/lib/shared/utils/ionic-color.d.ts +20 -0
  69. package/lib/version.d.ts +1 -1
  70. package/package.json +3 -2
  71. package/public-api.d.ts +3 -7
  72. package/src/lib/components/styles/mixins.scss +16 -0
  73. package/esm2022/lib/components/molecules/content-card/content-card.component.mjs +0 -86
  74. package/esm2022/lib/components/molecules/content-card/types.mjs +0 -11
  75. package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +0 -68
  76. package/esm2022/lib/components/molecules/hour-input/hour-input.component.mjs +0 -28
  77. package/esm2022/lib/components/molecules/info-card/info-card.component.mjs +0 -126
  78. package/esm2022/lib/components/molecules/info-card/types.mjs +0 -11
  79. package/esm2022/lib/components/molecules/number-input/number-input.component.mjs +0 -34
  80. package/lib/components/molecules/content-card/content-card.component.d.ts +0 -26
  81. package/lib/components/molecules/content-card/types.d.ts +0 -30
  82. package/lib/components/molecules/email-input/email-input.component.d.ts +0 -34
  83. package/lib/components/molecules/hour-input/hour-input.component.d.ts +0 -15
  84. package/lib/components/molecules/info-card/info-card.component.d.ts +0 -37
  85. package/lib/components/molecules/info-card/types.d.ts +0 -44
  86. package/lib/components/molecules/number-input/number-input.component.d.ts +0 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valtech-components",
3
- "version": "2.0.1034",
3
+ "version": "4.0.0",
4
4
  "private": false,
5
5
  "bin": {
6
6
  "valtech-firebase-config": "./src/lib/services/firebase/scripts/generate-sw-config.js"
@@ -44,7 +44,8 @@
44
44
  "prismjs": "^1.30.0",
45
45
  "qr-code-styling": "^1.9.0",
46
46
  "swiper": "^11.2.8",
47
- "tslib": "^2.3.0"
47
+ "tslib": "^2.3.0",
48
+ "vanilla-calendar-pro": "^3.1.0"
48
49
  },
49
50
  "sideEffects": false,
50
51
  "module": "fesm2022/valtech-components.mjs",
package/public-api.d.ts CHANGED
@@ -65,13 +65,11 @@ export * from './lib/components/molecules/content-loader/content-loader.componen
65
65
  export * from './lib/components/molecules/content-loader/types';
66
66
  export * from './lib/components/molecules/date-input/date-input.component';
67
67
  export * from './lib/components/molecules/date-input/types';
68
- export * from './lib/components/molecules/email-input/email-input.component';
69
68
  export * from './lib/components/molecules/expandable-text/expandable-text.component';
70
69
  export * from './lib/components/molecules/expandable-text/types';
71
70
  export * from './lib/components/molecules/file-input/file-input.component';
72
71
  export * from './lib/components/molecules/file-input/types';
73
72
  export * from './lib/components/molecules/hint/hint.component';
74
- export * from './lib/components/molecules/hour-input/hour-input.component';
75
73
  export * from './lib/components/molecules/language-selector/language-selector.component';
76
74
  export * from './lib/components/molecules/language-selector/types';
77
75
  export * from './lib/components/molecules/layered-card/layered-card.component';
@@ -84,7 +82,6 @@ export * from './lib/components/molecules/notes-box/notes-box.component';
84
82
  export * from './lib/components/molecules/notes-box/types';
85
83
  export * from './lib/components/molecules/page-links/page-links.component';
86
84
  export * from './lib/components/molecules/page-links/types';
87
- export * from './lib/components/molecules/number-input/number-input.component';
88
85
  export * from './lib/components/molecules/number-from-to/number-from-to.component';
89
86
  export * from './lib/components/molecules/number-from-to/types';
90
87
  export * from './lib/components/molecules/password-input/password-input.component';
@@ -310,6 +307,8 @@ export * from './lib/components/organisms/member-detail-modal/types';
310
307
  export * from './lib/components/organisms/member-import-modal/member-import-modal.component';
311
308
  export * from './lib/components/organisms/field-list/field-list.component';
312
309
  export * from './lib/components/organisms/field-list/types';
310
+ export * from './lib/components/molecules/date-picker/date-picker.component';
311
+ export * from './lib/components/molecules/date-picker/types';
313
312
  export * from './lib/components/organisms/api-keys-modal/api-keys-modal.component';
314
313
  export * from './lib/components/organisms/api-key-create-modal/api-key-create-modal.component';
315
314
  export * from './lib/components/organisms/api-keys-view/api-keys-view.component';
@@ -416,6 +415,7 @@ export * from './lib/shared/pipes/process-links.pipe';
416
415
  export * from './lib/shared/utils/datetime';
417
416
  export * from './lib/shared/utils/dom';
418
417
  export * from './lib/shared/utils/form-defaults';
418
+ export * from './lib/shared/utils/ionic-color';
419
419
  export * from './lib/shared/utils/validators';
420
420
  export * from './lib/shared/utils/styles';
421
421
  export * from './lib/shared/utils/text';
@@ -427,12 +427,8 @@ export * from './lib/services/requests/request-form-builder.service';
427
427
  export * from './lib/services/requests/request-firestore.service';
428
428
  export * from './lib/components/organisms/article-strip/article-strip.component';
429
429
  export * from './lib/components/organisms/article-strip/types';
430
- export * from './lib/components/molecules/info-card/info-card.component';
431
- export * from './lib/components/molecules/info-card/types';
432
430
  export * from './lib/components/molecules/metric-card/metric-card.component';
433
431
  export * from './lib/components/molecules/metric-card/types';
434
- export * from './lib/components/molecules/content-card/content-card.component';
435
- export * from './lib/components/molecules/content-card/types';
436
432
  export * from './lib/components/organisms/auth-cta/auth-cta.component';
437
433
  export * from './lib/components/organisms/auth-cta/types';
438
434
  export * from './lib/components/molecules/ticket-card/ticket-card.component';
@@ -27,6 +27,22 @@
27
27
  box-shadow: 0 pxToRem(-10) pxToRem(16) addColorOpacity($color-default-shadow, 0.07);
28
28
  }
29
29
 
30
+ // Accessible focus indicator. Use on any custom-built interactive element
31
+ // (elements with role="button"/tabindex, native button/a that need a consistent
32
+ // ring) so keyboard users get a visible focus state. Only shows for keyboard
33
+ // focus (:focus-visible), never on mouse/touch.
34
+ @mixin focus-ring($offset: 2px, $color: var(--ion-color-primary, #7026df)) {
35
+ &:focus {
36
+ outline: none;
37
+ }
38
+
39
+ &:focus-visible {
40
+ outline: pxToRem(2) solid $color;
41
+ outline-offset: $offset;
42
+ border-radius: inherit;
43
+ }
44
+ }
45
+
30
46
  @mixin transform-translateY($value) {
31
47
  transform: translateY($value);
32
48
  -webkit-transform: translateY($value);
@@ -1,86 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, computed, input } from '@angular/core';
3
- import { CONTENT_CARD_DEFAULTS } from './types';
4
- import * as i0 from "@angular/core";
5
- const IONIC_COLORS = ['primary', 'secondary', 'tertiary', 'success', 'warning', 'danger', 'light', 'medium', 'dark'];
6
- function resolveColor(value) {
7
- if (!value)
8
- return undefined;
9
- return IONIC_COLORS.includes(value) ? `var(--ion-color-${value})` : value;
10
- }
11
- /**
12
- * val-content-card
13
- *
14
- * Generic container card with configurable padding, border radius, background
15
- * color and shadow. Accepts arbitrary content via ng-content. Use it to wrap
16
- * val-article, stats, or any other content that needs a card shell.
17
- *
18
- * @example
19
- * ```html
20
- * <val-content-card [props]="{ title: 'Summary', shadowed: true }">
21
- * <p>Any inner content here.</p>
22
- * </val-content-card>
23
- * ```
24
- */
25
- export class ContentCardComponent {
26
- constructor() {
27
- /** Component configuration */
28
- this.props = input({});
29
- /** Merged configuration with defaults */
30
- this.config = computed(() => ({
31
- ...CONTENT_CARD_DEFAULTS,
32
- ...this.props(),
33
- }));
34
- this.resolvedBg = computed(() => resolveColor(this.config().backgroundColor));
35
- this.resolvedColor = computed(() => resolveColor(this.config().color));
36
- }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ContentCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ContentCardComponent, isStandalone: true, selector: "val-content-card", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
39
- <div
40
- class="content-card"
41
- [class.content-card--bordered]="config().bordered"
42
- [class.content-card--shadowed]="config().shadowed"
43
- [class.content-card--center]="config().align === 'center'"
44
- [style.padding]="config().padding"
45
- [style.border-radius]="config().borderRadius"
46
- [style.background-color]="resolvedBg()"
47
- [style.color]="resolvedColor()"
48
- >
49
- @if (config().title) {
50
- <h3 class="content-card__title">{{ config().title }}</h3>
51
- }
52
-
53
- @if (config().description) {
54
- <p class="content-card__description">{{ config().description }}</p>
55
- }
56
-
57
- <ng-content></ng-content>
58
- </div>
59
- `, isInline: true, styles: [":host{display:block}.content-card{background:var(--ion-card-background, var(--ion-background-color))}.content-card--bordered{border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .1))}.content-card--shadowed{box-shadow:0 4px 16px #00000014}.content-card--center{text-align:center}.content-card__title{margin:0 0 .5rem;font-size:1.1rem;font-weight:700;color:inherit;line-height:1.3}.content-card__description{margin:0 0 1rem;font-size:.875rem;color:var(--ion-color-medium-shade);line-height:1.5}:host-context(body.dark) .content-card--bordered,:host-context(html.ion-palette-dark) .content-card--bordered,:host-context([data-theme=dark]) .content-card--bordered{border-color:#ffffff1f}:host-context(body.dark) .content-card--shadowed,:host-context(html.ion-palette-dark) .content-card--shadowed,:host-context([data-theme=dark]) .content-card--shadowed{box-shadow:0 4px 16px #0000004d}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
60
- }
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ContentCardComponent, decorators: [{
62
- type: Component,
63
- args: [{ selector: 'val-content-card', standalone: true, imports: [CommonModule], template: `
64
- <div
65
- class="content-card"
66
- [class.content-card--bordered]="config().bordered"
67
- [class.content-card--shadowed]="config().shadowed"
68
- [class.content-card--center]="config().align === 'center'"
69
- [style.padding]="config().padding"
70
- [style.border-radius]="config().borderRadius"
71
- [style.background-color]="resolvedBg()"
72
- [style.color]="resolvedColor()"
73
- >
74
- @if (config().title) {
75
- <h3 class="content-card__title">{{ config().title }}</h3>
76
- }
77
-
78
- @if (config().description) {
79
- <p class="content-card__description">{{ config().description }}</p>
80
- }
81
-
82
- <ng-content></ng-content>
83
- </div>
84
- `, styles: [":host{display:block}.content-card{background:var(--ion-card-background, var(--ion-background-color))}.content-card--bordered{border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .1))}.content-card--shadowed{box-shadow:0 4px 16px #00000014}.content-card--center{text-align:center}.content-card__title{margin:0 0 .5rem;font-size:1.1rem;font-weight:700;color:inherit;line-height:1.3}.content-card__description{margin:0 0 1rem;font-size:.875rem;color:var(--ion-color-medium-shade);line-height:1.5}:host-context(body.dark) .content-card--bordered,:host-context(html.ion-palette-dark) .content-card--bordered,:host-context([data-theme=dark]) .content-card--bordered{border-color:#ffffff1f}:host-context(body.dark) .content-card--shadowed,:host-context(html.ion-palette-dark) .content-card--shadowed,:host-context([data-theme=dark]) .content-card--shadowed{box-shadow:0 4px 16px #0000004d}\n"] }]
85
- }] });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvY29udGVudC1jYXJkL2NvbnRlbnQtY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQXVCLHFCQUFxQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUVyRSxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFckgsU0FBUyxZQUFZLENBQUMsS0FBeUI7SUFDN0MsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM3QixPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzVFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBNkJILE1BQU0sT0FBTyxvQkFBb0I7SUE1QmpDO1FBNkJFLDhCQUE4QjtRQUNyQixVQUFLLEdBQUcsS0FBSyxDQUErQixFQUFrQyxDQUFDLENBQUM7UUFFekYseUNBQXlDO1FBQ3pDLFdBQU0sR0FBRyxRQUFRLENBQ2YsR0FBRyxFQUFFLENBQ0gsQ0FBQztZQUNDLEdBQUcscUJBQXFCO1lBQ3hCLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRTtTQUNoQixDQUF1RCxDQUMzRCxDQUFDO1FBRUYsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDekUsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ25FOytHQWZZLG9CQUFvQjttR0FBcEIsb0JBQW9CLGdOQXhCckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCVCxvOEJBdEJTLFlBQVk7OzRGQXlCWCxvQkFBb0I7a0JBNUJoQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250ZW50Q2FyZE1ldGFkYXRhLCBDT05URU5UX0NBUkRfREVGQVVMVFMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgSU9OSUNfQ09MT1JTID0gWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICd0ZXJ0aWFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnLCAnZGFuZ2VyJywgJ2xpZ2h0JywgJ21lZGl1bScsICdkYXJrJ107XG5cbmZ1bmN0aW9uIHJlc29sdmVDb2xvcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIElPTklDX0NPTE9SUy5pbmNsdWRlcyh2YWx1ZSkgPyBgdmFyKC0taW9uLWNvbG9yLSR7dmFsdWV9KWAgOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiB2YWwtY29udGVudC1jYXJkXG4gKlxuICogR2VuZXJpYyBjb250YWluZXIgY2FyZCB3aXRoIGNvbmZpZ3VyYWJsZSBwYWRkaW5nLCBib3JkZXIgcmFkaXVzLCBiYWNrZ3JvdW5kXG4gKiBjb2xvciBhbmQgc2hhZG93LiBBY2NlcHRzIGFyYml0cmFyeSBjb250ZW50IHZpYSBuZy1jb250ZW50LiBVc2UgaXQgdG8gd3JhcFxuICogdmFsLWFydGljbGUsIHN0YXRzLCBvciBhbnkgb3RoZXIgY29udGVudCB0aGF0IG5lZWRzIGEgY2FyZCBzaGVsbC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHZhbC1jb250ZW50LWNhcmQgW3Byb3BzXT1cInsgdGl0bGU6ICdTdW1tYXJ5Jywgc2hhZG93ZWQ6IHRydWUgfVwiPlxuICogICA8cD5BbnkgaW5uZXIgY29udGVudCBoZXJlLjwvcD5cbiAqIDwvdmFsLWNvbnRlbnQtY2FyZD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtY29udGVudC1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb250ZW50LWNhcmRcIlxuICAgICAgW2NsYXNzLmNvbnRlbnQtY2FyZC0tYm9yZGVyZWRdPVwiY29uZmlnKCkuYm9yZGVyZWRcIlxuICAgICAgW2NsYXNzLmNvbnRlbnQtY2FyZC0tc2hhZG93ZWRdPVwiY29uZmlnKCkuc2hhZG93ZWRcIlxuICAgICAgW2NsYXNzLmNvbnRlbnQtY2FyZC0tY2VudGVyXT1cImNvbmZpZygpLmFsaWduID09PSAnY2VudGVyJ1wiXG4gICAgICBbc3R5bGUucGFkZGluZ109XCJjb25maWcoKS5wYWRkaW5nXCJcbiAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cImNvbmZpZygpLmJvcmRlclJhZGl1c1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJyZXNvbHZlZEJnKClcIlxuICAgICAgW3N0eWxlLmNvbG9yXT1cInJlc29sdmVkQ29sb3IoKVwiXG4gICAgPlxuICAgICAgQGlmIChjb25maWcoKS50aXRsZSkge1xuICAgICAgICA8aDMgY2xhc3M9XCJjb250ZW50LWNhcmRfX3RpdGxlXCI+e3sgY29uZmlnKCkudGl0bGUgfX08L2gzPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGNvbmZpZygpLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIDxwIGNsYXNzPVwiY29udGVudC1jYXJkX19kZXNjcmlwdGlvblwiPnt7IGNvbmZpZygpLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgfVxuXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50Q2FyZENvbXBvbmVudCB7XG4gIC8qKiBDb21wb25lbnQgY29uZmlndXJhdGlvbiAqL1xuICByZWFkb25seSBwcm9wcyA9IGlucHV0PFBhcnRpYWw8Q29udGVudENhcmRNZXRhZGF0YT4+KHt9IGFzIFBhcnRpYWw8Q29udGVudENhcmRNZXRhZGF0YT4pO1xuXG4gIC8qKiBNZXJnZWQgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHRzICovXG4gIGNvbmZpZyA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICAuLi5DT05URU5UX0NBUkRfREVGQVVMVFMsXG4gICAgICAgIC4uLnRoaXMucHJvcHMoKSxcbiAgICAgIH0pIGFzIENvbnRlbnRDYXJkTWV0YWRhdGEgJiB0eXBlb2YgQ09OVEVOVF9DQVJEX0RFRkFVTFRTXG4gICk7XG5cbiAgcmVzb2x2ZWRCZyA9IGNvbXB1dGVkKCgpID0+IHJlc29sdmVDb2xvcih0aGlzLmNvbmZpZygpLmJhY2tncm91bmRDb2xvcikpO1xuICByZXNvbHZlZENvbG9yID0gY29tcHV0ZWQoKCkgPT4gcmVzb2x2ZUNvbG9yKHRoaXMuY29uZmlnKCkuY29sb3IpKTtcbn1cbiJdfQ==
@@ -1,11 +0,0 @@
1
- /**
2
- * Default values for ContentCardMetadata.
3
- */
4
- export const CONTENT_CARD_DEFAULTS = {
5
- padding: '1.5rem',
6
- borderRadius: '20px',
7
- bordered: false,
8
- shadowed: true,
9
- align: 'start',
10
- };
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2NvbnRlbnQtY2FyZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQkE7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FFOUI7SUFDRixPQUFPLEVBQUUsUUFBUTtJQUNqQixZQUFZLEVBQUUsTUFBTTtJQUNwQixRQUFRLEVBQUUsS0FBSztJQUNmLFFBQVEsRUFBRSxJQUFJO0lBQ2QsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXRhZGF0YSBmb3IgdmFsLWNvbnRlbnQtY2FyZC5cbiAqXG4gKiBHZW5lcmljIGNvbnRhaW5lciBjYXJkIHdpdGggY29uZmlndXJhYmxlIHBhZGRpbmcsIGJvcmRlciByYWRpdXMsIGJhY2tncm91bmRcbiAqIGNvbG9yIGFuZCBzaGFkb3cuIFN1cHBvcnRzIG5nLWNvbnRlbnQgZm9yIGFyYml0cmFyeSBpbm5lciBjb250ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRDYXJkTWV0YWRhdGEge1xuICAvKiogT3B0aW9uYWwgY2FyZCB0aXRsZSByZW5kZXJlZCBhYm92ZSB0aGUgY29udGVudCAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIHJlbmRlcmVkIGJlbG93IHRoZSB0aXRsZSAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIEJhY2tncm91bmQgY29sb3Ig4oCUIElvbmljIGNvbG9yIG5hbWUgKHByaW1hcnnigKZkYXJrKSBvciBhbnkgQ1NTIGNvbG9yICovXG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgLyoqIFRleHQgY29sb3Ig4oCUIElvbmljIGNvbG9yIG5hbWUgb3IgYW55IENTUyBjb2xvciAqL1xuICBjb2xvcj86IHN0cmluZztcbiAgLyoqIENhcmQgaW5uZXIgcGFkZGluZy4gRGVmYXVsdDogJzEuNXJlbScgKi9cbiAgcGFkZGluZz86IHN0cmluZztcbiAgLyoqIENhcmQgYm9yZGVyIHJhZGl1cy4gRGVmYXVsdDogJzIwcHgnICovXG4gIGJvcmRlclJhZGl1cz86IHN0cmluZztcbiAgLyoqIFNob3cgYm9yZGVyLiBEZWZhdWx0OiBmYWxzZSAqL1xuICBib3JkZXJlZD86IGJvb2xlYW47XG4gIC8qKiBTaG93IGJveCBzaGFkb3cuIERlZmF1bHQ6IHRydWUgKi9cbiAgc2hhZG93ZWQ/OiBib29sZWFuO1xuICAvKiogVGV4dCBhbGlnbm1lbnQuIERlZmF1bHQ6ICdzdGFydCcgKi9cbiAgYWxpZ24/OiAnc3RhcnQnIHwgJ2NlbnRlcic7XG59XG5cbi8qKlxuICogRGVmYXVsdCB2YWx1ZXMgZm9yIENvbnRlbnRDYXJkTWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBDT05URU5UX0NBUkRfREVGQVVMVFM6IFJlcXVpcmVkPFxuICBQaWNrPENvbnRlbnRDYXJkTWV0YWRhdGEsICdwYWRkaW5nJyB8ICdib3JkZXJSYWRpdXMnIHwgJ2JvcmRlcmVkJyB8ICdzaGFkb3dlZCcgfCAnYWxpZ24nPlxuPiA9IHtcbiAgcGFkZGluZzogJzEuNXJlbScsXG4gIGJvcmRlclJhZGl1czogJzIwcHgnLFxuICBib3JkZXJlZDogZmFsc2UsXG4gIHNoYWRvd2VkOiB0cnVlLFxuICBhbGlnbjogJ3N0YXJ0Jyxcbn07XG4iXX0=
@@ -1,68 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, inject, Input } from '@angular/core';
3
- import { ReactiveFormsModule } from '@angular/forms';
4
- import { IonInput } from '@ionic/angular/standalone';
5
- import { PresetService } from '../../../services/presets';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/forms";
8
- /**
9
- * val-email-input
10
- *
11
- * An email input field integrated with Angular forms.
12
- * Supports presets for reusable configurations.
13
- *
14
- * @example With preset (recommended):
15
- * <val-email-input preset="form-field" [props]="{ control: myControl, placeholder: 'Email' }"></val-email-input>
16
- *
17
- * @example Static (backwards compatible):
18
- * <val-email-input [props]="{ control: myControl, placeholder: 'Enter your email' }"></val-email-input>
19
- *
20
- * @input preset: string - Name of preset to apply (e.g., 'form-field')
21
- * @input props: InputMetadata - Configuration for the input (overrides preset values)
22
- */
23
- export class EmailInputComponent {
24
- constructor() {
25
- this.presets = inject(PresetService);
26
- /**
27
- * Input configuration object. Values here override preset values.
28
- * @type {InputMetadata}
29
- * @property control - The Angular FormControl for the input.
30
- * @property placeholder - The placeholder text.
31
- */
32
- this.props = {};
33
- /**
34
- * Resolved props after merging preset + explicit props.
35
- */
36
- this.resolvedProps = {};
37
- }
38
- ngOnInit() {
39
- this.resolveProps();
40
- }
41
- ngOnChanges(changes) {
42
- if (changes['preset'] || changes['props']) {
43
- this.resolveProps();
44
- }
45
- }
46
- /**
47
- * Merge preset configuration with explicit props.
48
- * Explicit props take precedence over preset values.
49
- */
50
- resolveProps() {
51
- const presetProps = this.preset ? this.presets.get('emailInput', this.preset) : {};
52
- this.resolvedProps = {
53
- ...presetProps,
54
- ...this.props,
55
- };
56
- }
57
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmailInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
58
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EmailInputComponent, isStandalone: true, selector: "val-email-input", inputs: { preset: "preset", props: "props" }, usesOnChanges: true, ngImport: i0, template: ` <ion-input [formControl]="resolvedProps.control" type="email" [placeholder]="resolvedProps.placeholder"></ion-input> `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.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"] }] }); }
59
- }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmailInputComponent, decorators: [{
61
- type: Component,
62
- args: [{ selector: 'val-email-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="resolvedProps.control" type="email" [placeholder]="resolvedProps.placeholder"></ion-input> ` }]
63
- }], propDecorators: { preset: [{
64
- type: Input
65
- }], props: [{
66
- type: Input
67
- }] } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9lbWFpbC1pbnB1dC9lbWFpbC1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBVTFEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQXRCaEM7UUF1QlUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQVd4Qzs7Ozs7V0FLRztRQUNNLFVBQUssR0FBMkIsRUFBRSxDQUFDO1FBRTVDOztXQUVHO1FBQ0gsa0JBQWEsR0FBa0IsRUFBbUIsQ0FBQztLQXdCcEQ7SUF0QkMsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQTRCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUUvRyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLEdBQUcsV0FBVztZQUNkLEdBQUcsSUFBSSxDQUFDLEtBQUs7U0FDRyxDQUFDO0lBQ3JCLENBQUM7K0dBOUNVLG1CQUFtQjttR0FBbkIsbUJBQW1CLDhJQWxCcEIsd0hBQXdILHlFQUR4SCxZQUFZLDhCQUFFLG1CQUFtQiwwVEFBRSxRQUFROzs0RkFtQjFDLG1CQUFtQjtrQkF0Qi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxZQUM1Qyx3SEFBd0g7OEJBNEJ6SCxNQUFNO3NCQUFkLEtBQUs7Z0JBUUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJb25JbnB1dCB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ByZXNldHMnO1xuaW1wb3J0IHsgSW5wdXRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWVtYWlsLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgSW9uSW5wdXRdLFxuICB0ZW1wbGF0ZTogYCA8aW9uLWlucHV0IFtmb3JtQ29udHJvbF09XCJyZXNvbHZlZFByb3BzLmNvbnRyb2xcIiB0eXBlPVwiZW1haWxcIiBbcGxhY2Vob2xkZXJdPVwicmVzb2x2ZWRQcm9wcy5wbGFjZWhvbGRlclwiPjwvaW9uLWlucHV0PiBgLFxuICBzdHlsZVVybHM6IFsnLi9lbWFpbC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLWVtYWlsLWlucHV0XG4gKlxuICogQW4gZW1haWwgaW5wdXQgZmllbGQgaW50ZWdyYXRlZCB3aXRoIEFuZ3VsYXIgZm9ybXMuXG4gKiBTdXBwb3J0cyBwcmVzZXRzIGZvciByZXVzYWJsZSBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHByZXNldCAocmVjb21tZW5kZWQpOlxuICogPHZhbC1lbWFpbC1pbnB1dCBwcmVzZXQ9XCJmb3JtLWZpZWxkXCIgW3Byb3BzXT1cInsgY29udHJvbDogbXlDb250cm9sLCBwbGFjZWhvbGRlcjogJ0VtYWlsJyB9XCI+PC92YWwtZW1haWwtaW5wdXQ+XG4gKlxuICogQGV4YW1wbGUgU3RhdGljIChiYWNrd2FyZHMgY29tcGF0aWJsZSk6XG4gKiA8dmFsLWVtYWlsLWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IG15Q29udHJvbCwgcGxhY2Vob2xkZXI6ICdFbnRlciB5b3VyIGVtYWlsJyB9XCI+PC92YWwtZW1haWwtaW5wdXQ+XG4gKlxuICogQGlucHV0IHByZXNldDogc3RyaW5nIC0gTmFtZSBvZiBwcmVzZXQgdG8gYXBwbHkgKGUuZy4sICdmb3JtLWZpZWxkJylcbiAqIEBpbnB1dCBwcm9wczogSW5wdXRNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbnB1dCAob3ZlcnJpZGVzIHByZXNldCB2YWx1ZXMpXG4gKi9cbmV4cG9ydCBjbGFzcyBFbWFpbElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHByZXNldHMgPSBpbmplY3QoUHJlc2V0U2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFByZXNldCBuYW1lIHRvIGFwcGx5LiBQcmVzZXRzIGRlZmluZSByZXVzYWJsZSBpbnB1dCBjb25maWd1cmF0aW9uc1xuICAgKiB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGF0IGFwcCBsZXZlbCB2aWEgcHJvdmlkZVZhbHRlY2hQcmVzZXRzKCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIDx2YWwtZW1haWwtaW5wdXQgcHJlc2V0PVwiZm9ybS1maWVsZFwiIFtwcm9wc109XCJ7IGNvbnRyb2w6IGN0cmwgfVwiPjwvdmFsLWVtYWlsLWlucHV0PlxuICAgKi9cbiAgQElucHV0KCkgcHJlc2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBjb25maWd1cmF0aW9uIG9iamVjdC4gVmFsdWVzIGhlcmUgb3ZlcnJpZGUgcHJlc2V0IHZhbHVlcy5cbiAgICogQHR5cGUge0lucHV0TWV0YWRhdGF9XG4gICAqIEBwcm9wZXJ0eSBjb250cm9sIC0gVGhlIEFuZ3VsYXIgRm9ybUNvbnRyb2wgZm9yIHRoZSBpbnB1dC5cbiAgICogQHByb3BlcnR5IHBsYWNlaG9sZGVyIC0gVGhlIHBsYWNlaG9sZGVyIHRleHQuXG4gICAqL1xuICBASW5wdXQoKSBwcm9wczogUGFydGlhbDxJbnB1dE1ldGFkYXRhPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlZCBwcm9wcyBhZnRlciBtZXJnaW5nIHByZXNldCArIGV4cGxpY2l0IHByb3BzLlxuICAgKi9cbiAgcmVzb2x2ZWRQcm9wczogSW5wdXRNZXRhZGF0YSA9IHt9IGFzIElucHV0TWV0YWRhdGE7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZXNvbHZlUHJvcHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1sncHJlc2V0J10gfHwgY2hhbmdlc1sncHJvcHMnXSkge1xuICAgICAgdGhpcy5yZXNvbHZlUHJvcHMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgcHJlc2V0IGNvbmZpZ3VyYXRpb24gd2l0aCBleHBsaWNpdCBwcm9wcy5cbiAgICogRXhwbGljaXQgcHJvcHMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgcHJlc2V0IHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZVByb3BzKCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXNldFByb3BzID0gdGhpcy5wcmVzZXQgPyAodGhpcy5wcmVzZXRzLmdldCgnZW1haWxJbnB1dCcsIHRoaXMucHJlc2V0KSBhcyBQYXJ0aWFsPElucHV0TWV0YWRhdGE+KSA6IHt9O1xuXG4gICAgdGhpcy5yZXNvbHZlZFByb3BzID0ge1xuICAgICAgLi4ucHJlc2V0UHJvcHMsXG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgIH0gYXMgSW5wdXRNZXRhZGF0YTtcbiAgfVxufVxuIl19
@@ -1,28 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { ReactiveFormsModule } from '@angular/forms';
3
- import { IonDatetime } from '@ionic/angular/standalone';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/forms";
6
- /**
7
- * val-hour-input
8
- *
9
- * A time picker input integrated with Angular forms, using Ionic's datetime component.
10
- *
11
- * @example
12
- * <val-hour-input [props]="{ control: myControl }"></val-hour-input>
13
- *
14
- * @input props: InputMetadata - Configuration for the time input (form control, etc.)
15
- */
16
- export class HourInputComponent {
17
- constructor() { }
18
- ngOnInit() { }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HourInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: HourInputComponent, isStandalone: true, selector: "val-hour-input", inputs: { props: "props" }, ngImport: i0, template: ` <ion-datetime [formControl]="props.control" presentation="time"></ion-datetime>`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonDatetime, selector: "ion-datetime", inputs: ["cancelText", "clearText", "color", "dayValues", "disabled", "doneText", "firstDayOfWeek", "formatOptions", "highlightedDates", "hourCycle", "hourValues", "isDateEnabled", "locale", "max", "min", "minuteValues", "mode", "monthValues", "multiple", "name", "preferWheel", "presentation", "readonly", "showAdjacentDays", "showClearButton", "showDefaultButtons", "showDefaultTimeLabel", "showDefaultTitle", "size", "titleSelectedDatesFormatter", "value", "yearValues"] }] }); }
21
- }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HourInputComponent, decorators: [{
23
- type: Component,
24
- args: [{ selector: 'val-hour-input', standalone: true, imports: [ReactiveFormsModule, IonDatetime], template: ` <ion-datetime [formControl]="props.control" presentation="time"></ion-datetime>` }]
25
- }], ctorParameters: () => [], propDecorators: { props: [{
26
- type: Input
27
- }] } });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG91ci1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2hvdXItaW5wdXQvaG91ci1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFVeEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQVE3QixnQkFBZSxDQUFDO0lBRWhCLFFBQVEsS0FBSSxDQUFDOytHQVZGLGtCQUFrQjttR0FBbEIsa0JBQWtCLHNHQWJuQixrRkFBa0YseUVBRGxGLG1CQUFtQiwwVEFBRSxXQUFXOzs0RkFjL0Isa0JBQWtCO2tCQWpCOUIsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsWUFDakMsa0ZBQWtGO3dEQW1CbkYsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uRGF0ZXRpbWUgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IElucHV0TWV0YWRhdGEgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1ob3VyLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGUsIElvbkRhdGV0aW1lXSxcbiAgdGVtcGxhdGU6IGAgPGlvbi1kYXRldGltZSBbZm9ybUNvbnRyb2xdPVwicHJvcHMuY29udHJvbFwiIHByZXNlbnRhdGlvbj1cInRpbWVcIj48L2lvbi1kYXRldGltZT5gLFxuICBzdHlsZVVybHM6IFsnLi9ob3VyLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtaG91ci1pbnB1dFxuICpcbiAqIEEgdGltZSBwaWNrZXIgaW5wdXQgaW50ZWdyYXRlZCB3aXRoIEFuZ3VsYXIgZm9ybXMsIHVzaW5nIElvbmljJ3MgZGF0ZXRpbWUgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLWhvdXItaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogbXlDb250cm9sIH1cIj48L3ZhbC1ob3VyLWlucHV0PlxuICpcbiAqIEBpbnB1dCBwcm9wczogSW5wdXRNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB0aW1lIGlucHV0IChmb3JtIGNvbnRyb2wsIGV0Yy4pXG4gKi9cbmV4cG9ydCBjbGFzcyBIb3VySW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogSW5wdXQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqIEB0eXBlIHtJbnB1dE1ldGFkYXRhfVxuICAgKiBAcHJvcGVydHkgY29udHJvbCAtIFRoZSBBbmd1bGFyIEZvcm1Db250cm9sIGZvciB0aGUgdGltZSBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBJbnB1dE1ldGFkYXRhO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpIHt9XG59XG4iXX0=
@@ -1,126 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, computed, input } from '@angular/core';
3
- import { IonIcon } from '@ionic/angular/standalone';
4
- import { INFO_CARD_DEFAULTS } from './types';
5
- import * as i0 from "@angular/core";
6
- const IONIC_COLORS = ['primary', 'secondary', 'tertiary', 'success', 'warning', 'danger', 'light', 'medium', 'dark'];
7
- /**
8
- * val-info-card
9
- *
10
- * Card with icon + overtitle + title + subtitle on the left side, and a list
11
- * of key-value pairs (label: value) on the right side. Inspired by npm's
12
- * "Provenance" / metadata panel style.
13
- *
14
- * Two-column layout on desktop, stacked single-column on mobile.
15
- *
16
- * Presentational — pass already-resolved strings.
17
- *
18
- * @example
19
- * ```html
20
- * <val-info-card
21
- * [props]="{
22
- * icon: 'cube-outline',
23
- * title: 'valtech-components',
24
- * subtitle: 'v2.0.962',
25
- * keyValues: [
26
- * { label: 'License', value: 'MIT' },
27
- * { label: 'Downloads', value: '1.2M' }
28
- * ]
29
- * }"
30
- * />
31
- * ```
32
- */
33
- export class InfoCardComponent {
34
- constructor() {
35
- /** Component configuration */
36
- this.props = input({});
37
- /** Merged configuration with defaults */
38
- this.config = computed(() => ({
39
- ...INFO_CARD_DEFAULTS,
40
- ...this.props(),
41
- }));
42
- }
43
- getIconColor() {
44
- const color = this.config().iconColor;
45
- if (!color)
46
- return `var(--ion-color-primary)`;
47
- return IONIC_COLORS.includes(color) ? `var(--ion-color-${color})` : color;
48
- }
49
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InfoCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
50
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InfoCardComponent, isStandalone: true, selector: "val-info-card", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
51
- <div
52
- class="info-card"
53
- [class.info-card--bordered]="config().bordered"
54
- [class.info-card--shadowed]="config().shadowed"
55
- [style.padding]="config().padding"
56
- [style.border-radius]="config().borderRadius"
57
- >
58
- <div class="info-card__left">
59
- @if (config().icon) {
60
- <ion-icon class="info-card__icon" [name]="config().icon" [style.color]="getIconColor()"></ion-icon>
61
- }
62
-
63
- @if (config().overtitle) {
64
- <span class="info-card__overtitle">{{ config().overtitle }}</span>
65
- }
66
-
67
- <h3 class="info-card__title">{{ config().title }}</h3>
68
-
69
- @if (config().subtitle) {
70
- <p class="info-card__subtitle">{{ config().subtitle }}</p>
71
- }
72
- </div>
73
-
74
- @if (config().keyValues?.length) {
75
- <div class="info-card__right">
76
- @for (kv of config().keyValues; track $index) {
77
- <div class="info-card__kv">
78
- <span class="info-card__kv-label">{{ kv.label }}</span>
79
- <span class="info-card__kv-value">{{ kv.value }}</span>
80
- </div>
81
- }
82
- </div>
83
- }
84
- </div>
85
- `, isInline: true, styles: [":host{display:block}.info-card{display:flex;flex-direction:row;gap:2rem;background:var(--ion-card-background, var(--ion-background-color))}.info-card--bordered{border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .1))}.info-card--shadowed{box-shadow:0 2px 8px #00000014}.info-card__left{display:flex;flex-direction:column;gap:.35rem;flex:1 1 0;min-width:0}.info-card__icon{font-size:2rem;margin-bottom:.25rem}.info-card__overtitle{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--ion-color-medium)}.info-card__title{margin:0;font-size:1.25rem;font-weight:700;color:var(--ion-text-color);line-height:1.3}.info-card__subtitle{margin:0;font-size:.875rem;color:var(--ion-color-medium-shade)}.info-card__right{display:flex;flex-direction:column;gap:.6rem;flex:0 0 auto;min-width:160px;max-width:260px}.info-card__kv{display:flex;flex-direction:column;gap:.1rem}.info-card__kv-label{font-size:.75rem;color:var(--ion-color-medium)}.info-card__kv-value{font-size:.9rem;font-weight:600;color:var(--ion-text-color);word-break:break-word}@media (max-width: 600px){.info-card{flex-direction:column;gap:1.25rem}.info-card__right{max-width:100%;flex-direction:row;flex-wrap:wrap;gap:.75rem 1.5rem}.info-card__kv{flex:0 0 auto}}:host-context(body.dark) .info-card--bordered,:host-context(html.ion-palette-dark) .info-card--bordered,:host-context([data-theme=dark]) .info-card--bordered{border-color:#ffffff1f}:host-context(body.dark) .info-card--shadowed,:host-context(html.ion-palette-dark) .info-card--shadowed,:host-context([data-theme=dark]) .info-card--shadowed{box-shadow:0 2px 8px #0000004d}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
86
- }
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InfoCardComponent, decorators: [{
88
- type: Component,
89
- args: [{ selector: 'val-info-card', standalone: true, imports: [CommonModule, IonIcon], template: `
90
- <div
91
- class="info-card"
92
- [class.info-card--bordered]="config().bordered"
93
- [class.info-card--shadowed]="config().shadowed"
94
- [style.padding]="config().padding"
95
- [style.border-radius]="config().borderRadius"
96
- >
97
- <div class="info-card__left">
98
- @if (config().icon) {
99
- <ion-icon class="info-card__icon" [name]="config().icon" [style.color]="getIconColor()"></ion-icon>
100
- }
101
-
102
- @if (config().overtitle) {
103
- <span class="info-card__overtitle">{{ config().overtitle }}</span>
104
- }
105
-
106
- <h3 class="info-card__title">{{ config().title }}</h3>
107
-
108
- @if (config().subtitle) {
109
- <p class="info-card__subtitle">{{ config().subtitle }}</p>
110
- }
111
- </div>
112
-
113
- @if (config().keyValues?.length) {
114
- <div class="info-card__right">
115
- @for (kv of config().keyValues; track $index) {
116
- <div class="info-card__kv">
117
- <span class="info-card__kv-label">{{ kv.label }}</span>
118
- <span class="info-card__kv-value">{{ kv.value }}</span>
119
- </div>
120
- }
121
- </div>
122
- }
123
- </div>
124
- `, styles: [":host{display:block}.info-card{display:flex;flex-direction:row;gap:2rem;background:var(--ion-card-background, var(--ion-background-color))}.info-card--bordered{border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .1))}.info-card--shadowed{box-shadow:0 2px 8px #00000014}.info-card__left{display:flex;flex-direction:column;gap:.35rem;flex:1 1 0;min-width:0}.info-card__icon{font-size:2rem;margin-bottom:.25rem}.info-card__overtitle{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--ion-color-medium)}.info-card__title{margin:0;font-size:1.25rem;font-weight:700;color:var(--ion-text-color);line-height:1.3}.info-card__subtitle{margin:0;font-size:.875rem;color:var(--ion-color-medium-shade)}.info-card__right{display:flex;flex-direction:column;gap:.6rem;flex:0 0 auto;min-width:160px;max-width:260px}.info-card__kv{display:flex;flex-direction:column;gap:.1rem}.info-card__kv-label{font-size:.75rem;color:var(--ion-color-medium)}.info-card__kv-value{font-size:.9rem;font-weight:600;color:var(--ion-text-color);word-break:break-word}@media (max-width: 600px){.info-card{flex-direction:column;gap:1.25rem}.info-card__right{max-width:100%;flex-direction:row;flex-wrap:wrap;gap:.75rem 1.5rem}.info-card__kv{flex:0 0 auto}}:host-context(body.dark) .info-card--bordered,:host-context(html.ion-palette-dark) .info-card--bordered,:host-context([data-theme=dark]) .info-card--bordered{border-color:#ffffff1f}:host-context(body.dark) .info-card--shadowed,:host-context(html.ion-palette-dark) .info-card--shadowed,:host-context([data-theme=dark]) .info-card--shadowed{box-shadow:0 2px 8px #0000004d}\n"] }]
125
- }] });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvaW5mby1jYXJkL2luZm8tY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFvQixrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFFL0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXJIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBMkNILE1BQU0sT0FBTyxpQkFBaUI7SUExQzlCO1FBMkNFLDhCQUE4QjtRQUNyQixVQUFLLEdBQUcsS0FBSyxDQUE0QixFQUErQixDQUFDLENBQUM7UUFFbkYseUNBQXlDO1FBQ3pDLFdBQU0sR0FBRyxRQUFRLENBQ2YsR0FBRyxFQUFFLENBQ0gsQ0FBQztZQUNDLEdBQUcsa0JBQWtCO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRTtTQUNoQixDQUFpRCxDQUNyRCxDQUFDO0tBT0g7SUFMQyxZQUFZO1FBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sMEJBQTBCLENBQUM7UUFDOUMsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM1RSxDQUFDOytHQWpCVSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw2TUF0Q2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DVCwycURBcENTLFlBQVksK0JBQUUsT0FBTzs7NEZBdUNwQixpQkFBaUI7a0JBMUM3QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgSW5mb0NhcmRNZXRhZGF0YSwgSU5GT19DQVJEX0RFRkFVTFRTIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IElPTklDX0NPTE9SUyA9IFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAndGVydGlhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlcicsICdsaWdodCcsICdtZWRpdW0nLCAnZGFyayddO1xuXG4vKipcbiAqIHZhbC1pbmZvLWNhcmRcbiAqXG4gKiBDYXJkIHdpdGggaWNvbiArIG92ZXJ0aXRsZSArIHRpdGxlICsgc3VidGl0bGUgb24gdGhlIGxlZnQgc2lkZSwgYW5kIGEgbGlzdFxuICogb2Yga2V5LXZhbHVlIHBhaXJzIChsYWJlbDogdmFsdWUpIG9uIHRoZSByaWdodCBzaWRlLiBJbnNwaXJlZCBieSBucG0nc1xuICogXCJQcm92ZW5hbmNlXCIgLyBtZXRhZGF0YSBwYW5lbCBzdHlsZS5cbiAqXG4gKiBUd28tY29sdW1uIGxheW91dCBvbiBkZXNrdG9wLCBzdGFja2VkIHNpbmdsZS1jb2x1bW4gb24gbW9iaWxlLlxuICpcbiAqIFByZXNlbnRhdGlvbmFsIOKAlCBwYXNzIGFscmVhZHktcmVzb2x2ZWQgc3RyaW5ncy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHZhbC1pbmZvLWNhcmRcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBpY29uOiAnY3ViZS1vdXRsaW5lJyxcbiAqICAgICB0aXRsZTogJ3ZhbHRlY2gtY29tcG9uZW50cycsXG4gKiAgICAgc3VidGl0bGU6ICd2Mi4wLjk2MicsXG4gKiAgICAga2V5VmFsdWVzOiBbXG4gKiAgICAgICB7IGxhYmVsOiAnTGljZW5zZScsIHZhbHVlOiAnTUlUJyB9LFxuICogICAgICAgeyBsYWJlbDogJ0Rvd25sb2FkcycsIHZhbHVlOiAnMS4yTScgfVxuICogICAgIF1cbiAqICAgfVwiXG4gKiAvPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1pbmZvLWNhcmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImluZm8tY2FyZFwiXG4gICAgICBbY2xhc3MuaW5mby1jYXJkLS1ib3JkZXJlZF09XCJjb25maWcoKS5ib3JkZXJlZFwiXG4gICAgICBbY2xhc3MuaW5mby1jYXJkLS1zaGFkb3dlZF09XCJjb25maWcoKS5zaGFkb3dlZFwiXG4gICAgICBbc3R5bGUucGFkZGluZ109XCJjb25maWcoKS5wYWRkaW5nXCJcbiAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cImNvbmZpZygpLmJvcmRlclJhZGl1c1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImluZm8tY2FyZF9fbGVmdFwiPlxuICAgICAgICBAaWYgKGNvbmZpZygpLmljb24pIHtcbiAgICAgICAgICA8aW9uLWljb24gY2xhc3M9XCJpbmZvLWNhcmRfX2ljb25cIiBbbmFtZV09XCJjb25maWcoKS5pY29uXCIgW3N0eWxlLmNvbG9yXT1cImdldEljb25Db2xvcigpXCI+PC9pb24taWNvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoY29uZmlnKCkub3ZlcnRpdGxlKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWNhcmRfX292ZXJ0aXRsZVwiPnt7IGNvbmZpZygpLm92ZXJ0aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxoMyBjbGFzcz1cImluZm8tY2FyZF9fdGl0bGVcIj57eyBjb25maWcoKS50aXRsZSB9fTwvaDM+XG5cbiAgICAgICAgQGlmIChjb25maWcoKS5zdWJ0aXRsZSkge1xuICAgICAgICAgIDxwIGNsYXNzPVwiaW5mby1jYXJkX19zdWJ0aXRsZVwiPnt7IGNvbmZpZygpLnN1YnRpdGxlIH19PC9wPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmIChjb25maWcoKS5rZXlWYWx1ZXM/Lmxlbmd0aCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1jYXJkX19yaWdodFwiPlxuICAgICAgICAgIEBmb3IgKGt2IG9mIGNvbmZpZygpLmtleVZhbHVlczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1jYXJkX19rdlwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tY2FyZF9fa3YtbGFiZWxcIj57eyBrdi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWNhcmRfX2t2LXZhbHVlXCI+e3sga3YudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9pbmZvLWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5mb0NhcmRDb21wb25lbnQge1xuICAvKiogQ29tcG9uZW50IGNvbmZpZ3VyYXRpb24gKi9cbiAgcmVhZG9ubHkgcHJvcHMgPSBpbnB1dDxQYXJ0aWFsPEluZm9DYXJkTWV0YWRhdGE+Pih7fSBhcyBQYXJ0aWFsPEluZm9DYXJkTWV0YWRhdGE+KTtcblxuICAvKiogTWVyZ2VkIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0cyAqL1xuICBjb25maWcgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgKHtcbiAgICAgICAgLi4uSU5GT19DQVJEX0RFRkFVTFRTLFxuICAgICAgICAuLi50aGlzLnByb3BzKCksXG4gICAgICB9KSBhcyBJbmZvQ2FyZE1ldGFkYXRhICYgdHlwZW9mIElORk9fQ0FSRF9ERUZBVUxUU1xuICApO1xuXG4gIGdldEljb25Db2xvcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5jb25maWcoKS5pY29uQ29sb3I7XG4gICAgaWYgKCFjb2xvcikgcmV0dXJuIGB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSlgO1xuICAgIHJldHVybiBJT05JQ19DT0xPUlMuaW5jbHVkZXMoY29sb3IpID8gYHZhcigtLWlvbi1jb2xvci0ke2NvbG9yfSlgIDogY29sb3I7XG4gIH1cbn1cbiJdfQ==
@@ -1,11 +0,0 @@
1
- /**
2
- * Default values for InfoCardMetadata.
3
- */
4
- export const INFO_CARD_DEFAULTS = {
5
- iconColor: 'primary',
6
- bordered: true,
7
- shadowed: false,
8
- padding: '1.5rem',
9
- borderRadius: '16px',
10
- };
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2luZm8tY2FyZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQ0E7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FFM0I7SUFDRixTQUFTLEVBQUUsU0FBUztJQUNwQixRQUFRLEVBQUUsSUFBSTtJQUNkLFFBQVEsRUFBRSxLQUFLO0lBQ2YsT0FBTyxFQUFFLFFBQVE7SUFDakIsWUFBWSxFQUFFLE1BQU07Q0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzaW5nbGUga2V5LXZhbHVlIHBhaXIgc2hvd24gaW4gdGhlIHJpZ2h0IGNvbHVtbiBvZiB2YWwtaW5mby1jYXJkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZm9DYXJkS2V5VmFsdWUge1xuICAvKiogTGFiZWwgKHNob3duIGluIG11dGVkIGNvbG9yKSAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogVmFsdWUgKHNob3duIGluIGJvbGQpICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCB0b2tlbiBmb3IgY2xpY2sgaWRlbnRpZmljYXRpb24gKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTWV0YWRhdGEgZm9yIHZhbC1pbmZvLWNhcmQuXG4gKlxuICogQ2FyZCB3aXRoIGljb24gKyBvdmVydGl0bGUgKyB0aXRsZSArIHN1YnRpdGxlIG9uIHRoZSBsZWZ0IHNpZGUsIGFuZCBhIGxpc3RcbiAqIG9mIGtleS12YWx1ZSBwYWlycyBvbiB0aGUgcmlnaHQgc2lkZS4gSW5zcGlyZWQgYnkgbnBtIFwiUHJvdmVuYW5jZVwiIC8gbWV0YWRhdGFcbiAqIHBhbmVscy4gVHdvLWNvbHVtbiBsYXlvdXQgb24gZGVza3RvcCwgc3RhY2tlZCBvbiBtb2JpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5mb0NhcmRNZXRhZGF0YSB7XG4gIC8qKiBpb24taWNvbiBuYW1lICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKiBJY29uIGNvbG9yIChJb25pYyBjb2xvciBuYW1lIG9yIENTUyBjb2xvcikuIERlZmF1bHQ6ICdwcmltYXJ5JyAqL1xuICBpY29uQ29sb3I/OiBzdHJpbmc7XG4gIC8qKiBTbWFsbCBsYWJlbCBhYm92ZSB0aGUgdGl0bGUgKi9cbiAgb3ZlcnRpdGxlPzogc3RyaW5nO1xuICAvKiogTWFpbiB0aXRsZSAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogU3VidGl0bGUgYmVsb3cgdGhlIHRpdGxlICovXG4gIHN1YnRpdGxlPzogc3RyaW5nO1xuICAvKiogS2V5LXZhbHVlIHBhaXJzIHNob3duIGluIHRoZSByaWdodCBjb2x1bW4gKi9cbiAga2V5VmFsdWVzPzogSW5mb0NhcmRLZXlWYWx1ZVtdO1xuICAvKiogU2hvdyBib3JkZXIuIERlZmF1bHQ6IHRydWUgKi9cbiAgYm9yZGVyZWQ/OiBib29sZWFuO1xuICAvKiogU2hvdyBzaGFkb3cuIERlZmF1bHQ6IGZhbHNlICovXG4gIHNoYWRvd2VkPzogYm9vbGVhbjtcbiAgLyoqIENhcmQgcGFkZGluZy4gRGVmYXVsdDogJzEuNXJlbScgKi9cbiAgcGFkZGluZz86IHN0cmluZztcbiAgLyoqIENhcmQgYm9yZGVyIHJhZGl1cy4gRGVmYXVsdDogJzE2cHgnICovXG4gIGJvcmRlclJhZGl1cz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZhdWx0IHZhbHVlcyBmb3IgSW5mb0NhcmRNZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGNvbnN0IElORk9fQ0FSRF9ERUZBVUxUUzogUmVxdWlyZWQ8XG4gIFBpY2s8SW5mb0NhcmRNZXRhZGF0YSwgJ2ljb25Db2xvcicgfCAnYm9yZGVyZWQnIHwgJ3NoYWRvd2VkJyB8ICdwYWRkaW5nJyB8ICdib3JkZXJSYWRpdXMnPlxuPiA9IHtcbiAgaWNvbkNvbG9yOiAncHJpbWFyeScsXG4gIGJvcmRlcmVkOiB0cnVlLFxuICBzaGFkb3dlZDogZmFsc2UsXG4gIHBhZGRpbmc6ICcxLjVyZW0nLFxuICBib3JkZXJSYWRpdXM6ICcxNnB4Jyxcbn07XG4iXX0=
@@ -1,34 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { ReactiveFormsModule } from '@angular/forms';
3
- import { IonInput } from '@ionic/angular/standalone';
4
- import { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/forms";
7
- /**
8
- * val-number-input
9
- *
10
- * A number input field integrated with Angular forms.
11
- *
12
- * @example
13
- * <val-number-input [props]="{ control: myControl, placeholder: 'Enter a number' }"></val-number-input>
14
- *
15
- * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)
16
- */
17
- export class NumberInputComponent {
18
- constructor() { }
19
- ngOnInit() {
20
- // Apply default values on initialization
21
- if (this.props?.withDefault || this.props?.value) {
22
- applyDefaultValueToControl(this.props);
23
- }
24
- }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: NumberInputComponent, isStandalone: true, selector: "val-number-input", inputs: { props: "props" }, ngImport: i0, template: ` <ion-input [formControl]="props.control" type="number" [placeholder]="props.placeholder"></ion-input> `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.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"] }] }); }
27
- }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NumberInputComponent, decorators: [{
29
- type: Component,
30
- args: [{ selector: 'val-number-input', standalone: true, imports: [ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="props.control" type="number" [placeholder]="props.placeholder"></ion-input> ` }]
31
- }], ctorParameters: () => [], propDecorators: { props: [{
32
- type: Input
33
- }] } });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvbnVtYmVyLWlucHV0L251bWJlci1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFVakY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQVMvQixnQkFBZSxDQUFDO0lBRWhCLFFBQVE7UUFDTix5Q0FBeUM7UUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2pELDBCQUEwQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzsrR0FoQlUsb0JBQW9CO21HQUFwQixvQkFBb0Isd0dBYnJCLHlHQUF5Ryx5RUFEekcsbUJBQW1CLDBUQUFFLFFBQVE7OzRGQWM1QixvQkFBb0I7a0JBakJoQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsWUFDOUIseUdBQXlHO3dEQW9CMUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uSW5wdXQgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFwcGx5RGVmYXVsdFZhbHVlVG9Db250cm9sIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL2Zvcm0tZGVmYXVsdHMnO1xuaW1wb3J0IHsgSW5wdXRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLW51bWJlci1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJb25JbnB1dF0sXG4gIHRlbXBsYXRlOiBgIDxpb24taW5wdXQgW2Zvcm1Db250cm9sXT1cInByb3BzLmNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgW3BsYWNlaG9sZGVyXT1cInByb3BzLnBsYWNlaG9sZGVyXCI+PC9pb24taW5wdXQ+IGAsXG4gIHN0eWxlVXJsczogWycuL251bWJlci1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLW51bWJlci1pbnB1dFxuICpcbiAqIEEgbnVtYmVyIGlucHV0IGZpZWxkIGludGVncmF0ZWQgd2l0aCBBbmd1bGFyIGZvcm1zLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLW51bWJlci1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBteUNvbnRyb2wsIHBsYWNlaG9sZGVyOiAnRW50ZXIgYSBudW1iZXInIH1cIj48L3ZhbC1udW1iZXItaW5wdXQ+XG4gKlxuICogQGlucHV0IHByb3BzOiBJbnB1dE1ldGFkYXRhIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGlucHV0IChmb3JtIGNvbnRyb2wsIHBsYWNlaG9sZGVyLCBldGMuKVxuICovXG5leHBvcnQgY2xhc3MgTnVtYmVySW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogSW5wdXQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqIEB0eXBlIHtJbnB1dE1ldGFkYXRhfVxuICAgKiBAcHJvcGVydHkgY29udHJvbCAtIFRoZSBBbmd1bGFyIEZvcm1Db250cm9sIGZvciB0aGUgaW5wdXQuXG4gICAqIEBwcm9wZXJ0eSBwbGFjZWhvbGRlciAtIFRoZSBwbGFjZWhvbGRlciB0ZXh0LlxuICAgKi9cbiAgQElucHV0KCkgcHJvcHM6IElucHV0TWV0YWRhdGE7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEFwcGx5IGRlZmF1bHQgdmFsdWVzIG9uIGluaXRpYWxpemF0aW9uXG4gICAgaWYgKHRoaXMucHJvcHM/LndpdGhEZWZhdWx0IHx8IHRoaXMucHJvcHM/LnZhbHVlKSB7XG4gICAgICBhcHBseURlZmF1bHRWYWx1ZVRvQ29udHJvbCh0aGlzLnByb3BzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,26 +0,0 @@
1
- import { ContentCardMetadata } from './types';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * val-content-card
5
- *
6
- * Generic container card with configurable padding, border radius, background
7
- * color and shadow. Accepts arbitrary content via ng-content. Use it to wrap
8
- * val-article, stats, or any other content that needs a card shell.
9
- *
10
- * @example
11
- * ```html
12
- * <val-content-card [props]="{ title: 'Summary', shadowed: true }">
13
- * <p>Any inner content here.</p>
14
- * </val-content-card>
15
- * ```
16
- */
17
- export declare class ContentCardComponent {
18
- /** Component configuration */
19
- readonly props: import("@angular/core").InputSignal<Partial<ContentCardMetadata>>;
20
- /** Merged configuration with defaults */
21
- config: import("@angular/core").Signal<ContentCardMetadata & Required<Pick<ContentCardMetadata, "borderRadius" | "bordered" | "shadowed" | "align" | "padding">>>;
22
- resolvedBg: import("@angular/core").Signal<string>;
23
- resolvedColor: import("@angular/core").Signal<string>;
24
- static ɵfac: i0.ɵɵFactoryDeclaration<ContentCardComponent, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<ContentCardComponent, "val-content-card", never, { "props": { "alias": "props"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
26
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * Metadata for val-content-card.
3
- *
4
- * Generic container card with configurable padding, border radius, background
5
- * color and shadow. Supports ng-content for arbitrary inner content.
6
- */
7
- export interface ContentCardMetadata {
8
- /** Optional card title rendered above the content */
9
- title?: string;
10
- /** Optional description rendered below the title */
11
- description?: string;
12
- /** Background color — Ionic color name (primary…dark) or any CSS color */
13
- backgroundColor?: string;
14
- /** Text color — Ionic color name or any CSS color */
15
- color?: string;
16
- /** Card inner padding. Default: '1.5rem' */
17
- padding?: string;
18
- /** Card border radius. Default: '20px' */
19
- borderRadius?: string;
20
- /** Show border. Default: false */
21
- bordered?: boolean;
22
- /** Show box shadow. Default: true */
23
- shadowed?: boolean;
24
- /** Text alignment. Default: 'start' */
25
- align?: 'start' | 'center';
26
- }
27
- /**
28
- * Default values for ContentCardMetadata.
29
- */
30
- export declare const CONTENT_CARD_DEFAULTS: Required<Pick<ContentCardMetadata, 'padding' | 'borderRadius' | 'bordered' | 'shadowed' | 'align'>>;
@@ -1,34 +0,0 @@
1
- import { OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
- import { InputMetadata } from '../../types';
3
- import * as i0 from "@angular/core";
4
- export declare class EmailInputComponent implements OnInit, OnChanges {
5
- private presets;
6
- /**
7
- * Preset name to apply. Presets define reusable input configurations
8
- * that can be registered at app level via provideValtechPresets().
9
- *
10
- * @example
11
- * <val-email-input preset="form-field" [props]="{ control: ctrl }"></val-email-input>
12
- */
13
- preset?: string;
14
- /**
15
- * Input configuration object. Values here override preset values.
16
- * @type {InputMetadata}
17
- * @property control - The Angular FormControl for the input.
18
- * @property placeholder - The placeholder text.
19
- */
20
- props: Partial<InputMetadata>;
21
- /**
22
- * Resolved props after merging preset + explicit props.
23
- */
24
- resolvedProps: InputMetadata;
25
- ngOnInit(): void;
26
- ngOnChanges(changes: SimpleChanges): void;
27
- /**
28
- * Merge preset configuration with explicit props.
29
- * Explicit props take precedence over preset values.
30
- */
31
- private resolveProps;
32
- static ɵfac: i0.ɵɵFactoryDeclaration<EmailInputComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<EmailInputComponent, "val-email-input", never, { "preset": { "alias": "preset"; "required": false; }; "props": { "alias": "props"; "required": false; }; }, {}, never, never, true, never>;
34
- }