pukaad-ui-lib 1.211.0 → 1.212.2
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/dist/module.json +1 -1
- package/dist/runtime/components/card/card-place-detail.d.vue.ts +22 -3
- package/dist/runtime/components/card/card-place-detail.vue +52 -83
- package/dist/runtime/components/card/card-place-detail.vue.d.ts +22 -3
- package/dist/runtime/components/card/card-reaction.vue +3 -3
- package/dist/runtime/components/card/card-review.d.vue.ts +4 -0
- package/dist/runtime/components/card/card-review.vue +21 -34
- package/dist/runtime/components/card/card-review.vue.d.ts +4 -0
- package/dist/runtime/components/carousel.d.vue.ts +2 -19
- package/dist/runtime/components/carousel.vue +42 -52
- package/dist/runtime/components/carousel.vue.d.ts +2 -19
- package/dist/runtime/components/display/display-image-place.d.vue.ts +12 -1
- package/dist/runtime/components/display/display-image-place.vue +102 -4
- package/dist/runtime/components/display/display-image-place.vue.d.ts +12 -1
- package/dist/runtime/components/display/display-image-review.vue +8 -12
- package/dist/runtime/components/display/display-rating-summary.d.vue.ts +17 -0
- package/dist/runtime/components/display/display-rating-summary.vue +55 -0
- package/dist/runtime/components/display/display-rating-summary.vue.d.ts +17 -0
- package/dist/runtime/components/image/image-cropper.d.vue.ts +1 -1
- package/dist/runtime/components/image/image-cropper.vue.d.ts +1 -1
- package/dist/runtime/components/input/input-file.d.vue.ts +1 -1
- package/dist/runtime/components/input/input-file.vue.d.ts +1 -1
- package/dist/runtime/components/input/input-password.d.vue.ts +1 -1
- package/dist/runtime/components/input/input-password.vue.d.ts +1 -1
- package/dist/runtime/components/input/input-radio.d.vue.ts +1 -1
- package/dist/runtime/components/input/input-radio.vue.d.ts +1 -1
- package/dist/runtime/components/input/input-slider.d.vue.ts +1 -1
- package/dist/runtime/components/input/input-slider.vue.d.ts +1 -1
- package/dist/runtime/components/modal/modal-media-view.d.vue.ts +21 -0
- package/dist/runtime/components/modal/modal-media-view.vue +23 -0
- package/dist/runtime/components/modal/modal-media-view.vue.d.ts +21 -0
- package/dist/runtime/components/modal/modal-password-confirmed.d.vue.ts +1 -1
- package/dist/runtime/components/modal/modal-password-confirmed.vue.d.ts +1 -1
- package/dist/runtime/components/modal/modal-password-verify.d.vue.ts +1 -1
- package/dist/runtime/components/modal/modal-password-verify.vue.d.ts +1 -1
- package/dist/runtime/components/modal/modal.d.vue.ts +2 -0
- package/dist/runtime/components/modal/modal.vue +6 -4
- package/dist/runtime/components/modal/modal.vue.d.ts +2 -0
- package/dist/runtime/components/ui/carousel/CarouselContent.vue +1 -1
- package/dist/runtime/components/ui/carousel/CarouselNext.vue +3 -3
- package/dist/runtime/components/ui/carousel/CarouselPrevious.vue +3 -3
- package/dist/runtime/components/ui/dialog/DialogContent.d.vue.ts +2 -0
- package/dist/runtime/components/ui/dialog/DialogContent.vue +9 -3
- package/dist/runtime/components/ui/dialog/DialogContent.vue.d.ts +2 -0
- package/dist/runtime/components/ui/native-select/NativeSelectOptGroup.d.vue.ts +50 -50
- package/dist/runtime/components/ui/native-select/NativeSelectOptGroup.vue.d.ts +50 -50
- package/dist/runtime/components/ui/native-select/NativeSelectOption.d.vue.ts +52 -52
- package/dist/runtime/components/ui/native-select/NativeSelectOption.vue.d.ts +52 -52
- package/package.json +1 -1
- /package/dist/runtime/assets/svg/socials/{TikTok.svg → Tiktok.svg} +0 -0
- /package/dist/runtime/assets/svg/socials/{YouTube.svg → Youtube.svg} +0 -0
- /package/dist/runtime/assets/svg/socials/{Facebook.svg → facebook.svg} +0 -0
- /package/dist/runtime/assets/svg/socials/{Instagram.svg → instagram.svg} +0 -0
|
@@ -1,4 +1,102 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
<
|
|
1
|
+
<template>
|
|
2
|
+
<!-- Featured variant -->
|
|
3
|
+
<div v-if="variant === 'featured'" class="flex gap-[8px] h-[360px]">
|
|
4
|
+
<div v-if="photos[0]" class="w-[620px] shrink-0 rounded-[8px] overflow-hidden cursor-pointer"
|
|
5
|
+
@click="openLightbox('photo', 0)">
|
|
6
|
+
<Image :src="photos[0]" class="w-full h-full object-cover" width="auto" height="auto" />
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<div v-if="photos[1]" class="flex-1 rounded-[8px] overflow-hidden cursor-pointer" @click="openLightbox('photo', 1)">
|
|
10
|
+
<Image :src="photos[1]" class="w-full h-full object-cover" width="auto" height="auto" />
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="w-[306px] shrink-0 flex flex-col gap-[8px]">
|
|
14
|
+
<div v-if="photos[2]" class="flex-1 min-h-0 relative rounded-[8px] overflow-hidden cursor-pointer"
|
|
15
|
+
@click="openLightbox('photo', 2)">
|
|
16
|
+
<Image :src="photos[2]" class="w-full h-full object-cover" width="auto" height="auto" />
|
|
17
|
+
<div v-if="photos.length > 3"
|
|
18
|
+
class="absolute inset-0 bg-black/50 flex flex-col items-center justify-center text-white gap-[6px]">
|
|
19
|
+
<Icon name="fa6-solid:image" :size="42" />
|
|
20
|
+
<span class="font-body-large">รูปภาพ ({{ convertNumber(photos.length - 3) }})</span>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div v-if="videos[0]" class="flex-1 min-h-0 relative rounded-[8px] overflow-hidden cursor-pointer"
|
|
25
|
+
@click="openLightbox('video', 0)">
|
|
26
|
+
<Image :src="videos[0]" class="w-full h-full object-cover" width="auto" height="auto" />
|
|
27
|
+
<div class="absolute inset-0 bg-black/50 flex flex-col items-center justify-center text-white gap-[6px]">
|
|
28
|
+
<Icon name="fa6-solid:video" :size="42" />
|
|
29
|
+
<span class="font-body-large">วิดีโอ ({{ videos.length }})</span>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<!-- Album variant -->
|
|
36
|
+
<div v-else-if="variant === 'album'" class="grid grid-cols-5 gap-[10px] w-[700px]">
|
|
37
|
+
<!-- Row 1: photos[0..3] -->
|
|
38
|
+
<div v-for="(photo, i) in galleryRow1" :key="`g1-${i}`"
|
|
39
|
+
class="w-[132px] h-[132px] rounded-[8px] overflow-hidden cursor-pointer" @click="openLightbox('photo', i)">
|
|
40
|
+
<Image :src="photo" class="w-full h-full object-cover" width="auto" height="auto" />
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<!-- Row 1 col 5: image count overlay (v-show keeps grid slot) -->
|
|
44
|
+
<div v-show="galleryCountPhoto != null"
|
|
45
|
+
class="w-[132px] h-[132px] relative rounded-[8px] overflow-hidden cursor-pointer"
|
|
46
|
+
@click="openLightbox('photo', 8)">
|
|
47
|
+
<Image v-if="galleryCountPhoto" :src="galleryCountPhoto" class="w-full h-full object-cover" width="auto"
|
|
48
|
+
height="auto" />
|
|
49
|
+
<div class="absolute inset-0 bg-black/50 flex flex-col items-center justify-center text-white gap-[6px]">
|
|
50
|
+
<Icon name="fa6-solid:image" :size="35" />
|
|
51
|
+
<span class="font-label-medium">รูปภาพ ({{ convertNumber(photos.length - 8) }})</span>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<!-- Row 2: photos[4..7] -->
|
|
56
|
+
<div v-for="(photo, i) in galleryRow2" :key="`g2-${i}`"
|
|
57
|
+
class="w-[132px] h-[132px] rounded-[8px] overflow-hidden cursor-pointer" @click="openLightbox('photo', 4 + i)">
|
|
58
|
+
<Image :src="photo" class="w-full h-full object-cover" width="auto" height="auto" />
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<!-- Row 2 col 5: video overlay -->
|
|
62
|
+
<div v-if="videos[0]" class="w-[132px] h-[132px] relative rounded-[8px] overflow-hidden cursor-pointer"
|
|
63
|
+
@click="openLightbox('video', 0)">
|
|
64
|
+
<Image :src="videos[0]" class="w-full h-full object-cover" width="auto" height="auto" />
|
|
65
|
+
<div class="absolute inset-0 bg-black/50 flex flex-col items-center justify-center text-white gap-[6px]">
|
|
66
|
+
<Icon name="fa6-solid:video" :size="35" />
|
|
67
|
+
<span class="font-label-medium">วิดีโอ ({{ videos.length }})</span>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<!-- Lightbox modal -->
|
|
73
|
+
<ModalMediaView v-model="isMediaOpen" :items="mediaItems" :title="props.title" :start-index="mediaStartIndex" />
|
|
74
|
+
</template>
|
|
75
|
+
|
|
76
|
+
<script setup>
|
|
77
|
+
import { computed, ref } from "vue";
|
|
78
|
+
import { useConvert } from "../../composables/useConvert";
|
|
79
|
+
const { convertNumber } = useConvert();
|
|
80
|
+
const props = defineProps({
|
|
81
|
+
photos: { type: Array, required: false, default: () => [] },
|
|
82
|
+
videos: { type: Array, required: false, default: () => [] },
|
|
83
|
+
variant: { type: String, required: false, default: "featured" },
|
|
84
|
+
title: { type: String, required: false, default: "" }
|
|
85
|
+
});
|
|
86
|
+
const photos = computed(() => props.photos.filter(Boolean));
|
|
87
|
+
const videos = computed(() => props.videos.filter(Boolean));
|
|
88
|
+
const galleryRow1 = computed(() => photos.value.slice(0, 4));
|
|
89
|
+
const galleryRow2 = computed(() => photos.value.slice(4, 8));
|
|
90
|
+
const galleryCountPhoto = computed(
|
|
91
|
+
() => photos.value.length > 8 ? photos.value[8] ?? null : null
|
|
92
|
+
);
|
|
93
|
+
const isMediaOpen = ref(false);
|
|
94
|
+
const mediaType = ref("photo");
|
|
95
|
+
const mediaStartIndex = ref(0);
|
|
96
|
+
const mediaItems = computed(() => mediaType.value === "photo" ? photos.value : videos.value);
|
|
97
|
+
const openLightbox = (type, index) => {
|
|
98
|
+
mediaType.value = type;
|
|
99
|
+
mediaStartIndex.value = index;
|
|
100
|
+
isMediaOpen.value = true;
|
|
101
|
+
};
|
|
102
|
+
</script>
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
photos?: string[];
|
|
3
|
+
videos?: string[];
|
|
4
|
+
variant?: "featured" | "album";
|
|
5
|
+
title?: string;
|
|
6
|
+
};
|
|
7
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
8
|
+
title: string;
|
|
9
|
+
variant: "featured" | "album";
|
|
10
|
+
photos: string[];
|
|
11
|
+
videos: string[];
|
|
12
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
2
13
|
declare const _default: typeof __VLS_export;
|
|
3
14
|
export default _default;
|
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="inline-flex gap-[8px]">
|
|
3
|
-
<div
|
|
4
|
-
|
|
5
|
-
:key="i_img"
|
|
6
|
-
class="relative cursor-pointer"
|
|
7
|
-
@click="emit('select', i_img)"
|
|
8
|
-
>
|
|
3
|
+
<div v-for="(img, i_img) in props.items?.slice(0, props.limit)" :key="i_img" class="relative cursor-pointer"
|
|
4
|
+
@click="emit('select', i_img)">
|
|
9
5
|
<Image :src="img" :height="100" :width="100" class="rounded-[4px]" />
|
|
10
|
-
<div
|
|
11
|
-
|
|
12
|
-
class="
|
|
13
|
-
>
|
|
14
|
-
<div class="font-headline-medium">+{{ numberMore }}</div>
|
|
6
|
+
<div v-if="props.limit === i_img + 1"
|
|
7
|
+
class="absolute top-0 left-0 right-0 bottom-0 bg-black/50 flex justify-center items-center text-white rounded-[4px]">
|
|
8
|
+
<div class="font-headline-medium">+{{ convertNumber(numberMore ?? 0) }}</div>
|
|
15
9
|
</div>
|
|
16
10
|
</div>
|
|
17
11
|
</div>
|
|
@@ -19,10 +13,12 @@
|
|
|
19
13
|
|
|
20
14
|
<script setup>
|
|
21
15
|
import { computed } from "vue";
|
|
16
|
+
import { useConvert } from "../../composables/useConvert";
|
|
17
|
+
const { convertNumber } = useConvert();
|
|
22
18
|
const emit = defineEmits(["select"]);
|
|
23
19
|
const props = defineProps({
|
|
24
20
|
items: { type: Array, required: false },
|
|
25
|
-
limit: { type: Number, required: false, default:
|
|
21
|
+
limit: { type: Number, required: false, default: 6 }
|
|
26
22
|
});
|
|
27
23
|
const numberMore = computed(() => {
|
|
28
24
|
return props.items && props.items.slice(props.limit).length;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface RatingDistribution {
|
|
2
|
+
stars: number;
|
|
3
|
+
count: number;
|
|
4
|
+
}
|
|
5
|
+
export interface DisplayRatingSummaryProps {
|
|
6
|
+
rating?: number | string;
|
|
7
|
+
totalReviews?: number | string;
|
|
8
|
+
distribution?: RatingDistribution[];
|
|
9
|
+
badge?: number;
|
|
10
|
+
}
|
|
11
|
+
declare const __VLS_export: import("vue").DefineComponent<DisplayRatingSummaryProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DisplayRatingSummaryProps> & Readonly<{}>, {
|
|
12
|
+
rating: number | string;
|
|
13
|
+
totalReviews: number | string;
|
|
14
|
+
distribution: RatingDistribution[];
|
|
15
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
16
|
+
declare const _default: typeof __VLS_export;
|
|
17
|
+
export default _default;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex gap-[24px] items-center">
|
|
3
|
+
<!-- Left: คะแนนรวม -->
|
|
4
|
+
<div class="flex flex-col items-center text-primary flex-shrink-0 w-[100px]">
|
|
5
|
+
<div class="text-[56px] font-bold leading-none">
|
|
6
|
+
{{ Number(props.rating).toFixed(1) }}
|
|
7
|
+
</div>
|
|
8
|
+
<div class="font-body-large mt-[4px]">
|
|
9
|
+
{{ convertNumber(Number(props.totalReviews)) }} รีวิว
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<!-- Right: แถบการกระจายคะแนน -->
|
|
14
|
+
<div class="flex flex-col gap-[8px] flex-1">
|
|
15
|
+
<div v-for="(item, idx) in sortedDistribution" :key="item.stars" class="flex items-center gap-[12px]">
|
|
16
|
+
<!-- badge แสดงบน row แรก (5 ดาว) -->
|
|
17
|
+
<div class="relative flex-shrink-0">
|
|
18
|
+
<InputRating :size="16" readonly :model-value="item.stars" />
|
|
19
|
+
<div v-if="idx === 0 && props.badge != null"
|
|
20
|
+
class="absolute -top-[10px] -left-[10px] min-w-[22px] h-[22px] px-[4px] rounded-full bg-error flex items-center justify-center">
|
|
21
|
+
<span class="text-white text-[11px] font-bold leading-none">{{ props.badge }}</span>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<div class="flex-1 max-w-[260px]">
|
|
26
|
+
<ProgressBar :value="maxCount > 0 ? item.count / maxCount * 100 : 0" full-width :height="8"
|
|
27
|
+
color-active="#FBC02D" color-background="#E0E0E0" />
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<div class="text-gray font-body-large w-[72px]">
|
|
31
|
+
{{ convertNumber(item.count) }}
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<script setup>
|
|
39
|
+
import { computed } from "vue";
|
|
40
|
+
import { useConvert } from "../../composables/useConvert";
|
|
41
|
+
const { convertNumber } = useConvert();
|
|
42
|
+
const props = defineProps({
|
|
43
|
+
rating: { type: [Number, String], required: false, default: 0 },
|
|
44
|
+
totalReviews: { type: [Number, String], required: false, default: 0 },
|
|
45
|
+
distribution: { type: Array, required: false, default: () => [] },
|
|
46
|
+
badge: { type: Number, required: false }
|
|
47
|
+
});
|
|
48
|
+
const sortedDistribution = computed(
|
|
49
|
+
() => [...props.distribution].sort((a, b) => b.stars - a.stars)
|
|
50
|
+
);
|
|
51
|
+
const maxCount = computed(() => {
|
|
52
|
+
if (sortedDistribution.value.length === 0) return 1;
|
|
53
|
+
return Math.max(...sortedDistribution.value.map((item) => item.count));
|
|
54
|
+
});
|
|
55
|
+
</script>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface RatingDistribution {
|
|
2
|
+
stars: number;
|
|
3
|
+
count: number;
|
|
4
|
+
}
|
|
5
|
+
export interface DisplayRatingSummaryProps {
|
|
6
|
+
rating?: number | string;
|
|
7
|
+
totalReviews?: number | string;
|
|
8
|
+
distribution?: RatingDistribution[];
|
|
9
|
+
badge?: number;
|
|
10
|
+
}
|
|
11
|
+
declare const __VLS_export: import("vue").DefineComponent<DisplayRatingSummaryProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DisplayRatingSummaryProps> & Readonly<{}>, {
|
|
12
|
+
rating: number | string;
|
|
13
|
+
totalReviews: number | string;
|
|
14
|
+
distribution: RatingDistribution[];
|
|
15
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
16
|
+
declare const _default: typeof __VLS_export;
|
|
17
|
+
export default _default;
|
|
@@ -64,12 +64,12 @@ declare const __VLS_export: import("vue").DefineComponent<ImageCropperProps, {
|
|
|
64
64
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ImageCropperProps> & Readonly<{}>, {
|
|
65
65
|
src: string;
|
|
66
66
|
center: boolean;
|
|
67
|
-
modal: boolean;
|
|
68
67
|
responsive: boolean;
|
|
69
68
|
restore: boolean;
|
|
70
69
|
checkCrossOrigin: boolean;
|
|
71
70
|
checkOrientation: boolean;
|
|
72
71
|
crossorigin: "" | "anonymous" | "use-credentials";
|
|
72
|
+
modal: boolean;
|
|
73
73
|
guides: boolean;
|
|
74
74
|
highlight: boolean;
|
|
75
75
|
background: boolean;
|
|
@@ -64,12 +64,12 @@ declare const __VLS_export: import("vue").DefineComponent<ImageCropperProps, {
|
|
|
64
64
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ImageCropperProps> & Readonly<{}>, {
|
|
65
65
|
src: string;
|
|
66
66
|
center: boolean;
|
|
67
|
-
modal: boolean;
|
|
68
67
|
responsive: boolean;
|
|
69
68
|
restore: boolean;
|
|
70
69
|
checkCrossOrigin: boolean;
|
|
71
70
|
checkOrientation: boolean;
|
|
72
71
|
crossorigin: "" | "anonymous" | "use-credentials";
|
|
72
|
+
modal: boolean;
|
|
73
73
|
guides: boolean;
|
|
74
74
|
highlight: boolean;
|
|
75
75
|
background: boolean;
|
|
@@ -35,8 +35,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
35
35
|
fullHeight: boolean;
|
|
36
36
|
name: string;
|
|
37
37
|
limit: number;
|
|
38
|
-
accept: string;
|
|
39
38
|
disabledErrorMessage: boolean;
|
|
39
|
+
accept: string;
|
|
40
40
|
labelIcon: string;
|
|
41
41
|
disabledDrop: boolean;
|
|
42
42
|
column: boolean;
|
|
@@ -35,8 +35,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
35
35
|
fullHeight: boolean;
|
|
36
36
|
name: string;
|
|
37
37
|
limit: number;
|
|
38
|
-
accept: string;
|
|
39
38
|
disabledErrorMessage: boolean;
|
|
39
|
+
accept: string;
|
|
40
40
|
labelIcon: string;
|
|
41
41
|
disabledDrop: boolean;
|
|
42
42
|
column: boolean;
|
|
@@ -22,8 +22,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
22
22
|
}>, {
|
|
23
23
|
id: string;
|
|
24
24
|
name: string;
|
|
25
|
-
disabledForgotPassword: boolean;
|
|
26
25
|
new: boolean;
|
|
26
|
+
disabledForgotPassword: boolean;
|
|
27
27
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
28
28
|
declare const _default: typeof __VLS_export;
|
|
29
29
|
export default _default;
|
|
@@ -22,8 +22,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
22
22
|
}>, {
|
|
23
23
|
id: string;
|
|
24
24
|
name: string;
|
|
25
|
-
disabledForgotPassword: boolean;
|
|
26
25
|
new: boolean;
|
|
26
|
+
disabledForgotPassword: boolean;
|
|
27
27
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
28
28
|
declare const _default: typeof __VLS_export;
|
|
29
29
|
export default _default;
|
|
@@ -32,8 +32,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
32
32
|
size: number | string;
|
|
33
33
|
disabled: boolean;
|
|
34
34
|
items: import("@/types/components/input/input-radio").InputRadioItem[] | string[] | number[];
|
|
35
|
-
name: string;
|
|
36
35
|
item: string | number;
|
|
36
|
+
name: string;
|
|
37
37
|
columnGap: number | string;
|
|
38
38
|
disabledErrorMessage: boolean;
|
|
39
39
|
layout: "vertical" | "horizontal";
|
|
@@ -32,8 +32,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
32
32
|
size: number | string;
|
|
33
33
|
disabled: boolean;
|
|
34
34
|
items: import("@/types/components/input/input-radio").InputRadioItem[] | string[] | number[];
|
|
35
|
-
name: string;
|
|
36
35
|
item: string | number;
|
|
36
|
+
name: string;
|
|
37
37
|
columnGap: number | string;
|
|
38
38
|
disabledErrorMessage: boolean;
|
|
39
39
|
layout: "vertical" | "horizontal";
|
|
@@ -12,9 +12,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
12
12
|
label: string;
|
|
13
13
|
color: InputSliderColor;
|
|
14
14
|
fullWidth: boolean;
|
|
15
|
-
step: number;
|
|
16
15
|
max: number;
|
|
17
16
|
min: number;
|
|
17
|
+
step: number;
|
|
18
18
|
lineHeight: number | string;
|
|
19
19
|
appearance: boolean;
|
|
20
20
|
thumbSize: number | string;
|
|
@@ -12,9 +12,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
12
12
|
label: string;
|
|
13
13
|
color: InputSliderColor;
|
|
14
14
|
fullWidth: boolean;
|
|
15
|
-
step: number;
|
|
16
15
|
max: number;
|
|
17
16
|
min: number;
|
|
17
|
+
step: number;
|
|
18
18
|
lineHeight: number | string;
|
|
19
19
|
appearance: boolean;
|
|
20
20
|
thumbSize: number | string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ModalMediaViewProps {
|
|
2
|
+
items?: string[];
|
|
3
|
+
title?: string;
|
|
4
|
+
startIndex?: number;
|
|
5
|
+
}
|
|
6
|
+
type __VLS_Props = ModalMediaViewProps;
|
|
7
|
+
type __VLS_ModelProps = {
|
|
8
|
+
modelValue?: boolean;
|
|
9
|
+
};
|
|
10
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
11
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
12
|
+
"update:modelValue": (value: boolean) => any;
|
|
13
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
14
|
+
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
15
|
+
}>, {
|
|
16
|
+
title: string;
|
|
17
|
+
items: string[];
|
|
18
|
+
startIndex: number;
|
|
19
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
|
+
declare const _default: typeof __VLS_export;
|
|
21
|
+
export default _default;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<Modal v-model="isOpen" class="sm:max-w-[1280px]" disable-padding>
|
|
3
|
+
<template #header>
|
|
4
|
+
<ShadDialogTitle class="p-4">{{ props.title }}</ShadDialogTitle>
|
|
5
|
+
</template>
|
|
6
|
+
<div class="relative h-[824px] bg-black overflow-hidden">
|
|
7
|
+
<Carousel
|
|
8
|
+
:items="props.items"
|
|
9
|
+
:select-index="props.startIndex"
|
|
10
|
+
class="h-full"
|
|
11
|
+
/>
|
|
12
|
+
</div>
|
|
13
|
+
</Modal>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<script setup>
|
|
17
|
+
const props = defineProps({
|
|
18
|
+
items: { type: Array, required: false, default: () => [] },
|
|
19
|
+
title: { type: String, required: false, default: "" },
|
|
20
|
+
startIndex: { type: Number, required: false, default: 0 }
|
|
21
|
+
});
|
|
22
|
+
const isOpen = defineModel({ type: Boolean, ...{ default: false } });
|
|
23
|
+
</script>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ModalMediaViewProps {
|
|
2
|
+
items?: string[];
|
|
3
|
+
title?: string;
|
|
4
|
+
startIndex?: number;
|
|
5
|
+
}
|
|
6
|
+
type __VLS_Props = ModalMediaViewProps;
|
|
7
|
+
type __VLS_ModelProps = {
|
|
8
|
+
modelValue?: boolean;
|
|
9
|
+
};
|
|
10
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
11
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
12
|
+
"update:modelValue": (value: boolean) => any;
|
|
13
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
14
|
+
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
15
|
+
}>, {
|
|
16
|
+
title: string;
|
|
17
|
+
items: string[];
|
|
18
|
+
startIndex: number;
|
|
19
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
|
+
declare const _default: typeof __VLS_export;
|
|
21
|
+
export default _default;
|
|
@@ -24,8 +24,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
24
24
|
}) => any) | undefined;
|
|
25
25
|
}>, {
|
|
26
26
|
title: string;
|
|
27
|
-
confirmText: string;
|
|
28
27
|
disabledForgotPassword: boolean;
|
|
28
|
+
confirmText: string;
|
|
29
29
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
30
30
|
declare const _default: typeof __VLS_export;
|
|
31
31
|
export default _default;
|
|
@@ -24,8 +24,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
24
24
|
}) => any) | undefined;
|
|
25
25
|
}>, {
|
|
26
26
|
title: string;
|
|
27
|
-
confirmText: string;
|
|
28
27
|
disabledForgotPassword: boolean;
|
|
28
|
+
confirmText: string;
|
|
29
29
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
30
30
|
declare const _default: typeof __VLS_export;
|
|
31
31
|
export default _default;
|
|
@@ -28,8 +28,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
28
28
|
}>, {
|
|
29
29
|
title: string;
|
|
30
30
|
mode: "login" | "secure";
|
|
31
|
-
confirmText: string;
|
|
32
31
|
disabledForgotPassword: boolean;
|
|
32
|
+
confirmText: string;
|
|
33
33
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
34
34
|
declare const _default: typeof __VLS_export;
|
|
35
35
|
export default _default;
|
|
@@ -28,8 +28,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
28
28
|
}>, {
|
|
29
29
|
title: string;
|
|
30
30
|
mode: "login" | "secure";
|
|
31
|
-
confirmText: string;
|
|
32
31
|
disabledForgotPassword: boolean;
|
|
32
|
+
confirmText: string;
|
|
33
33
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
34
34
|
declare const _default: typeof __VLS_export;
|
|
35
35
|
export default _default;
|
|
@@ -8,6 +8,7 @@ export interface ModalProps {
|
|
|
8
8
|
loading?: boolean;
|
|
9
9
|
loadingText?: string;
|
|
10
10
|
contentMaxHeight?: number;
|
|
11
|
+
disablePadding?: boolean;
|
|
11
12
|
}
|
|
12
13
|
type __VLS_Props = ModalProps;
|
|
13
14
|
type __VLS_ModelProps = {
|
|
@@ -42,6 +43,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
42
43
|
}>, {
|
|
43
44
|
loading: boolean;
|
|
44
45
|
disabledCloseBtn: boolean;
|
|
46
|
+
disablePadding: boolean;
|
|
45
47
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
46
48
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
47
49
|
declare const _default: typeof __VLS_export;
|
|
@@ -3,19 +3,20 @@
|
|
|
3
3
|
<ShadDialogContent
|
|
4
4
|
:class="props.class"
|
|
5
5
|
:disabled-close-btn="props.disabledCloseBtn"
|
|
6
|
+
:no-padding="props.disablePadding"
|
|
6
7
|
v-slot="{ meta }"
|
|
7
8
|
@submit="onSubmit"
|
|
8
9
|
@close="onClose"
|
|
9
10
|
>
|
|
10
11
|
<Loading :loading="props.loading" :text="props.loadingText" />
|
|
11
|
-
<ShadDialogHeader>
|
|
12
|
+
<ShadDialogHeader :class="props.disablePadding ? 'bg-background' : ''">
|
|
12
13
|
<slot name="header">
|
|
13
14
|
<ShadDialogTitle>
|
|
14
15
|
<slot name="title">
|
|
15
16
|
{{ props.title }}
|
|
16
17
|
</slot>
|
|
17
18
|
</ShadDialogTitle>
|
|
18
|
-
<ShadDialogDescription>
|
|
19
|
+
<ShadDialogDescription v-if="props.description || $slots.description">
|
|
19
20
|
<slot name="description">
|
|
20
21
|
{{ props.description }}
|
|
21
22
|
</slot>
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
>
|
|
31
32
|
<slot name="default" :meta="meta" />
|
|
32
33
|
</div>
|
|
33
|
-
<ShadDialogFooter>
|
|
34
|
+
<ShadDialogFooter v-if="$slots.footer">
|
|
34
35
|
<slot name="footer" :meta="meta" />
|
|
35
36
|
</ShadDialogFooter>
|
|
36
37
|
</ShadDialogContent>
|
|
@@ -47,7 +48,8 @@ const props = defineProps({
|
|
|
47
48
|
disabledCloseBtn: { type: Boolean, required: false, default: false },
|
|
48
49
|
loading: { type: Boolean, required: false, default: false },
|
|
49
50
|
loadingText: { type: String, required: false },
|
|
50
|
-
contentMaxHeight: { type: Number, required: false }
|
|
51
|
+
contentMaxHeight: { type: Number, required: false },
|
|
52
|
+
disablePadding: { type: Boolean, required: false, default: false }
|
|
51
53
|
});
|
|
52
54
|
const isOpen = defineModel({ type: Boolean, ...{
|
|
53
55
|
default: false
|
|
@@ -8,6 +8,7 @@ export interface ModalProps {
|
|
|
8
8
|
loading?: boolean;
|
|
9
9
|
loadingText?: string;
|
|
10
10
|
contentMaxHeight?: number;
|
|
11
|
+
disablePadding?: boolean;
|
|
11
12
|
}
|
|
12
13
|
type __VLS_Props = ModalProps;
|
|
13
14
|
type __VLS_ModelProps = {
|
|
@@ -42,6 +43,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
42
43
|
}>, {
|
|
43
44
|
loading: boolean;
|
|
44
45
|
disabledCloseBtn: boolean;
|
|
46
|
+
disablePadding: boolean;
|
|
45
47
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
46
48
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
47
49
|
declare const _default: typeof __VLS_export;
|
|
@@ -3,7 +3,7 @@ import { cn } from "@/runtime/plugins/shadcn";
|
|
|
3
3
|
import { Button } from "@/runtime/components/ui/button";
|
|
4
4
|
import { useCarousel } from "./useCarousel";
|
|
5
5
|
const props = defineProps({
|
|
6
|
-
variant: { type: null, required: false, default: "
|
|
6
|
+
variant: { type: null, required: false, default: "ghost" },
|
|
7
7
|
size: { type: null, required: false, default: "icon" },
|
|
8
8
|
class: { type: null, required: false }
|
|
9
9
|
});
|
|
@@ -16,7 +16,7 @@ const { orientation, canScrollNext, scrollNext } = useCarousel();
|
|
|
16
16
|
:disabled="!canScrollNext"
|
|
17
17
|
:class="
|
|
18
18
|
cn(
|
|
19
|
-
'absolute size-8 rounded-full bg-
|
|
19
|
+
'absolute size-8 rounded-full bg-dark text-white flex items-center justify-center shrink-0 border-0',
|
|
20
20
|
orientation === 'horizontal' ? 'top-1/2 -right-12 -translate-y-1/2' : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',
|
|
21
21
|
props.class
|
|
22
22
|
)
|
|
@@ -26,7 +26,7 @@ const { orientation, canScrollNext, scrollNext } = useCarousel();
|
|
|
26
26
|
@click="scrollNext"
|
|
27
27
|
>
|
|
28
28
|
<slot>
|
|
29
|
-
<Icon name="lucide:chevron-right" />
|
|
29
|
+
<Icon name="lucide:chevron-right" class="text-white size-5" />
|
|
30
30
|
<span class="sr-only">Next Slide</span>
|
|
31
31
|
</slot>
|
|
32
32
|
</Button>
|
|
@@ -3,7 +3,7 @@ import { cn } from "@/runtime/plugins/shadcn";
|
|
|
3
3
|
import { Button } from "@/runtime/components/ui/button";
|
|
4
4
|
import { useCarousel } from "./useCarousel";
|
|
5
5
|
const props = defineProps({
|
|
6
|
-
variant: { type: null, required: false, default: "
|
|
6
|
+
variant: { type: null, required: false, default: "ghost" },
|
|
7
7
|
size: { type: null, required: false, default: "icon" },
|
|
8
8
|
class: { type: null, required: false }
|
|
9
9
|
});
|
|
@@ -16,7 +16,7 @@ const { orientation, canScrollPrev, scrollPrev } = useCarousel();
|
|
|
16
16
|
:disabled="!canScrollPrev"
|
|
17
17
|
:class="
|
|
18
18
|
cn(
|
|
19
|
-
'absolute size-8 rounded-full bg-
|
|
19
|
+
'absolute size-8 rounded-full bg-dark text-white flex items-center justify-center shrink-0 border-0',
|
|
20
20
|
orientation === 'horizontal' ? 'top-1/2 -left-12 -translate-y-1/2' : '-top-12 left-1/2 -translate-x-1/2 rotate-90',
|
|
21
21
|
props.class
|
|
22
22
|
)
|
|
@@ -26,7 +26,7 @@ const { orientation, canScrollPrev, scrollPrev } = useCarousel();
|
|
|
26
26
|
@click="scrollPrev"
|
|
27
27
|
>
|
|
28
28
|
<slot>
|
|
29
|
-
<Icon name="lucide:chevron-left" />
|
|
29
|
+
<Icon name="lucide:chevron-left" class="text-white size-5" />
|
|
30
30
|
<span class="sr-only">Previous Slide</span>
|
|
31
31
|
</slot>
|
|
32
32
|
</Button>
|
|
@@ -3,6 +3,7 @@ import type { HTMLAttributes } from "vue";
|
|
|
3
3
|
type __VLS_Props = DialogContentProps & {
|
|
4
4
|
class?: HTMLAttributes["class"];
|
|
5
5
|
disabledCloseBtn?: boolean;
|
|
6
|
+
noPadding?: boolean;
|
|
6
7
|
};
|
|
7
8
|
declare var __VLS_30: {
|
|
8
9
|
meta: any;
|
|
@@ -30,6 +31,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
30
31
|
onCloseAutoFocus?: ((event: Event) => any) | undefined;
|
|
31
32
|
}>, {
|
|
32
33
|
disabledCloseBtn: boolean;
|
|
34
|
+
noPadding: boolean;
|
|
33
35
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
34
36
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
35
37
|
declare const _default: typeof __VLS_export;
|