@wallarm-org/design-system 2.1.0 → 2.1.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.
|
@@ -13,7 +13,7 @@ export interface AppShellProps extends HTMLAttributes<HTMLDivElement>, TestableP
|
|
|
13
13
|
onRevealed?: () => void;
|
|
14
14
|
appeared?: boolean;
|
|
15
15
|
/**
|
|
16
|
-
* The Frame's ambient layer —
|
|
16
|
+
* The Frame's ambient layer — soft blooms, grain and a dot cluster behind the header and
|
|
17
17
|
* rail. On by default; `false` leaves the flat Frame token fill.
|
|
18
18
|
*/
|
|
19
19
|
ambient?: boolean;
|
|
@@ -2,7 +2,7 @@ import type { FC } from 'react';
|
|
|
2
2
|
/**
|
|
3
3
|
* The Frame's ambient layer. The Frame is the shell's gray zone — the header
|
|
4
4
|
* bar plus the rail, everything around the canvas — and Ambient is the life in
|
|
5
|
-
* it:
|
|
5
|
+
* it: soft blooms, grain and a dot cluster pooled bottom-left of the
|
|
6
6
|
* rail. Purely decorative, painted under every region (see
|
|
7
7
|
* `theme/components/app-shell.css`). Internal to `AppShell`; toggled with its
|
|
8
8
|
* `ambient` prop.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.
|
|
3
|
-
"generatedAt": "2026-10-
|
|
2
|
+
"version": "2.1.0",
|
|
3
|
+
"generatedAt": "2026-10-07T16:30:13.387Z",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"name": "Accordion",
|
|
@@ -4236,7 +4236,7 @@
|
|
|
4236
4236
|
"name": "ambient",
|
|
4237
4237
|
"type": "boolean | undefined",
|
|
4238
4238
|
"required": false,
|
|
4239
|
-
"description": "The Frame's ambient layer —
|
|
4239
|
+
"description": "The Frame's ambient layer — soft blooms, grain and a dot cluster behind the header and\nrail. On by default; `false` leaves the flat Frame token fill.",
|
|
4240
4240
|
"defaultValue": "true"
|
|
4241
4241
|
},
|
|
4242
4242
|
{
|
|
@@ -8,19 +8,19 @@
|
|
|
8
8
|
* Three stacked layers, all decorative, all under the regions:
|
|
9
9
|
* 1. blooms — seven large soft gray spots: four in the rail (two lifts, two
|
|
10
10
|
* shades) and three flat ellipses crossing
|
|
11
|
-
* the top edge so the header carries the same light.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* the top edge so the header carries the same light. This is a
|
|
12
|
+
* still frame of the "mesh gradient" of the 21st.dev builder, in
|
|
13
|
+
* the shell's own tones.
|
|
14
14
|
* 2. grain — desaturated fractal noise tiled as a background image, so it
|
|
15
|
-
* rasterises once
|
|
15
|
+
* rasterises once.
|
|
16
16
|
* 3. dots — a 12px halftone raster (the auth-page scanner's grid) pooled
|
|
17
17
|
* in the bottom-left of the rail, fading upward to nothing;
|
|
18
|
-
*
|
|
19
|
-
*
|
|
18
|
+
* two noise masks break it into patches, so the grid is never
|
|
19
|
+
* fully there.
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
21
|
+
* Nothing here animates (ENG-911): endless 60–150 s drift loops kept a CPU
|
|
22
|
+
* core busy on every idle tab just to repaint a background nobody watches.
|
|
23
|
+
* Softness is baked into the gradient stops rather than `filter: blur()`.
|
|
24
24
|
*
|
|
25
25
|
* The canvas (`AppShellRemote`) sits on top, so none of this shows under page
|
|
26
26
|
* content. Colours are theme tokens in semantic.css (light and dark), derived
|
|
@@ -61,14 +61,13 @@
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
/* One soft spot. Each `app-shell-ambient-bloom-N` only sets its colour (`--c`), shape,
|
|
64
|
-
size
|
|
64
|
+
size and position; the falloff below approximates a Gaussian so no
|
|
65
65
|
`filter: blur()` is needed. */
|
|
66
66
|
@utility app-shell-ambient-bloom {
|
|
67
67
|
--c: transparent;
|
|
68
68
|
--shape: circle;
|
|
69
69
|
position: absolute;
|
|
70
70
|
border-radius: 50%;
|
|
71
|
-
will-change: transform;
|
|
72
71
|
background: radial-gradient(
|
|
73
72
|
var(--shape),
|
|
74
73
|
var(--c) 0%,
|
|
@@ -77,10 +76,6 @@
|
|
|
77
76
|
color-mix(in srgb, var(--c) 12%, transparent) 64%,
|
|
78
77
|
transparent 78%
|
|
79
78
|
);
|
|
80
|
-
|
|
81
|
-
@media (prefers-reduced-motion: reduce) {
|
|
82
|
-
animation: none;
|
|
83
|
-
}
|
|
84
79
|
}
|
|
85
80
|
|
|
86
81
|
@utility app-shell-ambient-bloom-1 {
|
|
@@ -89,7 +84,6 @@
|
|
|
89
84
|
height: 760px;
|
|
90
85
|
left: -280px;
|
|
91
86
|
bottom: -240px;
|
|
92
|
-
animation: app-shell-ambient-drift-1 60s ease-in-out infinite;
|
|
93
87
|
}
|
|
94
88
|
|
|
95
89
|
@utility app-shell-ambient-bloom-2 {
|
|
@@ -98,7 +92,6 @@
|
|
|
98
92
|
height: 680px;
|
|
99
93
|
left: -140px;
|
|
100
94
|
top: 8%;
|
|
101
|
-
animation: app-shell-ambient-drift-2 74s ease-in-out infinite;
|
|
102
95
|
}
|
|
103
96
|
|
|
104
97
|
@utility app-shell-ambient-bloom-3 {
|
|
@@ -107,7 +100,6 @@
|
|
|
107
100
|
height: 540px;
|
|
108
101
|
left: -170px;
|
|
109
102
|
top: 46%;
|
|
110
|
-
animation: app-shell-ambient-drift-3 66s ease-in-out infinite;
|
|
111
103
|
}
|
|
112
104
|
|
|
113
105
|
@utility app-shell-ambient-bloom-4 {
|
|
@@ -116,7 +108,6 @@
|
|
|
116
108
|
height: 620px;
|
|
117
109
|
left: 30px;
|
|
118
110
|
bottom: -190px;
|
|
119
|
-
animation: app-shell-ambient-drift-4 82s ease-in-out infinite;
|
|
120
111
|
}
|
|
121
112
|
|
|
122
113
|
/* Header strip: three wide, flat ellipses crossing the top edge so the bar
|
|
@@ -130,7 +121,6 @@
|
|
|
130
121
|
height: 540px;
|
|
131
122
|
left: 22%;
|
|
132
123
|
top: -360px;
|
|
133
|
-
animation: app-shell-ambient-drift-5 90s ease-in-out infinite;
|
|
134
124
|
}
|
|
135
125
|
|
|
136
126
|
@utility app-shell-ambient-bloom-6 {
|
|
@@ -140,7 +130,6 @@
|
|
|
140
130
|
height: 580px;
|
|
141
131
|
right: -300px;
|
|
142
132
|
top: -390px;
|
|
143
|
-
animation: app-shell-ambient-drift-6 78s ease-in-out infinite;
|
|
144
133
|
}
|
|
145
134
|
|
|
146
135
|
@utility app-shell-ambient-bloom-7 {
|
|
@@ -150,138 +139,6 @@
|
|
|
150
139
|
height: 500px;
|
|
151
140
|
left: 20px;
|
|
152
141
|
top: -350px;
|
|
153
|
-
animation: app-shell-ambient-drift-7 70s ease-in-out infinite;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/* Drift paths. Each spot wanders through four waypoints instead of a straight
|
|
157
|
-
back-and-forth, stretching along the direction it moves (a liquid smearing
|
|
158
|
-
on a surface) and breathing a little in opacity. Transform + opacity only,
|
|
159
|
-
so the rasterised gradient is never repainted, just composited. */
|
|
160
|
-
@keyframes app-shell-ambient-drift-1 {
|
|
161
|
-
0% {
|
|
162
|
-
transform: translate(0, 0) rotate(0deg) scale(1, 1);
|
|
163
|
-
opacity: 1;
|
|
164
|
-
}
|
|
165
|
-
33% {
|
|
166
|
-
transform: translate(70px, -90px) rotate(6deg) scale(1.16, 0.92);
|
|
167
|
-
opacity: 0.9;
|
|
168
|
-
}
|
|
169
|
-
66% {
|
|
170
|
-
transform: translate(30px, -160px) rotate(-4deg) scale(0.94, 1.14);
|
|
171
|
-
opacity: 1;
|
|
172
|
-
}
|
|
173
|
-
100% {
|
|
174
|
-
transform: translate(0, 0) rotate(0deg) scale(1, 1);
|
|
175
|
-
opacity: 1;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
@keyframes app-shell-ambient-drift-2 {
|
|
179
|
-
0% {
|
|
180
|
-
transform: translate(0, 0) rotate(0deg) scale(1, 1);
|
|
181
|
-
opacity: 0.95;
|
|
182
|
-
}
|
|
183
|
-
33% {
|
|
184
|
-
transform: translate(-50px, 110px) rotate(-8deg) scale(0.9, 1.18);
|
|
185
|
-
opacity: 1;
|
|
186
|
-
}
|
|
187
|
-
66% {
|
|
188
|
-
transform: translate(40px, 170px) rotate(5deg) scale(1.2, 0.9);
|
|
189
|
-
opacity: 0.88;
|
|
190
|
-
}
|
|
191
|
-
100% {
|
|
192
|
-
transform: translate(0, 0) rotate(0deg) scale(1, 1);
|
|
193
|
-
opacity: 0.95;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
@keyframes app-shell-ambient-drift-3 {
|
|
197
|
-
0% {
|
|
198
|
-
transform: translate(0, 0) rotate(0deg) scale(1, 1);
|
|
199
|
-
opacity: 1;
|
|
200
|
-
}
|
|
201
|
-
33% {
|
|
202
|
-
transform: translate(60px, -120px) rotate(10deg) scale(1.22, 0.88);
|
|
203
|
-
opacity: 0.85;
|
|
204
|
-
}
|
|
205
|
-
66% {
|
|
206
|
-
transform: translate(-30px, -200px) rotate(-6deg) scale(0.92, 1.16);
|
|
207
|
-
opacity: 1;
|
|
208
|
-
}
|
|
209
|
-
100% {
|
|
210
|
-
transform: translate(0, 0) rotate(0deg) scale(1, 1);
|
|
211
|
-
opacity: 1;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
@keyframes app-shell-ambient-drift-4 {
|
|
215
|
-
0% {
|
|
216
|
-
transform: translate(0, 0) rotate(0deg) scale(1, 1);
|
|
217
|
-
opacity: 0.9;
|
|
218
|
-
}
|
|
219
|
-
33% {
|
|
220
|
-
transform: translate(-80px, -60px) rotate(-7deg) scale(1.18, 0.9);
|
|
221
|
-
opacity: 1;
|
|
222
|
-
}
|
|
223
|
-
66% {
|
|
224
|
-
transform: translate(-40px, -140px) rotate(4deg) scale(0.9, 1.2);
|
|
225
|
-
opacity: 0.86;
|
|
226
|
-
}
|
|
227
|
-
100% {
|
|
228
|
-
transform: translate(0, 0) rotate(0deg) scale(1, 1);
|
|
229
|
-
opacity: 0.9;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
@keyframes app-shell-ambient-drift-5 {
|
|
233
|
-
0% {
|
|
234
|
-
transform: translate(0, 0) scale(1, 1);
|
|
235
|
-
opacity: 1;
|
|
236
|
-
}
|
|
237
|
-
33% {
|
|
238
|
-
transform: translate(160px, 40px) scale(1.14, 0.94);
|
|
239
|
-
opacity: 0.85;
|
|
240
|
-
}
|
|
241
|
-
66% {
|
|
242
|
-
transform: translate(260px, 10px) scale(0.96, 1.1);
|
|
243
|
-
opacity: 1;
|
|
244
|
-
}
|
|
245
|
-
100% {
|
|
246
|
-
transform: translate(0, 0) scale(1, 1);
|
|
247
|
-
opacity: 1;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
@keyframes app-shell-ambient-drift-6 {
|
|
251
|
-
0% {
|
|
252
|
-
transform: translate(0, 0) scale(1, 1);
|
|
253
|
-
opacity: 0.95;
|
|
254
|
-
}
|
|
255
|
-
33% {
|
|
256
|
-
transform: translate(-200px, 30px) scale(1.12, 0.92);
|
|
257
|
-
opacity: 1;
|
|
258
|
-
}
|
|
259
|
-
66% {
|
|
260
|
-
transform: translate(-320px, 60px) scale(0.94, 1.12);
|
|
261
|
-
opacity: 0.85;
|
|
262
|
-
}
|
|
263
|
-
100% {
|
|
264
|
-
transform: translate(0, 0) scale(1, 1);
|
|
265
|
-
opacity: 0.95;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
@keyframes app-shell-ambient-drift-7 {
|
|
269
|
-
0% {
|
|
270
|
-
transform: translate(0, 0) scale(1, 1);
|
|
271
|
-
opacity: 1;
|
|
272
|
-
}
|
|
273
|
-
33% {
|
|
274
|
-
transform: translate(120px, 50px) scale(1.16, 0.9);
|
|
275
|
-
opacity: 0.88;
|
|
276
|
-
}
|
|
277
|
-
66% {
|
|
278
|
-
transform: translate(200px, 20px) scale(0.92, 1.12);
|
|
279
|
-
opacity: 1;
|
|
280
|
-
}
|
|
281
|
-
100% {
|
|
282
|
-
transform: translate(0, 0) scale(1, 1);
|
|
283
|
-
opacity: 1;
|
|
284
|
-
}
|
|
285
142
|
}
|
|
286
143
|
|
|
287
144
|
@utility app-shell-ambient-grain {
|
|
@@ -294,11 +151,9 @@
|
|
|
294
151
|
}
|
|
295
152
|
|
|
296
153
|
/* Dot cluster. Confined to the bottom-left of the Frame (the only place it is
|
|
297
|
-
ever visible)
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
tiles are open, so patches of dots surface and dissolve in place over a
|
|
301
|
-
couple of minutes instead of sliding across. */
|
|
154
|
+
ever visible). Three masks intersect: the vertical fade, and two tiles of
|
|
155
|
+
low-frequency noise. Dots show only where both noise tiles are open, so the
|
|
156
|
+
grid reads as scattered patches. */
|
|
302
157
|
@utility app-shell-ambient-dots {
|
|
303
158
|
position: absolute;
|
|
304
159
|
left: 0;
|
|
@@ -325,23 +180,4 @@
|
|
|
325
180
|
400px 400px;
|
|
326
181
|
mask-repeat: no-repeat, repeat, repeat;
|
|
327
182
|
mask-composite: intersect;
|
|
328
|
-
mask-position:
|
|
329
|
-
0 0,
|
|
330
|
-
0 0,
|
|
331
|
-
0 0;
|
|
332
|
-
animation: app-shell-ambient-dots-shift 150s linear infinite;
|
|
333
|
-
|
|
334
|
-
@media (prefers-reduced-motion: reduce) {
|
|
335
|
-
animation: none;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
/* Whole-tile offsets (multiples of 400px) so the loop is seamless. */
|
|
340
|
-
@keyframes app-shell-ambient-dots-shift {
|
|
341
|
-
to {
|
|
342
|
-
mask-position:
|
|
343
|
-
0 0,
|
|
344
|
-
400px -400px,
|
|
345
|
-
-800px 400px;
|
|
346
|
-
}
|
|
347
183
|
}
|