@revikornmann/muka-ui 0.26.0 → 0.27.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/cjs/components/Avatar/Avatar.css +79 -30
- package/dist/cjs/components/Avatar/Avatar.js +1 -1
- package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
- package/dist/cjs/components/Avatar/AvatarGroup.js +4 -3
- package/dist/cjs/components/Avatar/AvatarGroup.js.map +1 -1
- package/dist/cjs/components/Button/Button.css +33 -0
- package/dist/cjs/components/Button/Button.js +2 -2
- package/dist/cjs/components/DataPieChart/DataPieChart.js +5 -2
- package/dist/cjs/components/DataPieChart/DataPieChart.js.map +1 -1
- package/dist/cjs/components/DataPieChart/index.js.map +1 -1
- package/dist/cjs/components/Tabs/Tabs.css +37 -14
- package/dist/cjs/components/Tabs/Tabs.js +30 -10
- package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.css +79 -30
- package/dist/esm/components/Avatar/Avatar.js +1 -1
- package/dist/esm/components/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/Avatar/AvatarGroup.js +4 -3
- package/dist/esm/components/Avatar/AvatarGroup.js.map +1 -1
- package/dist/esm/components/Button/Button.css +33 -0
- package/dist/esm/components/Button/Button.js +2 -2
- package/dist/esm/components/DataPieChart/DataPieChart.js +4 -1
- package/dist/esm/components/DataPieChart/DataPieChart.js.map +1 -1
- package/dist/esm/components/DataPieChart/index.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.css +37 -14
- package/dist/esm/components/Tabs/Tabs.js +30 -10
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/index.js.map +1 -1
- package/dist/styles/components/Avatar.css +79 -30
- package/dist/styles/components/Button.css +33 -0
- package/dist/styles/components/Tabs.css +37 -14
- package/dist/styles/index.css +796 -648
- package/dist/styles/muka-dark.css +796 -648
- package/dist/styles/muka-light.css +796 -648
- package/dist/styles/tokens-bouwplan-dark.css +48 -5
- package/dist/styles/tokens-bouwplan-light.css +48 -5
- package/dist/styles/tokens-fscl-dark.css +48 -5
- package/dist/styles/tokens-fscl-light.css +48 -5
- package/dist/styles/tokens-grip-dark.css +48 -5
- package/dist/styles/tokens-grip-light.css +48 -5
- package/dist/styles/tokens-muka-dark.css +48 -5
- package/dist/styles/tokens-muka-light.css +48 -5
- package/dist/styles/tokens-wireframe-dark.css +48 -5
- package/dist/styles/tokens-wireframe-light.css +48 -5
- package/dist/styles/wireframe-dark.css +796 -648
- package/dist/styles/wireframe-light.css +796 -648
- package/dist/types/components/Avatar/Avatar.d.ts +8 -3
- package/dist/types/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/types/components/Avatar/AvatarGroup.d.ts +10 -5
- package/dist/types/components/Avatar/AvatarGroup.d.ts.map +1 -1
- package/dist/types/components/Avatar/index.d.ts +1 -1
- package/dist/types/components/Avatar/index.d.ts.map +1 -1
- package/dist/types/components/Button/Button.d.ts +3 -3
- package/dist/types/components/Button/Button.d.ts.map +1 -1
- package/dist/types/components/DataPieChart/DataPieChart.d.ts +13 -2
- package/dist/types/components/DataPieChart/DataPieChart.d.ts.map +1 -1
- package/dist/types/components/DataPieChart/index.d.ts +1 -1
- package/dist/types/components/DataPieChart/index.d.ts.map +1 -1
- package/dist/types/components/Tabs/Tabs.d.ts +17 -2
- package/dist/types/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +2 -2
- package/dist/types/components/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/tokens/t1-primitives/color.json +10 -0
- package/tokens/t2-alias/base.json +14 -0
- package/tokens/t2-alias/brand/bouwplan/dark.json +5 -0
- package/tokens/t2-alias/brand/bouwplan/light.json +5 -0
- package/tokens/t2-alias/brand/fscl/dark.json +5 -0
- package/tokens/t2-alias/brand/fscl/light.json +5 -0
- package/tokens/t2-alias/brand/grip/dark.json +14 -0
- package/tokens/t2-alias/brand/grip/light.json +14 -0
- package/tokens/t2-alias/brand/muka/dark.json +14 -0
- package/tokens/t2-alias/brand/muka/light.json +14 -0
- package/tokens/t2-alias/brand/wireframe/dark.json +14 -0
- package/tokens/t2-alias/brand/wireframe/light.json +14 -0
- package/tokens/t3-semantics/ui.json +49 -2
- package/tokens/t4-components/avatar.json +82 -18
- package/tokens/t4-components/button.json +56 -0
- 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-
|
|
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:
|
|
50
|
-
padding:
|
|
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:
|
|
60
|
-
padding: 0 var(--spacing-2
|
|
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:
|
|
69
|
-
padding:
|
|
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:
|
|
94
|
-
background-color: var(--tabs-
|
|
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
|
-
/*
|
|
113
|
-
|
|
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
|
-
|
|
122
|
-
.muka-tabs--size-
|
|
123
|
-
.muka-tabs--size-
|
|
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) {
|