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