ux4g-components-angular 1.1.2 → 1.3.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.
- package/dist/mega-menu/README.md +1183 -0
- package/dist/mega-menu/fesm2022/ux4g-components-angular-mega-menu.mjs +209 -0
- package/dist/mega-menu/fesm2022/ux4g-components-angular-mega-menu.mjs.map +1 -0
- package/dist/mega-menu/index.d.ts +6 -0
- package/dist/mega-menu/public-api.d.ts +4 -0
- package/dist/mega-menu/public-api.d.ts.map +1 -0
- package/dist/mega-menu/ux4g-components-angular-mega-menu.d.ts.map +1 -0
- package/dist/mega-menu/ux4g-mega-menu.component.d.ts +30 -0
- package/dist/mega-menu/ux4g-mega-menu.component.d.ts.map +1 -0
- package/dist/mega-menu/ux4g-mega-menu.module.d.ts +9 -0
- package/dist/mega-menu/ux4g-mega-menu.module.d.ts.map +1 -0
- package/package.json +11 -2
|
@@ -0,0 +1,1183 @@
|
|
|
1
|
+
# ux4g-components-angular
|
|
2
|
+
|
|
3
|
+
Angular wrapper components for the **UX4G Design System**.
|
|
4
|
+
|
|
5
|
+
Thin, typed Angular components that map inputs to UX4G CSS classes. Each component is tree-shakeable via sub-path imports and NgModule.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install ux4g-components-angular ux4g-components-web
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
> **Note:** `ux4g-components-web` is required — it provides the CSS bundle that styles all components.
|
|
14
|
+
|
|
15
|
+
## Setup
|
|
16
|
+
|
|
17
|
+
Add the CSS bundle to your `angular.json` styles array:
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"projects": {
|
|
22
|
+
"your-app": {
|
|
23
|
+
"architect": {
|
|
24
|
+
"build": {
|
|
25
|
+
"options": {
|
|
26
|
+
"styles": [
|
|
27
|
+
"node_modules/ux4g-components-web/styles/ux4g.css",
|
|
28
|
+
"src/styles.css"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
That's it. Runtime behaviors (dropdowns, modals, tooltips, etc.) are auto-initialized when you import any component module — no manual setup needed.
|
|
39
|
+
|
|
40
|
+
## Peer Dependencies
|
|
41
|
+
|
|
42
|
+
- `@angular/core >= 15.0.0`
|
|
43
|
+
- `@angular/common >= 15.0.0`
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Components
|
|
48
|
+
|
|
49
|
+
### Button
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
// app.module.ts
|
|
53
|
+
import { UX4GButtonModule } from 'ux4g-components-angular/button';
|
|
54
|
+
|
|
55
|
+
@NgModule({
|
|
56
|
+
imports: [UX4GButtonModule],
|
|
57
|
+
})
|
|
58
|
+
export class AppModule {}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```html
|
|
62
|
+
<!-- app.component.html -->
|
|
63
|
+
<ux4g-button variant="primary" size="md" (clicked)="onSave()">
|
|
64
|
+
Save
|
|
65
|
+
</ux4g-button>
|
|
66
|
+
|
|
67
|
+
<ux4g-button variant="outline-danger" size="lg">
|
|
68
|
+
Delete
|
|
69
|
+
</ux4g-button>
|
|
70
|
+
|
|
71
|
+
<ux4g-button variant="tonal-primary" size="sm" shape="pill">
|
|
72
|
+
Tag
|
|
73
|
+
</ux4g-button>
|
|
74
|
+
|
|
75
|
+
<ux4g-button variant="primary" size="md" [loading]="true">
|
|
76
|
+
Saving...
|
|
77
|
+
</ux4g-button>
|
|
78
|
+
|
|
79
|
+
<ux4g-button variant="primary" size="md" [disabled]="true">
|
|
80
|
+
Disabled
|
|
81
|
+
</ux4g-button>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
| Input | Type | Default | Description |
|
|
85
|
+
|---|---|---|---|
|
|
86
|
+
| `variant` | `'primary' \| 'outline-primary' \| 'text-primary' \| 'tonal-primary' \| 'danger' \| 'outline-danger' \| 'text-danger' \| 'tonal-danger'` | `'primary'` | Visual style |
|
|
87
|
+
| `size` | `'xl' \| 'lg' \| 'md' \| 'sm' \| 'xs'` | `'md'` | Button size |
|
|
88
|
+
| `shape` | `'rectangle' \| 'pill'` | `'rectangle'` | Border shape |
|
|
89
|
+
| `disabled` | `boolean` | `false` | Disabled state |
|
|
90
|
+
| `loading` | `boolean` | `false` | Loading state (shows spinner) |
|
|
91
|
+
|
|
92
|
+
| Output | Type | Description |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| `clicked` | `EventEmitter<MouseEvent>` | Emitted on click (suppressed when disabled) |
|
|
95
|
+
|
|
96
|
+
### Spinner
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
import { UX4GSpinnerModule } from 'ux4g-components-angular/spinner';
|
|
100
|
+
|
|
101
|
+
@NgModule({ imports: [UX4GSpinnerModule] })
|
|
102
|
+
export class AppModule {}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```html
|
|
106
|
+
<ux4g-spinner variant="primary" size="md" type="full"></ux4g-spinner>
|
|
107
|
+
<ux4g-spinner variant="danger" size="lg" type="split"></ux4g-spinner>
|
|
108
|
+
<ux4g-spinner variant="inverse" size="xs" type="partial" label="Processing"></ux4g-spinner>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
| Input | Type | Default | Description |
|
|
112
|
+
|---|---|---|---|
|
|
113
|
+
| `variant` | `'primary' \| 'inverse' \| 'danger'` | `'primary'` | Color variant |
|
|
114
|
+
| `size` | `'xl' \| 'lg' \| 'md' \| 'sm' \| 'xs'` | `'md'` | Spinner size |
|
|
115
|
+
| `type` | `'full' \| 'split' \| 'partial'` | `'full'` | Spinner style |
|
|
116
|
+
| `label` | `string` | `'Loading'` | Accessible label |
|
|
117
|
+
|
|
118
|
+
### Link
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
import { UX4GLinkModule } from 'ux4g-components-angular/link';
|
|
122
|
+
|
|
123
|
+
@NgModule({ imports: [UX4GLinkModule] })
|
|
124
|
+
export class AppModule {}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
```html
|
|
128
|
+
<ux4g-link href="/docs" variant="default" size="md">Documentation</ux4g-link>
|
|
129
|
+
<ux4g-link href="/terms" variant="neutral" size="sm">Terms of Service</ux4g-link>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
| Input | Type | Default | Description |
|
|
133
|
+
|---|---|---|---|
|
|
134
|
+
| `variant` | `'default' \| 'neutral'` | `'default'` | Link color style |
|
|
135
|
+
| `size` | `'sm' \| 'md'` | `'md'` | Link size |
|
|
136
|
+
| `href` | `string` | — | Link URL |
|
|
137
|
+
|
|
138
|
+
### Badge
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
import { UX4GBadgeModule } from 'ux4g-components-angular/badge';
|
|
142
|
+
|
|
143
|
+
@NgModule({ imports: [UX4GBadgeModule] })
|
|
144
|
+
export class AppModule {}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
```html
|
|
148
|
+
<ux4g-badge type="dot" color="primary"></ux4g-badge>
|
|
149
|
+
<ux4g-badge type="digit" color="danger" size="m">5</ux4g-badge>
|
|
150
|
+
<ux4g-badge type="icon" color="success" size="l">✓</ux4g-badge>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
| Input | Type | Default | Description |
|
|
154
|
+
|---|---|---|---|
|
|
155
|
+
| `type` | `'dot' \| 'icon' \| 'digit'` | `'dot'` | Badge type |
|
|
156
|
+
| `color` | `'primary' \| 'success' \| 'warning' \| 'danger' \| 'info' \| 'secondary' \| 'tertiary' \| 'neutral'` | `'primary'` | Badge color |
|
|
157
|
+
| `size` | `'s' \| 'm' \| 'l' \| 'profile-l' \| 'profile-xl' \| 'profile-2xl' \| 'profile-3xl'` | — | Badge size |
|
|
158
|
+
|
|
159
|
+
### Avatar
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
import { UX4GAvatarModule } from 'ux4g-components-angular/avatar';
|
|
163
|
+
|
|
164
|
+
@NgModule({ imports: [UX4GAvatarModule] })
|
|
165
|
+
export class AppModule {}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
```html
|
|
169
|
+
<ux4g-avatar avatarType="status" size="m">
|
|
170
|
+
<img src="user.jpg" alt="User" />
|
|
171
|
+
</ux4g-avatar>
|
|
172
|
+
|
|
173
|
+
<ux4g-avatar avatarType="profile" size="xl">
|
|
174
|
+
<img src="profile.jpg" alt="Profile" />
|
|
175
|
+
</ux4g-avatar>
|
|
176
|
+
|
|
177
|
+
<ux4g-avatar avatarType="group">
|
|
178
|
+
<img src="u1.jpg" alt="" />
|
|
179
|
+
<img src="u2.jpg" alt="" />
|
|
180
|
+
</ux4g-avatar>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
| Input | Type | Default | Description |
|
|
184
|
+
|---|---|---|---|
|
|
185
|
+
| `avatarType` | `'status' \| 'profile' \| 'group'` | `'status'` | Avatar type |
|
|
186
|
+
| `size` | `'xs' \| 's' \| 'm' \| 'l' \| 'xl' \| '2xl' \| '3xl'` | — | Avatar size |
|
|
187
|
+
|
|
188
|
+
### Image
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
import { UX4GImageModule } from 'ux4g-components-angular/image';
|
|
192
|
+
|
|
193
|
+
@NgModule({ imports: [UX4GImageModule] })
|
|
194
|
+
export class AppModule {}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
```html
|
|
198
|
+
<ux4g-image src="photo.jpg" alt="Photo" ratio="16-9"></ux4g-image>
|
|
199
|
+
<ux4g-image src="photo.jpg" alt="Photo" ratio="4-3" [rounded]="true" [overlay]="true"></ux4g-image>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
| Input | Type | Default | Description |
|
|
203
|
+
|---|---|---|---|
|
|
204
|
+
| `ratio` | `'1-1' \| '4-3' \| '3-2' \| '16-10' \| '16-9' \| '2-1' \| '5-2' \| '3-1' \| '1-16' \| '2-3' \| '3-4'` | — | Aspect ratio |
|
|
205
|
+
| `rounded` | `boolean` | `false` | Rounded corners |
|
|
206
|
+
| `overlay` | `boolean` | `false` | Enable overlay |
|
|
207
|
+
|
|
208
|
+
### Chip
|
|
209
|
+
|
|
210
|
+
```ts
|
|
211
|
+
import { UX4GChipModule } from 'ux4g-components-angular/chip';
|
|
212
|
+
|
|
213
|
+
@NgModule({ imports: [UX4GChipModule] })
|
|
214
|
+
export class AppModule {}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
```html
|
|
218
|
+
<ux4g-chip chipType="filter" size="md">Category</ux4g-chip>
|
|
219
|
+
<ux4g-chip chipType="choice" size="sm" [active]="true">Selected</ux4g-chip>
|
|
220
|
+
<ux4g-chip chipType="input" size="xs">Tag</ux4g-chip>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
| Input | Type | Default | Description |
|
|
224
|
+
|---|---|---|---|
|
|
225
|
+
| `chipType` | `'filter' \| 'choice' \| 'input'` | `'filter'` | Chip type |
|
|
226
|
+
| `size` | `'md' \| 'sm' \| 'xs'` | `'md'` | Chip size (xs only for input) |
|
|
227
|
+
| `active` | `boolean` | `false` | Active/selected state |
|
|
228
|
+
|
|
229
|
+
### Tag
|
|
230
|
+
|
|
231
|
+
```ts
|
|
232
|
+
import { UX4GTagModule } from 'ux4g-components-angular/tag';
|
|
233
|
+
|
|
234
|
+
@NgModule({ imports: [UX4GTagModule] })
|
|
235
|
+
export class AppModule {}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
```html
|
|
239
|
+
<ux4g-tag variant="tonal" color="neutral">Default</ux4g-tag>
|
|
240
|
+
<ux4g-tag variant="filled" color="success" [small]="true">Active</ux4g-tag>
|
|
241
|
+
<ux4g-tag variant="outline" color="error">Error</ux4g-tag>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
| Input | Type | Default | Description |
|
|
245
|
+
|---|---|---|---|
|
|
246
|
+
| `variant` | `'tonal' \| 'filled' \| 'outline' \| 'text'` | `'tonal'` | Tag style |
|
|
247
|
+
| `color` | `'neutral' \| 'brand' \| 'success' \| 'warning' \| 'error' \| 'info'` | `'neutral'` | Tag color |
|
|
248
|
+
| `small` | `boolean` | `false` | Small size |
|
|
249
|
+
|
|
250
|
+
### Divider
|
|
251
|
+
|
|
252
|
+
```ts
|
|
253
|
+
import { UX4GDividerModule } from 'ux4g-components-angular/divider';
|
|
254
|
+
|
|
255
|
+
@NgModule({ imports: [UX4GDividerModule] })
|
|
256
|
+
export class AppModule {}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
```html
|
|
260
|
+
<ux4g-divider orientation="horizontal"></ux4g-divider>
|
|
261
|
+
<ux4g-divider orientation="vertical"></ux4g-divider>
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
| Input | Type | Default | Description |
|
|
265
|
+
|---|---|---|---|
|
|
266
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Divider direction |
|
|
267
|
+
|
|
268
|
+
### Breadcrumb
|
|
269
|
+
|
|
270
|
+
```ts
|
|
271
|
+
import { UX4GBreadcrumbModule } from 'ux4g-components-angular/breadcrumb';
|
|
272
|
+
|
|
273
|
+
@NgModule({ imports: [UX4GBreadcrumbModule] })
|
|
274
|
+
export class AppModule {}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
```html
|
|
278
|
+
<ux4g-breadcrumb separator="divider">
|
|
279
|
+
<a href="#">Home</a>
|
|
280
|
+
<a href="#">Products</a>
|
|
281
|
+
<span>Current</span>
|
|
282
|
+
</ux4g-breadcrumb>
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
| Input | Type | Default | Description |
|
|
286
|
+
|---|---|---|---|
|
|
287
|
+
| `separator` | `'divider' \| 'icon'` | `'divider'` | Separator style |
|
|
288
|
+
|
|
289
|
+
### Checkbox
|
|
290
|
+
|
|
291
|
+
```ts
|
|
292
|
+
import { UX4GCheckboxModule } from 'ux4g-components-angular/checkbox';
|
|
293
|
+
|
|
294
|
+
@NgModule({ imports: [UX4GCheckboxModule] })
|
|
295
|
+
export class AppModule {}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
```html
|
|
299
|
+
<ux4g-checkbox size="md" label="Accept terms"></ux4g-checkbox>
|
|
300
|
+
<ux4g-checkbox size="sm" [error]="true" label="Required field"></ux4g-checkbox>
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
| Input | Type | Default | Description |
|
|
304
|
+
|---|---|---|---|
|
|
305
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Checkbox size |
|
|
306
|
+
| `error` | `boolean` | `false` | Error state |
|
|
307
|
+
|
|
308
|
+
### Radio
|
|
309
|
+
|
|
310
|
+
```ts
|
|
311
|
+
import { UX4GRadioModule } from 'ux4g-components-angular/radio';
|
|
312
|
+
|
|
313
|
+
@NgModule({ imports: [UX4GRadioModule] })
|
|
314
|
+
export class AppModule {}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
```html
|
|
318
|
+
<ux4g-radio size="md" name="option" label="Option A"></ux4g-radio>
|
|
319
|
+
<ux4g-radio size="lg" name="option" label="Option B" [error]="true"></ux4g-radio>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
| Input | Type | Default | Description |
|
|
323
|
+
|---|---|---|---|
|
|
324
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Radio size |
|
|
325
|
+
| `error` | `boolean` | `false` | Error state |
|
|
326
|
+
|
|
327
|
+
### Switch
|
|
328
|
+
|
|
329
|
+
```ts
|
|
330
|
+
import { UX4GSwitchModule } from 'ux4g-components-angular/switch';
|
|
331
|
+
|
|
332
|
+
@NgModule({ imports: [UX4GSwitchModule] })
|
|
333
|
+
export class AppModule {}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
```html
|
|
337
|
+
<ux4g-switch size="md" label="Enable notifications"></ux4g-switch>
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
| Input | Type | Default | Description |
|
|
341
|
+
|---|---|---|---|
|
|
342
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Switch size |
|
|
343
|
+
|
|
344
|
+
### Card
|
|
345
|
+
|
|
346
|
+
```ts
|
|
347
|
+
import { UX4GCardModule } from 'ux4g-components-angular/card';
|
|
348
|
+
|
|
349
|
+
@NgModule({ imports: [UX4GCardModule] })
|
|
350
|
+
export class AppModule {}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
```html
|
|
354
|
+
<ux4g-card variant="solid" layout="vertical">
|
|
355
|
+
<h3>Card Title</h3>
|
|
356
|
+
<p>Card content goes here.</p>
|
|
357
|
+
</ux4g-card>
|
|
358
|
+
|
|
359
|
+
<ux4g-card variant="outline" layout="horizontal">
|
|
360
|
+
<img src="thumb.jpg" alt="" />
|
|
361
|
+
<p>Horizontal card</p>
|
|
362
|
+
</ux4g-card>
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
| Input | Type | Default | Description |
|
|
366
|
+
|---|---|---|---|
|
|
367
|
+
| `variant` | `'solid' \| 'outline' \| 'no-fill'` | `'solid'` | Card style |
|
|
368
|
+
| `layout` | `'vertical' \| 'horizontal'` | `'vertical'` | Card layout |
|
|
369
|
+
|
|
370
|
+
### Input
|
|
371
|
+
|
|
372
|
+
```ts
|
|
373
|
+
import { UX4GInputModule } from 'ux4g-components-angular/input';
|
|
374
|
+
|
|
375
|
+
@NgModule({ imports: [UX4GInputModule] })
|
|
376
|
+
export class AppModule {}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
```html
|
|
380
|
+
<ux4g-input size="md" state="default" label="Email" placeholder="Enter email"></ux4g-input>
|
|
381
|
+
<ux4g-input size="lg" state="error" label="Password" helperText="Password is required"></ux4g-input>
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
| Input | Type | Default | Description |
|
|
385
|
+
|---|---|---|---|
|
|
386
|
+
| `size` | `'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Input size |
|
|
387
|
+
| `state` | `'default' \| 'error' \| 'success' \| 'warning'` | `'default'` | Validation state |
|
|
388
|
+
|
|
389
|
+
### List
|
|
390
|
+
|
|
391
|
+
```ts
|
|
392
|
+
import { UX4GListModule } from 'ux4g-components-angular/list';
|
|
393
|
+
|
|
394
|
+
@NgModule({ imports: [UX4GListModule] })
|
|
395
|
+
export class AppModule {}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
```html
|
|
399
|
+
<ux4g-list variant="default" size="m">
|
|
400
|
+
<li>Item one</li>
|
|
401
|
+
<li>Item two</li>
|
|
402
|
+
</ux4g-list>
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
| Input | Type | Default | Description |
|
|
406
|
+
|---|---|---|---|
|
|
407
|
+
| `variant` | `'default' \| 'error' \| 'success' \| 'warning'` | `'default'` | List style |
|
|
408
|
+
| `size` | `'s' \| 'm' \| 'l' \| 'xl'` | `'m'` | List size |
|
|
409
|
+
|
|
410
|
+
### Dropdown
|
|
411
|
+
|
|
412
|
+
```ts
|
|
413
|
+
import { UX4GDropdownModule } from 'ux4g-components-angular/dropdown';
|
|
414
|
+
|
|
415
|
+
@NgModule({ imports: [UX4GDropdownModule] })
|
|
416
|
+
export class AppModule {}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
```html
|
|
420
|
+
<ux4g-dropdown type="selection" mode="single" size="md" state="default">
|
|
421
|
+
<ux4g-dropdown-item value="1">Option 1</ux4g-dropdown-item>
|
|
422
|
+
<ux4g-dropdown-item value="2">Option 2</ux4g-dropdown-item>
|
|
423
|
+
</ux4g-dropdown>
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
| Input | Type | Default | Description |
|
|
427
|
+
|---|---|---|---|
|
|
428
|
+
| `type` | `'selection' \| 'button' \| 'overflow'` | `'selection'` | Dropdown type |
|
|
429
|
+
| `mode` | `'single' \| 'multi'` | `'single'` | Selection mode |
|
|
430
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Dropdown size |
|
|
431
|
+
| `state` | `'default' \| 'error' \| 'success' \| 'warning'` | `'default'` | Validation state |
|
|
432
|
+
| `open` | `boolean` | `false` | Open state |
|
|
433
|
+
|
|
434
|
+
### Combobox
|
|
435
|
+
|
|
436
|
+
```ts
|
|
437
|
+
import { UX4GComboboxModule } from 'ux4g-components-angular/combobox';
|
|
438
|
+
|
|
439
|
+
@NgModule({ imports: [UX4GComboboxModule] })
|
|
440
|
+
export class AppModule {}
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
```html
|
|
444
|
+
<ux4g-combobox type="single" size="md" state="default" placeholder="Search..."></ux4g-combobox>
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
| Input | Type | Default | Description |
|
|
448
|
+
|---|---|---|---|
|
|
449
|
+
| `type` | `'single' \| 'multi'` | `'single'` | Combobox type |
|
|
450
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Combobox size |
|
|
451
|
+
| `state` | `'default' \| 'error' \| 'success' \| 'warning'` | `'default'` | Validation state |
|
|
452
|
+
| `open` | `boolean` | `false` | Open state |
|
|
453
|
+
|
|
454
|
+
### Modal
|
|
455
|
+
|
|
456
|
+
```ts
|
|
457
|
+
import { UX4GModalModule } from 'ux4g-components-angular/modal';
|
|
458
|
+
|
|
459
|
+
@NgModule({ imports: [UX4GModalModule] })
|
|
460
|
+
export class AppModule {}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
```html
|
|
464
|
+
<ux4g-modal size="m" opacity="50" [open]="isOpen" (closed)="isOpen = false">
|
|
465
|
+
<h2>Modal Title</h2>
|
|
466
|
+
<p>Modal content here.</p>
|
|
467
|
+
</ux4g-modal>
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
| Input | Type | Default | Description |
|
|
471
|
+
|---|---|---|---|
|
|
472
|
+
| `size` | `'s' \| 'm' \| 'l'` | `'m'` | Modal size |
|
|
473
|
+
| `opacity` | `'25' \| '50' \| '75'` | `'50'` | Backdrop opacity |
|
|
474
|
+
| `blur` | `boolean` | `false` | Backdrop blur |
|
|
475
|
+
| `open` | `boolean` | `false` | Open state |
|
|
476
|
+
| `centerContent` | `boolean` | `false` | Center modal content |
|
|
477
|
+
|
|
478
|
+
| Output | Type | Description |
|
|
479
|
+
|---|---|---|
|
|
480
|
+
| `closed` | `EventEmitter<void>` | Emitted when modal is closed |
|
|
481
|
+
|
|
482
|
+
### Alert / Toast
|
|
483
|
+
|
|
484
|
+
```ts
|
|
485
|
+
import { UX4GAlertModule } from 'ux4g-components-angular/alert';
|
|
486
|
+
|
|
487
|
+
@NgModule({ imports: [UX4GAlertModule] })
|
|
488
|
+
export class AppModule {}
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
```html
|
|
492
|
+
<ux4g-alert variant="info">This is an informational message.</ux4g-alert>
|
|
493
|
+
<ux4g-alert variant="success" layout="wide">Saved successfully!</ux4g-alert>
|
|
494
|
+
|
|
495
|
+
<ux4g-alert-container position="top-right">
|
|
496
|
+
<ux4g-alert variant="success">Toast notification</ux4g-alert>
|
|
497
|
+
</ux4g-alert-container>
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
| Input | Type | Default | Description |
|
|
501
|
+
|---|---|---|---|
|
|
502
|
+
| `variant` | `'info' \| 'success' \| 'warning' \| 'error'` | `'info'` | Alert type |
|
|
503
|
+
| `layout` | `'fluid' \| 'center' \| 'wide'` | `'fluid'` | Alert layout |
|
|
504
|
+
|
|
505
|
+
**AlertContainer Inputs:**
|
|
506
|
+
|
|
507
|
+
| Input | Type | Default | Description |
|
|
508
|
+
|---|---|---|---|
|
|
509
|
+
| `position` | `'top-left' \| 'top-right' \| 'bottom-left' \| 'bottom-right'` | `'top-right'` | Container position |
|
|
510
|
+
|
|
511
|
+
### Search
|
|
512
|
+
|
|
513
|
+
```ts
|
|
514
|
+
import { UX4GSearchModule } from 'ux4g-components-angular/search';
|
|
515
|
+
|
|
516
|
+
@NgModule({ imports: [UX4GSearchModule] })
|
|
517
|
+
export class AppModule {}
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
```html
|
|
521
|
+
<ux4g-search size="m" placeholder="Search..." (searched)="onSearch($event)"></ux4g-search>
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
| Input | Type | Default | Description |
|
|
525
|
+
|---|---|---|---|
|
|
526
|
+
| `size` | `'s' \| 'm' \| 'lg'` | `'m'` | Search size |
|
|
527
|
+
|
|
528
|
+
| Output | Type | Description |
|
|
529
|
+
|---|---|---|
|
|
530
|
+
| `searched` | `EventEmitter<string>` | Emitted on search submit |
|
|
531
|
+
|
|
532
|
+
### Pagination
|
|
533
|
+
|
|
534
|
+
```ts
|
|
535
|
+
import { UX4GPaginationModule } from 'ux4g-components-angular/pagination';
|
|
536
|
+
|
|
537
|
+
@NgModule({ imports: [UX4GPaginationModule] })
|
|
538
|
+
export class AppModule {}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
```html
|
|
542
|
+
<ux4g-pagination variant="default" [totalPages]="10" [currentPage]="1" (pageChanged)="onPage($event)"></ux4g-pagination>
|
|
543
|
+
<ux4g-pagination variant="dotted" paginationStyle="solid" [totalPages]="5" [currentPage]="2"></ux4g-pagination>
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
| Input | Type | Default | Description |
|
|
547
|
+
|---|---|---|---|
|
|
548
|
+
| `variant` | `'default' \| 'dotted'` | `'default'` | Pagination style |
|
|
549
|
+
| `paginationStyle` | `'default' \| 'solid' \| 'translucent'` | `'default'` | Dotted variant style |
|
|
550
|
+
|
|
551
|
+
| Output | Type | Description |
|
|
552
|
+
|---|---|---|
|
|
553
|
+
| `pageChanged` | `EventEmitter<number>` | Emitted on page change |
|
|
554
|
+
|
|
555
|
+
### Table
|
|
556
|
+
|
|
557
|
+
```ts
|
|
558
|
+
import { UX4GTableModule } from 'ux4g-components-angular/table';
|
|
559
|
+
|
|
560
|
+
@NgModule({ imports: [UX4GTableModule] })
|
|
561
|
+
export class AppModule {}
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
```html
|
|
565
|
+
<ux4g-table size="m" divider="row" [interactive]="true">
|
|
566
|
+
<thead>
|
|
567
|
+
<tr><th>Name</th><th>Email</th></tr>
|
|
568
|
+
</thead>
|
|
569
|
+
<tbody>
|
|
570
|
+
<tr><td>Alice</td><td>alice@example.com</td></tr>
|
|
571
|
+
</tbody>
|
|
572
|
+
</ux4g-table>
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
| Input | Type | Default | Description |
|
|
576
|
+
|---|---|---|---|
|
|
577
|
+
| `size` | `'s' \| 'm' \| 'lg'` | `'m'` | Table size |
|
|
578
|
+
| `divider` | `'row' \| 'column' \| 'none'` | `'row'` | Divider style |
|
|
579
|
+
| `zebra` | `'none' \| 'rows' \| 'cols'` | `'none'` | Zebra striping |
|
|
580
|
+
| `interactive` | `boolean` | `false` | Hover highlight |
|
|
581
|
+
| `sortable` | `boolean` | `false` | Sortable columns |
|
|
582
|
+
| `resizable` | `boolean` | `false` | Resizable columns |
|
|
583
|
+
| `headerBrand` | `boolean` | `false` | Brand-colored header |
|
|
584
|
+
|
|
585
|
+
### Popover
|
|
586
|
+
|
|
587
|
+
```ts
|
|
588
|
+
import { UX4GPopoverModule } from 'ux4g-components-angular/popover';
|
|
589
|
+
|
|
590
|
+
@NgModule({ imports: [UX4GPopoverModule] })
|
|
591
|
+
export class AppModule {}
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
```html
|
|
595
|
+
<ux4g-popover placement="right" title="Popover Title" content="Body text" [show]="showPopover">
|
|
596
|
+
<button>Toggle Popover</button>
|
|
597
|
+
</ux4g-popover>
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
| Input | Type | Default | Description |
|
|
601
|
+
|---|---|---|---|
|
|
602
|
+
| `placement` | `'top' \| 'top-start' \| 'top-end' \| 'bottom' \| 'bottom-start' \| 'bottom-end' \| 'left' \| 'left-start' \| 'left-end' \| 'right' \| 'right-start' \| 'right-end'` | `'bottom'` | Popover position |
|
|
603
|
+
| `show` | `boolean` | `false` | Visibility |
|
|
604
|
+
|
|
605
|
+
### Tooltip
|
|
606
|
+
|
|
607
|
+
```ts
|
|
608
|
+
import { UX4GTooltipModule } from 'ux4g-components-angular/tooltip';
|
|
609
|
+
|
|
610
|
+
@NgModule({ imports: [UX4GTooltipModule] })
|
|
611
|
+
export class AppModule {}
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
```html
|
|
615
|
+
<ux4g-tooltip placement="top-center" size="s" content="Tooltip text">
|
|
616
|
+
<button>Hover me</button>
|
|
617
|
+
</ux4g-tooltip>
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
| Input | Type | Default | Description |
|
|
621
|
+
|---|---|---|---|
|
|
622
|
+
| `placement` | `'top-left' \| 'top-center' \| 'top-right' \| 'bottom-left' \| 'bottom-center' \| 'bottom-right' \| 'left-center' \| 'right-center'` | `'top-center'` | Tooltip position |
|
|
623
|
+
| `size` | `'s' \| 'xs'` | `'s'` | Tooltip size |
|
|
624
|
+
|
|
625
|
+
### Tab
|
|
626
|
+
|
|
627
|
+
```ts
|
|
628
|
+
import { UX4GTabModule } from 'ux4g-components-angular/tab';
|
|
629
|
+
|
|
630
|
+
@NgModule({ imports: [UX4GTabModule] })
|
|
631
|
+
export class AppModule {}
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
```html
|
|
635
|
+
<ux4g-tab variant="underline" size="md">
|
|
636
|
+
<ux4g-tab-item label="Tab 1" [active]="true">Content 1</ux4g-tab-item>
|
|
637
|
+
<ux4g-tab-item label="Tab 2">Content 2</ux4g-tab-item>
|
|
638
|
+
</ux4g-tab>
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
| Input | Type | Default | Description |
|
|
642
|
+
|---|---|---|---|
|
|
643
|
+
| `variant` | `'underline' \| 'pill'` | `'underline'` | Tab style |
|
|
644
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Tab size |
|
|
645
|
+
| `vertical` | `boolean` | `false` | Vertical layout |
|
|
646
|
+
|
|
647
|
+
### Icon Button
|
|
648
|
+
|
|
649
|
+
```ts
|
|
650
|
+
import { UX4GIconButtonModule } from 'ux4g-components-angular/icon-button';
|
|
651
|
+
|
|
652
|
+
@NgModule({ imports: [UX4GIconButtonModule] })
|
|
653
|
+
export class AppModule {}
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
```html
|
|
657
|
+
<ux4g-icon-button variant="primary" size="md" aria-label="Edit">
|
|
658
|
+
<i class="ux4g-icon-edit"></i>
|
|
659
|
+
</ux4g-icon-button>
|
|
660
|
+
|
|
661
|
+
<ux4g-icon-button variant="tonal-primary" size="lg" [pill]="true" aria-label="Add">
|
|
662
|
+
<i class="ux4g-icon-plus"></i>
|
|
663
|
+
</ux4g-icon-button>
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
| Input | Type | Default | Description |
|
|
667
|
+
|---|---|---|---|
|
|
668
|
+
| `variant` | `'primary' \| 'outline-primary' \| 'tonal-primary' \| 'text-primary'` | `'primary'` | Button style |
|
|
669
|
+
| `size` | `'xl' \| 'lg' \| 'md' \| 'sm' \| 'xs'` | `'md'` | Button size |
|
|
670
|
+
| `pill` | `boolean` | `false` | Pill shape |
|
|
671
|
+
|
|
672
|
+
### Accessibility Bar
|
|
673
|
+
|
|
674
|
+
```ts
|
|
675
|
+
import { UX4GAccessibilityBarModule } from 'ux4g-components-angular/accessibility-bar';
|
|
676
|
+
|
|
677
|
+
@NgModule({ imports: [UX4GAccessibilityBarModule] })
|
|
678
|
+
export class AppModule {}
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
```html
|
|
682
|
+
<ux4g-accessibility-bar>
|
|
683
|
+
<a href="#main-content">Skip to main content</a>
|
|
684
|
+
</ux4g-accessibility-bar>
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
### Accordion
|
|
688
|
+
|
|
689
|
+
```ts
|
|
690
|
+
import { UX4GAccordionModule } from 'ux4g-components-angular/accordion';
|
|
691
|
+
|
|
692
|
+
@NgModule({ imports: [UX4GAccordionModule] })
|
|
693
|
+
export class AppModule {}
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
```html
|
|
697
|
+
<ux4g-accordion arrowPosition="right" variant="default">
|
|
698
|
+
<ux4g-accordion-item title="Section 1">Content 1</ux4g-accordion-item>
|
|
699
|
+
<ux4g-accordion-item title="Section 2">Content 2</ux4g-accordion-item>
|
|
700
|
+
</ux4g-accordion>
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
| Input | Type | Default | Description |
|
|
704
|
+
|---|---|---|---|
|
|
705
|
+
| `arrowPosition` | `'right' \| 'left'` | `'right'` | Arrow icon position |
|
|
706
|
+
| `variant` | `'default' \| 'bordered'` | `'default'` | Accordion style |
|
|
707
|
+
|
|
708
|
+
### Stepper
|
|
709
|
+
|
|
710
|
+
```ts
|
|
711
|
+
import { UX4GStepperModule } from 'ux4g-components-angular/stepper';
|
|
712
|
+
|
|
713
|
+
@NgModule({ imports: [UX4GStepperModule] })
|
|
714
|
+
export class AppModule {}
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
```html
|
|
718
|
+
<ux4g-stepper orientation="horizontal" alignment="center">
|
|
719
|
+
<ux4g-stepper-step status="completed">Step 1</ux4g-stepper-step>
|
|
720
|
+
<ux4g-stepper-step status="active">Step 2</ux4g-stepper-step>
|
|
721
|
+
<ux4g-stepper-step>Step 3</ux4g-stepper-step>
|
|
722
|
+
</ux4g-stepper>
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
| Input | Type | Default | Description |
|
|
726
|
+
|---|---|---|---|
|
|
727
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Layout direction |
|
|
728
|
+
| `alignment` | `'default' \| 'center' \| 'left'` | `'default'` | Horizontal alignment |
|
|
729
|
+
| `variant` | `'default' \| 'bottom-line' \| 'bottom-line-fill' \| 'mobile' \| 'progress'` | `'default'` | Stepper style |
|
|
730
|
+
| `size` | `'default' \| 's'` | `'default'` | Stepper size |
|
|
731
|
+
|
|
732
|
+
### Slider
|
|
733
|
+
|
|
734
|
+
```ts
|
|
735
|
+
import { UX4GSliderModule } from 'ux4g-components-angular/slider';
|
|
736
|
+
|
|
737
|
+
@NgModule({ imports: [UX4GSliderModule] })
|
|
738
|
+
export class AppModule {}
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
```html
|
|
742
|
+
<ux4g-slider size="sm" [min]="0" [max]="100" [value]="50"></ux4g-slider>
|
|
743
|
+
<ux4g-slider size="md" [min]="0" [max]="100" [value]="75"></ux4g-slider>
|
|
744
|
+
```
|
|
745
|
+
|
|
746
|
+
| Input | Type | Default | Description |
|
|
747
|
+
|---|---|---|---|
|
|
748
|
+
| `size` | `'sm' \| 'md'` | `'sm'` | Slider size |
|
|
749
|
+
|
|
750
|
+
### Drawer
|
|
751
|
+
|
|
752
|
+
```ts
|
|
753
|
+
import { UX4GDrawerModule } from 'ux4g-components-angular/drawer';
|
|
754
|
+
|
|
755
|
+
@NgModule({ imports: [UX4GDrawerModule] })
|
|
756
|
+
export class AppModule {}
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
```html
|
|
760
|
+
<ux4g-drawer placement="right" [open]="isOpen" (closed)="isOpen = false">
|
|
761
|
+
<h3>Drawer Title</h3>
|
|
762
|
+
<p>Drawer content</p>
|
|
763
|
+
</ux4g-drawer>
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
| Input | Type | Default | Description |
|
|
767
|
+
|---|---|---|---|
|
|
768
|
+
| `placement` | `'right' \| 'left' \| 'top' \| 'bottom'` | `'right'` | Slide-in direction |
|
|
769
|
+
| `open` | `boolean` | `false` | Open state |
|
|
770
|
+
|
|
771
|
+
| Output | Type | Description |
|
|
772
|
+
|---|---|---|
|
|
773
|
+
| `closed` | `EventEmitter<void>` | Emitted when drawer is closed |
|
|
774
|
+
|
|
775
|
+
### Date-Time Picker
|
|
776
|
+
|
|
777
|
+
```ts
|
|
778
|
+
import { UX4GDateTimePickerModule } from 'ux4g-components-angular/date-time-picker';
|
|
779
|
+
|
|
780
|
+
@NgModule({ imports: [UX4GDateTimePickerModule] })
|
|
781
|
+
export class AppModule {}
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
```html
|
|
785
|
+
<ux4g-date-time-picker mode="date"></ux4g-date-time-picker>
|
|
786
|
+
<ux4g-date-time-picker mode="time"></ux4g-date-time-picker>
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
| Input | Type | Default | Description |
|
|
790
|
+
|---|---|---|---|
|
|
791
|
+
| `mode` | `'date' \| 'time'` | `'date'` | Picker mode |
|
|
792
|
+
|
|
793
|
+
### Status Pipeline
|
|
794
|
+
|
|
795
|
+
```ts
|
|
796
|
+
import { UX4GStatusPipelineModule } from 'ux4g-components-angular/status-pipeline';
|
|
797
|
+
|
|
798
|
+
@NgModule({ imports: [UX4GStatusPipelineModule] })
|
|
799
|
+
export class AppModule {}
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
```html
|
|
803
|
+
<ux4g-status-pipeline orientation="horizontal" alignment="center">
|
|
804
|
+
<ux4g-status-pipeline-step status="completed">Submitted</ux4g-status-pipeline-step>
|
|
805
|
+
<ux4g-status-pipeline-step status="active">In Review</ux4g-status-pipeline-step>
|
|
806
|
+
<ux4g-status-pipeline-step>Approved</ux4g-status-pipeline-step>
|
|
807
|
+
</ux4g-status-pipeline>
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
| Input | Type | Default | Description |
|
|
811
|
+
|---|---|---|---|
|
|
812
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Layout direction |
|
|
813
|
+
| `alignment` | `'default' \| 'center' \| 'left'` | `'default'` | Horizontal alignment |
|
|
814
|
+
| `variant` | `'default' \| 'bottom-line' \| 'bottom-line-fill' \| 'mobile' \| 'progress'` | `'default'` | Pipeline style |
|
|
815
|
+
| `size` | `'default' \| 's'` | `'default'` | Pipeline size |
|
|
816
|
+
|
|
817
|
+
### Journey Timeline
|
|
818
|
+
|
|
819
|
+
```ts
|
|
820
|
+
import { UX4GJourneyTimelineModule } from 'ux4g-components-angular/journey-timeline';
|
|
821
|
+
|
|
822
|
+
@NgModule({ imports: [UX4GJourneyTimelineModule] })
|
|
823
|
+
export class AppModule {}
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
```html
|
|
827
|
+
<ux4g-journey-timeline orientation="vertical">
|
|
828
|
+
<ux4g-journey-timeline-item>Event 1</ux4g-journey-timeline-item>
|
|
829
|
+
<ux4g-journey-timeline-item>Event 2</ux4g-journey-timeline-item>
|
|
830
|
+
</ux4g-journey-timeline>
|
|
831
|
+
```
|
|
832
|
+
|
|
833
|
+
| Input | Type | Default | Description |
|
|
834
|
+
|---|---|---|---|
|
|
835
|
+
| `orientation` | `'vertical' \| 'horizontal'` | `'vertical'` | Timeline direction |
|
|
836
|
+
|
|
837
|
+
### Form Field Group
|
|
838
|
+
|
|
839
|
+
```ts
|
|
840
|
+
import { UX4GFormFieldGroupModule } from 'ux4g-components-angular/form-field-group';
|
|
841
|
+
|
|
842
|
+
@NgModule({ imports: [UX4GFormFieldGroupModule] })
|
|
843
|
+
export class AppModule {}
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
```html
|
|
847
|
+
<ux4g-form-field-group>
|
|
848
|
+
<label>Full Name</label>
|
|
849
|
+
<input type="text" />
|
|
850
|
+
<span>Enter your full legal name</span>
|
|
851
|
+
</ux4g-form-field-group>
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
### OTP Input
|
|
855
|
+
|
|
856
|
+
```ts
|
|
857
|
+
import { UX4GOtpInputModule } from 'ux4g-components-angular/otp-input';
|
|
858
|
+
|
|
859
|
+
@NgModule({ imports: [UX4GOtpInputModule] })
|
|
860
|
+
export class AppModule {}
|
|
861
|
+
```
|
|
862
|
+
|
|
863
|
+
```html
|
|
864
|
+
<ux4g-otp-input [length]="4" state="default"></ux4g-otp-input>
|
|
865
|
+
<ux4g-otp-input [length]="6" state="error"></ux4g-otp-input>
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
| Input | Type | Default | Description |
|
|
869
|
+
|---|---|---|---|
|
|
870
|
+
| `state` | `'default' \| 'success' \| 'error' \| 'locked'` | `'default'` | Input state |
|
|
871
|
+
|
|
872
|
+
### File Upload
|
|
873
|
+
|
|
874
|
+
```ts
|
|
875
|
+
import { UX4GFileUploadModule } from 'ux4g-components-angular/file-upload';
|
|
876
|
+
|
|
877
|
+
@NgModule({ imports: [UX4GFileUploadModule] })
|
|
878
|
+
export class AppModule {}
|
|
879
|
+
```
|
|
880
|
+
|
|
881
|
+
```html
|
|
882
|
+
<ux4g-file-upload state="default"></ux4g-file-upload>
|
|
883
|
+
<ux4g-file-upload state="uploaded" fileName="document.pdf"></ux4g-file-upload>
|
|
884
|
+
```
|
|
885
|
+
|
|
886
|
+
| Input | Type | Default | Description |
|
|
887
|
+
|---|---|---|---|
|
|
888
|
+
| `state` | `'default' \| 'default-vle' \| 'selecting' \| 'scanning' \| 'uploaded' \| 'uploaded-vle' \| 'error'` | `'default'` | Upload state |
|
|
889
|
+
|
|
890
|
+
### Progress Indicator
|
|
891
|
+
|
|
892
|
+
```ts
|
|
893
|
+
import { UX4GProgressIndicatorModule } from 'ux4g-components-angular/progress-indicator';
|
|
894
|
+
|
|
895
|
+
@NgModule({ imports: [UX4GProgressIndicatorModule] })
|
|
896
|
+
export class AppModule {}
|
|
897
|
+
```
|
|
898
|
+
|
|
899
|
+
```html
|
|
900
|
+
<ux4g-progress-indicator type="bar" [value]="60"></ux4g-progress-indicator>
|
|
901
|
+
<ux4g-progress-indicator type="circle" [value]="75" size="l"></ux4g-progress-indicator>
|
|
902
|
+
```
|
|
903
|
+
|
|
904
|
+
| Input | Type | Default | Description |
|
|
905
|
+
|---|---|---|---|
|
|
906
|
+
| `type` | `'bar' \| 'circle'` | `'bar'` | Indicator type |
|
|
907
|
+
| `size` | `'xs' \| 's' \| 'm' \| 'l' \| 'xl' \| '2xl' \| '3xl'` | `'m'` | Circle size |
|
|
908
|
+
|
|
909
|
+
### Feedback
|
|
910
|
+
|
|
911
|
+
```ts
|
|
912
|
+
import { UX4GFeedbackModule } from 'ux4g-components-angular/feedback';
|
|
913
|
+
|
|
914
|
+
@NgModule({ imports: [UX4GFeedbackModule] })
|
|
915
|
+
export class AppModule {}
|
|
916
|
+
```
|
|
917
|
+
|
|
918
|
+
```html
|
|
919
|
+
<ux4g-feedback>
|
|
920
|
+
<p>Was this helpful?</p>
|
|
921
|
+
<button>Yes</button>
|
|
922
|
+
<button>No</button>
|
|
923
|
+
</ux4g-feedback>
|
|
924
|
+
```
|
|
925
|
+
|
|
926
|
+
### Draft Status Banner
|
|
927
|
+
|
|
928
|
+
```ts
|
|
929
|
+
import { UX4GDraftStatusBannerModule } from 'ux4g-components-angular/draft-status-banner';
|
|
930
|
+
|
|
931
|
+
@NgModule({ imports: [UX4GDraftStatusBannerModule] })
|
|
932
|
+
export class AppModule {}
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
```html
|
|
936
|
+
<ux4g-draft-status-banner variant="default">Draft saved</ux4g-draft-status-banner>
|
|
937
|
+
<ux4g-draft-status-banner variant="auto">Auto-saving...</ux4g-draft-status-banner>
|
|
938
|
+
<ux4g-draft-status-banner variant="success">Published</ux4g-draft-status-banner>
|
|
939
|
+
```
|
|
940
|
+
|
|
941
|
+
| Input | Type | Default | Description |
|
|
942
|
+
|---|---|---|---|
|
|
943
|
+
| `variant` | `'default' \| 'auto' \| 'success'` | `'default'` | Banner style |
|
|
944
|
+
|
|
945
|
+
### SLA Progress Indicator
|
|
946
|
+
|
|
947
|
+
```ts
|
|
948
|
+
import { UX4GSlaProgressIndicatorModule } from 'ux4g-components-angular/sla-progress-indicator';
|
|
949
|
+
|
|
950
|
+
@NgModule({ imports: [UX4GSlaProgressIndicatorModule] })
|
|
951
|
+
export class AppModule {}
|
|
952
|
+
```
|
|
953
|
+
|
|
954
|
+
```html
|
|
955
|
+
<ux4g-sla-progress-indicator type="circle" [value]="75"></ux4g-sla-progress-indicator>
|
|
956
|
+
<ux4g-sla-progress-indicator type="linear" [value]="50"></ux4g-sla-progress-indicator>
|
|
957
|
+
<ux4g-sla-progress-indicator type="badge">On Track</ux4g-sla-progress-indicator>
|
|
958
|
+
```
|
|
959
|
+
|
|
960
|
+
| Input | Type | Default | Description |
|
|
961
|
+
|---|---|---|---|
|
|
962
|
+
| `type` | `'circle' \| 'linear' \| 'badge'` | `'circle'` | Indicator type |
|
|
963
|
+
|
|
964
|
+
### Carousel
|
|
965
|
+
|
|
966
|
+
```ts
|
|
967
|
+
import { UX4GCarouselModule } from 'ux4g-components-angular/carousel';
|
|
968
|
+
|
|
969
|
+
@NgModule({ imports: [UX4GCarouselModule] })
|
|
970
|
+
export class AppModule {}
|
|
971
|
+
```
|
|
972
|
+
|
|
973
|
+
```html
|
|
974
|
+
<ux4g-carousel>
|
|
975
|
+
<ux4g-carousel-item>Slide 1</ux4g-carousel-item>
|
|
976
|
+
<ux4g-carousel-item>Slide 2</ux4g-carousel-item>
|
|
977
|
+
<ux4g-carousel-item>Slide 3</ux4g-carousel-item>
|
|
978
|
+
</ux4g-carousel>
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
### Empty State
|
|
982
|
+
|
|
983
|
+
```ts
|
|
984
|
+
import { UX4GEmptyStateModule } from 'ux4g-components-angular/empty-state';
|
|
985
|
+
|
|
986
|
+
@NgModule({ imports: [UX4GEmptyStateModule] })
|
|
987
|
+
export class AppModule {}
|
|
988
|
+
```
|
|
989
|
+
|
|
990
|
+
```html
|
|
991
|
+
<ux4g-empty-state>
|
|
992
|
+
<img src="empty.svg" alt="" />
|
|
993
|
+
<h3>No results found</h3>
|
|
994
|
+
<p>Try adjusting your search.</p>
|
|
995
|
+
</ux4g-empty-state>
|
|
996
|
+
```
|
|
997
|
+
|
|
998
|
+
### Chip Group
|
|
999
|
+
|
|
1000
|
+
```ts
|
|
1001
|
+
import { UX4GChipGroupModule } from 'ux4g-components-angular/chip-group';
|
|
1002
|
+
|
|
1003
|
+
@NgModule({ imports: [UX4GChipGroupModule] })
|
|
1004
|
+
export class AppModule {}
|
|
1005
|
+
```
|
|
1006
|
+
|
|
1007
|
+
```html
|
|
1008
|
+
<ux4g-chip-group variant="filter">
|
|
1009
|
+
<ux4g-chip chipType="filter" size="md" [active]="true">All</ux4g-chip>
|
|
1010
|
+
<ux4g-chip chipType="filter" size="md">Category A</ux4g-chip>
|
|
1011
|
+
</ux4g-chip-group>
|
|
1012
|
+
```
|
|
1013
|
+
|
|
1014
|
+
| Input | Type | Default | Description |
|
|
1015
|
+
|---|---|---|---|
|
|
1016
|
+
| `variant` | `'filter' \| 'choice'` | `'filter'` | Group type |
|
|
1017
|
+
|
|
1018
|
+
### Navbar
|
|
1019
|
+
|
|
1020
|
+
```ts
|
|
1021
|
+
import { UX4GNavbarModule } from 'ux4g-components-angular/navbar';
|
|
1022
|
+
|
|
1023
|
+
@NgModule({ imports: [UX4GNavbarModule] })
|
|
1024
|
+
export class AppModule {}
|
|
1025
|
+
```
|
|
1026
|
+
|
|
1027
|
+
```html
|
|
1028
|
+
<ux4g-navbar>
|
|
1029
|
+
<a href="/">Logo</a>
|
|
1030
|
+
<nav>
|
|
1031
|
+
<a href="#">Home</a>
|
|
1032
|
+
<a href="#">About</a>
|
|
1033
|
+
</nav>
|
|
1034
|
+
</ux4g-navbar>
|
|
1035
|
+
```
|
|
1036
|
+
|
|
1037
|
+
### Social Links
|
|
1038
|
+
|
|
1039
|
+
```ts
|
|
1040
|
+
import { UX4GSocialLinksModule } from 'ux4g-components-angular/social-links';
|
|
1041
|
+
|
|
1042
|
+
@NgModule({ imports: [UX4GSocialLinksModule] })
|
|
1043
|
+
export class AppModule {}
|
|
1044
|
+
```
|
|
1045
|
+
|
|
1046
|
+
```html
|
|
1047
|
+
<ux4g-social-links size="md">
|
|
1048
|
+
<a href="#" aria-label="Twitter"><i class="ux4g-icon-twitter"></i></a>
|
|
1049
|
+
<a href="#" aria-label="LinkedIn"><i class="ux4g-icon-linkedin"></i></a>
|
|
1050
|
+
</ux4g-social-links>
|
|
1051
|
+
```
|
|
1052
|
+
|
|
1053
|
+
| Input | Type | Default | Description |
|
|
1054
|
+
|---|---|---|---|
|
|
1055
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Icon spacing size |
|
|
1056
|
+
|
|
1057
|
+
### Slot Grid
|
|
1058
|
+
|
|
1059
|
+
```ts
|
|
1060
|
+
import { UX4GSlotGridModule } from 'ux4g-components-angular/slot-grid';
|
|
1061
|
+
|
|
1062
|
+
@NgModule({ imports: [UX4GSlotGridModule] })
|
|
1063
|
+
export class AppModule {}
|
|
1064
|
+
```
|
|
1065
|
+
|
|
1066
|
+
```html
|
|
1067
|
+
<ux4g-slot-grid variant="weekly">
|
|
1068
|
+
<div>9:00 AM</div>
|
|
1069
|
+
<div>10:00 AM</div>
|
|
1070
|
+
</ux4g-slot-grid>
|
|
1071
|
+
|
|
1072
|
+
<ux4g-slot-grid variant="compact">
|
|
1073
|
+
<div>9:00</div>
|
|
1074
|
+
<div>9:30</div>
|
|
1075
|
+
</ux4g-slot-grid>
|
|
1076
|
+
```
|
|
1077
|
+
|
|
1078
|
+
| Input | Type | Default | Description |
|
|
1079
|
+
|---|---|---|---|
|
|
1080
|
+
| `variant` | `'weekly' \| 'compact'` | `'weekly'` | Grid layout |
|
|
1081
|
+
|
|
1082
|
+
### Footer
|
|
1083
|
+
|
|
1084
|
+
```ts
|
|
1085
|
+
import { UX4GFooterModule } from 'ux4g-components-angular/footer';
|
|
1086
|
+
|
|
1087
|
+
@NgModule({ imports: [UX4GFooterModule] })
|
|
1088
|
+
export class AppModule {}
|
|
1089
|
+
```
|
|
1090
|
+
|
|
1091
|
+
```html
|
|
1092
|
+
<ux4g-footer theme="primary">
|
|
1093
|
+
<p>© 2024 Company Name</p>
|
|
1094
|
+
</ux4g-footer>
|
|
1095
|
+
```
|
|
1096
|
+
|
|
1097
|
+
| Input | Type | Default | Description |
|
|
1098
|
+
|---|---|---|---|
|
|
1099
|
+
| `theme` | `'default' \| 'primary' \| 'dark'` | `'default'` | Footer theme |
|
|
1100
|
+
|
|
1101
|
+
### Result List Row
|
|
1102
|
+
|
|
1103
|
+
```ts
|
|
1104
|
+
import { UX4GResultListRowModule } from 'ux4g-components-angular/result-list-row';
|
|
1105
|
+
|
|
1106
|
+
@NgModule({ imports: [UX4GResultListRowModule] })
|
|
1107
|
+
export class AppModule {}
|
|
1108
|
+
```
|
|
1109
|
+
|
|
1110
|
+
```html
|
|
1111
|
+
<ux4g-result-list-row variation="default">
|
|
1112
|
+
<h4>Result Title</h4>
|
|
1113
|
+
<p>Description</p>
|
|
1114
|
+
</ux4g-result-list-row>
|
|
1115
|
+
```
|
|
1116
|
+
|
|
1117
|
+
| Input | Type | Default | Description |
|
|
1118
|
+
|---|---|---|---|
|
|
1119
|
+
| `variation` | `'default' \| 'v1' \| 'v2' \| 'v3' \| 'v4' \| 'v5'` | `'default'` | Row layout variation |
|
|
1120
|
+
|
|
1121
|
+
---
|
|
1122
|
+
|
|
1123
|
+
## Dark Theme
|
|
1124
|
+
|
|
1125
|
+
Apply the dark theme by adding `data-theme="dark"` to any container or the `<html>` element:
|
|
1126
|
+
|
|
1127
|
+
```html
|
|
1128
|
+
<!-- In index.html -->
|
|
1129
|
+
<html data-theme="dark">
|
|
1130
|
+
|
|
1131
|
+
<!-- Or scoped to a section in a template -->
|
|
1132
|
+
<div data-theme="dark">
|
|
1133
|
+
<ux4g-button variant="primary" size="md">Dark themed</ux4g-button>
|
|
1134
|
+
</div>
|
|
1135
|
+
```
|
|
1136
|
+
|
|
1137
|
+
Design tokens automatically switch values — no additional imports needed.
|
|
1138
|
+
|
|
1139
|
+
---
|
|
1140
|
+
|
|
1141
|
+
## Architecture
|
|
1142
|
+
|
|
1143
|
+
This package follows a CSS-first architecture:
|
|
1144
|
+
|
|
1145
|
+
- **CSS is the source of truth** — all visual decisions live in CSS from `ux4g-components-web`
|
|
1146
|
+
- **Wrappers are thin** — they map typed inputs to CSS class strings via `buildXxxClasses()` functions
|
|
1147
|
+
- **No inline styles, no CSS-in-JS** — only `[class]` bindings
|
|
1148
|
+
- **Class_Builder functions** are imported from `ux4g-components-web/types`
|
|
1149
|
+
- **Runtime auto-bootstrap** — interactive behaviors initialize automatically
|
|
1150
|
+
|
|
1151
|
+
---
|
|
1152
|
+
|
|
1153
|
+
## Compatibility
|
|
1154
|
+
|
|
1155
|
+
- Angular >= 15.0.0
|
|
1156
|
+
- Built with Ivy partial compilation (compatible with Angular 15–19+)
|
|
1157
|
+
- `typesVersions` included for `moduleResolution: node` compatibility
|
|
1158
|
+
|
|
1159
|
+
---
|
|
1160
|
+
|
|
1161
|
+
## Available Components (50)
|
|
1162
|
+
|
|
1163
|
+
All components are available as sub-path imports:
|
|
1164
|
+
|
|
1165
|
+
```ts
|
|
1166
|
+
import { UX4GButtonModule } from 'ux4g-components-angular/button';
|
|
1167
|
+
import { UX4GSpinnerModule } from 'ux4g-components-angular/spinner';
|
|
1168
|
+
import { UX4GBadgeModule } from 'ux4g-components-angular/badge';
|
|
1169
|
+
// ... etc.
|
|
1170
|
+
```
|
|
1171
|
+
|
|
1172
|
+
Full list: `accessibility-bar`, `accordion`, `alert`, `avatar`, `badge`, `breadcrumb`, `button`, `card`, `carousel`, `checkbox`, `chip`, `chip-group`, `combobox`, `date-time-picker`, `divider`, `draft-status-banner`, `drawer`, `dropdown`, `empty-state`, `feedback`, `file-upload`, `footer`, `form-field-group`, `icon-button`, `image`, `input`, `journey-timeline`, `link`, `list`, `modal`, `navbar`, `otp-input`, `pagination`, `popover`, `progress-indicator`, `radio`, `result-list-row`, `search`, `sla-progress-indicator`, `slider`, `slot-grid`, `social-links`, `spinner`, `status-pipeline`, `stepper`, `switch`, `tab`, `table`, `tag`, `tooltip`
|
|
1173
|
+
|
|
1174
|
+
---
|
|
1175
|
+
|
|
1176
|
+
## Related Packages
|
|
1177
|
+
|
|
1178
|
+
- [`ux4g-components-web`](https://www.npmjs.com/package/ux4g-components-web) — CSS bundle and shared types (required)
|
|
1179
|
+
- [`ux4g-components-react`](https://www.npmjs.com/package/ux4g-components-react) — React wrapper components
|
|
1180
|
+
|
|
1181
|
+
## License
|
|
1182
|
+
|
|
1183
|
+
MIT
|