itube-specs 0.0.792 → 0.0.794

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 (122) hide show
  1. package/components/adv/native-banner.vue +22 -17
  2. package/components/adv/native-bottom.vue +8 -6
  3. package/components/adv/native-player.vue +8 -6
  4. package/components/adv/ntv.vue +4 -3
  5. package/components/auth/icon.vue +4 -3
  6. package/components/auth/login.vue +39 -33
  7. package/components/auth/popup.vue +30 -24
  8. package/components/auth/recovery.vue +29 -24
  9. package/components/auth/register.vue +59 -50
  10. package/components/card/category-mini.vue +6 -4
  11. package/components/card/category.vue +25 -21
  12. package/components/card/channel-mini.vue +17 -13
  13. package/components/card/channel.vue +36 -29
  14. package/components/card/model-mini.vue +24 -19
  15. package/components/card/model.vue +43 -33
  16. package/components/card/playlist-mini.vue +19 -16
  17. package/components/card/playlist.vue +97 -73
  18. package/components/card/round.vue +16 -13
  19. package/components/card/video/dropdown.vue +55 -41
  20. package/components/card/video/index.vue +99 -81
  21. package/components/card/video/mini.vue +19 -15
  22. package/components/card/video/preview.vue +7 -6
  23. package/components/category/by-letter.vue +4 -3
  24. package/components/category/group.vue +18 -13
  25. package/components/category/letter-groups.vue +4 -3
  26. package/components/category/list.vue +19 -16
  27. package/components/category/nav.vue +15 -12
  28. package/components/filter/btn.vue +13 -10
  29. package/components/filter/chips.vue +8 -7
  30. package/components/filter/main.vue +27 -23
  31. package/components/filter/model-field.vue +43 -38
  32. package/components/filter/model.vue +33 -28
  33. package/components/filter/page.vue +53 -43
  34. package/components/filter/popup.vue +75 -60
  35. package/components/filter/selects.vue +63 -49
  36. package/components/filter/slider.vue +23 -20
  37. package/components/filter/videos-chips.vue +3 -2
  38. package/components/grid/categories.vue +5 -4
  39. package/components/grid/channels.vue +9 -7
  40. package/components/grid/models.vue +10 -8
  41. package/components/grid/playlists.vue +6 -5
  42. package/components/grid/videos.vue +35 -31
  43. package/components/info/grid.vue +43 -34
  44. package/components/info/main.vue +94 -71
  45. package/components/info/socials.vue +13 -11
  46. package/components/layout/burger-item.vue +44 -36
  47. package/components/layout/burger.vue +45 -35
  48. package/components/layout/cookie.vue +14 -11
  49. package/components/layout/extra-links.vue +6 -5
  50. package/components/layout/footer-language.vue +35 -28
  51. package/components/layout/header-user.vue +66 -51
  52. package/components/layout/header.vue +55 -42
  53. package/components/layout/language.vue +67 -54
  54. package/components/layout/logo.vue +11 -9
  55. package/components/layout/nav.vue +36 -29
  56. package/components/layout/skip-link.vue +3 -2
  57. package/components/player/aside-videos.vue +10 -8
  58. package/components/player/autoplay.vue +7 -5
  59. package/components/player/channel.vue +25 -19
  60. package/components/player/core.vue +11 -10
  61. package/components/player/follow.vue +17 -13
  62. package/components/player/info.vue +9 -6
  63. package/components/player/interface.vue +50 -38
  64. package/components/player/like.vue +32 -24
  65. package/components/player/main.vue +12 -10
  66. package/components/player/playlist.vue +79 -61
  67. package/components/player/sponsored.vue +20 -16
  68. package/components/playlist/add.vue +89 -71
  69. package/components/playlist/delete-video.vue +23 -18
  70. package/components/playlist/edit.vue +64 -49
  71. package/components/playlist/input.vue +32 -24
  72. package/components/playlist/main.vue +21 -18
  73. package/components/playlist/private-toggle.vue +4 -3
  74. package/components/profile/delete.vue +7 -6
  75. package/components/profile/guest.vue +10 -7
  76. package/components/profile/password.vue +25 -22
  77. package/components/profile/setup.vue +88 -71
  78. package/components/report/main.vue +89 -71
  79. package/components/search/input.vue +37 -31
  80. package/components/search/item.vue +22 -18
  81. package/components/search/main.vue +34 -26
  82. package/components/search/result.vue +72 -57
  83. package/components/section/categories-island.server.vue +7 -5
  84. package/components/section/categories.vue +4 -3
  85. package/components/section/models.vue +4 -3
  86. package/components/section/nav-links.vue +8 -7
  87. package/components/section/seo-text.vue +9 -6
  88. package/components/section/swiper-cards.vue +19 -14
  89. package/components/section/toolbar.vue +26 -20
  90. package/components/share/main.vue +32 -26
  91. package/components/ui/avatar.vue +10 -8
  92. package/components/ui/breadcrumbs.vue +33 -25
  93. package/components/ui/btn.vue +13 -12
  94. package/components/ui/checkbox.vue +21 -17
  95. package/components/ui/chips.vue +33 -29
  96. package/components/ui/count.vue +4 -3
  97. package/components/ui/dropdown.vue +42 -34
  98. package/components/ui/empty-state.vue +11 -9
  99. package/components/ui/expand-row.vue +34 -28
  100. package/components/ui/full-descr.vue +6 -4
  101. package/components/ui/icon.vue +4 -3
  102. package/components/ui/img.vue +11 -10
  103. package/components/ui/input.vue +75 -66
  104. package/components/ui/label.vue +4 -3
  105. package/components/ui/link.vue +20 -18
  106. package/components/ui/notification.vue +22 -17
  107. package/components/ui/pagination.vue +89 -76
  108. package/components/ui/popup.vue +39 -30
  109. package/components/ui/radio.vue +17 -14
  110. package/components/ui/section-title.vue +20 -15
  111. package/components/ui/segmented.vue +19 -15
  112. package/components/ui/select.vue +44 -35
  113. package/components/ui/slider.vue +16 -13
  114. package/components/ui/snackbar.vue +7 -5
  115. package/components/ui/swiper.vue +32 -24
  116. package/components/ui/toggle.vue +17 -14
  117. package/components/ui/tooltip.vue +15 -12
  118. package/components/view/model-videos.vue +71 -57
  119. package/components/view/models.vue +71 -57
  120. package/components/view/video.vue +64 -51
  121. package/components/view/videos.vue +56 -46
  122. package/package.json +1 -1
@@ -1,27 +1,32 @@
1
1
  <template>
2
2
  <ClientOnly>
3
- <div v-if="spot"
4
- :class="{
5
- 'ntv': isNtv,
6
- }"
7
- class="adv-native-card"
3
+ <div
4
+ v-if="spot"
5
+ :class="{
6
+ 'ntv': isNtv,
7
+ }"
8
+ class="adv-native-card"
8
9
  >
9
- <div v-once
10
- class="adv-native-card__slot"
10
+ <div
11
+ v-once
12
+ class="adv-native-card__slot"
11
13
  >
12
- <div data-asg-ins
13
- :data-spots="spot"
14
+ <div
15
+ data-asg-ins
16
+ :data-spots="spot"
14
17
  />
15
18
  </div>
16
- <div v-if="!isNtv"
17
- class="adv-native-card__bottom"
19
+ <div
20
+ v-if="!isNtv"
21
+ class="adv-native-card__bottom"
18
22
  >
19
- <UiImg :alt="t('advertising_banner')"
20
- class="adv-native-card__channel-logo"
21
- width="32"
22
- height="32"
23
- src="/img/user-uploaded.svg"
24
- sizes="32px"
23
+ <UiImg
24
+ :alt="t('advertising_banner')"
25
+ class="adv-native-card__channel-logo"
26
+ width="32"
27
+ height="32"
28
+ src="/img/user-uploaded.svg"
29
+ sizes="32px"
25
30
  />
26
31
 
27
32
  <div class="adv-native-card__titles">
@@ -1,11 +1,13 @@
1
1
  <template>
2
- <iframe :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NativeBottom, AdSpotType.Primary)}`"
3
- class="adv-native-bottom"
4
- title="content"
2
+ <iframe
3
+ :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NativeBottom, AdSpotType.Primary)}`"
4
+ class="adv-native-bottom"
5
+ title="content"
5
6
  />
6
- <iframe :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NativeBottom, AdSpotType.Secondary)}`"
7
- class="adv-native-bottom"
8
- title="content"
7
+ <iframe
8
+ :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NativeBottom, AdSpotType.Secondary)}`"
9
+ class="adv-native-bottom"
10
+ title="content"
9
11
  />
10
12
  </template>
11
13
 
@@ -1,11 +1,13 @@
1
1
  <template>
2
- <iframe :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NativePlayer, AdSpotType.Primary)}`"
3
- class="adv-native-player"
4
- title="content"
2
+ <iframe
3
+ :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NativePlayer, AdSpotType.Primary)}`"
4
+ class="adv-native-player"
5
+ title="content"
5
6
  />
6
- <iframe :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NativePlayer, AdSpotType.Secondary)}`"
7
- class="adv-native-player"
8
- title="content"
7
+ <iframe
8
+ :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NativePlayer, AdSpotType.Secondary)}`"
9
+ class="adv-native-player"
10
+ title="content"
9
11
  />
10
12
  </template>
11
13
 
@@ -1,7 +1,8 @@
1
1
  <template>
2
- <iframe :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NTV, AdSpotType.Primary)}?ntv=1`"
3
- class="adv-ntv"
4
- title="content"
2
+ <iframe
3
+ :src="`/embed/${BannerHelper.getBannerSpot(AdBannerType.NTV, AdSpotType.Primary)}?ntv=1`"
4
+ class="adv-ntv"
5
+ title="content"
5
6
  />
6
7
  </template>
7
8
 
@@ -1,8 +1,9 @@
1
1
  <template>
2
2
  <div class="auth-icon">
3
- <UiIcon :name="icon"
4
- class="auth-icon__icon"
5
- size="24"
3
+ <UiIcon
4
+ :name="icon"
5
+ class="auth-icon__icon"
6
+ size="24"
6
7
  />
7
8
  </div>
8
9
  </template>
@@ -1,52 +1,58 @@
1
1
  <template>
2
- <div :class="{ _loading: loading }"
3
- class="auth-login"
2
+ <div
3
+ :class="{ _loading: loading }"
4
+ class="auth-login"
4
5
  >
5
6
  <AuthIcon class="auth-login__icon" />
6
7
 
7
- <UiInput v-model="form.username"
8
- :label="t('auth.username')"
9
- :placeholder="t('auth.username')"
10
- hide-label
11
- :error="error.username"
12
- name="login-name"
13
- enterkeyhint="next"
14
- @update:error="(val: boolean) => (error.username = val)"
15
- @enter="passwordRef?.focus()"
8
+ <UiInput
9
+ v-model="form.username"
10
+ :label="t('auth.username')"
11
+ :placeholder="t('auth.username')"
12
+ hide-label
13
+ :error="error.username"
14
+ name="login-name"
15
+ enterkeyhint="next"
16
+ @update:error="(val: boolean) => (error.username = val)"
17
+ @enter="passwordRef?.focus()"
16
18
  />
17
- <UiInput ref="passwordRef"
18
- v-model="form.password_hash"
19
- :label="t('auth.password')"
20
- :placeholder="t('auth.password')"
21
- hide-label
22
- :error="error.password_hash"
23
- type="password"
24
- enterkeyhint="go"
25
- @update:error="(val: boolean) => (error.password_hash = val)"
26
- @enter="login"
19
+ <UiInput
20
+ ref="passwordRef"
21
+ v-model="form.password_hash"
22
+ :label="t('auth.password')"
23
+ :placeholder="t('auth.password')"
24
+ hide-label
25
+ :error="error.password_hash"
26
+ type="password"
27
+ enterkeyhint="go"
28
+ @update:error="(val: boolean) => (error.password_hash = val)"
29
+ @enter="login"
27
30
  />
28
31
 
29
32
  <div class="auth-login__buttons">
30
- <UiBtn :disabled="loading"
31
- class="auth-login__login"
32
- wide
33
- size="l"
34
- theme="primary"
35
- @click="login"
33
+ <UiBtn
34
+ :disabled="loading"
35
+ class="auth-login__login"
36
+ wide
37
+ size="l"
38
+ theme="primary"
39
+ @click="login"
36
40
  >{{ t("auth.log_in") }}
37
41
  </UiBtn>
38
- <button class="auth-login__forgot"
39
- type="button"
40
- @click="onForgotClick"
42
+ <button
43
+ class="auth-login__forgot"
44
+ type="button"
45
+ @click="onForgotClick"
41
46
  >
42
47
  {{ t("auth.forgot") }}
43
48
  </button>
44
49
 
45
50
  <p class="auth-login__back">
46
51
  {{ t("register_text") }}
47
- <button class="auth-login__back-button"
48
- type="button"
49
- @click="onCreateClick"
52
+ <button
53
+ class="auth-login__back-button"
54
+ type="button"
55
+ @click="onCreateClick"
50
56
  >
51
57
  {{ t("auth.sign_up") }}
52
58
  </button>
@@ -1,44 +1,50 @@
1
1
  <template>
2
- <div v-if="isAuthPopupOpen"
3
- class="auth-popup__decorate"
2
+ <div
3
+ v-if="isAuthPopupOpen"
4
+ class="auth-popup__decorate"
4
5
  />
5
6
  <transition mode="out-in">
6
- <UiPopup v-if="currentStep === AuthSteps.Registration && isAuthPopupOpen"
7
- v-model="isAuthPopupOpen"
8
- transparent-backdrop
9
- :back="isBackShow"
10
- class="auth-popup"
11
- @back="currentStep -= 1"
7
+ <UiPopup
8
+ v-if="currentStep === AuthSteps.Registration && isAuthPopupOpen"
9
+ v-model="isAuthPopupOpen"
10
+ transparent-backdrop
11
+ :back="isBackShow"
12
+ class="auth-popup"
13
+ @back="currentStep -= 1"
12
14
  >
13
15
  <template #title>{{ $t('auth.create_new') }}</template>
14
- <AuthRegister :additional-text="additionalText"
15
- @login="onLoginClick"
16
+ <AuthRegister
17
+ :additional-text="additionalText"
18
+ @login="onLoginClick"
16
19
  />
17
20
  </UiPopup>
18
21
  </transition>
19
22
 
20
23
  <transition mode="out-in">
21
- <UiPopup v-if="currentStep === AuthSteps.Login && isAuthPopupOpen"
22
- v-model="isAuthPopupOpen"
23
- transparent-backdrop
24
- :back="isBackShow"
25
- class="auth-popup"
26
- @back="currentStep -= 1"
24
+ <UiPopup
25
+ v-if="currentStep === AuthSteps.Login && isAuthPopupOpen"
26
+ v-model="isAuthPopupOpen"
27
+ transparent-backdrop
28
+ :back="isBackShow"
29
+ class="auth-popup"
30
+ @back="currentStep -= 1"
27
31
  >
28
32
  <template #title>{{ $t('auth.welcome_back') }}</template>
29
- <AuthLogin @forgot="onRecoveryClick"
30
- @create="currentStep -= 1"
33
+ <AuthLogin
34
+ @forgot="onRecoveryClick"
35
+ @create="currentStep -= 1"
31
36
  />
32
37
  </UiPopup>
33
38
  </transition>
34
39
 
35
40
  <transition mode="out-in">
36
- <UiPopup v-if="currentStep === AuthSteps.Recovery && isAuthPopupOpen"
37
- v-model="isAuthPopupOpen"
38
- transparent-backdrop
39
- :back="isBackShow"
40
- class="auth-popup"
41
- @back="currentStep -= 1"
41
+ <UiPopup
42
+ v-if="currentStep === AuthSteps.Recovery && isAuthPopupOpen"
43
+ v-model="isAuthPopupOpen"
44
+ transparent-backdrop
45
+ :back="isBackShow"
46
+ class="auth-popup"
47
+ @back="currentStep -= 1"
42
48
  >
43
49
  <template #title>{{ $t('auth.recovery_title')}}</template>
44
50
  <AuthRecovery @login="onLoginClick"/>
@@ -1,37 +1,42 @@
1
1
  <template>
2
- <div :class="{'_loading': loading}"
3
- class="auth-recovery"
2
+ <div
3
+ :class="{'_loading': loading}"
4
+ class="auth-recovery"
4
5
  >
5
6
 
6
- <AuthIcon class="auth-recovery__icon"
7
- icon="envelope"
7
+ <AuthIcon
8
+ class="auth-recovery__icon"
9
+ icon="envelope"
8
10
  />
9
11
 
10
12
  <p class="auth-recovery__text">{{ t('auth.recovery_text') }}</p>
11
- <UiInput v-model="form.email"
12
- :label="$t('email')"
13
- :placeholder="$t('email')"
14
- hide-label
15
- :error="error.email"
16
- type="email"
17
- inputmode="email"
18
- enterkeyhint="send"
19
- autocomplete="email"
20
- @update:error="(val: boolean) => error.email = val"
21
- @enter="submit"
13
+ <UiInput
14
+ v-model="form.email"
15
+ :label="$t('email')"
16
+ :placeholder="$t('email')"
17
+ hide-label
18
+ :error="error.email"
19
+ type="email"
20
+ inputmode="email"
21
+ enterkeyhint="send"
22
+ autocomplete="email"
23
+ @update:error="(val: boolean) => error.email = val"
24
+ @enter="submit"
22
25
  />
23
26
 
24
- <UiBtn :disabled="loading"
25
- class="auth-recovery__button"
26
- wide
27
- size="l"
28
- theme="primary"
29
- @click="submit"
27
+ <UiBtn
28
+ :disabled="loading"
29
+ class="auth-recovery__button"
30
+ wide
31
+ size="l"
32
+ theme="primary"
33
+ @click="submit"
30
34
  >{{ t('auth.get_recovery') }}
31
35
  </UiBtn>
32
- <button class="auth-recovery__login"
33
- type="button"
34
- @click="onLoginClick"
36
+ <button
37
+ class="auth-recovery__login"
38
+ type="button"
39
+ @click="onLoginClick"
35
40
  >{{ t('auth.back_to_login') }}
36
41
  </button>
37
42
  </div>
@@ -1,62 +1,69 @@
1
1
  <template>
2
2
  <ClientOnly>
3
- <div :class="{'_loading': loading}"
4
- class="auth-register"
3
+ <div
4
+ :class="{'_loading': loading}"
5
+ class="auth-register"
5
6
  >
6
7
  <AuthIcon class="auth-register__icon" />
7
- <p v-if="additionalText"
8
- class="auth-register__text"
8
+ <p
9
+ v-if="additionalText"
10
+ class="auth-register__text"
9
11
  >{{ t(additionalText) }}
10
12
  </p>
11
- <UiInput v-model="form.email"
12
- :placeholder="t('email')"
13
- :label="t('email')"
14
- hide-label
15
- :error="error.email"
16
- type="email"
17
- inputmode="email"
18
- enterkeyhint="next"
19
- autocomplete="email"
20
- @update:error="(val: boolean) => error.email = val"
21
- @enter="usernameRef?.focus()"
13
+ <UiInput
14
+ v-model="form.email"
15
+ :placeholder="t('email')"
16
+ :label="t('email')"
17
+ hide-label
18
+ :error="error.email"
19
+ type="email"
20
+ inputmode="email"
21
+ enterkeyhint="next"
22
+ autocomplete="email"
23
+ @update:error="(val: boolean) => error.email = val"
24
+ @enter="usernameRef?.focus()"
22
25
  />
23
- <UiInput ref="usernameRef"
24
- v-model="form.username"
25
- :label="t('login')"
26
- :placeholder="t('login')"
27
- hide-label
28
- :error="error.username"
29
- name="login-name"
30
- enterkeyhint="next"
31
- @update:error="(val: boolean) => error.username = val"
32
- @enter="passwordRef?.focus()"
26
+ <UiInput
27
+ ref="usernameRef"
28
+ v-model="form.username"
29
+ :label="t('login')"
30
+ :placeholder="t('login')"
31
+ hide-label
32
+ :error="error.username"
33
+ name="login-name"
34
+ enterkeyhint="next"
35
+ @update:error="(val: boolean) => error.username = val"
36
+ @enter="passwordRef?.focus()"
33
37
  />
34
- <UiInput ref="passwordRef"
35
- v-model="form.password_hash"
36
- :label="t('auth.password')"
37
- :placeholder="t('auth.password')"
38
- hide-label
39
- :error="error.password_hash"
40
- type="password"
41
- enterkeyhint="send"
42
- autocomplete="new-password"
43
- @update:error="(val: boolean) => error.password_hash = val"
44
- @enter="submit"
38
+ <UiInput
39
+ ref="passwordRef"
40
+ v-model="form.password_hash"
41
+ :label="t('auth.password')"
42
+ :placeholder="t('auth.password')"
43
+ hide-label
44
+ :error="error.password_hash"
45
+ type="password"
46
+ enterkeyhint="send"
47
+ autocomplete="new-password"
48
+ @update:error="(val: boolean) => error.password_hash = val"
49
+ @enter="submit"
45
50
  />
46
51
 
47
52
  <div class="auth-register__buttons">
48
- <UiBtn :disabled="loading"
49
- wide
50
- size="l"
51
- theme="primary"
52
- @click="submit"
53
+ <UiBtn
54
+ :disabled="loading"
55
+ wide
56
+ size="l"
57
+ theme="primary"
58
+ @click="submit"
53
59
  >{{ t('auth.sign_up') }}
54
60
  </UiBtn>
55
61
  <p class="auth-register__login">
56
62
  {{ t('login_text') }}
57
- <button class="auth-register__login-button"
58
- type="button"
59
- @click="onLoginClick"
63
+ <button
64
+ class="auth-register__login-button"
65
+ type="button"
66
+ @click="onLoginClick"
60
67
  >
61
68
  {{ t('auth.log_in') }}
62
69
  </button>
@@ -64,15 +71,17 @@
64
71
  </div>
65
72
 
66
73
  <p class="auth-register__agreement">{{ t('auth.agree_begin') }}
67
- <NuxtLink class="auth-register__agreement-link"
68
- to="/terms"
69
- target="_blank"
74
+ <NuxtLink
75
+ class="auth-register__agreement-link"
76
+ to="/terms"
77
+ target="_blank"
70
78
  >{{ t('auth.agree_terms') }}
71
79
  </NuxtLink>
72
80
  {{ t('auth.agree_and') }}
73
- <NuxtLink class="auth-register__agreement-link"
74
- to="/policy"
75
- target="_blank"
81
+ <NuxtLink
82
+ class="auth-register__agreement-link"
83
+ to="/policy"
84
+ target="_blank"
76
85
  >{{ t('auth.agree_policy') }}
77
86
  </NuxtLink>
78
87
  </p>
@@ -5,13 +5,15 @@
5
5
  <p class="card-category-mini__name">{{ card.title }}</p>
6
6
  <div class="card-category-mini__info">
7
7
  <span class="card-category-mini__detail">
8
- <UiIcon name="video-camera"
9
- size="14"
8
+ <UiIcon
9
+ name="video-camera"
10
+ size="14"
10
11
  />
11
12
  {{ $n(card.videosCount, 'compact') }}
12
13
  </span>
13
- <span v-if="$features.FeatureFollowEnabled"
14
- class="card-category-mini__detail"
14
+ <span
15
+ v-if="$features.FeatureFollowEnabled"
16
+ class="card-category-mini__detail"
15
17
  >{{ $n(8400, 'compact') }}</span>
16
18
  </div>
17
19
  </div>
@@ -1,35 +1,39 @@
1
1
  <!-- Карточка категории: обложка, название с флагом, счётчик видео -->
2
2
  <template>
3
- <NuxtLink :title="card.title"
4
- :to="localePath(`/categories/${convertString().toSlug(slug)}`)"
5
- class="card-category"
3
+ <NuxtLink
4
+ :title="card.title"
5
+ :to="localePath(`/categories/${convertString().toSlug(slug)}`)"
6
+ class="card-category"
6
7
  >
7
- <UiImg :alt="card.title"
8
- :src="currentImage"
9
- :loading="priority ? 'eager' : 'lazy'"
10
- :priority="priority"
11
- class="card-category__img"
12
- sizes="320px"
13
- width="320"
14
- height="180"
15
- @error="onImageError"
8
+ <UiImg
9
+ :alt="card.title"
10
+ :src="currentImage"
11
+ :loading="priority ? 'eager' : 'lazy'"
12
+ :priority="priority"
13
+ class="card-category__img"
14
+ sizes="320px"
15
+ width="320"
16
+ height="180"
17
+ @error="onImageError"
16
18
  />
17
19
  <div class="card-category__wrapper">
18
20
  <div class="card-category__wrapper-header">
19
21
  <span class="card-category__title">
20
22
  {{ card.title }}
21
- <img v-if="card.icon"
22
- :src="`/icons/flags/${card.icon}.svg`"
23
- :alt="card.icon"
24
- class="card-category__icon"
25
- width="17"
26
- height="17"
27
- loading="lazy"
23
+ <img
24
+ v-if="card.icon"
25
+ :src="`/icons/flags/${card.icon}.svg`"
26
+ :alt="card.icon"
27
+ class="card-category__icon"
28
+ width="17"
29
+ height="17"
30
+ loading="lazy"
28
31
  >
29
32
  </span>
30
33
  <span class="card-category__count">
31
- <UiIcon name="video-camera"
32
- size="14"
34
+ <UiIcon
35
+ name="video-camera"
36
+ size="14"
33
37
  />
34
38
  {{ $n(card.videosCount, 'compact') }}
35
39
  </span>
@@ -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>