@vuecs/design 1.0.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/LICENSE +201 -0
- package/README.md +57 -0
- package/assets/animations.css +506 -0
- package/assets/index.css +197 -0
- package/assets/palettes.css +303 -0
- package/assets/standalone.css +37 -0
- package/dist/core/color-mode/bind.d.ts +12 -0
- package/dist/core/color-mode/bind.d.ts.map +1 -0
- package/dist/core/color-mode/composable.d.ts +13 -0
- package/dist/core/color-mode/composable.d.ts.map +1 -0
- package/dist/core/color-mode/index.d.ts +4 -0
- package/dist/core/color-mode/index.d.ts.map +1 -0
- package/dist/core/color-mode/types.d.ts +36 -0
- package/dist/core/color-mode/types.d.ts.map +1 -0
- package/dist/core/color-palette/apply.d.ts +34 -0
- package/dist/core/color-palette/apply.d.ts.map +1 -0
- package/dist/core/color-palette/bind.d.ts +14 -0
- package/dist/core/color-palette/bind.d.ts.map +1 -0
- package/dist/core/color-palette/catalog.d.ts +78 -0
- package/dist/core/color-palette/catalog.d.ts.map +1 -0
- package/dist/core/color-palette/composable.d.ts +34 -0
- package/dist/core/color-palette/composable.d.ts.map +1 -0
- package/dist/core/color-palette/index.d.ts +7 -0
- package/dist/core/color-palette/index.d.ts.map +1 -0
- package/dist/core/color-palette/render.d.ts +16 -0
- package/dist/core/color-palette/render.d.ts.map +1 -0
- package/dist/core/color-palette/types.d.ts +107 -0
- package/dist/core/color-palette/types.d.ts.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/theme-runtime/capture.d.ts +32 -0
- package/dist/core/theme-runtime/capture.d.ts.map +1 -0
- package/dist/core/theme-runtime/composable.d.ts +34 -0
- package/dist/core/theme-runtime/composable.d.ts.map +1 -0
- package/dist/core/theme-runtime/index.d.ts +4 -0
- package/dist/core/theme-runtime/index.d.ts.map +1 -0
- package/dist/core/theme-runtime/types.d.ts +42 -0
- package/dist/core/theme-runtime/types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +467 -0
- package/dist/index.mjs.map +1 -0
- package/dist/utils/object.d.ts +2 -0
- package/dist/utils/object.d.ts.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Overlay animations — vanilla-CSS port of tw-animate-css's public class
|
|
3
|
+
* surface so the same classes work for any theme (Tailwind, Bootstrap, custom),
|
|
4
|
+
* not just Tailwind v4.
|
|
5
|
+
*
|
|
6
|
+
* Source: https://github.com/Wombosvideo/tw-animate-css (v1.4.0, MIT)
|
|
7
|
+
*
|
|
8
|
+
* tw-animate-css ships its rules as Tailwind v4 `@utility` / `@theme inline`
|
|
9
|
+
* directives — they only compile inside Tailwind. This file rewrites those
|
|
10
|
+
* same rules as plain class selectors so consumers without Tailwind (e.g.
|
|
11
|
+
* Bootstrap-themed sites) can use them too. Tailwind users keep using the
|
|
12
|
+
* `data-[state=open]:fade-in-0 zoom-in-95 ...` variant pattern unchanged —
|
|
13
|
+
* Tailwind's `data-[state=]` variant prefix points at these CSS classes the
|
|
14
|
+
* same way it would at any other utility.
|
|
15
|
+
*
|
|
16
|
+
* When tw-animate-css adds new animations upstream, port them here using
|
|
17
|
+
* the same naming. Keep this file in lockstep with the upstream version
|
|
18
|
+
* pinned above; bump the version comment when you re-port.
|
|
19
|
+
*
|
|
20
|
+
* Composition model (mirrors tw-animate-css):
|
|
21
|
+
* <element class="animate-in fade-in-0 zoom-in-95 duration-150">
|
|
22
|
+
*
|
|
23
|
+
* - `animate-in` / `animate-out` apply the master `enter` / `exit`
|
|
24
|
+
* keyframes which read these CSS custom properties:
|
|
25
|
+
* --tw-enter-opacity, --tw-enter-scale, --tw-enter-rotate,
|
|
26
|
+
* --tw-enter-translate-x, --tw-enter-translate-y, --tw-enter-blur
|
|
27
|
+
* (and matching --tw-exit-* for animate-out)
|
|
28
|
+
* - Modifier classes (`fade-in`, `zoom-in-95`, `slide-in-from-top`, etc.)
|
|
29
|
+
* set the corresponding custom property; the master keyframe interpolates.
|
|
30
|
+
* - `duration-*` / `delay-*` / `repeat-*` / `direction-*` / `fill-mode-*`
|
|
31
|
+
* tune timing & lifecycle.
|
|
32
|
+
*
|
|
33
|
+
* For our overlays, theme-tailwind already references the relevant subset
|
|
34
|
+
* (animate-in, animate-out, fade-in-0, fade-out-0, zoom-in-95, zoom-out-95)
|
|
35
|
+
* via Tailwind's `data-[state=open|closed]:` variant prefix. Bootstrap
|
|
36
|
+
* theme entries can reference the same classes directly.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/* ---------- Custom properties (defaults for the master keyframes) ------- */
|
|
40
|
+
|
|
41
|
+
@property --tw-animation-delay { syntax: "*"; inherits: false; initial-value: 0s; }
|
|
42
|
+
@property --tw-animation-direction { syntax: "*"; inherits: false; initial-value: normal; }
|
|
43
|
+
@property --tw-animation-duration { syntax: "*"; inherits: false; initial-value: 150ms; }
|
|
44
|
+
@property --tw-animation-fill-mode { syntax: "*"; inherits: false; initial-value: none; }
|
|
45
|
+
@property --tw-animation-iteration-count { syntax: "*"; inherits: false; initial-value: 1; }
|
|
46
|
+
@property --tw-ease { syntax: "*"; inherits: false; initial-value: ease; }
|
|
47
|
+
|
|
48
|
+
@property --tw-enter-blur { syntax: "*"; inherits: false; initial-value: 0; }
|
|
49
|
+
@property --tw-enter-opacity { syntax: "*"; inherits: false; initial-value: 1; }
|
|
50
|
+
@property --tw-enter-rotate { syntax: "*"; inherits: false; initial-value: 0; }
|
|
51
|
+
@property --tw-enter-scale { syntax: "*"; inherits: false; initial-value: 1; }
|
|
52
|
+
@property --tw-enter-translate-x { syntax: "*"; inherits: false; initial-value: 0; }
|
|
53
|
+
@property --tw-enter-translate-y { syntax: "*"; inherits: false; initial-value: 0; }
|
|
54
|
+
|
|
55
|
+
@property --tw-exit-blur { syntax: "*"; inherits: false; initial-value: 0; }
|
|
56
|
+
@property --tw-exit-opacity { syntax: "*"; inherits: false; initial-value: 1; }
|
|
57
|
+
@property --tw-exit-rotate { syntax: "*"; inherits: false; initial-value: 0; }
|
|
58
|
+
@property --tw-exit-scale { syntax: "*"; inherits: false; initial-value: 1; }
|
|
59
|
+
@property --tw-exit-translate-x { syntax: "*"; inherits: false; initial-value: 0; }
|
|
60
|
+
@property --tw-exit-translate-y { syntax: "*"; inherits: false; initial-value: 0; }
|
|
61
|
+
|
|
62
|
+
/* Reka-injected vars consumed by accordion / collapsible keyframes.
|
|
63
|
+
Reka's `<AccordionContent>` and `<CollapsibleContent>` runtime sets
|
|
64
|
+
these on mount; declaring them here gives static analysers (and IDE
|
|
65
|
+
inspectors) something to resolve, plus a sensible `auto` fallback when
|
|
66
|
+
no Reka primitive is providing them. tw-animate-css upstream chains
|
|
67
|
+
var() fallbacks through radix / bits / kobalte / ng-primitives
|
|
68
|
+
namespaces too — vuecs only ever pairs with Reka, so we keep just
|
|
69
|
+
the one. If you ever need to swap or layer another radix-clone,
|
|
70
|
+
declare its var here too and chain it in the keyframe `var()` calls. */
|
|
71
|
+
@property --reka-accordion-content-height { syntax: "*"; inherits: false; initial-value: auto; }
|
|
72
|
+
@property --reka-collapsible-content-height { syntax: "*"; inherits: false; initial-value: auto; }
|
|
73
|
+
|
|
74
|
+
/* Reka-injected vars for toast swipe gesture. Reka's `<ToastRoot>` writes
|
|
75
|
+
`--reka-toast-swipe-move-x` while the user drags and
|
|
76
|
+
`--reka-toast-swipe-end-x` when the swipe completes; we read them from
|
|
77
|
+
`.vc-toast-anim[data-swipe=…]` rules. Declared with a `0px` fallback so
|
|
78
|
+
the rules render correctly even before Reka mounts the toast. */
|
|
79
|
+
@property --reka-toast-swipe-move-x { syntax: "*"; inherits: false; initial-value: 0px; }
|
|
80
|
+
@property --reka-toast-swipe-end-x { syntax: "*"; inherits: false; initial-value: 0px; }
|
|
81
|
+
|
|
82
|
+
/* ---------- Master keyframes ------------------------------------------- */
|
|
83
|
+
|
|
84
|
+
@keyframes enter {
|
|
85
|
+
from {
|
|
86
|
+
opacity: var(--tw-enter-opacity, 1);
|
|
87
|
+
transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0)
|
|
88
|
+
scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1))
|
|
89
|
+
rotate(var(--tw-enter-rotate, 0));
|
|
90
|
+
filter: blur(var(--tw-enter-blur, 0));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@keyframes exit {
|
|
95
|
+
to {
|
|
96
|
+
opacity: var(--tw-exit-opacity, 1);
|
|
97
|
+
transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0)
|
|
98
|
+
scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1))
|
|
99
|
+
rotate(var(--tw-exit-rotate, 0));
|
|
100
|
+
filter: blur(var(--tw-exit-blur, 0));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ---------- Specialised keyframes (Reka-driven height transitions) ----- */
|
|
105
|
+
|
|
106
|
+
/* Reka exposes the resolved height as `--reka-accordion-content-height`;
|
|
107
|
+
tw-animate-css also reads radix-/bits-/kobalte-/ng-primitives variants
|
|
108
|
+
so the same animations work across the radix-clone ecosystem. */
|
|
109
|
+
@keyframes accordion-down {
|
|
110
|
+
from { height: 0; }
|
|
111
|
+
to { height: var(--reka-accordion-content-height); }
|
|
112
|
+
}
|
|
113
|
+
@keyframes accordion-up {
|
|
114
|
+
from { height: var(--reka-accordion-content-height); }
|
|
115
|
+
to { height: 0; }
|
|
116
|
+
}
|
|
117
|
+
@keyframes collapsible-down {
|
|
118
|
+
from { height: 0; }
|
|
119
|
+
to { height: var(--reka-collapsible-content-height); }
|
|
120
|
+
}
|
|
121
|
+
@keyframes collapsible-up {
|
|
122
|
+
from { height: var(--reka-collapsible-content-height); }
|
|
123
|
+
to { height: 0; }
|
|
124
|
+
}
|
|
125
|
+
@keyframes caret-blink {
|
|
126
|
+
0%, 70%, 100% { opacity: 1; }
|
|
127
|
+
20%, 50% { opacity: 0; }
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* ---------- Master triggers -------------------------------------------- */
|
|
131
|
+
|
|
132
|
+
.animate-in {
|
|
133
|
+
animation: enter var(--tw-animation-duration, 150ms)
|
|
134
|
+
var(--tw-ease, ease)
|
|
135
|
+
var(--tw-animation-delay, 0s)
|
|
136
|
+
var(--tw-animation-iteration-count, 1)
|
|
137
|
+
var(--tw-animation-direction, normal)
|
|
138
|
+
var(--tw-animation-fill-mode, none);
|
|
139
|
+
}
|
|
140
|
+
.animate-out {
|
|
141
|
+
animation: exit var(--tw-animation-duration, 150ms)
|
|
142
|
+
var(--tw-ease, ease)
|
|
143
|
+
var(--tw-animation-delay, 0s)
|
|
144
|
+
var(--tw-animation-iteration-count, 1)
|
|
145
|
+
var(--tw-animation-direction, normal)
|
|
146
|
+
var(--tw-animation-fill-mode, none);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.animate-accordion-down { animation: accordion-down 200ms ease-out; }
|
|
150
|
+
.animate-accordion-up { animation: accordion-up 200ms ease-out; }
|
|
151
|
+
.animate-collapsible-down { animation: collapsible-down 200ms ease-out; }
|
|
152
|
+
.animate-collapsible-up { animation: collapsible-up 200ms ease-out; }
|
|
153
|
+
.animate-caret-blink { animation: caret-blink 1.25s ease-out infinite; }
|
|
154
|
+
|
|
155
|
+
/* ---------- Fade ------------------------------------------------------- */
|
|
156
|
+
|
|
157
|
+
.fade-in { --tw-enter-opacity: 0; }
|
|
158
|
+
.fade-in-0 { --tw-enter-opacity: 0; }
|
|
159
|
+
.fade-in-25 { --tw-enter-opacity: 0.25; }
|
|
160
|
+
.fade-in-50 { --tw-enter-opacity: 0.5; }
|
|
161
|
+
.fade-in-75 { --tw-enter-opacity: 0.75; }
|
|
162
|
+
.fade-in-90 { --tw-enter-opacity: 0.9; }
|
|
163
|
+
.fade-in-95 { --tw-enter-opacity: 0.95; }
|
|
164
|
+
.fade-in-100 { --tw-enter-opacity: 1; }
|
|
165
|
+
|
|
166
|
+
.fade-out { --tw-exit-opacity: 0; }
|
|
167
|
+
.fade-out-0 { --tw-exit-opacity: 0; }
|
|
168
|
+
.fade-out-25 { --tw-exit-opacity: 0.25; }
|
|
169
|
+
.fade-out-50 { --tw-exit-opacity: 0.5; }
|
|
170
|
+
.fade-out-75 { --tw-exit-opacity: 0.75; }
|
|
171
|
+
.fade-out-90 { --tw-exit-opacity: 0.9; }
|
|
172
|
+
.fade-out-95 { --tw-exit-opacity: 0.95; }
|
|
173
|
+
.fade-out-100 { --tw-exit-opacity: 1; }
|
|
174
|
+
|
|
175
|
+
/* ---------- Zoom ------------------------------------------------------- */
|
|
176
|
+
|
|
177
|
+
.zoom-in { --tw-enter-scale: 0; }
|
|
178
|
+
.zoom-in-0 { --tw-enter-scale: 0; }
|
|
179
|
+
.zoom-in-50 { --tw-enter-scale: 0.5; }
|
|
180
|
+
.zoom-in-75 { --tw-enter-scale: 0.75; }
|
|
181
|
+
.zoom-in-90 { --tw-enter-scale: 0.9; }
|
|
182
|
+
.zoom-in-95 { --tw-enter-scale: 0.95; }
|
|
183
|
+
.zoom-in-100 { --tw-enter-scale: 1; }
|
|
184
|
+
.zoom-in-105 { --tw-enter-scale: 1.05; }
|
|
185
|
+
.zoom-in-110 { --tw-enter-scale: 1.1; }
|
|
186
|
+
.zoom-in-125 { --tw-enter-scale: 1.25; }
|
|
187
|
+
.zoom-in-150 { --tw-enter-scale: 1.5; }
|
|
188
|
+
|
|
189
|
+
.zoom-out { --tw-exit-scale: 0; }
|
|
190
|
+
.zoom-out-0 { --tw-exit-scale: 0; }
|
|
191
|
+
.zoom-out-50 { --tw-exit-scale: 0.5; }
|
|
192
|
+
.zoom-out-75 { --tw-exit-scale: 0.75; }
|
|
193
|
+
.zoom-out-90 { --tw-exit-scale: 0.9; }
|
|
194
|
+
.zoom-out-95 { --tw-exit-scale: 0.95; }
|
|
195
|
+
.zoom-out-100 { --tw-exit-scale: 1; }
|
|
196
|
+
.zoom-out-105 { --tw-exit-scale: 1.05; }
|
|
197
|
+
.zoom-out-110 { --tw-exit-scale: 1.1; }
|
|
198
|
+
.zoom-out-125 { --tw-exit-scale: 1.25; }
|
|
199
|
+
.zoom-out-150 { --tw-exit-scale: 1.5; }
|
|
200
|
+
|
|
201
|
+
/* ---------- Spin ------------------------------------------------------- */
|
|
202
|
+
|
|
203
|
+
.spin-in { --tw-enter-rotate: 30deg; }
|
|
204
|
+
.spin-in-1 { --tw-enter-rotate: 1deg; }
|
|
205
|
+
.spin-in-3 { --tw-enter-rotate: 3deg; }
|
|
206
|
+
.spin-in-6 { --tw-enter-rotate: 6deg; }
|
|
207
|
+
.spin-in-12 { --tw-enter-rotate: 12deg; }
|
|
208
|
+
.spin-in-45 { --tw-enter-rotate: 45deg; }
|
|
209
|
+
.spin-in-90 { --tw-enter-rotate: 90deg; }
|
|
210
|
+
.spin-in-180 { --tw-enter-rotate: 180deg; }
|
|
211
|
+
.\-spin-in { --tw-enter-rotate: -30deg; }
|
|
212
|
+
.\-spin-in-1 { --tw-enter-rotate: -1deg; }
|
|
213
|
+
.\-spin-in-3 { --tw-enter-rotate: -3deg; }
|
|
214
|
+
.\-spin-in-6 { --tw-enter-rotate: -6deg; }
|
|
215
|
+
.\-spin-in-12 { --tw-enter-rotate: -12deg; }
|
|
216
|
+
.\-spin-in-45 { --tw-enter-rotate: -45deg; }
|
|
217
|
+
.\-spin-in-90 { --tw-enter-rotate: -90deg; }
|
|
218
|
+
.\-spin-in-180 { --tw-enter-rotate: -180deg; }
|
|
219
|
+
|
|
220
|
+
.spin-out { --tw-exit-rotate: 30deg; }
|
|
221
|
+
.spin-out-1 { --tw-exit-rotate: 1deg; }
|
|
222
|
+
.spin-out-3 { --tw-exit-rotate: 3deg; }
|
|
223
|
+
.spin-out-6 { --tw-exit-rotate: 6deg; }
|
|
224
|
+
.spin-out-12 { --tw-exit-rotate: 12deg; }
|
|
225
|
+
.spin-out-45 { --tw-exit-rotate: 45deg; }
|
|
226
|
+
.spin-out-90 { --tw-exit-rotate: 90deg; }
|
|
227
|
+
.spin-out-180 { --tw-exit-rotate: 180deg; }
|
|
228
|
+
.\-spin-out { --tw-exit-rotate: -30deg; }
|
|
229
|
+
.\-spin-out-1 { --tw-exit-rotate: -1deg; }
|
|
230
|
+
.\-spin-out-3 { --tw-exit-rotate: -3deg; }
|
|
231
|
+
.\-spin-out-6 { --tw-exit-rotate: -6deg; }
|
|
232
|
+
.\-spin-out-12 { --tw-exit-rotate: -12deg; }
|
|
233
|
+
.\-spin-out-45 { --tw-exit-rotate: -45deg; }
|
|
234
|
+
.\-spin-out-90 { --tw-exit-rotate: -90deg; }
|
|
235
|
+
.\-spin-out-180 { --tw-exit-rotate: -180deg; }
|
|
236
|
+
|
|
237
|
+
/* ---------- Blur ------------------------------------------------------- */
|
|
238
|
+
|
|
239
|
+
.blur-in { --tw-enter-blur: 20px; }
|
|
240
|
+
.blur-in-sm { --tw-enter-blur: 4px; }
|
|
241
|
+
.blur-in-md { --tw-enter-blur: 12px; }
|
|
242
|
+
.blur-in-lg { --tw-enter-blur: 16px; }
|
|
243
|
+
.blur-in-xl { --tw-enter-blur: 24px; }
|
|
244
|
+
.blur-in-2xl { --tw-enter-blur: 40px; }
|
|
245
|
+
.blur-in-3xl { --tw-enter-blur: 64px; }
|
|
246
|
+
|
|
247
|
+
.blur-out { --tw-exit-blur: 20px; }
|
|
248
|
+
.blur-out-sm { --tw-exit-blur: 4px; }
|
|
249
|
+
.blur-out-md { --tw-exit-blur: 12px; }
|
|
250
|
+
.blur-out-lg { --tw-exit-blur: 16px; }
|
|
251
|
+
.blur-out-xl { --tw-exit-blur: 24px; }
|
|
252
|
+
.blur-out-2xl { --tw-exit-blur: 40px; }
|
|
253
|
+
.blur-out-3xl { --tw-exit-blur: 64px; }
|
|
254
|
+
|
|
255
|
+
/* ---------- Slide ------------------------------------------------------ */
|
|
256
|
+
|
|
257
|
+
/* Cardinal directions */
|
|
258
|
+
.slide-in-from-top { --tw-enter-translate-y: -100%; }
|
|
259
|
+
.slide-in-from-top-1 { --tw-enter-translate-y: -0.25rem; }
|
|
260
|
+
.slide-in-from-top-2 { --tw-enter-translate-y: -0.5rem; }
|
|
261
|
+
.slide-in-from-top-4 { --tw-enter-translate-y: -1rem; }
|
|
262
|
+
.slide-in-from-top-8 { --tw-enter-translate-y: -2rem; }
|
|
263
|
+
.slide-in-from-top-full { --tw-enter-translate-y: -100%; }
|
|
264
|
+
|
|
265
|
+
.slide-in-from-bottom { --tw-enter-translate-y: 100%; }
|
|
266
|
+
.slide-in-from-bottom-1 { --tw-enter-translate-y: 0.25rem; }
|
|
267
|
+
.slide-in-from-bottom-2 { --tw-enter-translate-y: 0.5rem; }
|
|
268
|
+
.slide-in-from-bottom-4 { --tw-enter-translate-y: 1rem; }
|
|
269
|
+
.slide-in-from-bottom-8 { --tw-enter-translate-y: 2rem; }
|
|
270
|
+
.slide-in-from-bottom-full { --tw-enter-translate-y: 100%; }
|
|
271
|
+
|
|
272
|
+
.slide-in-from-left { --tw-enter-translate-x: -100%; }
|
|
273
|
+
.slide-in-from-left-1 { --tw-enter-translate-x: -0.25rem; }
|
|
274
|
+
.slide-in-from-left-2 { --tw-enter-translate-x: -0.5rem; }
|
|
275
|
+
.slide-in-from-left-4 { --tw-enter-translate-x: -1rem; }
|
|
276
|
+
.slide-in-from-left-8 { --tw-enter-translate-x: -2rem; }
|
|
277
|
+
.slide-in-from-left-full { --tw-enter-translate-x: -100%; }
|
|
278
|
+
|
|
279
|
+
.slide-in-from-right { --tw-enter-translate-x: 100%; }
|
|
280
|
+
.slide-in-from-right-1 { --tw-enter-translate-x: 0.25rem; }
|
|
281
|
+
.slide-in-from-right-2 { --tw-enter-translate-x: 0.5rem; }
|
|
282
|
+
.slide-in-from-right-4 { --tw-enter-translate-x: 1rem; }
|
|
283
|
+
.slide-in-from-right-8 { --tw-enter-translate-x: 2rem; }
|
|
284
|
+
.slide-in-from-right-full { --tw-enter-translate-x: 100%; }
|
|
285
|
+
|
|
286
|
+
.slide-out-to-top { --tw-exit-translate-y: -100%; }
|
|
287
|
+
.slide-out-to-top-1 { --tw-exit-translate-y: -0.25rem; }
|
|
288
|
+
.slide-out-to-top-2 { --tw-exit-translate-y: -0.5rem; }
|
|
289
|
+
.slide-out-to-top-4 { --tw-exit-translate-y: -1rem; }
|
|
290
|
+
.slide-out-to-top-8 { --tw-exit-translate-y: -2rem; }
|
|
291
|
+
.slide-out-to-top-full { --tw-exit-translate-y: -100%; }
|
|
292
|
+
|
|
293
|
+
.slide-out-to-bottom { --tw-exit-translate-y: 100%; }
|
|
294
|
+
.slide-out-to-bottom-1 { --tw-exit-translate-y: 0.25rem; }
|
|
295
|
+
.slide-out-to-bottom-2 { --tw-exit-translate-y: 0.5rem; }
|
|
296
|
+
.slide-out-to-bottom-4 { --tw-exit-translate-y: 1rem; }
|
|
297
|
+
.slide-out-to-bottom-8 { --tw-exit-translate-y: 2rem; }
|
|
298
|
+
.slide-out-to-bottom-full { --tw-exit-translate-y: 100%; }
|
|
299
|
+
|
|
300
|
+
.slide-out-to-left { --tw-exit-translate-x: -100%; }
|
|
301
|
+
.slide-out-to-left-1 { --tw-exit-translate-x: -0.25rem; }
|
|
302
|
+
.slide-out-to-left-2 { --tw-exit-translate-x: -0.5rem; }
|
|
303
|
+
.slide-out-to-left-4 { --tw-exit-translate-x: -1rem; }
|
|
304
|
+
.slide-out-to-left-8 { --tw-exit-translate-x: -2rem; }
|
|
305
|
+
.slide-out-to-left-full { --tw-exit-translate-x: -100%; }
|
|
306
|
+
|
|
307
|
+
.slide-out-to-right { --tw-exit-translate-x: 100%; }
|
|
308
|
+
.slide-out-to-right-1 { --tw-exit-translate-x: 0.25rem; }
|
|
309
|
+
.slide-out-to-right-2 { --tw-exit-translate-x: 0.5rem; }
|
|
310
|
+
.slide-out-to-right-4 { --tw-exit-translate-x: 1rem; }
|
|
311
|
+
.slide-out-to-right-8 { --tw-exit-translate-x: 2rem; }
|
|
312
|
+
.slide-out-to-right-full { --tw-exit-translate-x: 100%; }
|
|
313
|
+
|
|
314
|
+
/* Logical directions (LTR/RTL aware) */
|
|
315
|
+
.slide-in-from-start:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { --tw-enter-translate-x: -100%; }
|
|
316
|
+
.slide-in-from-start:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { --tw-enter-translate-x: 100%; }
|
|
317
|
+
.slide-in-from-end:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { --tw-enter-translate-x: 100%; }
|
|
318
|
+
.slide-in-from-end:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { --tw-enter-translate-x: -100%; }
|
|
319
|
+
.slide-out-to-start:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { --tw-exit-translate-x: -100%; }
|
|
320
|
+
.slide-out-to-start:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { --tw-exit-translate-x: 100%; }
|
|
321
|
+
.slide-out-to-end:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *) { --tw-exit-translate-x: 100%; }
|
|
322
|
+
.slide-out-to-end:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { --tw-exit-translate-x: -100%; }
|
|
323
|
+
|
|
324
|
+
/* ---------- Duration --------------------------------------------------- */
|
|
325
|
+
|
|
326
|
+
.duration-0 { --tw-animation-duration: 0s; animation-duration: 0s; }
|
|
327
|
+
.duration-75 { --tw-animation-duration: 75ms; animation-duration: 75ms; }
|
|
328
|
+
.duration-100 { --tw-animation-duration: 100ms; animation-duration: 100ms; }
|
|
329
|
+
.duration-150 { --tw-animation-duration: 150ms; animation-duration: 150ms; }
|
|
330
|
+
.duration-200 { --tw-animation-duration: 200ms; animation-duration: 200ms; }
|
|
331
|
+
.duration-300 { --tw-animation-duration: 300ms; animation-duration: 300ms; }
|
|
332
|
+
.duration-500 { --tw-animation-duration: 500ms; animation-duration: 500ms; }
|
|
333
|
+
.duration-700 { --tw-animation-duration: 700ms; animation-duration: 700ms; }
|
|
334
|
+
.duration-1000 { --tw-animation-duration: 1000ms; animation-duration: 1000ms; }
|
|
335
|
+
|
|
336
|
+
/* ---------- Delay ------------------------------------------------------ */
|
|
337
|
+
|
|
338
|
+
.delay-0 { --tw-animation-delay: 0s; animation-delay: 0s; }
|
|
339
|
+
.delay-75 { --tw-animation-delay: 75ms; animation-delay: 75ms; }
|
|
340
|
+
.delay-100 { --tw-animation-delay: 100ms; animation-delay: 100ms; }
|
|
341
|
+
.delay-150 { --tw-animation-delay: 150ms; animation-delay: 150ms; }
|
|
342
|
+
.delay-200 { --tw-animation-delay: 200ms; animation-delay: 200ms; }
|
|
343
|
+
.delay-300 { --tw-animation-delay: 300ms; animation-delay: 300ms; }
|
|
344
|
+
.delay-500 { --tw-animation-delay: 500ms; animation-delay: 500ms; }
|
|
345
|
+
.delay-700 { --tw-animation-delay: 700ms; animation-delay: 700ms; }
|
|
346
|
+
.delay-1000 { --tw-animation-delay: 1000ms; animation-delay: 1000ms; }
|
|
347
|
+
|
|
348
|
+
/* ---------- Iteration count ------------------------------------------- */
|
|
349
|
+
|
|
350
|
+
.repeat-0 { --tw-animation-iteration-count: 0; animation-iteration-count: 0; }
|
|
351
|
+
.repeat-1 { --tw-animation-iteration-count: 1; animation-iteration-count: 1; }
|
|
352
|
+
.repeat-infinite { --tw-animation-iteration-count: infinite; animation-iteration-count: infinite; }
|
|
353
|
+
|
|
354
|
+
/* ---------- Direction ------------------------------------------------- */
|
|
355
|
+
|
|
356
|
+
.direction-normal { --tw-animation-direction: normal; animation-direction: normal; }
|
|
357
|
+
.direction-reverse { --tw-animation-direction: reverse; animation-direction: reverse; }
|
|
358
|
+
.direction-alternate { --tw-animation-direction: alternate; animation-direction: alternate; }
|
|
359
|
+
.direction-alternate-reverse { --tw-animation-direction: alternate-reverse; animation-direction: alternate-reverse; }
|
|
360
|
+
|
|
361
|
+
/* ---------- Fill mode ------------------------------------------------- */
|
|
362
|
+
|
|
363
|
+
.fill-mode-none { --tw-animation-fill-mode: none; animation-fill-mode: none; }
|
|
364
|
+
.fill-mode-forwards { --tw-animation-fill-mode: forwards; animation-fill-mode: forwards; }
|
|
365
|
+
.fill-mode-backwards { --tw-animation-fill-mode: backwards; animation-fill-mode: backwards; }
|
|
366
|
+
.fill-mode-both { --tw-animation-fill-mode: both; animation-fill-mode: both; }
|
|
367
|
+
|
|
368
|
+
/* ---------- Play state ------------------------------------------------ */
|
|
369
|
+
|
|
370
|
+
.running { animation-play-state: running; }
|
|
371
|
+
.paused { animation-play-state: paused; }
|
|
372
|
+
|
|
373
|
+
/* ---------- Vuecs overlay helpers (NOT in tw-animate-css) ------------- */
|
|
374
|
+
|
|
375
|
+
/*
|
|
376
|
+
* Dual-state helpers for Reka-driven overlays. Apply ONE of these to an
|
|
377
|
+
* element that has a `data-state="open|closed"` attribute and the
|
|
378
|
+
* enter/exit animations fire automatically.
|
|
379
|
+
*
|
|
380
|
+
* Why these exist (vs the tw-animate-css class composition):
|
|
381
|
+
* theme-tailwind reaches the same effect with the more flexible
|
|
382
|
+
* `data-[state=open]:animate-in fade-in-0 zoom-in-95
|
|
383
|
+
* data-[state=closed]:animate-out fade-out-0 zoom-out-95` composition,
|
|
384
|
+
* but Tailwind's `data-[state=]:` variant prefix is what makes that
|
|
385
|
+
* compile to a per-state selector. Themes whose theme-string format is
|
|
386
|
+
* class-names-only (theme-bootstrap, custom CSS-only themes) can't
|
|
387
|
+
* carry an attribute selector inside a class string. These vuecs
|
|
388
|
+
* helpers package the same gating into a single class so any theme
|
|
389
|
+
* can drive overlay animations.
|
|
390
|
+
*
|
|
391
|
+
* Reka's Presence (already wrapping every `*Content` primitive: Dialog,
|
|
392
|
+
* Popover, Tooltip, Menu) reads the element's computed `animation-name`
|
|
393
|
+
* when `data-state` flips and suspends unmount until `animationend` —
|
|
394
|
+
* so exit animations actually play; the element isn't yanked out of the
|
|
395
|
+
* DOM mid-animation.
|
|
396
|
+
*/
|
|
397
|
+
|
|
398
|
+
/* Modal/popover/menu content — fade + zoom-95. Default for floating panels. */
|
|
399
|
+
.vc-overlay-anim[data-state="open"] {
|
|
400
|
+
animation: enter var(--tw-animation-duration, 150ms) ease-out;
|
|
401
|
+
--tw-enter-opacity: 0;
|
|
402
|
+
--tw-enter-scale: 0.95;
|
|
403
|
+
}
|
|
404
|
+
.vc-overlay-anim[data-state="closed"] {
|
|
405
|
+
animation: exit var(--tw-animation-duration, 100ms) ease-in;
|
|
406
|
+
--tw-exit-opacity: 0;
|
|
407
|
+
--tw-exit-scale: 0.95;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/* Modal backdrop / overlay layer — fade only, no zoom. */
|
|
411
|
+
.vc-overlay-fade-anim[data-state="open"] {
|
|
412
|
+
animation: enter var(--tw-animation-duration, 150ms) ease-out;
|
|
413
|
+
--tw-enter-opacity: 0;
|
|
414
|
+
}
|
|
415
|
+
.vc-overlay-fade-anim[data-state="closed"] {
|
|
416
|
+
animation: exit var(--tw-animation-duration, 100ms) ease-in;
|
|
417
|
+
--tw-exit-opacity: 0;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/* Tooltip — Reka uses `delayed-open` (after delayDuration) instead of `open`. */
|
|
421
|
+
.vc-tooltip-anim[data-state="delayed-open"] {
|
|
422
|
+
animation: enter var(--tw-animation-duration, 150ms) ease-out;
|
|
423
|
+
--tw-enter-opacity: 0;
|
|
424
|
+
--tw-enter-scale: 0.95;
|
|
425
|
+
}
|
|
426
|
+
.vc-tooltip-anim[data-state="closed"] {
|
|
427
|
+
animation: exit var(--tw-animation-duration, 100ms) ease-in;
|
|
428
|
+
--tw-exit-opacity: 0;
|
|
429
|
+
--tw-exit-scale: 0.95;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/* Collapse — height transition driven by Reka's runtime CSS var
|
|
433
|
+
`--reka-collapsible-content-height`. The collapsible keyframes from
|
|
434
|
+
tw-animate-css interpolate from 0 → height (open) and height → 0
|
|
435
|
+
(close); Reka's `Presence` suspends unmount until `animationend`.
|
|
436
|
+
|
|
437
|
+
Must use the `collapsible-*` keyframes, NOT `accordion-*` —
|
|
438
|
+
`<VCCollapse>` wraps Reka's `CollapsibleContent` which exposes
|
|
439
|
+
`--reka-collapsible-content-height`. The accordion variant reads
|
|
440
|
+
a different runtime var that Reka's Collapsible primitive doesn't
|
|
441
|
+
set, so animations would interpolate from 0 → fallback `auto` (no
|
|
442
|
+
visible animation).
|
|
443
|
+
|
|
444
|
+
themes whose strings can't carry attribute selectors use this
|
|
445
|
+
dual-state helper; theme-tailwind composes the equivalent via
|
|
446
|
+
`data-[state=open]:animate-collapsible-down`. */
|
|
447
|
+
.vc-collapse-anim {
|
|
448
|
+
overflow: hidden;
|
|
449
|
+
}
|
|
450
|
+
.vc-collapse-anim[data-state="open"] {
|
|
451
|
+
animation: collapsible-down 200ms ease-out;
|
|
452
|
+
}
|
|
453
|
+
.vc-collapse-anim[data-state="closed"] {
|
|
454
|
+
animation: collapsible-up 200ms ease-out;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/* Toast — slide-in from the right on open; slide-out to the right on close.
|
|
458
|
+
Matches the default `swipeDirection: 'right'` on `<VCToastProvider>`. The
|
|
459
|
+
`swipe-end` data-state is also used by Reka when the user swipes the toast
|
|
460
|
+
off-screen; we mirror it to the close animation so the swipe completes
|
|
461
|
+
visually. */
|
|
462
|
+
.vc-toast-anim[data-state="open"] {
|
|
463
|
+
animation: enter var(--tw-animation-duration, 200ms) ease-out;
|
|
464
|
+
--tw-enter-opacity: 0;
|
|
465
|
+
--tw-enter-translate-x: 100%;
|
|
466
|
+
}
|
|
467
|
+
.vc-toast-anim[data-state="closed"] {
|
|
468
|
+
animation: exit var(--tw-animation-duration, 150ms) ease-in;
|
|
469
|
+
--tw-exit-opacity: 0;
|
|
470
|
+
--tw-exit-translate-x: 100%;
|
|
471
|
+
}
|
|
472
|
+
.vc-toast-anim[data-swipe="move"] {
|
|
473
|
+
transform: translateX(var(--reka-toast-swipe-move-x));
|
|
474
|
+
transition: none;
|
|
475
|
+
}
|
|
476
|
+
.vc-toast-anim[data-swipe="cancel"] {
|
|
477
|
+
transform: translateX(0);
|
|
478
|
+
transition: transform 200ms ease-out;
|
|
479
|
+
}
|
|
480
|
+
.vc-toast-anim[data-swipe="end"] {
|
|
481
|
+
animation: exit var(--tw-animation-duration, 100ms) ease-out;
|
|
482
|
+
--tw-exit-opacity: 0;
|
|
483
|
+
--tw-exit-translate-x: var(--reka-toast-swipe-end-x);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/* ---------- Reduced motion ------------------------------------------- */
|
|
487
|
+
|
|
488
|
+
/* Honour OS-level "reduce motion" preferences — kill animations entirely. */
|
|
489
|
+
@media (prefers-reduced-motion: reduce) {
|
|
490
|
+
.animate-in,
|
|
491
|
+
.animate-out,
|
|
492
|
+
.animate-accordion-down,
|
|
493
|
+
.animate-accordion-up,
|
|
494
|
+
.animate-collapsible-down,
|
|
495
|
+
.animate-collapsible-up,
|
|
496
|
+
.animate-caret-blink,
|
|
497
|
+
.vc-overlay-anim[data-state],
|
|
498
|
+
.vc-overlay-fade-anim[data-state],
|
|
499
|
+
.vc-tooltip-anim[data-state],
|
|
500
|
+
.vc-toast-anim[data-state],
|
|
501
|
+
.vc-toast-anim[data-swipe],
|
|
502
|
+
.vc-collapse-anim[data-state] {
|
|
503
|
+
animation: none !important;
|
|
504
|
+
transition: none !important;
|
|
505
|
+
}
|
|
506
|
+
}
|