valtech-components 2.0.566 → 2.0.567

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 (56) hide show
  1. package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +51 -14
  2. package/esm2022/lib/components/atoms/fab/fab.component.mjs +63 -25
  3. package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +64 -19
  4. package/esm2022/lib/components/molecules/accordion/accordion.component.mjs +45 -18
  5. package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +43 -15
  6. package/esm2022/lib/components/molecules/card/card.component.mjs +2 -2
  7. package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +52 -8
  8. package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +54 -37
  9. package/esm2022/lib/components/molecules/comment/comment.component.mjs +1 -1
  10. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +62 -27
  11. package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +74 -46
  12. package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +2 -2
  13. package/esm2022/lib/components/molecules/participant-card/participant-card.component.mjs +1 -1
  14. package/esm2022/lib/components/molecules/phone-input/phone-input.component.mjs +95 -59
  15. package/esm2022/lib/components/molecules/pill/pill.component.mjs +61 -13
  16. package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +2 -2
  17. package/esm2022/lib/components/molecules/rating/rating.component.mjs +60 -43
  18. package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +56 -26
  19. package/esm2022/lib/components/molecules/searchbar/types.mjs +2 -0
  20. package/esm2022/lib/components/molecules/segment-control/segment-control.component.mjs +52 -29
  21. package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +2 -2
  22. package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +67 -51
  23. package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +51 -23
  24. package/esm2022/lib/components/molecules/tabs/tabs.component.mjs +59 -21
  25. package/esm2022/lib/components/molecules/textarea-input/textarea-input.component.mjs +93 -59
  26. package/esm2022/lib/components/molecules/toggle-input/toggle-input.component.mjs +49 -15
  27. package/esm2022/lib/components/molecules/winner-display/winner-display.component.mjs +1 -1
  28. package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +2 -2
  29. package/esm2022/lib/components/organisms/form/form.component.mjs +2 -2
  30. package/esm2022/lib/components/organisms/tabbed-content/tabbed-content.component.mjs +1 -1
  31. package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +2 -2
  32. package/esm2022/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.mjs +2 -2
  33. package/fesm2022/valtech-components.mjs +1259 -675
  34. package/fesm2022/valtech-components.mjs.map +1 -1
  35. package/lib/components/atoms/avatar/avatar.component.d.ts +26 -5
  36. package/lib/components/atoms/fab/fab.component.d.ts +24 -5
  37. package/lib/components/atoms/progress-bar/progress-bar.component.d.ts +21 -6
  38. package/lib/components/molecules/accordion/accordion.component.d.ts +10 -4
  39. package/lib/components/molecules/breadcrumb/breadcrumb.component.d.ts +10 -4
  40. package/lib/components/molecules/check-input/check-input.component.d.ts +25 -4
  41. package/lib/components/molecules/chip-group/chip-group.component.d.ts +10 -4
  42. package/lib/components/molecules/date-input/date-input.component.d.ts +25 -7
  43. package/lib/components/molecules/glow-card/glow-card.component.d.ts +16 -5
  44. package/lib/components/molecules/phone-input/phone-input.component.d.ts +28 -5
  45. package/lib/components/molecules/pill/pill.component.d.ts +27 -3
  46. package/lib/components/molecules/rating/rating.component.d.ts +10 -4
  47. package/lib/components/molecules/searchbar/searchbar.component.d.ts +15 -11
  48. package/lib/components/molecules/searchbar/types.d.ts +33 -0
  49. package/lib/components/molecules/segment-control/segment-control.component.d.ts +17 -6
  50. package/lib/components/molecules/stats-card/stats-card.component.d.ts +10 -4
  51. package/lib/components/molecules/stepper/stepper.component.d.ts +20 -4
  52. package/lib/components/molecules/tabs/tabs.component.d.ts +27 -4
  53. package/lib/components/molecules/textarea-input/textarea-input.component.d.ts +27 -4
  54. package/lib/components/molecules/toggle-input/toggle-input.component.d.ts +25 -4
  55. package/package.json +1 -1
  56. package/src/lib/components/styles/_docs-page.scss +310 -0
@@ -1,9 +1,25 @@
1
- import { EventEmitter } from '@angular/core';
1
+ import { OnChanges, OnInit, EventEmitter, SimpleChanges } from '@angular/core';
2
2
  import { StepperMetadata, StepMetadata, StepChangeEvent, StepStatus } from './types';
3
3
  import * as i0 from "@angular/core";
4
- export declare class StepperComponent {
5
- props: StepperMetadata;
4
+ export declare class StepperComponent implements OnInit, OnChanges {
5
+ private presets;
6
+ /**
7
+ * Preset name to apply. Presets define reusable stepper configurations
8
+ * that can be registered at app level via provideValtechPresets().
9
+ */
10
+ preset?: string;
11
+ /**
12
+ * Stepper configuration object. Values here override preset values.
13
+ */
14
+ props: Partial<StepperMetadata>;
15
+ /**
16
+ * Resolved props after merging preset + explicit props.
17
+ */
18
+ resolvedProps: StepperMetadata;
6
19
  stepChange: EventEmitter<StepChangeEvent>;
20
+ ngOnInit(): void;
21
+ ngOnChanges(changes: SimpleChanges): void;
22
+ private resolveProps;
7
23
  getCurrentIndex(): number;
8
24
  getStepStatus(step: StepMetadata, index: number): StepStatus;
9
25
  getStepColor(step: StepMetadata, index: number): string;
@@ -11,5 +27,5 @@ export declare class StepperComponent {
11
27
  onStepClick(step: StepMetadata, index: number): void;
12
28
  getStepLabel(step: StepMetadata): string;
13
29
  static ɵfac: i0.ɵɵFactoryDeclaration<StepperComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<StepperComponent, "val-stepper", never, { "props": { "alias": "props"; "required": false; }; }, { "stepChange": "stepChange"; }, never, never, true, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<StepperComponent, "val-stepper", never, { "preset": { "alias": "preset"; "required": false; }; "props": { "alias": "props"; "required": false; }; }, { "stepChange": "stepChange"; }, never, never, true, never>;
15
31
  }
@@ -1,11 +1,34 @@
1
- import { EventEmitter } from '@angular/core';
1
+ import { OnChanges, OnInit, EventEmitter, SimpleChanges } from '@angular/core';
2
2
  import { TabsMetadata, TabMetadata } from './types';
3
3
  import * as i0 from "@angular/core";
4
- export declare class TabsComponent {
5
- props: TabsMetadata;
4
+ export declare class TabsComponent implements OnInit, OnChanges {
5
+ private presets;
6
+ /**
7
+ * Preset name to apply. Presets define reusable tabs configurations
8
+ * that can be registered at app level via provideValtechPresets().
9
+ *
10
+ * @example
11
+ * <val-tabs preset="main-nav" [props]="{ tabs: [...] }"></val-tabs>
12
+ */
13
+ preset?: string;
14
+ /**
15
+ * Tabs configuration object. Values here override preset values.
16
+ */
17
+ props: Partial<TabsMetadata>;
18
+ /**
19
+ * Resolved props after merging preset + explicit props.
20
+ */
21
+ resolvedProps: TabsMetadata;
6
22
  tabChange: EventEmitter<TabMetadata>;
23
+ ngOnInit(): void;
24
+ ngOnChanges(changes: SimpleChanges): void;
25
+ /**
26
+ * Merge preset configuration with explicit props.
27
+ * Explicit props take precedence over preset values.
28
+ */
29
+ private resolveProps;
7
30
  onTabClick(tab: TabMetadata): void;
8
31
  getTabLabel(tab: TabMetadata): string;
9
32
  static ɵfac: i0.ɵɵFactoryDeclaration<TabsComponent, never>;
10
- static ɵcmp: i0.ɵɵComponentDeclaration<TabsComponent, "val-tabs", never, { "props": { "alias": "props"; "required": false; }; }, { "tabChange": "tabChange"; }, never, never, true, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabsComponent, "val-tabs", never, { "preset": { "alias": "preset"; "required": false; }; "props": { "alias": "props"; "required": false; }; }, { "tabChange": "tabChange"; }, never, never, true, never>;
11
34
  }
@@ -1,8 +1,24 @@
1
- import { OnInit } from '@angular/core';
1
+ import { OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
2
  import { TextareaInputMetadata } from './types';
3
3
  import * as i0 from "@angular/core";
4
- export declare class TextareaInputComponent implements OnInit {
5
- props: TextareaInputMetadata;
4
+ export declare class TextareaInputComponent implements OnInit, OnChanges {
5
+ private presets;
6
+ /**
7
+ * Preset name to apply. Presets define reusable textarea configurations
8
+ * that can be registered at app level via provideValtechPresets().
9
+ *
10
+ * @example
11
+ * <val-textarea-input preset="form-field" [props]="{ control: ctrl }"></val-textarea-input>
12
+ */
13
+ preset?: string;
14
+ /**
15
+ * Textarea configuration object. Values here override preset values.
16
+ */
17
+ props: Partial<TextareaInputMetadata>;
18
+ /**
19
+ * Resolved props after merging preset + explicit props.
20
+ */
21
+ resolvedProps: TextareaInputMetadata;
6
22
  states: {
7
23
  ENABLED: "ENABLED";
8
24
  DISABLED: "DISABLED";
@@ -10,6 +26,13 @@ export declare class TextareaInputComponent implements OnInit {
10
26
  ERROR: "ERROR";
11
27
  };
12
28
  ngOnInit(): void;
29
+ ngOnChanges(changes: SimpleChanges): void;
30
+ /**
31
+ * Merge preset configuration with explicit props.
32
+ * Explicit props take precedence over preset values.
33
+ */
34
+ private resolveProps;
35
+ private applyDefaultValue;
13
36
  getLabel(): string;
14
37
  getPlaceholder(): string;
15
38
  getHint(): string;
@@ -19,5 +42,5 @@ export declare class TextareaInputComponent implements OnInit {
19
42
  getRemainingLabel(): string;
20
43
  counterFormatter: (inputLength: number, maxLength: number) => string;
21
44
  static ɵfac: i0.ɵɵFactoryDeclaration<TextareaInputComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<TextareaInputComponent, "val-textarea-input", never, { "props": { "alias": "props"; "required": false; }; }, {}, never, never, true, never>;
45
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextareaInputComponent, "val-textarea-input", never, { "preset": { "alias": "preset"; "required": false; }; "props": { "alias": "props"; "required": false; }; }, {}, never, never, true, never>;
23
46
  }
@@ -1,18 +1,39 @@
1
+ import { OnChanges, OnInit, SimpleChanges } from '@angular/core';
1
2
  import { ToggleInputMetadata } from './types';
2
3
  import * as i0 from "@angular/core";
3
- export declare class ToggleInputComponent {
4
+ export declare class ToggleInputComponent implements OnInit, OnChanges {
5
+ private presets;
4
6
  /**
5
- * Input configuration object.
7
+ * Preset name to apply. Presets define reusable toggle input configurations
8
+ * that can be registered at app level via provideValtechPresets().
9
+ *
10
+ * @example
11
+ * <val-toggle-input preset="form-field" [props]="{ control: ctrl }"></val-toggle-input>
12
+ */
13
+ preset?: string;
14
+ /**
15
+ * Input configuration object. Values here override preset values.
6
16
  * @type {ToggleInputMetadata}
7
17
  */
8
- props: ToggleInputMetadata;
18
+ props: Partial<ToggleInputMetadata>;
19
+ /**
20
+ * Resolved props after merging preset + explicit props.
21
+ */
22
+ resolvedProps: ToggleInputMetadata;
9
23
  states: {
10
24
  ENABLED: "ENABLED";
11
25
  DISABLED: "DISABLED";
12
26
  WORKING: "WORKING";
13
27
  ERROR: "ERROR";
14
28
  };
29
+ ngOnInit(): void;
30
+ ngOnChanges(changes: SimpleChanges): void;
31
+ /**
32
+ * Merge preset configuration with explicit props.
33
+ * Explicit props take precedence over preset values.
34
+ */
35
+ private resolveProps;
15
36
  getDisplayLabel(): string;
16
37
  static ɵfac: i0.ɵɵFactoryDeclaration<ToggleInputComponent, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<ToggleInputComponent, "val-toggle-input", never, { "props": { "alias": "props"; "required": false; }; }, {}, never, never, true, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToggleInputComponent, "val-toggle-input", never, { "preset": { "alias": "preset"; "required": false; }; "props": { "alias": "props"; "required": false; }; }, {}, never, never, true, never>;
18
39
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valtech-components",
3
- "version": "2.0.566",
3
+ "version": "2.0.567",
4
4
  "private": false,
5
5
  "bin": {
6
6
  "valtech-firebase-config": "./src/lib/services/firebase/scripts/generate-sw-config.js"
@@ -0,0 +1,310 @@
1
+ /**
2
+ * Shared styles for documentation pages.
3
+ * Import this file in your component and include the mixin.
4
+ *
5
+ * Usage in component:
6
+ * @use 'valtech-components/styles/docs-page' as docs;
7
+ *
8
+ * styles: [`@include docs.page();`]
9
+ */
10
+
11
+ @mixin page() {
12
+ // Main layout
13
+ .docs-page {
14
+ display: grid;
15
+ grid-template-columns: 1fr 200px;
16
+ gap: 2rem;
17
+ max-width: 1200px;
18
+ margin: 0 auto;
19
+ padding: 2rem;
20
+
21
+ @media (max-width: 1024px) {
22
+ grid-template-columns: 1fr;
23
+ padding: 1rem;
24
+ }
25
+ }
26
+
27
+ .docs-page__content {
28
+ min-width: 0;
29
+ }
30
+
31
+ .docs-page__toc {
32
+ position: sticky;
33
+ top: 2rem;
34
+ height: fit-content;
35
+
36
+ @media (max-width: 1024px) {
37
+ display: none;
38
+ }
39
+ }
40
+
41
+ // Header
42
+ .docs-page__header {
43
+ margin-bottom: 2rem;
44
+ }
45
+
46
+ .docs-page__badge {
47
+ display: inline-block;
48
+ font-size: 0.75rem;
49
+ font-weight: 600;
50
+ text-transform: uppercase;
51
+ padding: 0.25rem 0.5rem;
52
+ border-radius: 4px;
53
+ background: rgba(0, 0, 0, 0.06);
54
+ color: #555;
55
+ margin-bottom: 0.75rem;
56
+
57
+ @media (prefers-color-scheme: dark) {
58
+ background: rgba(255, 255, 255, 0.1);
59
+ color: #aaa;
60
+ }
61
+ }
62
+
63
+ .docs-page__header h1 {
64
+ font-size: 2.5rem;
65
+ font-weight: 700;
66
+ margin: 0 0 0.75rem 0;
67
+ color: var(--ion-text-color, #1a1a1a);
68
+
69
+ @media (max-width: 768px) {
70
+ font-size: 2rem;
71
+ }
72
+ }
73
+
74
+ .docs-page__lead {
75
+ font-size: 1.125rem;
76
+ color: var(--ion-color-medium, #666);
77
+ margin: 0;
78
+ line-height: 1.6;
79
+
80
+ @media (max-width: 768px) {
81
+ font-size: 1rem;
82
+ }
83
+ }
84
+
85
+ // Sections
86
+ section {
87
+ margin-bottom: 2rem;
88
+ }
89
+
90
+ // Headings
91
+ h2 {
92
+ font-size: 1.5rem;
93
+ font-weight: 600;
94
+ margin: 0 0 1rem 0;
95
+ color: var(--ion-text-color, #1a1a1a);
96
+ scroll-margin-top: 2rem;
97
+ }
98
+
99
+ h3 {
100
+ font-size: 1.125rem;
101
+ font-weight: 600;
102
+ margin: 1.5rem 0 1rem 0;
103
+ color: var(--ion-text-color, #1a1a1a);
104
+ }
105
+
106
+ h4 {
107
+ font-size: 1rem;
108
+ font-weight: 600;
109
+ margin: 1.25rem 0 0.75rem 0;
110
+ color: var(--ion-text-color, #1a1a1a);
111
+ }
112
+
113
+ // Text
114
+ p {
115
+ line-height: 1.7;
116
+ color: var(--ion-text-color, #1a1a1a);
117
+ margin: 0 0 1rem 0;
118
+ }
119
+
120
+ // Lists
121
+ ul,
122
+ ol {
123
+ padding-left: 1.5rem;
124
+ margin: 0 0 1rem 0;
125
+ }
126
+
127
+ li {
128
+ margin-bottom: 0.5rem;
129
+ line-height: 1.6;
130
+ }
131
+
132
+ // Links
133
+ a {
134
+ color: var(--ion-color-primary, #3880ff);
135
+ text-decoration: none;
136
+
137
+ &:hover {
138
+ text-decoration: underline;
139
+ }
140
+ }
141
+
142
+ // Code inline
143
+ code:not([class*='language-']) {
144
+ background: rgba(0, 0, 0, 0.06);
145
+ padding: 0.125rem 0.375rem;
146
+ border-radius: 4px;
147
+ font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
148
+ font-size: 0.875em;
149
+
150
+ @media (prefers-color-scheme: dark) {
151
+ background: rgba(255, 255, 255, 0.1);
152
+ }
153
+ }
154
+
155
+ // Pre blocks (without syntax highlighting)
156
+ pre:not([class*='language-']) {
157
+ background: rgba(0, 0, 0, 0.04);
158
+ padding: 1rem;
159
+ border-radius: 8px;
160
+ overflow-x: auto;
161
+ margin: 0 0 1rem 0;
162
+
163
+ @media (prefers-color-scheme: dark) {
164
+ background: rgba(255, 255, 255, 0.06);
165
+ }
166
+
167
+ code {
168
+ background: none;
169
+ padding: 0;
170
+ }
171
+ }
172
+
173
+ // Tables
174
+ table {
175
+ width: 100%;
176
+ border-collapse: collapse;
177
+ margin: 0 0 1rem 0;
178
+ font-size: 0.875rem;
179
+ }
180
+
181
+ th,
182
+ td {
183
+ padding: 0.75rem;
184
+ text-align: left;
185
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
186
+
187
+ @media (prefers-color-scheme: dark) {
188
+ border-color: rgba(255, 255, 255, 0.1);
189
+ }
190
+ }
191
+
192
+ th {
193
+ font-weight: 600;
194
+ background: rgba(0, 0, 0, 0.02);
195
+
196
+ @media (prefers-color-scheme: dark) {
197
+ background: rgba(255, 255, 255, 0.04);
198
+ }
199
+ }
200
+
201
+ // Blockquote
202
+ blockquote {
203
+ margin: 0 0 1rem 0;
204
+ padding: 1rem 1.5rem;
205
+ border-left: 4px solid var(--ion-color-primary, #3880ff);
206
+ background: rgba(0, 0, 0, 0.02);
207
+ border-radius: 0 8px 8px 0;
208
+
209
+ @media (prefers-color-scheme: dark) {
210
+ background: rgba(255, 255, 255, 0.04);
211
+ }
212
+
213
+ p:last-child {
214
+ margin-bottom: 0;
215
+ }
216
+ }
217
+
218
+ // Image
219
+ img {
220
+ max-width: 100%;
221
+ height: auto;
222
+ border-radius: 8px;
223
+ }
224
+
225
+ // Horizontal rule
226
+ hr {
227
+ border: none;
228
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
229
+ margin: 2rem 0;
230
+
231
+ @media (prefers-color-scheme: dark) {
232
+ border-color: rgba(255, 255, 255, 0.1);
233
+ }
234
+ }
235
+
236
+ // Strong text
237
+ strong {
238
+ font-weight: 600;
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Compact version without grid layout (for use inside other layouts)
244
+ */
245
+ @mixin content() {
246
+ // Headings
247
+ h2 {
248
+ font-size: 1.5rem;
249
+ font-weight: 600;
250
+ margin: 0 0 1rem 0;
251
+ color: var(--ion-text-color, #1a1a1a);
252
+ scroll-margin-top: 2rem;
253
+ }
254
+
255
+ h3 {
256
+ font-size: 1.125rem;
257
+ font-weight: 600;
258
+ margin: 1.5rem 0 1rem 0;
259
+ color: var(--ion-text-color, #1a1a1a);
260
+ }
261
+
262
+ h4 {
263
+ font-size: 1rem;
264
+ font-weight: 600;
265
+ margin: 1.25rem 0 0.75rem 0;
266
+ color: var(--ion-text-color, #1a1a1a);
267
+ }
268
+
269
+ p {
270
+ line-height: 1.7;
271
+ color: var(--ion-text-color, #1a1a1a);
272
+ margin: 0 0 1rem 0;
273
+ }
274
+
275
+ ul,
276
+ ol {
277
+ padding-left: 1.5rem;
278
+ margin: 0 0 1rem 0;
279
+ }
280
+
281
+ li {
282
+ margin-bottom: 0.5rem;
283
+ line-height: 1.6;
284
+ }
285
+
286
+ section {
287
+ margin-bottom: 2rem;
288
+ }
289
+
290
+ a {
291
+ color: var(--ion-color-primary, #3880ff);
292
+ text-decoration: none;
293
+
294
+ &:hover {
295
+ text-decoration: underline;
296
+ }
297
+ }
298
+
299
+ code:not([class*='language-']) {
300
+ background: rgba(0, 0, 0, 0.06);
301
+ padding: 0.125rem 0.375rem;
302
+ border-radius: 4px;
303
+ font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
304
+ font-size: 0.875em;
305
+
306
+ @media (prefers-color-scheme: dark) {
307
+ background: rgba(255, 255, 255, 0.1);
308
+ }
309
+ }
310
+ }