@ozdao/martyrs 0.2.594 → 0.2.595
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/martyrs/src/modules/core/views/components/layouts/Client.vue.js +3 -2
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js.map +1 -1
- package/dist/style.css +12 -12
- package/package.json +1 -1
- package/src/modules/core/views/components/layouts/Client.vue +1 -1
- package/src/modules/core/views/components/partials/Navigation.vue +2 -2
|
@@ -301,8 +301,9 @@ const _sfc_main = {
|
|
|
301
301
|
footer: withCtx(() => [
|
|
302
302
|
unref(route).meta?.sidebar_footer_component ? (openBlock(), createBlock(resolveDynamicComponent(unref(route).meta.sidebar_footer_component), {
|
|
303
303
|
key: 0,
|
|
304
|
-
theme: headerTheme.value
|
|
305
|
-
|
|
304
|
+
theme: headerTheme.value,
|
|
305
|
+
stateSidebar: unref(store).core.state.isOpenSidebar
|
|
306
|
+
}, null, 8, ["theme", "stateSidebar"])) : createCommentVNode("", true)
|
|
306
307
|
]),
|
|
307
308
|
default: withCtx(() => [
|
|
308
309
|
createVNode(Transition, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.vue.js","sources":["../../../../../../../../src/modules/core/views/components/layouts/Client.vue"],"sourcesContent":["<template>\n <div\n class=\"flex flex-column h-100 w-100 pos-relative o-hidden\"\n id=\"app-wrapper\"\n :class=\"{\n [(route.name ? route.name.replace(/\\s+/g, '_') : route.path.replace(/\\W+/g, '_')).toLowerCase()]: true,\n 'pd-t-big': MOBILE_APP === 'ios',\n 'bg-white': headerTheme === 'light',\n 'bg-black': headerTheme === 'dark',\n }\"\n >\n <transition name=\"moveFromTop\" appear>\n <Loader class=\"pos-fixed z-index-10\" v-if=\"!page || store.core.state.loading\" :centered=\"true\" />\n </transition>\n\n <transition name=\"moveFromTop\" mode=\"out-in\">\n <section class=\"w-100 h-100\" v-if=\"FirstUse && route.meta.walkthrough\">\n <component class=\"tab\" :is=\"route.meta.walkthrough\" name=\"Walkthrough\" @updateFirstUse=\"updateFirstUse\" :slides=\"[1, 2, 3]\"> </component>\n </section>\n </transition>\n \n <transition name=\"moveFromTop\" mode=\"out-in\">\n <Status class=\"z-index-10\" v-if=\"store.core.state.error.show\" :data=\"store.core.state.error\" @close=\"store.core.state.error.show = false\" />\n </transition>\n\n <transition name=\"moveFromTop\" mode=\"out-in\">\n <Snack\n class=\"z-index-10\"\n v-if=\"store.core.state.snack.show\"\n :type=\"store.core.state.snack.type\"\n :message=\"store.core.state.snack.message\"\n :show=\"store.core.state.snack.show\"\n @close=\"store.core.state.snack.show = false\"\n />\n </transition>\n\n\n <component\n v-if=\"!MOBILE_APP && route.meta.header\"\n ref=\"header\"\n :is=\"route.meta.header\"\n :theme=\"headerTheme\"\n :logotype=\"route.meta.logotype\"\n :location=\"route.meta.location\"\n :headerClass=\"computedHeaderClass\"\n :showCart=\"route.meta.header_show_cart ?? true\"\n :showProfile=\"route.meta.header_show_profile ?? true\"\n :showNotifications=\"route.meta.header_show_notifications ?? true\"\n >\n <component\n v-if=\"route.meta?.header_navigation\"\n :is=\"route.meta.header_navigation\"\n :horizontal=\"true\"\n :navigationItems=\"route.meta.header_navigation_items\"\n :stateSidebar=\"store.core.state.isOpenSidebar\"\n :theme=\"headerTheme\"\n />\n <template #right>\n <component v-if=\"route.meta?.header_right_component\" :is=\"route.meta.header_right_component\" :theme=\"headerTheme\" />\n </template>\n </component>\n\n\n <transition name=\"moveFromTop\" mode=\"out-in\" appear>\n <component\n v-if=\"MOBILE_APP && !route.meta.hideNavigationBar\"\n :is=\"route.meta.navigationbar\"\n :logotype=\"route.meta.logotype\"\n :navigationItems=\"route.meta.sidebar_navigation_items\"\n :stateSidebar=\"store.core.state.isOpenSidebar\"\n />\n </transition>\n\n <Popup class=\"bg-white pd-semi w-m-33r radius-big\" @close-popup=\"closeLocationPopup\" :isPopupOpen=\"store.core.state.isOpenLocationPopup\">\n <LocationSelection />\n </Popup>\n\n <!-- class=\"flex flex-nowrap ease-in-out o-hidden pos-relative\" -->\n <section\n class=\"flex flex-nowrap h-100 pos-relative o-hidden ease-in-out\"\n id=\"screen\"\n ref=\"screen\"\n :class=\"{\n '': MOBILE_APP === 'ios',\n }\"\n >\n <ShopCart\n :class=\"{\n 'mobile:pd-t-extra': MOBILE_APP === 'ios',\n }\"\n />\n <component\n v-if=\"route.meta?.sidebar\"\n :is=\"route.meta.sidebar\"\n :stateSidebar=\"store.core.state.isOpenSidebar\"\n :widthHidden=\"route.meta?.sidebar_width_hidden\"\n :width=\"route.meta?.sidebar_width\"\n :theme=\"headerTheme\"\n @closeSidebar=\"() => (store.core.state.isOpenSidebar = false)\"\n >\n <!-- Header slot -->\n <template #header>\n <component v-if=\"route.meta?.sidebar_header_component\" :is=\"route.meta.sidebar_header_component\" :theme=\"headerTheme\" />\n </template>\n\n <!-- Navigation (default slot) -->\n <transition name=\"moveFromTop\" mode=\"out-in\">\n <component\n v-if=\"route.meta?.sidebar_navigation\"\n :is=\"route.meta.sidebar_navigation\"\n :key=\"route.meta.sidebar_navigation\"\n :navigationItems=\"route.meta.sidebar_navigation_items\"\n :stateSidebar=\"store.core.state.isOpenSidebar\"\n :theme=\"headerTheme\"\n />\n </transition>\n\n <!-- Footer slot -->\n <template #footer>\n <component v-if=\"route.meta?.sidebar_footer_component\" :is=\"route.meta.sidebar_footer_component\" :theme=\"headerTheme\" />\n </template>\n </component>\n\t \n <div class=\"rows-[minmax(0,1fr)] z-index-1 pos-relative w-100 h-100\">\n <div class=\"o-y-scroll o-x-hidden h-100\" id=\"scrollview\" ref=\"scrollview\" @scroll=\"handleScroll\">\n <div class=\"h-min-100 pos-relative w-100\">\n <!-- <section v-if=\"!route.meta?.breadcrumbs?.hide\" class=\"pd-thin pd-b-zero\">\n\t\t\t\t<Breadcrumbs \n\t\t\t\t\tv-if=\"!MOBILE_APP\"\n\t\t\t\t\tclass=\"bg-light pd-small radius-small\"\n\t\t\t\t/>\n\t\t\t</section> -->\n\n <Suspense @resolve=\"onSuspenseResolved\">\n <router-view\n class=\"h-min-100 pos-relative w-100\"\n id=\"view\"\n v-slot=\"{ Component, route }\"\n :class=\"{\n 'scroll-hide': MOBILE_APP,\n }\"\n >\n <transition @before-enter=\"scrollTop\" name=\"scaleTransition\" mode=\"out-in\" appear>\n <div class=\"w-100 h-min-100\" :key=\"componentKey\">\n <component class=\"w-100 h-min-100\" ref=\"page\" :is=\"Component\" @page-loading=\"handlePageLoading\" @page-loaded=\"handlePageLoaded\" />\n <component\n v-if=\"!MOBILE_APP && route.meta.footer && !route.meta.hideFooter\"\n ref=\"footer\"\n :is=\"route.meta.footer\"\n :theme=\"route.meta.footer_theme || 'light'\"\n :logotype=\"route.meta.logotype\"\n :location=\"route.meta.location\"\n />\n </div>\n </transition>\n </router-view>\n </Suspense>\n </div>\n\n <component class=\"z-index-2\" id=\"player-wrapper\" v-if=\"route.meta.player\" :is=\"route.meta.player\" />\n </div>\n </div>\n </section>\n\n <router-view v-slot=\"{ Component, route }\" name=\"defaultBottom\">\n <component :is=\"Component\" />\n </router-view>\n\n <component class=\"z-index-2\" v-if=\"MOBILE_APP && route.meta.title_hide\" :is=\"route.meta.bottombar\" />\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted } from 'vue';\n// Router\nimport { useRoute } from 'vue-router';\n// Store\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n// Partials\nimport Status from '@martyrs/src/components/Status/Status.vue';\nimport Snack from '@martyrs/src/components/Status/Snack.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Breadcrumbs from '@martyrs/src/components/Breadcrumbs/Breadcrumbs.vue';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\n\nimport NavigationBar from '@martyrs/src/modules/core/views/components/partials/NavigationBar.vue';\nimport LocationSelection from '@martyrs/src/modules/core/views/components/partials/LocationSelection.vue';\n\nimport ShopCart from '@martyrs/src/modules/orders/components/partials/ShopCart.vue';\n// PROPS\nconst props = defineProps({\n env: {\n type: Object,\n required: true,\n },\n app: {\n type: Object,\n required: true,\n },\n modules: {\n type: Object,\n required: true,\n },\n});\n\nconst store = useStore();\n\n/////////////////////////////\n// LOADING\n/////////////////////////////\n// State\nlet show = ref(false);\n// Preloader\nconst page = ref(null);\nconst scrollview = ref(null);\n\n// isPageLoading убран - используем core.state.loading\n\n// Обработчики событий загрузки\nfunction handlePageLoading() {\n store.core.state.loading = true;\n}\n\nfunction handlePageLoaded() {\n store.core.state.loading = false;\n}\n\n// Обработка события разрешения Suspense (когда async setup компонента завершается)\nfunction onSuspenseResolved() {\n // Если страница не отправляет событие page-loaded, этот обработчик\n // может служить запасным вариантом для отключения лоадера\n // Можно оставить закомментированным, если все страницы будут явно вызывать handlePageLoaded\n store.core.state.loading = false;\n}\n/////////////////////////////\n// CREATED\n/////////////////////////////\nconst route = useRoute();\n// const router = useRouter()\n\n// Инициализация sidebar для SSR + первая загрузка\nif (route.meta?.sidebarOpenOnEnter === true) {\n store.core.state.isOpenSidebar = true;\n}\n\n// Ref Code\nconst referalCode = ref(route.query.referalCode);\n/////////////////////////////\n// Methods\n/////////////////////////////\nfunction closeLocationPopup() {\n store.core.state.isOpenLocationPopup = false;\n}\nfunction scrollTop() {\n if (scrollview.value) scrollview.value.scrollTop = 0;\n}\n// Scrolling header\nconst scrollOffset = ref(0);\nconst header = ref(null);\n\n// Режим → классы позиционирования\nconst modeClasses = {\n static: 'pos-relative',\n sticky: 'pos-sticky pos-t-0',\n fixed: 'pos-fixed pos-t-0 w-100',\n overlay: 'pos-absolute pos-t-0 w-100'\n};\n\n// isScrolled\nconst isScrolled = computed(() =>\n scrollOffset.value > (route.meta.header_scroll_threshold ?? 50)\n);\n\n// headerTheme с учётом скролла\nconst headerTheme = computed(() => {\n if (isScrolled.value && route.meta.header_scroll_theme) {\n return route.meta.header_scroll_theme;\n }\n return route.meta.header_theme || 'light';\n});\n\n// headerModeClass (overlay → fixed после скролла)\nconst headerModeClass = computed(() => {\n const mode = route.meta.header_mode || 'static';\n if (mode === 'overlay' && isScrolled.value) {\n return 'pos-fixed pos-t-0 w-100';\n }\n return modeClasses[mode];\n});\n\n// headerAppearanceClass\nconst headerAppearanceClass = computed(() => {\n const config = isScrolled.value\n ? route.meta.header_scroll_class\n : route.meta.header_class;\n\n if (config && typeof config === 'object') {\n return config[headerTheme.value];\n }\n return config;\n});\n\n// Autohide\nconst isHidden = ref(false);\nlet lastScrollY = 0;\n\n// computedHeaderClass для передачи в Header\nconst computedHeaderClass = computed(() => [\n headerModeClass.value,\n headerAppearanceClass.value,\n { 'header--hidden': isHidden.value }\n]);\n\nconst handleScroll = (event) => {\n const scrollY = event.target.scrollTop;\n scrollOffset.value = scrollY;\n\n // Autohide логика\n if (route.meta.header_autohide) {\n if (scrollY > lastScrollY && scrollY > 200) {\n isHidden.value = true;\n } else if (scrollY < lastScrollY) {\n isHidden.value = false;\n }\n lastScrollY = scrollY;\n }\n};\n/////////////////////////////\n// FIRST USE\n/////////////////////////////\nconst FirstUse = ref(false);\n\nimport { Preferences } from '@capacitor/preferences';\n\nasync function getFirstUse() {\n const ret = await Preferences.get({ key: 'first-use' });\n FirstUse.value = ret.value ? JSON.parse(ret.value) : true;\n}\n\nconst updateFirstUse = value => {\n FirstUse.value = value;\n};\n\nconst { isPhone, isTablet } = useGlobalMixins();\n\nonMounted(async () => {\n await getFirstUse();\n\n // Закрываем sidebar на mobile (CSS уже скрыл визуально)\n if ((isPhone() || isTablet()) && store.core.state.isOpenSidebar) {\n store.core.state.isOpenSidebar = false;\n }\n\n // Регистрация единого Service Worker (PWA + push notifications)\n if ('serviceWorker' in navigator && !window.__MOBILE_APP__) {\n window.addEventListener('load', () => {\n navigator.serviceWorker\n .register('/sw.js')\n .then(registration => {\n console.log('Unified SW registered: ', registration);\n })\n .catch(registrationError => {\n console.log('SW registration failed: ', registrationError);\n });\n });\n }\n\n if (!store.core.state.position && route.meta.location) {\n store.core.state.isOpenLocationPopup = true;\n } else {\n store.core.state.isOpenLocationPopup = false;\n }\n\n if (referalCode.value) {\n localStorage.setItem('referalCode', referalCode.value);\n }\n\n if (page.value) show.value = true;\n});\n\nconst componentKey = computed(() => {\n // Собираем только значимые параметры (ID сущностей)\n const significantParams = ['_id', 'product', 'organization', 'categoryPath', 'country', 'state', 'city']\n .map(param => route.params[param])\n .filter(Boolean)\n .join('-');\n\n return significantParams || route.meta.layoutKey || route.name;\n});\n</script>\n\n<style lang=\"scss\">\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.5s;\n}\n\n.fade-enter,\n.fade-leave-to\n\n/* .fade-leave-active в версии 2.1.8+ */ {\n opacity: 0;\n}\n\n.fade-move,\n.fade-enter-active,\n.fade-leave-active {\n transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);\n}\n\n/* 2. declare enter from and leave to state */\n.fade-enter-from,\n.fade-leave-to {\n opacity: 0;\n transform: translate(30px, 0);\n}\n\n/* 3. ensure leaving items are taken out of layout flow so that moving\n animations can be calculated correctly. */\n.fade-leave-active {\n position: absolute;\n}\n\n.moveFromTop-enter-active,\n.moveFromTop-leave-active {\n transition:\n all 0.3s ease,\n max-height 0.2s ease;\n overflow: hidden;\n}\n\n.moveFromTop-enter-from,\n.moveFromTop-leave-to {\n transform: translateY(-1rem);\n opacity: 0;\n // max-height: 0;\n}\n\n.moveFromTop-enter-to,\n.moveFromTop-leave-from {\n // max-height: 100vh;\n}\n\n.moveFromTopAbsolute-enter-active,\n.moveFromTopAbsolute-leave-active {\n transform: translateY(0);\n opacity: 1;\n transition: all 0.5s ease;\n}\n\n.moveFromTopAbsolute-enter-from,\n.moveFromTopAbsolute-leave-to {\n position: absolute;\n transform: translateY(-1rem);\n opacity: 0;\n transition: all 0.5s ease;\n}\n\n.ScaleOut-enter-active,\n.ScaleOut-leave-active {\n opacity: 1;\n transform: scale(1);\n transition: all 0.3s ease;\n}\n\n.ScaleOut-enter-from,\n.ScaleOut-leave-to {\n opacity: 0;\n transform: scale(0.9);\n transition: all 0.3s ease;\n}\n\n.slide-fade-enter-active {\n // min-height: 100vh;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.slide-fade-leave-active {\n // min-height: 100vh;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.slide-fade-enter-from,\n.slide-fade-leave-to {\n min-height: 0;\n transform: translateX(20px);\n opacity: 0;\n left: 0;\n top: 0;\n}\n\n.scaleTransition-5px-enter-active,\n.scaleTransition-5px-leave-active {\n transform: translateY(0px);\n opacity: 1;\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.scaleTransition-5px-enter-from,\n.scaleTransition-5px-leave-to {\n opacity: 0;\n z-index: 0;\n position: absolute;\n transform: translateY(-30px);\n transition: all 0.2s ease;\n}\n\n.scaleTransition-enter-from,\n.scaleTransition-leave-to {\n opacity: 0;\n z-index: 0;\n position: absolute;\n width: inherit;\n height: inherit;\n display: block;\n transform: translateY(30px);\n transition: all 0.5s ease;\n}\n\n.scaleTransition-enter-active,\n.scaleTransition-leave-active {\n transform: translateY(0px);\n opacity: 1;\n z-index: 1;\n transition: all 0.5s ease;\n}\n\n.scaleTransition-enter-from,\n.scaleTransition-leave-to {\n opacity: 0;\n z-index: 0;\n position: absolute;\n width: inherit;\n height: inherit;\n display: block;\n transform: translateY(30px);\n transition: all 0.5s ease;\n}\n\n.scaleIn-enter-active,\n.scaleIn-leave-active {\n // background: red;\n transition: all 0.5s ease;\n\n > section,\n div {\n transform-origin: 0 0;\n transform: translateZ(0px);\n transition: all 0.5s ease;\n }\n}\n\n.scaleIn-enter-from,\n.scaleIn-leave-to {\n opacity: 0;\n transform: scale(0.95);\n\n > section,\n div {\n transform: translateZ(-30px);\n transition: all 0.5s ease;\n }\n}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8MA,UAAM,QAAQ,SAAQ;AAMtB,QAAI,OAAO,IAAI,KAAK;AAEpB,UAAM,OAAO,IAAI,IAAI;AACrB,UAAM,aAAa,IAAI,IAAI;AAK3B,aAAS,oBAAoB;AAC3B,YAAM,KAAK,MAAM,UAAU;AAAA,IAC7B;AAEA,aAAS,mBAAmB;AAC1B,YAAM,KAAK,MAAM,UAAU;AAAA,IAC7B;AAGA,aAAS,qBAAqB;AAI5B,YAAM,KAAK,MAAM,UAAU;AAAA,IAC7B;AAIA,UAAM,QAAQ,SAAQ;AAItB,QAAI,MAAM,MAAM,uBAAuB,MAAM;AAC3C,YAAM,KAAK,MAAM,gBAAgB;AAAA,IACnC;AAGA,UAAM,cAAc,IAAI,MAAM,MAAM,WAAW;AAI/C,aAAS,qBAAqB;AAC5B,YAAM,KAAK,MAAM,sBAAsB;AAAA,IACzC;AACA,aAAS,YAAY;AACnB,UAAI,WAAW,MAAO,YAAW,MAAM,YAAY;AAAA,IACrD;AAEA,UAAM,eAAe,IAAI,CAAC;AAC1B,UAAM,SAAS,IAAI,IAAI;AAGvB,UAAM,cAAc;AAAA,MAClB,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAGA,UAAM,aAAa;AAAA,MAAS,MAC1B,aAAa,SAAS,MAAM,KAAK,2BAA2B;AAAA,IAC9D;AAGA,UAAM,cAAc,SAAS,MAAM;AACjC,UAAI,WAAW,SAAS,MAAM,KAAK,qBAAqB;AACtD,eAAO,MAAM,KAAK;AAAA,MACpB;AACA,aAAO,MAAM,KAAK,gBAAgB;AAAA,IACpC,CAAC;AAGD,UAAM,kBAAkB,SAAS,MAAM;AACrC,YAAM,OAAO,MAAM,KAAK,eAAe;AACvC,UAAI,SAAS,aAAa,WAAW,OAAO;AAC1C,eAAO;AAAA,MACT;AACA,aAAO,YAAY,IAAI;AAAA,IACzB,CAAC;AAGD,UAAM,wBAAwB,SAAS,MAAM;AAC3C,YAAM,SAAS,WAAW,QACtB,MAAM,KAAK,sBACX,MAAM,KAAK;AAEf,UAAI,UAAU,OAAO,WAAW,UAAU;AACxC,eAAO,OAAO,YAAY,KAAK;AAAA,MACjC;AACA,aAAO;AAAA,IACT,CAAC;AAGD,UAAM,WAAW,IAAI,KAAK;AAC1B,QAAI,cAAc;AAGlB,UAAM,sBAAsB,SAAS,MAAM;AAAA,MACzC,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,MACtB,EAAE,kBAAkB,SAAS,MAAK;AAAA,IACpC,CAAC;AAED,UAAM,eAAe,CAAC,UAAU;AAC9B,YAAM,UAAU,MAAM,OAAO;AAC7B,mBAAa,QAAQ;AAGrB,UAAI,MAAM,KAAK,iBAAiB;AAC9B,YAAI,UAAU,eAAe,UAAU,KAAK;AAC1C,mBAAS,QAAQ;AAAA,QACnB,WAAW,UAAU,aAAa;AAChC,mBAAS,QAAQ;AAAA,QACnB;AACA,sBAAc;AAAA,MAChB;AAAA,IACF;AAIA,UAAM,WAAW,IAAI,KAAK;AAI1B,mBAAe,cAAc;AAC3B,YAAM,MAAM,MAAM,YAAY,IAAI,EAAE,KAAK,aAAa;AACtD,eAAS,QAAQ,IAAI,QAAQ,KAAK,MAAM,IAAI,KAAK,IAAI;AAAA,IACvD;AAEA,UAAM,iBAAiB,WAAS;AAC9B,eAAS,QAAQ;AAAA,IACnB;AAEA,UAAM,EAAE,SAAS,SAAQ,IAAK,gBAAe;AAE7C,cAAU,YAAY;AACpB,YAAM,YAAW;AAGjB,WAAK,QAAO,KAAM,SAAQ,MAAO,MAAM,KAAK,MAAM,eAAe;AAC/D,cAAM,KAAK,MAAM,gBAAgB;AAAA,MACnC;AAGA,UAAI,mBAAmB,aAAa,CAAC,OAAO,gBAAgB;AAC1D,eAAO,iBAAiB,QAAQ,MAAM;AACpC,oBAAU,cACP,SAAS,QAAQ,EACjB,KAAK,kBAAgB;AACpB,oBAAQ,IAAI,2BAA2B,YAAY;AAAA,UACrD,CAAC,EACA,MAAM,uBAAqB;AAC1B,oBAAQ,IAAI,4BAA4B,iBAAiB;AAAA,UAC3D,CAAC;AAAA,QACL,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,MAAM,KAAK,MAAM,YAAY,MAAM,KAAK,UAAU;AACrD,cAAM,KAAK,MAAM,sBAAsB;AAAA,MACzC,OAAO;AACL,cAAM,KAAK,MAAM,sBAAsB;AAAA,MACzC;AAEA,UAAI,YAAY,OAAO;AACrB,qBAAa,QAAQ,eAAe,YAAY,KAAK;AAAA,MACvD;AAEA,UAAI,KAAK,MAAO,MAAK,QAAQ;AAAA,IAC/B,CAAC;AAED,UAAM,eAAe,SAAS,MAAM;AAElC,YAAM,oBAAoB,CAAC,OAAO,WAAW,gBAAgB,gBAAgB,WAAW,SAAS,MAAM,EACpG,IAAI,WAAS,MAAM,OAAO,KAAK,CAAC,EAChC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,aAAO,qBAAqB,MAAM,KAAK,aAAa,MAAM;AAAA,IAC5D,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Client.vue.js","sources":["../../../../../../../../src/modules/core/views/components/layouts/Client.vue"],"sourcesContent":["<template>\n <div\n class=\"flex flex-column h-100 w-100 pos-relative o-hidden\"\n id=\"app-wrapper\"\n :class=\"{\n [(route.name ? route.name.replace(/\\s+/g, '_') : route.path.replace(/\\W+/g, '_')).toLowerCase()]: true,\n 'pd-t-big': MOBILE_APP === 'ios',\n 'bg-white': headerTheme === 'light',\n 'bg-black': headerTheme === 'dark',\n }\"\n >\n <transition name=\"moveFromTop\" appear>\n <Loader class=\"pos-fixed z-index-10\" v-if=\"!page || store.core.state.loading\" :centered=\"true\" />\n </transition>\n\n <transition name=\"moveFromTop\" mode=\"out-in\">\n <section class=\"w-100 h-100\" v-if=\"FirstUse && route.meta.walkthrough\">\n <component class=\"tab\" :is=\"route.meta.walkthrough\" name=\"Walkthrough\" @updateFirstUse=\"updateFirstUse\" :slides=\"[1, 2, 3]\"> </component>\n </section>\n </transition>\n \n <transition name=\"moveFromTop\" mode=\"out-in\">\n <Status class=\"z-index-10\" v-if=\"store.core.state.error.show\" :data=\"store.core.state.error\" @close=\"store.core.state.error.show = false\" />\n </transition>\n\n <transition name=\"moveFromTop\" mode=\"out-in\">\n <Snack\n class=\"z-index-10\"\n v-if=\"store.core.state.snack.show\"\n :type=\"store.core.state.snack.type\"\n :message=\"store.core.state.snack.message\"\n :show=\"store.core.state.snack.show\"\n @close=\"store.core.state.snack.show = false\"\n />\n </transition>\n\n\n <component\n v-if=\"!MOBILE_APP && route.meta.header\"\n ref=\"header\"\n :is=\"route.meta.header\"\n :theme=\"headerTheme\"\n :logotype=\"route.meta.logotype\"\n :location=\"route.meta.location\"\n :headerClass=\"computedHeaderClass\"\n :showCart=\"route.meta.header_show_cart ?? true\"\n :showProfile=\"route.meta.header_show_profile ?? true\"\n :showNotifications=\"route.meta.header_show_notifications ?? true\"\n >\n <component\n v-if=\"route.meta?.header_navigation\"\n :is=\"route.meta.header_navigation\"\n :horizontal=\"true\"\n :navigationItems=\"route.meta.header_navigation_items\"\n :stateSidebar=\"store.core.state.isOpenSidebar\"\n :theme=\"headerTheme\"\n />\n <template #right>\n <component v-if=\"route.meta?.header_right_component\" :is=\"route.meta.header_right_component\" :theme=\"headerTheme\" />\n </template>\n </component>\n\n\n <transition name=\"moveFromTop\" mode=\"out-in\" appear>\n <component\n v-if=\"MOBILE_APP && !route.meta.hideNavigationBar\"\n :is=\"route.meta.navigationbar\"\n :logotype=\"route.meta.logotype\"\n :navigationItems=\"route.meta.sidebar_navigation_items\"\n :stateSidebar=\"store.core.state.isOpenSidebar\"\n />\n </transition>\n\n <Popup class=\"bg-white pd-semi w-m-33r radius-big\" @close-popup=\"closeLocationPopup\" :isPopupOpen=\"store.core.state.isOpenLocationPopup\">\n <LocationSelection />\n </Popup>\n\n <!-- class=\"flex flex-nowrap ease-in-out o-hidden pos-relative\" -->\n <section\n class=\"flex flex-nowrap h-100 pos-relative o-hidden ease-in-out\"\n id=\"screen\"\n ref=\"screen\"\n :class=\"{\n '': MOBILE_APP === 'ios',\n }\"\n >\n <ShopCart\n :class=\"{\n 'mobile:pd-t-extra': MOBILE_APP === 'ios',\n }\"\n />\n <component\n v-if=\"route.meta?.sidebar\"\n :is=\"route.meta.sidebar\"\n :stateSidebar=\"store.core.state.isOpenSidebar\"\n :widthHidden=\"route.meta?.sidebar_width_hidden\"\n :width=\"route.meta?.sidebar_width\"\n :theme=\"headerTheme\"\n @closeSidebar=\"() => (store.core.state.isOpenSidebar = false)\"\n >\n <!-- Header slot -->\n <template #header>\n <component v-if=\"route.meta?.sidebar_header_component\" :is=\"route.meta.sidebar_header_component\" :theme=\"headerTheme\" />\n </template>\n\n <!-- Navigation (default slot) -->\n <transition name=\"moveFromTop\" mode=\"out-in\">\n <component\n v-if=\"route.meta?.sidebar_navigation\"\n :is=\"route.meta.sidebar_navigation\"\n :key=\"route.meta.sidebar_navigation\"\n :navigationItems=\"route.meta.sidebar_navigation_items\"\n :stateSidebar=\"store.core.state.isOpenSidebar\"\n :theme=\"headerTheme\"\n />\n </transition>\n\n <!-- Footer slot -->\n <template #footer>\n <component v-if=\"route.meta?.sidebar_footer_component\" :is=\"route.meta.sidebar_footer_component\" :theme=\"headerTheme\" :stateSidebar=\"store.core.state.isOpenSidebar\" />\n </template>\n </component>\n\t \n <div class=\"rows-[minmax(0,1fr)] z-index-1 pos-relative w-100 h-100\">\n <div class=\"o-y-scroll o-x-hidden h-100\" id=\"scrollview\" ref=\"scrollview\" @scroll=\"handleScroll\">\n <div class=\"h-min-100 pos-relative w-100\">\n <!-- <section v-if=\"!route.meta?.breadcrumbs?.hide\" class=\"pd-thin pd-b-zero\">\n\t\t\t\t<Breadcrumbs \n\t\t\t\t\tv-if=\"!MOBILE_APP\"\n\t\t\t\t\tclass=\"bg-light pd-small radius-small\"\n\t\t\t\t/>\n\t\t\t</section> -->\n\n <Suspense @resolve=\"onSuspenseResolved\">\n <router-view\n class=\"h-min-100 pos-relative w-100\"\n id=\"view\"\n v-slot=\"{ Component, route }\"\n :class=\"{\n 'scroll-hide': MOBILE_APP,\n }\"\n >\n <transition @before-enter=\"scrollTop\" name=\"scaleTransition\" mode=\"out-in\" appear>\n <div class=\"w-100 h-min-100\" :key=\"componentKey\">\n <component class=\"w-100 h-min-100\" ref=\"page\" :is=\"Component\" @page-loading=\"handlePageLoading\" @page-loaded=\"handlePageLoaded\" />\n <component\n v-if=\"!MOBILE_APP && route.meta.footer && !route.meta.hideFooter\"\n ref=\"footer\"\n :is=\"route.meta.footer\"\n :theme=\"route.meta.footer_theme || 'light'\"\n :logotype=\"route.meta.logotype\"\n :location=\"route.meta.location\"\n />\n </div>\n </transition>\n </router-view>\n </Suspense>\n </div>\n\n <component class=\"z-index-2\" id=\"player-wrapper\" v-if=\"route.meta.player\" :is=\"route.meta.player\" />\n </div>\n </div>\n </section>\n\n <router-view v-slot=\"{ Component, route }\" name=\"defaultBottom\">\n <component :is=\"Component\" />\n </router-view>\n\n <component class=\"z-index-2\" v-if=\"MOBILE_APP && route.meta.title_hide\" :is=\"route.meta.bottombar\" />\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted } from 'vue';\n// Router\nimport { useRoute } from 'vue-router';\n// Store\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n// Partials\nimport Status from '@martyrs/src/components/Status/Status.vue';\nimport Snack from '@martyrs/src/components/Status/Snack.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Breadcrumbs from '@martyrs/src/components/Breadcrumbs/Breadcrumbs.vue';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\n\nimport NavigationBar from '@martyrs/src/modules/core/views/components/partials/NavigationBar.vue';\nimport LocationSelection from '@martyrs/src/modules/core/views/components/partials/LocationSelection.vue';\n\nimport ShopCart from '@martyrs/src/modules/orders/components/partials/ShopCart.vue';\n// PROPS\nconst props = defineProps({\n env: {\n type: Object,\n required: true,\n },\n app: {\n type: Object,\n required: true,\n },\n modules: {\n type: Object,\n required: true,\n },\n});\n\nconst store = useStore();\n\n/////////////////////////////\n// LOADING\n/////////////////////////////\n// State\nlet show = ref(false);\n// Preloader\nconst page = ref(null);\nconst scrollview = ref(null);\n\n// isPageLoading убран - используем core.state.loading\n\n// Обработчики событий загрузки\nfunction handlePageLoading() {\n store.core.state.loading = true;\n}\n\nfunction handlePageLoaded() {\n store.core.state.loading = false;\n}\n\n// Обработка события разрешения Suspense (когда async setup компонента завершается)\nfunction onSuspenseResolved() {\n // Если страница не отправляет событие page-loaded, этот обработчик\n // может служить запасным вариантом для отключения лоадера\n // Можно оставить закомментированным, если все страницы будут явно вызывать handlePageLoaded\n store.core.state.loading = false;\n}\n/////////////////////////////\n// CREATED\n/////////////////////////////\nconst route = useRoute();\n// const router = useRouter()\n\n// Инициализация sidebar для SSR + первая загрузка\nif (route.meta?.sidebarOpenOnEnter === true) {\n store.core.state.isOpenSidebar = true;\n}\n\n// Ref Code\nconst referalCode = ref(route.query.referalCode);\n/////////////////////////////\n// Methods\n/////////////////////////////\nfunction closeLocationPopup() {\n store.core.state.isOpenLocationPopup = false;\n}\nfunction scrollTop() {\n if (scrollview.value) scrollview.value.scrollTop = 0;\n}\n// Scrolling header\nconst scrollOffset = ref(0);\nconst header = ref(null);\n\n// Режим → классы позиционирования\nconst modeClasses = {\n static: 'pos-relative',\n sticky: 'pos-sticky pos-t-0',\n fixed: 'pos-fixed pos-t-0 w-100',\n overlay: 'pos-absolute pos-t-0 w-100'\n};\n\n// isScrolled\nconst isScrolled = computed(() =>\n scrollOffset.value > (route.meta.header_scroll_threshold ?? 50)\n);\n\n// headerTheme с учётом скролла\nconst headerTheme = computed(() => {\n if (isScrolled.value && route.meta.header_scroll_theme) {\n return route.meta.header_scroll_theme;\n }\n return route.meta.header_theme || 'light';\n});\n\n// headerModeClass (overlay → fixed после скролла)\nconst headerModeClass = computed(() => {\n const mode = route.meta.header_mode || 'static';\n if (mode === 'overlay' && isScrolled.value) {\n return 'pos-fixed pos-t-0 w-100';\n }\n return modeClasses[mode];\n});\n\n// headerAppearanceClass\nconst headerAppearanceClass = computed(() => {\n const config = isScrolled.value\n ? route.meta.header_scroll_class\n : route.meta.header_class;\n\n if (config && typeof config === 'object') {\n return config[headerTheme.value];\n }\n return config;\n});\n\n// Autohide\nconst isHidden = ref(false);\nlet lastScrollY = 0;\n\n// computedHeaderClass для передачи в Header\nconst computedHeaderClass = computed(() => [\n headerModeClass.value,\n headerAppearanceClass.value,\n { 'header--hidden': isHidden.value }\n]);\n\nconst handleScroll = (event) => {\n const scrollY = event.target.scrollTop;\n scrollOffset.value = scrollY;\n\n // Autohide логика\n if (route.meta.header_autohide) {\n if (scrollY > lastScrollY && scrollY > 200) {\n isHidden.value = true;\n } else if (scrollY < lastScrollY) {\n isHidden.value = false;\n }\n lastScrollY = scrollY;\n }\n};\n/////////////////////////////\n// FIRST USE\n/////////////////////////////\nconst FirstUse = ref(false);\n\nimport { Preferences } from '@capacitor/preferences';\n\nasync function getFirstUse() {\n const ret = await Preferences.get({ key: 'first-use' });\n FirstUse.value = ret.value ? JSON.parse(ret.value) : true;\n}\n\nconst updateFirstUse = value => {\n FirstUse.value = value;\n};\n\nconst { isPhone, isTablet } = useGlobalMixins();\n\nonMounted(async () => {\n await getFirstUse();\n\n // Закрываем sidebar на mobile (CSS уже скрыл визуально)\n if ((isPhone() || isTablet()) && store.core.state.isOpenSidebar) {\n store.core.state.isOpenSidebar = false;\n }\n\n // Регистрация единого Service Worker (PWA + push notifications)\n if ('serviceWorker' in navigator && !window.__MOBILE_APP__) {\n window.addEventListener('load', () => {\n navigator.serviceWorker\n .register('/sw.js')\n .then(registration => {\n console.log('Unified SW registered: ', registration);\n })\n .catch(registrationError => {\n console.log('SW registration failed: ', registrationError);\n });\n });\n }\n\n if (!store.core.state.position && route.meta.location) {\n store.core.state.isOpenLocationPopup = true;\n } else {\n store.core.state.isOpenLocationPopup = false;\n }\n\n if (referalCode.value) {\n localStorage.setItem('referalCode', referalCode.value);\n }\n\n if (page.value) show.value = true;\n});\n\nconst componentKey = computed(() => {\n // Собираем только значимые параметры (ID сущностей)\n const significantParams = ['_id', 'product', 'organization', 'categoryPath', 'country', 'state', 'city']\n .map(param => route.params[param])\n .filter(Boolean)\n .join('-');\n\n return significantParams || route.meta.layoutKey || route.name;\n});\n</script>\n\n<style lang=\"scss\">\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.5s;\n}\n\n.fade-enter,\n.fade-leave-to\n\n/* .fade-leave-active в версии 2.1.8+ */ {\n opacity: 0;\n}\n\n.fade-move,\n.fade-enter-active,\n.fade-leave-active {\n transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);\n}\n\n/* 2. declare enter from and leave to state */\n.fade-enter-from,\n.fade-leave-to {\n opacity: 0;\n transform: translate(30px, 0);\n}\n\n/* 3. ensure leaving items are taken out of layout flow so that moving\n animations can be calculated correctly. */\n.fade-leave-active {\n position: absolute;\n}\n\n.moveFromTop-enter-active,\n.moveFromTop-leave-active {\n transition:\n all 0.3s ease,\n max-height 0.2s ease;\n overflow: hidden;\n}\n\n.moveFromTop-enter-from,\n.moveFromTop-leave-to {\n transform: translateY(-1rem);\n opacity: 0;\n // max-height: 0;\n}\n\n.moveFromTop-enter-to,\n.moveFromTop-leave-from {\n // max-height: 100vh;\n}\n\n.moveFromTopAbsolute-enter-active,\n.moveFromTopAbsolute-leave-active {\n transform: translateY(0);\n opacity: 1;\n transition: all 0.5s ease;\n}\n\n.moveFromTopAbsolute-enter-from,\n.moveFromTopAbsolute-leave-to {\n position: absolute;\n transform: translateY(-1rem);\n opacity: 0;\n transition: all 0.5s ease;\n}\n\n.ScaleOut-enter-active,\n.ScaleOut-leave-active {\n opacity: 1;\n transform: scale(1);\n transition: all 0.3s ease;\n}\n\n.ScaleOut-enter-from,\n.ScaleOut-leave-to {\n opacity: 0;\n transform: scale(0.9);\n transition: all 0.3s ease;\n}\n\n.slide-fade-enter-active {\n // min-height: 100vh;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.slide-fade-leave-active {\n // min-height: 100vh;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.slide-fade-enter-from,\n.slide-fade-leave-to {\n min-height: 0;\n transform: translateX(20px);\n opacity: 0;\n left: 0;\n top: 0;\n}\n\n.scaleTransition-5px-enter-active,\n.scaleTransition-5px-leave-active {\n transform: translateY(0px);\n opacity: 1;\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.scaleTransition-5px-enter-from,\n.scaleTransition-5px-leave-to {\n opacity: 0;\n z-index: 0;\n position: absolute;\n transform: translateY(-30px);\n transition: all 0.2s ease;\n}\n\n.scaleTransition-enter-from,\n.scaleTransition-leave-to {\n opacity: 0;\n z-index: 0;\n position: absolute;\n width: inherit;\n height: inherit;\n display: block;\n transform: translateY(30px);\n transition: all 0.5s ease;\n}\n\n.scaleTransition-enter-active,\n.scaleTransition-leave-active {\n transform: translateY(0px);\n opacity: 1;\n z-index: 1;\n transition: all 0.5s ease;\n}\n\n.scaleTransition-enter-from,\n.scaleTransition-leave-to {\n opacity: 0;\n z-index: 0;\n position: absolute;\n width: inherit;\n height: inherit;\n display: block;\n transform: translateY(30px);\n transition: all 0.5s ease;\n}\n\n.scaleIn-enter-active,\n.scaleIn-leave-active {\n // background: red;\n transition: all 0.5s ease;\n\n > section,\n div {\n transform-origin: 0 0;\n transform: translateZ(0px);\n transition: all 0.5s ease;\n }\n}\n\n.scaleIn-enter-from,\n.scaleIn-leave-to {\n opacity: 0;\n transform: scale(0.95);\n\n > section,\n div {\n transform: translateZ(-30px);\n transition: all 0.5s ease;\n }\n}\n</style>\n"],"names":[],"mappings":"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"}
|
|
@@ -180,7 +180,7 @@ const _sfc_main = {
|
|
|
180
180
|
!item.iconComponent ? (openBlock(), createElementBlock("span", _hoisted_9, toDisplayString(item.icon), 1)) : createCommentVNode("", true)
|
|
181
181
|
])) : createCommentVNode("", true),
|
|
182
182
|
createElementVNode("span", {
|
|
183
|
-
class: normalizeClass(["
|
|
183
|
+
class: normalizeClass(["ease-quint-out w-100 t-left fw-medium", { "pd-small": !__props.horizontal, "hidden": !__props.stateSidebar && !__props.horizontal, "visible": __props.stateSidebar || __props.horizontal }])
|
|
184
184
|
}, toDisplayString(item.title), 3),
|
|
185
185
|
item.subItems && __props.stateSidebar && !__props.horizontal ? (openBlock(), createElementBlock("span", {
|
|
186
186
|
key: 1,
|
|
@@ -240,7 +240,7 @@ const _sfc_main = {
|
|
|
240
240
|
};
|
|
241
241
|
}
|
|
242
242
|
};
|
|
243
|
-
const Navigation = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
243
|
+
const Navigation = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-0f5220e0"]]);
|
|
244
244
|
export {
|
|
245
245
|
Navigation as default
|
|
246
246
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navigation.vue.js","sources":["../../../../../../../../src/modules/core/views/components/partials/Navigation.vue"],"sourcesContent":["<script setup>\nimport { ref, watch, computed } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\n\nimport IconChevronBottom from '@martyrs/src/modules/icons/navigation/IconChevronBottom.vue'\n\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js'\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\n\nconst store = useStore()\nconst router = useRouter()\nconst route = useRoute()\n\nimport Dropdown from '@martyrs/src/components/Dropdown/Dropdown.vue'\nimport Spoiler from '@martyrs/src/components/Spoiler/Spoiler.vue'\n\nconst props = defineProps({\n navigationItems: Array,\n theme: {\n type: String,\n default: \"light\"\n },\n stateSidebar: {\n type: Boolean,\n default: false\n },\n horizontal: {\n type: Boolean,\n default: false\n }\n})\n\nconst emits = defineEmits([\n 'closeSidebar'\n])\n\nconst expandedSections = ref([])\n\nconst toggleSection = (title) => {\n if (!props.stateSidebar) {\n if (menuItems.value.flatMap(section => section.items).find(item => item.title === title && item.subItems)) {\n emits('closeSidebar')\n setTimeout(() => {\n expandedSections.value.push(title)\n }, 50)\n }\n return\n }\n \n const index = expandedSections.value.indexOf(title)\n\n if (index === -1) {\n expandedSections.value.push(title)\n } else {\n expandedSections.value.splice(index, 1)\n }\n}\n\nconst isSectionExpanded = (title) => {\n return expandedSections.value.includes(title)\n}\n\n// Process route functions with auth data and route\nconst processRoute = (routeFn) => {\n if (typeof routeFn === 'function') {\n return routeFn(auth.state, route)\n }\n return routeFn\n}\n\n</script>\n\n<template>\n <nav\n class=\"ease-quint-out\"\n :class=\"[\n stateSidebar ? 'pd-small' : 'pd-micro',\n horizontal ? 'w-100 desktop-only gap-thin flex flex-center flex-nowrap o-y-visible o-x-visible' : 'gap-medium flex flex-column',\n ]\"\n >\n <div \n v-for=\"section in props.navigationItems\" \n v-show=\"!section.visible || (typeof section.visible === 'function' ? section.visible(auth.state, route) : true)\"\n :key=\"section.category\" \n class=\"ease-quint-out\"\n :class=\"[\n horizontal ? 'w-max flex-child-default flex flex-nowrap' : '',\n stateSidebar && !horizontal ? '' : '',\n ]\"\n >\n <div\n v-if=\"section.category && stateSidebar && !horizontal\"\n class=\"uppercase fw-medium t-transp p-small\"\n :class=\"{\n 't-black': theme === 'light',\n 't-white': theme === 'dark'\n }\"\n >\n {{ section.category }}\n </div>\n\n <ul \n :class=\"[\n horizontal ? 'w-100 gap-micro flex flex-nowrap' : 'flex flex-column gap-micro',\n ]\"\n >\n <li\n v-for=\"item in section.items\"\n v-show=\"!item.visible || (typeof item.visible === 'function' ? item.visible(auth.state, route) : true)\"\n class=\"w-100 pos-relative\"\n :key=\"item.title\"\n\n >\n <Dropdown\n v-if=\"item.subItems && horizontal\"\n class=\"w-100\"\n align=\"left\"\n trigger=\"hover\"\n >\n <template #label>\n <button\n class=\"ease-quint-out w-100 flex radius-small flex-nowrap cursor-pointer flex-v-center pd-thin\"\n @click=\"item.route ? router.push(processRoute(item.route)) : null\"\n :class=\"[\n item.route && route.path === processRoute(item.route) ? theme === 'light' ? 'bg-light' : 'bg-dark' : '',\n theme === 'light' ? 'hover:bg-light' : 'hover:bg-dark'\n ]\"\n >\n <span class=\"fw-medium\">{{ item.title }}</span>\n <!-- <IconChevronBottom :fill=\"theme === 'dark' ? 'rgb(var(--white))': 'rgb(var(--black))'\" class=\"i-small mn-l-thin\"/> -->\n </button>\n </template>\n <ul class=\"dropdown-submenu\">\n <li v-for=\"subItem in item.subItems\" :key=\"subItem.title\">\n <a\n @click=\"subItem.route ? router.push(processRoute(subItem.route)) : null\"\n href=\"#\"\n class=\"group ease-quint-out flex flex-v-center flex-nowrap gap-thin pd-thin radius-small\"\n :class=\"[\n subItem.route && route.path === processRoute(subItem.route) ? theme === 'light' ? 'bg-light' : 'bg-dark' : '',\n theme === 'light' ? 'hover:bg-light' : 'hover:bg-dark'\n ]\"\n >\n <component\n v-if=\"subItem.iconComponent\"\n :is=\"subItem.iconComponent\"\n class=\"i-medium t-black-transp-25 group-hover:t-main\"\n />\n <span v-else class=\"\">{{ subItem.icon }}</span>\n <span class=\"w-100\">{{ subItem.title }}</span>\n </a>\n </li>\n </ul>\n </Dropdown>\n <button\n v-else\n class=\"group ease-quint-out w-100 flex radius-small flex-nowrap cursor-pointer flex-v-center\"\n @click=\"item.route ? (isPhone ? (stateSidebar = false) : null, route.path !== processRoute(item.route) ? router.push(processRoute(item.route)) : null) : null\"\n :class=\"[\n horizontal ? 'pd-thin' : '',\n item.route && route.path === processRoute(item.route) ? theme === 'light' ? 'bg-light' : 'bg-dark' : '',\n theme === 'light' ? 'hover:bg-light' : 'hover:bg-dark'\n ]\"\n >\n <div v-if=\"!horizontal && (item.iconComponent || item.icon)\" class=\"w-100 flex-child-default w-max-big flex flex-center aspect-1x1\">\n <component\n v-if=\"item.iconComponent\"\n :is=\"item.iconComponent\"\n class=\"i-medium flex-child-default ease-quint-out t-black-transp-25 group-hover:t-main\"\n />\n <span\n v-if=\"!item.iconComponent \"\n class=\"p-regular\"\n >\n {{ item.icon }}\n </span>\n </div>\n\n <span\n class=\"pd-small ease-quint-out w-100 t-left fw-medium\"\n :class=\"{ 'hidden': !stateSidebar && !horizontal, 'visible': stateSidebar || horizontal }\"\n >\n {{ item.title }}\n </span>\n\n <span\n v-if=\"item.subItems && stateSidebar && !horizontal\"\n class=\"mn-l-auto mn-r-small sidebar-dropdown-icon\"\n :class=\"{ 'rotate-180deg': isSectionExpanded(item.title) }\"\n @click.stop=\"toggleSection(item.title)\"\n >\n <IconChevronBottom :class=\"{ 'rotate-180deg mn-t-micro-negative': isOpen }\" :fill=\" theme === 'dark' ? 'rgb(var(--white))': 'rgb(var(--black))'\" class=\"i-small\"/>\n </span>\n </button>\n <transition\n enter-active-class=\"dropdown-enter\"\n leave-active-class=\"dropdown-leave\"\n enter-from-class=\"dropdown-enter-from\"\n enter-to-class=\"dropdown-enter-to\"\n leave-from-class=\"dropdown-leave-from\"\n leave-to-class=\"dropdown-leave-to\"\n >\n <ul\n v-if=\"item.subItems && isSectionExpanded(item.title) && stateSidebar && !horizontal\"\n class=\"mn-l-small mn-t-thin\"\n >\n <li v-for=\"subItem in item.subItems\" :key=\"subItem.title\">\n\n <a\n @click=\"subItem.route ? (isPhone ? (stateSidebar = false) : null, route.path !== processRoute(subItem.route) ? router.push(processRoute(subItem.route)) : null) : null\"\n href=\"#\"\n class=\"group ease-quint-out flex flex-v-center flex-nowrap gap-thin pd-thin radius-small\"\n :class=\"[\n subItem.route && route.path === processRoute(subItem.route) ? theme === 'light' ? 'bg-light' : 'bg-dark' : '',\n theme === 'light' ? 'hover:bg-light' : 'hover:bg-dark'\n ]\"\n >\n <component\n v-if=\"subItem.iconComponent\"\n :is=\"subItem.iconComponent\"\n class=\"i-medium t-black-transp-25 group-hover:t-main\"\n />\n <span v-else class=\"\">{{ subItem.icon }}</span>\n <span class=\"w-100\">{{ subItem.title }}</span>\n </a>\n </li>\n </ul>\n </transition>\n </li>\n </ul>\n </div>\n </nav>\n</template>\n\n<style scoped>\n\n.rotate-180deg {\n transform: rotate(180deg);\n}\n\n.hidden {\n/* opacity: 0;*/\n width: 0;\n display: none;\n}\n\n.visible {\n/* opacity: 1;*/\n display: block;\n}\n\n/* Dropdown animations */\n.dropdown-enter, .dropdown-leave {\n transition: all 0.3s ease-in-out;\n}\n\n.dropdown-enter-from, .dropdown-leave-to {\n opacity: 0;\n transform: translateY(-0.5rem);\n}\n\n.dropdown-enter-to, .dropdown-leave-from {\n opacity: 1;\n transform: translateY(0);\n}\n\n/* Horizontal dropdown submenu */\n.dropdown-submenu {\n list-style: none;\n padding: 0.5rem;\n margin: 0;\n min-width: 12rem;\n}\n\n.dropdown-submenu li {\n width: 100%;\n}\n\n.dropdown-submenu a {\n display: flex;\n text-decoration: none;\n white-space: nowrap;\n}\n\n/* Transition for horizontal dropdown */\n:deep(.TransitionTranslateY-enter-active),\n:deep(.TransitionTranslateY-leave-active) {\n transition: translateY 0.2s ease;\n transition: opacity 0.2s ease;\n}\n\n:deep(.TransitionTranslateY-enter-from),\n:deep(.TransitionTranslateY-leave-to) {\n opacity: 0;\n transform: translateY(-0.5rem);\n}\n\n:deep(.TransitionTranslateY-enter-to),\n:deep(.TransitionTranslateY-leave-from) {\n opacity: 1;\n transform: translateY(0);\n}\n</style>"],"names":["auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASc,aAAQ;AACtB,UAAM,SAAS,UAAS;AACxB,UAAM,QAAQ,SAAQ;AAKtB,UAAM,QAAQ;AAgBd,UAAM,QAAQ;AAId,UAAM,mBAAmB,IAAI,CAAA,CAAE;AAE/B,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,MAAM,cAAc;AACvB,YAAI,UAAU,MAAM,QAAQ,aAAW,QAAQ,KAAK,EAAE,KAAK,UAAQ,KAAK,UAAU,SAAS,KAAK,QAAQ,GAAG;AACzG,gBAAM,cAAc;AACpB,qBAAW,MAAM;AACf,6BAAiB,MAAM,KAAK,KAAK;AAAA,UACnC,GAAG,EAAE;AAAA,QACP;AACA;AAAA,MACF;AAEA,YAAM,QAAQ,iBAAiB,MAAM,QAAQ,KAAK;AAElD,UAAI,UAAU,IAAI;AAChB,yBAAiB,MAAM,KAAK,KAAK;AAAA,MACnC,OAAO;AACL,yBAAiB,MAAM,OAAO,OAAO,CAAC;AAAA,MACxC;AAAA,IACF;AAEA,UAAM,oBAAoB,CAAC,UAAU;AACnC,aAAO,iBAAiB,MAAM,SAAS,KAAK;AAAA,IAC9C;AAGA,UAAM,eAAe,CAAC,YAAY;AAChC,UAAI,OAAO,YAAY,YAAY;AACjC,eAAO,QAAQA,OAAY,KAAK;AAAA,MAClC;AACA,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Navigation.vue.js","sources":["../../../../../../../../src/modules/core/views/components/partials/Navigation.vue"],"sourcesContent":["<script setup>\nimport { ref, watch, computed } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\n\nimport IconChevronBottom from '@martyrs/src/modules/icons/navigation/IconChevronBottom.vue'\n\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js'\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\n\nconst store = useStore()\nconst router = useRouter()\nconst route = useRoute()\n\nimport Dropdown from '@martyrs/src/components/Dropdown/Dropdown.vue'\nimport Spoiler from '@martyrs/src/components/Spoiler/Spoiler.vue'\n\nconst props = defineProps({\n navigationItems: Array,\n theme: {\n type: String,\n default: \"light\"\n },\n stateSidebar: {\n type: Boolean,\n default: false\n },\n horizontal: {\n type: Boolean,\n default: false\n }\n})\n\nconst emits = defineEmits([\n 'closeSidebar'\n])\n\nconst expandedSections = ref([])\n\nconst toggleSection = (title) => {\n if (!props.stateSidebar) {\n if (menuItems.value.flatMap(section => section.items).find(item => item.title === title && item.subItems)) {\n emits('closeSidebar')\n setTimeout(() => {\n expandedSections.value.push(title)\n }, 50)\n }\n return\n }\n \n const index = expandedSections.value.indexOf(title)\n\n if (index === -1) {\n expandedSections.value.push(title)\n } else {\n expandedSections.value.splice(index, 1)\n }\n}\n\nconst isSectionExpanded = (title) => {\n return expandedSections.value.includes(title)\n}\n\n// Process route functions with auth data and route\nconst processRoute = (routeFn) => {\n if (typeof routeFn === 'function') {\n return routeFn(auth.state, route)\n }\n return routeFn\n}\n\n</script>\n\n<template>\n <nav\n class=\"ease-quint-out\"\n :class=\"[\n stateSidebar ? 'pd-small' : 'pd-micro',\n horizontal ? 'w-100 desktop-only gap-thin flex flex-center flex-nowrap o-y-visible o-x-visible' : 'gap-medium flex flex-column',\n ]\"\n >\n <div \n v-for=\"section in props.navigationItems\" \n v-show=\"!section.visible || (typeof section.visible === 'function' ? section.visible(auth.state, route) : true)\"\n :key=\"section.category\" \n class=\"ease-quint-out\"\n :class=\"[\n horizontal ? 'w-max flex-child-default flex flex-nowrap' : '',\n stateSidebar && !horizontal ? '' : '',\n ]\"\n >\n <div\n v-if=\"section.category && stateSidebar && !horizontal\"\n class=\"uppercase fw-medium t-transp p-small\"\n :class=\"{\n 't-black': theme === 'light',\n 't-white': theme === 'dark'\n }\"\n >\n {{ section.category }}\n </div>\n\n <ul \n :class=\"[\n horizontal ? 'w-100 gap-micro flex flex-nowrap' : 'flex flex-column gap-micro',\n ]\"\n >\n <li\n v-for=\"item in section.items\"\n v-show=\"!item.visible || (typeof item.visible === 'function' ? item.visible(auth.state, route) : true)\"\n class=\"w-100 pos-relative\"\n :key=\"item.title\"\n\n >\n <Dropdown\n v-if=\"item.subItems && horizontal\"\n class=\"w-100\"\n align=\"left\"\n trigger=\"hover\"\n >\n <template #label>\n <button\n class=\"ease-quint-out w-100 flex radius-small flex-nowrap cursor-pointer flex-v-center pd-thin\"\n @click=\"item.route ? router.push(processRoute(item.route)) : null\"\n :class=\"[\n item.route && route.path === processRoute(item.route) ? theme === 'light' ? 'bg-light' : 'bg-dark' : '',\n theme === 'light' ? 'hover:bg-light' : 'hover:bg-dark'\n ]\"\n >\n <span class=\"fw-medium\">{{ item.title }}</span>\n <!-- <IconChevronBottom :fill=\"theme === 'dark' ? 'rgb(var(--white))': 'rgb(var(--black))'\" class=\"i-small mn-l-thin\"/> -->\n </button>\n </template>\n <ul class=\"dropdown-submenu\">\n <li v-for=\"subItem in item.subItems\" :key=\"subItem.title\">\n <a\n @click=\"subItem.route ? router.push(processRoute(subItem.route)) : null\"\n href=\"#\"\n class=\"group ease-quint-out flex flex-v-center flex-nowrap gap-thin pd-thin radius-small\"\n :class=\"[\n subItem.route && route.path === processRoute(subItem.route) ? theme === 'light' ? 'bg-light' : 'bg-dark' : '',\n theme === 'light' ? 'hover:bg-light' : 'hover:bg-dark'\n ]\"\n >\n <component\n v-if=\"subItem.iconComponent\"\n :is=\"subItem.iconComponent\"\n class=\"i-medium t-black-transp-25 group-hover:t-main\"\n />\n <span v-else class=\"\">{{ subItem.icon }}</span>\n <span class=\"w-100\">{{ subItem.title }}</span>\n </a>\n </li>\n </ul>\n </Dropdown>\n <button\n v-else\n class=\"group ease-quint-out w-100 flex radius-small flex-nowrap cursor-pointer flex-v-center\"\n @click=\"item.route ? (isPhone ? (stateSidebar = false) : null, route.path !== processRoute(item.route) ? router.push(processRoute(item.route)) : null) : null\"\n :class=\"[\n horizontal ? 'pd-thin' : '',\n item.route && route.path === processRoute(item.route) ? theme === 'light' ? 'bg-light' : 'bg-dark' : '',\n theme === 'light' ? 'hover:bg-light' : 'hover:bg-dark'\n ]\"\n >\n <div v-if=\"!horizontal && (item.iconComponent || item.icon)\" class=\"w-100 flex-child-default w-max-big flex flex-center aspect-1x1\">\n <component\n v-if=\"item.iconComponent\"\n :is=\"item.iconComponent\"\n class=\"i-medium flex-child-default ease-quint-out t-black-transp-25 group-hover:t-main\"\n />\n <span\n v-if=\"!item.iconComponent \"\n class=\"p-regular\"\n >\n {{ item.icon }}\n </span>\n </div>\n\n <span\n class=\"ease-quint-out w-100 t-left fw-medium\"\n :class=\"{ 'pd-small': !horizontal, 'hidden': !stateSidebar && !horizontal, 'visible': stateSidebar || horizontal }\"\n >\n {{ item.title }}\n </span>\n\n <span\n v-if=\"item.subItems && stateSidebar && !horizontal\"\n class=\"mn-l-auto mn-r-small sidebar-dropdown-icon\"\n :class=\"{ 'rotate-180deg': isSectionExpanded(item.title) }\"\n @click.stop=\"toggleSection(item.title)\"\n >\n <IconChevronBottom :class=\"{ 'rotate-180deg mn-t-micro-negative': isOpen }\" :fill=\" theme === 'dark' ? 'rgb(var(--white))': 'rgb(var(--black))'\" class=\"i-small\"/>\n </span>\n </button>\n <transition\n enter-active-class=\"dropdown-enter\"\n leave-active-class=\"dropdown-leave\"\n enter-from-class=\"dropdown-enter-from\"\n enter-to-class=\"dropdown-enter-to\"\n leave-from-class=\"dropdown-leave-from\"\n leave-to-class=\"dropdown-leave-to\"\n >\n <ul\n v-if=\"item.subItems && isSectionExpanded(item.title) && stateSidebar && !horizontal\"\n class=\"mn-l-small mn-t-thin\"\n >\n <li v-for=\"subItem in item.subItems\" :key=\"subItem.title\">\n\n <a\n @click=\"subItem.route ? (isPhone ? (stateSidebar = false) : null, route.path !== processRoute(subItem.route) ? router.push(processRoute(subItem.route)) : null) : null\"\n href=\"#\"\n class=\"group ease-quint-out flex flex-v-center flex-nowrap gap-thin pd-thin radius-small\"\n :class=\"[\n subItem.route && route.path === processRoute(subItem.route) ? theme === 'light' ? 'bg-light' : 'bg-dark' : '',\n theme === 'light' ? 'hover:bg-light' : 'hover:bg-dark'\n ]\"\n >\n <component\n v-if=\"subItem.iconComponent\"\n :is=\"subItem.iconComponent\"\n class=\"i-medium t-black-transp-25 group-hover:t-main\"\n />\n <span v-else class=\"\">{{ subItem.icon }}</span>\n <span class=\"w-100\">{{ subItem.title }}</span>\n </a>\n </li>\n </ul>\n </transition>\n </li>\n </ul>\n </div>\n </nav>\n</template>\n\n<style scoped>\n\n.rotate-180deg {\n transform: rotate(180deg);\n}\n\n.hidden {\n/* opacity: 0;*/\n width: 0;\n display: none;\n}\n\n.visible {\n/* opacity: 1;*/\n display: block;\n}\n\n/* Dropdown animations */\n.dropdown-enter, .dropdown-leave {\n transition: all 0.3s ease-in-out;\n}\n\n.dropdown-enter-from, .dropdown-leave-to {\n opacity: 0;\n transform: translateY(-0.5rem);\n}\n\n.dropdown-enter-to, .dropdown-leave-from {\n opacity: 1;\n transform: translateY(0);\n}\n\n/* Horizontal dropdown submenu */\n.dropdown-submenu {\n list-style: none;\n padding: 0.5rem;\n margin: 0;\n min-width: 12rem;\n}\n\n.dropdown-submenu li {\n width: 100%;\n}\n\n.dropdown-submenu a {\n display: flex;\n text-decoration: none;\n white-space: nowrap;\n}\n\n/* Transition for horizontal dropdown */\n:deep(.TransitionTranslateY-enter-active),\n:deep(.TransitionTranslateY-leave-active) {\n transition: translateY 0.2s ease;\n transition: opacity 0.2s ease;\n}\n\n:deep(.TransitionTranslateY-enter-from),\n:deep(.TransitionTranslateY-leave-to) {\n opacity: 0;\n transform: translateY(-0.5rem);\n}\n\n:deep(.TransitionTranslateY-enter-to),\n:deep(.TransitionTranslateY-leave-from) {\n opacity: 1;\n transform: translateY(0);\n}\n</style>"],"names":["auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASc,aAAQ;AACtB,UAAM,SAAS,UAAS;AACxB,UAAM,QAAQ,SAAQ;AAKtB,UAAM,QAAQ;AAgBd,UAAM,QAAQ;AAId,UAAM,mBAAmB,IAAI,CAAA,CAAE;AAE/B,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,MAAM,cAAc;AACvB,YAAI,UAAU,MAAM,QAAQ,aAAW,QAAQ,KAAK,EAAE,KAAK,UAAQ,KAAK,UAAU,SAAS,KAAK,QAAQ,GAAG;AACzG,gBAAM,cAAc;AACpB,qBAAW,MAAM;AACf,6BAAiB,MAAM,KAAK,KAAK;AAAA,UACnC,GAAG,EAAE;AAAA,QACP;AACA;AAAA,MACF;AAEA,YAAM,QAAQ,iBAAiB,MAAM,QAAQ,KAAK;AAElD,UAAI,UAAU,IAAI;AAChB,yBAAiB,MAAM,KAAK,KAAK;AAAA,MACnC,OAAO;AACL,yBAAiB,MAAM,OAAO,OAAO,CAAC;AAAA,MACxC;AAAA,IACF;AAEA,UAAM,oBAAoB,CAAC,UAAU;AACnC,aAAO,iBAAiB,MAAM,SAAS,KAAK;AAAA,IAC9C;AAGA,UAAM,eAAe,CAAC,YAAY;AAChC,UAAI,OAAO,YAAY,YAAY;AACjC,eAAO,QAAQA,OAAY,KAAK;AAAA,MAClC;AACA,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/style.css
CHANGED
|
@@ -1604,58 +1604,58 @@ to {
|
|
|
1604
1604
|
overflow: hidden;
|
|
1605
1605
|
transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
1606
1606
|
}
|
|
1607
|
-
.rotate-180deg[data-v-
|
|
1607
|
+
.rotate-180deg[data-v-0f5220e0] {
|
|
1608
1608
|
transform: rotate(180deg);
|
|
1609
1609
|
}
|
|
1610
|
-
.hidden[data-v-
|
|
1610
|
+
.hidden[data-v-0f5220e0] {
|
|
1611
1611
|
/* opacity: 0;*/
|
|
1612
1612
|
width: 0;
|
|
1613
1613
|
display: none;
|
|
1614
1614
|
}
|
|
1615
|
-
.visible[data-v-
|
|
1615
|
+
.visible[data-v-0f5220e0] {
|
|
1616
1616
|
/* opacity: 1;*/
|
|
1617
1617
|
display: block;
|
|
1618
1618
|
}
|
|
1619
1619
|
|
|
1620
1620
|
/* Dropdown animations */
|
|
1621
|
-
.dropdown-enter[data-v-
|
|
1621
|
+
.dropdown-enter[data-v-0f5220e0], .dropdown-leave[data-v-0f5220e0] {
|
|
1622
1622
|
transition: all 0.3s ease-in-out;
|
|
1623
1623
|
}
|
|
1624
|
-
.dropdown-enter-from[data-v-
|
|
1624
|
+
.dropdown-enter-from[data-v-0f5220e0], .dropdown-leave-to[data-v-0f5220e0] {
|
|
1625
1625
|
opacity: 0;
|
|
1626
1626
|
transform: translateY(-0.5rem);
|
|
1627
1627
|
}
|
|
1628
|
-
.dropdown-enter-to[data-v-
|
|
1628
|
+
.dropdown-enter-to[data-v-0f5220e0], .dropdown-leave-from[data-v-0f5220e0] {
|
|
1629
1629
|
opacity: 1;
|
|
1630
1630
|
transform: translateY(0);
|
|
1631
1631
|
}
|
|
1632
1632
|
|
|
1633
1633
|
/* Horizontal dropdown submenu */
|
|
1634
|
-
.dropdown-submenu[data-v-
|
|
1634
|
+
.dropdown-submenu[data-v-0f5220e0] {
|
|
1635
1635
|
list-style: none;
|
|
1636
1636
|
padding: 0.5rem;
|
|
1637
1637
|
margin: 0;
|
|
1638
1638
|
min-width: 12rem;
|
|
1639
1639
|
}
|
|
1640
|
-
.dropdown-submenu li[data-v-
|
|
1640
|
+
.dropdown-submenu li[data-v-0f5220e0] {
|
|
1641
1641
|
width: 100%;
|
|
1642
1642
|
}
|
|
1643
|
-
.dropdown-submenu a[data-v-
|
|
1643
|
+
.dropdown-submenu a[data-v-0f5220e0] {
|
|
1644
1644
|
display: flex;
|
|
1645
1645
|
text-decoration: none;
|
|
1646
1646
|
white-space: nowrap;
|
|
1647
1647
|
}
|
|
1648
1648
|
|
|
1649
1649
|
/* Transition for horizontal dropdown */
|
|
1650
|
-
[data-v-
|
|
1650
|
+
[data-v-0f5220e0] .TransitionTranslateY-enter-active,[data-v-0f5220e0] .TransitionTranslateY-leave-active {
|
|
1651
1651
|
transition: translateY 0.2s ease;
|
|
1652
1652
|
transition: opacity 0.2s ease;
|
|
1653
1653
|
}
|
|
1654
|
-
[data-v-
|
|
1654
|
+
[data-v-0f5220e0] .TransitionTranslateY-enter-from,[data-v-0f5220e0] .TransitionTranslateY-leave-to {
|
|
1655
1655
|
opacity: 0;
|
|
1656
1656
|
transform: translateY(-0.5rem);
|
|
1657
1657
|
}
|
|
1658
|
-
[data-v-
|
|
1658
|
+
[data-v-0f5220e0] .TransitionTranslateY-enter-to,[data-v-0f5220e0] .TransitionTranslateY-leave-from {
|
|
1659
1659
|
opacity: 1;
|
|
1660
1660
|
transform: translateY(0);
|
|
1661
1661
|
}
|
package/package.json
CHANGED
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
|
|
118
118
|
<!-- Footer slot -->
|
|
119
119
|
<template #footer>
|
|
120
|
-
<component v-if="route.meta?.sidebar_footer_component" :is="route.meta.sidebar_footer_component" :theme="headerTheme" />
|
|
120
|
+
<component v-if="route.meta?.sidebar_footer_component" :is="route.meta.sidebar_footer_component" :theme="headerTheme" :stateSidebar="store.core.state.isOpenSidebar" />
|
|
121
121
|
</template>
|
|
122
122
|
</component>
|
|
123
123
|
|
|
@@ -177,8 +177,8 @@ const processRoute = (routeFn) => {
|
|
|
177
177
|
</div>
|
|
178
178
|
|
|
179
179
|
<span
|
|
180
|
-
class="
|
|
181
|
-
:class="{ 'hidden': !stateSidebar && !horizontal, 'visible': stateSidebar || horizontal }"
|
|
180
|
+
class="ease-quint-out w-100 t-left fw-medium"
|
|
181
|
+
:class="{ 'pd-small': !horizontal, 'hidden': !stateSidebar && !horizontal, 'visible': stateSidebar || horizontal }"
|
|
182
182
|
>
|
|
183
183
|
{{ item.title }}
|
|
184
184
|
</span>
|