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.
- package/components/adv/native-banner.vue +22 -17
- package/components/adv/native-bottom.vue +8 -6
- package/components/adv/native-player.vue +8 -6
- package/components/adv/ntv.vue +4 -3
- package/components/auth/icon.vue +4 -3
- package/components/auth/login.vue +39 -33
- package/components/auth/popup.vue +30 -24
- package/components/auth/recovery.vue +29 -24
- package/components/auth/register.vue +59 -50
- package/components/card/category-mini.vue +6 -4
- package/components/card/category.vue +25 -21
- package/components/card/channel-mini.vue +17 -13
- package/components/card/channel.vue +36 -29
- package/components/card/model-mini.vue +24 -19
- package/components/card/model.vue +43 -33
- package/components/card/playlist-mini.vue +19 -16
- package/components/card/playlist.vue +97 -73
- package/components/card/round.vue +16 -13
- package/components/card/video/dropdown.vue +55 -41
- package/components/card/video/index.vue +99 -81
- package/components/card/video/mini.vue +19 -15
- package/components/card/video/preview.vue +7 -6
- package/components/category/by-letter.vue +4 -3
- package/components/category/group.vue +18 -13
- package/components/category/letter-groups.vue +4 -3
- package/components/category/list.vue +19 -16
- package/components/category/nav.vue +15 -12
- package/components/filter/btn.vue +13 -10
- package/components/filter/chips.vue +8 -7
- package/components/filter/main.vue +27 -23
- package/components/filter/model-field.vue +43 -38
- package/components/filter/model.vue +33 -28
- package/components/filter/page.vue +53 -43
- package/components/filter/popup.vue +75 -60
- package/components/filter/selects.vue +63 -49
- package/components/filter/slider.vue +23 -20
- package/components/filter/videos-chips.vue +3 -2
- package/components/grid/categories.vue +5 -4
- package/components/grid/channels.vue +9 -7
- package/components/grid/models.vue +10 -8
- package/components/grid/playlists.vue +6 -5
- package/components/grid/videos.vue +35 -31
- package/components/info/grid.vue +43 -34
- package/components/info/main.vue +94 -71
- package/components/info/socials.vue +13 -11
- package/components/layout/burger-item.vue +44 -36
- package/components/layout/burger.vue +45 -35
- package/components/layout/cookie.vue +14 -11
- package/components/layout/extra-links.vue +6 -5
- package/components/layout/footer-language.vue +35 -28
- package/components/layout/header-user.vue +66 -51
- package/components/layout/header.vue +55 -42
- package/components/layout/language.vue +67 -54
- package/components/layout/logo.vue +11 -9
- package/components/layout/nav.vue +36 -29
- package/components/layout/skip-link.vue +3 -2
- package/components/player/aside-videos.vue +10 -8
- package/components/player/autoplay.vue +7 -5
- package/components/player/channel.vue +25 -19
- package/components/player/core.vue +11 -10
- package/components/player/follow.vue +17 -13
- package/components/player/info.vue +9 -6
- package/components/player/interface.vue +50 -38
- package/components/player/like.vue +32 -24
- package/components/player/main.vue +12 -10
- package/components/player/playlist.vue +79 -61
- package/components/player/sponsored.vue +20 -16
- package/components/playlist/add.vue +89 -71
- package/components/playlist/delete-video.vue +23 -18
- package/components/playlist/edit.vue +64 -49
- package/components/playlist/input.vue +32 -24
- package/components/playlist/main.vue +21 -18
- package/components/playlist/private-toggle.vue +4 -3
- package/components/profile/delete.vue +7 -6
- package/components/profile/guest.vue +10 -7
- package/components/profile/password.vue +25 -22
- package/components/profile/setup.vue +88 -71
- package/components/report/main.vue +89 -71
- package/components/search/input.vue +37 -31
- package/components/search/item.vue +22 -18
- package/components/search/main.vue +34 -26
- package/components/search/result.vue +72 -57
- package/components/section/categories-island.server.vue +7 -5
- package/components/section/categories.vue +4 -3
- package/components/section/models.vue +4 -3
- package/components/section/nav-links.vue +8 -7
- package/components/section/seo-text.vue +9 -6
- package/components/section/swiper-cards.vue +19 -14
- package/components/section/toolbar.vue +26 -20
- package/components/share/main.vue +32 -26
- package/components/ui/avatar.vue +10 -8
- package/components/ui/breadcrumbs.vue +33 -25
- package/components/ui/btn.vue +13 -12
- package/components/ui/checkbox.vue +21 -17
- package/components/ui/chips.vue +33 -29
- package/components/ui/count.vue +4 -3
- package/components/ui/dropdown.vue +42 -34
- package/components/ui/empty-state.vue +11 -9
- package/components/ui/expand-row.vue +34 -28
- package/components/ui/full-descr.vue +6 -4
- package/components/ui/icon.vue +4 -3
- package/components/ui/img.vue +11 -10
- package/components/ui/input.vue +75 -66
- package/components/ui/label.vue +4 -3
- package/components/ui/link.vue +20 -18
- package/components/ui/notification.vue +22 -17
- package/components/ui/pagination.vue +89 -76
- package/components/ui/popup.vue +39 -30
- package/components/ui/radio.vue +17 -14
- package/components/ui/section-title.vue +20 -15
- package/components/ui/segmented.vue +19 -15
- package/components/ui/select.vue +44 -35
- package/components/ui/slider.vue +16 -13
- package/components/ui/snackbar.vue +7 -5
- package/components/ui/swiper.vue +32 -24
- package/components/ui/toggle.vue +17 -14
- package/components/ui/tooltip.vue +15 -12
- package/components/view/model-videos.vue +71 -57
- package/components/view/models.vue +71 -57
- package/components/view/video.vue +64 -51
- package/components/view/videos.vue +56 -46
- package/package.json +1 -1
|
@@ -1,37 +1,41 @@
|
|
|
1
1
|
<!-- Главный контейнер фильтра видео: синхронизация с query и применение фильтров -->
|
|
2
2
|
<template>
|
|
3
3
|
<div class="filter-main">
|
|
4
|
-
<FilterBtn
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
<FilterBtn
|
|
5
|
+
v-model="filterOpen"
|
|
6
|
+
:count="filterCount"
|
|
7
|
+
:theme="buttonTheme"
|
|
8
|
+
:size="buttonSize"
|
|
8
9
|
/>
|
|
9
10
|
|
|
10
11
|
<transition>
|
|
11
|
-
<LazyFilterPopup
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
12
|
+
<LazyFilterPopup
|
|
13
|
+
v-if="filterOpen"
|
|
14
|
+
v-model="filterOpen"
|
|
15
|
+
:title="$t('filter')"
|
|
16
|
+
:active-count="activeCount"
|
|
17
|
+
:active-chips="activeChips"
|
|
18
|
+
:quick="quickFields"
|
|
19
|
+
:groups="groupItems"
|
|
20
|
+
:loading="!scheme.length"
|
|
21
|
+
@chip-click="onChipClick"
|
|
22
|
+
@field-update="onFieldUpdate"
|
|
21
23
|
>
|
|
22
24
|
<template #footer>
|
|
23
25
|
<div class="filter-main__footer-buttons">
|
|
24
|
-
<UiBtn
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
<UiBtn
|
|
27
|
+
:disabled="!isFiltered"
|
|
28
|
+
theme="secondary"
|
|
29
|
+
wide
|
|
30
|
+
size="l"
|
|
31
|
+
@click="reset"
|
|
29
32
|
>{{ $t('reset_all') }}
|
|
30
33
|
</UiBtn>
|
|
31
|
-
<UiBtn
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
<UiBtn
|
|
35
|
+
wide
|
|
36
|
+
size="l"
|
|
37
|
+
theme="primary"
|
|
38
|
+
@click="saveResult"
|
|
35
39
|
>{{ $t('apply') }}{{ activeCount ? ` (${activeCount})` : '' }}
|
|
36
40
|
</UiBtn>
|
|
37
41
|
</div>
|
|
@@ -1,49 +1,54 @@
|
|
|
1
1
|
<!-- Одно поле фильтра моделей (слайдер/селект/радио) с поддержкой единиц роста -->
|
|
2
2
|
<template>
|
|
3
|
-
<FilterSlider
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
<FilterSlider
|
|
4
|
+
v-if="field.kind === 'range'"
|
|
5
|
+
:item="field"
|
|
6
|
+
:group-name="field.group.name"
|
|
7
|
+
:index="index"
|
|
8
|
+
:query="pendingQuery"
|
|
9
|
+
:icon="(field as any).icon"
|
|
10
|
+
class="filter-model-field__slider"
|
|
11
|
+
icon-prefix="models"
|
|
12
|
+
@update:query="$emit('update:pending-query', $event)"
|
|
12
13
|
>
|
|
13
|
-
<template
|
|
14
|
-
|
|
14
|
+
<template
|
|
15
|
+
v-if="isHeight"
|
|
16
|
+
#title-append
|
|
15
17
|
>
|
|
16
|
-
<UiSegmented
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
<UiSegmented
|
|
19
|
+
:class="{'_hidden': !field.show_on_form}"
|
|
20
|
+
:items="unitItems"
|
|
21
|
+
:model-value="units"
|
|
22
|
+
class="filter-model-field__units"
|
|
23
|
+
small
|
|
24
|
+
@update:model-value="$emit('update:units', $event)"
|
|
22
25
|
/>
|
|
23
26
|
</template>
|
|
24
27
|
</FilterSlider>
|
|
25
|
-
<UiSelect
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
<UiSelect
|
|
29
|
+
v-else-if="field.kind === 'select'"
|
|
30
|
+
:class="{'_hidden': !field.show_on_form}"
|
|
31
|
+
:name="field.name"
|
|
32
|
+
:model-value="currentValue"
|
|
33
|
+
:items="selectItems"
|
|
34
|
+
:active="isActive"
|
|
35
|
+
:label="field.title"
|
|
36
|
+
:label-icon="(field as any).icon ? { icon: (field as any).icon, prefix: 'models' } : undefined"
|
|
37
|
+
class="filter-model-field__select"
|
|
38
|
+
size="s"
|
|
39
|
+
is-first-placeholder
|
|
40
|
+
@update:model-value="onUpdate"
|
|
37
41
|
/>
|
|
38
|
-
<UiSegmented
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
<UiSegmented
|
|
43
|
+
v-else-if="field.kind === 'radio'"
|
|
44
|
+
:class="{'_hidden': !field.show_on_form}"
|
|
45
|
+
:items="radioItems"
|
|
46
|
+
:title="field.title"
|
|
47
|
+
:icon="(field as any).icon"
|
|
48
|
+
:model-value="currentValue"
|
|
49
|
+
class="filter-model-field__radio"
|
|
50
|
+
icon-prefix="models"
|
|
51
|
+
@update:model-value="onUpdate"
|
|
47
52
|
/>
|
|
48
53
|
</template>
|
|
49
54
|
|
|
@@ -1,45 +1,50 @@
|
|
|
1
1
|
<!-- Контейнер фильтра моделей с отложенным применением (pending) перед навигацией -->
|
|
2
2
|
<template>
|
|
3
3
|
<div class="filter-model">
|
|
4
|
-
<FilterChips
|
|
5
|
-
|
|
4
|
+
<FilterChips
|
|
5
|
+
:items="chipsItems"
|
|
6
|
+
@click="onChipsClick"
|
|
6
7
|
/>
|
|
7
8
|
<transition appear>
|
|
8
|
-
<FilterPopup
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
<FilterPopup
|
|
10
|
+
v-model="model"
|
|
11
|
+
:title="t('filter')"
|
|
12
|
+
:active-count="pendingChipsItems.length"
|
|
13
|
+
:active-chips="pendingChipsItems"
|
|
14
|
+
:quick="quickFields"
|
|
15
|
+
:groups="groupItems"
|
|
16
|
+
models-page
|
|
17
|
+
:loading="status === 'pending'"
|
|
18
|
+
@chip-click="onPendingChipsClick"
|
|
19
|
+
@field-update="onFieldUpdate"
|
|
18
20
|
>
|
|
19
21
|
<template #field="{ field, index }">
|
|
20
|
-
<FilterModelField
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
<FilterModelField
|
|
23
|
+
:field="field as IModelFilter"
|
|
24
|
+
:index="index"
|
|
25
|
+
:pending-query="pendingQuery"
|
|
26
|
+
:units="units"
|
|
27
|
+
:unit-items="unitItems"
|
|
28
|
+
@update:pending-query="onQueryUpdate"
|
|
29
|
+
@update:units="units = $event"
|
|
27
30
|
/>
|
|
28
31
|
</template>
|
|
29
32
|
|
|
30
33
|
<template #footer>
|
|
31
34
|
<div class="filter-model__footer-buttons">
|
|
32
|
-
<UiBtn
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
<UiBtn
|
|
36
|
+
wide
|
|
37
|
+
:disabled="!isPendingFiltered"
|
|
38
|
+
size="l"
|
|
39
|
+
theme="secondary"
|
|
40
|
+
@click="onResetClick"
|
|
37
41
|
>{{ t('reset_all') }}
|
|
38
42
|
</UiBtn>
|
|
39
|
-
<UiBtn
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
<UiBtn
|
|
44
|
+
wide
|
|
45
|
+
size="l"
|
|
46
|
+
theme="primary"
|
|
47
|
+
@click="onApplyClick"
|
|
43
48
|
>{{ t('apply') }}{{ pendingChipsItems.length ? ` (${pendingChipsItems.length})` : '' }}
|
|
44
49
|
</UiBtn>
|
|
45
50
|
</div>
|
|
@@ -2,65 +2,75 @@
|
|
|
2
2
|
<template>
|
|
3
3
|
<div class="filter-page">
|
|
4
4
|
<div class="filter-page__items-wrapper">
|
|
5
|
-
<h2
|
|
6
|
-
|
|
5
|
+
<h2
|
|
6
|
+
v-if="title"
|
|
7
|
+
class="filter-page__title"
|
|
7
8
|
>{{ title }}
|
|
8
9
|
</h2>
|
|
9
|
-
<div
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
<div
|
|
11
|
+
v-for="(group, index) in groups"
|
|
12
|
+
:key="`filter-group-${index}`"
|
|
13
|
+
:class="{'--short': group.name === 'tags'}"
|
|
14
|
+
class="filter-page__group"
|
|
13
15
|
>
|
|
14
|
-
<div
|
|
15
|
-
|
|
16
|
+
<div
|
|
17
|
+
v-if="filters.length > 0"
|
|
18
|
+
class="filter-page__group-header"
|
|
16
19
|
>
|
|
17
20
|
<span class="filter-page__group-title">
|
|
18
21
|
{{ group?.title }}
|
|
19
22
|
</span>
|
|
20
|
-
<UiSegmented
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
<UiSegmented
|
|
24
|
+
v-if="group?.name === 'physical'"
|
|
25
|
+
:items="unitItems"
|
|
26
|
+
:model-value="units"
|
|
27
|
+
small
|
|
28
|
+
@update:model-value="units = $event"
|
|
25
29
|
/>
|
|
26
30
|
</div>
|
|
27
|
-
<div
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
<div
|
|
32
|
+
v-if="getGroupSliders(group?.name).length > 1"
|
|
33
|
+
:style="{ '--slider-count': getGroupSliders(group?.name).length }"
|
|
34
|
+
class="filter-page__sliders"
|
|
30
35
|
>
|
|
31
|
-
<FilterSlider
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
<FilterSlider
|
|
37
|
+
v-for="(item, subIndex) in getGroupSliders(group?.name)"
|
|
38
|
+
:key="`slider-${subIndex}`"
|
|
39
|
+
:item="item"
|
|
40
|
+
:group-name="item.group.name"
|
|
41
|
+
:index="subIndex"
|
|
36
42
|
/>
|
|
37
43
|
</div>
|
|
38
44
|
<div class="filter-page__items">
|
|
39
|
-
<template
|
|
40
|
-
|
|
45
|
+
<template
|
|
46
|
+
v-for="(item, subIndex) in filters"
|
|
47
|
+
:key="`model-filter-${subIndex}`"
|
|
41
48
|
>
|
|
42
|
-
<FilterSlider
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
<FilterSlider
|
|
50
|
+
v-if="(item.kind === 'range') && (item.group.name === group?.name) && !hiddenByUnits.has(item.name) && getGroupSliders(group?.name).length === 1"
|
|
51
|
+
:item="item"
|
|
52
|
+
:group-name="item.group.name"
|
|
53
|
+
:index="subIndex"
|
|
54
|
+
class="filter-page__slider"
|
|
47
55
|
/>
|
|
48
|
-
<UiSelect
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
<UiSelect
|
|
57
|
+
v-if="(item.kind === 'select') && (item.group.name === group?.name) && !hiddenByUnits.has(item.name)"
|
|
58
|
+
:name="item.name"
|
|
59
|
+
:model-value="getValue(item.name)"
|
|
60
|
+
:items="selectItems(item)"
|
|
61
|
+
:active="isActiveSelect(item.name)"
|
|
62
|
+
:label="item.title"
|
|
63
|
+
class="filter-page__select"
|
|
64
|
+
size="s"
|
|
65
|
+
@update:model-value="val => updateFilter(item.name, val)"
|
|
57
66
|
/>
|
|
58
|
-
<UiSegmented
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
<UiSegmented
|
|
68
|
+
v-if="(item.kind === 'radio') && (item.group.name === group?.name)"
|
|
69
|
+
:items="getRadioItems(item.options)"
|
|
70
|
+
:title="item.title"
|
|
71
|
+
:model-value="getValue(item.name)"
|
|
72
|
+
class="filter-page__radio"
|
|
73
|
+
@update:model-value="val => updateFilter(item.name, val)"
|
|
64
74
|
/>
|
|
65
75
|
</template>
|
|
66
76
|
</div>
|
|
@@ -1,102 +1,117 @@
|
|
|
1
1
|
<!-- Модалка фильтра (видео и модели): вкладки групп + быстрые фильтры -->
|
|
2
2
|
<template>
|
|
3
|
-
<UiPopup
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
<UiPopup
|
|
4
|
+
v-if="model"
|
|
5
|
+
v-model="model"
|
|
6
|
+
drawer
|
|
7
|
+
class="filter-popup"
|
|
7
8
|
>
|
|
8
9
|
<template #title>
|
|
9
10
|
<div class="filter-popup__title-wrapper">
|
|
10
11
|
{{ title ?? t('filter') }}
|
|
11
|
-
<span
|
|
12
|
-
|
|
12
|
+
<span
|
|
13
|
+
v-if="activeCount"
|
|
14
|
+
class="filter-popup__active"
|
|
13
15
|
>{{ t('filter_popup.active_count', { count: activeCount }) }}</span>
|
|
14
16
|
</div>
|
|
15
17
|
</template>
|
|
16
18
|
|
|
17
|
-
<div
|
|
18
|
-
|
|
19
|
+
<div
|
|
20
|
+
:class="{ '_loading': loading }"
|
|
21
|
+
class="filter-popup__content"
|
|
19
22
|
>
|
|
20
|
-
<div
|
|
21
|
-
|
|
23
|
+
<div
|
|
24
|
+
v-if="activeChips && activeChips.length > 0"
|
|
25
|
+
class="filter-popup__active-filters"
|
|
22
26
|
>
|
|
23
27
|
<span class="filter-popup__active-filters-title">{{ t('filter_popup.active_title') }}</span>
|
|
24
28
|
<div class="filter-popup__active-chips">
|
|
25
|
-
<UiChips
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
<UiChips
|
|
30
|
+
v-for="(chip, index) in activeChips"
|
|
31
|
+
:key="`s-filter-popup-active-${index}`"
|
|
32
|
+
:index="`s-filter-popup-chips-${index}`"
|
|
33
|
+
:item="chip"
|
|
34
|
+
class="filter-popup__chips"
|
|
35
|
+
with-close
|
|
36
|
+
@click="$emit('chip-click', chip)"
|
|
32
37
|
/>
|
|
33
38
|
</div>
|
|
34
39
|
</div>
|
|
35
40
|
|
|
36
|
-
<div
|
|
37
|
-
|
|
41
|
+
<div
|
|
42
|
+
v-if="quick && quick.length > 0"
|
|
43
|
+
class="filter-popup__quick"
|
|
38
44
|
>
|
|
39
45
|
<span class="filter-popup__quick-title">{{ t('filter_popup.quick_title') }}</span>
|
|
40
46
|
<div class="filter-popup__grid">
|
|
41
|
-
<template
|
|
42
|
-
|
|
47
|
+
<template
|
|
48
|
+
v-for="(item, index) in quick"
|
|
49
|
+
:key="`quick-${index}`"
|
|
43
50
|
>
|
|
44
|
-
<slot
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
<slot
|
|
52
|
+
:item="item"
|
|
53
|
+
:index="index"
|
|
54
|
+
name="quick-field"
|
|
47
55
|
>
|
|
48
|
-
<UiSelect
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
<UiSelect
|
|
57
|
+
:name="(item as any).name"
|
|
58
|
+
:model-value="(item as any).value"
|
|
59
|
+
:items="(item as any).items"
|
|
60
|
+
:is-first-placeholder="modelsPage"
|
|
61
|
+
:active="(item as any).active"
|
|
62
|
+
:label="(item as any).label ?? (item as any).title"
|
|
63
|
+
:label-icon="(item as any).icon ? { icon: (item as any).icon, prefix: (item as any).iconPrefix ?? (modelsPage ? 'models' : 'categories') } : undefined"
|
|
64
|
+
:placeholder="(item as any).placeholder"
|
|
65
|
+
separator-before="unspecified"
|
|
66
|
+
class="filter-popup__select"
|
|
67
|
+
size="s"
|
|
68
|
+
@update:model-value="val => $emit('field-update', { name: (item as any).name, value: val })"
|
|
60
69
|
/>
|
|
61
70
|
</slot>
|
|
62
71
|
</template>
|
|
63
72
|
</div>
|
|
64
73
|
</div>
|
|
65
74
|
|
|
66
|
-
<details
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
<details
|
|
76
|
+
v-for="(group, groupIndex) in groups"
|
|
77
|
+
:key="`group-${groupIndex}`"
|
|
78
|
+
class="filter-popup__group"
|
|
69
79
|
>
|
|
70
80
|
<summary class="filter-popup__summary">
|
|
71
|
-
<UiIcon
|
|
72
|
-
|
|
73
|
-
|
|
81
|
+
<UiIcon
|
|
82
|
+
name="angle-right"
|
|
83
|
+
size="16"
|
|
84
|
+
class="filter-popup__summary-arrow"
|
|
74
85
|
/>
|
|
75
86
|
<span class="filter-popup__summary-title">{{ group.title }}</span>
|
|
76
87
|
<span class="filter-popup__summary-count">{{ t('filter_popup.fields', { count: group.count ?? group.fields.length }) }}</span>
|
|
77
|
-
<span
|
|
78
|
-
|
|
88
|
+
<span
|
|
89
|
+
v-if="group.description"
|
|
90
|
+
class="filter-popup__summary-description"
|
|
79
91
|
>{{ group.description }}</span>
|
|
80
92
|
</summary>
|
|
81
93
|
<div class="filter-popup__group-content">
|
|
82
|
-
<template
|
|
83
|
-
|
|
94
|
+
<template
|
|
95
|
+
v-for="(field, fieldIndex) in group.fields"
|
|
96
|
+
:key="`field-${groupIndex}-${fieldIndex}`"
|
|
84
97
|
>
|
|
85
|
-
<slot
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
98
|
+
<slot
|
|
99
|
+
:field="field"
|
|
100
|
+
:group="group"
|
|
101
|
+
:index="fieldIndex"
|
|
102
|
+
name="field"
|
|
89
103
|
>
|
|
90
|
-
<UiSelect
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
104
|
+
<UiSelect
|
|
105
|
+
:name="(field as any).name"
|
|
106
|
+
:model-value="(field as any).value"
|
|
107
|
+
:items="(field as any).items"
|
|
108
|
+
:active="(field as any).active"
|
|
109
|
+
:label="(field as any).label ?? (field as any).title"
|
|
110
|
+
:label-icon="(field as any).icon ? { icon: (field as any).icon, prefix: (field as any).iconPrefix ?? (modelsPage ? 'models' : 'categories') } : undefined"
|
|
111
|
+
:placeholder="(field as any).placeholder"
|
|
112
|
+
class="filter-popup__select"
|
|
113
|
+
size="s"
|
|
114
|
+
@update:model-value="val => $emit('field-update', { name: (field as any).name, value: val })"
|
|
100
115
|
/>
|
|
101
116
|
</slot>
|
|
102
117
|
</template>
|