srcdev-nuxt-components 2.5.17 → 3.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.
Files changed (86) hide show
  1. package/nuxt.config.ts +3 -1
  2. package/package.json +1 -1
  3. package/assets/styles/a11y/_utils.css +0 -20
  4. package/assets/styles/a11y/_variables.css +0 -8
  5. package/assets/styles/a11y/index.css +0 -2
  6. package/assets/styles/forms/index.css +0 -2
  7. package/assets/styles/forms/themes/_error.css +0 -77
  8. package/assets/styles/forms/themes/_ghost.css +0 -77
  9. package/assets/styles/forms/themes/_input-action.css +0 -20
  10. package/assets/styles/forms/themes/_primary.css +0 -82
  11. package/assets/styles/forms/themes/_secondary.css +0 -77
  12. package/assets/styles/forms/themes/_success.css +0 -77
  13. package/assets/styles/forms/themes/_tertiary.css +0 -77
  14. package/assets/styles/forms/themes/_warning.css +0 -77
  15. package/assets/styles/forms/themes/index.css +0 -8
  16. package/assets/styles/forms/variables/_sizes.css +0 -82
  17. package/assets/styles/forms/variables/_theme.css +0 -11
  18. package/assets/styles/forms/variables/index.css +0 -2
  19. package/assets/styles/main.css +0 -5
  20. package/assets/styles/typography/index.css +0 -2
  21. package/assets/styles/typography/utils/_font-classes.css +0 -160
  22. package/assets/styles/typography/utils/_weights.css +0 -69
  23. package/assets/styles/typography/utils/index.css +0 -2
  24. package/assets/styles/typography/variables/_colors.css +0 -14
  25. package/assets/styles/typography/variables/_reponsive-font-size.css +0 -10
  26. package/assets/styles/typography/variables/index.css +0 -2
  27. package/assets/styles/utils/_animations.css +0 -42
  28. package/assets/styles/utils/_canvasWidths.css +0 -18
  29. package/assets/styles/utils/_display.css +0 -7
  30. package/assets/styles/utils/_margin-helpers.css +0 -334
  31. package/assets/styles/utils/_padding-helpers.css +0 -308
  32. package/assets/styles/utils/_page.css +0 -24
  33. package/assets/styles/utils/_placement.css +0 -73
  34. package/assets/styles/utils/index.css +0 -7
  35. package/assets/styles/variables/colors/_blue.css +0 -15
  36. package/assets/styles/variables/colors/_gray.css +0 -16
  37. package/assets/styles/variables/colors/_green.css +0 -15
  38. package/assets/styles/variables/colors/_orange.css +0 -15
  39. package/assets/styles/variables/colors/_red.css +0 -15
  40. package/assets/styles/variables/colors/_yellow.css +0 -15
  41. package/assets/styles/variables/colors/colors.css +0 -6
  42. package/assets/styles/variables/components/_accordian.css +0 -7
  43. package/assets/styles/variables/components/_container-glow-core.css +0 -16
  44. package/assets/styles/variables/components/_display-dialog-core.css +0 -35
  45. package/assets/styles/variables/components/_tabs.css +0 -18
  46. package/assets/styles/variables/components/display-prompt-core/_scaffolding.css +0 -57
  47. package/assets/styles/variables/components/display-prompt-core/index.css +0 -2
  48. package/assets/styles/variables/components/display-prompt-core/themes/_error.css +0 -39
  49. package/assets/styles/variables/components/display-prompt-core/themes/_info.css +0 -39
  50. package/assets/styles/variables/components/display-prompt-core/themes/_success.css +0 -39
  51. package/assets/styles/variables/components/display-prompt-core/themes/_warning.css +0 -39
  52. package/assets/styles/variables/components/display-prompt-core/themes/index.css +0 -4
  53. package/assets/styles/variables/components/index.css +0 -5
  54. package/assets/styles/variables/index.css +0 -2
  55. package/components/animated-svg-text/AnimatedSvgText.vue +0 -87
  56. package/components/canvas-switcher/CanvasSwitcher.vue +0 -77
  57. package/components/clip-element/ClipElement.vue +0 -73
  58. package/components/clipped-panels/ClippedPanel.vue +0 -73
  59. package/components/deep-expanding-menu/DeepExpandingMenu.vue +0 -214
  60. package/components/deep-expanding-menu/DeepExpandingMenuOld.vue +0 -218
  61. package/components/display-banner/DisplayBanner.vue +0 -63
  62. package/components/display-details/DisplayDetailsCore.vue +0 -312
  63. package/components/functional/accordian/AccordianCore.vue +0 -138
  64. package/components/functional/display-dialog/DisplayDialogCore.vue +0 -244
  65. package/components/functional/display-dialog/variants/DisplayDialogConfirm.vue +0 -45
  66. package/components/functional/display-dialog/variants/DisplayDialogScrollableContent.vue +0 -49
  67. package/components/functional/pop-over/PopOver.vue +0 -88
  68. package/components/image-galleries/SliderGallery.vue +0 -792
  69. package/components/masonry-grid-ordered/MasonryGridOrdered.vue +0 -158
  70. package/components/presentation/container-glow/ContainerGlowCore.vue +0 -211
  71. package/components/presentation/display-grid/DisplayGridCore.vue +0 -22
  72. package/components/presentation/display-prompt/DisplayPromptCore.vue +0 -150
  73. package/components/presentation/display-prompt/variants/DisplayPromptError.vue +0 -53
  74. package/components/presentation/layout-grids/LayoutGridA.vue +0 -103
  75. package/components/presentation/layout-grids/LayoutGridB.vue +0 -132
  76. package/components/presentation/layout-row/LayoutRow.vue +0 -157
  77. package/components/presentation/masonry-grid/MasonryGrid.vue +0 -62
  78. package/components/presentation/masonry-grid-sorted/MasonryGridSorted.vue +0 -115
  79. package/components/presentation/tabs/TabsCore.vue +0 -308
  80. package/components/responsive-header/NavigationItems.vue +0 -164
  81. package/components/responsive-header/ResponsiveHeader.vue +0 -586
  82. package/components/rotating-carousel/RotatingCarouselImage.vue +0 -200
  83. package/composables/useDialogControls.ts +0 -23
  84. package/composables/useStyleClassPassthrough.ts +0 -35
  85. package/composables/useTabs.ts +0 -201
  86. package/types/responsiveHeader.ts +0 -38
@@ -1,792 +0,0 @@
1
- <template>
2
- <div class="slider-gallery" :class="[elementClasses]" ref="sliderGalleryWrapper">
3
- <div class="loading-state" :class="[{ galleryLoaded: !galleryLoaded }]">
4
- <div class="loading-spinner"></div>
5
- <p>Loading gallery...</p>
6
- </div>
7
-
8
- <div v-if="showGallery" class="gallery-content" :class="[{ galleryLoaded: !galleryLoaded }]">
9
- <div class="list" ref="sliderGalleryImagesList">
10
- <div v-for="(item, index) in galleryData" :key="index" class="item">
11
- <NuxtImg @load="handleImageLoad(index)" @error="handleImageError(index)" :src="item.src" :alt="item.alt" />
12
- <div class="content" :class="item.textBrightness">
13
- <div v-show="item.stylist !== ''" class="author" :class="item.textBrightness">{{ item.stylist }}</div>
14
- <div v-show="item.title !== ''" class="title" :class="item.textBrightness">{{ item.title }}</div>
15
- <div v-show="item.category !== ''" class="topic" :class="item.textBrightness">{{ item.category }}</div>
16
- <div v-show="item.description !== ''" class="description" :class="item.textBrightness">{{ item.description
17
- }}</div>
18
- <div class="buttons" :class="item.textBrightness">
19
- <button>SEE MORE</button>
20
- </div>
21
- </div>
22
- </div>
23
- </div>
24
-
25
- <div class="thumbnail" ref="sliderGalleryThumbnailsList">
26
- <div v-for="(item, index) in galleryData" :key="index" class="item">
27
- <div class="inner">
28
- <NuxtImg :src="item.src" :alt="item.alt" />
29
- <div class="content" :class="item.textBrightness">
30
- <div v-show="item.thumbnail?.title !== ''" class="title" :class="item.textBrightness">{{
31
- item.thumbnail?.title }}</div>
32
- <div v-show="item.thumbnail?.description !== ''" class="description" :class="item.textBrightness">{{
33
- item.thumbnail?.description }}
34
- </div>
35
- </div>
36
- </div>
37
- </div>
38
- </div>
39
-
40
- <div class="arrows">
41
- <button id="prev" ref="prevDom" @click.prevent="doPrevious()" aria-label="Previous image">
42
- <Icon name="ic:outline-keyboard-arrow-left" class="arrows-icon" />
43
- </button>
44
- <button id="next" ref="nextDom" @click.prevent="doNext()" aria-label="Next image">
45
- <Icon name="ic:outline-keyboard-arrow-right" class="arrows-icon" />
46
- </button>
47
- </div>
48
-
49
- <div class="time"></div>
50
- </div>
51
- </div>
52
- </template>
53
-
54
- <script setup lang="ts">
55
- import NuxtImg from '#image/components/NuxtImg.vue';
56
-
57
- const props = defineProps({
58
- autoRun: {
59
- type: Boolean,
60
- default: true,
61
- },
62
- autoRunInterval: {
63
- type: Number,
64
- default: 7000,
65
- },
66
- animationDuration: {
67
- type: Number,
68
- default: 3000,
69
- },
70
- styleClassPassthrough: {
71
- type: Array as PropType<string[]>,
72
- default: () => [],
73
- },
74
- });
75
-
76
- interface IGalleryData {
77
- src: string;
78
- alt: string;
79
- stylist?: string;
80
- title?: string;
81
- category?: string;
82
- description?: string;
83
- thumbnail?: {
84
- title: string;
85
- description: string;
86
- };
87
- textBrightness: 'light' | 'dark';
88
- }
89
-
90
- const { elementClasses, resetElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
91
- const galleryData = defineModel<IGalleryData[]>('galleryData');
92
-
93
- const sliderGalleryWrapper = useTemplateRef('sliderGalleryWrapper');
94
- const sliderGalleryImagesList = useTemplateRef('sliderGalleryImagesList');
95
- const sliderGalleryThumbnailsList = useTemplateRef('sliderGalleryThumbnailsList');
96
-
97
- const transitionRunning = ref(false);
98
- const galleryLoaded = ref(true);
99
- const showGallery = ref(false);
100
- const loadedImages = ref<Set<number>>(new Set());
101
- const preloadedImages = ref<Array<HTMLImageElement>>([]);
102
-
103
- onMounted(async () => {
104
- await nextTick();
105
-
106
- // If no images or galleryData is empty, stop loading
107
- if (!galleryData.value || galleryData.value.length === 0) {
108
- galleryLoaded.value = false;
109
- return;
110
- }
111
-
112
- // Create an array to hold image loading promises
113
- const imageLoadPromises: Promise<void>[] = [];
114
-
115
- // Preload the first image at minimum
116
- const firstImageIndex = 0;
117
- if (galleryData.value[firstImageIndex]) {
118
- const img = new Image();
119
- img.src = galleryData.value[firstImageIndex].src;
120
-
121
- const promise = new Promise<void>((resolve) => {
122
- img.onload = () => {
123
- console.log('Image preloaded:', firstImageIndex);
124
- loadedImages.value.add(firstImageIndex);
125
- resolve();
126
- };
127
- img.onerror = () => {
128
- console.error('Failed to preload image:', firstImageIndex);
129
- loadedImages.value.add(firstImageIndex); // Count as loaded anyway
130
- resolve();
131
- };
132
- });
133
-
134
- imageLoadPromises.push(promise);
135
- preloadedImages.value.push(img);
136
- }
137
-
138
- // Wait for at least the first image to load
139
- await Promise.race(imageLoadPromises);
140
-
141
- setTimeout(() => {
142
- galleryLoaded.value = false;
143
- }, 500);
144
-
145
- showGallery.value = true;
146
- window.addEventListener('keydown', handleKeyDown);
147
- });
148
-
149
- const handleImageLoad = (index: number) => {
150
- loadedImages.value.add(index);
151
- };
152
-
153
- const handleImageError = (index: number) => {
154
- loadedImages.value.add(index);
155
- };
156
-
157
- const doNext = () => {
158
- if (transitionRunning.value) return;
159
- showSlider('next');
160
- };
161
-
162
- const doPrevious = () => {
163
- if (transitionRunning.value) return;
164
- showSlider('prev');
165
- };
166
-
167
- let runTimeOut: any;
168
- let runNextAuto: any = null;
169
-
170
- function showSlider(type: string) {
171
- transitionRunning.value = true;
172
-
173
- const currentSliderItems = Array.from(sliderGalleryImagesList.value?.children || []);
174
- const currentThumbnailItems = Array.from(sliderGalleryThumbnailsList.value?.children || []);
175
-
176
- if (type === 'next') {
177
- if (currentSliderItems.length) {
178
- const firstItem = currentSliderItems[0];
179
- sliderGalleryImagesList.value?.appendChild(firstItem);
180
- }
181
-
182
- if (currentThumbnailItems.length) {
183
- const firstThumb = currentThumbnailItems[0];
184
- sliderGalleryThumbnailsList.value?.appendChild(firstThumb);
185
- }
186
-
187
- sliderGalleryWrapper.value?.classList.add('next');
188
- } else {
189
- if (currentSliderItems.length) {
190
- const lastItem = currentSliderItems[currentSliderItems.length - 1];
191
- lastItem.classList.add('prepend-item');
192
- sliderGalleryImagesList.value?.prepend(lastItem);
193
- }
194
-
195
- if (currentThumbnailItems.length) {
196
- const lastThumb = currentThumbnailItems[currentThumbnailItems.length - 1];
197
- lastThumb.classList.add('prepend-item');
198
- sliderGalleryThumbnailsList.value?.prepend(lastThumb);
199
- }
200
-
201
- sliderGalleryWrapper.value?.offsetWidth; // Force reflow
202
- sliderGalleryWrapper.value?.classList.add('prev');
203
- }
204
-
205
- clearTimeout(runTimeOut);
206
- runTimeOut = setTimeout(() => {
207
-
208
- if (sliderGalleryWrapper.value) {
209
- sliderGalleryWrapper.value.classList.remove('next');
210
- sliderGalleryWrapper.value.classList.remove('prev');
211
-
212
- const items = sliderGalleryImagesList.value?.querySelectorAll('.prepend-item');
213
- items?.forEach((item) => item.classList.remove('prepend-item'));
214
-
215
- const thumbs = sliderGalleryThumbnailsList.value?.querySelectorAll('.prepend-item');
216
- thumbs?.forEach((thumb) => thumb.classList.remove('prepend-item'));
217
- }
218
- transitionRunning.value = false;
219
- }, props.animationDuration);
220
-
221
- // Reset auto-run timer
222
- clearTimeout(runNextAuto);
223
- runNextAuto = setTimeout(() => {
224
- if (!props.autoRun || galleryLoaded.value) return;
225
- doNext();
226
- }, props.autoRunInterval);
227
- }
228
-
229
- // Add keyboard navigation event handlers
230
- const handleKeyDown = (event: KeyboardEvent) => {
231
- // Don't process key events if transition is running or gallery isn't loaded
232
- if (transitionRunning.value || galleryLoaded.value) {
233
- return;
234
- }
235
-
236
- if (event.key === 'ArrowLeft') {
237
- doPrevious();
238
- } else if (event.key === 'ArrowRight') {
239
- doNext();
240
- }
241
- };
242
-
243
- // Initialize auto-run only after loading completes
244
- watch(galleryLoaded, (previousValue, currentValue) => {
245
- if (!currentValue && props.autoRun) {
246
- clearTimeout(runNextAuto);
247
- runNextAuto = setTimeout(() => {
248
- doNext();
249
- }, props.autoRunInterval);
250
- }
251
- });
252
-
253
- watch(
254
- () => props.styleClassPassthrough,
255
- () => {
256
- resetElementClasses(props.styleClassPassthrough);
257
- }
258
- );
259
-
260
- onBeforeUnmount(() => {
261
- showGallery.value = false;
262
- clearTimeout(runTimeOut);
263
- clearTimeout(runNextAuto);
264
- window.removeEventListener('keydown', handleKeyDown);
265
- });
266
- </script>
267
-
268
- <style lang="css">
269
- .slider-gallery {
270
- --_animationDuration: v-bind(animationDuration + 'ms');
271
-
272
- --_thumbnailAspectRatio: 150 /220;
273
-
274
- --_thumbnailWidth: var(--_thumbnailMobileWidth, 100px);
275
- --_thumbnailHeight: var(--_thumbnailMobileHeight, 165px);
276
-
277
- height: 100svh;
278
- width: 100vw;
279
- overflow: hidden;
280
- position: absolute;
281
- inset: 0 0 0 0;
282
-
283
- z-index: 9999;
284
- container-type: inline-size;
285
-
286
- .loading-state {
287
- position: absolute;
288
- inset: 0 0 0 0;
289
- z-index: 1000;
290
- display: flex;
291
- flex-direction: column;
292
- background-color: var(--page-bg);
293
- align-items: center;
294
- justify-content: center;
295
- color: var(--grayscale-text-body);
296
- opacity: 1;
297
- transition: display 0.5s, opacity 0.5s;
298
- transition-behavior: allow-discrete;
299
-
300
- &.galleryLoaded {
301
- display: none;
302
- opacity: 0;
303
- }
304
-
305
- .loading-spinner {
306
- width: 50px;
307
- height: 50px;
308
- border: 5px solid rgba(0, 0, 0, 0.1);
309
- border-radius: 50%;
310
- border-top-color: #f1683a;
311
- animation: spinner 1s ease-in-out infinite;
312
- margin-bottom: 20px;
313
- }
314
-
315
- p {
316
- font-size: 1.2em;
317
- font-weight: 500;
318
- }
319
- }
320
-
321
- .gallery-content {
322
- width: 100%;
323
- height: 100%;
324
- position: relative;
325
- /* opacity: 0; */
326
- /* transition: opacity 0.5s ease-in-out; */
327
-
328
- &.galleryLoaded {
329
- /* opacity: 1; */
330
- }
331
- }
332
-
333
- .list {
334
- .item {
335
- width: 100%;
336
- height: 100%;
337
- position: absolute;
338
- inset: 0 0 0 0;
339
-
340
- &:nth-child(1) {
341
- z-index: 1;
342
-
343
- .content {
344
- .author,
345
- .title,
346
- .topic,
347
- .description,
348
- .buttons {
349
- transform: translateY(50px);
350
- filter: blur(20px);
351
- opacity: 0;
352
- animation: showContent 0.5s 1s linear 1 forwards;
353
- }
354
-
355
- .title {
356
- animation-delay: 1.2s !important;
357
- }
358
- .topic {
359
- animation-delay: 1.4s !important;
360
- }
361
- .description {
362
- animation-delay: 1.6s !important;
363
- }
364
- .buttons {
365
- animation-delay: 1.8s !important;
366
- }
367
- }
368
- }
369
-
370
- img {
371
- width: 100%;
372
- height: 100%;
373
- object-fit: cover;
374
- }
375
-
376
- .content {
377
- position: absolute;
378
- top: 20%;
379
- width: 1140px;
380
- max-width: 80%;
381
- left: 50%;
382
- transform: translateX(-50%);
383
- padding-right: 30%;
384
- box-sizing: border-box;
385
- text-shadow: 0 5px 10px #0004;
386
-
387
- &.light {
388
- color: #fff;
389
- }
390
- &.dark {
391
- color: #000;
392
- }
393
-
394
- .author {
395
- font-weight: bold;
396
- letter-spacing: 10px;
397
-
398
- &.light {
399
- color: #fff;
400
- }
401
- &.dark {
402
- color: #000;
403
- }
404
- }
405
-
406
- .title {
407
- font-size: 5em;
408
- font-weight: bold;
409
- line-height: 1.3em;
410
-
411
- &.light {
412
- color: #fff;
413
- }
414
- &.dark {
415
- color: #000;
416
- }
417
- }
418
- .topic {
419
- font-size: 5em;
420
- font-weight: bold;
421
- line-height: 1.3em;
422
-
423
- &.light {
424
- color: #fff;
425
- }
426
- &.dark {
427
- color: #000;
428
- }
429
- }
430
-
431
- .buttons {
432
- display: grid;
433
- grid-template-columns: repeat(2, 130px);
434
- grid-template-rows: 40px;
435
- gap: 5px;
436
- margin-top: 20px;
437
-
438
- button {
439
- background-color: #99999975;
440
- border: 1px solid #fff;
441
- color: #fff;
442
- letter-spacing: 3px;
443
- font-weight: 500;
444
-
445
- &.light {
446
- color: #fff;
447
- }
448
- &.dark {
449
- color: #000;
450
- }
451
- }
452
- }
453
- }
454
- }
455
- }
456
-
457
- .thumbnail {
458
- position: absolute;
459
- bottom: 50px;
460
- left: 50%;
461
- width: max-content;
462
- z-index: 100;
463
- display: flex;
464
- gap: 20px;
465
-
466
- @container (width >= 1024px) {
467
- --_thumbnailWidth: var(--_thumbnailDesktopWidth, 150px);
468
- --_thumbnailHeight: var(--_thumbnailDesktopHeight, 220px);
469
- }
470
-
471
- .item {
472
- width: var(--_thumbnailWidth);
473
- height: var(--_thumbnailHeight);
474
- flex-shrink: 0;
475
- position: relative;
476
-
477
- border: var(--_thumbnailBorder, 1px solid transparent);
478
- outline: var(--_thumbnailOutline, 1px solid transparent);
479
- border-radius: var(--_thumbnailBorderRadius, 20px);
480
- overflow: hidden;
481
-
482
- .inner {
483
- position: absolute;
484
- inset: 0 0 0 0;
485
- background-color: #0004;
486
- z-index: 2;
487
- }
488
-
489
- img {
490
- width: 100%;
491
- height: 100%;
492
- object-fit: cover;
493
- }
494
-
495
- .content {
496
- position: absolute;
497
- bottom: 10px;
498
- left: 10px;
499
- right: 10px;
500
-
501
- .title {
502
- font-weight: 500;
503
-
504
- &.light {
505
- color: #fff;
506
- }
507
- &.dark {
508
- color: #000;
509
- }
510
- }
511
-
512
- .description {
513
- font-weight: 300;
514
-
515
- &.light {
516
- color: #fff;
517
- }
518
- &.dark {
519
- color: #000;
520
- }
521
- }
522
- }
523
- }
524
- }
525
-
526
- /* arrows */
527
- .arrows {
528
- position: absolute;
529
- top: 80%;
530
- right: 52%;
531
- z-index: 100;
532
- width: 300px;
533
- max-width: 30%;
534
- display: flex;
535
- gap: 20px;
536
- align-items: center;
537
-
538
- button {
539
- display: grid;
540
- justify-content: center;
541
- align-items: center;
542
- width: 40px;
543
- height: 40px;
544
- border-radius: 50%;
545
- background-color: #eee4;
546
- color: #fff;
547
- font-family: monospace;
548
- font-weight: bold;
549
- transition: 0.5s;
550
-
551
- border-width: 2px;
552
- border-style: solid;
553
- border-color: white;
554
-
555
- &#prev {
556
- --_translateX: -2px;
557
- }
558
-
559
- &#next {
560
- --_translateX: 2px;
561
- }
562
-
563
- &:hover {
564
- background-color: #fff;
565
- color: #000;
566
- }
567
-
568
- .arrows-icon {
569
- color: currentColor;
570
- font-weight: 900;
571
- height: 40px;
572
- width: 40px;
573
- translate: var(--_translateX) -3px;
574
- }
575
- }
576
- }
577
-
578
- .time {
579
- position: absolute;
580
- z-index: 1000;
581
- width: 0%;
582
- height: 3px;
583
- background-color: #f1683a;
584
- left: 0;
585
- top: 0;
586
- }
587
-
588
- /* Slider carousel animations */
589
- &.next {
590
- .list {
591
- .item {
592
- &:nth-child(1) {
593
- img {
594
- width: var(--_thumbnailWidth);
595
- height: var(--_thumbnailHeight);
596
- position: absolute;
597
- bottom: 50px;
598
- left: 50%;
599
- border-radius: 30px;
600
- animation: showImage 0.5s linear 1 forwards;
601
- }
602
- }
603
- }
604
- }
605
-
606
- .arrows {
607
- button {
608
- pointer-events: none;
609
- }
610
- }
611
-
612
- .thumbnail {
613
- animation: effectNext 0.5s linear 1 forwards;
614
-
615
- .item {
616
- &:nth-last-child(1) {
617
- overflow: hidden;
618
- animation: showThumbnail 0.5s linear 1 forwards;
619
- }
620
- }
621
- }
622
-
623
- .time {
624
- animation: runningTime var(--_animationDuration) linear 1 forwards;
625
- }
626
- }
627
-
628
- &.prev {
629
- .list {
630
- .item {
631
- &:nth-child(2) {
632
- z-index: 2;
633
-
634
- img {
635
- animation: outFrame 0.5s linear 1 forwards;
636
- position: absolute;
637
- bottom: 0;
638
- left: 0;
639
- }
640
-
641
- .content {
642
- .author,
643
- .title,
644
- .topic,
645
- .description,
646
- .buttons {
647
- animation: contentOut 1.5s linear 1 forwards !important;
648
- }
649
- }
650
- }
651
- img {
652
- z-index: 100;
653
- }
654
- }
655
-
656
- .item.prepend-item {
657
- z-index: 1; /* Ensure it's visible */
658
- /* Any initial styles needed */
659
- }
660
- }
661
-
662
- .arrows {
663
- button {
664
- pointer-events: none;
665
- }
666
- }
667
-
668
- .thumbnail {
669
- /* Add a transform to the entire thumbnail container */
670
- animation: effectPrev 0.5s linear 1 forwards;
671
-
672
- .item {
673
- &:first-child {
674
- /* Add the animated border effect */
675
- &::before {
676
- animation: countdownBorder 7s linear 1 forwards;
677
- }
678
- }
679
- &:nth-child(1) {
680
- overflow: hidden;
681
- animation: showThumbnailPrev 0.5s linear 1 forwards;
682
- }
683
- }
684
-
685
- .item.prepend-item {
686
- opacity: 0;
687
- transform: translateX(-20px);
688
- /* Initial state for thumbnail animation */
689
- }
690
- }
691
- .time {
692
- animation: runningTime var(--_animationDuration) linear 1 forwards;
693
- }
694
- }
695
- }
696
-
697
- @keyframes showContent {
698
- to {
699
- transform: translateY(0px);
700
- filter: blur(0px);
701
- opacity: 1;
702
- }
703
- }
704
-
705
- @keyframes showImage {
706
- to {
707
- bottom: 0;
708
- left: 0;
709
- width: 100%;
710
- height: 100%;
711
- border-radius: 0;
712
- }
713
- }
714
-
715
- @keyframes showThumbnail {
716
- from {
717
- width: 0;
718
- opacity: 0;
719
- }
720
- }
721
-
722
- @keyframes effectNext {
723
- from {
724
- transform: translateX(calc(1 * var(--_thumbnailWidth)));
725
- }
726
- }
727
-
728
- @keyframes runningTime {
729
- from {
730
- width: 100%;
731
- }
732
- to {
733
- width: 0;
734
- }
735
- }
736
-
737
- @keyframes outFrame {
738
- to {
739
- width: var(--_thumbnailWidth);
740
- height: var(--_thumbnailHeight);
741
- bottom: 50px;
742
- left: 50%;
743
- border-radius: 20px;
744
- }
745
- }
746
-
747
- @keyframes contentOut {
748
- to {
749
- transform: translateY(calc(-1 * var(--_thumbnailWidth)));
750
- filter: blur(20px);
751
- opacity: 0;
752
- }
753
- }
754
-
755
- @keyframes effectPrev {
756
- from {
757
- transform: translateX(calc(-1 * var(--_thumbnailWidth)));
758
- }
759
- to {
760
- transform: translateX(0);
761
- }
762
- }
763
-
764
- @keyframes showThumbnailPrev {
765
- from {
766
- opacity: 0;
767
- transform: translateX(-20px);
768
- }
769
- to {
770
- opacity: 1;
771
- transform: translateX(0);
772
- }
773
- }
774
-
775
- @keyframes spinner {
776
- 0% {
777
- transform: rotate(0deg);
778
- }
779
- 100% {
780
- transform: rotate(360deg);
781
- }
782
- }
783
-
784
- @media screen and (max-width: 678px) {
785
- .slider-gallery .list .item .content {
786
- padding-right: 0;
787
- }
788
- .slider-gallery .list .item .content .title {
789
- font-size: 30px;
790
- }
791
- }
792
- </style>