agent-hub-sdd 0.1.6 → 0.1.7

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/README.md CHANGED
@@ -15,10 +15,10 @@ npm run app
15
15
  Pelo npm (precisa do Node 20+ no PATH):
16
16
 
17
17
  ```powershell
18
- npx --yes agent-hub-sdd@0.1.6
18
+ npx --yes agent-hub-sdd@0.1.7
19
19
  ```
20
20
 
21
- Na primeira abertura a janela diz que está compilando. O **N** no canto é o Next.js em modo dev, não o app. Sem `@0.1.6`, o Windows pode reusar cache antigo.
21
+ Na primeira abertura a janela diz que está compilando. O **N** no canto é o Next.js em modo dev, não o app. Sem `@0.1.7`, o Windows pode reusar cache antigo.
22
22
 
23
23
  Se ainda abrir a 0.1.2, ou se o npm disser `EBUSY` / `resource busy or locked`, o Next da tentativa antiga ainda está com o cache aberto. O `Stop-Process electron` não mata esse `node`:
24
24
 
@@ -27,13 +27,13 @@ Get-CimInstance Win32_Process | Where-Object {
27
27
  $_.CommandLine -and ($_.CommandLine -match 'agent-hub|_npx|next dev|43147')
28
28
  } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue }
29
29
  Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx" -ErrorAction SilentlyContinue
30
- npx --yes agent-hub-sdd@0.1.6
30
+ npx --yes agent-hub-sdd@0.1.7
31
31
  ```
32
32
 
33
33
  Instalar global evita o rename do `npx` nessa pasta:
34
34
 
35
35
  ```powershell
36
- npm install -g agent-hub-sdd@0.1.6
36
+ npm install -g agent-hub-sdd@0.1.7
37
37
  agent-hub-sdd
38
38
  ```
39
39
 
@@ -2,7 +2,15 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
 
5
- const COPY = ["src", "public", "next.config.ts", "tsconfig.json", "components.json", "package.json"];
5
+ const COPY = [
6
+ "src",
7
+ "public",
8
+ "next.config.ts",
9
+ "tsconfig.json",
10
+ "components.json",
11
+ "package.json",
12
+ "postcss.config.mjs",
13
+ ];
6
14
 
7
15
  export function isNestedPackage(dir) {
8
16
  return path.basename(path.dirname(path.resolve(dir))) === "node_modules";
@@ -21,12 +21,14 @@ describe("stageHub", () => {
21
21
  temps.push(root);
22
22
  const pkg = path.join(root, "node_modules", "agent-hub-sdd");
23
23
  fs.mkdirSync(path.join(pkg, "src", "components"), { recursive: true });
24
- fs.writeFileSync(path.join(pkg, "package.json"), JSON.stringify({ name: "agent-hub-sdd", version: "0.1.6" }));
24
+ fs.writeFileSync(path.join(pkg, "package.json"), JSON.stringify({ name: "agent-hub-sdd", version: "0.1.7" }));
25
+ fs.writeFileSync(path.join(pkg, "postcss.config.mjs"), "export default { plugins: {} };\n");
25
26
  fs.writeFileSync(path.join(pkg, "src", "components", "desktop-chrome.tsx"), "export const DesktopChrome = () => null;\n");
26
27
  fs.writeFileSync(path.join(root, "node_modules", "sentinel"), "ok");
27
28
  const dest = path.join(root, "runtime");
28
29
  expect(stageHub(pkg, dest)).toBe(dest);
29
30
  expect(fs.readFileSync(path.join(dest, "src", "components", "desktop-chrome.tsx"), "utf8")).toContain("DesktopChrome");
31
+ expect(fs.existsSync(path.join(dest, "postcss.config.mjs"))).toBe(true);
30
32
  expect(fs.readFileSync(path.join(dest, "node_modules", "sentinel"), "utf8")).toBe("ok");
31
33
  expect(fs.realpathSync(path.join(dest, "src")).includes(`${path.sep}node_modules${path.sep}`)).toBe(false);
32
34
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-hub-sdd",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "author": "Agent Hub",
@@ -27,6 +27,7 @@
27
27
  "public",
28
28
  "scripts",
29
29
  "next.config.ts",
30
+ "postcss.config.mjs",
30
31
  "tsconfig.json",
31
32
  "components.json",
32
33
  "eslint.config.mjs"
@@ -47,7 +48,11 @@
47
48
  "prepublishOnly": "node -e \"process.exit(0)\""
48
49
  },
49
50
  "dependencies": {
51
+ "@tailwindcss/postcss": "^4.3.3",
50
52
  "@tailwindcss/turbopack": "^4",
53
+ "@types/node": "^22.20.5",
54
+ "@types/react": "^19",
55
+ "@types/react-dom": "^19",
51
56
  "class-variance-authority": "^0.7.1",
52
57
  "cn": "^0.5.0",
53
58
  "electron": "^45.0.0",
@@ -59,10 +64,7 @@
59
64
  "shadcn": "^4.22.1",
60
65
  "tailwindcss": "^4",
61
66
  "tw-animate-css": "^1.4.0",
62
- "typescript": "^5",
63
- "@types/node": "^22.20.5",
64
- "@types/react": "^19",
65
- "@types/react-dom": "^19"
67
+ "typescript": "^5"
66
68
  },
67
69
  "devDependencies": {
68
70
  "electron-builder": "^26.18.0",
@@ -0,0 +1,7 @@
1
+ const config = {
2
+ plugins: {
3
+ "@tailwindcss/postcss": {},
4
+ },
5
+ };
6
+
7
+ export default config;
@@ -8,4 +8,4 @@ Get-CimInstance Win32_Process |
8
8
  Stop-Process -Name electron -Force
9
9
  $npx = Join-Path $env:LOCALAPPDATA "npm-cache\_npx"
10
10
  if (Test-Path $npx) { Remove-Item -Recurse -Force $npx }
11
- Write-Host "Cache do npx limpo. Rode: npx --yes agent-hub-sdd@0.1.6"
11
+ Write-Host "Cache do npx limpo. Rode: npx --yes agent-hub-sdd@0.1.7"
@@ -0,0 +1,118 @@
1
+ /* Vanilla fallback so the hub stays usable if Tailwind fails to bundle (npx/webpack). */
2
+ html,
3
+ body {
4
+ margin: 0;
5
+ min-height: 100%;
6
+ background: #000;
7
+ color: #f4f4f5;
8
+ font-family: "Segoe UI", ui-sans-serif, system-ui, sans-serif;
9
+ }
10
+
11
+ a {
12
+ color: inherit;
13
+ text-decoration: none;
14
+ }
15
+
16
+ button,
17
+ input,
18
+ textarea {
19
+ font: inherit;
20
+ color: inherit;
21
+ }
22
+
23
+ button {
24
+ cursor: pointer;
25
+ background: #18181b;
26
+ border: 1px solid #27272a;
27
+ border-radius: 0.5rem;
28
+ padding: 0.25rem 0.6rem;
29
+ }
30
+
31
+ input,
32
+ textarea {
33
+ background: #18181b;
34
+ border: 1px solid #27272a;
35
+ border-radius: 0.5rem;
36
+ padding: 0.35rem 0.55rem;
37
+ }
38
+
39
+ .flex {
40
+ display: flex;
41
+ }
42
+ .flex-col {
43
+ flex-direction: column;
44
+ }
45
+ .flex-1 {
46
+ flex: 1 1 0%;
47
+ }
48
+ .min-h-0 {
49
+ min-height: 0;
50
+ }
51
+ .min-w-0 {
52
+ min-width: 0;
53
+ }
54
+ .h-full {
55
+ height: 100%;
56
+ }
57
+ .h-dvh {
58
+ height: 100dvh;
59
+ }
60
+ .w-full {
61
+ width: 100%;
62
+ }
63
+ .shrink-0 {
64
+ flex-shrink: 0;
65
+ }
66
+ .gap-1 {
67
+ gap: 0.25rem;
68
+ }
69
+ .gap-2 {
70
+ gap: 0.5rem;
71
+ }
72
+ .gap-3 {
73
+ gap: 0.75rem;
74
+ }
75
+ .overflow-hidden {
76
+ overflow: hidden;
77
+ }
78
+ .border-r {
79
+ border-right: 1px solid #27272a;
80
+ }
81
+ .border-b {
82
+ border-bottom: 1px solid #27272a;
83
+ }
84
+ .bg-black {
85
+ background: #000;
86
+ }
87
+ .text-zinc-100 {
88
+ color: #f4f4f5;
89
+ }
90
+ .text-zinc-400 {
91
+ color: #a1a1aa;
92
+ }
93
+ .text-sm {
94
+ font-size: 0.875rem;
95
+ }
96
+ .p-3 {
97
+ padding: 0.75rem;
98
+ }
99
+ .px-2 {
100
+ padding-left: 0.5rem;
101
+ padding-right: 0.5rem;
102
+ }
103
+ .py-2 {
104
+ padding-top: 0.5rem;
105
+ padding-bottom: 0.5rem;
106
+ }
107
+ .grid {
108
+ display: grid;
109
+ }
110
+
111
+ @media (min-width: 768px) {
112
+ .md\:block {
113
+ display: block;
114
+ }
115
+ .md\:hidden {
116
+ display: none;
117
+ }
118
+ }
@@ -1,6 +1,6 @@
1
1
  @import "tailwindcss";
2
- @import "tw-animate-css";
3
- @import "shadcn/tailwind.css";
2
+ @import "./vendor/tw-animate.css";
3
+ @import "./vendor/shadcn-tailwind.css";
4
4
 
5
5
  @custom-variant dark (&:is(.dark *));
6
6
 
@@ -1,6 +1,7 @@
1
1
  import type { Metadata } from "next";
2
2
  import { DesktopChrome } from "@/components/desktop-chrome";
3
3
  import { TooltipProvider } from "@/components/ui/tooltip";
4
+ import "./fallback.css";
4
5
  import "./globals.css";
5
6
 
6
7
  export const metadata: Metadata = {
@@ -0,0 +1,637 @@
1
+ @theme inline {
2
+ @keyframes accordion-down {
3
+ from {
4
+ height: 0;
5
+ }
6
+ to {
7
+ height: var(
8
+ --radix-accordion-content-height,
9
+ var(--accordion-panel-height, auto)
10
+ );
11
+ }
12
+ }
13
+
14
+ @keyframes accordion-up {
15
+ from {
16
+ height: var(
17
+ --radix-accordion-content-height,
18
+ var(--accordion-panel-height, auto)
19
+ );
20
+ }
21
+ to {
22
+ height: 0;
23
+ }
24
+ }
25
+ }
26
+
27
+ /* Custom variants */
28
+ @custom-variant data-open {
29
+ &:where([data-state="open"]),
30
+ &:where([data-open]:not([data-open="false"])) {
31
+ @slot;
32
+ }
33
+ }
34
+
35
+ @custom-variant data-closed {
36
+ &:where([data-state="closed"]),
37
+ &:where([data-closed]:not([data-closed="false"])) {
38
+ @slot;
39
+ }
40
+ }
41
+
42
+ @custom-variant data-checked {
43
+ &:where([data-state="checked"]),
44
+ &:where([data-checked]:not([data-checked="false"])) {
45
+ @slot;
46
+ }
47
+ }
48
+
49
+ @custom-variant data-unchecked {
50
+ &:where([data-state="unchecked"]),
51
+ &:where([data-unchecked]:not([data-unchecked="false"])) {
52
+ @slot;
53
+ }
54
+ }
55
+
56
+ @custom-variant data-selected {
57
+ &:where([data-selected="true"]) {
58
+ @slot;
59
+ }
60
+ }
61
+
62
+ @custom-variant data-disabled {
63
+ &:where([data-disabled="true"]),
64
+ &:where([data-disabled]:not([data-disabled="false"])) {
65
+ @slot;
66
+ }
67
+ }
68
+
69
+ @custom-variant data-active {
70
+ &:where([data-state="active"]),
71
+ &:where([data-active]:not([data-active="false"])) {
72
+ @slot;
73
+ }
74
+ }
75
+
76
+ @custom-variant data-horizontal {
77
+ &:where([data-orientation="horizontal"]) {
78
+ @slot;
79
+ }
80
+ }
81
+
82
+ @custom-variant data-vertical {
83
+ &:where([data-orientation="vertical"]) {
84
+ @slot;
85
+ }
86
+ }
87
+
88
+ @utility no-scrollbar {
89
+ -ms-overflow-style: none;
90
+ scrollbar-width: none;
91
+
92
+ &::-webkit-scrollbar {
93
+ display: none;
94
+ }
95
+ }
96
+
97
+ /* scroll-fade */
98
+ @property --scroll-fade-t {
99
+ syntax: "<length-percentage>";
100
+ inherits: false;
101
+ initial-value: 0px;
102
+ }
103
+ @property --scroll-fade-b {
104
+ syntax: "<length-percentage>";
105
+ inherits: false;
106
+ initial-value: 0px;
107
+ }
108
+ @property --scroll-fade-s {
109
+ syntax: "<length-percentage>";
110
+ inherits: false;
111
+ initial-value: 0px;
112
+ }
113
+ @property --scroll-fade-e {
114
+ syntax: "<length-percentage>";
115
+ inherits: false;
116
+ initial-value: 0px;
117
+ }
118
+ @property --scroll-fade-mask {
119
+ syntax: "*";
120
+ inherits: false;
121
+ }
122
+
123
+ @theme inline {
124
+ @keyframes scroll-fade-reveal-t {
125
+ from {
126
+ --scroll-fade-t: 0px;
127
+ }
128
+ to {
129
+ --scroll-fade-t: var(--_scroll-fade-size-t, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
130
+ }
131
+ }
132
+ @keyframes scroll-fade-reveal-b {
133
+ from {
134
+ --scroll-fade-b: var(--_scroll-fade-size-b, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
135
+ }
136
+ to {
137
+ --scroll-fade-b: 0px;
138
+ }
139
+ }
140
+ @keyframes scroll-fade-reveal-s {
141
+ from {
142
+ --scroll-fade-s: 0px;
143
+ }
144
+ to {
145
+ --scroll-fade-s: var(--_scroll-fade-size-s, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
146
+ }
147
+ }
148
+ @keyframes scroll-fade-reveal-e {
149
+ from {
150
+ --scroll-fade-e: var(--_scroll-fade-size-e, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
151
+ }
152
+ to {
153
+ --scroll-fade-e: 0px;
154
+ }
155
+ }
156
+ }
157
+
158
+ @utility scroll-fade {
159
+ --_scroll-fade-size-t: var(
160
+ --scroll-fade-t-size,
161
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
162
+ );
163
+ --_scroll-fade-size-b: var(
164
+ --scroll-fade-b-size,
165
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
166
+ );
167
+ --scroll-fade-block: linear-gradient(
168
+ to bottom,
169
+ transparent 0,
170
+ #000 var(--scroll-fade-t, 0px),
171
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
172
+ transparent 100%
173
+ );
174
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
175
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
176
+ -webkit-mask-composite: source-in;
177
+ mask-composite: intersect;
178
+ -webkit-mask-repeat: no-repeat;
179
+ mask-repeat: no-repeat;
180
+
181
+ @supports (animation-timeline: scroll()) {
182
+ animation:
183
+ scroll-fade-reveal-t 1ms ease-in-out,
184
+ scroll-fade-reveal-b 1ms ease-in-out;
185
+ animation-timeline: scroll(self y), scroll(self y);
186
+ animation-range:
187
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
188
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
189
+ animation-fill-mode: both;
190
+ }
191
+
192
+ @supports not (animation-timeline: scroll()) {
193
+ --scroll-fade-t: var(--_scroll-fade-size-t);
194
+ --scroll-fade-b: var(--_scroll-fade-size-b);
195
+ }
196
+ }
197
+
198
+ @utility scroll-fade-y {
199
+ --_scroll-fade-size-t: var(
200
+ --scroll-fade-t-size,
201
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
202
+ );
203
+ --_scroll-fade-size-b: var(
204
+ --scroll-fade-b-size,
205
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
206
+ );
207
+ --scroll-fade-block: linear-gradient(
208
+ to bottom,
209
+ transparent 0,
210
+ #000 var(--scroll-fade-t, 0px),
211
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
212
+ transparent 100%
213
+ );
214
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
215
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
216
+ -webkit-mask-composite: source-in;
217
+ mask-composite: intersect;
218
+ -webkit-mask-repeat: no-repeat;
219
+ mask-repeat: no-repeat;
220
+
221
+ @supports (animation-timeline: scroll()) {
222
+ animation:
223
+ scroll-fade-reveal-t 1ms ease-in-out,
224
+ scroll-fade-reveal-b 1ms ease-in-out;
225
+ animation-timeline: scroll(self y), scroll(self y);
226
+ animation-range:
227
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
228
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
229
+ animation-fill-mode: both;
230
+ }
231
+
232
+ @supports not (animation-timeline: scroll()) {
233
+ --scroll-fade-t: var(--_scroll-fade-size-t);
234
+ --scroll-fade-b: var(--_scroll-fade-size-b);
235
+ }
236
+ }
237
+
238
+ @utility scroll-fade-x {
239
+ --_scroll-fade-size-s: var(
240
+ --scroll-fade-s-size,
241
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
242
+ );
243
+ --_scroll-fade-size-e: var(
244
+ --scroll-fade-e-size,
245
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
246
+ );
247
+ --scroll-fade-inline: linear-gradient(
248
+ to right,
249
+ transparent 0,
250
+ #000 var(--scroll-fade-s, 0px),
251
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
252
+ transparent 100%
253
+ );
254
+ &:where([dir="rtl"], [dir="rtl"] *) {
255
+ --scroll-fade-inline: linear-gradient(
256
+ to left,
257
+ transparent 0,
258
+ #000 var(--scroll-fade-s, 0px),
259
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
260
+ transparent 100%
261
+ );
262
+ }
263
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
264
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
265
+ -webkit-mask-composite: source-in;
266
+ mask-composite: intersect;
267
+ -webkit-mask-repeat: no-repeat;
268
+ mask-repeat: no-repeat;
269
+
270
+ @supports (animation-timeline: scroll()) {
271
+ animation:
272
+ scroll-fade-reveal-s 1ms ease-in-out,
273
+ scroll-fade-reveal-e 1ms ease-in-out;
274
+ animation-timeline: scroll(self inline), scroll(self inline);
275
+ animation-range:
276
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
277
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
278
+ animation-fill-mode: both;
279
+ }
280
+
281
+ @supports not (animation-timeline: scroll()) {
282
+ --scroll-fade-s: var(--_scroll-fade-size-s);
283
+ --scroll-fade-e: var(--_scroll-fade-size-e);
284
+ }
285
+ }
286
+
287
+ @utility scroll-fade-t {
288
+ --_scroll-fade-size-t: var(
289
+ --scroll-fade-t-size,
290
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
291
+ );
292
+ --scroll-fade-mask: linear-gradient(
293
+ to bottom,
294
+ transparent 0,
295
+ #000 var(--scroll-fade-t, 0px),
296
+ #000 100%
297
+ );
298
+ -webkit-mask-image: var(--scroll-fade-mask);
299
+ mask-image: var(--scroll-fade-mask);
300
+ -webkit-mask-composite: source-in;
301
+ mask-composite: intersect;
302
+ -webkit-mask-repeat: no-repeat;
303
+ mask-repeat: no-repeat;
304
+
305
+ @supports (animation-timeline: scroll()) {
306
+ animation: scroll-fade-reveal-t 1ms ease-in-out;
307
+ animation-timeline: scroll(self y);
308
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
309
+ animation-fill-mode: both;
310
+ }
311
+
312
+ @supports not (animation-timeline: scroll()) {
313
+ --scroll-fade-t: var(--_scroll-fade-size-t);
314
+ }
315
+ }
316
+
317
+ @utility scroll-fade-b {
318
+ --_scroll-fade-size-b: var(
319
+ --scroll-fade-b-size,
320
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
321
+ );
322
+ --scroll-fade-mask: linear-gradient(
323
+ to bottom,
324
+ #000 0,
325
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
326
+ transparent 100%
327
+ );
328
+ -webkit-mask-image: var(--scroll-fade-mask);
329
+ mask-image: var(--scroll-fade-mask);
330
+ -webkit-mask-composite: source-in;
331
+ mask-composite: intersect;
332
+ -webkit-mask-repeat: no-repeat;
333
+ mask-repeat: no-repeat;
334
+
335
+ @supports (animation-timeline: scroll()) {
336
+ animation: scroll-fade-reveal-b 1ms ease-in-out;
337
+ animation-timeline: scroll(self y);
338
+ animation-range: calc(
339
+ 100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))
340
+ )
341
+ 100%;
342
+ animation-fill-mode: both;
343
+ }
344
+
345
+ @supports not (animation-timeline: scroll()) {
346
+ --scroll-fade-b: var(--_scroll-fade-size-b);
347
+ }
348
+ }
349
+
350
+ @utility scroll-fade-l {
351
+ --_scroll-fade-size-s: var(
352
+ --scroll-fade-s-size,
353
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
354
+ );
355
+ --scroll-fade-mask: linear-gradient(
356
+ to right,
357
+ transparent 0,
358
+ #000 var(--scroll-fade-s, 0px),
359
+ #000 100%
360
+ );
361
+ -webkit-mask-image: var(--scroll-fade-mask);
362
+ mask-image: var(--scroll-fade-mask);
363
+ -webkit-mask-composite: source-in;
364
+ mask-composite: intersect;
365
+ -webkit-mask-repeat: no-repeat;
366
+ mask-repeat: no-repeat;
367
+
368
+ @supports (animation-timeline: scroll()) {
369
+ animation: scroll-fade-reveal-s 1ms ease-in-out;
370
+ animation-timeline: scroll(self x);
371
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
372
+ animation-fill-mode: both;
373
+ }
374
+
375
+ @supports not (animation-timeline: scroll()) {
376
+ --scroll-fade-s: var(--_scroll-fade-size-s);
377
+ }
378
+ }
379
+
380
+ @utility scroll-fade-r {
381
+ --_scroll-fade-size-e: var(
382
+ --scroll-fade-e-size,
383
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
384
+ );
385
+ --scroll-fade-mask: linear-gradient(
386
+ to right,
387
+ #000 0,
388
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
389
+ transparent 100%
390
+ );
391
+ -webkit-mask-image: var(--scroll-fade-mask);
392
+ mask-image: var(--scroll-fade-mask);
393
+ -webkit-mask-composite: source-in;
394
+ mask-composite: intersect;
395
+ -webkit-mask-repeat: no-repeat;
396
+ mask-repeat: no-repeat;
397
+
398
+ @supports (animation-timeline: scroll()) {
399
+ animation: scroll-fade-reveal-e 1ms ease-in-out;
400
+ animation-timeline: scroll(self x);
401
+ animation-range: calc(
402
+ 100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))
403
+ )
404
+ 100%;
405
+ animation-fill-mode: both;
406
+ }
407
+
408
+ @supports not (animation-timeline: scroll()) {
409
+ --scroll-fade-e: var(--_scroll-fade-size-e);
410
+ }
411
+ }
412
+
413
+ @utility scroll-fade-s {
414
+ --_scroll-fade-size-s: var(
415
+ --scroll-fade-s-size,
416
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
417
+ );
418
+ --scroll-fade-mask: linear-gradient(
419
+ to right,
420
+ transparent 0,
421
+ #000 var(--scroll-fade-s, 0px),
422
+ #000 100%
423
+ );
424
+ &:where([dir="rtl"], [dir="rtl"] *) {
425
+ --scroll-fade-mask: linear-gradient(
426
+ to left,
427
+ transparent 0,
428
+ #000 var(--scroll-fade-s, 0px),
429
+ #000 100%
430
+ );
431
+ }
432
+ -webkit-mask-image: var(--scroll-fade-mask);
433
+ mask-image: var(--scroll-fade-mask);
434
+ -webkit-mask-composite: source-in;
435
+ mask-composite: intersect;
436
+ -webkit-mask-repeat: no-repeat;
437
+ mask-repeat: no-repeat;
438
+
439
+ @supports (animation-timeline: scroll()) {
440
+ animation: scroll-fade-reveal-s 1ms ease-in-out;
441
+ animation-timeline: scroll(self inline);
442
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
443
+ animation-fill-mode: both;
444
+ }
445
+
446
+ @supports not (animation-timeline: scroll()) {
447
+ --scroll-fade-s: var(--_scroll-fade-size-s);
448
+ }
449
+ }
450
+
451
+ @utility scroll-fade-e {
452
+ --_scroll-fade-size-e: var(
453
+ --scroll-fade-e-size,
454
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
455
+ );
456
+ --scroll-fade-mask: linear-gradient(
457
+ to right,
458
+ #000 0,
459
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
460
+ transparent 100%
461
+ );
462
+ &:where([dir="rtl"], [dir="rtl"] *) {
463
+ --scroll-fade-mask: linear-gradient(
464
+ to left,
465
+ #000 0,
466
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
467
+ transparent 100%
468
+ );
469
+ }
470
+ -webkit-mask-image: var(--scroll-fade-mask);
471
+ mask-image: var(--scroll-fade-mask);
472
+ -webkit-mask-composite: source-in;
473
+ mask-composite: intersect;
474
+ -webkit-mask-repeat: no-repeat;
475
+ mask-repeat: no-repeat;
476
+
477
+ @supports (animation-timeline: scroll()) {
478
+ animation: scroll-fade-reveal-e 1ms ease-in-out;
479
+ animation-timeline: scroll(self inline);
480
+ animation-range: calc(
481
+ 100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))
482
+ )
483
+ 100%;
484
+ animation-fill-mode: both;
485
+ }
486
+
487
+ @supports not (animation-timeline: scroll()) {
488
+ --scroll-fade-e: var(--_scroll-fade-size-e);
489
+ }
490
+ }
491
+
492
+ @utility scroll-fade-* {
493
+ --scroll-fade-size: calc(var(--spacing) * --value(integer));
494
+ --scroll-fade-size: --value([length], [percentage]);
495
+ }
496
+
497
+ @utility scroll-fade-t-* {
498
+ --scroll-fade-t-size: calc(var(--spacing) * --value(integer));
499
+ --scroll-fade-t-size: --value([length], [percentage]);
500
+ }
501
+
502
+ @utility scroll-fade-b-* {
503
+ --scroll-fade-b-size: calc(var(--spacing) * --value(integer));
504
+ --scroll-fade-b-size: --value([length], [percentage]);
505
+ }
506
+
507
+ @utility scroll-fade-s-* {
508
+ --scroll-fade-s-size: calc(var(--spacing) * --value(integer));
509
+ --scroll-fade-s-size: --value([length], [percentage]);
510
+ }
511
+
512
+ @utility scroll-fade-e-* {
513
+ --scroll-fade-e-size: calc(var(--spacing) * --value(integer));
514
+ --scroll-fade-e-size: --value([length], [percentage]);
515
+ }
516
+
517
+ @utility scroll-fade-none {
518
+ --scroll-fade-mask: none;
519
+ }
520
+
521
+ /* shimmer */
522
+ @property --shimmer-angle {
523
+ syntax: "<angle>";
524
+ inherits: true;
525
+ initial-value: 20deg;
526
+ }
527
+ @property --shimmer-image {
528
+ syntax: "*";
529
+ inherits: false;
530
+ }
531
+ @property --shimmer-text-fill {
532
+ syntax: "*";
533
+ inherits: false;
534
+ }
535
+
536
+ @theme inline {
537
+ @keyframes tw-shimmer {
538
+ from {
539
+ background-position: 100% 0;
540
+ }
541
+ to {
542
+ background-position: 0 0;
543
+ }
544
+ }
545
+ }
546
+
547
+ @utility shimmer {
548
+ --_spread: var(--shimmer-spread, calc(3ch + 40px));
549
+ --_base: currentColor;
550
+ --_highlight: var(
551
+ --shimmer-color,
552
+ oklch(from currentColor l c h / calc(alpha* 0.2))
553
+ );
554
+
555
+ background-image: var(
556
+ --shimmer-image,
557
+ linear-gradient(
558
+ calc(90deg + var(--shimmer-angle)),
559
+ var(--_base) calc(50% - var(--_spread)),
560
+ color-mix(in oklch, var(--_highlight), var(--_base) 50%)
561
+ calc(50% - var(--_spread) * 0.5),
562
+ var(--_highlight) 50%,
563
+ color-mix(in oklch, var(--_highlight), var(--_base) 50%)
564
+ calc(50% + var(--_spread) * 0.5),
565
+ var(--_base) calc(50% + var(--_spread))
566
+ )
567
+ );
568
+ background-repeat: no-repeat;
569
+ background-size: calc(200% + var(--_spread) * 2) 100%;
570
+ background-position: 0 0;
571
+ background-clip: text;
572
+ -webkit-background-clip: text;
573
+ -webkit-text-fill-color: var(--shimmer-text-fill, transparent);
574
+ animation: tw-shimmer var(--shimmer-duration, 2s) linear infinite;
575
+
576
+ @variant dark {
577
+ --_highlight: var(
578
+ --shimmer-color,
579
+ oklch(from currentColor max(0.8, calc(l + 0.4)) c h / calc(alpha + 0.4))
580
+ );
581
+ }
582
+
583
+ &:where([dir="rtl"], [dir="rtl"] *) {
584
+ animation-direction: reverse;
585
+ }
586
+
587
+ @media (prefers-reduced-motion: reduce) {
588
+ animation: none;
589
+ background-image: none;
590
+ -webkit-text-fill-color: currentColor;
591
+ }
592
+ }
593
+
594
+ @utility shimmer-once {
595
+ animation-iteration-count: 1;
596
+ }
597
+
598
+ @utility shimmer-reverse {
599
+ animation-direction: reverse;
600
+ }
601
+
602
+ @utility shimmer-none {
603
+ --shimmer-image: none;
604
+ --shimmer-text-fill: currentColor;
605
+ }
606
+
607
+ @utility shimmer-color-* {
608
+ --shimmer-color: --value(--color, [color]);
609
+ --shimmer-color: color-mix(
610
+ in oklch,
611
+ --value(--color, [color]) calc(--modifier(integer) * 1%),
612
+ transparent
613
+ );
614
+ }
615
+
616
+ @utility shimmer-duration-* {
617
+ --shimmer-duration: calc(--value(integer) * 1ms);
618
+ }
619
+
620
+ @utility shimmer-spread-* {
621
+ --shimmer-spread: calc(var(--spacing) * --value(integer));
622
+ --shimmer-spread: --value([length], [percentage]);
623
+ }
624
+
625
+ @utility shimmer-angle-* {
626
+ --shimmer-angle: calc(--value(integer) * 1deg);
627
+ }
628
+
629
+ /* Kept for backwards compatibility. Unlayered, so it still wins over other
630
+ utilities on a plain .shimmer element. Variants are handled in the utility. */
631
+ @media (prefers-reduced-motion: reduce) {
632
+ .shimmer {
633
+ animation: none;
634
+ background-image: none;
635
+ -webkit-text-fill-color: currentColor;
636
+ }
637
+ }
@@ -0,0 +1 @@
1
+ @property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@theme inline{--animation-delay-0: 0s; --animation-delay-75: 75ms; --animation-delay-100: .1s; --animation-delay-150: .15s; --animation-delay-200: .2s; --animation-delay-300: .3s; --animation-delay-500: .5s; --animation-delay-700: .7s; --animation-delay-1000: 1s; --animation-repeat-0: 0; --animation-repeat-1: 1; --animation-repeat-infinite: infinite; --animation-direction-normal: normal; --animation-direction-reverse: reverse; --animation-direction-alternate: alternate; --animation-direction-alternate-reverse: alternate-reverse; --animation-fill-mode-none: none; --animation-fill-mode-forwards: forwards; --animation-fill-mode-backwards: backwards; --animation-fill-mode-both: both; --percentage-0: 0; --percentage-5: .05; --percentage-10: .1; --percentage-15: .15; --percentage-20: .2; --percentage-25: .25; --percentage-30: .3; --percentage-35: .35; --percentage-40: .4; --percentage-45: .45; --percentage-50: .5; --percentage-55: .55; --percentage-60: .6; --percentage-65: .65; --percentage-70: .7; --percentage-75: .75; --percentage-80: .8; --percentage-85: .85; --percentage-90: .9; --percentage-95: .95; --percentage-100: 1; --percentage-translate-full: 1; --animate-in: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-out: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); @keyframes enter { from { opacity: var(--tw-enter-opacity,1); transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0)); filter: blur(var(--tw-enter-blur,0)); }}@keyframes exit { to { opacity: var(--tw-exit-opacity,1); transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0)); filter: blur(var(--tw-exit-blur,0)); }}--animate-accordion-down: accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-accordion-up: accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-collapsible-down: collapsible-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-collapsible-up: collapsible-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); @keyframes accordion-down { from { height: 0; }to { height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto))))); }}@keyframes accordion-up { from { height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto))))); }to { height: 0; }}@keyframes collapsible-down { from { height: 0; }to { height: var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto)))); }}@keyframes collapsible-up { from { height: var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto)))); }to { height: 0; }}--animate-caret-blink: caret-blink 1.25s ease-out infinite; @keyframes caret-blink { 0%,70%,100% { opacity: 1; }20%,50% { opacity: 0; }}}@utility animation-duration-*{--tw-animation-duration: calc(--value(number)*1ms); --tw-animation-duration: --value(--animation-duration-*,[duration],"initial",[*]); animation-duration: calc(--value(number)*1ms); animation-duration: --value(--animation-duration-*,[duration],"initial",[*]);}@utility delay-*{animation-delay: calc(--value(number)*1ms); animation-delay: --value(--animation-delay-*,[duration],"initial",[*]); --tw-animation-delay: calc(--value(number)*1ms); --tw-animation-delay: --value(--animation-delay-*,[duration],"initial",[*]);}@utility repeat-*{animation-iteration-count: --value(--animation-repeat-*,number,"initial",[*]); --tw-animation-iteration-count: --value(--animation-repeat-*,number,"initial",[*]);}@utility direction-*{animation-direction: --value(--animation-direction-*,"initial",[*]); --tw-animation-direction: --value(--animation-direction-*,"initial",[*]);}@utility fill-mode-*{animation-fill-mode: --value(--animation-fill-mode-*,"initial",[*]); --tw-animation-fill-mode: --value(--animation-fill-mode-*,"initial",[*]);}@utility running{animation-play-state: running;}@utility paused{animation-play-state: paused;}@utility play-state-*{animation-play-state: --value("initial",[*]);}@utility blur-in{--tw-enter-blur: 20px;}@utility blur-in-*{--tw-enter-blur: calc(--value(number)*1px); --tw-enter-blur: --value(--blur-*,[*]);}@utility blur-out{--tw-exit-blur: 20px;}@utility blur-out-*{--tw-exit-blur: calc(--value(number)*1px); --tw-exit-blur: --value(--blur-*,[*]);}@utility fade-in{--tw-enter-opacity: 0;}@utility fade-in-*{--tw-enter-opacity: calc(--value(number)/100); --tw-enter-opacity: --value(--percentage-*,[*]);}@utility fade-out{--tw-exit-opacity: 0;}@utility fade-out-*{--tw-exit-opacity: calc(--value(number)/100); --tw-exit-opacity: --value(--percentage-*,[*]);}@utility zoom-in{--tw-enter-scale: 0;}@utility zoom-in-*{--tw-enter-scale: calc(--value(number)*1%); --tw-enter-scale: calc(--value(ratio)); --tw-enter-scale: --value(--percentage-*,[*]);}@utility -zoom-in-*{--tw-enter-scale: calc(--value(number)*-1%); --tw-enter-scale: calc(--value(ratio)*-1); --tw-enter-scale: --value(--percentage-*,[*]);}@utility zoom-out{--tw-exit-scale: 0;}@utility zoom-out-*{--tw-exit-scale: calc(--value(number)*1%); --tw-exit-scale: calc(--value(ratio)); --tw-exit-scale: --value(--percentage-*,[*]);}@utility -zoom-out-*{--tw-exit-scale: calc(--value(number)*-1%); --tw-exit-scale: calc(--value(ratio)*-1); --tw-exit-scale: --value(--percentage-*,[*]);}@utility spin-in{--tw-enter-rotate: 30deg;}@utility spin-in-*{--tw-enter-rotate: calc(--value(number)*1deg); --tw-enter-rotate: calc(--value(ratio)*360deg); --tw-enter-rotate: --value(--rotate-*,[*]);}@utility -spin-in{--tw-enter-rotate: -30deg;}@utility -spin-in-*{--tw-enter-rotate: calc(--value(number)*-1deg); --tw-enter-rotate: calc(--value(ratio)*-360deg); --tw-enter-rotate: --value(--rotate-*,[*]);}@utility spin-out{--tw-exit-rotate: 30deg;}@utility spin-out-*{--tw-exit-rotate: calc(--value(number)*1deg); --tw-exit-rotate: calc(--value(ratio)*360deg); --tw-exit-rotate: --value(--rotate-*,[*]);}@utility -spin-out{--tw-exit-rotate: -30deg;}@utility -spin-out-*{--tw-exit-rotate: calc(--value(number)*-1deg); --tw-exit-rotate: calc(--value(ratio)*-360deg); --tw-exit-rotate: --value(--rotate-*,[*]);}@utility slide-in-from-top{--tw-enter-translate-y: -100%;}@utility slide-in-from-top-*{--tw-enter-translate-y: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-enter-translate-y: calc(--value(ratio)*-100%); --tw-enter-translate-y: calc(--value(--translate-*,[percentage],[length])*-1);}@utility slide-in-from-bottom{--tw-enter-translate-y: 100%;}@utility slide-in-from-bottom-*{--tw-enter-translate-y: calc(--value(integer)*var(--spacing)); --tw-enter-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-enter-translate-y: calc(--value(ratio)*100%); --tw-enter-translate-y: --value(--translate-*,[percentage],[length]);}@utility slide-in-from-left{--tw-enter-translate-x: -100%;}@utility slide-in-from-left-*{--tw-enter-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-enter-translate-x: calc(--value(ratio)*-100%); --tw-enter-translate-x: calc(--value(--translate-*,[percentage],[length])*-1);}@utility slide-in-from-right{--tw-enter-translate-x: 100%;}@utility slide-in-from-right-*{--tw-enter-translate-x: calc(--value(integer)*var(--spacing)); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-enter-translate-x: calc(--value(ratio)*100%); --tw-enter-translate-x: --value(--translate-*,[percentage],[length]);}@utility slide-in-from-start{&:dir(ltr){ --tw-enter-translate-x: -100%; }&:dir(rtl){ --tw-enter-translate-x: 100%; }}@utility slide-in-from-start-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-enter-translate-x: calc(--value(ratio)*-100%); --tw-enter-translate-x: calc(--value(--translate-*,[percentage],[length])*-1); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-enter-translate-x: calc(--value(ratio)*100%); --tw-enter-translate-x: --value(--translate-*,[percentage],[length]); }}@utility slide-in-from-end{&:dir(ltr){ --tw-enter-translate-x: 100%; }&:dir(rtl){ --tw-enter-translate-x: -100%; }}@utility slide-in-from-end-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-enter-translate-x: calc(--value(ratio)*100%); --tw-enter-translate-x: --value(--translate-*,[percentage],[length]); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-enter-translate-x: calc(--value(ratio)*-100%); --tw-enter-translate-x: calc(--value(--translate-*,[percentage],[length])*-1); }}@utility slide-out-to-top{--tw-exit-translate-y: -100%;}@utility slide-out-to-top-*{--tw-exit-translate-y: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-exit-translate-y: calc(--value(ratio)*-100%); --tw-exit-translate-y: calc(--value(--translate-*,[percentage],[length])*-1);}@utility slide-out-to-bottom{--tw-exit-translate-y: 100%;}@utility slide-out-to-bottom-*{--tw-exit-translate-y: calc(--value(integer)*var(--spacing)); --tw-exit-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-exit-translate-y: calc(--value(ratio)*100%); --tw-exit-translate-y: --value(--translate-*,[percentage],[length]);}@utility slide-out-to-left{--tw-exit-translate-x: -100%;}@utility slide-out-to-left-*{--tw-exit-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-exit-translate-x: calc(--value(ratio)*-100%); --tw-exit-translate-x: calc(--value(--translate-*,[percentage],[length])*-1);}@utility slide-out-to-right{--tw-exit-translate-x: 100%;}@utility slide-out-to-right-*{--tw-exit-translate-x: calc(--value(integer)*var(--spacing)); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-exit-translate-x: calc(--value(ratio)*100%); --tw-exit-translate-x: --value(--translate-*,[percentage],[length]);}@utility slide-out-to-start{&:dir(ltr){ --tw-exit-translate-x: -100%; }&:dir(rtl){ --tw-exit-translate-x: 100%; }}@utility slide-out-to-start-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-exit-translate-x: calc(--value(ratio)*-100%); --tw-exit-translate-x: calc(--value(--translate-*,[percentage],[length])*-1); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-exit-translate-x: calc(--value(ratio)*100%); --tw-exit-translate-x: --value(--translate-*,[percentage],[length]); }}@utility slide-out-to-end{&:dir(ltr){ --tw-exit-translate-x: 100%; }&:dir(rtl){ --tw-exit-translate-x: -100%; }}@utility slide-out-to-end-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-exit-translate-x: calc(--value(ratio)*100%); --tw-exit-translate-x: --value(--translate-*,[percentage],[length]); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-exit-translate-x: calc(--value(ratio)*-100%); --tw-exit-translate-x: calc(--value(--translate-*,[percentage],[length])*-1); }}