zenkit-css 1.0.7 → 1.2.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.
@@ -0,0 +1,421 @@
1
+ // ========================================
2
+ // ZenKit - Speed Dial Component
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Speed Dial Container
9
+ // ----------------------------------------
10
+ .speed-dial {
11
+ position: fixed;
12
+ z-index: 1000;
13
+ display: flex;
14
+ flex-direction: column;
15
+ align-items: center;
16
+ }
17
+
18
+ // ----------------------------------------
19
+ // Speed Dial Positions
20
+ // ----------------------------------------
21
+ .speed-dial-bottom-right {
22
+ bottom: 1.5rem;
23
+ right: 1.5rem;
24
+ }
25
+
26
+ .speed-dial-bottom-left {
27
+ bottom: 1.5rem;
28
+ left: 1.5rem;
29
+ }
30
+
31
+ .speed-dial-top-right {
32
+ top: 1.5rem;
33
+ right: 1.5rem;
34
+ flex-direction: column-reverse;
35
+ }
36
+
37
+ .speed-dial-top-left {
38
+ top: 1.5rem;
39
+ left: 1.5rem;
40
+ flex-direction: column-reverse;
41
+ }
42
+
43
+ // ----------------------------------------
44
+ // Speed Dial Trigger
45
+ // ----------------------------------------
46
+ .speed-dial-trigger {
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ width: 3.5rem;
51
+ height: 3.5rem;
52
+ background-color: var(--primary);
53
+ color: var(--white);
54
+ border: none;
55
+ border-radius: 50%;
56
+ cursor: pointer;
57
+ box-shadow: 0 4px 12px rgba($primary, 0.4);
58
+ transition: all $transition-base $transition-timing;
59
+ z-index: 10;
60
+
61
+ &:hover {
62
+ background-color: var(--primary-600);
63
+ transform: scale(1.05);
64
+ }
65
+
66
+ &:focus {
67
+ outline: none;
68
+ box-shadow: 0 0 0 3px rgba($primary, 0.3),
69
+ 0 4px 12px rgba($primary, 0.4);
70
+ }
71
+
72
+ svg {
73
+ width: 1.5rem;
74
+ height: 1.5rem;
75
+ transition: transform $transition-base $transition-timing;
76
+ }
77
+ }
78
+
79
+ .speed-dial.open .speed-dial-trigger svg {
80
+ transform: rotate(45deg);
81
+ }
82
+
83
+ // ----------------------------------------
84
+ // Speed Dial Actions
85
+ // ----------------------------------------
86
+ .speed-dial-actions {
87
+ display: flex;
88
+ flex-direction: column;
89
+ align-items: center;
90
+ gap: 0.75rem;
91
+ margin-bottom: 0.75rem;
92
+ opacity: 0;
93
+ visibility: hidden;
94
+ transform: translateY(10px);
95
+ transition: all $transition-base $transition-timing;
96
+ }
97
+
98
+ .speed-dial.open .speed-dial-actions {
99
+ opacity: 1;
100
+ visibility: visible;
101
+ transform: translateY(0);
102
+ }
103
+
104
+ .speed-dial-top-right .speed-dial-actions,
105
+ .speed-dial-top-left .speed-dial-actions {
106
+ margin-bottom: 0;
107
+ margin-top: 0.75rem;
108
+ transform: translateY(-10px);
109
+ }
110
+
111
+ .speed-dial-top-right.open .speed-dial-actions,
112
+ .speed-dial-top-left.open .speed-dial-actions {
113
+ transform: translateY(0);
114
+ }
115
+
116
+ // ----------------------------------------
117
+ // Speed Dial Action Item
118
+ // ----------------------------------------
119
+ .speed-dial-action {
120
+ position: relative;
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: center;
124
+ width: 2.75rem;
125
+ height: 2.75rem;
126
+ background-color: var(--bg);
127
+ color: var(--text);
128
+ border: none;
129
+ border-radius: 50%;
130
+ cursor: pointer;
131
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
132
+ transition: all $transition-fast $transition-timing;
133
+ opacity: 0;
134
+ transform: scale(0.5);
135
+
136
+ &:hover {
137
+ background-color: var(--gray-100);
138
+ transform: scale(1.1);
139
+ }
140
+
141
+ &:focus {
142
+ outline: none;
143
+ box-shadow: 0 0 0 2px var(--primary-200),
144
+ 0 2px 8px rgba(0, 0, 0, 0.15);
145
+ }
146
+
147
+ svg {
148
+ width: 1.25rem;
149
+ height: 1.25rem;
150
+ }
151
+ }
152
+
153
+ .speed-dial.open .speed-dial-action {
154
+ opacity: 1;
155
+ transform: scale(1);
156
+ }
157
+
158
+ // Staggered animation
159
+ .speed-dial-action:nth-child(1) { transition-delay: 0ms; }
160
+ .speed-dial-action:nth-child(2) { transition-delay: 30ms; }
161
+ .speed-dial-action:nth-child(3) { transition-delay: 60ms; }
162
+ .speed-dial-action:nth-child(4) { transition-delay: 90ms; }
163
+ .speed-dial-action:nth-child(5) { transition-delay: 120ms; }
164
+ .speed-dial-action:nth-child(6) { transition-delay: 150ms; }
165
+
166
+ // ----------------------------------------
167
+ // Speed Dial Tooltips
168
+ // ----------------------------------------
169
+ .speed-dial-tooltip {
170
+ position: absolute;
171
+ right: calc(100% + 0.75rem);
172
+ top: 50%;
173
+ transform: translateY(-50%);
174
+ padding: 0.375rem 0.75rem;
175
+ background-color: var(--gray-900);
176
+ color: var(--white);
177
+ font-size: var(--text-xs);
178
+ font-weight: $font-weight-medium;
179
+ white-space: nowrap;
180
+ border-radius: $border-radius;
181
+ opacity: 0;
182
+ visibility: hidden;
183
+ transition: opacity $transition-fast $transition-timing;
184
+ pointer-events: none;
185
+
186
+ &::after {
187
+ content: "";
188
+ position: absolute;
189
+ right: -4px;
190
+ top: 50%;
191
+ transform: translateY(-50%);
192
+ border: 4px solid transparent;
193
+ border-left-color: var(--gray-900);
194
+ }
195
+ }
196
+
197
+ .speed-dial-action:hover .speed-dial-tooltip {
198
+ opacity: 1;
199
+ visibility: visible;
200
+ }
201
+
202
+ // Left positioned dial
203
+ .speed-dial-bottom-left .speed-dial-tooltip,
204
+ .speed-dial-top-left .speed-dial-tooltip {
205
+ left: calc(100% + 0.75rem);
206
+ right: auto;
207
+
208
+ &::after {
209
+ left: -4px;
210
+ right: auto;
211
+ border-left-color: transparent;
212
+ border-right-color: var(--gray-900);
213
+ }
214
+ }
215
+
216
+ // ----------------------------------------
217
+ // Speed Dial Horizontal
218
+ // ----------------------------------------
219
+ .speed-dial-horizontal {
220
+ flex-direction: row;
221
+
222
+ .speed-dial-actions {
223
+ flex-direction: row;
224
+ margin-bottom: 0;
225
+ margin-right: 0.75rem;
226
+ transform: translateX(10px);
227
+ }
228
+
229
+ &.open .speed-dial-actions {
230
+ transform: translateX(0);
231
+ }
232
+
233
+ .speed-dial-tooltip {
234
+ top: auto;
235
+ bottom: calc(100% + 0.75rem);
236
+ left: 50%;
237
+ right: auto;
238
+ transform: translateX(-50%);
239
+
240
+ &::after {
241
+ top: auto;
242
+ bottom: -4px;
243
+ left: 50%;
244
+ right: auto;
245
+ transform: translateX(-50%);
246
+ border: 4px solid transparent;
247
+ border-top-color: var(--gray-900);
248
+ }
249
+ }
250
+ }
251
+
252
+ .speed-dial-horizontal.speed-dial-bottom-right,
253
+ .speed-dial-horizontal.speed-dial-top-right {
254
+ flex-direction: row-reverse;
255
+
256
+ .speed-dial-actions {
257
+ margin-right: 0;
258
+ margin-left: 0.75rem;
259
+ transform: translateX(-10px);
260
+ }
261
+
262
+ &.open .speed-dial-actions {
263
+ transform: translateX(0);
264
+ }
265
+ }
266
+
267
+ // ----------------------------------------
268
+ // Speed Dial Sizes
269
+ // ----------------------------------------
270
+ .speed-dial-sm {
271
+ .speed-dial-trigger {
272
+ width: 2.75rem;
273
+ height: 2.75rem;
274
+
275
+ svg {
276
+ width: 1.25rem;
277
+ height: 1.25rem;
278
+ }
279
+ }
280
+
281
+ .speed-dial-action {
282
+ width: 2.25rem;
283
+ height: 2.25rem;
284
+
285
+ svg {
286
+ width: 1rem;
287
+ height: 1rem;
288
+ }
289
+ }
290
+ }
291
+
292
+ .speed-dial-lg {
293
+ .speed-dial-trigger {
294
+ width: 4rem;
295
+ height: 4rem;
296
+
297
+ svg {
298
+ width: 1.75rem;
299
+ height: 1.75rem;
300
+ }
301
+ }
302
+
303
+ .speed-dial-action {
304
+ width: 3.25rem;
305
+ height: 3.25rem;
306
+
307
+ svg {
308
+ width: 1.5rem;
309
+ height: 1.5rem;
310
+ }
311
+ }
312
+ }
313
+
314
+ // ----------------------------------------
315
+ // Speed Dial Colors
316
+ // ----------------------------------------
317
+ .speed-dial-secondary .speed-dial-trigger {
318
+ background-color: var(--gray-600);
319
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
320
+
321
+ &:hover {
322
+ background-color: var(--gray-700);
323
+ }
324
+ }
325
+
326
+ .speed-dial-success .speed-dial-trigger {
327
+ background-color: var(--success);
328
+ box-shadow: 0 4px 12px rgba($success, 0.4);
329
+
330
+ &:hover {
331
+ background-color: var(--success-600);
332
+ }
333
+ }
334
+
335
+ .speed-dial-danger .speed-dial-trigger {
336
+ background-color: var(--danger);
337
+ box-shadow: 0 4px 12px rgba($danger, 0.4);
338
+
339
+ &:hover {
340
+ background-color: var(--danger-600);
341
+ }
342
+ }
343
+
344
+ // ----------------------------------------
345
+ // Speed Dial Action Colors
346
+ // ----------------------------------------
347
+ .speed-dial-action-primary {
348
+ background-color: var(--primary) !important;
349
+ color: var(--white) !important;
350
+
351
+ &:hover {
352
+ background-color: var(--primary-600) !important;
353
+ }
354
+ }
355
+
356
+ .speed-dial-action-success {
357
+ background-color: var(--success) !important;
358
+ color: var(--white) !important;
359
+ }
360
+
361
+ .speed-dial-action-danger {
362
+ background-color: var(--danger) !important;
363
+ color: var(--white) !important;
364
+ }
365
+
366
+ .speed-dial-action-warning {
367
+ background-color: var(--warning) !important;
368
+ color: var(--gray-900) !important;
369
+ }
370
+
371
+ // ----------------------------------------
372
+ // Speed Dial Backdrop
373
+ // ----------------------------------------
374
+ .speed-dial-backdrop {
375
+ position: fixed;
376
+ inset: 0;
377
+ background-color: rgba(0, 0, 0, 0.3);
378
+ opacity: 0;
379
+ visibility: hidden;
380
+ transition: opacity $transition-base $transition-timing;
381
+ z-index: 999;
382
+ }
383
+
384
+ .speed-dial.open ~ .speed-dial-backdrop,
385
+ .speed-dial.open .speed-dial-backdrop {
386
+ opacity: 1;
387
+ visibility: visible;
388
+ }
389
+
390
+ // ----------------------------------------
391
+ // Dark Mode
392
+ // ----------------------------------------
393
+ [data-theme="dark"] {
394
+ .speed-dial-action {
395
+ background-color: var(--gray-800);
396
+ color: var(--gray-100);
397
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
398
+
399
+ &:hover {
400
+ background-color: var(--gray-700);
401
+ }
402
+ }
403
+
404
+ .speed-dial-tooltip {
405
+ background-color: var(--gray-700);
406
+
407
+ &::after {
408
+ border-left-color: var(--gray-700);
409
+ }
410
+ }
411
+
412
+ .speed-dial-bottom-left .speed-dial-tooltip::after,
413
+ .speed-dial-top-left .speed-dial-tooltip::after {
414
+ border-left-color: transparent;
415
+ border-right-color: var(--gray-700);
416
+ }
417
+
418
+ .speed-dial-horizontal .speed-dial-tooltip::after {
419
+ border-top-color: var(--gray-700);
420
+ }
421
+ }