ux4g-components-web 1.4.0 → 1.5.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 (124) hide show
  1. package/README.md +76 -0
  2. package/dist/__tests__/css-bundle.integration.test.d.ts +11 -0
  3. package/dist/__tests__/css-bundle.integration.test.js +1102 -0
  4. package/dist/__tests__/css-bundle.phase10.property.test.d.ts +9 -0
  5. package/dist/__tests__/css-bundle.phase10.property.test.js +64 -0
  6. package/dist/__tests__/css-bundle.phase5.property.test.d.ts +9 -0
  7. package/dist/__tests__/css-bundle.phase5.property.test.js +126 -0
  8. package/dist/__tests__/css-bundle.phase6.property.test.d.ts +9 -0
  9. package/dist/__tests__/css-bundle.phase6.property.test.js +73 -0
  10. package/dist/__tests__/css-bundle.phase7.property.test.d.ts +9 -0
  11. package/dist/__tests__/css-bundle.phase7.property.test.js +76 -0
  12. package/dist/__tests__/css-bundle.phase8.property.test.d.ts +9 -0
  13. package/dist/__tests__/css-bundle.phase8.property.test.js +67 -0
  14. package/dist/__tests__/css-bundle.phase9.property.test.d.ts +9 -0
  15. package/dist/__tests__/css-bundle.phase9.property.test.js +93 -0
  16. package/dist/__tests__/css-bundle.property.test.d.ts +14 -0
  17. package/dist/__tests__/css-bundle.property.test.js +393 -0
  18. package/dist/__tests__/dom-generators.determinism.property.test.d.ts +1 -0
  19. package/dist/__tests__/dom-generators.determinism.property.test.js +71 -0
  20. package/dist/__tests__/dom-generators.id.property.test.d.ts +1 -0
  21. package/dist/__tests__/dom-generators.id.property.test.js +99 -0
  22. package/dist/__tests__/dom-generators.otp.property.test.d.ts +1 -0
  23. package/dist/__tests__/dom-generators.property.test.d.ts +1 -0
  24. package/dist/__tests__/dom-generators.property.test.js +205 -0
  25. package/dist/__tests__/dom-generators.states.property.test.d.ts +1 -0
  26. package/dist/__tests__/dom-generators.table.property.test.d.ts +1 -0
  27. package/dist/__tests__/dom-generators.tier1.property.test.d.ts +1 -0
  28. package/dist/__tests__/dom-generators.tier1.property.test.js +403 -0
  29. package/dist/__tests__/dom-generators.validation.property.test.d.ts +1 -0
  30. package/dist/__tests__/dom-generators.validation.property.test.js +327 -0
  31. package/dist/__tests__/megamenu.classbuilder.property.test.d.ts +1 -0
  32. package/dist/__tests__/megamenu.classbuilder.property.test.js +88 -0
  33. package/dist/__tests__/smoke.test.d.ts +1 -0
  34. package/dist/__tests__/smoke.test.js +65 -0
  35. package/dist/__tests__/types.phase10.property.test.d.ts +1 -0
  36. package/dist/__tests__/types.phase10.property.test.js +166 -0
  37. package/dist/__tests__/types.phase10.test.d.ts +1 -0
  38. package/dist/__tests__/types.phase10.test.js +76 -0
  39. package/dist/__tests__/types.phase3.property.test.d.ts +1 -0
  40. package/dist/__tests__/types.phase3.property.test.js +83 -0
  41. package/dist/__tests__/types.phase3.test.d.ts +1 -0
  42. package/dist/__tests__/types.phase3.test.js +76 -0
  43. package/dist/__tests__/types.phase4.property.test.d.ts +1 -0
  44. package/dist/__tests__/types.phase4.property.test.js +119 -0
  45. package/dist/__tests__/types.phase4.test.d.ts +1 -0
  46. package/dist/__tests__/types.phase4.test.js +70 -0
  47. package/dist/__tests__/types.phase5.property.test.d.ts +1 -0
  48. package/dist/__tests__/types.phase5.property.test.js +120 -0
  49. package/dist/__tests__/types.phase5.test.d.ts +1 -0
  50. package/dist/__tests__/types.phase5.test.js +64 -0
  51. package/dist/__tests__/types.phase6.property.test.d.ts +1 -0
  52. package/dist/__tests__/types.phase6.property.test.js +189 -0
  53. package/dist/__tests__/types.phase6.test.d.ts +1 -0
  54. package/dist/__tests__/types.phase6.test.js +121 -0
  55. package/dist/__tests__/types.phase7.property.test.d.ts +1 -0
  56. package/dist/__tests__/types.phase7.property.test.js +217 -0
  57. package/dist/__tests__/types.phase7.test.d.ts +1 -0
  58. package/dist/__tests__/types.phase7.test.js +106 -0
  59. package/dist/__tests__/types.phase8.property.test.d.ts +1 -0
  60. package/dist/__tests__/types.phase8.property.test.js +224 -0
  61. package/dist/__tests__/types.phase8.test.d.ts +1 -0
  62. package/dist/__tests__/types.phase8.test.js +114 -0
  63. package/dist/__tests__/types.phase9.property.test.d.ts +1 -0
  64. package/dist/__tests__/types.phase9.property.test.js +347 -0
  65. package/dist/__tests__/types.phase9.test.d.ts +1 -0
  66. package/dist/__tests__/types.phase9.test.js +226 -0
  67. package/dist/__tests__/types.restructure.property.test.d.ts +1 -0
  68. package/dist/__tests__/types.restructure.property.test.js +76 -0
  69. package/dist/__tests__/types.test.d.ts +1 -0
  70. package/dist/__tests__/types.test.js +175 -0
  71. package/dist/dom-generators/accordion.d.ts +23 -0
  72. package/dist/dom-generators/avatar.d.ts +19 -0
  73. package/dist/dom-generators/carousel.d.ts +20 -0
  74. package/dist/dom-generators/chip.d.ts +18 -0
  75. package/dist/dom-generators/combobox.d.ts +28 -0
  76. package/dist/dom-generators/date-picker.d.ts +19 -0
  77. package/dist/dom-generators/dom-generators/accordion.d.ts +21 -0
  78. package/dist/dom-generators/dom-generators/avatar.d.ts +17 -0
  79. package/dist/dom-generators/dom-generators/carousel.d.ts +19 -0
  80. package/dist/dom-generators/dom-generators/chip.d.ts +16 -0
  81. package/dist/dom-generators/dom-generators/combobox.d.ts +26 -0
  82. package/dist/dom-generators/dom-generators/date-picker.d.ts +18 -0
  83. package/dist/dom-generators/dom-generators/drawer.d.ts +17 -0
  84. package/dist/dom-generators/dom-generators/dropdown.d.ts +26 -0
  85. package/dist/dom-generators/dom-generators/file-upload.d.ts +20 -0
  86. package/dist/dom-generators/dom-generators/id-generator.d.ts +9 -0
  87. package/dist/dom-generators/dom-generators/index.d.ts +27 -0
  88. package/dist/dom-generators/dom-generators/modal.d.ts +19 -0
  89. package/dist/dom-generators/dom-generators/otp.d.ts +16 -0
  90. package/dist/dom-generators/dom-generators/popover.d.ts +17 -0
  91. package/dist/dom-generators/dom-generators/progress.d.ts +16 -0
  92. package/dist/dom-generators/dom-generators/search.d.ts +20 -0
  93. package/dist/dom-generators/dom-generators/stepper.d.ts +21 -0
  94. package/dist/dom-generators/dom-generators/table.d.ts +23 -0
  95. package/dist/dom-generators/dom-generators/tabs.d.ts +21 -0
  96. package/dist/dom-generators/dom-generators/time-picker.d.ts +18 -0
  97. package/dist/dom-generators/dom-generators/tooltip.d.ts +17 -0
  98. package/dist/dom-generators/dom-generators/types.d.ts +27 -0
  99. package/dist/dom-generators/dom-generators/validate.d.ts +20 -0
  100. package/dist/dom-generators/drawer.d.ts +19 -0
  101. package/dist/dom-generators/dropdown.d.ts +28 -0
  102. package/dist/dom-generators/file-upload.d.ts +22 -0
  103. package/dist/dom-generators/id-generator.d.ts +9 -0
  104. package/dist/dom-generators/index.bundled.d.ts +654 -0
  105. package/dist/dom-generators/index.cjs +2029 -0
  106. package/dist/dom-generators/index.d.ts +27 -0
  107. package/dist/dom-generators/index.mjs +2001 -0
  108. package/dist/dom-generators/modal.d.ts +21 -0
  109. package/dist/dom-generators/otp.d.ts +18 -0
  110. package/dist/dom-generators/popover.d.ts +19 -0
  111. package/dist/dom-generators/progress.d.ts +18 -0
  112. package/dist/dom-generators/search.d.ts +22 -0
  113. package/dist/dom-generators/stepper.d.ts +23 -0
  114. package/dist/dom-generators/table.d.ts +25 -0
  115. package/dist/dom-generators/tabs.d.ts +23 -0
  116. package/dist/dom-generators/time-picker.d.ts +19 -0
  117. package/dist/dom-generators/tooltip.d.ts +19 -0
  118. package/dist/dom-generators/types.d.ts +155 -0
  119. package/dist/dom-generators/validate.d.ts +20 -0
  120. package/dist/runtime/bootstrap.js +59 -0
  121. package/dist/runtime/index.js +55 -0
  122. package/dist/types.d.ts +155 -0
  123. package/dist/types.js +552 -0
  124. package/package.json +12 -2
package/dist/types.js ADDED
@@ -0,0 +1,552 @@
1
+ // Maps variant → CSS class
2
+ export const VARIANT_CLASS_MAP = {
3
+ 'primary': 'ux4g-btn-primary',
4
+ 'outline-primary': 'ux4g-btn-outline-primary',
5
+ 'text-primary': 'ux4g-btn-text-primary',
6
+ 'tonal-primary': 'ux4g-btn-tonal-primary',
7
+ 'danger': 'ux4g-btn-danger',
8
+ 'outline-danger': 'ux4g-btn-outline-danger',
9
+ 'text-danger': 'ux4g-btn-text-danger',
10
+ 'tonal-danger': 'ux4g-btn-tonal-danger',
11
+ 'outline-neutral': 'ux4g-btn-outline-neutral',
12
+ 'text-neutral': 'ux4g-btn-text-neutral',
13
+ };
14
+ // Maps size → CSS class
15
+ export const SIZE_CLASS_MAP = {
16
+ 'xl': 'ux4g-btn-xl',
17
+ 'lg': 'ux4g-btn-lg',
18
+ 'md': 'ux4g-btn-md',
19
+ 'sm': 'ux4g-btn-sm',
20
+ 'xs': 'ux4g-btn-xs',
21
+ };
22
+ // Pure utility — used by both React and Angular wrappers
23
+ export function buildButtonClasses(variant, size, disabled, loading, shape, extra) {
24
+ const classes = [VARIANT_CLASS_MAP[variant]];
25
+ const sizeClass = SIZE_CLASS_MAP[size];
26
+ if (sizeClass)
27
+ classes.push(sizeClass);
28
+ if (shape === 'pill')
29
+ classes.push('ux4g-btn-pill');
30
+ if (disabled)
31
+ classes.push('ux4g-btn-disabled');
32
+ if (loading)
33
+ classes.push('ux4g-btn-loading');
34
+ if (extra)
35
+ classes.push(extra);
36
+ return classes.join(' ');
37
+ }
38
+ export const SPINNER_VARIANT_CLASS_PART = {
39
+ primary: 'primary',
40
+ inverse: 'inverse',
41
+ danger: 'danger',
42
+ };
43
+ export const SPINNER_SIZE_CLASS_PART = {
44
+ xl: 'xl',
45
+ lg: 'lg',
46
+ md: 'md',
47
+ sm: 'sm',
48
+ xs: 'xs',
49
+ };
50
+ export const SPINNER_TYPE_CLASS_PART = {
51
+ full: 'full',
52
+ split: 'split',
53
+ partial: 'partial',
54
+ };
55
+ /** Returns the CSS class(es) for a spinner.
56
+ * Base class: `ux4g-spinner-{variant}-{type}` (always present)
57
+ * Size class: `ux4g-spinner-{size}` (omitted when size is 'md' — the default)
58
+ * e.g. `ux4g-spinner-primary-full` (md default)
59
+ * `ux4g-spinner-primary-full ux4g-spinner-xl` (xl size)
60
+ */
61
+ export function buildSpinnerClasses(variant, size, type, extra) {
62
+ const base = `ux4g-spinner-${variant}-${type}`;
63
+ const sizeClass = size !== 'md' ? `ux4g-spinner-${size}` : null;
64
+ const parts = [base];
65
+ if (sizeClass)
66
+ parts.push(sizeClass);
67
+ if (extra)
68
+ parts.push(extra);
69
+ return parts.join(' ');
70
+ }
71
+ export function buildLinkClasses(variant, size, extra) {
72
+ const base = variant === 'neutral'
73
+ ? `ux4g-text-link-neutral-${size}`
74
+ : `ux4g-text-link-${size}`;
75
+ return extra ? `${base} ${extra}` : base;
76
+ }
77
+ export function buildBadgeClasses(type, color, size, extra) {
78
+ const parts = [`ux4g-badge-${type}-${color}`];
79
+ if (size)
80
+ parts.push(`ux4g-badge-${size}`);
81
+ if (extra)
82
+ parts.push(extra);
83
+ return parts.join(' ');
84
+ }
85
+ export function buildAvatarClasses(avatarType, size, extra) {
86
+ if (avatarType === 'group') {
87
+ return extra ? `ux4g-avatar-group ${extra}` : 'ux4g-avatar-group';
88
+ }
89
+ const parts = ['ux4g-avatar', `ux4g-avatar-${avatarType}`];
90
+ if (size)
91
+ parts.push(`ux4g-avatar-${size}`);
92
+ if (extra)
93
+ parts.push(extra);
94
+ return parts.join(' ');
95
+ }
96
+ export function buildImageContainerClasses(ratio, rounded, overlay, extra) {
97
+ const parts = [];
98
+ if (overlay)
99
+ parts.push('ux4g-img-overlay');
100
+ if (rounded)
101
+ parts.push('ux4g-img-rounded');
102
+ if (ratio)
103
+ parts.push(`ux4g-ratio-${ratio}`);
104
+ if (extra)
105
+ parts.push(extra);
106
+ return parts.join(' ');
107
+ }
108
+ export function buildChipClasses(chipType, size, active, extra) {
109
+ // xs is only valid for input chips; filter and choice clamp to sm
110
+ const effectiveSize = (chipType !== 'input' && size === 'xs') ? 'sm' : size;
111
+ const parts = [`ux4g-${chipType}-chip-${effectiveSize}`];
112
+ if (active)
113
+ parts.push('active');
114
+ if (extra)
115
+ parts.push(extra);
116
+ return parts.join(' ');
117
+ }
118
+ export function buildTagClasses(variant, color, small, extra) {
119
+ const parts = [`ux4g-tag-${variant}-${color}`];
120
+ if (small)
121
+ parts.push('ux4g-tag-s');
122
+ if (extra)
123
+ parts.push(extra);
124
+ return parts.join(' ');
125
+ }
126
+ export function buildDividerClasses(orientation, extra) {
127
+ const base = `ux4g-divider-${orientation}`;
128
+ return extra ? `${base} ${extra}` : base;
129
+ }
130
+ export function buildBreadcrumbClasses(separator, extra) {
131
+ const base = `ux4g-breadcrumb ux4g-breadcrumb-${separator}`;
132
+ return extra ? `${base} ${extra}` : base;
133
+ }
134
+ export function buildCheckboxClasses(size, error, extra) {
135
+ const parts = ['ux4g-checkbox', `ux4g-checkbox-${size}`];
136
+ if (error)
137
+ parts.push('ux4g-checkbox-error');
138
+ if (extra)
139
+ parts.push(extra);
140
+ return parts.join(' ');
141
+ }
142
+ export function buildRadioClasses(size, error, extra) {
143
+ const parts = ['ux4g-radio', `ux4g-radio-${size}`];
144
+ if (error)
145
+ parts.push('ux4g-radio-error');
146
+ if (extra)
147
+ parts.push(extra);
148
+ return parts.join(' ');
149
+ }
150
+ export function buildSwitchClasses(size, extra) {
151
+ const base = `ux4g-switch ux4g-switch-${size}`;
152
+ return extra ? `${base} ${extra}` : base;
153
+ }
154
+ export function buildCardClasses(variant, layout, extra) {
155
+ const parts = ['ux4g-card', `ux4g-card-${variant}`, `ux4g-card-${layout}`];
156
+ if (extra)
157
+ parts.push(extra);
158
+ return parts.join(' ');
159
+ }
160
+ export function buildInputContainerClasses(size, state, extra) {
161
+ const parts = ['ux4g-input-container', `ux4g-input-${size}`, `ux4g-input-${state}`];
162
+ if (extra)
163
+ parts.push(extra);
164
+ return parts.join(' ');
165
+ }
166
+ export function buildListClasses(variant, size, extra) {
167
+ const parts = ['ux4g-list', `ux4g-list-${variant}`, `ux4g-list-${size}`];
168
+ if (extra)
169
+ parts.push(extra);
170
+ return parts.join(' ');
171
+ }
172
+ export function buildDropdownClasses(type, mode, size, state, open, extra) {
173
+ const parts = [
174
+ 'ux4g-dropdown',
175
+ `ux4g-dropdown-${type}`,
176
+ `ux4g-dropdown-${mode}`,
177
+ `ux4g-dropdown-${size}`,
178
+ `ux4g-dropdown-${state}`,
179
+ ];
180
+ if (open)
181
+ parts.push('is-open');
182
+ if (extra)
183
+ parts.push(extra);
184
+ return parts.join(' ');
185
+ }
186
+ export function buildComboboxClasses(type, size, state, open, extra) {
187
+ const parts = [
188
+ 'ux4g-combobox',
189
+ `ux4g-combobox-${type}`,
190
+ `ux4g-combobox-${size}`,
191
+ `ux4g-combobox-${state}`,
192
+ ];
193
+ if (open)
194
+ parts.push('is-open');
195
+ if (extra)
196
+ parts.push(extra);
197
+ return parts.join(' ');
198
+ }
199
+ export function buildModalBackdropClasses(opacity, blur, open, extra) {
200
+ const parts = ['ux4g-modal-backdrop', `ux4g-modal-backdrop-${opacity}`];
201
+ if (blur)
202
+ parts.push('ux4g-modal-backdrop-blur');
203
+ if (open)
204
+ parts.push('is-open');
205
+ if (extra)
206
+ parts.push(extra);
207
+ return parts.join(' ');
208
+ }
209
+ export function buildModalBoxClasses(size, centerContent, extra) {
210
+ const parts = ['ux4g-modal-box', `ux4g-modal-${size}`];
211
+ if (centerContent)
212
+ parts.push('ux4g-modal-center-content');
213
+ if (extra)
214
+ parts.push(extra);
215
+ return parts.join(' ');
216
+ }
217
+ export function buildAlertClasses(variant, layout, extra) {
218
+ const parts = ['ux4g-alert', `ux4g-alert-${variant}`];
219
+ if (layout === 'center')
220
+ parts.push('ux4g-alert-center');
221
+ else if (layout === 'wide')
222
+ parts.push('ux4g-alert-wide');
223
+ if (extra)
224
+ parts.push(extra);
225
+ return parts.join(' ');
226
+ }
227
+ export function buildContextAlertClasses(variant, extra) {
228
+ const parts = ['ux4g-context-alert', `ux4g-alert-${variant}`];
229
+ if (extra)
230
+ parts.push(extra);
231
+ return parts.join(' ');
232
+ }
233
+ export function buildAlertContainerClasses(position, extra) {
234
+ const parts = ['ux4g-alert-container', `ux4g-alert-${position}`];
235
+ if (extra)
236
+ parts.push(extra);
237
+ return parts.join(' ');
238
+ }
239
+ export function buildSearchContainerClasses(size, extra) {
240
+ const base = `ux4g-search-container ux4g-search-${size}`;
241
+ return extra ? `${base} ${extra}` : base;
242
+ }
243
+ export function buildPaginationClasses(variant, paginationStyle, extra) {
244
+ const parts = ['ux4g-pagination'];
245
+ if (variant === 'dotted') {
246
+ parts.push('ux4g-pagination-dotted');
247
+ if (paginationStyle === 'solid')
248
+ parts.push('ux4g-pagination-solid');
249
+ else if (paginationStyle === 'translucent')
250
+ parts.push('ux4g-pagination-translucent');
251
+ }
252
+ if (extra)
253
+ parts.push(extra);
254
+ return parts.join(' ');
255
+ }
256
+ export function buildTableClasses(size, divider, zebra, interactive, sortable, resizable, headerBrand, extra) {
257
+ const parts = ['ux4g-table', `ux4g-table-${size}`];
258
+ if (divider === 'column')
259
+ parts.push('ux4g-table-column-dividers');
260
+ else if (divider === 'none')
261
+ parts.push('ux4g-table-no-row-dividers');
262
+ if (zebra === 'rows')
263
+ parts.push('ux4g-table-zebra-rows');
264
+ else if (zebra === 'cols')
265
+ parts.push('ux4g-table-zebra-cols');
266
+ if (interactive)
267
+ parts.push('ux4g-table-interactive');
268
+ if (sortable)
269
+ parts.push('ux4g-table-sortable');
270
+ if (resizable)
271
+ parts.push('ux4g-table-resizable');
272
+ if (headerBrand)
273
+ parts.push('ux4g-table-header-brand');
274
+ if (extra)
275
+ parts.push(extra);
276
+ return parts.join(' ');
277
+ }
278
+ export function buildPopoverClasses(placement, show, extra) {
279
+ const parts = ['ux4g-popover', `ux4g-popover-${placement}`];
280
+ if (show)
281
+ parts.push('show');
282
+ if (extra)
283
+ parts.push(extra);
284
+ return parts.join(' ');
285
+ }
286
+ export function buildTooltipClasses(placement, size, extra) {
287
+ const parts = ['ux4g-tooltip', `ux4g-tooltip-${placement}`, `ux4g-tooltip-${size}`];
288
+ if (extra)
289
+ parts.push(extra);
290
+ return parts.join(' ');
291
+ }
292
+ export function buildTabClasses(variant, size, vertical, extra) {
293
+ const parts = ['ux4g-tab', `ux4g-tab-${variant}`, `ux4g-tab-${size}`];
294
+ if (vertical)
295
+ parts.push('ux4g-tab-vertical');
296
+ if (extra)
297
+ parts.push(extra);
298
+ return parts.join(' ');
299
+ }
300
+ export function buildIconButtonClasses(variant, size, pill, extra) {
301
+ const parts = ['ux4g-icon-btn', `ux4g-icon-btn-${variant}`, `ux4g-icon-btn-${size}`];
302
+ if (pill)
303
+ parts.push('ux4g-icon-btn-pill');
304
+ if (extra)
305
+ parts.push(extra);
306
+ return parts.join(' ');
307
+ }
308
+ // -- Accessibility Bar --------------------------------------------------------
309
+ export function buildAccessibilityBarClasses(extra) {
310
+ return extra ? `ux4g-topbar ${extra}` : 'ux4g-topbar';
311
+ }
312
+ export function buildAccordionClasses(arrowPosition, variant, extra) {
313
+ const parts = ['ux4g-accordion'];
314
+ if (arrowPosition === 'right')
315
+ parts.push('ux4g-accordion-arrow-right');
316
+ else if (arrowPosition === 'left')
317
+ parts.push('ux4g-accordion-arrow-left');
318
+ if (variant === 'bordered')
319
+ parts.push('ux4g-accordion-bordered');
320
+ if (extra)
321
+ parts.push(extra);
322
+ return parts.join(' ');
323
+ }
324
+ export function buildStepperClasses(orientation, alignment, variant, size, extra) {
325
+ const parts = ['ux4g-stepper'];
326
+ if (orientation === 'vertical') {
327
+ parts.push('ux4g-stepper-vertical');
328
+ }
329
+ else {
330
+ // horizontal (default) — only add classes if alignment is non-default
331
+ if (alignment === 'center') {
332
+ parts.push('ux4g-stepper-horizontal');
333
+ parts.push('ux4g-stepper-center');
334
+ }
335
+ else if (alignment === 'left') {
336
+ parts.push('ux4g-stepper-horizontal');
337
+ parts.push('ux4g-stepper-left');
338
+ }
339
+ }
340
+ if (variant === 'bottom-line')
341
+ parts.push('ux4g-stepper-bottom-line');
342
+ else if (variant === 'bottom-line-fill') {
343
+ parts.push('ux4g-stepper-bottom-line');
344
+ parts.push('ux4g-stepper-bottom-line-fill');
345
+ }
346
+ else if (variant === 'mobile')
347
+ parts.push('ux4g-stepper-mobile');
348
+ else if (variant === 'progress')
349
+ parts.push('ux4g-stepper-progress');
350
+ if (size === 's')
351
+ parts.push('ux4g-stepper-s');
352
+ if (extra)
353
+ parts.push(extra);
354
+ return parts.join(' ');
355
+ }
356
+ export function buildSliderFieldClasses(size, extra) {
357
+ const parts = ['ux4g-slider-field'];
358
+ if (size === 'md')
359
+ parts.push('ux4g-slider-md');
360
+ if (extra)
361
+ parts.push(extra);
362
+ return parts.join(' ');
363
+ }
364
+ export function buildDrawerClasses(placement, open, extra) {
365
+ const parts = ['ux4g-drawer', `ux4g-drawer-${placement}`];
366
+ if (open)
367
+ parts.push('ux4g-drawer-open');
368
+ if (extra)
369
+ parts.push(extra);
370
+ return parts.join(' ');
371
+ }
372
+ export function buildDateTimePickerClasses(mode, extra) {
373
+ const base = mode === 'date' ? 'ux4g-date-picker-container' : 'ux4g-time-picker-container';
374
+ return extra ? `${base} ${extra}` : base;
375
+ }
376
+ export function buildStatusPipelineClasses(orientation, alignment, variant, size, extra) {
377
+ const parts = ['ux4g-status-pipeline-stepper'];
378
+ if (orientation === 'vertical') {
379
+ parts.push('ux4g-status-pipeline-vertical');
380
+ // alignment is IGNORED when orientation='vertical'
381
+ }
382
+ else {
383
+ // horizontal (default) — only add classes if alignment is non-default
384
+ if (alignment === 'center') {
385
+ parts.push('ux4g-status-pipeline-horizontal');
386
+ parts.push('ux4g-status-pipeline-center');
387
+ }
388
+ else if (alignment === 'left') {
389
+ parts.push('ux4g-status-pipeline-horizontal');
390
+ parts.push('ux4g-status-pipeline-left');
391
+ }
392
+ }
393
+ if (variant === 'bottom-line') {
394
+ parts.push('ux4g-status-pipeline-bottom-line');
395
+ }
396
+ else if (variant === 'bottom-line-fill') {
397
+ parts.push('ux4g-status-pipeline-bottom-line');
398
+ parts.push('ux4g-status-pipeline-bottom-line-fill');
399
+ }
400
+ else if (variant === 'mobile') {
401
+ parts.push('ux4g-status-pipeline-mobile');
402
+ }
403
+ else if (variant === 'progress') {
404
+ parts.push('ux4g-status-pipeline-progress');
405
+ }
406
+ if (size === 's')
407
+ parts.push('ux4g-status-pipeline-s');
408
+ if (extra)
409
+ parts.push(extra);
410
+ return parts.join(' ');
411
+ }
412
+ export function buildJourneyTimelineClasses(orientation, extra) {
413
+ const effectiveOrientation = orientation ?? 'vertical';
414
+ const base = `ux4g-journey-timeline ux4g-journey-timeline--${effectiveOrientation}`;
415
+ return extra ? `${base} ${extra}` : base;
416
+ }
417
+ // -- Form Field Group ---------------------------------------------------------
418
+ export function buildFormFieldGroupClasses(extra) {
419
+ return extra ? `ux4g-form-group ${extra}` : 'ux4g-form-group';
420
+ }
421
+ export function buildOtpInputClasses(state, extra) {
422
+ const parts = ['ux4g-otp'];
423
+ if (state && state !== 'default')
424
+ parts.push(`ux4g-otp-${state}`);
425
+ if (extra)
426
+ parts.push(extra);
427
+ return parts.join(' ');
428
+ }
429
+ export function buildFileUploadClasses(state, extra) {
430
+ const parts = ['ux4g-upload'];
431
+ if (state)
432
+ parts.push(`ux4g-upload-state-${state}`);
433
+ if (extra)
434
+ parts.push(extra);
435
+ return parts.join(' ');
436
+ }
437
+ export function buildProgressIndicatorClasses(type, extra) {
438
+ const base = type === 'bar' ? 'ux4g-progress-bar' : 'ux4g-progress-circle';
439
+ return extra ? `${base} ${extra}` : base;
440
+ }
441
+ // -- Feedback -----------------------------------------------------------------
442
+ export function buildFeedbackClasses(extra) {
443
+ return extra ? `ux4g-feedback ${extra}` : 'ux4g-feedback';
444
+ }
445
+ export function buildDraftStatusBannerClasses(variant, extra) {
446
+ let base;
447
+ if (variant === 'auto') {
448
+ base = 'ux4g-auto-daft-staus-bar';
449
+ }
450
+ else if (variant === 'success') {
451
+ base = 'ux4g-success-daft-staus-bar';
452
+ }
453
+ else {
454
+ // 'default' or undefined
455
+ base = 'ux4g-daft-staus-bar';
456
+ }
457
+ return extra ? `${base} ${extra}` : base;
458
+ }
459
+ export function buildSlaProgressIndicatorClasses(type, extra) {
460
+ const base = `ux4g-sla-${type}`;
461
+ return extra ? `${base} ${extra}` : base;
462
+ }
463
+ // -- Carousel -----------------------------------------------------------------
464
+ export function buildCarouselClasses(extra) {
465
+ return extra ? `ux4g-carousel ${extra}` : 'ux4g-carousel';
466
+ }
467
+ // -- Empty State --------------------------------------------------------------
468
+ export function buildEmptyStateClasses(extra) {
469
+ return extra ? `ux4g-empty-state ${extra}` : 'ux4g-empty-state';
470
+ }
471
+ export function buildChipGroupClasses(variant, active, extra) {
472
+ const base = variant === 'choice' ? 'ux4g-choice-chip-group' : 'ux4g-filter-chip-group';
473
+ const parts = [base];
474
+ if (active)
475
+ parts.push('active');
476
+ if (extra)
477
+ parts.push(extra);
478
+ return parts.join(' ');
479
+ }
480
+ // -- Navbar -------------------------------------------------------------------
481
+ export function buildNavbarClasses(extra) {
482
+ return extra ? `ux4g-navbar ${extra}` : 'ux4g-navbar';
483
+ }
484
+ export function buildSocialLinksClasses(size, extra) {
485
+ let gapClass;
486
+ if (size === 'sm') {
487
+ gapClass = 'ux4g-gap-xs';
488
+ }
489
+ else if (size === 'lg') {
490
+ gapClass = 'ux4g-gap-m';
491
+ }
492
+ else {
493
+ // 'md' or undefined (default)
494
+ gapClass = 'ux4g-gap-s';
495
+ }
496
+ const base = `ux4g-d-flex ${gapClass}`;
497
+ return extra ? `${base} ${extra}` : base;
498
+ }
499
+ export function buildSlotGridClasses(variant, extra) {
500
+ const base = variant === 'compact'
501
+ ? 'ux4g-time-slot-compact-container'
502
+ : 'ux4g-time-slot-weekly-container';
503
+ return extra ? `${base} ${extra}` : base;
504
+ }
505
+ export function buildFooterClasses(theme, extra) {
506
+ let base;
507
+ if (theme === 'primary')
508
+ base = 'ux4g-footer-primary';
509
+ else if (theme === 'dark')
510
+ base = 'ux4g-footer-dark';
511
+ else
512
+ base = '';
513
+ if (extra)
514
+ return base ? `${base} ${extra}` : extra;
515
+ return base;
516
+ }
517
+ export function buildResultListRowClasses(variation, extra) {
518
+ const parts = ['ux4g-result-list'];
519
+ if (variation && variation !== 'default')
520
+ parts.push(`ux4g-result-list-${variation}`);
521
+ if (extra)
522
+ parts.push(extra);
523
+ return parts.join(' ');
524
+ }
525
+ // ── Mega Menu ─────────────────────────────────────────────────────────────────
526
+ /** Returns the CSS class string for the mega-menu root element.
527
+ * Base class: `ux4g-mega-menu` (always present)
528
+ * Dropdown: `ux4g-mega-menu--dropdown` (when dropdown is true)
529
+ * Right: `ux4g-mega-menu--dropdown-right` (only when BOTH dropdown AND dropdownRight are true)
530
+ */
531
+ export function buildMegaMenuClasses(dropdown, dropdownRight, extra) {
532
+ const parts = ['ux4g-mega-menu'];
533
+ if (dropdown)
534
+ parts.push('ux4g-mega-menu--dropdown');
535
+ if (dropdown && dropdownRight)
536
+ parts.push('ux4g-mega-menu--dropdown-right');
537
+ if (extra)
538
+ parts.push(extra);
539
+ return parts.join(' ');
540
+ }
541
+ /** Returns the CSS class string for the mega-menu wrapper element (dropdown positioning context).
542
+ * Base class: `ux4g-mega-menu-wrapper` (always present)
543
+ * Active: `ux4g-mega-menu-wrapper--active` (when active is true)
544
+ */
545
+ export function buildMegaMenuWrapperClasses(active, extra) {
546
+ const parts = ['ux4g-mega-menu-wrapper'];
547
+ if (active)
548
+ parts.push('ux4g-mega-menu-wrapper--active');
549
+ if (extra)
550
+ parts.push(extra);
551
+ return parts.join(' ');
552
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ux4g-components-web",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "type": "module",
5
5
  "description": "UX4G Design System — CSS bundle, design tokens, utilities, and shared Class_Builder types",
6
6
  "scripts": {
@@ -20,6 +20,12 @@
20
20
  "require": "./dist/types/index.cjs",
21
21
  "default": "./dist/types/index.mjs"
22
22
  },
23
+ "./dom-generators": {
24
+ "types": "./dist/dom-generators/index.d.ts",
25
+ "import": "./dist/dom-generators/index.mjs",
26
+ "require": "./dist/dom-generators/index.cjs",
27
+ "default": "./dist/dom-generators/index.mjs"
28
+ },
23
29
  "./runtime": {
24
30
  "types": "./dist/runtime/index.d.ts",
25
31
  "import": "./dist/runtime/index.mjs",
@@ -38,6 +44,9 @@
38
44
  "types": [
39
45
  "./dist/types/index.d.ts"
40
46
  ],
47
+ "dom-generators": [
48
+ "./dist/dom-generators/index.d.ts"
49
+ ],
41
50
  "runtime": [
42
51
  "./dist/runtime/index.d.ts"
43
52
  ],
@@ -50,7 +59,8 @@
50
59
  "styles/ux4g.css",
51
60
  "styles/cascade-fixes.css",
52
61
  "dist/",
53
- "dist/runtime/"
62
+ "dist/runtime/",
63
+ "dist/dom-generators/"
54
64
  ],
55
65
  "devDependencies": {
56
66
  "@rollup/plugin-replace": "^6.0.3",