adata-ui 3.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.d.mts +2 -0
- package/dist/module.json +5 -1
- package/dist/module.mjs +39 -6
- package/dist/runtime/components/Alert.vue +62 -0
- package/dist/runtime/components/Alert.vue.d.ts +29 -0
- package/dist/runtime/components/Chip.vue +24 -0
- package/dist/runtime/components/Chip.vue.d.ts +19 -0
- package/dist/runtime/components/ColorMode.vue +46 -0
- package/dist/runtime/components/ColorMode.vue.d.ts +2 -0
- package/dist/runtime/components/DigitBadge.vue +58 -0
- package/dist/runtime/components/DigitBadge.vue.d.ts +21 -0
- package/dist/runtime/components/Footer.vue +283 -0
- package/dist/runtime/components/Footer.vue.d.ts +2 -0
- package/dist/runtime/components/FooterAccordion.vue +78 -0
- package/dist/runtime/components/FooterAccordion.vue.d.ts +11 -0
- package/dist/runtime/components/Header.vue +139 -0
- package/dist/runtime/components/Header.vue.d.ts +41 -0
- package/dist/runtime/components/NewFooter.vue +267 -0
- package/dist/runtime/components/NewFooter.vue.d.ts +2 -0
- package/dist/runtime/components/NewFooterAccordion.vue +85 -0
- package/dist/runtime/components/NewFooterAccordion.vue.d.ts +11 -0
- package/dist/runtime/components/OtherServiceFeatures.vue +104 -0
- package/dist/runtime/components/OtherServiceFeatures.vue.d.ts +2 -0
- package/dist/runtime/components/Tag.vue +46 -0
- package/dist/runtime/components/Tag.vue.d.ts +25 -0
- package/dist/runtime/components/Toggle.vue +139 -0
- package/dist/runtime/components/Toggle.vue.d.ts +39 -0
- package/dist/runtime/components/accordion/Accordion.vue +149 -0
- package/dist/runtime/components/accordion/Accordion.vue.d.ts +41 -0
- package/dist/runtime/components/accordion/types.d.ts +15 -0
- package/dist/runtime/components/accordion/types.js +0 -0
- package/dist/runtime/components/accordion/ui.config.d.ts +22 -0
- package/dist/runtime/components/accordion/ui.config.js +21 -0
- package/dist/runtime/components/button/Button.vue +133 -0
- package/dist/runtime/components/button/Button.vue.d.ts +37 -0
- package/dist/runtime/components/button/types.d.ts +21 -0
- package/dist/runtime/components/button/types.js +0 -0
- package/dist/runtime/components/checkbox/Checkbox.vue +124 -0
- package/dist/runtime/components/checkbox/Checkbox.vue.d.ts +45 -0
- package/dist/runtime/components/date-picker/DatePicker.vue +102 -0
- package/dist/runtime/components/date-picker/DatePicker.vue.d.ts +16 -0
- package/dist/runtime/components/floating-label/FloatingLabel.vue +22 -0
- package/dist/runtime/components/floating-label/FloatingLabel.vue.d.ts +16 -0
- package/dist/runtime/components/forms/input/standard/InputStandard.vue +301 -0
- package/dist/runtime/components/forms/input/standard/InputStandard.vue.d.ts +0 -0
- package/dist/runtime/components/forms/input/textarea/ATextarea.vue +158 -0
- package/dist/runtime/components/forms/input/textarea/ATextarea.vue.d.ts +43 -0
- package/dist/runtime/components/forms/need-more-data/NeedMoreData.vue +114 -0
- package/dist/runtime/components/forms/need-more-data/NeedMoreData.vue.d.ts +5 -0
- package/dist/runtime/components/forms/request-demo/RequestDemo.vue +67 -0
- package/dist/runtime/components/forms/request-demo/RequestDemo.vue.d.ts +23 -0
- package/dist/runtime/components/header/AlmatyContacts.vue +120 -0
- package/dist/runtime/components/header/AlmatyContacts.vue.d.ts +2 -0
- package/dist/runtime/components/header/AstanaContacts.vue +65 -0
- package/dist/runtime/components/header/AstanaContacts.vue.d.ts +2 -0
- package/dist/runtime/components/header/CardGallery.vue +156 -0
- package/dist/runtime/components/header/CardGallery.vue.d.ts +2 -0
- package/dist/runtime/components/header/ContactMenu.vue +105 -0
- package/dist/runtime/components/header/ContactMenu.vue.d.ts +11 -0
- package/dist/runtime/components/header/HeaderLink.vue +169 -0
- package/dist/runtime/components/header/HeaderLink.vue.d.ts +2 -0
- package/dist/runtime/components/header/LangSwitcher.vue +48 -0
- package/dist/runtime/components/header/LangSwitcher.vue.d.ts +2 -0
- package/dist/runtime/components/header/ListItem.vue +26 -0
- package/dist/runtime/components/header/ListItem.vue.d.ts +7 -0
- package/dist/runtime/components/header/NavCard.vue +40 -0
- package/dist/runtime/components/header/NavCard.vue.d.ts +8 -0
- package/dist/runtime/components/header/NavList.vue +101 -0
- package/dist/runtime/components/header/NavList.vue.d.ts +17 -0
- package/dist/runtime/components/header/ProductMenu.vue +369 -0
- package/dist/runtime/components/header/ProductMenu.vue.d.ts +11 -0
- package/dist/runtime/components/header/ProfileMenu.vue +56 -0
- package/dist/runtime/components/header/ProfileMenu.vue.d.ts +16 -0
- package/dist/runtime/components/header/ProfileMenuContent.vue +228 -0
- package/dist/runtime/components/header/ProfileMenuContent.vue.d.ts +16 -0
- package/dist/runtime/components/header/TopHeader.vue +152 -0
- package/dist/runtime/components/header/TopHeader.vue.d.ts +10 -0
- package/dist/runtime/components/header/types.d.ts +19 -0
- package/dist/runtime/components/header/types.js +0 -0
- package/dist/runtime/components/header-mobile/HeaderMobile.vue +53 -0
- package/dist/runtime/components/header-mobile/HeaderMobile.vue.d.ts +17 -0
- package/dist/runtime/components/mobile-navigation/BottomNavigation.vue +68 -0
- package/dist/runtime/components/mobile-navigation/BottomNavigation.vue.d.ts +29 -0
- package/dist/runtime/components/mobile-navigation/MainButton.vue +16 -0
- package/dist/runtime/components/mobile-navigation/MainButton.vue.d.ts +2 -0
- package/dist/runtime/components/mobile-navigation/MobileProductMenu.vue +261 -0
- package/dist/runtime/components/mobile-navigation/MobileProductMenu.vue.d.ts +2 -0
- package/dist/runtime/components/modals/NoAccessContent.vue +58 -0
- package/dist/runtime/components/modals/NoAccessContent.vue.d.ts +5 -0
- package/dist/runtime/components/pill-tabs/PillTabs.vue +137 -0
- package/dist/runtime/components/pill-tabs/PillTabs.vue.d.ts +38 -0
- package/dist/runtime/components/pill-tabs/types.d.ts +18 -0
- package/dist/runtime/components/pill-tabs/types.js +0 -0
- package/dist/runtime/components/radio-button/RadioButton.vue +69 -0
- package/dist/runtime/components/radio-button/RadioButton.vue.d.ts +40 -0
- package/dist/runtime/components/row-card/RowCard.vue +44 -0
- package/dist/runtime/components/row-card/RowCard.vue.d.ts +26 -0
- package/dist/runtime/components/select-row/index.vue +117 -0
- package/dist/runtime/components/select-row/index.vue.d.ts +31 -0
- package/dist/runtime/components/tree-select/TreeSelect.vue +132 -0
- package/dist/runtime/components/tree-select/TreeSelect.vue.d.ts +22 -0
- package/dist/runtime/components/tree-select/TreeService.d.ts +54 -0
- package/dist/runtime/components/tree-select/TreeService.js +209 -0
- package/dist/runtime/components/tree-select/components/tree-select-nodes.vue +100 -0
- package/dist/runtime/components/tree-select/components/tree-select-nodes.vue.d.ts +9 -0
- package/dist/runtime/components/tree-select/types.d.ts +29 -0
- package/dist/runtime/components/tree-select/types.js +0 -0
- package/dist/runtime/composables/highlight.d.ts +1 -0
- package/dist/runtime/composables/highlight.js +15 -0
- package/dist/runtime/composables/projectState.d.ts +2 -0
- package/dist/runtime/composables/projectState.js +3 -0
- package/dist/runtime/i18n/i18n.config.d.ts +1731 -0
- package/dist/runtime/i18n/i18n.config.js +20 -0
- package/dist/runtime/i18n.d.ts +2 -0
- package/dist/runtime/i18n.js +15 -0
- package/dist/runtime/icons/arrow/arrow-circle-down.vue +30 -0
- package/dist/runtime/icons/arrow/arrow-circle-down.vue.d.ts +2 -0
- package/dist/runtime/icons/arrow/arrow-graph-up.vue +24 -0
- package/dist/runtime/icons/arrow/arrow-graph-up.vue.d.ts +2 -0
- package/dist/runtime/icons/arrow/arrow-right.vue +24 -0
- package/dist/runtime/icons/arrow/arrow-right.vue.d.ts +2 -0
- package/dist/runtime/icons/arrow/arrow-side-up.vue +19 -0
- package/dist/runtime/icons/arrow/arrow-side-up.vue.d.ts +2 -0
- package/dist/runtime/icons/arrow/arrow-top-right-on-square.vue +19 -0
- package/dist/runtime/icons/arrow/arrow-top-right-on-square.vue.d.ts +2 -0
- package/dist/runtime/icons/arrow/chevron-down.vue +19 -0
- package/dist/runtime/icons/arrow/chevron-down.vue.d.ts +2 -0
- package/dist/runtime/icons/avatar.vue +41 -0
- package/dist/runtime/icons/avatar.vue.d.ts +2 -0
- package/dist/runtime/icons/avto/car.vue +17 -0
- package/dist/runtime/icons/avto/car.vue.d.ts +2 -0
- package/dist/runtime/icons/avto/truck.vue +17 -0
- package/dist/runtime/icons/avto/truck.vue.d.ts +2 -0
- package/dist/runtime/icons/block.vue +19 -0
- package/dist/runtime/icons/block.vue.d.ts +2 -0
- package/dist/runtime/icons/bookmark.vue +19 -0
- package/dist/runtime/icons/bookmark.vue.d.ts +2 -0
- package/dist/runtime/icons/calculator.vue +19 -0
- package/dist/runtime/icons/calculator.vue.d.ts +2 -0
- package/dist/runtime/icons/calendar.vue +24 -0
- package/dist/runtime/icons/calendar.vue.d.ts +2 -0
- package/dist/runtime/icons/check-circle.vue +25 -0
- package/dist/runtime/icons/check-circle.vue.d.ts +2 -0
- package/dist/runtime/icons/checkbox/checkbox-active.vue +19 -0
- package/dist/runtime/icons/checkbox/checkbox-active.vue.d.ts +2 -0
- package/dist/runtime/icons/checkbox/checkbox-empty.vue +20 -0
- package/dist/runtime/icons/checkbox/checkbox-empty.vue.d.ts +2 -0
- package/dist/runtime/icons/checkbox/checkbox-intermediate.vue +19 -0
- package/dist/runtime/icons/checkbox/checkbox-intermediate.vue.d.ts +2 -0
- package/dist/runtime/icons/clipboard-text.vue +17 -0
- package/dist/runtime/icons/clipboard-text.vue.d.ts +2 -0
- package/dist/runtime/icons/clock.vue +25 -0
- package/dist/runtime/icons/clock.vue.d.ts +2 -0
- package/dist/runtime/icons/color-mode/moon.vue +20 -0
- package/dist/runtime/icons/color-mode/moon.vue.d.ts +2 -0
- package/dist/runtime/icons/color-mode/sun.vue +27 -0
- package/dist/runtime/icons/color-mode/sun.vue.d.ts +2 -0
- package/dist/runtime/icons/communication/mail.vue +19 -0
- package/dist/runtime/icons/communication/mail.vue.d.ts +2 -0
- package/dist/runtime/icons/communication/phone.vue +19 -0
- package/dist/runtime/icons/communication/phone.vue.d.ts +2 -0
- package/dist/runtime/icons/company.vue +19 -0
- package/dist/runtime/icons/company.vue.d.ts +2 -0
- package/dist/runtime/icons/currency/dollar.vue +19 -0
- package/dist/runtime/icons/currency/dollar.vue.d.ts +2 -0
- package/dist/runtime/icons/currency/down.vue +22 -0
- package/dist/runtime/icons/currency/down.vue.d.ts +2 -0
- package/dist/runtime/icons/currency/eur.vue +69 -0
- package/dist/runtime/icons/currency/eur.vue.d.ts +2 -0
- package/dist/runtime/icons/currency/rub.vue +25 -0
- package/dist/runtime/icons/currency/rub.vue.d.ts +2 -0
- package/dist/runtime/icons/currency/usd.vue +269 -0
- package/dist/runtime/icons/currency/usd.vue.d.ts +2 -0
- package/dist/runtime/icons/currency/yuan.vue +37 -0
- package/dist/runtime/icons/currency/yuan.vue.d.ts +2 -0
- package/dist/runtime/icons/document/hdocument.vue +17 -0
- package/dist/runtime/icons/document/hdocument.vue.d.ts +2 -0
- package/dist/runtime/icons/document/id.vue +19 -0
- package/dist/runtime/icons/document/id.vue.d.ts +2 -0
- package/dist/runtime/icons/document/profile.vue +19 -0
- package/dist/runtime/icons/document/profile.vue.d.ts +2 -0
- package/dist/runtime/icons/download.vue +26 -0
- package/dist/runtime/icons/download.vue.d.ts +2 -0
- package/dist/runtime/icons/edit.vue +24 -0
- package/dist/runtime/icons/edit.vue.d.ts +2 -0
- package/dist/runtime/icons/file/excel.vue +88 -0
- package/dist/runtime/icons/file/excel.vue.d.ts +2 -0
- package/dist/runtime/icons/file/file.vue +19 -0
- package/dist/runtime/icons/file/file.vue.d.ts +2 -0
- package/dist/runtime/icons/file/files.vue +17 -0
- package/dist/runtime/icons/file/files.vue.d.ts +2 -0
- package/dist/runtime/icons/globe.vue +19 -0
- package/dist/runtime/icons/globe.vue.d.ts +2 -0
- package/dist/runtime/icons/handshake.vue +19 -0
- package/dist/runtime/icons/handshake.vue.d.ts +2 -0
- package/dist/runtime/icons/history.vue +19 -0
- package/dist/runtime/icons/history.vue.d.ts +2 -0
- package/dist/runtime/icons/info/info-circle.vue +29 -0
- package/dist/runtime/icons/info/info-circle.vue.d.ts +2 -0
- package/dist/runtime/icons/invoice.vue +35 -0
- package/dist/runtime/icons/invoice.vue.d.ts +2 -0
- package/dist/runtime/icons/link-chain.vue +31 -0
- package/dist/runtime/icons/link-chain.vue.d.ts +2 -0
- package/dist/runtime/icons/loader-circle.vue +41 -0
- package/dist/runtime/icons/loader-circle.vue.d.ts +2 -0
- package/dist/runtime/icons/lock.vue +19 -0
- package/dist/runtime/icons/lock.vue.d.ts +2 -0
- package/dist/runtime/icons/logo/adata.vue +48 -0
- package/dist/runtime/icons/logo/adata.vue.d.ts +2 -0
- package/dist/runtime/icons/logo/logo.vue +27 -0
- package/dist/runtime/icons/logo/logo.vue.d.ts +2 -0
- package/dist/runtime/icons/medal.vue +17 -0
- package/dist/runtime/icons/medal.vue.d.ts +2 -0
- package/dist/runtime/icons/menu/menu-filled.vue +61 -0
- package/dist/runtime/icons/menu/menu-filled.vue.d.ts +2 -0
- package/dist/runtime/icons/menu/menu.vue +41 -0
- package/dist/runtime/icons/menu/menu.vue.d.ts +2 -0
- package/dist/runtime/icons/message.vue +24 -0
- package/dist/runtime/icons/message.vue.d.ts +2 -0
- package/dist/runtime/icons/modals/door.vue +170 -0
- package/dist/runtime/icons/modals/door.vue.d.ts +2 -0
- package/dist/runtime/icons/moon.vue +10 -0
- package/dist/runtime/icons/moon.vue.d.ts +2 -0
- package/dist/runtime/icons/more.vue +36 -0
- package/dist/runtime/icons/more.vue.d.ts +2 -0
- package/dist/runtime/icons/navigation/expand-window.vue +19 -0
- package/dist/runtime/icons/navigation/expand-window.vue.d.ts +2 -0
- package/dist/runtime/icons/navigation/location.vue +25 -0
- package/dist/runtime/icons/navigation/location.vue.d.ts +2 -0
- package/dist/runtime/icons/navigation/logout.vue +19 -0
- package/dist/runtime/icons/navigation/logout.vue.d.ts +2 -0
- package/dist/runtime/icons/notifications.vue +25 -0
- package/dist/runtime/icons/notifications.vue.d.ts +2 -0
- package/dist/runtime/icons/other-service/arrow-square-down.vue +15 -0
- package/dist/runtime/icons/other-service/arrow-square-down.vue.d.ts +2 -0
- package/dist/runtime/icons/other-service/arrow-top-right-on-square.vue +6 -0
- package/dist/runtime/icons/other-service/arrow-top-right-on-square.vue.d.ts +2 -0
- package/dist/runtime/icons/other-service/block.vue +16 -0
- package/dist/runtime/icons/other-service/block.vue.d.ts +2 -0
- package/dist/runtime/icons/other-service/currency-dollar.vue +16 -0
- package/dist/runtime/icons/other-service/currency-dollar.vue.d.ts +2 -0
- package/dist/runtime/icons/other-service/globe.vue +16 -0
- package/dist/runtime/icons/other-service/globe.vue.d.ts +2 -0
- package/dist/runtime/icons/other-service/link.vue +7 -0
- package/dist/runtime/icons/other-service/link.vue.d.ts +2 -0
- package/dist/runtime/icons/other-service/magnifying-glass.vue +9 -0
- package/dist/runtime/icons/other-service/magnifying-glass.vue.d.ts +2 -0
- package/dist/runtime/icons/other-service/standing-scales.vue +15 -0
- package/dist/runtime/icons/other-service/standing-scales.vue.d.ts +2 -0
- package/dist/runtime/icons/other-service/users-three.vue +7 -0
- package/dist/runtime/icons/other-service/users-three.vue.d.ts +2 -0
- package/dist/runtime/icons/plus-circle.vue +24 -0
- package/dist/runtime/icons/plus-circle.vue.d.ts +2 -0
- package/dist/runtime/icons/plus.vue +24 -0
- package/dist/runtime/icons/plus.vue.d.ts +2 -0
- package/dist/runtime/icons/radio/radio-check.vue +24 -0
- package/dist/runtime/icons/radio/radio-check.vue.d.ts +2 -0
- package/dist/runtime/icons/radio/radio-empty.vue +20 -0
- package/dist/runtime/icons/radio/radio-empty.vue.d.ts +2 -0
- package/dist/runtime/icons/receipt/hcheck.vue +27 -0
- package/dist/runtime/icons/receipt/hcheck.vue.d.ts +2 -0
- package/dist/runtime/icons/receipt/receipt.vue +27 -0
- package/dist/runtime/icons/receipt/receipt.vue.d.ts +2 -0
- package/dist/runtime/icons/scale.vue +19 -0
- package/dist/runtime/icons/scale.vue.d.ts +2 -0
- package/dist/runtime/icons/search.vue +27 -0
- package/dist/runtime/icons/search.vue.d.ts +2 -0
- package/dist/runtime/icons/socials/facebook.vue +15 -0
- package/dist/runtime/icons/socials/facebook.vue.d.ts +2 -0
- package/dist/runtime/icons/socials/instagram.vue +19 -0
- package/dist/runtime/icons/socials/instagram.vue.d.ts +2 -0
- package/dist/runtime/icons/socials/linkedin.vue +24 -0
- package/dist/runtime/icons/socials/linkedin.vue.d.ts +2 -0
- package/dist/runtime/icons/socials/telegram.vue +15 -0
- package/dist/runtime/icons/socials/telegram.vue.d.ts +2 -0
- package/dist/runtime/icons/socials/tik-tok.vue +15 -0
- package/dist/runtime/icons/socials/tik-tok.vue.d.ts +2 -0
- package/dist/runtime/icons/socials/whatsapp.vue +21 -0
- package/dist/runtime/icons/socials/whatsapp.vue.d.ts +2 -0
- package/dist/runtime/icons/socials/youtube.vue +16 -0
- package/dist/runtime/icons/socials/youtube.vue.d.ts +2 -0
- package/dist/runtime/icons/sun.vue +14 -0
- package/dist/runtime/icons/sun.vue.d.ts +2 -0
- package/dist/runtime/icons/sviazi.vue +19 -0
- package/dist/runtime/icons/sviazi.vue.d.ts +2 -0
- package/dist/runtime/icons/tenge.vue +22 -0
- package/dist/runtime/icons/tenge.vue.d.ts +2 -0
- package/dist/runtime/icons/trash.vue +24 -0
- package/dist/runtime/icons/trash.vue.d.ts +2 -0
- package/dist/runtime/icons/upload.vue +26 -0
- package/dist/runtime/icons/upload.vue.d.ts +2 -0
- package/dist/runtime/icons/user.vue +30 -0
- package/dist/runtime/icons/user.vue.d.ts +2 -0
- package/dist/runtime/icons/users/users-three.vue +17 -0
- package/dist/runtime/icons/users/users-three.vue.d.ts +2 -0
- package/dist/runtime/icons/users/users.vue +31 -0
- package/dist/runtime/icons/users/users.vue.d.ts +2 -0
- package/dist/runtime/icons/warning-triangle.vue +29 -0
- package/dist/runtime/icons/warning-triangle.vue.d.ts +2 -0
- package/dist/runtime/icons/work-bag.vue +20 -0
- package/dist/runtime/icons/work-bag.vue.d.ts +2 -0
- package/dist/runtime/icons/x-mark.vue +18 -0
- package/dist/runtime/icons/x-mark.vue.d.ts +2 -0
- package/dist/runtime/lang/en.d.ts +4 -0
- package/dist/runtime/lang/en.js +545 -0
- package/dist/runtime/lang/kk.d.ts +4 -0
- package/dist/runtime/lang/kk.js +545 -0
- package/dist/runtime/lang/ru.d.ts +575 -0
- package/dist/runtime/lang/ru.js +607 -0
- package/dist/runtime/shared/constants/pages.d.ts +71 -0
- package/dist/runtime/shared/constants/pages.js +71 -0
- package/package.json +66 -58
- package/dist/runtime/components/header/TheHeader.vue +0 -15
- package/dist/runtime/components/header/TheHeader.vue.d.ts +0 -2
- package/dist/runtime/plugin.d.ts +0 -2
- package/dist/runtime/plugin.js +0 -4
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type __VLS_PublicProps = {
|
|
2
|
+
'loading'?: boolean;
|
|
3
|
+
'modal'?: boolean;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
|
+
"update:loading": (value: boolean) => any;
|
|
7
|
+
"update:modal": (value: boolean) => any;
|
|
8
|
+
} & {
|
|
9
|
+
onSend: (form: {
|
|
10
|
+
sender_name: string;
|
|
11
|
+
phone_number: string;
|
|
12
|
+
message: string;
|
|
13
|
+
}) => any;
|
|
14
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
15
|
+
onOnSend?: ((form: {
|
|
16
|
+
sender_name: string;
|
|
17
|
+
phone_number: string;
|
|
18
|
+
message: string;
|
|
19
|
+
}) => any) | undefined;
|
|
20
|
+
"onUpdate:loading"?: ((value: boolean) => any) | undefined;
|
|
21
|
+
"onUpdate:modal"?: ((value: boolean) => any) | undefined;
|
|
22
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
23
|
+
export default _default;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { useContacts } from "../../composables/projectState";
|
|
3
|
+
import Location from "#icons/navigation/location.vue";
|
|
4
|
+
import Mail from "#icons/communication/mail.vue";
|
|
5
|
+
import Clock from "#icons/clock.vue";
|
|
6
|
+
import ExpandWindow from "#icons/navigation/expand-window.vue";
|
|
7
|
+
import { computed, ref, useI18n } from "#imports";
|
|
8
|
+
import Phone from "#icons/communication/phone.vue";
|
|
9
|
+
import Whatsapp from "#icons/socials/whatsapp.vue";
|
|
10
|
+
const contacts = ref(useContacts());
|
|
11
|
+
const { t } = useI18n();
|
|
12
|
+
const AlmatyItems = [
|
|
13
|
+
{
|
|
14
|
+
title: "header.contacts.almaty.adress.title",
|
|
15
|
+
subtitle: "header.contacts.almaty.adress.subtitle",
|
|
16
|
+
icon: Location,
|
|
17
|
+
to: "https://yandex.kz/maps/ru/org/avrora_kholding/1099794306/?ll=76.912479%2C43.208928&z=17.72"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
title: "header.contacts.almaty.email.title",
|
|
21
|
+
subtitle: "info@adata.kz",
|
|
22
|
+
icon: Mail,
|
|
23
|
+
to: "mailto:info@adata.kz"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: "header.contacts.almaty.schedule.title",
|
|
27
|
+
subtitle: "header.contacts.almaty.schedule.subtitle",
|
|
28
|
+
icon: Clock
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
const technicalSupport = [
|
|
32
|
+
{
|
|
33
|
+
subtitle: "header.contacts.almaty.support.linkTitle",
|
|
34
|
+
icon: ExpandWindow,
|
|
35
|
+
to: "https://api.whatsapp.com/send/?phone=77712289041"
|
|
36
|
+
}
|
|
37
|
+
];
|
|
38
|
+
const newContacts = computed(() => contacts.value.map((item) => ({
|
|
39
|
+
subtitle: item.contact,
|
|
40
|
+
icon: item.platform_code === "telephone" ? Phone : Whatsapp,
|
|
41
|
+
to: item.platform_code === "telephone" ? `tel:${item.contact}` : `https://api.whatsapp.com/send/?phone=${item.contact.replace(/\D/g, "")}`
|
|
42
|
+
})));
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<template>
|
|
46
|
+
<div class="h-[272px]">
|
|
47
|
+
<h2 class="heading-02 mb-4">
|
|
48
|
+
{{ t("header.contacts.almaty.title") }}
|
|
49
|
+
</h2>
|
|
50
|
+
<div class="flex gap-10">
|
|
51
|
+
<div class="flex flex-col gap-4">
|
|
52
|
+
<div
|
|
53
|
+
v-for="item in AlmatyItems.slice(0, 3)"
|
|
54
|
+
class="flex flex-col gap-2 "
|
|
55
|
+
>
|
|
56
|
+
<div class="heading-04">
|
|
57
|
+
{{ t(item.title) }}
|
|
58
|
+
</div>
|
|
59
|
+
<a
|
|
60
|
+
class="flex items-center gap-1 text-deepblue-900 dark:text-white"
|
|
61
|
+
:href="item.to"
|
|
62
|
+
>
|
|
63
|
+
<component
|
|
64
|
+
:is="item.icon"
|
|
65
|
+
class="shrink-0"
|
|
66
|
+
/>
|
|
67
|
+
<div class=" body-400">
|
|
68
|
+
{{ t(item.subtitle) }}
|
|
69
|
+
</div>
|
|
70
|
+
</a>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
<div class="flex flex-col gap-2 2xl:gap-4">
|
|
74
|
+
<div class="flex flex-col gap-4 h-full justify-between">
|
|
75
|
+
<div class="flex flex-col gap-2 ">
|
|
76
|
+
<div class="heading-04">
|
|
77
|
+
{{ t("header.contacts.almaty.sellDep.title") }}
|
|
78
|
+
</div>
|
|
79
|
+
<div class="grid grid-cols-3 gap-x-8 gap-y-2">
|
|
80
|
+
<a
|
|
81
|
+
v-for="link in newContacts"
|
|
82
|
+
:key="link.subtitle"
|
|
83
|
+
class="flex 2xl:items-center gap-1 text-deepblue-900 dark:text-white"
|
|
84
|
+
:href="link.to"
|
|
85
|
+
:target="link.icon === Whatsapp ? '_blank' : '_self'"
|
|
86
|
+
>
|
|
87
|
+
<component :is="link.icon" />
|
|
88
|
+
<div class="body-400 line-clamp-1">
|
|
89
|
+
{{ link.subtitle }}
|
|
90
|
+
</div>
|
|
91
|
+
</a>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
<div class="flex flex-col gap-2 ">
|
|
95
|
+
<div class="heading-04 whitespace-nowrap">
|
|
96
|
+
{{ t("header.contacts.almaty.support.title") }}
|
|
97
|
+
</div>
|
|
98
|
+
<div class="flex flex-col lg:gap-y-5">
|
|
99
|
+
<a
|
|
100
|
+
v-for="link in technicalSupport"
|
|
101
|
+
:key="link.subtitle"
|
|
102
|
+
class="flex 2xl:items-center gap-1 text-deepblue-900 dark:text-white"
|
|
103
|
+
:href="link.to"
|
|
104
|
+
target="_blank"
|
|
105
|
+
>
|
|
106
|
+
<div class="body-400 line-clamp-1 text-blue-600">
|
|
107
|
+
{{ t(link.subtitle) }}
|
|
108
|
+
</div>
|
|
109
|
+
<component
|
|
110
|
+
:is="link.icon"
|
|
111
|
+
class="stroke-blue-600"
|
|
112
|
+
/>
|
|
113
|
+
</a>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</template>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import Location from "#icons/navigation/location.vue";
|
|
3
|
+
import Mail from "#icons/communication/mail.vue";
|
|
4
|
+
import Clock from "#icons/clock.vue";
|
|
5
|
+
import Whatsapp from "#icons/socials/whatsapp.vue";
|
|
6
|
+
import { useI18n } from "#imports";
|
|
7
|
+
const { t } = useI18n();
|
|
8
|
+
const AstanaItems = [
|
|
9
|
+
{
|
|
10
|
+
title: "header.contacts.astana.adress.title",
|
|
11
|
+
subtitle: "header.contacts.astana.adress.subtitle",
|
|
12
|
+
icon: Location,
|
|
13
|
+
to: "https://yandex.kz/maps/ru/org/adata_consulting/214484722242/?ll=71.429573%2C51.131319&z=20.56"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
title: "header.contacts.astana.email.title",
|
|
17
|
+
subtitle: "info@adata-c.kz",
|
|
18
|
+
icon: Mail,
|
|
19
|
+
to: "mailto:info@adata-c.kz"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: "header.contacts.astana.schedule.title",
|
|
23
|
+
subtitle: "header.contacts.astana.schedule.subtitle",
|
|
24
|
+
icon: Clock
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
title: "header.contacts.astana.sellDep.title",
|
|
28
|
+
subtitle: "+7 700 744 00 10",
|
|
29
|
+
icon: Whatsapp,
|
|
30
|
+
to: "https://api.whatsapp.com/send/?phone=77007440010"
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<template>
|
|
36
|
+
<div class="h-[272px]">
|
|
37
|
+
<h2 class="heading-02 mb-4">
|
|
38
|
+
{{ t("header.contacts.astana.title") }}
|
|
39
|
+
</h2>
|
|
40
|
+
<div class="grid grid-cols-2 gap-5 ">
|
|
41
|
+
<div class="xl:grid grid-cols-2 grid-rows-3 flex flex-wrap gap-4 ">
|
|
42
|
+
<div
|
|
43
|
+
v-for="(item, index) in AstanaItems"
|
|
44
|
+
:key="index"
|
|
45
|
+
class="flex flex-col gap-2 "
|
|
46
|
+
:class="{ 'col-span-2': index === 0 }"
|
|
47
|
+
>
|
|
48
|
+
<div class="heading-04">
|
|
49
|
+
{{ t(item.title) }}
|
|
50
|
+
</div>
|
|
51
|
+
<a
|
|
52
|
+
class="flex items-center gap-1 text-deepblue-900 dark:text-white"
|
|
53
|
+
:href="item?.to"
|
|
54
|
+
:target="item.icon === Whatsapp ? '_blank' : '_self'"
|
|
55
|
+
>
|
|
56
|
+
<component :is="item.icon" />
|
|
57
|
+
<div class=" body-400">
|
|
58
|
+
{{ t(item.subtitle) }}
|
|
59
|
+
</div>
|
|
60
|
+
</a>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</template>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { computed, onMounted, onUnmounted, ref, useI18n } from "#imports";
|
|
3
|
+
import ArrowSideUp from "#icons/arrow/arrow-side-up.vue";
|
|
4
|
+
const { t } = useI18n();
|
|
5
|
+
const items = computed(() => {
|
|
6
|
+
return [
|
|
7
|
+
{
|
|
8
|
+
title: "header.products.galleryCards.unload.title",
|
|
9
|
+
subtitle: "header.products.galleryCards.unload.subtitle",
|
|
10
|
+
to: "/",
|
|
11
|
+
image: "/header/unload.webp",
|
|
12
|
+
icon: ""
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
title: "header.products.galleryCards.compliance.title",
|
|
16
|
+
subtitle: "header.products.galleryCards.compliance.subtitle",
|
|
17
|
+
to: "/",
|
|
18
|
+
image: "/header/compliance.webp",
|
|
19
|
+
icon: ""
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: "header.products.galleryCards.ved.title",
|
|
23
|
+
subtitle: "header.products.galleryCards.ved.subtitle",
|
|
24
|
+
to: "/",
|
|
25
|
+
image: "/header/ved.webp",
|
|
26
|
+
icon: ""
|
|
27
|
+
}
|
|
28
|
+
];
|
|
29
|
+
});
|
|
30
|
+
const currentIndex = ref(0);
|
|
31
|
+
const transitionName = ref("slide-left");
|
|
32
|
+
let timeoutId = null;
|
|
33
|
+
const isHovered = ref(false);
|
|
34
|
+
const intervalDuration = 3e3;
|
|
35
|
+
let startTime = 0;
|
|
36
|
+
let remaining = intervalDuration;
|
|
37
|
+
const clearTimer = () => {
|
|
38
|
+
if (timeoutId) {
|
|
39
|
+
clearTimeout(timeoutId);
|
|
40
|
+
timeoutId = null;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const startTimer = () => {
|
|
44
|
+
clearTimer();
|
|
45
|
+
startTime = Date.now();
|
|
46
|
+
timeoutId = setTimeout(() => {
|
|
47
|
+
nextImage();
|
|
48
|
+
}, remaining);
|
|
49
|
+
};
|
|
50
|
+
const pauseTimer = () => {
|
|
51
|
+
if (timeoutId) {
|
|
52
|
+
clearTimer();
|
|
53
|
+
const elapsed = Date.now() - startTime;
|
|
54
|
+
remaining = Math.max(remaining - elapsed, 0);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const resumeTimer = () => {
|
|
58
|
+
startTime = Date.now();
|
|
59
|
+
timeoutId = setTimeout(() => {
|
|
60
|
+
nextImage();
|
|
61
|
+
}, remaining);
|
|
62
|
+
};
|
|
63
|
+
const resetTimer = () => {
|
|
64
|
+
remaining = intervalDuration;
|
|
65
|
+
startTimer();
|
|
66
|
+
};
|
|
67
|
+
const nextImage = () => {
|
|
68
|
+
transitionName.value = "slide-left";
|
|
69
|
+
currentIndex.value = (currentIndex.value + 1) % items.value.length;
|
|
70
|
+
remaining = intervalDuration;
|
|
71
|
+
startTimer();
|
|
72
|
+
};
|
|
73
|
+
const setCurrentIndex = (index) => {
|
|
74
|
+
transitionName.value = index < currentIndex.value ? "slide-right" : "slide-left";
|
|
75
|
+
currentIndex.value = index;
|
|
76
|
+
resetTimer();
|
|
77
|
+
pauseTimer();
|
|
78
|
+
};
|
|
79
|
+
const handleMouseOver = () => {
|
|
80
|
+
isHovered.value = true;
|
|
81
|
+
pauseTimer();
|
|
82
|
+
};
|
|
83
|
+
const handleMouseOut = () => {
|
|
84
|
+
isHovered.value = false;
|
|
85
|
+
resumeTimer();
|
|
86
|
+
};
|
|
87
|
+
onMounted(() => startTimer());
|
|
88
|
+
onUnmounted(() => clearTimer());
|
|
89
|
+
</script>
|
|
90
|
+
|
|
91
|
+
<template>
|
|
92
|
+
<div
|
|
93
|
+
class="overflow-hidden relative w-[320px] h-[480px] rounded-2xl"
|
|
94
|
+
@mouseover="handleMouseOver"
|
|
95
|
+
@mouseout="handleMouseOut"
|
|
96
|
+
>
|
|
97
|
+
<transition :name="transitionName">
|
|
98
|
+
<div
|
|
99
|
+
:key="currentIndex"
|
|
100
|
+
class="relative"
|
|
101
|
+
>
|
|
102
|
+
<img
|
|
103
|
+
:src="items[currentIndex].image"
|
|
104
|
+
class="size-full object-cover rounded-2xl"
|
|
105
|
+
/>
|
|
106
|
+
<nuxt-link :to="items[currentIndex].to">
|
|
107
|
+
<div class="absolute bottom-0 rounded-2xl w-full bg-blue-700/80 dark:bg-blue-500/80 px-4 pt-4 pb-12 shadow-[0_-2px_4px_0_rgba(0,0,0,0.25)] backdrop-blur-md flex flex-col gap-6">
|
|
108
|
+
<div class="flex flex-col gap-2">
|
|
109
|
+
<div class="flex items-center justify-between">
|
|
110
|
+
<div class="flex items-center gap-2">
|
|
111
|
+
<div class="flex items-center justify-center bg-white dark:bg-gray-900 text-blue-700 dark:text-blue-500 size-8 rounded-lg">
|
|
112
|
+
<component
|
|
113
|
+
:is="items[currentIndex].icon"
|
|
114
|
+
class="size-6"
|
|
115
|
+
/>
|
|
116
|
+
</div>
|
|
117
|
+
<p class="normal-case text-white dark:text-gray-900 font-semibold text-xl">
|
|
118
|
+
{{ t(items[currentIndex].title) }}
|
|
119
|
+
</p>
|
|
120
|
+
</div>
|
|
121
|
+
<arrow-side-up
|
|
122
|
+
class="icon-link size-6 text-white dark:text-gray-900"
|
|
123
|
+
:class="{ visible: isHovered }"
|
|
124
|
+
/>
|
|
125
|
+
</div>
|
|
126
|
+
<p class="normal-case text-white font-semibold dark:text-gray-900">
|
|
127
|
+
{{ t(items[currentIndex].subtitle) }}
|
|
128
|
+
</p>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
</nuxt-link>
|
|
132
|
+
</div>
|
|
133
|
+
</transition>
|
|
134
|
+
<div class="absolute xl:bottom-4 w-full">
|
|
135
|
+
<div class="flex justify-center items-center gap-6">
|
|
136
|
+
<div
|
|
137
|
+
v-for="(item, index) in items"
|
|
138
|
+
:key="index"
|
|
139
|
+
class="relative bg-white/50 dark:bg-gray-900/50 rounded-full overflow-hidden cursor-pointer h-2 w-2"
|
|
140
|
+
:class="{ 'w-[52px]': currentIndex === index }"
|
|
141
|
+
@click="setCurrentIndex(index)"
|
|
142
|
+
>
|
|
143
|
+
<div
|
|
144
|
+
v-if="currentIndex === index"
|
|
145
|
+
class="absolute inset-0 bg-white dark:bg-gray-900 progress-bar"
|
|
146
|
+
:style="{ animationPlayState: isHovered ? 'paused' : 'running' }"
|
|
147
|
+
/>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
</template>
|
|
153
|
+
|
|
154
|
+
<style scoped>
|
|
155
|
+
.progress-bar{animation:progress 3s linear forwards}@keyframes progress{0%{width:0}to{width:100%}}.slide-left-enter-active,.slide-left-leave-active,.slide-right-enter-active,.slide-right-leave-active{left:0;position:absolute;top:0;transition:transform .3s ease,opacity .3s ease;width:100%}.slide-left-enter-from{opacity:0;transform:translateX(100%)}.slide-left-enter-to,.slide-left-leave-from{opacity:1;transform:translateX(0)}.slide-left-leave-to,.slide-right-enter-from{opacity:0;transform:translateX(-100%)}.slide-right-enter-to,.slide-right-leave-from{opacity:1;transform:translateX(0)}.slide-right-leave-to{opacity:0;transform:translateX(100%)}.icon-link{opacity:0;transition:opacity .5s ease}.icon-link.visible{opacity:1}.content-wrapper{max-height:0;opacity:0;overflow:hidden;transition:max-height .5s ease,opacity .5s ease;will-change:max-height,opacity}.content-wrapper.visible{max-height:300px;opacity:1}
|
|
156
|
+
</style>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import AButton from "../button/Button.vue";
|
|
3
|
+
import APillTabs from "../pill-tabs/PillTabs.vue";
|
|
4
|
+
import AlmatyContacts from "./AlmatyContacts.vue";
|
|
5
|
+
import AstanaContacts from "./AstanaContacts.vue";
|
|
6
|
+
import { ref, useI18n } from "#imports";
|
|
7
|
+
import ArrowTopRightOnSquare from "#icons/arrow/arrow-top-right-on-square.vue";
|
|
8
|
+
import IXMark from "#icons/x-mark.vue";
|
|
9
|
+
const props = defineProps({
|
|
10
|
+
animation: { type: String, required: false, default: "previous" },
|
|
11
|
+
index: { type: Number, required: false, default: 2 },
|
|
12
|
+
url: { type: String, required: false, default: "" }
|
|
13
|
+
});
|
|
14
|
+
defineEmits(["outerClick", "mouseOver"]);
|
|
15
|
+
const { t } = useI18n();
|
|
16
|
+
const activeTab = ref(0);
|
|
17
|
+
const options = [
|
|
18
|
+
{
|
|
19
|
+
key: 0,
|
|
20
|
+
name: '\u0422\u041E\u041E "Alldata"'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
key: 1,
|
|
24
|
+
name: " \u0422\u041E\u041E \xABADATA Consulting\xBB"
|
|
25
|
+
}
|
|
26
|
+
];
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<template>
|
|
30
|
+
<div class="normal-case">
|
|
31
|
+
<div class="bg-white dark:bg-gray-950">
|
|
32
|
+
<transition :name="animation">
|
|
33
|
+
<div
|
|
34
|
+
:key="index"
|
|
35
|
+
class="a-container"
|
|
36
|
+
>
|
|
37
|
+
<div class="pt-2 mb-8 flex justify-between">
|
|
38
|
+
<a-pill-tabs
|
|
39
|
+
v-model="activeTab"
|
|
40
|
+
class="gap-2"
|
|
41
|
+
size="lg"
|
|
42
|
+
view="mobile"
|
|
43
|
+
:options="options"
|
|
44
|
+
/>
|
|
45
|
+
<nuxt-link :to="url">
|
|
46
|
+
<a-button variant="gray">
|
|
47
|
+
{{ t("header.contacts.toContacts") }}
|
|
48
|
+
<arrow-top-right-on-square />
|
|
49
|
+
</a-button>
|
|
50
|
+
</nuxt-link>
|
|
51
|
+
</div>
|
|
52
|
+
<div>
|
|
53
|
+
<almaty-contacts v-show="activeTab === 0" />
|
|
54
|
+
<astana-contacts v-show="activeTab === 1" />
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
</transition>
|
|
58
|
+
<button
|
|
59
|
+
class="absolute right-8 top-4"
|
|
60
|
+
@click="$emit('outerClick')"
|
|
61
|
+
>
|
|
62
|
+
<i-x-mark
|
|
63
|
+
width="32"
|
|
64
|
+
height="32"
|
|
65
|
+
/>
|
|
66
|
+
</button>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</template>
|
|
70
|
+
|
|
71
|
+
<style scoped>
|
|
72
|
+
.next-enter-from,
|
|
73
|
+
.next-leave-to {
|
|
74
|
+
opacity: 0;
|
|
75
|
+
transform: translateX(30%);
|
|
76
|
+
position: absolute;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.next-enter-active {
|
|
80
|
+
transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.next-leave-active {
|
|
84
|
+
transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
85
|
+
opacity: 0;
|
|
86
|
+
transform: translateX(-30%);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.prev-enter-from,
|
|
90
|
+
.prev-leave-to {
|
|
91
|
+
position: absolute;
|
|
92
|
+
opacity: 0;
|
|
93
|
+
transform: translateX(-30%);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.prev-enter-active {
|
|
97
|
+
transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.prev-leave-active {
|
|
101
|
+
transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
102
|
+
opacity: 0;
|
|
103
|
+
transform: translateX(30%);
|
|
104
|
+
}
|
|
105
|
+
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
animation?: string;
|
|
3
|
+
index?: number;
|
|
4
|
+
url?: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {
|
|
7
|
+
index: number;
|
|
8
|
+
animation: string;
|
|
9
|
+
url: string;
|
|
10
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import ContactMenu from "./ContactMenu.vue";
|
|
3
|
+
import ProductMenu from "./ProductMenu.vue";
|
|
4
|
+
import { ref, shallowRef, useI18n, onBeforeUnmount, watch, useAppConfig } from "#imports";
|
|
5
|
+
const { t } = useI18n();
|
|
6
|
+
const appConfig = useAppConfig();
|
|
7
|
+
const mode = appConfig.adataUI.mode;
|
|
8
|
+
const navs = [
|
|
9
|
+
{
|
|
10
|
+
label: "header.navs.products",
|
|
11
|
+
to: "/"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
label: "header.navs.contacts",
|
|
15
|
+
to: `https://${mode}.kz/contacts`
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
label: "header.navs.tariffs",
|
|
19
|
+
to: `https://${mode}.kz/tariffs`
|
|
20
|
+
}
|
|
21
|
+
];
|
|
22
|
+
const menu = ref(null);
|
|
23
|
+
const isBodyAlreadyLocked = ref(false);
|
|
24
|
+
const currentIndex = ref(0);
|
|
25
|
+
const forward = ref(true);
|
|
26
|
+
const show = ref(false);
|
|
27
|
+
const isMenuLocked = ref(false);
|
|
28
|
+
const animation = ref("slide-fade");
|
|
29
|
+
const currentMenu = shallowRef(null);
|
|
30
|
+
const delayTimer = ref(null);
|
|
31
|
+
const currentMenuToShow = (index) => {
|
|
32
|
+
switch (index) {
|
|
33
|
+
case 0:
|
|
34
|
+
return ProductMenu;
|
|
35
|
+
case 1:
|
|
36
|
+
return ContactMenu;
|
|
37
|
+
case 2:
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const toggleMenu = (index) => {
|
|
42
|
+
if (index === 2) {
|
|
43
|
+
window.open(`https://${mode}.kz/tariffs`, "_blank");
|
|
44
|
+
} else {
|
|
45
|
+
currentMenu.value = currentMenuToShow(index);
|
|
46
|
+
const prev = currentIndex.value;
|
|
47
|
+
if (prev < index) {
|
|
48
|
+
forward.value = false;
|
|
49
|
+
} else if (prev > index) {
|
|
50
|
+
forward.value = true;
|
|
51
|
+
}
|
|
52
|
+
animation.value = forward.value ? " prev" : "next";
|
|
53
|
+
if (!show.value) animation.value = "slide-fade";
|
|
54
|
+
currentIndex.value = index;
|
|
55
|
+
show.value = true;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const closeMenu = (forceClose = false) => {
|
|
59
|
+
if (isMenuLocked.value && !forceClose) {
|
|
60
|
+
return;
|
|
61
|
+
} else {
|
|
62
|
+
animation.value = "slide-fade";
|
|
63
|
+
show.value = false;
|
|
64
|
+
setTimeout(() => {
|
|
65
|
+
isMenuLocked.value = false;
|
|
66
|
+
currentMenu.value = null;
|
|
67
|
+
}, 200);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const onMenuMouseEnter = (index) => {
|
|
71
|
+
if (index !== 2) {
|
|
72
|
+
if (show.value === false) {
|
|
73
|
+
delayTimer.value = setTimeout(() => {
|
|
74
|
+
toggleMenu(index);
|
|
75
|
+
}, 600);
|
|
76
|
+
} else {
|
|
77
|
+
delayTimer.value = setTimeout(() => {
|
|
78
|
+
toggleMenu(index);
|
|
79
|
+
}, 100);
|
|
80
|
+
}
|
|
81
|
+
} else show.value = false;
|
|
82
|
+
};
|
|
83
|
+
const onMenuMouseLeave = () => {
|
|
84
|
+
if (delayTimer.value) {
|
|
85
|
+
clearTimeout(delayTimer.value);
|
|
86
|
+
delayTimer.value = null;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const lockMenu = () => {
|
|
90
|
+
isMenuLocked.value = true;
|
|
91
|
+
};
|
|
92
|
+
const toggleBodyScroll = (el, lock) => {
|
|
93
|
+
if (lock) {
|
|
94
|
+
setTimeout(() => {
|
|
95
|
+
}, 0);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
onBeforeUnmount(() => {
|
|
100
|
+
if (show.value) toggleBodyScroll(menu.value, false);
|
|
101
|
+
});
|
|
102
|
+
watch(
|
|
103
|
+
() => [show.value, menu.value],
|
|
104
|
+
(newVal, oldVal) => {
|
|
105
|
+
const wasShown = oldVal ? oldVal[0] : false;
|
|
106
|
+
const [isShown, menuEl] = newVal;
|
|
107
|
+
const isOpening = isShown;
|
|
108
|
+
const isClosing = wasShown && !isShown;
|
|
109
|
+
if (!menuEl) return;
|
|
110
|
+
if (isOpening) isBodyAlreadyLocked.value = !!document.body.style.overflow;
|
|
111
|
+
if (isShown) {
|
|
112
|
+
toggleBodyScroll(menuEl, true);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (!isClosing || isBodyAlreadyLocked.value) return;
|
|
116
|
+
setTimeout(() => {
|
|
117
|
+
if (menuEl) toggleBodyScroll(menuEl, false);
|
|
118
|
+
}, 100);
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
</script>
|
|
122
|
+
|
|
123
|
+
<template>
|
|
124
|
+
<ul>
|
|
125
|
+
<li
|
|
126
|
+
v-for="(nav, index) in navs"
|
|
127
|
+
:key="nav.label"
|
|
128
|
+
class="group inline-block border-r border-[#2C3E501A] px-2 last-of-type:border-none dark:border-[#E3E5E81A]"
|
|
129
|
+
@click="lockMenu"
|
|
130
|
+
>
|
|
131
|
+
<div
|
|
132
|
+
class="relative cursor-pointer font-bold uppercase text-gray-800 hover:text-gray-600 dark:text-gray-200 hover:dark:text-gray-600"
|
|
133
|
+
@mouseenter="onMenuMouseEnter(index)"
|
|
134
|
+
@click="toggleMenu(index)"
|
|
135
|
+
@mouseleave="onMenuMouseLeave"
|
|
136
|
+
>
|
|
137
|
+
{{ t(nav.label) }}
|
|
138
|
+
<div class="absolute left-[-8px] w-[calc(100%+16px)]">
|
|
139
|
+
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
<div
|
|
143
|
+
v-show="show"
|
|
144
|
+
class="fixed left-0 top-[104px] z-20 h-full w-full"
|
|
145
|
+
>
|
|
146
|
+
<transition :name="animation">
|
|
147
|
+
<keep-alive>
|
|
148
|
+
<component
|
|
149
|
+
:is="currentMenu"
|
|
150
|
+
v-show="show"
|
|
151
|
+
ref="menu"
|
|
152
|
+
:url="currentIndex === 1 ? `https://${mode}.kz/contacts` : nav.to"
|
|
153
|
+
:animation="forward ? 'next' : 'prev'"
|
|
154
|
+
:index="currentIndex"
|
|
155
|
+
@outer-click="closeMenu(true)"
|
|
156
|
+
@mouse-over="closeMenu"
|
|
157
|
+
/>
|
|
158
|
+
</keep-alive>
|
|
159
|
+
</transition>
|
|
160
|
+
<div
|
|
161
|
+
v-show="show"
|
|
162
|
+
class="absolute left-[-25%] h-full w-[150%] bg-[#E3E5E833] backdrop-blur transition"
|
|
163
|
+
@click="closeMenu(true)"
|
|
164
|
+
@mouseover="closeMenu(false)"
|
|
165
|
+
/>
|
|
166
|
+
</div>
|
|
167
|
+
</li>
|
|
168
|
+
</ul>
|
|
169
|
+
</template>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|