Compare commits

...

15 Commits

Author SHA1 Message Date
alsaze
a7fe00dc75 огрничение кол-ва тостов
All checks were successful
Deploy / build (push) Successful in 1m0s
2025-12-17 21:40:09 +03:00
alsaze
3fd4ef72c6 add PromotionModal.vue
All checks were successful
Deploy / build (push) Successful in 58s
2025-12-16 14:44:49 +03:00
alsaze
e90368fc9d add PromotionModal.vue
All checks were successful
Deploy / build (push) Successful in 58s
2025-12-16 14:41:52 +03:00
alsaze
dc9208485c add PromotionModal.vue
All checks were successful
Deploy / build (push) Successful in 59s
2025-12-16 14:09:13 +03:00
alsaze
2b276c0c16 add PromotionModal.vue
All checks were successful
Deploy / build (push) Successful in 1m2s
2025-12-16 13:56:22 +03:00
alsaze
62a319ca47 env update
All checks were successful
Deploy / build (push) Successful in 55s
2025-12-15 15:02:55 +03:00
alsaze
091956ade4 remove prisma db, replace Rental to AT Golden
All checks were successful
Deploy / build (push) Successful in 2m24s
2025-12-15 14:03:16 +03:00
alsaze
9fc8bfa94d add transport in useMock.ts
Some checks failed
Deploy / build (push) Failing after 22s
2025-12-14 22:16:38 +03:00
alsaze
486ef55349 add nedvizhimost in useMock.ts
All checks were successful
Deploy / build (push) Successful in 3m3s
2025-12-14 21:43:14 +03:00
alsaze
6853d782a6 edit favicon
All checks were successful
Deploy / build (push) Successful in 55s
edit Contacts.vue
2025-12-11 13:22:14 +03:00
alsaze
2f0b72c387 add about-us.vue
All checks were successful
Deploy / build (push) Successful in 3m21s
2025-12-10 16:15:35 +03:00
alsaze
24237652db init prysma
All checks were successful
Deploy / build (push) Successful in 3m22s
2025-12-10 13:36:35 +03:00
alsaze
b6855bc2a7 Merge remote-tracking branch 'origin/master'
All checks were successful
Deploy / build (push) Successful in 50s
# Conflicts:
#	.env
2025-12-10 13:15:44 +03:00
alsaze
4699f2ed86 init prysma 2025-12-10 13:15:30 +03:00
alsaze
3123ff8727 init prysma 2025-12-10 13:15:22 +03:00
158 changed files with 2080 additions and 4142 deletions

12
.env
View File

@@ -1,15 +1,5 @@
VITE_BASE_URL=http://localhost:3000 VITE_BASE_URL=http://localhost:3000
VITE_YANDEX_MAPS_KEY=13f4c06b-cb7e-4eeb-81f1-af52f12587b2 VITE_YANDEX_MAPS_KEY=13f4c06b-cb7e-4eeb-81f1-af52f12587b2
SMTP_USER=rentalservicekg@yandex.ru SMTP_USER=rentalservicekg@yandex.ru
SMTP_APP_PASSWORD=uljislsoihthciju SMTP_PASS=uljislsoihthciju
# This was inserted by `prisma init`:
# Environment variables declared in this file are NOT automatically loaded by Prisma.
# Please add `import "dotenv/config";` to your `prisma.config.ts` file, or use the Prisma CLI with Bun
# to load environment variables from .env files: https://pris.ly/prisma-config-env-vars.
# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings
DATABASE_URL="file:./database.db" DATABASE_URL="file:./database.db"

View File

@@ -1,2 +1,5 @@
VITE_BASE_URL=http://localhost:3000 VITE_BASE_URL=http://localhost:3000
VITE_YANDEX_MAPS_KEY=13f4c06b-cb7e-4eeb-81f1-af52f12587b2 VITE_YANDEX_MAPS_KEY=13f4c06b-cb7e-4eeb-81f1-af52f12587b2
SMTP_USER=rentalservicekg@yandex.ru
SMTP_PASS=uljislsoihthciju
DATABASE_URL="file:./database.db"

View File

@@ -14,7 +14,8 @@ ENV PORT=80
ENV VITE_BASE_URL=https://rental.koptilnya.xyz ENV VITE_BASE_URL=https://rental.koptilnya.xyz
ENV VITE_YANDEX_MAPS_KEY=13f4c06b-cb7e-4eeb-81f1-af52f12587b2 ENV VITE_YANDEX_MAPS_KEY=13f4c06b-cb7e-4eeb-81f1-af52f12587b2
ENV SMTP_USER=rentalservicekg@yandex.ru ENV SMTP_USER=rentalservicekg@yandex.ru
ENV SMTP_APP_PASSWORD=uljislsoihthciju ENV SMTP_PASS=uljislsoihthciju
ENV DATABASE_URL="file:./database.db"
EXPOSE 80 EXPOSE 80

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -1,11 +1,11 @@
<template> <template>
<UFooter <UFooter
class="border-t border-gray-200 mt-10" class="border-t border-default mt-10"
:ui="{ :ui="{
center: 'w-full', center: 'w-full',
}" }"
> >
<div class="w-full py-6 grid grid-cols-1 md:grid-cols-3 gap-10 text-sm"> <div class="w-full py-6 grid grid-cols-1 md:grid-cols-4 gap-10 text-sm">
<div id="footer-contacts"> <div id="footer-contacts">
<h3 class="font-semibold text-base mb-3"> <h3 class="font-semibold text-base mb-3">
Контакты Контакты
@@ -13,19 +13,45 @@
<ul class="space-y-2 opacity-80"> <ul class="space-y-2 opacity-80">
<li> <li>
<span class="font-medium">Телефон:</span><br> <span class="font-medium">Телефон:</span><br>
<a href="tel:+74951234567" class="hover:opacity-100 opacity-70"> <a href="tel:+996504280490" class="hover:opacity-100 opacity-70">
+7 (495) 123-45-67 +9 (965) 042-80-490
</a> </a>
</li> </li>
<li> <li>
<span class="font-medium">Email:</span><br> <span class="font-medium">Email:</span><br>
<a href="mailto:info@rental-concierge.com" class="hover:opacity-100 opacity-70"> <a href="mailto:atgoldenkg@gmail.com" class="hover:opacity-100 opacity-70">
info@rental-concierge.com atgoldenkg@gmail.com
</a> </a>
</li> </li>
<li> <li>
<span class="font-medium">Адрес:</span><br> <span class="font-medium">Адрес:</span><br>
Москва, Тверская улица, 1 <p class="opacity-70">
Адрес Бишкек, Свердловский район,
ул. Ибраимова, дом 115/4
</p>
</li>
</ul>
</div>
<div id="footer-contacts">
<h3 class="font-semibold text-base mb-3">
Реквизиты
</h3>
<ul class="space-y-2 opacity-80">
<li>
<p class="opacity-70">
Общество с ограниченной ответственностью "АТ Голден"
</p>
</li>
<li>
<p class="opacity-70">
ИНН 00406202010276
</p>
</li>
<li>
<p class="opacity-70">
Регистрационный номер 190962-3301-ООО
</p>
</li> </li>
</ul> </ul>
</div> </div>
@@ -38,15 +64,16 @@
<li><a href="/" class="hover:opacity-100 opacity-70">Главная</a></li> <li><a href="/" class="hover:opacity-100 opacity-70">Главная</a></li>
<li><a href="/nedvizhimost" class="hover:opacity-100 opacity-70">Недвижимость</a></li> <li><a href="/nedvizhimost" class="hover:opacity-100 opacity-70">Недвижимость</a></li>
<li><a href="/transport" class="hover:opacity-100 opacity-70">Авто</a></li> <li><a href="/transport" class="hover:opacity-100 opacity-70">Авто</a></li>
<li><a href="/about-us" class="hover:opacity-100 opacity-70">О нас</a></li>
</ul> </ul>
</div> </div>
<div class="md:text-right opacity-70 flex flex-col justify-between"> <div class="md:text-right opacity-70 flex flex-col justify-between">
<div class="text-lg font-bold"> <div class="text-lg font-bold">
Rental AT Golden
</div> </div>
<div class="mt-4 md:mt-0"> <div class="mt-4 md:mt-0">
© {{ new Date().getFullYear() }} Rental. © {{ new Date().getFullYear() }} AT Golden.
Все права защищены. Все права защищены.
</div> </div>
</div> </div>

View File

@@ -52,6 +52,7 @@ function desktopAnimation() {
trigger: benefitsRef.value, trigger: benefitsRef.value,
start: 'top 80%', start: 'top 80%',
toggleActions: 'play none none reverse', toggleActions: 'play none none reverse',
once: true,
}, },
}) })
@@ -94,7 +95,7 @@ const benefits = [
{ {
icon: '🏆', icon: '🏆',
title: 'Опыт и экспертиза', title: 'Опыт и экспертиза',
description: 'Более 10 лет на рынке консьерж-услуг', description: 'Более 5 лет на рынке консьерж-услуг',
}, },
] ]

View File

@@ -11,7 +11,7 @@
</div> </div>
<div class="text-2xl font-semibold"> <div class="text-2xl font-semibold">
Начните работу с Rental Начните работу с AT Golden
</div> </div>
<div class="text-base text-gray-300 mt-2"> <div class="text-base text-gray-300 mt-2">
@@ -46,7 +46,7 @@
<form name="contacts" method="POST" @submit.prevent="onSubmit"> <form name="contacts" method="POST" @submit.prevent="onSubmit">
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
Как к вам обращаться Как к вам обращаться ?
<UInput <UInput
id="name" id="name"
v-model="name" v-model="name"
@@ -81,7 +81,7 @@
</div> </div>
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
Что вас интересует? Что вас интересует ?
<div> <div>
<USelect <USelect
id="service" id="service"
@@ -91,7 +91,7 @@
:items="services" :items="services"
class="w-full" class="w-full"
size="xl" size="xl"
placeholder="выберите услугу" placeholder="Выберите услугу"
:ui="{ content: 'max-h-70' }" :ui="{ content: 'max-h-70' }"
:overlay="{ scrollLock: false }" :overlay="{ scrollLock: false }"
/> />
@@ -110,7 +110,7 @@
v-bind="commentAttrs" v-bind="commentAttrs"
name="comment" name="comment"
size="xl" size="xl"
placeholder="расскажите о ваших требованиях.." placeholder="Расскажите о ваших требованиях..."
/> />
</div> </div>
@@ -132,41 +132,53 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { useSessionStorage } from '@vueuse/core'
const toast = useToast() const toast = useToast()
const route = useRoute() const route = useRoute()
const contacts = [ const contacts = [
{ {
label: 'Телефон', label: 'Телефон',
value: '+7 (495) 123-45-67', value: '+9 (965) 042-80-490',
icon: 'i-lucide:phone', icon: 'i-lucide:phone',
}, },
{ {
label: 'Email', label: 'Email',
value: 'info@rental-concierge.com', value: 'atgoldenkg@gmail.com',
icon: 'i-lucide:mail', icon: 'i-lucide:mail',
}, },
{ {
label: 'Адрес', label: 'Адрес',
value: 'Москва, Тверская улица, 1', value: 'Адрес Бишкек, Свердловский район ул. Ибраимова, дом 115/4',
icon: 'i-lucide:map-pin', icon: 'i-lucide:map-pin',
}, },
] ]
const services = [ const services = [
'покупка авто', 'Покупка авто',
'продажа авто', 'Продажа авто',
'аренда авто', 'Аренда авто',
'покупка недвижимости', 'Покупка недвижимости',
'продажа недвижимости', 'Продажа недвижимости',
'аренда недвижимости', 'Аренда недвижимости',
] ]
const state = useSessionStorage('contacts', {
contacts:
{
name: '',
phone: '',
service: '',
comment: '',
},
})
const { errors, handleSubmit, defineField } = useForm({ const { errors, handleSubmit, defineField } = useForm({
initialValues: { initialValues: {
name: '', name: '',
phone: '', phone: '',
service: '', service: state?.value?.contacts?.service || '',
comment: '', comment: '',
}, },
validationSchema: { validationSchema: {
@@ -216,6 +228,11 @@ const onSubmit = handleSubmit(async (values) => {
}) })
} }
}) })
watch(() => state.value, () => {
if (state.value.contacts.service)
service.value = state.value.contacts.service
})
</script> </script>
<style lang="scss"> <style lang="scss">

View File

@@ -12,6 +12,7 @@
:key="item.title" :key="item.title"
class="how-work" class="how-work"
:ui="cardUi" :ui="cardUi"
variant="subtle"
> >
<div class="how-work__number"> <div class="how-work__number">
{{ item.number }} {{ item.number }}
@@ -59,6 +60,7 @@ function desktopAnimation() {
trigger: howWorksRef.value, trigger: howWorksRef.value,
start: 'top 50%', start: 'top 50%',
toggleActions: 'play none none reverse', toggleActions: 'play none none reverse',
once: true,
}, },
}) })
@@ -120,7 +122,7 @@ const items = [
.how-work { .how-work {
&__number { &__number {
font-size: 48px; font-size: 48px;
opacity: 0.1; opacity: 0.3;
font-weight: 600; font-weight: 600;
} }

View File

@@ -0,0 +1,117 @@
<template>
<UModal
v-model:open="open"
:ui="modalUi"
title="Авто из Кыргызстана - под ключ !"
scrollable
>
<template #body>
<div class="promotion-modal">
<div class="grid gap-4 sm:grid-cols-2">
<UCard
v-for="car in cars"
:key="car.mark"
class="backdrop-blur-md bg-white/10 border border-white/20"
>
<template #header>
<div class="flex items-center gap-3">
<UIcon name="i-lucide-car" class="text-xl" />
<h3 class="text-lg font-semibold">
{{ car.mark }}
</h3>
</div>
</template>
<div class="flex flex-wrap gap-2">
<span
v-for="model in car.models"
:key="model"
class="
px-3 py-1 text-sm
rounded-full
bg-white/15
hover:bg-white/25
cursor-pointer
transition
"
>
{{ model }}
</span>
</div>
</UCard>
</div>
<UAccordion v-model="active" :items="items" />
<UButton size="xl" href="#contacts" @click="openContacts()">
Подробнее
</UButton>
</div>
</template>
</UModal>
</template>
<script setup lang="ts">
import type { AccordionItem } from '@nuxt/ui'
import { useSessionStorage } from '@vueuse/core'
const open = defineModel('modelValue', { type: Boolean, default: true })
const active = ref()
const modalUi = {
content:
'bg-[linear-gradient(rgba(0,0,0,0.5),rgba(0,0,0,0.5)),url(/changan.jpg)] bg-cover bg-center bg-no-repeat',
}
const items: AccordionItem[] = [
{
label: 'Подбор автомобиля',
icon: 'i-lucide-car',
content: 'Помощь в выборе автомобиля, консультация независимого эксперта.',
},
{
label: 'Юридическое оформление',
icon: 'i-lucide-file-text',
content: 'Оформление покупки с учетом требований действующего законодательства.',
},
{
label: 'Доставка и страхование',
icon: 'i-lucide-truck',
content: 'Организация доставки автомобиля и страхового сопровождения.',
},
]
const cars = [
{
mark: 'Changan',
models: ['CS55PLUS', 'UNI-K', 'X5 PLUS', 'UNI-Z', 'Deepel', 'Другие'],
},
{
mark: 'Geely',
models: ['Monharo', 'Emgrand', 'Galaxy Starship 7', 'Atlsa', 'Другие'],
},
]
const state = useSessionStorage('contacts', {
contacts:
{
name: '',
phone: '',
service: '',
comment: '',
},
})
function openContacts() {
open.value = false
state.value.contacts.service = 'покупка авто'
}
</script>
<style lang="scss">
.promotion-modal {
display: flex;
flex-direction: column;
gap: 20px;
}
</style>

View File

@@ -2,7 +2,7 @@
<UPageSection <UPageSection
id="services" id="services"
title="Что мы предлагаем" title="Что мы предлагаем"
description="Полный спектр консьерж-услуг для работы с недвижимостью и автомобилями" description="Полный спектр консьерж-услуг для работы с недвижимостью и автомобилями в Кыргызстане (Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак и Узген)"
:ui="{ container: '!p-0' }" :ui="{ container: '!p-0' }"
> >
<template #body> <template #body>
@@ -70,6 +70,7 @@ function servicesAnimation() {
trigger: card, trigger: card,
start: 'top 70%', start: 'top 70%',
toggleActions: 'play none none reverse', toggleActions: 'play none none reverse',
once: true,
}, },
}) })
}) })

View File

@@ -366,6 +366,271 @@ export const useMock = () => {
}, },
], ],
}, },
{
id: 84893245,
title: 'BMW : 2015 г., 4.4 л, Автомат, Бензин, Купе',
shortTitle: 'BMW : 2015 г., 4.4 л',
description: '🔥 BMW Coupe 2015 — мощь, стиль и характер 🔥\n'
+ '\n'
+ 'Этот BMW — не просто автомобиль, а настоящее воплощение драйва и премиального комфорта 🚀\n'
+ 'Под капотом — внушительный бензиновый двигатель 4.4 л, который дарит уверенное ускорение и яркие эмоции при каждом нажатии на педаль газа ⚡ Автоматическая коробка передач обеспечивает плавный ход как в городском потоке, так и на трассе.\n'
+ '\n'
+ '🚗 Кузов купе подчёркивает спортивный характер автомобиля: динамичные линии, агрессивный силуэт и безупречная посадка на дороге притягивают взгляды и выделяют его среди потока. Это автомобиль для тех, кто ценит стиль и уверенность в каждом движении.\n'
+ '\n'
+ '✨ Салон премиум-класса — комфорт и качество в каждой детали. Эргономичные сиденья с отличной боковой поддержкой, продуманная архитектура панели и атмосфера, в которой каждая поездка превращается в удовольствие. Здесь одинаково приятно как отправиться в дальнее путешествие, так и наслаждаться короткими городскими маршрутами.\n'
+ '\n'
+ '🔊 Современные технологии, качественная мультимедиа и продуманная шумоизоляция делают поездку максимально комфортной\n'
+ '🛣️ Отличная управляемость и фирменная BMW-динамика дарят полный контроль над дорогой\n'
+ '💎 Автомобиль ухожен и готов радовать нового владельца без лишних вложений\n'
+ '\n'
+ 'Этот BMW — идеальный выбор для тех, кто хочет получать эмоции от вождения, ценит мощь, статус и безупречный дизайн. Сел за руль — и понял, что это именно он 😎',
type: 'sale',
category: 'transport',
previewImage: {
src: '/bmv888_1.jpeg',
},
images: [
{
src: '/bmv888_2.jpeg',
},
{
src: '/bmv888_3.jpeg',
},
{
src: '/bmv888_4.jpeg',
},
{
src: '/bmv888_5.jpeg',
},
{
src: '/bmv888_6.jpeg',
},
{
src: '/bmv888_7.jpeg',
},
{
src: '/bmv888_8.jpeg',
},
{
src: '/bmv888_9.jpeg',
},
{
src: '/bmv888_10.jpeg',
},
],
},
{
id: 123432176545467,
title: 'Mercedes-Benz S-Class: 2023 г., 4 л, Автомат, Бензин, Седан',
shortTitle: 'Mercedes-Benz S-Class: 2023 г.',
description: '👑 **Аренда Mercedes-Benz S-Class 2023 — эталон роскоши и статуса** 👑\n'
+ '\n'
+ 'Этот Mercedes-Benz S-Class — вершина инженерного искусства и символ безупречного вкуса ✨ Автомобиль создан для тех, кто ценит абсолютный комфорт, тишину и уверенность на дороге. Идеальный вариант как для деловых поездок, так и для особых мероприятий.\n'
+ '\n'
+ '🚘 Под капотом — мощный бензиновый двигатель **4.0 л**, который в паре с автоматической коробкой передач обеспечивает плавное, уверенное и практически бесшумное движение. Каждая поездка ощущается как путешествие первым классом ✈️\n'
+ '\n'
+ '💎 **Премиальный салон** впечатляет с первого взгляда: высококачественные материалы отделки, продуманная эргономика и внимание к каждой детали. Мягкие сиденья с множеством регулировок, атмосфера уюта и инновационные технологии создают ощущение максимального комфорта для водителя и пассажиров.\n'
+ '\n'
+ '🧠 Интеллектуальные системы помощи водителю повышают безопасность и уверенность за рулём\n'
+ '🎵 Современная мультимедиа и превосходная шумоизоляция — тишина и удовольствие в каждой поездке\n'
+ '🌙 Элегантный дизайн и статусный внешний вид подчёркивают ваш имидж\n'
+ '\n'
+ '📌 **Аренда Mercedes-Benz S-Class 2023** — это возможность позволить себе премиум-класс без компромиссов. Идеально подходит для встреч, торжеств, трансферов и комфортного передвижения по городу и за его пределами.\n'
+ 'Садитесь в салон — и мир вокруг становится спокойнее 😌\n',
type: 'rent',
category: 'transport',
previewImage: {
src: '/bbbenz_1.jpeg',
},
images: [
{
src: '/bbbenz_2.jpeg',
},
{
src: '/bbbenz_3.jpeg',
},
{
src: '/bbbenz_4.jpeg',
},
{
src: '/bbbenz_5.jpeg',
},
{
src: '/bbbenz_6.jpeg',
},
{
src: '/bbbenz_7.jpeg',
},
{
src: '/bbbenz_8.jpeg',
},
],
},
{
id: 3245432889098,
title: 'BMW X6 M: 2021 г., 4.4 л, Автомат, Бензин, Кроссовер',
shortTitle: 'BMW X6 M: 2021 г., 4.4 л',
description: '🔥 **Аренда BMW X6 M 2021 — мощь, статус и максимум эмоций** 🔥\n'
+ '\n'
+ 'BMW X6 M — это идеальное сочетание спортивного характера и премиального комфорта 🚀 Автомобиль для тех, кто хочет чувствовать абсолютную уверенность на дороге и привлекать внимание с первого взгляда.\n'
+ '\n'
+ '💥 Под капотом — легендарный бензиновый двигатель **4.4 л**, который дарит взрывную динамику и мгновенный отклик на газ. Автоматическая коробка передач обеспечивает плавное и точное переключение в любых условиях — от городского трафика до скоростных трасс.\n'
+ '\n'
+ '🚙 **Купеобразный кроссовер** с агрессивным дизайном и фирменной М-стилистикой подчёркивает характер автомобиля: мощные линии, широкая посадка и спортивный силуэт делают его по-настоящему эффектным.\n'
+ '\n'
+ '✨ **Салон уровня premium** — продуман до мелочей: спортивные сиденья с отличной боковой поддержкой, качественные материалы отделки и современные технологии создают атмосферу комфорта и контроля.\n'
+ '\n'
+ '🧠 Интеллектуальные системы помощи водителю\n'
+ '🎶 Качественная аудиосистема и отличная шумоизоляция\n'
+ '🛣️ Превосходная управляемость и фирменный BMW-драйв\n'
+ '❄️ Комфорт в любую погоду и в любое время года\n'
+ '\n'
+ '📌 **Аренда BMW X6 M 2021** — идеальный выбор для ярких поездок, деловых встреч, путешествий и особых случаев. Этот автомобиль дарит эмоции, которые невозможно забыть 😎\n',
type: 'rent',
category: 'transport',
previewImage: {
src: '/bmb6_1.jpeg',
},
images: [
{
src: '/bmb6_2.jpeg',
},
{
src: '/bmb6_3.jpeg',
},
{
src: '/bmb6_4.jpeg',
},
{
src: '/bmb6_5.jpeg',
},
{
src: '/bmb6_6.jpeg',
},
{
src: '/bmb6_7.jpeg',
},
{
src: '/bmb6_8.jpeg',
},
{
src: '/bmb6_9.jpeg',
},
{
src: '/bmb6_10.jpeg',
},
{
src: '/bmb6_11.jpeg',
},
{
src: '/bmb6_12.jpeg',
},
{
src: '/bmb6_13.jpeg',
},
],
},
{
id: 19233255,
title: 'Lexus LX: 2021 г., 5.7 л, Автомат, Бензин, Внедорожник',
shortTitle: 'Lexus LX: 2021 г., 5.7 л',
description: '🛡️ **Аренда Lexus LX 2021 — роскошь, надёжность и абсолютная уверенность** 🛡️\n'
+ '\n'
+ 'Lexus LX — это легендарный внедорожник премиум-класса, созданный для тех, кто не признаёт компромиссов 💎 Он одинаково уверенно чувствует себя как в городе, так и за его пределами, сочетая высокий статус, комфорт и выдающуюся проходимость.\n'
+ '\n'
+ '💪 Под капотом — мощный бензиновый двигатель **5.7 л**, обеспечивающий плавную, уверенную тягу в любых условиях. Автоматическая коробка передач гарантирует комфортное управление и максимальное удовольствие от поездки, независимо от маршрута.\n'
+ '\n'
+ '🚙 **Внушительный и солидный внешний вид** подчёркивает статус владельца: массивная решётка радиатора, уверенные линии кузова и высокая посадка создают ощущение полного контроля над дорогой.\n'
+ '\n'
+ '✨ **Премиальный салон** — пространство комфорта и тишины. Качественные материалы отделки, удобные сиденья и продуманная эргономика делают каждую поездку максимально приятной как для водителя, так и для пассажиров.\n'
+ '\n'
+ '🧠 Современные системы безопасности и помощи водителю\n'
+ '🎶 Качественная аудиосистема и отличная шумоизоляция\n'
+ '🌍 Полный привод и высокая проходимость — готов к любым дорогам\n'
+ '❄️ Комфорт в любую погоду и любое время года\n'
+ '\n'
+ '📌 **Аренда Lexus LX 2021** — идеальный выбор для путешествий, деловых поездок, семейных выездов и особых мероприятий. Этот автомобиль дарит чувство уверенности, спокойствия и премиального уровня в каждой детали 😌\n',
type: 'rent',
category: 'transport',
previewImage: {
src: '/lexes_1.jpeg',
},
images: [
{
src: '/lexes_2.jpeg',
},
{
src: '/lexes_3.jpeg',
},
{
src: '/lexes_4.jpeg',
},
{
src: '/lexes_5.jpeg',
},
{
src: '/lexes_6.jpeg',
},
{
src: '/lexes_7.jpeg',
},
{
src: '/lexes_8.jpeg',
},
],
},
{
id: 82923411,
title: 'Mercedes-Benz CLS-Class: 2020 г., 3 л, Бензин, Купе',
shortTitle: 'Mercedes-Benz CLS-Class: 2020 г.',
description: '✨ **Аренда Mercedes-Benz CLS-Class 2020 — элегантность в движении** ✨\n'
+ '\n'
+ 'Mercedes-Benz CLS — это идеальное сочетание спортивного купе и представительского седана 🚘 Автомобиль для тех, кто ценит стиль, плавность хода и выразительный дизайн, который остаётся актуальным вне времени.\n'
+ '\n'
+ '⚙️ Под капотом — бензиновый двигатель **3.0 л**, обеспечивающий уверенную динамику и комфортное ускорение. Автоматическая коробка передач делает управление лёгким и плавным, идеально подходящим как для города, так и для трассы.\n'
+ '\n'
+ '🔥 **Фирменный купе-силуэт** CLS подчёркивает его характер: плавные линии кузова, низкая посадка и эффектный профиль притягивают взгляды и создают ощущение движения даже на месте.\n'
+ '\n'
+ '🖤 **Премиальный салон** — это атмосфера уюта и технологичности. Качественные материалы отделки, удобные сиденья и продуманная эргономика обеспечивают максимальный комфорт для водителя и пассажиров.\n'
+ '\n'
+ '🧠 Интеллектуальные системы помощи и безопасности\n'
+ '🎶 Современная мультимедиа и отличная шумоизоляция\n'
+ '🛣️ Плавный ход и фирменный комфорт Mercedes-Benz\n'
+ '🌙 Идеален для деловых встреч, свиданий и вечерних поездок\n'
+ '\n'
+ '📌 **Аренда Mercedes-Benz CLS-Class 2020** — отличный выбор для тех, кто хочет подчеркнуть вкус, статус и наслаждаться каждой поездкой 💼\n',
type: 'rent',
category: 'transport',
previewImage: {
src: '/clscscs_1.jpeg',
},
images: [
{
src: '/clscscs_2.jpeg',
},
{
src: '/clscscs_3.jpeg',
},
{
src: '/clscscs_4.jpeg',
},
{
src: '/clscscs_5.jpeg',
},
{
src: '/clscscs_6.jpeg',
},
{
src: '/clscscs_7.jpeg',
},
{
src: '/clscscs_8.jpeg',
},
{
src: '/clscscs_9.jpeg',
},
],
},
// category: 'nedvizhimost', // category: 'nedvizhimost',
{ {
id: 133423414, id: 133423414,
@@ -391,20 +656,20 @@ export const useMock = () => {
+ 'супербыстрый Wi-Fi\n' + 'супербыстрый Wi-Fi\n'
+ '\n' + '\n'
+ 'система тёплого пола\n' + 'система тёплого пола\n'
+ '\n' + '\n'
+ 'стильная рабочая зона\n' + 'стильная рабочая зона\n'
+ '\n' + '\n'
+ 'полностью оснащённая кухня\n' + 'полностью оснащённая кухня\n'
+ '\n' + '\n'
+ 'Современная спальня со стеклянной стеной и встроенными жалюзи создаёт ощущение воздушности и свободы, одновременно сохраняя приватность и уют.\n' + 'Современная спальня со стеклянной стеной и встроенными жалюзи создаёт ощущение воздушности и свободы, одновременно сохраняя приватность и уют.\n'
+ '\n' + '\n'
+ '🤍 Тихий оазис в центре города\n' + '🤍 Тихий оазис в центре города\n'
+ '\n' + '\n'
+ 'Несмотря на расположение в эпицентре городской жизни, внутри квартиры царит абсолютный покой. Это место, где можно работать, отдыхать и наслаждаться жизнью, не выходя за пределы собственного пространства.\n' + 'Несмотря на расположение в эпицентре городской жизни, внутри квартиры царит абсолютный покой. Это место, где можно работать, отдыхать и наслаждаться жизнью, не выходя за пределы собственного пространства.\n'
+ '\n' + '\n'
+ ' Важная информация\n' + ' Важная информация\n'
+ '\n' + '\n'
+ 'В соседнем здании ведутся строительные работы в рабочее время — именно поэтому сейчас действует специальная выгодная цена. Это отличная возможность приобрести премиальную недвижимость по привлекательной стоимости.', + 'В соседнем здании ведутся строительные работы в рабочее время — именно поэтому сейчас действует специальная выгодная цена. Это отличная возможность приобрести премиальную недвижимость по привлекательной стоимости.',
type: 'rent', type: 'rent',
category: 'nedvizhimost', category: 'nedvizhimost',
coordinates: [74.601748, 42.867657], coordinates: [74.601748, 42.867657],
@@ -813,6 +1078,403 @@ export const useMock = () => {
}, },
], ],
}, },
{
id: 2828283939,
title: 'Кондоминиум целиком, Бишкек, Киргизия',
shortTitle: 'Кондоминиум целиком, Бишкек, Киргизия',
description: 'Добро пожаловать в Granville Apartment Bishkek - идеальное место для путешественников, ценящих комфорт и роскошь.\n'
+ '\n'
+ 'В квартире есть вентиляционная система, умное освещение, хорошо оснащенная кухня, 55-дюймовый телевизор с Нетфликсом, уютный балкон и отдельный рабочий стол. Ванная отделана изысканными материалами и имеет премиальный тропический душ.\n'
+ '\n'
+ 'Находясь в престижном районе вокруг бульвара Эркиндик, квартира имеет шаговый доступ к магазинам, ресторанам, барам и деловому центру.\n'
+ 'Жилье\n'
+ 'Granville Apartment Bishkek предлагает вам:\n'
+ '\n'
+ '- элегантный минималистичный дизайн с премиальной отделкой\n'
+ '- профессиональную вентиляционную систему и кондиционеры в каждой комнает\n'
+ '- полностью оборудованную кухню с современной техникой и посудой\n'
+ '- функциональный рабочий стол для удаленной работы\n'
+ '- комфортабельный лаунж с двумя низкими глубокими модульными диванами\n'
+ '- смарт-ТВ с Нетфликсом и Apple TV\n'
+ '- квин-сайз кровать с ортопедическим матрасом и качественным бельем\n'
+ '- уютный балкон со столиком для двоих\n'
+ '- хорошо оборудованную постирочную комнату\n'
+ '- возможность заезда в любое время суток и недели\n'
+ '- круглосуточная поддержка от хозяев\n'
+ '\n'
+ 'Бронируйте даты в роскошном Granville Apartment Bishkek сегодня и насладитесь лучшим жильем в Бишкеке!',
type: 'rent',
category: 'nedvizhimost',
coordinates: [74.58502089219573, 42.86778737107326],
address: 'Кыргызстан, Бишкек ул Боконбаева 184',
previewImage: {
src: '/condonium_1.avif',
},
images: [
{
src: '/condonium_2.avif',
},
{
src: '/condonium_3.avif',
},
{
src: '/condonium_4.avif',
},
{
src: '/condonium_5.avif',
},
{
src: '/condonium_6.avif',
},
{
src: '/condonium_7.avif',
},
{
src: '/condonium_8.avif',
},
{
src: '/condonium_9.avif',
},
{
src: '/condonium_10.avif',
},
{
src: '/condonium_11.avif',
},
{
src: '/condonium_12.avif',
},
],
},
{
id: 92974710293834,
title: 'Кондоминиум, Бишкек, Киргизия',
shortTitle: 'Кондоминиум, Бишкек, Киргизия',
description: 'В самом сердце Бишкека, на знаменитой улице Боконбаева, вас ждёт безупречное сочетание городского комфорта и умиротворяющего величия природы. Этот просторный кондоминиум с тремя спальнями и двумя ванными станет вашим личным оазисом с захватывающим видом на живописные горные вершины, открывающимся прямо из окон.\n'
+ '\n'
+ 'Широкие светлые комнаты с кондиционерами дарят желанную прохладу, а стильная кухня-гостиная с панорамным остеклением, высококачественной техникой и двумя большими телеэкранами создаёт идеальное пространство для жизни и приёма гостей. Высокоскоростной Wi-Fi и кабельное TV позаботятся о вашем досуге.\n'
+ '\n'
+ 'Жизнь здесь — это баланс между динамикой столицы и тишиной приватной территории. Прогуляйтесь пешком до главной площади, самого большого парка развлечений или изысканных ресторанов, а вернувшись, насладитесь покоем в ухоженном дворе с безопасной детской площадкой. Ваше спокойствие и безопасность охраняются круглосуточно.\n'
+ '\n'
+ 'Это больше чем аренда — это ваш новый адрес в Кыргызстане, где каждая деталь продумана, а гостеприимные русско- и англоговорящие хозяева сделают всё для вашего комфорта. Добро пожаловать в дом, где город встречается с горами.',
type: 'rent',
category: 'nedvizhimost',
coordinates: [74.59359221852621, 42.88807688328671],
address: 'Кыргызстан, Бишкек',
previewImage: {
src: '/isanova_1.avif',
},
images: [
{
src: '/isanova_2.avif',
},
{
src: '/isanova_3.avif',
},
{
src: '/isanova_4.avif',
},
{
src: '/isanova_5.avif',
},
{
src: '/isanova_6.avif',
},
{
src: '/isanova_7.avif',
},
{
src: '/isanova_8.avif',
},
{
src: '/isanova_9.avif',
},
{
src: '/isanova_10.avif',
},
{
src: '/isanova_11.avif',
},
{
src: '/isanova_12.avif',
},
{
src: '/isanova_13.avif',
},
{
src: '/isanova_14.avif',
},
],
},
{
id: 78393412034000,
title: 'Жилье целиком, Бишкек, Киргизия',
shortTitle: 'Жилье целиком, Бишкек, Киргизия',
description: '✨🌇 Ваша Высокогорная Резиденция в Сердце Бишкека! ✨🌄\n'
+ '\n'
+ 'Добро пожаловать в обитель безупречного комфорта и головокружительных панорам! Эта невероятно просторная двухкомнатная квартира на 14-м этаже станет вашим личным небесным убежищем, откуда открывается вид на весь город и величественные горные хребты.\n'
+ '\n'
+ '🛋️ Королевский Комфорт:\n'
+ 'Забудьте об обычном сне! Вас ждут роскошные кровати размера King Size (200x200 см) с исключительно комфортными матрасами высочайшего класса, которые гарантируют сладкие сны и полное восстановление сил. 🛌💤 Все комнаты оборудованы современными кондиционерами, создавая идеальный микроклимат в любое время года. ❄️🌬️\n'
+ '\n'
+ '🍽️ Кухня Вашей Мечты:\n'
+ 'Полностью оборудованная кухня с посудомоечной машиной станет местом для лёгких завтраков с видом на городские крыши и вдохновенных кулинарных экспериментов. Здесь есть всё для вашего удобства! 🍳☕🧺\n'
+ '\n'
+ '🌐 Работа и Отдых:\n'
+ 'Быстрый Wi-Fi и специально обустроенное комфортное место для работы позволят вам с лёгкостью совмещать дела и отдых. А после продуктивного дня — расслабление на собственном открытом балконе. Это ваша личная сцена для созерцания самых потрясающих, огненных закатов, окрашивающих небо и горы в малиновые и золотые тона. 🌅🍷\n'
+ '\n'
+ '📍 Идеальное Расположение:\n'
+ 'Вы в самом эпицентре жизни Бишкека! Лучшие рестораны, кафе и достопримечательности — буквально у вас под ногами. Всё самое интересное начинается за порогом дома. 🍽️🚶‍♀️🏙️\n'
+ '\n'
+ '🏡 Территория Без Забот:\n'
+ 'Просторная, очень большая и огороженная территория комплекса — это ваш зелёный и безопасный оазис для утренних пробежек или вечерних прогулок. 🏞️🔒\n'
+ '\n'
+ 'Это не просто аренда — это ваш премиальный опыт жизни на высоте. Для тех, кто ценит безупречный стиль, абсолютный комфорт и панорамные виды, останавливающие время.\n'
+ '\n'
+ 'Ваше небесное убежище в Бишкеке ждёт вас! 🏔️✨',
type: 'rent',
category: 'nedvizhimost',
coordinates: [74.57873643745214, 42.871257954146216],
address: 'Кыргызстан, Бишкек',
previewImage: {
src: '/timirezeva_1.avif',
},
images: [
{
src: '/timirezeva_2.avif',
},
{
src: '/timirezeva_3.avif',
},
{
src: '/timirezeva_4.avif',
},
{
src: '/timirezeva_5.avif',
},
{
src: '/timirezeva_6.avif',
},
{
src: '/timirezeva_7.avif',
},
{
src: '/timirezeva_8.avif',
},
{
src: '/timirezeva_9.avif',
},
{
src: '/timirezeva_10.avif',
},
{
src: '/timirezeva_11.avif',
},
],
},
{
id: 842340500,
title: 'Центральная квартира с видом на колесо обозрения',
shortTitle: 'Центральная квартира с видом на колесо обозрения',
description: '🌅 Начните свой идеальный день в Бишкеке с чашечки ароматного кофе Nespresso на уютной солнечной скамье у панорамного окна. Перед вами, как на ладони, раскинется зелёный оазис Парка Панфилова и гигантское колесо обозрения, застывшее на фоне гор. ☕🌳🎡\n'
+ '\n'
+ '🚶‍♀️ Отправляйтесь навстречу приключениям прямо от порога: главные достопримечательности, шумные проспекты и уютные улочки столицы — всё в пешей доступности. Прогулки по городу станут вашим ежедневным ритуалом.\n'
+ '\n'
+ '🏡 Вернувшись в свой уединённый уголок, вас ждёт полная свобода: просторная квартира целиком в вашем безраздельном распоряжении. Приготовьте изысканный ужин на полностью оборудованной кухне, расслабьтесь под бодрящими струями просторного тропического душа 🚿, или устройте киномарафон в уютной гостиной.\n'
+ '\n'
+ '🌿 А ещё — вас ждёт целый мир за окнами квартиры: тихий, охраняемый двор с современной детской площадкой 🧒 и тренажёрным залом под открытым небом 💪. Здесь можно и выдохнуть после насыщенного дня, и поддерживать форму.\n'
+ '\n'
+ '🛒 Не нужно никуда ехать: круглосуточный супермаркет, аптека 🏪 и уютный ресторан — прямо в вашем здании. Максимум удобства и минимум хлопот!\n'
+ '\n'
+ '✨ Здесь вас ждёт безупречный союз:\n'
+ '\n'
+ 'Комфорт продуманного личного пространства 🛋️\n'
+ '\n'
+ 'Безопасность охраняемой территории 🔒\n'
+ '\n'
+ 'Идеальное расположение в самом сердце города 💖\n'
+ '\n'
+ 'Ваше путешествие начинается с идеального дома. Добро пожаловать! 🏔️✨',
type: 'rent',
category: 'nedvizhimost',
coordinates: [74.59965373916413, 42.88192301611185],
address: 'Кыргызстан, Бишкек',
previewImage: {
src: '/koleso_1.avif',
},
images: [
{
src: '/koleso_2.avif',
},
{
src: '/koleso_3.avif',
},
{
src: '/koleso_4.avif',
},
{
src: '/koleso_5.avif',
},
{
src: '/koleso_6.avif',
},
{
src: '/koleso_7.avif',
},
{
src: '/koleso_8.avif',
},
{
src: '/koleso_9.avif',
},
{
src: '/koleso_10.avif',
},
{
src: '/koleso_11.avif',
},
{
src: '/koleso_12.avif',
},
{
src: '/koleso_13.avif',
},
{
src: '/koleso_14.avif',
},
],
},
{
id: 12321123987,
title: 'Апартаменты в центре города',
shortTitle: 'Апартаменты в центре города',
description: 'Эти апартаменты — воплощение гармонии городской динамики и приватного уюта, редкое сочетание, которое особенно ценится в центре мегаполиса. Расположенные в тихом, респектабельном районе Бишкека, они дарят ощущение спокойствия, оставаясь при этом в самом сердце городской жизни.\n'
+ '\n'
+ 'Современный дом с выразительной архитектурой органично вписан в окружающую застройку и сразу производит впечатление продуманного и качественного пространства. Здесь чувствуется новый уровень комфорта: аккуратные входные группы, ухоженная территория и атмосфера, в которой приятно возвращаться домой после насыщенного дня.\n'
+ '\n'
+ 'Внутреннее пространство квартиры наполнено светом и воздухом. Планировка продумана таким образом, чтобы каждый метр работал на удобство и эстетику: здесь легко представить как спокойные вечера в кругу близких, так и продуктивные рабочие дни в комфортной обстановке. Апартаменты создают ощущение уюта, в который хочется погрузиться сразу, переступив порог.\n'
+ '\n'
+ 'Одним из главных преимуществ является локация. Все, что нужно для комфортной жизни, находится буквально в нескольких шагах: уютные кофейни и пекарни с ароматной выпечкой по утрам, магазины и супермаркеты, рестораны, школы, парки и прогулочные аллеи. Вы можете начать день с неспешной прогулки среди зелени, а уже через несколько минут оказаться в деловом или культурном центре города.\n'
+ '\n'
+ 'Эта квартира идеально подойдёт тем, кто ценит качество, стиль и удобство, кто хочет жить в ритме города, не отказываясь от тишины и личного пространства. Апартаменты в центре — это не просто жильё, это образ жизни, в котором каждая деталь работает на ваш комфорт и удовольствие.',
type: 'rent',
category: 'nedvizhimost',
coordinates: [74.579776, 42.869574],
address: 'Кыргызстан, Бишкек',
previewImage: {
src: '/bshbsh_1.avif',
},
images: [
{
src: '/bshbsh_2.avif',
},
{
src: '/bshbsh_3.avif',
},
{
src: '/bshbsh_4.avif',
},
{
src: '/bshbsh_5.avif',
},
{
src: '/bshbsh_6.avif',
},
],
},
{
id: 54677645,
title: 'Светлая, новая квартира в центре',
shortTitle: 'Светлая, новая квартира в центре',
description: 'Светлая и просторная квартира в современном жилом комплексе с качественным ремонтом.\n'
+ '\n'
+ 'В спальне — большая кровать (160x200) с ортопедическим матрасом, средней жесткости.\n'
+ '\n'
+ 'Кухня оснащена всей необходимой техникой и посудой для комфортного проживания.\n'
+ '\n'
+ 'Из окон открывается прекрасный вид на город и горы.\n'
+ '\n'
+ 'Рядом — прогулочные зоны, парки, магазины, кафе, рестораны и развлекательные заведения.\n'
+ '\n'
+ 'До центральной площади Ала-Тоо — всего 10 минут пешком.\n'
+ 'Жилье\n'
+ 'Идеальное место для жизни или отдыха в центре Бишкека!\n'
+ '\n'
+ 'Светлая и уютная квартира 70 м² с современным ремонтом в престижном жилом комплексе. Всё для вашего комфорта и безопасности: круглосуточная охрана, вход по чипам, чистый подъезд и дружелюбные соседи.\n'
+ '\n'
+ 'Преимущества:\n'
+ '• Уютная спальня с двуспальной кроватью и удобный диван-кровать.\n'
+ '• Полностью оборудованная кухня.\n'
+ '• Высокоскоростной Wi-Fi, два телевизора, включая Smart TV (Netflix, YouTube).\n'
+ '• Благоустроенная детская площадка во дворе.\n'
+ '\n'
+ 'Прекрасное расположение:\n'
+ '• В шаговой доступности: ТЦ Bishkek Park, парк Панфилова, сквер Горького, Филармония.\n'
+ '• Для активного отдыха — стадион «Спартак» и теннисный корт «Тайм-Брейк».\n'
+ '\n'
+ 'Квартира идеально подойдёт для семей и тех, кто ценит комфорт и удобство в центре города.\n'
+ 'Что доступно гостю\n'
+ 'Квартира полностью оборудована для комфортного проживания.\n'
+ '\n'
+ 'Предоставляем детскую кроватку (от 1мес до 2лет).\n'
+ '\n'
+ '-Кухня\n'
+ '\n'
+ 'Полный комплект качественной посуды, тостер, кофеварка, индукционная плита, духовка, вытяжка, холодильник, микроволновая печь.\n'
+ '\n'
+ '-Санузел\n'
+ '\n'
+ 'Душ, водонагреватель, зеркало, стиральная машина.\n'
+ '\n'
+ '-Спальная комната\n'
+ '\n'
+ 'Двуспальная кровать размером 160/200 с ортопедическим матрасом средней жёсткости, кондиционер (зима-лето), зеркальное шкаф-купе. Телевизор с выходом на интернет.\n'
+ '\n'
+ '-Гостиная\n'
+ '\n'
+ 'диван-кровать, кондиционер (зима-лето), телевизор, ковёр, комод для хранения вещей.\n'
+ 'Важная информация\n'
+ 'Уважаемые гости! В соответствии с указом Президента Кыргызской Республики, в будние дни с 22:00 до 7:00, а в выходные — с 22:00 до 9:00 строго запрещено создание шума. Пожалуйста, принимайте это во внимание и соблюдайте тишину, чтобы обеспечить комфорт и покой для всех. Благодарим за ваше понимание!',
type: 'rent',
category: 'nedvizhimost',
coordinates: [74.594117, 42.879309],
address: 'Кыргызстан, Бишкек',
previewImage: {
src: '/kartines_1.avif',
},
images: [
{
src: '/kartines_2.avif',
},
{
src: '/kartines_3.avif',
},
{
src: '/kartines_4.avif',
},
{
src: '/kartines_5.avif',
},
{
src: '/kartines_6.avif',
},
{
src: '/kartines_7.avif',
},
{
src: '/kartines_8.avif',
},
{
src: '/kartines_9.avif',
},
{
src: '/kartines_10.avif',
},
{
src: '/kartines_11.avif',
},
],
},
] ]
const cartById = (id?: string) => const cartById = (id?: string) =>

Binary file not shown.

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="layout"> <div class="layout">
<UHeader <UHeader
title="Rental" title="AT Golden"
:toggle="false" :toggle="false"
:ui="{ :ui="{
root: 'fixed bg-transparent w-full', root: 'fixed bg-transparent w-full',
@@ -13,8 +13,9 @@
<template #left> <template #left>
<Icon class="cursor-pointer w-6 h-6" name="lucide:arrow-left" @click="routerBack()" /> <Icon class="cursor-pointer w-6 h-6" name="lucide:arrow-left" @click="routerBack()" />
<NuxtLink to="/" class="absolute left-1/2 transform -translate-x-1/2 text-lg"> <NuxtLink to="/" class="absolute left-1/2 transform -translate-x-1/2 text-lg flex items-center gap-2">
Rental <Icon name="my-icon:main-logo" :style="{ fontSize: isMobile ? '34px' : '48px' }" />
AT Golden
</NuxtLink> </NuxtLink>
<transition name="fade"> <transition name="fade">

View File

@@ -2,7 +2,7 @@
<div class="layout"> <div class="layout">
<ClientOnly> <ClientOnly>
<UHeader <UHeader
title="Rental" title="AT Golden"
:toggle="false" :toggle="false"
:ui="{ :ui="{
root: 'fixed bg-transparent w-full', root: 'fixed bg-transparent w-full',
@@ -12,8 +12,11 @@
}" }"
> >
<template #left> <template #left>
<NuxtLink to="/" class="text-lg"> <NuxtLink to="/" class="text-lg flex items-center gap-2">
Rental <Icon name="my-icon:main-logo" :style="{ fontSize: isMobile ? '34px' : '48px' }" />
<div v-if="!isMobile">
AT Golden
</div>
</NuxtLink> </NuxtLink>
<div class="absolute left-1/2 transform -translate-x-1/2"> <div class="absolute left-1/2 transform -translate-x-1/2">
@@ -22,7 +25,11 @@
<!-- <UColorModeButton /> --> <!-- <UColorModeButton /> -->
<div class="ml-auto"> <div class="ml-auto">
<UButton href="#contacts" :size="isMobile ? 'md' : 'xl'" label="Связаться" /> <UButton
:href="route.path.startsWith('/about-us') ? '/' : '#contacts'"
:size="isMobile ? 'md' : 'xl'"
:label="route.path.startsWith('/about-us') ? 'Вернуться' : 'Связаться'"
/>
</div> </div>
</template> </template>
</UHeader> </UHeader>
@@ -33,6 +40,8 @@
</UMain> </UMain>
<BaseFooter /> <BaseFooter />
<PromotionModal v-model="open" />
</div> </div>
</template> </template>
@@ -40,12 +49,16 @@
import type { TabsItem } from '@nuxt/ui' import type { TabsItem } from '@nuxt/ui'
import { useMediaQuery } from '@vueuse/core' import { useMediaQuery } from '@vueuse/core'
import BaseFooter from '~/components/BaseFooter.vue' import BaseFooter from '~/components/BaseFooter.vue'
import PromotionModal from '~/components/PromotionModal.vue'
const isMobile = useMediaQuery('(max-width: 1280px)') const isMobile = useMediaQuery('(max-width: 1280px)')
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
const open = ref(false)
const toast = useToast()
const tabs = computed<TabsItem[]>(() => [ const tabs = computed<TabsItem[]>(() => [
{ {
label: isMobile.value ? '' : 'Главная', label: isMobile.value ? '' : 'Главная',
@@ -67,6 +80,31 @@ const tabs = computed<TabsItem[]>(() => [
}, },
]) ])
function showToast() {
if (toast?.toasts?.value?.length > 0) {
return
}
toast.add({
title: 'Уникальное предложение !',
description: 'Покупка машины под ключ, Кыргызстан',
duration: 30000,
actions: [{
icon: 'i-lucide-car',
label: 'Подробнее',
color: 'neutral',
variant: 'outline',
onClick: () => {
open.value = true
},
}],
})
}
onMounted(() => {
showToast()
})
const activeTab = ref(route?.path.split('/')[1] || '/') const activeTab = ref(route?.path.split('/')[1] || '/')
watch(() => activeTab.value, () => { watch(() => activeTab.value, () => {

View File

@@ -47,6 +47,9 @@ export default defineNuxtConfig({
}, },
app: { app: {
head: { head: {
link: [
{ rel: 'icon', type: 'image/svg+xml', href: '/main-logo.svg' },
],
meta: [ meta: [
{ {
name: 'viewport', name: 'viewport',
@@ -67,4 +70,12 @@ export default defineNuxtConfig({
fonts: { fonts: {
provider: 'google', provider: 'google',
}, },
icon: {
customCollections: [
{
prefix: 'my-icon',
dir: './assets/my-icons',
},
],
},
}) })

View File

@@ -19,9 +19,6 @@
"@nuxt/image": "1.10.0", "@nuxt/image": "1.10.0",
"@nuxt/ui": "^4.0.1", "@nuxt/ui": "^4.0.1",
"@nuxtjs/i18n": "^10.0.4", "@nuxtjs/i18n": "^10.0.4",
"@prisma/adapter-better-sqlite3": "^7.1.0",
"@prisma/adapter-libsql": "^7.1.0",
"@prisma/client": "^7.1.0",
"@tanstack/vue-query-devtools": "^5.87.1", "@tanstack/vue-query-devtools": "^5.87.1",
"@types/better-sqlite3": "^7.6.13", "@types/better-sqlite3": "^7.6.13",
"@types/node": "^24.10.2", "@types/node": "^24.10.2",
@@ -35,7 +32,6 @@
"maska": "^3.2.0", "maska": "^3.2.0",
"nodemailer": "^7.0.11", "nodemailer": "^7.0.11",
"nuxt": "^4.1.3", "nuxt": "^4.1.3",
"prisma": "^7.1.0",
"swiper": "^12.0.2", "swiper": "^12.0.2",
"typescript": "^5.6.3", "typescript": "^5.6.3",
"vue": "^3.5.17", "vue": "^3.5.17",

80
pages/about-us.vue Normal file
View File

@@ -0,0 +1,80 @@
<template>
<UPageHero
title="О нас"
description="Общество с ограниченной ответственностью «АТ Голден» — современный консьерж-сервис по недвижимости и автомобилям в Кыргызстане."
:ui="{
container: '!p-0 !pt-[160px] !sm:pt-[96px]',
}"
/>
<UContainer class="flex flex-col gap-16 mt-16">
<div class="flex flex-col gap-6 text-lg sm:text-xl">
<p>
Общество с ограниченной ответственностью «АТ Голден» это современный консьерж-сервис, созданный для того, чтобы сделать услуги по подбору недвижимости и автомобилей доступными каждому. Мы работаем по всему Кыргызстану, включая Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак и Узген, обеспечивая удобное и безопасное сопровождение сделок в любом из этих городов.
</p>
<p>
Наша компания действует по принципу «под ключ»: мы полностью берём на себя поиск, проверку объектов, юридическое сопровождение и оформление документов. Вам не нужно вникать в сложные детали рынка и бюрократические процессы команда профессионалов заботится о каждом этапе, чтобы сэкономить ваше время и исключить риски.
</p>
<p>
АТ Голден это надёжность, прозрачность и индивидуальный подход. Мы ценим доверие наших клиентов и стремимся к тому, чтобы каждая сделка проходила максимально комфортно, уверенно и безопасно.
</p>
</div>
<UCard>
<h2 class="text-2xl font-semibold mb-2">
Наши реквизиты:
</h2>
<p>ООО «АТ Голден»</p>
<p>ИНН: 00406202010276</p>
<p>Регистрационный номер: 190962-3301-ООО</p>
<p>Адрес: г. Бишкек, Свердловский район, ул. Ибраимова, дом 115/4</p>
<a href="tel:+996700115500" class="hover:opacity-100 opacity-70">Телефон: +9 (965) 042-80-490</a>
</UCard>
<div class="flex flex-col sm:flex-row gap-4 justify-between">
<a
href="/Политикаонфиденциальности_АТолден.pdf"
target="_blank"
>
<UCard variant="subtle">
Политика конфиденциальности
</UCard>
</a>
<a
href="/Пользовательское_соглашение_АТолден.pdf"
target="_blank"
>
<UCard variant="subtle">
Пользовательское соглашение
</UCard>
</a>
</div>
</UContainer>
</template>
<script setup lang="ts">
useHead({
title: 'О нас — АТ Голден, консьерж-сервис недвижимости и автомобилей в Кыргызстане',
meta: [
{
name: 'description',
content: 'Общество с ограниченной ответственностью «АТ Голден» — современный консьерж-сервис по подбору недвижимости и автомобилей в Кыргызстане. Надёжное сопровождение сделок в Бишкеке, Оше, Джалал-Абаде, Караколе и других городах.',
},
{
name: 'keywords',
content: 'АТ Голден, консьерж-сервис, недвижимость Кыргызстан, автомобили Кыргызстан, услуги под ключ, юридическое сопровождение, безопасные сделки, Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак, Узген',
},
{
property: 'og:title',
content: 'О нас — АТ Голден, консьерж-сервис недвижимости и автомобилей в Кыргызстане',
},
{
property: 'og:description',
content: 'Общество с ограниченной ответственностью «АТ Голден» — современный консьерж-сервис по подбору недвижимости и автомобилей в Кыргызстане. Надёжное сопровождение сделок в Бишкеке, Оше, Джалал-Абаде, Караколе и других городах.',
},
],
})
</script>

View File

@@ -2,14 +2,17 @@
<div class="index-page"> <div class="index-page">
<UPageHero <UPageHero
title="Консьерж-сервис - доступный каждому" title="Консьерж-сервис - доступный каждому"
:description="`Недвижимость и авто под ключ\nМы берем на себя все заботы по поиску, проверке и оформлению недвижимости и автомобилей. Экономьте время — доверьтесь профессионалам.`" description="Недвижимость и авто под ключ в Кыргызстане. Мы берем на себя все заботы по поиску, проверке и оформлению недвижимости и автомобилей. Экономьте время — доверьтесь профессионалам."
class="index-page__hero" class="index-page__hero"
:ui="{
description: 'text-lg sm:text-xl/8 text-property',
}"
> >
<template #footer> <template #footer>
<div class="flex gap-2 place-content-center h-[48px]"> <div class="flex gap-2 place-content-center h-[48px]">
<UButton <UButton
size="xl" size="xl"
label="Узанть больше" label="Узнать больше"
href="#services" href="#services"
/> />
@@ -38,7 +41,13 @@
<script setup lang="ts"> <script setup lang="ts">
useHead({ useHead({
title: 'Rental - консьерж-сервис', title: 'АТ Голден — доступный консьерж-сервис для авто и недвижимости в Кыргызстане (Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак и Узген)',
meta: [
{ name: 'description', content: 'Поиск, проверка и оформление недвижимости и автомобилей в Кыргызстане (Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак и Узген). АТ Голден — доступный консьерж-сервис, который заботится о каждом этапе сделки. Надёжно, безопасно, профессионально.' },
{ name: 'keywords', content: 'консьерж-сервис, услуги для авто, услуги для недвижимости, покупка авто, продажа авто, оформление авто, проверка авто, недвижимость Кыргызстан, покупка недвижимости, продажа недвижимости, оформление недвижимости, Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак, Узген, безопасные сделки, профессиональный сервис' },
{ property: 'og:title', content: 'АТ Голден — доступный консьерж-сервис для авто и недвижимости в Кыргызстане (Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак и Узген)' },
{ property: 'og:description', content: 'Поиск, проверка и оформление недвижимости и автомобилей в Кыргызстане (Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак и Узген). АТ Голден — доступный консьерж-сервис, который заботится о каждом этапе сделки. Надёжно, безопасно, профессионально.' },
],
}) })
</script> </script>

View File

@@ -2,8 +2,11 @@
<div class="nedvizhimost-page"> <div class="nedvizhimost-page">
<UPageHero <UPageHero
title="Недвижимость вашей мечты" title="Недвижимость вашей мечты"
:description="`Помогаем найти, купить или продать недвижимость с полным\n юридическим сопровождением и гарантией безопасности сделки.`" description="Помогаем найти, купить или продать недвижимость с полным юридическим сопровождением и гарантией безопасности сделки в Кыргызстане (Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак и Узген)."
class="nedvizhimost-page__hero" class="nedvizhimost-page__hero"
:ui="{
description: 'text-lg sm:text-xl/8 text-property',
}"
> >
<template #footer> <template #footer>
<div class="flex gap-2 place-content-center h-[48px]"> <div class="flex gap-2 place-content-center h-[48px]">
@@ -90,7 +93,19 @@ const { cartByCategory } = useMock()
const previewItems = computed(() => cartByCategory('nedvizhimost')) const previewItems = computed(() => cartByCategory('nedvizhimost'))
useHead({ useHead({
title: 'Rental - недвижимость', title: 'Недвижимость в Кыргызстане — покупка, продажа и аренда с полным сопровождением',
meta: [
{
name: 'description',
content: 'АТ Голден помогает найти, купить, продать или арендовать недвижимость в Бишкеке, Оше, Джалал-Абаде, Караколе и других городах Кыргызстана. Полное юридическое сопровождение и безопасные сделки.',
},
{
name: 'keywords',
content: 'недвижимость Кыргызстан, покупка недвижимости, продажа недвижимости, аренда жилья, коммерческая недвижимость, квартиры, дома, апартаменты, безопасные сделки, юридическая проверка, сопровождение сделок, Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак, Узген',
},
{ property: 'og:title', content: 'Недвижимость в Кыргызстане — покупка, продажа и аренда с полным сопровождением' },
{ property: 'og:description', content: 'АТ Голден помогает найти, купить, продать или арендовать недвижимость в Бишкеке, Оше, Джалал-Абаде, Караколе и других городах Кыргызстана. Полное юридическое сопровождение и безопасные сделки.' },
],
}) })
</script> </script>

View File

@@ -169,7 +169,25 @@ onUnmounted(() => {
}) })
useHead({ useHead({
title: `Rental - ${cart?.title}`, title: `${cart?.title} — подробная информация и услуги от АТ Голден`,
meta: [
{
name: 'description',
content: `${cart?.title} доступен через АТ Голден. ${cart?.description.replace(/<[^>]+(>|$)/g, '').slice(0, 160)}. Полное сопровождение сделки, юридическая проверка и безопасное оформление.`,
},
{
name: 'keywords',
content: `${cart?.category}, ${cart?.title}, аренда ${cart?.category}, покупка ${cart?.category}, продажа ${cart?.category}, проверка документов, безопасная сделка, АТ Голден, Кыргызстан, Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак, Узген`,
},
{
property: 'og:title',
content: `${cart?.title} — подробная информация и услуги от АТ Голден`,
},
{
property: 'og:description',
content: `${cart?.title} доступен через АТ Голден. ${cart?.description.replace(/<[^>]+(>|$)/g, '').slice(0, 160)}. Полное сопровождение сделки, юридическая проверка и безопасное оформление.`,
},
],
}) })
</script> </script>

View File

@@ -2,8 +2,11 @@
<div class="transport-page"> <div class="transport-page">
<UPageHero <UPageHero
title="Премиум автомобили под ключ" title="Премиум автомобили под ключ"
:description="`Аренда, покупка и продажа автомобилей премиум-класса с полным\n сервисным сопровождением и гарантией качества.`" description="Аренда, покупка и продажа автомобилей премиум-класса с полным сервисным сопровождением и гарантией качества в Кыргызстане (Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак и Узген)."
class="transport-page__hero" class="transport-page__hero"
:ui="{
description: 'text-lg sm:text-xl/8 text-property',
}"
> >
<template #footer> <template #footer>
<div class="flex gap-2 place-content-center h-[48px]"> <div class="flex gap-2 place-content-center h-[48px]">
@@ -86,7 +89,23 @@ const { cartByCategory } = useMock()
const previewItems = computed(() => cartByCategory('transport')) const previewItems = computed(() => cartByCategory('transport'))
useHead({ useHead({
title: 'Rental - автомобили', title: 'Премиум автомобили в Кыргызстане — аренда, покупка и продажа с полным сопровождением',
meta: [
{
name: 'description',
content: 'АТ Голден предлагает аренду, покупку и продажу автомобилей премиум-класса в Бишкеке, Оше, Джалал-Абаде, Караколе и других городах Кыргызстана. Полное сервисное сопровождение, юридическая проверка и безопасность сделок.',
},
{
name: 'keywords',
content: 'автомобили премиум-класса, аренда авто, краткосрочная аренда, долгосрочная аренда, покупка автомобиля, продажа автомобиля, проверка юридической чистоты, техническая экспертиза, безопасные сделки, сопровождение сделки, доставка авто, страховка авто, Бишкек, Ош, Джалал-Абад, Каракол, Балыкчы, Талас, Токмак, Узген',
},
{ property: 'og:title', content: 'Премиум автомобили в Кыргызстане — аренда, покупка и продажа с полным сопровождением' },
{ property: 'og:description', content: 'АТ Голден предлагает аренду, покупку и продажу автомобилей премиум-класса в Бишкеке, Оше, Джалал-Абаде, Караколе и других городах Кыргызстана. Полное сервисное сопровождение, юридическая проверка и безопасность сделок.' },
],
})
definePageMeta({
layout: 'default',
}) })
</script> </script>

View File

@@ -1,14 +0,0 @@
import { defineConfig, env } from 'prisma/config'
// This file was generated by Prisma and assumes you have installed the following:
// npm install --save-dev prisma dotenv
import 'dotenv/config'
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
},
datasource: {
url: env('DATABASE_URL'),
},
})

View File

@@ -1,24 +0,0 @@
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* This file should be your main import to use Prisma-related types and utilities in a browser.
* Use it to get access to models, enums, and input types.
*
* This file does not contain a `PrismaClient` class, nor several other helpers that are intended as server-side only.
* See `client.ts` for the standard, server-side entry point.
*
* 🟢 You can import this file directly.
*/
import * as Prisma from './internal/prismaNamespaceBrowser'
export { Prisma }
export * as $Enums from './enums'
export * from './enums';
/**
* Model User
*
*/
export type User = Prisma.UserModel

View File

@@ -1,46 +0,0 @@
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* This file should be your main import to use Prisma. Through it you get access to all the models, enums, and input types.
* If you're looking for something you can import in the client-side of your application, please refer to the `browser.ts` file instead.
*
* 🟢 You can import this file directly.
*/
import * as process from 'node:process'
import * as path from 'node:path'
import { fileURLToPath } from 'node:url'
globalThis['__dirname'] = path.dirname(fileURLToPath(import.meta.url))
import * as runtime from "@prisma/client/runtime/client"
import * as $Enums from "./enums"
import * as $Class from "./internal/class"
import * as Prisma from "./internal/prismaNamespace"
export * as $Enums from './enums'
export * from "./enums"
/**
* ## Prisma Client
*
* Type-safe database client for TypeScript
* @example
* ```
* const prisma = new PrismaClient()
* // Fetch zero or more Users
* const users = await prisma.user.findMany()
* ```
*
* Read more in our [docs](https://pris.ly/d/client).
*/
export const PrismaClient = $Class.getPrismaClientClass()
export type PrismaClient<LogOpts extends Prisma.LogLevel = never, OmitOpts extends Prisma.PrismaClientOptions["omit"] = Prisma.PrismaClientOptions["omit"], ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = $Class.PrismaClient<LogOpts, OmitOpts, ExtArgs>
export { Prisma }
/**
* Model User
*
*/
export type User = Prisma.UserModel

View File

@@ -1,272 +0,0 @@
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* This file exports various common sort, input & filter types that are not directly linked to a particular model.
*
* 🟢 You can import this file directly.
*/
import type * as runtime from "@prisma/client/runtime/client"
import * as $Enums from "./enums"
import type * as Prisma from "./internal/prismaNamespace"
export type IntFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
not?: Prisma.NestedIntFilter<$PrismaModel> | number
}
export type StringFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringFilter<$PrismaModel> | string
}
export type StringNullableFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null
}
export type DateTimeFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[]
notIn?: Date[] | string[]
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string
}
export type SortOrderInput = {
sort: Prisma.SortOrder
nulls?: Prisma.NullsOrder
}
export type IntWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
not?: Prisma.NestedIntWithAggregatesFilter<$PrismaModel> | number
_count?: Prisma.NestedIntFilter<$PrismaModel>
_avg?: Prisma.NestedFloatFilter<$PrismaModel>
_sum?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedIntFilter<$PrismaModel>
_max?: Prisma.NestedIntFilter<$PrismaModel>
}
export type StringWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedStringFilter<$PrismaModel>
_max?: Prisma.NestedStringFilter<$PrismaModel>
}
export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>
_min?: Prisma.NestedStringNullableFilter<$PrismaModel>
_max?: Prisma.NestedStringNullableFilter<$PrismaModel>
}
export type DateTimeWithAggregatesFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[]
notIn?: Date[] | string[]
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
not?: Prisma.NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedDateTimeFilter<$PrismaModel>
_max?: Prisma.NestedDateTimeFilter<$PrismaModel>
}
export type NestedIntFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
not?: Prisma.NestedIntFilter<$PrismaModel> | number
}
export type NestedStringFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringFilter<$PrismaModel> | string
}
export type NestedStringNullableFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null
}
export type NestedDateTimeFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[]
notIn?: Date[] | string[]
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string
}
export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
not?: Prisma.NestedIntWithAggregatesFilter<$PrismaModel> | number
_count?: Prisma.NestedIntFilter<$PrismaModel>
_avg?: Prisma.NestedFloatFilter<$PrismaModel>
_sum?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedIntFilter<$PrismaModel>
_max?: Prisma.NestedIntFilter<$PrismaModel>
}
export type NestedFloatFilter<$PrismaModel = never> = {
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
not?: Prisma.NestedFloatFilter<$PrismaModel> | number
}
export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedStringFilter<$PrismaModel>
_max?: Prisma.NestedStringFilter<$PrismaModel>
}
export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>
_min?: Prisma.NestedStringNullableFilter<$PrismaModel>
_max?: Prisma.NestedStringNullableFilter<$PrismaModel>
}
export type NestedIntNullableFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null
}
export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[]
notIn?: Date[] | string[]
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
not?: Prisma.NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedDateTimeFilter<$PrismaModel>
_max?: Prisma.NestedDateTimeFilter<$PrismaModel>
}

View File

@@ -1,15 +0,0 @@
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* This file exports all enum related types from the schema.
*
* 🟢 You can import this file directly.
*/
// This file is empty because there are no enums in the schema.
export {}

View File

@@ -1,190 +0,0 @@
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* WARNING: This is an internal file that is subject to change!
*
* 🛑 Under no circumstances should you import this file directly! 🛑
*
* Please import the `PrismaClient` class from the `client.ts` file instead.
*/
import * as runtime from "@prisma/client/runtime/client"
import type * as Prisma from "./prismaNamespace"
const config: runtime.GetPrismaClientConfig = {
"previewFeatures": [],
"clientVersion": "7.1.0",
"engineVersion": "ab635e6b9d606fa5c8fb8b1a7f909c3c3c1c98ba",
"activeProvider": "sqlite",
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./generated\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n name String\n phone String\n service String?\n comment String?\n route String?\n createdAt DateTime @default(now())\n}\n",
"runtimeDataModel": {
"models": {},
"enums": {},
"types": {}
}
}
config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"service\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"comment\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"route\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> {
const { Buffer } = await import('node:buffer')
const wasmArray = Buffer.from(wasmBase64, 'base64')
return new WebAssembly.Module(wasmArray)
}
config.compilerWasm = {
getRuntime: async () => await import("@prisma/client/runtime/query_compiler_bg.sqlite.mjs"),
getQueryCompilerWasmModule: async () => {
const { wasm } = await import("@prisma/client/runtime/query_compiler_bg.sqlite.wasm-base64.mjs")
return await decodeBase64AsWasm(wasm)
}
}
export type LogOptions<ClientOptions extends Prisma.PrismaClientOptions> =
'log' extends keyof ClientOptions ? ClientOptions['log'] extends Array<Prisma.LogLevel | Prisma.LogDefinition> ? Prisma.GetEvents<ClientOptions['log']> : never : never
export interface PrismaClientConstructor {
/**
* ## Prisma Client
*
* Type-safe database client for TypeScript
* @example
* ```
* const prisma = new PrismaClient()
* // Fetch zero or more Users
* const users = await prisma.user.findMany()
* ```
*
* Read more in our [docs](https://pris.ly/d/client).
*/
new <
Options extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions,
LogOpts extends LogOptions<Options> = LogOptions<Options>,
OmitOpts extends Prisma.PrismaClientOptions['omit'] = Options extends { omit: infer U } ? U : Prisma.PrismaClientOptions['omit'],
ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs
>(options: Prisma.Subset<Options, Prisma.PrismaClientOptions> ): PrismaClient<LogOpts, OmitOpts, ExtArgs>
}
/**
* ## Prisma Client
*
* Type-safe database client for TypeScript
* @example
* ```
* const prisma = new PrismaClient()
* // Fetch zero or more Users
* const users = await prisma.user.findMany()
* ```
*
* Read more in our [docs](https://pris.ly/d/client).
*/
export interface PrismaClient<
in LogOpts extends Prisma.LogLevel = never,
in out OmitOpts extends Prisma.PrismaClientOptions['omit'] = undefined,
in out ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs
> {
[K: symbol]: { types: Prisma.TypeMap<ExtArgs>['other'] }
$on<V extends LogOpts>(eventType: V, callback: (event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent) => void): PrismaClient;
/**
* Connect with the database
*/
$connect(): runtime.Types.Utils.JsPromise<void>;
/**
* Disconnect from the database
*/
$disconnect(): runtime.Types.Utils.JsPromise<void>;
/**
* Executes a prepared raw query and returns the number of affected rows.
* @example
* ```
* const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`
* ```
*
* Read more in our [docs](https://pris.ly/d/raw-queries).
*/
$executeRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<number>;
/**
* Executes a raw query and returns the number of affected rows.
* Susceptible to SQL injections, see documentation.
* @example
* ```
* const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com')
* ```
*
* Read more in our [docs](https://pris.ly/d/raw-queries).
*/
$executeRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<number>;
/**
* Performs a prepared raw query and returns the `SELECT` data.
* @example
* ```
* const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`
* ```
*
* Read more in our [docs](https://pris.ly/d/raw-queries).
*/
$queryRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<T>;
/**
* Performs a raw query and returns the `SELECT` data.
* Susceptible to SQL injections, see documentation.
* @example
* ```
* const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com')
* ```
*
* Read more in our [docs](https://pris.ly/d/raw-queries).
*/
$queryRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<T>;
/**
* Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole.
* @example
* ```
* const [george, bob, alice] = await prisma.$transaction([
* prisma.user.create({ data: { name: 'George' } }),
* prisma.user.create({ data: { name: 'Bob' } }),
* prisma.user.create({ data: { name: 'Alice' } }),
* ])
* ```
*
* Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions).
*/
$transaction<P extends Prisma.PrismaPromise<any>[]>(arg: [...P], options?: { isolationLevel?: Prisma.TransactionIsolationLevel }): runtime.Types.Utils.JsPromise<runtime.Types.Utils.UnwrapTuple<P>>
$transaction<R>(fn: (prisma: Omit<PrismaClient, runtime.ITXClientDenyList>) => runtime.Types.Utils.JsPromise<R>, options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): runtime.Types.Utils.JsPromise<R>
$extends: runtime.Types.Extensions.ExtendsHook<"extends", Prisma.TypeMapCb<OmitOpts>, ExtArgs, runtime.Types.Utils.Call<Prisma.TypeMapCb<OmitOpts>, {
extArgs: ExtArgs
}>>
/**
* `prisma.user`: Exposes CRUD operations for the **User** model.
* Example usage:
* ```ts
* // Fetch zero or more Users
* const users = await prisma.user.findMany()
* ```
*/
get user(): Prisma.UserDelegate<ExtArgs, { omit: OmitOpts }>;
}
export function getPrismaClientClass(): PrismaClientConstructor {
return runtime.getPrismaClient(config) as unknown as PrismaClientConstructor
}

View File

@@ -1,737 +0,0 @@
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* WARNING: This is an internal file that is subject to change!
*
* 🛑 Under no circumstances should you import this file directly! 🛑
*
* All exports from this file are wrapped under a `Prisma` namespace object in the client.ts file.
* While this enables partial backward compatibility, it is not part of the stable public API.
*
* If you are looking for your Models, Enums, and Input Types, please import them from the respective
* model files in the `model` directory!
*/
import * as runtime from "@prisma/client/runtime/client"
import type * as Prisma from "../models"
import { type PrismaClient } from "./class"
export type * from '../models'
export type DMMF = typeof runtime.DMMF
export type PrismaPromise<T> = runtime.Types.Public.PrismaPromise<T>
/**
* Prisma Errors
*/
export const PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError
export type PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError
export const PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError
export type PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError
export const PrismaClientRustPanicError = runtime.PrismaClientRustPanicError
export type PrismaClientRustPanicError = runtime.PrismaClientRustPanicError
export const PrismaClientInitializationError = runtime.PrismaClientInitializationError
export type PrismaClientInitializationError = runtime.PrismaClientInitializationError
export const PrismaClientValidationError = runtime.PrismaClientValidationError
export type PrismaClientValidationError = runtime.PrismaClientValidationError
/**
* Re-export of sql-template-tag
*/
export const sql = runtime.sqltag
export const empty = runtime.empty
export const join = runtime.join
export const raw = runtime.raw
export const Sql = runtime.Sql
export type Sql = runtime.Sql
/**
* Decimal.js
*/
export const Decimal = runtime.Decimal
export type Decimal = runtime.Decimal
export type DecimalJsLike = runtime.DecimalJsLike
/**
* Extensions
*/
export type Extension = runtime.Types.Extensions.UserArgs
export const getExtensionContext = runtime.Extensions.getExtensionContext
export type Args<T, F extends runtime.Operation> = runtime.Types.Public.Args<T, F>
export type Payload<T, F extends runtime.Operation = never> = runtime.Types.Public.Payload<T, F>
export type Result<T, A, F extends runtime.Operation> = runtime.Types.Public.Result<T, A, F>
export type Exact<A, W> = runtime.Types.Public.Exact<A, W>
export type PrismaVersion = {
client: string
engine: string
}
/**
* Prisma Client JS version: 7.1.0
* Query Engine version: ab635e6b9d606fa5c8fb8b1a7f909c3c3c1c98ba
*/
export const prismaVersion: PrismaVersion = {
client: "7.1.0",
engine: "ab635e6b9d606fa5c8fb8b1a7f909c3c3c1c98ba"
}
/**
* Utility Types
*/
export type Bytes = runtime.Bytes
export type JsonObject = runtime.JsonObject
export type JsonArray = runtime.JsonArray
export type JsonValue = runtime.JsonValue
export type InputJsonObject = runtime.InputJsonObject
export type InputJsonArray = runtime.InputJsonArray
export type InputJsonValue = runtime.InputJsonValue
export const NullTypes = {
DbNull: runtime.NullTypes.DbNull as (new (secret: never) => typeof runtime.DbNull),
JsonNull: runtime.NullTypes.JsonNull as (new (secret: never) => typeof runtime.JsonNull),
AnyNull: runtime.NullTypes.AnyNull as (new (secret: never) => typeof runtime.AnyNull),
}
/**
* Helper for filtering JSON entries that have `null` on the database (empty on the db)
*
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
*/
export const DbNull = runtime.DbNull
/**
* Helper for filtering JSON entries that have JSON `null` values (not empty on the db)
*
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
*/
export const JsonNull = runtime.JsonNull
/**
* Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`
*
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
*/
export const AnyNull = runtime.AnyNull
type SelectAndInclude = {
select: any
include: any
}
type SelectAndOmit = {
select: any
omit: any
}
/**
* From T, pick a set of properties whose keys are in the union K
*/
type Prisma__Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
export type Enumerable<T> = T | Array<T>;
/**
* Subset
* @desc From `T` pick properties that exist in `U`. Simple version of Intersection
*/
export type Subset<T, U> = {
[key in keyof T]: key extends keyof U ? T[key] : never;
};
/**
* SelectSubset
* @desc From `T` pick properties that exist in `U`. Simple version of Intersection.
* Additionally, it validates, if both select and include are present. If the case, it errors.
*/
export type SelectSubset<T, U> = {
[key in keyof T]: key extends keyof U ? T[key] : never
} &
(T extends SelectAndInclude
? 'Please either choose `select` or `include`.'
: T extends SelectAndOmit
? 'Please either choose `select` or `omit`.'
: {})
/**
* Subset + Intersection
* @desc From `T` pick properties that exist in `U` and intersect `K`
*/
export type SubsetIntersection<T, U, K> = {
[key in keyof T]: key extends keyof U ? T[key] : never
} &
K
type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };
/**
* XOR is needed to have a real mutually exclusive union type
* https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types
*/
export type XOR<T, U> =
T extends object ?
U extends object ?
(Without<T, U> & U) | (Without<U, T> & T)
: U : T
/**
* Is T a Record?
*/
type IsObject<T extends any> = T extends Array<any>
? False
: T extends Date
? False
: T extends Uint8Array
? False
: T extends BigInt
? False
: T extends object
? True
: False
/**
* If it's T[], return T
*/
export type UnEnumerate<T extends unknown> = T extends Array<infer U> ? U : T
/**
* From ts-toolbelt
*/
type __Either<O extends object, K extends Key> = Omit<O, K> &
{
// Merge all but K
[P in K]: Prisma__Pick<O, P & keyof O> // With K possibilities
}[K]
type EitherStrict<O extends object, K extends Key> = Strict<__Either<O, K>>
type EitherLoose<O extends object, K extends Key> = ComputeRaw<__Either<O, K>>
type _Either<
O extends object,
K extends Key,
strict extends Boolean
> = {
1: EitherStrict<O, K>
0: EitherLoose<O, K>
}[strict]
export type Either<
O extends object,
K extends Key,
strict extends Boolean = 1
> = O extends unknown ? _Either<O, K, strict> : never
export type Union = any
export type PatchUndefined<O extends object, O1 extends object> = {
[K in keyof O]: O[K] extends undefined ? At<O1, K> : O[K]
} & {}
/** Helper Types for "Merge" **/
export type IntersectOf<U extends Union> = (
U extends unknown ? (k: U) => void : never
) extends (k: infer I) => void
? I
: never
export type Overwrite<O extends object, O1 extends object> = {
[K in keyof O]: K extends keyof O1 ? O1[K] : O[K];
} & {};
type _Merge<U extends object> = IntersectOf<Overwrite<U, {
[K in keyof U]-?: At<U, K>;
}>>;
type Key = string | number | symbol;
type AtStrict<O extends object, K extends Key> = O[K & keyof O];
type AtLoose<O extends object, K extends Key> = O extends unknown ? AtStrict<O, K> : never;
export type At<O extends object, K extends Key, strict extends Boolean = 1> = {
1: AtStrict<O, K>;
0: AtLoose<O, K>;
}[strict];
export type ComputeRaw<A extends any> = A extends Function ? A : {
[K in keyof A]: A[K];
} & {};
export type OptionalFlat<O> = {
[K in keyof O]?: O[K];
} & {};
type _Record<K extends keyof any, T> = {
[P in K]: T;
};
// cause typescript not to expand types and preserve names
type NoExpand<T> = T extends unknown ? T : never;
// this type assumes the passed object is entirely optional
export type AtLeast<O extends object, K extends string> = NoExpand<
O extends unknown
? | (K extends keyof O ? { [P in K]: O[P] } & O : O)
| {[P in keyof O as P extends K ? P : never]-?: O[P]} & O
: never>;
type _Strict<U, _U = U> = U extends unknown ? U & OptionalFlat<_Record<Exclude<Keys<_U>, keyof U>, never>> : never;
export type Strict<U extends object> = ComputeRaw<_Strict<U>>;
/** End Helper Types for "Merge" **/
export type Merge<U extends object> = ComputeRaw<_Merge<Strict<U>>>;
export type Boolean = True | False
export type True = 1
export type False = 0
export type Not<B extends Boolean> = {
0: 1
1: 0
}[B]
export type Extends<A1 extends any, A2 extends any> = [A1] extends [never]
? 0 // anything `never` is false
: A1 extends A2
? 1
: 0
export type Has<U extends Union, U1 extends Union> = Not<
Extends<Exclude<U1, U>, U1>
>
export type Or<B1 extends Boolean, B2 extends Boolean> = {
0: {
0: 0
1: 1
}
1: {
0: 1
1: 1
}
}[B1][B2]
export type Keys<U extends Union> = U extends unknown ? keyof U : never
export type GetScalarType<T, O> = O extends object ? {
[P in keyof T]: P extends keyof O
? O[P]
: never
} : never
type FieldPaths<
T,
U = Omit<T, '_avg' | '_sum' | '_count' | '_min' | '_max'>
> = IsObject<T> extends True ? U : T
export type GetHavingFields<T> = {
[K in keyof T]: Or<
Or<Extends<'OR', K>, Extends<'AND', K>>,
Extends<'NOT', K>
> extends True
? // infer is only needed to not hit TS limit
// based on the brilliant idea of Pierre-Antoine Mills
// https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437
T[K] extends infer TK
? GetHavingFields<UnEnumerate<TK> extends object ? Merge<UnEnumerate<TK>> : never>
: never
: {} extends FieldPaths<T[K]>
? never
: K
}[keyof T]
/**
* Convert tuple to union
*/
type _TupleToUnion<T> = T extends (infer E)[] ? E : never
type TupleToUnion<K extends readonly any[]> = _TupleToUnion<K>
export type MaybeTupleToUnion<T> = T extends any[] ? TupleToUnion<T> : T
/**
* Like `Pick`, but additionally can also accept an array of keys
*/
export type PickEnumerable<T, K extends Enumerable<keyof T> | keyof T> = Prisma__Pick<T, MaybeTupleToUnion<K>>
/**
* Exclude all keys with underscores
*/
export type ExcludeUnderscoreKeys<T extends string> = T extends `_${string}` ? never : T
export type FieldRef<Model, FieldType> = runtime.FieldRef<Model, FieldType>
type FieldRefInputType<Model, FieldType> = Model extends never ? never : FieldRef<Model, FieldType>
export const ModelName = {
User: 'User'
} as const
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
export interface TypeMapCb<GlobalOmitOptions = {}> extends runtime.Types.Utils.Fn<{extArgs: runtime.Types.Extensions.InternalArgs }, runtime.Types.Utils.Record<string, any>> {
returns: TypeMap<this['params']['extArgs'], GlobalOmitOptions>
}
export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, GlobalOmitOptions = {}> = {
globalOmitOptions: {
omit: GlobalOmitOptions
}
meta: {
modelProps: "user"
txIsolationLevel: TransactionIsolationLevel
}
model: {
User: {
payload: Prisma.$UserPayload<ExtArgs>
fields: Prisma.UserFieldRefs
operations: {
findUnique: {
args: Prisma.UserFindUniqueArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload> | null
}
findUniqueOrThrow: {
args: Prisma.UserFindUniqueOrThrowArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
}
findFirst: {
args: Prisma.UserFindFirstArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload> | null
}
findFirstOrThrow: {
args: Prisma.UserFindFirstOrThrowArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
}
findMany: {
args: Prisma.UserFindManyArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>[]
}
create: {
args: Prisma.UserCreateArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
}
createMany: {
args: Prisma.UserCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.UserCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>[]
}
delete: {
args: Prisma.UserDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
}
update: {
args: Prisma.UserUpdateArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
}
deleteMany: {
args: Prisma.UserDeleteManyArgs<ExtArgs>
result: BatchPayload
}
updateMany: {
args: Prisma.UserUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.UserUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>[]
}
upsert: {
args: Prisma.UserUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
}
aggregate: {
args: Prisma.UserAggregateArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.AggregateUser>
}
groupBy: {
args: Prisma.UserGroupByArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.UserGroupByOutputType>[]
}
count: {
args: Prisma.UserCountArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.UserCountAggregateOutputType> | number
}
}
}
}
} & {
other: {
payload: any
operations: {
$executeRaw: {
args: [query: TemplateStringsArray | Sql, ...values: any[]],
result: any
}
$executeRawUnsafe: {
args: [query: string, ...values: any[]],
result: any
}
$queryRaw: {
args: [query: TemplateStringsArray | Sql, ...values: any[]],
result: any
}
$queryRawUnsafe: {
args: [query: string, ...values: any[]],
result: any
}
}
}
}
/**
* Enums
*/
export const TransactionIsolationLevel = runtime.makeStrictEnum({
Serializable: 'Serializable'
} as const)
export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]
export const UserScalarFieldEnum = {
id: 'id',
name: 'name',
phone: 'phone',
service: 'service',
comment: 'comment',
route: 'route',
createdAt: 'createdAt'
} as const
export type UserScalarFieldEnum = (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]
export const SortOrder = {
asc: 'asc',
desc: 'desc'
} as const
export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]
export const NullsOrder = {
first: 'first',
last: 'last'
} as const
export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]
/**
* Field references
*/
/**
* Reference to a field of type 'Int'
*/
export type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int'>
/**
* Reference to a field of type 'String'
*/
export type StringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String'>
/**
* Reference to a field of type 'DateTime'
*/
export type DateTimeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DateTime'>
/**
* Reference to a field of type 'Float'
*/
export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float'>
/**
* Batch Payload for updateMany & deleteMany & createMany
*/
export type BatchPayload = {
count: number
}
export const defineExtension = runtime.Extensions.defineExtension as unknown as runtime.Types.Extensions.ExtendsHook<"define", TypeMapCb, runtime.Types.Extensions.DefaultArgs>
export type DefaultPrismaClient = PrismaClient
export type ErrorFormat = 'pretty' | 'colorless' | 'minimal'
export type PrismaClientOptions = ({
/**
* Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-pg`.
*/
adapter: runtime.SqlDriverAdapterFactory
accelerateUrl?: never
} | {
/**
* Prisma Accelerate URL allowing the client to connect through Accelerate instead of a direct database.
*/
accelerateUrl: string
adapter?: never
}) & {
/**
* @default "colorless"
*/
errorFormat?: ErrorFormat
/**
* @example
* ```
* // Shorthand for `emit: 'stdout'`
* log: ['query', 'info', 'warn', 'error']
*
* // Emit as events only
* log: [
* { emit: 'event', level: 'query' },
* { emit: 'event', level: 'info' },
* { emit: 'event', level: 'warn' }
* { emit: 'event', level: 'error' }
* ]
*
* / Emit as events and log to stdout
* og: [
* { emit: 'stdout', level: 'query' },
* { emit: 'stdout', level: 'info' },
* { emit: 'stdout', level: 'warn' }
* { emit: 'stdout', level: 'error' }
*
* ```
* Read more in our [docs](https://pris.ly/d/logging).
*/
log?: (LogLevel | LogDefinition)[]
/**
* The default values for transactionOptions
* maxWait ?= 2000
* timeout ?= 5000
*/
transactionOptions?: {
maxWait?: number
timeout?: number
isolationLevel?: TransactionIsolationLevel
}
/**
* Global configuration for omitting model fields by default.
*
* @example
* ```
* const prisma = new PrismaClient({
* omit: {
* user: {
* password: true
* }
* }
* })
* ```
*/
omit?: GlobalOmitConfig
/**
* SQL commenter plugins that add metadata to SQL queries as comments.
* Comments follow the sqlcommenter format: https://google.github.io/sqlcommenter/
*
* @example
* ```
* const prisma = new PrismaClient({
* adapter,
* comments: [
* traceContext(),
* queryInsights(),
* ],
* })
* ```
*/
comments?: runtime.SqlCommenterPlugin[]
}
export type GlobalOmitConfig = {
user?: Prisma.UserOmit
}
/* Types for Logging */
export type LogLevel = 'info' | 'query' | 'warn' | 'error'
export type LogDefinition = {
level: LogLevel
emit: 'stdout' | 'event'
}
export type CheckIsLogLevel<T> = T extends LogLevel ? T : never;
export type GetLogType<T> = CheckIsLogLevel<
T extends LogDefinition ? T['level'] : T
>;
export type GetEvents<T extends any[]> = T extends Array<LogLevel | LogDefinition>
? GetLogType<T[number]>
: never;
export type QueryEvent = {
timestamp: Date
query: string
params: string
duration: number
target: string
}
export type LogEvent = {
timestamp: Date
message: string
target: string
}
/* End Types for Logging */
export type PrismaAction =
| 'findUnique'
| 'findUniqueOrThrow'
| 'findMany'
| 'findFirst'
| 'findFirstOrThrow'
| 'create'
| 'createMany'
| 'createManyAndReturn'
| 'update'
| 'updateMany'
| 'updateManyAndReturn'
| 'upsert'
| 'delete'
| 'deleteMany'
| 'executeRaw'
| 'queryRaw'
| 'aggregate'
| 'count'
| 'runCommandRaw'
| 'findRaw'
| 'groupBy'
/**
* `PrismaClient` proxy available in interactive transactions.
*/
export type TransactionClient = Omit<DefaultPrismaClient, runtime.ITXClientDenyList>

View File

@@ -1,97 +0,0 @@
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* WARNING: This is an internal file that is subject to change!
*
* 🛑 Under no circumstances should you import this file directly! 🛑
*
* All exports from this file are wrapped under a `Prisma` namespace object in the browser.ts file.
* While this enables partial backward compatibility, it is not part of the stable public API.
*
* If you are looking for your Models, Enums, and Input Types, please import them from the respective
* model files in the `model` directory!
*/
import * as runtime from "@prisma/client/runtime/index-browser"
export type * from '../models'
export type * from './prismaNamespace'
export const Decimal = runtime.Decimal
export const NullTypes = {
DbNull: runtime.NullTypes.DbNull as (new (secret: never) => typeof runtime.DbNull),
JsonNull: runtime.NullTypes.JsonNull as (new (secret: never) => typeof runtime.JsonNull),
AnyNull: runtime.NullTypes.AnyNull as (new (secret: never) => typeof runtime.AnyNull),
}
/**
* Helper for filtering JSON entries that have `null` on the database (empty on the db)
*
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
*/
export const DbNull = runtime.DbNull
/**
* Helper for filtering JSON entries that have JSON `null` values (not empty on the db)
*
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
*/
export const JsonNull = runtime.JsonNull
/**
* Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`
*
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
*/
export const AnyNull = runtime.AnyNull
export const ModelName = {
User: 'User'
} as const
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
/*
* Enums
*/
export const TransactionIsolationLevel = {
Serializable: 'Serializable'
} as const
export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]
export const UserScalarFieldEnum = {
id: 'id',
name: 'name',
phone: 'phone',
service: 'service',
comment: 'comment',
route: 'route',
createdAt: 'createdAt'
} as const
export type UserScalarFieldEnum = (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]
export const SortOrder = {
asc: 'asc',
desc: 'desc'
} as const
export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]
export const NullsOrder = {
first: 'first',
last: 'last'
} as const
export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]

View File

@@ -1,12 +0,0 @@
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* This is a barrel export file for all models and their related types.
*
* 🟢 You can import this file directly.
*/
export type * from './models/User'
export type * from './commonInputTypes'

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +0,0 @@
-- CreateTable
CREATE TABLE "User" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL,
"phone" TEXT NOT NULL,
"service" TEXT,
"comment" TEXT,
"route" TEXT,
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

View File

@@ -1,3 +0,0 @@
# Please do not edit this file manually
# It should be added in your version-control system (e.g., Git)
provider = "sqlite"

View File

@@ -1,21 +0,0 @@
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client"
output = "./generated"
}
datasource db {
provider = "sqlite"
}
model User {
id Int @id @default(autoincrement())
name String
phone String
service String?
comment String?
route String?
createdAt DateTime @default(now())
}

BIN
public/bbbenz_1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

BIN
public/bbbenz_2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
public/bbbenz_3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
public/bbbenz_4.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

BIN
public/bbbenz_5.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
public/bbbenz_6.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
public/bbbenz_7.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
public/bbbenz_8.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

BIN
public/bmb6_1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

BIN
public/bmb6_10.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

BIN
public/bmb6_11.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
public/bmb6_12.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
public/bmb6_13.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

BIN
public/bmb6_2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
public/bmb6_3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
public/bmb6_4.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
public/bmb6_5.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

BIN
public/bmb6_6.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
public/bmb6_7.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

BIN
public/bmb6_8.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

BIN
public/bmb6_9.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

BIN
public/bmv888_1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
public/bmv888_10.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
public/bmv888_11.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

BIN
public/bmv888_2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

BIN
public/bmv888_3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

BIN
public/bmv888_4.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
public/bmv888_5.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
public/bmv888_6.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
public/bmv888_7.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

BIN
public/bmv888_8.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
public/bmv888_9.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
public/bshbsh_1.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
public/bshbsh_2.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

BIN
public/bshbsh_3.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
public/bshbsh_4.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
public/bshbsh_5.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/bshbsh_6.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
public/changan.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
public/clscscs_1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
public/clscscs_2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
public/clscscs_3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
public/clscscs_4.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
public/clscscs_5.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
public/clscscs_6.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
public/clscscs_7.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
public/clscscs_8.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
public/clscscs_9.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
public/condonium_1.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
public/condonium_10.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

BIN
public/condonium_11.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
public/condonium_12.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
public/condonium_2.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
public/condonium_3.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

BIN
public/condonium_4.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
public/condonium_5.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
public/condonium_6.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
public/condonium_7.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
public/condonium_8.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
public/condonium_9.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
public/isanova_1.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
public/isanova_10.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
public/isanova_11.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
public/isanova_12.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
public/isanova_13.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
public/isanova_14.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Some files were not shown because too many files have changed in this diff Show More