itube-specs 0.0.793 → 0.0.795

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 (123) hide show
  1. package/README.md +18 -25
  2. package/components/adv/native-banner.vue +22 -17
  3. package/components/adv/native-bottom.vue +8 -6
  4. package/components/adv/native-player.vue +8 -6
  5. package/components/adv/ntv.vue +4 -3
  6. package/components/auth/icon.vue +4 -3
  7. package/components/auth/login.vue +39 -33
  8. package/components/auth/popup.vue +30 -24
  9. package/components/auth/recovery.vue +29 -24
  10. package/components/auth/register.vue +59 -50
  11. package/components/card/category-mini.vue +6 -4
  12. package/components/card/category.vue +25 -21
  13. package/components/card/channel-mini.vue +17 -13
  14. package/components/card/channel.vue +36 -29
  15. package/components/card/model-mini.vue +24 -19
  16. package/components/card/model.vue +43 -33
  17. package/components/card/playlist-mini.vue +19 -16
  18. package/components/card/playlist.vue +97 -73
  19. package/components/card/round.vue +16 -13
  20. package/components/card/video/dropdown.vue +55 -41
  21. package/components/card/video/index.vue +99 -81
  22. package/components/card/video/mini.vue +19 -15
  23. package/components/card/video/preview.vue +7 -6
  24. package/components/category/by-letter.vue +4 -3
  25. package/components/category/group.vue +18 -13
  26. package/components/category/letter-groups.vue +4 -3
  27. package/components/category/list.vue +19 -16
  28. package/components/category/nav.vue +15 -12
  29. package/components/filter/btn.vue +13 -10
  30. package/components/filter/chips.vue +8 -7
  31. package/components/filter/main.vue +27 -23
  32. package/components/filter/model-field.vue +43 -38
  33. package/components/filter/model.vue +33 -28
  34. package/components/filter/page.vue +53 -43
  35. package/components/filter/popup.vue +75 -60
  36. package/components/filter/selects.vue +63 -49
  37. package/components/filter/slider.vue +23 -20
  38. package/components/filter/videos-chips.vue +3 -2
  39. package/components/grid/categories.vue +5 -4
  40. package/components/grid/channels.vue +9 -7
  41. package/components/grid/models.vue +10 -8
  42. package/components/grid/playlists.vue +6 -5
  43. package/components/grid/videos.vue +35 -31
  44. package/components/info/grid.vue +43 -34
  45. package/components/info/main.vue +94 -71
  46. package/components/info/socials.vue +13 -11
  47. package/components/layout/burger-item.vue +44 -36
  48. package/components/layout/burger.vue +45 -35
  49. package/components/layout/cookie.vue +14 -11
  50. package/components/layout/extra-links.vue +6 -5
  51. package/components/layout/footer-language.vue +35 -28
  52. package/components/layout/header-user.vue +66 -51
  53. package/components/layout/header.vue +55 -42
  54. package/components/layout/language.vue +67 -54
  55. package/components/layout/logo.vue +11 -9
  56. package/components/layout/nav.vue +36 -29
  57. package/components/layout/skip-link.vue +3 -2
  58. package/components/player/aside-videos.vue +10 -8
  59. package/components/player/autoplay.vue +7 -5
  60. package/components/player/channel.vue +25 -19
  61. package/components/player/core.vue +11 -10
  62. package/components/player/follow.vue +17 -13
  63. package/components/player/info.vue +9 -6
  64. package/components/player/interface.vue +50 -38
  65. package/components/player/like.vue +32 -24
  66. package/components/player/main.vue +12 -10
  67. package/components/player/playlist.vue +79 -61
  68. package/components/player/sponsored.vue +20 -16
  69. package/components/playlist/add.vue +89 -71
  70. package/components/playlist/delete-video.vue +23 -18
  71. package/components/playlist/edit.vue +64 -49
  72. package/components/playlist/input.vue +32 -24
  73. package/components/playlist/main.vue +21 -18
  74. package/components/playlist/private-toggle.vue +4 -3
  75. package/components/profile/delete.vue +7 -6
  76. package/components/profile/guest.vue +10 -7
  77. package/components/profile/password.vue +25 -22
  78. package/components/profile/setup.vue +88 -71
  79. package/components/report/main.vue +89 -71
  80. package/components/search/input.vue +37 -31
  81. package/components/search/item.vue +22 -18
  82. package/components/search/main.vue +34 -26
  83. package/components/search/result.vue +72 -57
  84. package/components/section/categories-island.server.vue +7 -5
  85. package/components/section/categories.vue +4 -3
  86. package/components/section/models.vue +4 -3
  87. package/components/section/nav-links.vue +8 -7
  88. package/components/section/seo-text.vue +9 -6
  89. package/components/section/swiper-cards.vue +19 -14
  90. package/components/section/toolbar.vue +26 -20
  91. package/components/share/main.vue +32 -26
  92. package/components/ui/avatar.vue +10 -8
  93. package/components/ui/breadcrumbs.vue +33 -25
  94. package/components/ui/btn.vue +13 -12
  95. package/components/ui/checkbox.vue +21 -17
  96. package/components/ui/chips.vue +33 -29
  97. package/components/ui/count.vue +4 -3
  98. package/components/ui/dropdown.vue +42 -34
  99. package/components/ui/empty-state.vue +11 -9
  100. package/components/ui/expand-row.vue +34 -28
  101. package/components/ui/full-descr.vue +6 -4
  102. package/components/ui/icon.vue +4 -3
  103. package/components/ui/img.vue +11 -10
  104. package/components/ui/input.vue +75 -66
  105. package/components/ui/label.vue +4 -3
  106. package/components/ui/link.vue +20 -18
  107. package/components/ui/notification.vue +22 -17
  108. package/components/ui/pagination.vue +89 -76
  109. package/components/ui/popup.vue +39 -30
  110. package/components/ui/radio.vue +17 -14
  111. package/components/ui/section-title.vue +20 -15
  112. package/components/ui/segmented.vue +19 -15
  113. package/components/ui/select.vue +44 -35
  114. package/components/ui/slider.vue +16 -13
  115. package/components/ui/snackbar.vue +7 -5
  116. package/components/ui/swiper.vue +32 -24
  117. package/components/ui/toggle.vue +17 -14
  118. package/components/ui/tooltip.vue +15 -12
  119. package/components/view/model-videos.vue +71 -57
  120. package/components/view/models.vue +71 -57
  121. package/components/view/video.vue +64 -51
  122. package/components/view/videos.vue +55 -45
  123. package/package.json +1 -1
@@ -1,16 +1,18 @@
1
1
  <!-- Мини-карточка канала: логотип слева, название, счётчик видео (горизонтальная) -->
2
2
  <template>
3
3
  <div class="card-channel-mini">
4
- <img v-if="card.avatarUrl && !imageError"
5
- :src="card.avatarUrl"
6
- :alt="card.name"
7
- class="card-channel-mini__logo"
8
- width="64"
9
- height="64"
10
- @error="imageError = true"
4
+ <img
5
+ v-if="card.avatarUrl && !imageError"
6
+ :src="card.avatarUrl"
7
+ :alt="card.name"
8
+ class="card-channel-mini__logo"
9
+ width="64"
10
+ height="64"
11
+ @error="imageError = true"
11
12
  >
12
- <span v-else
13
- class="card-channel-mini__logo --placeholder"
13
+ <span
14
+ v-else
15
+ class="card-channel-mini__logo --placeholder"
14
16
  >
15
17
  {{ card.name.charAt(0) }}
16
18
  </span>
@@ -18,13 +20,15 @@
18
20
  <p class="card-channel-mini__name">{{ card.name }}</p>
19
21
  <div class="card-channel-mini__info">
20
22
  <span class="card-channel-mini__detail">
21
- <UiIcon name="video-camera"
22
- size="14"
23
+ <UiIcon
24
+ name="video-camera"
25
+ size="14"
23
26
  />
24
27
  {{ card.videosCount }}
25
28
  </span>
26
- <span v-if="$features.FeatureFollowEnabled"
27
- class="card-channel-mini__detail"
29
+ <span
30
+ v-if="$features.FeatureFollowEnabled"
31
+ class="card-channel-mini__detail"
28
32
  >{{ $n(8400, 'compact') }}</span>
29
33
  </div>
30
34
  </div>
@@ -1,48 +1,55 @@
1
1
  <!-- Карточка канала: обложка 16:9, логотип, статистика (видео/подписчики/дата) -->
2
2
  <template>
3
- <NuxtLink :to="generateLink(`/channels/${slug}`)"
4
- class="card-channel"
3
+ <NuxtLink
4
+ :to="generateLink(`/channels/${slug}`)"
5
+ class="card-channel"
5
6
  >
6
7
  <div class="card-channel__img-wrapper">
7
- <UiImg :src="currentImage"
8
- :urls="card.thumbUrls"
9
- :sizes="`(max-width: ${CSS_BREAKPOINTS.lg}px) 50vw, 480px`"
10
- :alt="card.name"
11
- :loading="priority ? 'eager' : 'lazy'"
12
- :priority="priority"
13
- class="card-channel__img"
14
- width="480"
15
- height="270"
16
- @error="onImageError"
8
+ <UiImg
9
+ :src="currentImage"
10
+ :urls="card.thumbUrls"
11
+ :sizes="`(max-width: ${CSS_BREAKPOINTS.lg}px) 50vw, 480px`"
12
+ :alt="card.name"
13
+ :loading="priority ? 'eager' : 'lazy'"
14
+ :priority="priority"
15
+ class="card-channel__img"
16
+ width="480"
17
+ height="270"
18
+ @error="onImageError"
17
19
  />
18
- <UiLabel v-if="card.isNetwork"
19
- :text="$t('network')"
20
- class="card-channel__label"
21
- theme="primary"
20
+ <UiLabel
21
+ v-if="card.isNetwork"
22
+ :text="$t('network')"
23
+ class="card-channel__label"
24
+ theme="primary"
22
25
  />
23
26
  </div>
24
27
  <div class="card-channel__container">
25
- <img v-if="card.avatarUrl"
26
- :src="card.avatarUrl"
27
- :alt="card.name"
28
- class="card-channel__logo _from-xs"
29
- width="32"
30
- height="32"
28
+ <img
29
+ v-if="card.avatarUrl"
30
+ :src="card.avatarUrl"
31
+ :alt="card.name"
32
+ class="card-channel__logo _from-xs"
33
+ width="32"
34
+ height="32"
31
35
  >
32
- <span v-else
33
- class="card-channel__logo --placeholder _from-xs"
36
+ <span
37
+ v-else
38
+ class="card-channel__logo --placeholder _from-xs"
34
39
  >
35
40
  {{ logoPlaceholder }}
36
41
  </span>
37
42
  <span class="card-channel__title _truncate">{{ card.name }}
38
43
  </span>
39
44
  <div class="card-channel__info-wrapper">
40
- <p v-for="(item, index) in infoItems"
41
- :key="`channel-info-${index}`"
42
- class="card-channel__info"
45
+ <p
46
+ v-for="(item, index) in infoItems"
47
+ :key="`channel-info-${index}`"
48
+ class="card-channel__info"
43
49
  >
44
- <UiIcon :name="item.icon"
45
- size="14"
50
+ <UiIcon
51
+ :name="item.icon"
52
+ size="14"
46
53
  />
47
54
  {{ item.text }}
48
55
  </p>
@@ -1,36 +1,41 @@
1
1
  <!-- Мини-карточка модели: аватар слева, имя, возраст/счётчик видео -->
2
2
  <template>
3
3
  <div class="card-model-mini">
4
- <UiImg :src="currentImage"
5
- :alt="card.title"
6
- class="card-model-mini__img"
7
- width="48"
8
- height="48"
9
- sizes="48px"
10
- @error="imageError = true"
4
+ <UiImg
5
+ :src="currentImage"
6
+ :alt="card.title"
7
+ class="card-model-mini__img"
8
+ width="48"
9
+ height="48"
10
+ sizes="48px"
11
+ @error="imageError = true"
11
12
  />
12
13
  <div class="card-model-mini__wrapper">
13
14
  <p class="card-model-mini__name">
14
15
  {{ card.title }}
15
- <img v-if="card.country"
16
- :alt="card.country"
17
- :src="`/icons/flags/${card.country}.svg`"
18
- class="card-model-mini__flag"
19
- width="16"
20
- height="12"
16
+ <img
17
+ v-if="card.country"
18
+ :alt="card.country"
19
+ :src="`/icons/flags/${card.country}.svg`"
20
+ class="card-model-mini__flag"
21
+ width="16"
22
+ height="12"
21
23
  >
22
24
  </p>
23
25
  <div class="card-model-mini__info">
24
- <span v-if="card.videosCount"
25
- class="card-model-mini__detail"
26
+ <span
27
+ v-if="card.videosCount"
28
+ class="card-model-mini__detail"
26
29
  >
27
- <UiIcon name="video-camera"
28
- size="14"
30
+ <UiIcon
31
+ name="video-camera"
32
+ size="14"
29
33
  />
30
34
  {{ card.videosCount }}
31
35
  </span>
32
- <span v-if="card.age"
33
- class="card-model-mini__detail"
36
+ <span
37
+ v-if="card.age"
38
+ class="card-model-mini__detail"
34
39
  >{{ card.age }} {{ $t('yo') }}</span>
35
40
  </div>
36
41
  </div>
@@ -1,61 +1,71 @@
1
1
  <!-- Карточка модели: аватар, параметры, страна, счётчики видео/обновлений -->
2
2
  <template>
3
- <NuxtLink :to="generateLink(`/models/${convertString().toSlug(card.title)}`)"
4
- :title="card.title"
5
- class="card-model"
3
+ <NuxtLink
4
+ :to="generateLink(`/models/${convertString().toSlug(card.title)}`)"
5
+ :title="card.title"
6
+ class="card-model"
6
7
  >
7
8
  <div class="card-model__inner">
8
- <UiImg :src="currentImage"
9
- :loading="loading"
10
- :alt="card.title"
11
- :priority="priority"
12
- class="card-model__img"
13
- width="64"
14
- height="64"
15
- sizes="xs:64px sm:64px md:64px lg:64px"
16
- @error="onImageError"
9
+ <UiImg
10
+ :src="currentImage"
11
+ :loading="loading"
12
+ :alt="card.title"
13
+ :priority="priority"
14
+ class="card-model__img"
15
+ width="64"
16
+ height="64"
17
+ sizes="xs:64px sm:64px md:64px lg:64px"
18
+ @error="onImageError"
17
19
  />
18
20
  <div class="card-model__wrapper">
19
21
  <p class="card-model__info">
20
22
  <span class="card-model__info-name">
21
23
  {{ card.title }}
22
24
  </span>
23
- <span v-if="card.country && card.country.name"
24
- :title="`${t('birthplace_country')}: ${card.country.title}`"
25
- class="card-model__country-wrapper"
25
+ <span
26
+ v-if="card.country && card.country.name"
27
+ :title="`${t('birthplace_country')}: ${card.country.title}`"
28
+ class="card-model__country-wrapper"
26
29
  >
27
- <img :alt="card.country.title"
28
- :src="`/icons/flags/${card.country.name}.svg`"
29
- class="card-model__info-country"
30
- width="16"
31
- height="12"
30
+ <img
31
+ :alt="card.country.title"
32
+ :src="`/icons/flags/${card.country.name}.svg`"
33
+ class="card-model__info-country"
34
+ width="16"
35
+ height="12"
32
36
  >
33
37
  </span>
34
38
  </p>
35
39
  <p class="card-model__parameters">
36
- <span v-for="(parameter, index) in card.parameters"
37
- :key="`parameter-${index}`"
38
- class="card-model__parameter"
40
+ <span
41
+ v-for="(parameter, index) in card.parameters"
42
+ :key="`parameter-${index}`"
43
+ class="card-model__parameter"
39
44
  >
40
- <span v-if="parameter.title"
41
- class="card-model__parameter-title"
45
+ <span
46
+ v-if="parameter.title"
47
+ class="card-model__parameter-title"
42
48
  >{{ getValue(parameter) }}</span>
43
49
  </span>
44
50
  </p>
45
51
  <p class="card-model__parameters-footer">
46
- <span v-if="card.videosCount"
47
- class="card-model__count"
52
+ <span
53
+ v-if="card.videosCount"
54
+ class="card-model__count"
48
55
  >
49
- <UiIcon name="video-camera"
50
- size="14"
56
+ <UiIcon
57
+ name="video-camera"
58
+ size="14"
51
59
  />
52
60
  {{ $n(card.videosCount, 'compact') }}
53
61
  </span>
54
- <span v-if="card.lastVideoAddedAt"
55
- class="card-model__update"
62
+ <span
63
+ v-if="card.lastVideoAddedAt"
64
+ class="card-model__update"
56
65
  >
57
- <UiIcon name="time-updated"
58
- size="14"
66
+ <UiIcon
67
+ name="time-updated"
68
+ size="14"
59
69
  />
60
70
  {{ formatDate(card.lastVideoAddedAt) }}
61
71
  </span>
@@ -1,29 +1,32 @@
1
1
  <!-- Мини-карточка плейлиста: мозаика обложек слева + название/автор -->
2
2
  <template>
3
3
  <div class="card-playlist-mini">
4
- <div :class="[
5
- `--${card.thumbUrls?.length > 3 ? '4' : `${card.thumbUrls?.length}`}-child`,
6
- {'--empty': !card.thumbUrls?.length},
7
- ]"
8
- class="card-playlist-mini__img-wrapper"
4
+ <div
5
+ :class="[
6
+ `--${card.thumbUrls?.length > 3 ? '4' : `${card.thumbUrls?.length}`}-child`,
7
+ {'--empty': !card.thumbUrls?.length},
8
+ ]"
9
+ class="card-playlist-mini__img-wrapper"
9
10
  >
10
- <UiImg v-for="(item, index) in card.thumbUrls"
11
- :key="`playlist-mini-image-${index}`"
12
- :src="getCurrentImage(index)"
13
- :alt="card.name"
14
- class="card-playlist-mini__img"
15
- width="320"
16
- height="180"
17
- sizes="120px"
18
- @error="onImageError(index)"
11
+ <UiImg
12
+ v-for="(item, index) in card.thumbUrls"
13
+ :key="`playlist-mini-image-${index}`"
14
+ :src="getCurrentImage(index)"
15
+ :alt="card.name"
16
+ class="card-playlist-mini__img"
17
+ width="320"
18
+ height="180"
19
+ sizes="120px"
20
+ @error="onImageError(index)"
19
21
  />
20
22
  </div>
21
23
  <div class="card-playlist-mini__wrapper">
22
24
  <p class="card-playlist-mini__name">{{ card.name }}</p>
23
25
  <p class="card-playlist-mini__user">{{ $t('by') }} {{ card.username }}</p>
24
26
  <span class="card-playlist-mini__count">
25
- <UiIcon name="video-camera"
26
- size="16"
27
+ <UiIcon
28
+ name="video-camera"
29
+ size="16"
27
30
  />
28
31
  {{ card.videosCount }}
29
32
  </span>
@@ -1,88 +1,102 @@
1
1
  <!-- Карточка плейлиста: галерея 1-4 обложек, статистика, меню действий -->
2
2
  <template>
3
3
  <div class="card-playlist">
4
- <NuxtLink :class="[
5
- `--${card.thumbUrls?.length > 3 ? '4' : `${card.thumbUrls?.length}`}-child`,
6
- {'--empty': !card.thumbUrls?.length},
7
- ]"
8
- :to="generateLink(link)"
9
- class="card-playlist__img-wrapper"
4
+ <NuxtLink
5
+ :class="[
6
+ `--${card.thumbUrls?.length > 3 ? '4' : `${card.thumbUrls?.length}`}-child`,
7
+ {'--empty': !card.thumbUrls?.length},
8
+ ]"
9
+ :to="generateLink(link)"
10
+ class="card-playlist__img-wrapper"
10
11
  >
11
- <UiImg v-for="(item, index) in card.thumbUrls"
12
- :key="`playlist-image-${index}`"
13
- :src="getCurrentImage(item, index)"
14
- :urls="isSingle ? item : undefined"
15
- :width="isSingle ? ThumbSize.Medium.split('x')[0] : ThumbSize.Small.split('x')[0]"
16
- :height="isSingle ? ThumbSize.Medium.split('x')[1] : ThumbSize.Small.split('x')[1]"
17
- :sizes="isSingle ? `(max-width: ${CSS_BREAKPOINTS.lg}px) 50vw, ${ThumbSize.Medium.split('x')[0]}px` : `${ThumbSize.Small.split('x')[0]}px`"
18
- :alt="card.name"
19
- :loading="priority ? 'eager' : 'lazy'"
20
- :priority="priority"
21
- class="card-playlist__img"
22
- @error="onImageError(index)"
12
+ <UiImg
13
+ v-for="(item, index) in card.thumbUrls"
14
+ :key="`playlist-image-${index}`"
15
+ :src="getCurrentImage(item, index)"
16
+ :urls="isSingle ? item : undefined"
17
+ :width="isSingle ? ThumbSize.Medium.split('x')[0] : ThumbSize.Small.split('x')[0]"
18
+ :height="isSingle ? ThumbSize.Medium.split('x')[1] : ThumbSize.Small.split('x')[1]"
19
+ :sizes="isSingle ? `(max-width: ${CSS_BREAKPOINTS.lg}px) 50vw, ${ThumbSize.Medium.split('x')[0]}px` : `${ThumbSize.Small.split('x')[0]}px`"
20
+ :alt="card.name"
21
+ :loading="priority ? 'eager' : 'lazy'"
22
+ :priority="priority"
23
+ class="card-playlist__img"
24
+ @error="onImageError(index)"
23
25
  />
24
- <UiLabel :text="card.videosCount"
25
- class="card-playlist__count"
26
- theme="black"
26
+ <UiLabel
27
+ :text="card.videosCount"
28
+ class="card-playlist__count"
29
+ theme="black"
27
30
  >
28
- <UiIcon name="cam"
29
- size="16"
31
+ <UiIcon
32
+ name="cam"
33
+ size="16"
30
34
  />
31
35
  </UiLabel>
32
36
 
33
- <UiLabel v-if="card.playlistType === 'private'"
34
- :text="t('private')"
35
- class="card-playlist__private"
36
- theme="backdrop"
37
+ <UiLabel
38
+ v-if="card.playlistType === 'private'"
39
+ :text="t('private')"
40
+ class="card-playlist__private"
41
+ theme="backdrop"
37
42
  >
38
- <UiIcon name="lock"
39
- size="16"
43
+ <UiIcon
44
+ name="lock"
45
+ size="16"
40
46
  />
41
47
  </UiLabel>
42
48
  </NuxtLink>
43
49
  <div class="card-playlist__wrapper">
44
50
  <div class="card-playlist__wrapper-header">
45
51
  <p class="card-playlist__numbers">
46
- <span v-if="card.likes != null"
47
- class="card-playlist__like"
52
+ <span
53
+ v-if="card.likes != null"
54
+ class="card-playlist__like"
48
55
  >
49
- <UiIcon name="thumbs-up"
50
- size="12"
56
+ <UiIcon
57
+ name="thumbs-up"
58
+ size="12"
51
59
  />
52
60
  {{ $n(card.likes, 'compact') }}
53
61
  </span>
54
- <span v-if="card.views != null"
55
- class="card-playlist__views"
62
+ <span
63
+ v-if="card.views != null"
64
+ class="card-playlist__views"
56
65
  >
57
- <UiIcon name="show"
58
- size="14"
66
+ <UiIcon
67
+ name="show"
68
+ size="14"
59
69
  />
60
70
  {{ $n(card.views, 'compact') }}
61
71
  </span>
62
72
  </p>
63
73
  <p class="card-playlist__created">
64
- <UiIcon name="date"
65
- size="12"
74
+ <UiIcon
75
+ name="date"
76
+ size="12"
66
77
  />
67
78
  {{ formatDate(card.created) }}
68
79
  </p>
69
80
  </div>
70
81
  <div class="card-playlist__content">
71
- <UiImg v-if="avatar"
72
- :src="avatar"
73
- :alt="card.username"
74
- class="card-playlist__avatar _from-xs"
75
- width="36"
76
- height="36"
77
- sizes="36px"
82
+ <UiImg
83
+ v-if="avatar"
84
+ :src="avatar"
85
+ :alt="card.username"
86
+ class="card-playlist__avatar _from-xs"
87
+ width="36"
88
+ height="36"
89
+ sizes="36px"
78
90
  />
79
- <div v-else
80
- class="card-playlist__avatar --placeholder _from-xs"
91
+ <div
92
+ v-else
93
+ class="card-playlist__avatar --placeholder _from-xs"
81
94
  >
82
95
  {{ avatarPlaceholder }}
83
96
  </div>
84
- <NuxtLink :to="generateLink(`/playlists/${card.id}/${card.firstVideoId}`)"
85
- class="card-playlist__title"
97
+ <NuxtLink
98
+ :to="generateLink(`/playlists/${card.id}/${card.firstVideoId}`)"
99
+ class="card-playlist__title"
86
100
  >
87
101
  {{ card.name }}
88
102
  </NuxtLink>
@@ -90,40 +104,48 @@
90
104
  {{ card.username }}
91
105
  </p>
92
106
  <div class="card-playlist__content-wrapper">
93
- <UiDropdown right
94
- use-v-if
95
- class="card-playlist__dropdown"
107
+ <UiDropdown
108
+ right
109
+ use-v-if
110
+ class="card-playlist__dropdown"
96
111
  >
97
112
  <template #trigger>
98
- <button class="card-playlist__dots"
99
- type="button"
113
+ <button
114
+ class="card-playlist__dots"
115
+ type="button"
100
116
  >
101
- <UiIcon name="dots-vertical"
102
- size="16"
117
+ <UiIcon
118
+ name="dots-vertical"
119
+ size="16"
103
120
  />
104
121
  </button>
105
122
  </template>
106
123
  <template #header>
107
- <CardPlaylistMini :card="card"
108
- class="card-playlist__preview _to-sm"
124
+ <CardPlaylistMini
125
+ :card="card"
126
+ class="card-playlist__preview _to-sm"
109
127
  />
110
128
  </template>
111
129
  <template #items="className">
112
- <button v-if="card.firstVideoId"
113
- :class="className"
114
- type="button"
130
+ <button
131
+ v-if="card.firstVideoId"
132
+ :class="className"
133
+ type="button"
115
134
  >
116
- <UiIcon name="star"
117
- size="16"
135
+ <UiIcon
136
+ name="star"
137
+ size="16"
118
138
  />
119
139
  {{ t('add_to') }}
120
140
  </button>
121
- <button :class="className"
122
- type="button"
123
- @click="isShareOpen = true"
141
+ <button
142
+ :class="className"
143
+ type="button"
144
+ @click="isShareOpen = true"
124
145
  >
125
- <UiIcon name="share"
126
- size="16"
146
+ <UiIcon
147
+ name="share"
148
+ size="16"
127
149
  />
128
150
  {{ t('share') }}
129
151
  </button>
@@ -131,15 +153,17 @@
131
153
  </UiDropdown>
132
154
  </div>
133
155
  </div>
134
- <p v-if="card.searchTags && card.searchTags?.length > 0"
135
- class="card-playlist__tags _truncate"
156
+ <p
157
+ v-if="card.searchTags && card.searchTags?.length > 0"
158
+ class="card-playlist__tags _truncate"
136
159
  >
137
160
  {{ card.searchTags.join(' · ')}}
138
161
  </p>
139
162
  </div>
140
163
 
141
- <ShareMain v-model="isShareOpen"
142
- :url="link"
164
+ <ShareMain
165
+ v-model="isShareOpen"
166
+ :url="link"
143
167
  >
144
168
  <template #card>
145
169
  <CardPlaylistMini :card="card" />
@@ -1,17 +1,19 @@
1
1
  <!-- Круглая аватар-карточка с рамкой, названием и счётчиком (для популярного) -->
2
2
  <template>
3
- <NuxtLink :to="generateLink(card.link)"
4
- class="card-round"
3
+ <NuxtLink
4
+ :to="generateLink(card.link)"
5
+ class="card-round"
5
6
  >
6
- <UiImg :src="currentImage"
7
- :loading="loading"
8
- :alt="card.title"
9
- :priority="priority"
10
- class="card-round__img"
11
- width="96"
12
- height="96"
13
- sizes="96px"
14
- @error="onImageError"
7
+ <UiImg
8
+ :src="currentImage"
9
+ :loading="loading"
10
+ :alt="card.title"
11
+ :priority="priority"
12
+ class="card-round__img"
13
+ width="96"
14
+ height="96"
15
+ sizes="96px"
16
+ @error="onImageError"
15
17
  />
16
18
  <p class="card-round__title">
17
19
  {{ card.title }}
@@ -20,8 +22,9 @@
20
22
  <!-- </ClientOnly>-->
21
23
  </p>
22
24
  <p class="card-round__count">
23
- <UiIcon name="cam"
24
- size="12"
25
+ <UiIcon
26
+ name="cam"
27
+ size="12"
25
28
  />
26
29
  <span class="card-round__count-text">{{ card.videosCount }}</span>
27
30
  </p>