@revikornmann/muka-ui 0.26.0 → 0.27.1

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 (79) hide show
  1. package/dist/cjs/components/Avatar/Avatar.css +79 -30
  2. package/dist/cjs/components/Avatar/Avatar.js +24 -2
  3. package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
  4. package/dist/cjs/components/Avatar/AvatarGroup.js +4 -3
  5. package/dist/cjs/components/Avatar/AvatarGroup.js.map +1 -1
  6. package/dist/cjs/components/Button/Button.css +33 -0
  7. package/dist/cjs/components/Button/Button.js +2 -2
  8. package/dist/cjs/components/DataPieChart/DataPieChart.js +5 -2
  9. package/dist/cjs/components/DataPieChart/DataPieChart.js.map +1 -1
  10. package/dist/cjs/components/DataPieChart/index.js.map +1 -1
  11. package/dist/cjs/components/Tabs/Tabs.css +37 -14
  12. package/dist/cjs/components/Tabs/Tabs.js +30 -10
  13. package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
  14. package/dist/cjs/components/index.js.map +1 -1
  15. package/dist/esm/components/Avatar/Avatar.css +79 -30
  16. package/dist/esm/components/Avatar/Avatar.js +25 -3
  17. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  18. package/dist/esm/components/Avatar/AvatarGroup.js +4 -3
  19. package/dist/esm/components/Avatar/AvatarGroup.js.map +1 -1
  20. package/dist/esm/components/Button/Button.css +33 -0
  21. package/dist/esm/components/Button/Button.js +2 -2
  22. package/dist/esm/components/DataPieChart/DataPieChart.js +4 -1
  23. package/dist/esm/components/DataPieChart/DataPieChart.js.map +1 -1
  24. package/dist/esm/components/DataPieChart/index.js.map +1 -1
  25. package/dist/esm/components/Tabs/Tabs.css +37 -14
  26. package/dist/esm/components/Tabs/Tabs.js +30 -10
  27. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  28. package/dist/esm/components/index.js.map +1 -1
  29. package/dist/styles/components/Avatar.css +79 -30
  30. package/dist/styles/components/Button.css +33 -0
  31. package/dist/styles/components/Tabs.css +37 -14
  32. package/dist/styles/index.css +555 -407
  33. package/dist/styles/muka-dark.css +555 -407
  34. package/dist/styles/muka-light.css +555 -407
  35. package/dist/styles/tokens-bouwplan-dark.css +48 -5
  36. package/dist/styles/tokens-bouwplan-light.css +48 -5
  37. package/dist/styles/tokens-fscl-dark.css +48 -5
  38. package/dist/styles/tokens-fscl-light.css +48 -5
  39. package/dist/styles/tokens-grip-dark.css +48 -5
  40. package/dist/styles/tokens-grip-light.css +48 -5
  41. package/dist/styles/tokens-muka-dark.css +48 -5
  42. package/dist/styles/tokens-muka-light.css +48 -5
  43. package/dist/styles/tokens-wireframe-dark.css +48 -5
  44. package/dist/styles/tokens-wireframe-light.css +48 -5
  45. package/dist/styles/wireframe-dark.css +555 -407
  46. package/dist/styles/wireframe-light.css +555 -407
  47. package/dist/types/components/Avatar/Avatar.d.ts +8 -3
  48. package/dist/types/components/Avatar/Avatar.d.ts.map +1 -1
  49. package/dist/types/components/Avatar/AvatarGroup.d.ts +10 -5
  50. package/dist/types/components/Avatar/AvatarGroup.d.ts.map +1 -1
  51. package/dist/types/components/Avatar/index.d.ts +1 -1
  52. package/dist/types/components/Avatar/index.d.ts.map +1 -1
  53. package/dist/types/components/Button/Button.d.ts +3 -3
  54. package/dist/types/components/Button/Button.d.ts.map +1 -1
  55. package/dist/types/components/DataPieChart/DataPieChart.d.ts +13 -2
  56. package/dist/types/components/DataPieChart/DataPieChart.d.ts.map +1 -1
  57. package/dist/types/components/DataPieChart/index.d.ts +1 -1
  58. package/dist/types/components/DataPieChart/index.d.ts.map +1 -1
  59. package/dist/types/components/Tabs/Tabs.d.ts +17 -2
  60. package/dist/types/components/Tabs/Tabs.d.ts.map +1 -1
  61. package/dist/types/components/index.d.ts +2 -2
  62. package/dist/types/components/index.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/tokens/t1-primitives/color.json +10 -0
  65. package/tokens/t2-alias/base.json +14 -0
  66. package/tokens/t2-alias/brand/bouwplan/dark.json +5 -0
  67. package/tokens/t2-alias/brand/bouwplan/light.json +5 -0
  68. package/tokens/t2-alias/brand/fscl/dark.json +5 -0
  69. package/tokens/t2-alias/brand/fscl/light.json +5 -0
  70. package/tokens/t2-alias/brand/grip/dark.json +14 -0
  71. package/tokens/t2-alias/brand/grip/light.json +14 -0
  72. package/tokens/t2-alias/brand/muka/dark.json +14 -0
  73. package/tokens/t2-alias/brand/muka/light.json +14 -0
  74. package/tokens/t2-alias/brand/wireframe/dark.json +14 -0
  75. package/tokens/t2-alias/brand/wireframe/light.json +14 -0
  76. package/tokens/t3-semantics/ui.json +49 -2
  77. package/tokens/t4-components/avatar.json +82 -18
  78. package/tokens/t4-components/button.json +56 -0
  79. package/tokens/t4-components/tabs.json +41 -1
@@ -12,12 +12,29 @@
12
12
  vertical-align: middle;
13
13
  background-color: var(--avatar-color-background-default);
14
14
  color: var(--avatar-color-foreground-default);
15
- border: var(--avatar-border-width) solid var(--avatar-color-border-default);
16
15
  font-family: var(--alias-font-brand-family);
17
16
  font-weight: var(--alias-font-brand-weight-semibold);
18
17
  }
19
18
 
20
19
  /* Size variants */
20
+ .muka-avatar--4xs {
21
+ width: var(--avatar-size-4xs);
22
+ height: var(--avatar-size-4xs);
23
+ font-size: var(--avatar-font-size-3xs); /* only used by an AvatarGroup "+N" */
24
+ }
25
+
26
+ .muka-avatar--3xs {
27
+ width: var(--avatar-size-3xs);
28
+ height: var(--avatar-size-3xs);
29
+ font-size: var(--avatar-font-size-3xs);
30
+ }
31
+
32
+ .muka-avatar--2xs {
33
+ width: var(--avatar-size-2xs);
34
+ height: var(--avatar-size-2xs);
35
+ font-size: var(--avatar-font-size-2xs);
36
+ }
37
+
21
38
  .muka-avatar--xs {
22
39
  width: var(--avatar-size-xs);
23
40
  height: var(--avatar-size-xs);
@@ -57,6 +74,20 @@
57
74
  border-radius: var(--avatar-radius-square);
58
75
  }
59
76
 
77
+ .muka-avatar--square.muka-avatar--4xs,
78
+ .muka-avatar--square.muka-avatar--3xs,
79
+ .muka-avatar--square.muka-avatar--2xs {
80
+ border-radius: var(--avatar-radius-square-sm);
81
+ }
82
+
83
+ /* 4xs is too small for initials, the fallback icon or a status dot:
84
+ it shows the picture, or the plain background */
85
+ .muka-avatar--4xs .muka-avatar__initials,
86
+ .muka-avatar--4xs .muka-avatar__fallback,
87
+ .muka-avatar--4xs .muka-avatar__status {
88
+ display: none;
89
+ }
90
+
60
91
  /* Clickable state */
61
92
  .muka-avatar--clickable {
62
93
  cursor: pointer;
@@ -160,6 +191,16 @@
160
191
  box-sizing: border-box;
161
192
  }
162
193
 
194
+ .muka-avatar--3xs .muka-avatar__status {
195
+ width: var(--avatar-status-size-3xs);
196
+ height: var(--avatar-status-size-3xs);
197
+ }
198
+
199
+ .muka-avatar--2xs .muka-avatar__status {
200
+ width: var(--avatar-status-size-2xs);
201
+ height: var(--avatar-status-size-2xs);
202
+ }
203
+
163
204
  .muka-avatar--xs .muka-avatar__status {
164
205
  width: var(--avatar-status-size-xs);
165
206
  height: var(--avatar-status-size-xs);
@@ -213,44 +254,17 @@
213
254
  background-color: var(--avatar-color-status-away);
214
255
  }
215
256
 
216
- /* Avatar Group */
257
+ /* Avatar Group (Figma "Avatar Stack") */
217
258
  .muka-avatar-group {
218
259
  display: inline-flex;
219
260
  align-items: center;
220
261
  flex-direction: row;
221
262
  }
222
263
 
264
+ /* Later avatars sit on top of earlier ones (DOM order); a hovered one comes to the front */
223
265
  .muka-avatar-group__item {
224
266
  position: relative;
225
267
  display: inline-flex;
226
- border: 2px solid var(--color-surface-level1);
227
- border-radius: inherit;
228
- }
229
-
230
- /* Add border radius to match avatar shape */
231
- .muka-avatar-group__item .muka-avatar--circle {
232
- border-radius: var(--avatar-radius-circle);
233
- }
234
-
235
- .muka-avatar-group__item .muka-avatar--square {
236
- border-radius: var(--avatar-radius-square);
237
- }
238
-
239
- .muka-avatar-group__item .muka-avatar {
240
- border: none;
241
- }
242
-
243
- /* Spacing variants for avatar group */
244
- .muka-avatar-group--tight .muka-avatar-group__item:not(:first-child) {
245
- margin-left: calc(var(--avatar-group-spacing-tight));
246
- }
247
-
248
- .muka-avatar-group--normal .muka-avatar-group__item:not(:first-child) {
249
- margin-left: calc(var(--avatar-group-spacing-normal));
250
- }
251
-
252
- /* Z-index stacking for overlap effect */
253
- .muka-avatar-group__item {
254
268
  z-index: 0;
255
269
  }
256
270
 
@@ -258,6 +272,41 @@
258
272
  z-index: 10;
259
273
  }
260
274
 
275
+ /* Grouped avatars get a ring outside their edge, drawn as a shadow so it
276
+ does not change the avatar's size or the overlap */
277
+ .muka-avatar-group__item .muka-avatar {
278
+ box-shadow: 0 0 0 var(--avatar-group-ring-width) var(--avatar-group-ring-color);
279
+ }
280
+
281
+ /* Overlap. Figma specifies exact values for 48 / 32 / 24px avatars (sm / 2xs / 3xs);
282
+ other sizes use the same proportions: tight 2/3, compact 1/2, spacious 1/3. */
283
+ .muka-avatar-group--4xs { --muka-avatar-group-size: var(--avatar-size-4xs); }
284
+ .muka-avatar-group--3xs { --muka-avatar-group-size: var(--avatar-size-3xs); }
285
+ .muka-avatar-group--2xs { --muka-avatar-group-size: var(--avatar-size-2xs); }
286
+ .muka-avatar-group--xs { --muka-avatar-group-size: var(--avatar-size-xs); }
287
+ .muka-avatar-group--sm { --muka-avatar-group-size: var(--avatar-size-sm); }
288
+ .muka-avatar-group--md { --muka-avatar-group-size: var(--avatar-size-md); }
289
+ .muka-avatar-group--lg { --muka-avatar-group-size: var(--avatar-size-lg); }
290
+ .muka-avatar-group--xl { --muka-avatar-group-size: var(--avatar-size-xl); }
291
+
292
+ .muka-avatar-group--tight { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) * 2 / 3); }
293
+ .muka-avatar-group--compact { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 2); }
294
+ .muka-avatar-group--spacious { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 3); }
295
+
296
+ .muka-avatar-group--tight.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-sm); }
297
+ .muka-avatar-group--tight.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-2xs); }
298
+ .muka-avatar-group--tight.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-3xs); }
299
+ .muka-avatar-group--compact.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-sm); }
300
+ .muka-avatar-group--compact.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-2xs); }
301
+ .muka-avatar-group--compact.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-3xs); }
302
+ .muka-avatar-group--spacious.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-sm); }
303
+ .muka-avatar-group--spacious.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-2xs); }
304
+ .muka-avatar-group--spacious.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-3xs); }
305
+
306
+ .muka-avatar-group__item:not(:first-child) {
307
+ margin-left: calc(-1 * var(--muka-avatar-group-overlap));
308
+ }
309
+
261
310
  /* Overflow avatar styling */
262
311
  .muka-avatar--overflow {
263
312
  background-color: var(--avatar-color-background-default);
@@ -116,6 +116,39 @@
116
116
  opacity: 1; /* Remove opacity since we have proper disabled tokens */
117
117
  }
118
118
 
119
+ /* Destructive variant - primary's structure on the solid error fill, for
120
+ irreversible actions. Hover and pressed step away from the label color, so
121
+ contrast never drops (darker in light themes, lighter in dark themes).
122
+ Disabled is neutral grey rather than primary's brand-tinted fill. */
123
+ .muka-button--destructive {
124
+ background-color: var(--button-color-destructive-background-default);
125
+ color: var(--button-color-destructive-foreground-default);
126
+ box-shadow: var(--button-color-destructive-shadow-default);
127
+ }
128
+
129
+ .muka-button--destructive:hover:not(:disabled) {
130
+ background-color: var(--button-color-destructive-background-hover);
131
+ color: var(--button-color-destructive-foreground-hover);
132
+ box-shadow: var(--button-color-destructive-shadow-hover);
133
+ }
134
+
135
+ .muka-button--destructive:active:not(:disabled),
136
+ .muka-button--destructive.muka-button--pressed:not(:disabled),
137
+ .muka-button--destructive[data-state="open"]:not(:disabled),
138
+ .muka-button--destructive[aria-pressed="true"]:not(:disabled) {
139
+ background-color: var(--button-color-destructive-background-pressed);
140
+ color: var(--button-color-destructive-foreground-pressed);
141
+ box-shadow: var(--button-color-destructive-shadow-pressed);
142
+ }
143
+
144
+ .muka-button--destructive:disabled {
145
+ background-color: var(--button-color-destructive-background-disabled);
146
+ color: var(--button-color-destructive-foreground-disabled);
147
+ box-shadow: var(--button-color-destructive-shadow-disabled);
148
+ cursor: not-allowed;
149
+ opacity: 1;
150
+ }
151
+
119
152
  /* Secondary variant - supporting actions, no border, only bottom inner shadow */
120
153
  .muka-button--secondary {
121
154
  background-color: var(--button-color-secondary-background-default);
@@ -28,12 +28,17 @@
28
28
  border-bottom: 1px solid var(--tabs-trigger-color-default-border);
29
29
  }
30
30
 
31
+ /* Padding: inset the tabs; the divider (border) still spans the full width */
32
+ .muka-tabs--padding-default .muka-tabs__list {
33
+ padding-inline: var(--tabs-list-padding-x);
34
+ }
35
+
31
36
  /* Tab Trigger — clean underline style */
32
37
  .muka-tabs__trigger {
33
38
  display: inline-flex;
34
39
  align-items: center;
35
40
  justify-content: center;
36
- gap: var(--spacing-2, 8px);
41
+ gap: var(--spacing-1);
37
42
  background: transparent;
38
43
  border: none;
39
44
  cursor: pointer;
@@ -46,8 +51,8 @@
46
51
  color: var(--tabs-trigger-color-default-foreground);
47
52
 
48
53
  /* Default MD size values */
49
- height: 48px;
50
- padding: 0 var(--spacing-3, 12px);
54
+ min-height: var(--tabs-trigger-min-height-md);
55
+ padding: var(--spacing-3);
51
56
  font-family: var(--text-label-md-regular-fontFamily);
52
57
  font-weight: var(--text-label-md-regular-fontWeight);
53
58
  font-size: var(--text-label-md-regular-fontSize);
@@ -56,8 +61,8 @@
56
61
 
57
62
  /* Size Variants */
58
63
  .muka-tabs--size-sm .muka-tabs__trigger {
59
- height: 36px;
60
- padding: 0 var(--spacing-2, 8px);
64
+ min-height: var(--tabs-trigger-min-height-sm);
65
+ padding: 0 var(--spacing-2);
61
66
  font-family: var(--text-label-sm-regular-fontFamily);
62
67
  font-weight: var(--text-label-sm-regular-fontWeight);
63
68
  font-size: var(--text-label-sm-regular-fontSize);
@@ -65,8 +70,8 @@
65
70
  }
66
71
 
67
72
  .muka-tabs--size-lg .muka-tabs__trigger {
68
- height: 56px;
69
- padding: 0 var(--spacing-4, 16px);
73
+ min-height: var(--tabs-trigger-min-height-lg);
74
+ padding: var(--spacing-4);
70
75
  font-family: var(--text-label-lg-regular-fontFamily);
71
76
  font-weight: var(--text-label-lg-regular-fontWeight);
72
77
  font-size: var(--text-label-lg-regular-fontSize);
@@ -90,8 +95,8 @@
90
95
  bottom: -1px; /* Overlap the 1px border */
91
96
  left: 0;
92
97
  right: 0;
93
- height: 3px;
94
- background-color: var(--tabs-trigger-color-current-foreground);
98
+ height: var(--tabs-indicator-height-md);
99
+ background-color: var(--tabs-indicator-color);
95
100
  border-bottom-left-radius: 1px;
96
101
  border-bottom-right-radius: 1px;
97
102
  border-top-left-radius: 3px;
@@ -99,6 +104,13 @@
99
104
  z-index: 3;
100
105
  }
101
106
 
107
+ .muka-tabs--size-sm .muka-tabs__trigger--current::after {
108
+ height: var(--tabs-indicator-height-sm);
109
+ }
110
+ .muka-tabs--size-lg .muka-tabs__trigger--current::after {
111
+ height: var(--tabs-indicator-height-lg);
112
+ }
113
+
102
114
  .muka-tabs__trigger--disabled {
103
115
  color: var(--tabs-trigger-color-disabled-foreground);
104
116
  cursor: not-allowed;
@@ -109,18 +121,29 @@
109
121
  outline-offset: -2px;
110
122
  }
111
123
 
112
- /* Icons */
113
- .muka-tabs__icon {
124
+ /* Label: Figma pads the label 8px either side, so with the 4px gap a leading
125
+ item sits 12px from the text */
126
+ .muka-tabs__label {
127
+ padding: 0 var(--spacing-2);
128
+ }
129
+
130
+ /* Leading item: icon, avatar, avatar group or data pie chart */
131
+ .muka-tabs__leading {
114
132
  display: flex;
115
133
  align-items: center;
116
134
  justify-content: center;
135
+ flex-shrink: 0;
117
136
  }
118
137
  .muka-tabs__trigger .muka-icon {
119
138
  color: inherit;
120
139
  }
121
- .muka-tabs--size-sm .muka-tabs__icon svg { width: 16px; height: 16px; }
122
- .muka-tabs--size-md .muka-tabs__icon svg { width: 20px; height: 20px; }
123
- .muka-tabs--size-lg .muka-tabs__icon svg { width: 24px; height: 24px; }
140
+ /* Icon sizes only: avatars and pie charts are sized through their size prop */
141
+ .muka-tabs--size-sm .muka-tabs__leading > svg,
142
+ .muka-tabs--size-sm .muka-tabs__leading > .muka-icon svg { width: 16px; height: 16px; }
143
+ .muka-tabs--size-md .muka-tabs__leading > svg,
144
+ .muka-tabs--size-md .muka-tabs__leading > .muka-icon svg { width: 20px; height: 20px; }
145
+ .muka-tabs--size-lg .muka-tabs__leading > svg,
146
+ .muka-tabs--size-lg .muka-tabs__leading > .muka-icon svg { width: 24px; height: 24px; }
124
147
 
125
148
  /* Responsive Scroll behavior on small screens */
126
149
  @media (max-width: 768px) {