@wallarm-org/design-system 2.1.0 → 2.1.2-rc-fix-filter-cascade-tooltip.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 — drifting blooms, grain and a dot cluster behind the header and
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: slow-drifting blooms, grain and a dot cluster pooled bottom-left of the
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.
@@ -14,7 +14,7 @@ const CLEAR_KEYS = new Set([
14
14
  "Delete"
15
15
  ]);
16
16
  const FilterCascadeTrigger = (t0)=>{
17
- const $ = c(65);
17
+ const $ = c(68);
18
18
  let ariaLabel;
19
19
  let children;
20
20
  let className;
@@ -79,6 +79,7 @@ const FilterCascadeTrigger = (t0)=>{
79
79
  $[16] = api;
80
80
  $[17] = t4;
81
81
  } else t4 = $[17];
82
+ const controlProps = t4;
82
83
  let t5;
83
84
  if ($[18] !== isSet) {
84
85
  t5 = cn(filterDropdownControlVariants({
@@ -216,9 +217,9 @@ const FilterCascadeTrigger = (t0)=>{
216
217
  $[50] = t16;
217
218
  } else t16 = $[50];
218
219
  let t17;
219
- if ($[51] !== controlTestId || $[52] !== t15 || $[53] !== t16 || $[54] !== t4 || $[55] !== t5) {
220
+ if ($[51] !== controlProps || $[52] !== controlTestId || $[53] !== t15 || $[54] !== t16 || $[55] !== t5) {
220
221
  t17 = /*#__PURE__*/ jsxs("div", {
221
- ...t4,
222
+ ...controlProps,
222
223
  "data-slot": "filter-cascade-control",
223
224
  "data-testid": controlTestId,
224
225
  className: t5,
@@ -227,50 +228,60 @@ const FilterCascadeTrigger = (t0)=>{
227
228
  t16
228
229
  ]
229
230
  });
230
- $[51] = controlTestId;
231
- $[52] = t15;
232
- $[53] = t16;
233
- $[54] = t4;
231
+ $[51] = controlProps;
232
+ $[52] = controlTestId;
233
+ $[53] = t15;
234
+ $[54] = t16;
234
235
  $[55] = t5;
235
236
  $[56] = t17;
236
237
  } else t17 = $[56];
237
238
  const control = t17;
238
239
  if (!isSet) return control;
239
240
  let t18;
240
- if ($[57] !== control) {
241
- t18 = /*#__PURE__*/ jsx(TooltipTrigger, {
242
- asChild: true,
243
- children: control
244
- });
245
- $[57] = control;
241
+ if ($[57] !== controlProps.id) {
242
+ t18 = {
243
+ trigger: controlProps.id
244
+ };
245
+ $[57] = controlProps.id;
246
246
  $[58] = t18;
247
247
  } else t18 = $[58];
248
248
  let t19;
249
- if ($[59] !== fullPath || $[60] !== label) {
250
- t19 = /*#__PURE__*/ jsxs(TooltipContent, {
249
+ if ($[59] !== control) {
250
+ t19 = /*#__PURE__*/ jsx(TooltipTrigger, {
251
+ asChild: true,
252
+ children: control
253
+ });
254
+ $[59] = control;
255
+ $[60] = t19;
256
+ } else t19 = $[60];
257
+ let t20;
258
+ if ($[61] !== fullPath || $[62] !== label) {
259
+ t20 = /*#__PURE__*/ jsxs(TooltipContent, {
251
260
  children: [
252
261
  label,
253
262
  " — ",
254
263
  fullPath
255
264
  ]
256
265
  });
257
- $[59] = fullPath;
258
- $[60] = label;
259
- $[61] = t19;
260
- } else t19 = $[61];
261
- let t20;
262
- if ($[62] !== t18 || $[63] !== t19) {
263
- t20 = /*#__PURE__*/ jsxs(Tooltip, {
266
+ $[61] = fullPath;
267
+ $[62] = label;
268
+ $[63] = t20;
269
+ } else t20 = $[63];
270
+ let t21;
271
+ if ($[64] !== t18 || $[65] !== t19 || $[66] !== t20) {
272
+ t21 = /*#__PURE__*/ jsxs(Tooltip, {
273
+ ids: t18,
264
274
  children: [
265
- t18,
266
- t19
275
+ t19,
276
+ t20
267
277
  ]
268
278
  });
269
- $[62] = t18;
270
- $[63] = t19;
271
- $[64] = t20;
272
- } else t20 = $[64];
273
- return t20;
279
+ $[64] = t18;
280
+ $[65] = t19;
281
+ $[66] = t20;
282
+ $[67] = t21;
283
+ } else t21 = $[67];
284
+ return t21;
274
285
  };
275
286
  FilterCascadeTrigger.displayName = "FilterCascadeTrigger";
276
287
  function _temp(node) {
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "2.0.0",
3
- "generatedAt": "2026-10-07T13:55:02.346Z",
2
+ "version": "2.1.1",
3
+ "generatedAt": "2026-10-08T07:30:13.430Z",
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 — drifting blooms, grain and a dot cluster behind the header and\nrail. On by default; `false` leaves the flat Frame token fill.",
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. They wander
12
- * on 60–90 s loops, stretching as they move. This is the "mesh gradient" of the 21st.dev
13
- * builder, in the shell's own tones.
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 and never repaints with the blooms.
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
- * patches of it surface and dissolve under two drifting noise
19
- * masks, so the grid is never fully there.
18
+ * two noise masks break it into patches, so the grid is never
19
+ * fully there.
20
20
  *
21
- * Softness is baked into the gradient stops rather than `filter: blur()`:
22
- * a blur on a transform-animated layer is re-run by the GPU every frame, a
23
- * gradient is rasterised once and then only composited.
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, position and drift path; the falloff below approximates a Gaussian so no
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) so the animated masks repaint a small box, not the viewport.
298
- Three masks intersect: the vertical fade, and two tiles of low-frequency
299
- noise drifting in opposite directions. Dots show only where both noise
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallarm-org/design-system",
3
- "version": "2.1.0",
3
+ "version": "2.1.2-rc-fix-filter-cascade-tooltip.1",
4
4
  "description": "Core design system library with React components and Storybook documentation",
5
5
  "publishConfig": {
6
6
  "access": "public",