@crm-market/template-shared 1.0.6 → 1.0.8

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.
Files changed (139) hide show
  1. package/assets/scss/_variables.scss +3 -3
  2. package/assets/scss/components/_header.scss +1 -1
  3. package/assets/scss/style.css +4 -4
  4. package/components/AboutUs/StaticContent.vue +32 -0
  5. package/components/Cart/CartEmpty.vue +42 -0
  6. package/components/Cart/CartItem.vue +145 -0
  7. package/components/Cart/CartSummary.vue +57 -0
  8. package/components/Cart/ProductQuantity.vue +23 -13
  9. package/components/Cart/index.vue +68 -150
  10. package/components/Categories/index.vue +88 -291
  11. package/components/Checkout/AddressFields.vue +74 -0
  12. package/components/Checkout/CheckoutForm.vue +75 -0
  13. package/components/Checkout/CityAutocomplete.vue +68 -0
  14. package/components/Checkout/DeliveryMethodCard.vue +66 -0
  15. package/components/Checkout/DeliveryOptions.vue +148 -0
  16. package/components/Checkout/OrderSummary.vue +116 -0
  17. package/components/Checkout/PaymentOptions.vue +76 -0
  18. package/components/Checkout/PickupPoints.vue +46 -0
  19. package/components/Checkout/PromoCode.vue +166 -0
  20. package/components/Checkout/index.vue +235 -173
  21. package/components/Checkout/types.ts +45 -0
  22. package/components/Common/PageBanner.vue +22 -20
  23. package/components/Common/ProductCard.vue +139 -115
  24. package/components/Common/Services.vue +4 -4
  25. package/components/Contact/ContactForm.vue +44 -74
  26. package/components/Contact/ContactInfo.vue +35 -61
  27. package/components/FAQ/index.vue +6 -119
  28. package/components/Layout/Copyright.vue +11 -9
  29. package/components/Layout/Footer.vue +49 -136
  30. package/components/Layout/HeaderBar.vue +174 -0
  31. package/components/Layout/HeaderLogo.vue +27 -0
  32. package/components/Layout/MiddleHeader.vue +1 -228
  33. package/components/Layout/MiddleHeaderThree.vue +1 -203
  34. package/components/Layout/MiddleHeaderTwo.vue +1 -239
  35. package/components/Layout/NavLinks.vue +23 -0
  36. package/components/Layout/Navbar.vue +38 -151
  37. package/components/Layout/NavbarStyleFour.vue +1 -332
  38. package/components/Layout/NavbarStyleThree.vue +1 -188
  39. package/components/Layout/NavbarStyleTwo.vue +1 -108
  40. package/components/Layout/Preloader.vue +5 -12
  41. package/components/Layout/ResponsiveNavbar.vue +32 -418
  42. package/components/Layout/SitewideBanner.vue +285 -0
  43. package/components/Layout/TopHeader.vue +17 -83
  44. package/components/Layout/layoutData.ts +83 -0
  45. package/components/PrivacyPolicy/index.vue +6 -110
  46. package/components/ProductDetails/ProductDetailsTab.vue +31 -321
  47. package/components/ProductDetails/ProductGallery.vue +45 -0
  48. package/components/ProductDetails/ProductQuantity.vue +8 -14
  49. package/components/ProductDetails/RecentlyViewed.vue +53 -289
  50. package/components/ProductDetails/RelatedProducts.vue +64 -0
  51. package/components/ProductDetails/index.vue +90 -230
  52. package/components/Products/index.vue +78 -16
  53. package/components/TermsConditions/index.vue +6 -110
  54. package/components/Wishlist/index.vue +62 -88
  55. package/composables/useCart.ts +133 -81
  56. package/composables/useCategories.ts +67 -31
  57. package/composables/useCategoryImages.ts +45 -0
  58. package/composables/useCheckout.ts +302 -97
  59. package/composables/useContactForm.ts +57 -0
  60. package/composables/useHomeContent.ts +220 -0
  61. package/composables/useI18n.ts +12 -24
  62. package/composables/useJsonLd.ts +162 -0
  63. package/composables/useProducts.ts +244 -83
  64. package/composables/useRecent.ts +30 -0
  65. package/composables/useSanitize.ts +76 -0
  66. package/composables/useSiteConfig.ts +51 -47
  67. package/composables/useStaticPages.ts +48 -0
  68. package/composables/useStoreOrigin.ts +32 -0
  69. package/composables/useTemplateSections.ts +51 -3
  70. package/composables/useThemeVars.ts +113 -0
  71. package/composables/useWishlist.ts +72 -0
  72. package/layouts/default.vue +80 -19
  73. package/locales/en.json +255 -86
  74. package/locales/uk.json +251 -82
  75. package/modules/template-schema.ts +35 -0
  76. package/nuxt.config.ts +8 -11
  77. package/package.json +1 -1
  78. package/pages/about-us.vue +9 -9
  79. package/pages/cart.vue +0 -1
  80. package/pages/categories.vue +0 -1
  81. package/pages/category/[slug].vue +84 -0
  82. package/pages/checkout.vue +0 -1
  83. package/pages/contact.vue +6 -6
  84. package/pages/delivery.vue +12 -0
  85. package/pages/faq.vue +6 -6
  86. package/pages/order-success.vue +113 -0
  87. package/pages/privacy-policy.vue +6 -6
  88. package/pages/product/[slug].vue +82 -0
  89. package/pages/product-details.vue +14 -6
  90. package/pages/products.vue +12 -1
  91. package/pages/returns.vue +12 -0
  92. package/pages/terms-conditions.vue +6 -6
  93. package/pages/wishlist.vue +2 -2
  94. package/utils/image.ts +0 -1
  95. package/utils/seo-urls.ts +70 -0
  96. package/utils/store-origin.ts +36 -0
  97. package/components/AboutUs/AboutUsTuan.vue +0 -25
  98. package/components/AboutUs/Statistics.vue +0 -42
  99. package/components/AboutUs/SubscribeToTheNewsletter.vue +0 -57
  100. package/components/AddAddress/index.vue +0 -68
  101. package/components/BestSellers/Products.vue +0 -1562
  102. package/components/BestSellers/RecentlyViewed.vue +0 -304
  103. package/components/ChangePassword/index.vue +0 -69
  104. package/components/Common/DashboardNavigation.vue +0 -35
  105. package/components/Dashboard/RecentOrder.vue +0 -173
  106. package/components/Dashboard/index.vue +0 -77
  107. package/components/EditAddress/index.vue +0 -117
  108. package/components/EditProfile/index.vue +0 -95
  109. package/components/FeaturedProduct/FeaturedProducts.vue +0 -304
  110. package/components/FeaturedProduct/Products.vue +0 -1562
  111. package/components/ForgotPassword/index.vue +0 -49
  112. package/components/Layout/FooterTwo.vue +0 -159
  113. package/components/Layout/LocationOption.vue +0 -178
  114. package/components/Layout/RTLSwitchBtn.vue +0 -40
  115. package/components/Login/index.vue +0 -89
  116. package/components/MyAccount/index.vue +0 -154
  117. package/components/NewArrivals/Products.vue +0 -1969
  118. package/components/NewArrivals/RecentlyViewed.vue +0 -304
  119. package/components/OrderDetails/index.vue +0 -75
  120. package/components/OrderHistory/index.vue +0 -195
  121. package/components/Products/RecentlyViewed.vue +0 -302
  122. package/components/Register/index.vue +0 -83
  123. package/components/TrendingProducts/FeaturedProducts.vue +0 -304
  124. package/components/TrendingProducts/Products.vue +0 -1564
  125. package/components/Wishlist/ProductQuantity.vue +0 -29
  126. package/layouts/inner.vue +0 -70
  127. package/locales/ar.json +0 -234
  128. package/locales/ru.json +0 -234
  129. package/pages/address.vue +0 -11
  130. package/pages/change-password.vue +0 -11
  131. package/pages/dashboard.vue +0 -11
  132. package/pages/edit-address.vue +0 -11
  133. package/pages/edit-profile.vue +0 -11
  134. package/pages/forgot-password.vue +0 -11
  135. package/pages/login.vue +0 -11
  136. package/pages/my-account.vue +0 -11
  137. package/pages/order-details.vue +0 -11
  138. package/pages/order-history.vue +0 -11
  139. package/pages/register.vue +0 -11
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import { NAV_ITEMS } from './layoutData';
3
+
4
+ // Пункти меню з підсвіткою активного (для "/" — лише точний збіг)
5
+ const { t } = useI18n();
6
+ const emit = defineEmits<{ (e: 'navigate'): void }>();
7
+ </script>
8
+
9
+ <template>
10
+ <ul class="navbar-nav me-auto">
11
+ <li v-for="item in NAV_ITEMS" :key="item.to" class="nav-item">
12
+ <NuxtLink
13
+ class="nav-link"
14
+ :to="item.to"
15
+ :active-class="item.to === '/' ? '' : 'router-link-active'"
16
+ exact-active-class="router-link-active"
17
+ @click="emit('navigate')"
18
+ >
19
+ {{ t(item.key) }}
20
+ </NuxtLink>
21
+ </li>
22
+ </ul>
23
+ </template>
@@ -1,18 +1,31 @@
1
+ <script setup lang="ts">
2
+ // Навігація: логотип (мобільний), бургер, посилання на існуючі сторінки, телефон
3
+ import stateStore from '~/utils/store';
4
+ import { useLayoutData } from './layoutData';
5
+
6
+ const props = withDefaults(defineProps<{ withCategories?: boolean; wrapClass?: string }>(), {
7
+ withCategories: true,
8
+ wrapClass: 'ptb-6',
9
+ });
10
+ const { t } = useI18n();
11
+ const { topLevelCategories } = useCategories();
12
+ const { phone } = useLayoutData();
13
+
14
+ const isSticky = ref(false);
15
+ const catOpen = ref(false);
16
+ const onScroll = () => { isSticky.value = window.scrollY >= 100; };
17
+ onMounted(() => window.addEventListener('scroll', onScroll));
18
+ onBeforeUnmount(() => window.removeEventListener('scroll', onScroll));
19
+ </script>
20
+
1
21
  <template>
2
- <div :class="['navbar navbar-expand-lg bg-white', { sticky: isSticky }]">
22
+ <!-- На мобільному логотип і бургер винесено в шапку (HeaderBar), тож навбар лише від lg -->
23
+ <div :class="['navbar navbar-expand-lg bg-white d-none d-lg-flex', wrapClass, { sticky: isSticky }]">
3
24
  <div class="container mw-1610">
4
25
  <NuxtLink class="navbar-brand d-lg-none" to="/">
5
- <img
6
- :src="logoUrl || defaultLogo"
7
- class="main-logo"
8
- alt="logo"
9
- />
26
+ <LayoutHeaderLogo img-class="main-logo" />
10
27
  </NuxtLink>
11
- <a
12
- class="navbar-toggler"
13
- href="javascript:void(0);"
14
- @click="stateStoreInstance.onChangeShow"
15
- >
28
+ <a class="navbar-toggler" href="javascript:void(0);" :aria-label="t('layout.menu.toggle')" @click="stateStore.onChangeShow">
16
29
  <span class="burger-menu">
17
30
  <span class="top-bar"></span>
18
31
  <span class="middle-bar"></span>
@@ -20,95 +33,36 @@
20
33
  </span>
21
34
  </a>
22
35
 
23
- <ul class="categories-nav d-none d-lg-block">
36
+ <ul v-if="props.withCategories" class="categories-nav categories-style-three d-none d-lg-block">
24
37
  <li class="categories-item dropdown">
25
- <div
26
- class="categories-link dropdown-toggle"
27
- @click="toggleCategories"
28
- :aria-pressed="show ? 'true' : 'false'"
29
- :class="{ show: buttonShowState }"
30
- >
38
+ <div class="categories-link dropdown-toggle" :class="{ show: catOpen }" @click="catOpen = !catOpen">
31
39
  <i class="ri-menu-2-line"></i>
32
- <span>{{ t('nav.browseCategories') }}</span>
40
+ <span>{{ t('layout.menu.browseCategories') }}</span>
33
41
  </div>
34
-
35
- <ul class="dropdown-menu" :class="{ show: show }">
42
+ <ul class="dropdown-menu" :class="{ show: catOpen }">
36
43
  <li v-for="category in topLevelCategories" :key="category.id">
37
- <template v-if="getSubcategories(category.id).length > 0">
38
- <a
39
- class="dropdown-item sub-dropdown dropdown-toggle"
40
- href="javascript:void(0)"
41
- @click="toggleSubDropdown(category.id)"
42
- >
43
- <i class="ri-folder-line"></i>
44
- <span>{{ category.name }}</span>
45
- </a>
46
-
47
- <ul
48
- class="dropdown-menu dropdown-menu-sub"
49
- :class="{ show: activeSubDropdown === category.id }"
50
- >
51
- <li v-for="sub in getSubcategories(category.id)" :key="sub.id">
52
- <NuxtLink
53
- class="dropdown-item"
54
- :to="`/products?categoryId=${sub.id}`"
55
- >
56
- {{ sub.name }}
57
- </NuxtLink>
58
- </li>
59
- </ul>
60
- </template>
61
- <template v-else>
62
- <NuxtLink
63
- class="dropdown-item single-style"
64
- :to="`/products?categoryId=${category.id}`"
65
- >
66
- {{ category.name }}
67
- </NuxtLink>
68
- </template>
44
+ <NuxtLink class="dropdown-item single-style" :to="categoryPath(category)" @click="catOpen = false">
45
+ {{ category.name }}
46
+ </NuxtLink>
69
47
  </li>
70
48
  <li v-if="topLevelCategories.length === 0">
71
- <span class="dropdown-item text-muted">{{ t('nav.noCategories') }}</span>
49
+ <span class="dropdown-item text-muted">{{ t('layout.header.noCategories') }}</span>
72
50
  </li>
73
51
  </ul>
74
52
  </li>
75
53
  </ul>
76
54
 
77
55
  <div class="collapse navbar-collapse">
78
- <ul class="navbar-nav me-auto ms-68">
79
- <li class="nav-item">
80
- <NuxtLink class="nav-link" to="/"> {{ t('nav.home') }} </NuxtLink>
81
- </li>
82
-
83
- <li class="nav-item">
84
- <NuxtLink class="nav-link" to="/products"> {{ t('nav.products') }} </NuxtLink>
85
- </li>
86
-
87
- <li class="nav-item">
88
- <NuxtLink class="nav-link" to="/categories"> {{ t('nav.categories') }} </NuxtLink>
89
- </li>
90
-
91
- <li class="nav-item">
92
- <NuxtLink class="nav-link" to="/about-us"> {{ t('nav.about') }} </NuxtLink>
93
- </li>
94
-
95
- <li class="nav-item">
96
- <NuxtLink class="nav-link" to="/contact"> {{ t('nav.contact') }} </NuxtLink>
97
- </li>
98
- </ul>
56
+ <LayoutNavLinks />
99
57
  </div>
100
58
 
101
- <ul
102
- class="d-none d-lg-flex others-options ps-0 mb-0 list-unstyled justify-content-end"
103
- >
104
- <li class="info" v-if="phone">
105
- <a :href="`tel:${phone}`" class="text-decoration-none">
59
+ <ul class="d-none d-lg-flex others-options grocery-options ps-0 mb-0 list-unstyled justify-content-end">
60
+ <li v-if="phone" class="info">
61
+ <a :href="`tel:${phone}`" class="text-decoration-none success-hover-bg">
106
62
  <div class="d-flex align-items-center">
107
- <div class="flex-shrink-0">
108
- <i class="ri-phone-line bg-danger-10"></i>
109
- </div>
63
+ <div class="flex-shrink-0"><i class="ri-phone-line"></i></div>
110
64
  <div class="flex-grow-1 ms-10">
111
- <span>{{ t('nav.hotline') }}</span>
65
+ <span>{{ t('layout.header.hotline') }}</span>
112
66
  <h3>{{ phone }}</h3>
113
67
  </div>
114
68
  </div>
@@ -118,70 +72,3 @@
118
72
  </div>
119
73
  </div>
120
74
  </template>
121
-
122
- <script lang="ts">
123
- import { defineComponent, ref, watch, onMounted, computed } from "vue";
124
- import stateStore from "~/utils/store";
125
-
126
- import defaultLogoImg from "~/assets/images/logo.png";
127
-
128
- export default defineComponent({
129
- name: "Navbar",
130
- setup() {
131
- const isSticky = ref(false);
132
- const show = ref(false);
133
- const buttonShowState = ref(false);
134
- const activeSubDropdown = ref<string | null>(null);
135
- const stateStoreInstance = stateStore;
136
- const defaultLogo = defaultLogoImg;
137
-
138
- const { t } = useI18n();
139
- const { topLevelCategories, getSubcategories } = useCategories();
140
- const { logoUrl, contactInfo } = useSiteConfig();
141
-
142
- const phone = computed(() => contactInfo.value?.phone);
143
-
144
- const toggleCategories = () => {
145
- show.value = !show.value;
146
- buttonShowState.value = !buttonShowState.value;
147
- };
148
-
149
- const toggleSubDropdown = (subDropdown: string) => {
150
- activeSubDropdown.value =
151
- activeSubDropdown.value === subDropdown ? null : subDropdown;
152
- };
153
-
154
- const handleScroll = () => {
155
- const scrollPos = window.scrollY;
156
- isSticky.value = scrollPos >= 100;
157
- };
158
-
159
- onMounted(() => {
160
- window.addEventListener("scroll", handleScroll);
161
- });
162
-
163
- watch(isSticky, (newValue: any) => {
164
- if (newValue) {
165
- show.value = false;
166
- buttonShowState.value = false;
167
- }
168
- });
169
-
170
- return {
171
- isSticky,
172
- show,
173
- buttonShowState,
174
- toggleCategories,
175
- toggleSubDropdown,
176
- activeSubDropdown,
177
- stateStoreInstance,
178
- defaultLogo,
179
- topLevelCategories,
180
- getSubcategories,
181
- logoUrl,
182
- phone,
183
- t,
184
- };
185
- },
186
- });
187
- </script>
@@ -1,334 +1,3 @@
1
1
  <template>
2
- <div
3
- :class="[
4
- 'navbar navbar-expand-lg bg-warningdiv1 ptb-6',
5
- { sticky: isSticky },
6
- ]"
7
- >
8
- <div class="container mw-1610">
9
- <NuxtLink class="navbar-brand d-lg-none" to="/">
10
- <img
11
- src="~/assets/images/grocery-shop-logo.png"
12
- class="main-logo"
13
- alt="white-logo"
14
- />
15
- </NuxtLink>
16
- <a
17
- class="navbar-toggler"
18
- href="javascript:void(0);"
19
- @click="stateStoreInstance.onChangeShow"
20
- >
21
- <span class="burger-menu">
22
- <span class="top-bar"></span>
23
- <span class="middle-bar"></span>
24
- <span class="bottom-bar"></span>
25
- </span>
26
- </a>
27
-
28
- <div class="collapse navbar-collapse" id="navbarSupportedContent">
29
- <ul class="navbar-nav me-auto">
30
- <li class="nav-item dropdown">
31
- <a class="nav-link dropdown-toggle" href="#"> Home </a>
32
-
33
- <ul class="dropdown-menu">
34
- <li>
35
- <NuxtLink class="dropdown-item" to="/">
36
- Electronics & Telemobile Online Shop
37
- </NuxtLink>
38
- </li>
39
- <li>
40
- <NuxtLink class="dropdown-item" to="/grocery-shop">
41
- Grocery Shop
42
- </NuxtLink>
43
- </li>
44
- <li>
45
- <NuxtLink class="dropdown-item" to="/healthy-diet-foods-shop">
46
- Healthy Diet Foods Shop
47
- </NuxtLink>
48
- </li>
49
- </ul>
50
- </li>
51
-
52
- <li class="nav-item dropdown">
53
- <a class="nav-link dropdown-toggle" href="#"> Pages </a>
54
-
55
- <ul class="dropdown-menu">
56
- <li>
57
- <NuxtLink class="dropdown-item" to="/about-us">
58
- About Us
59
- </NuxtLink>
60
- </li>
61
-
62
- <li>
63
- <a class="dropdown-item sub-dropdown dropdown-toggle" href="#">
64
- Authentication
65
- </a>
66
-
67
- <ul class="dropdown-menu">
68
- <li>
69
- <NuxtLink class="dropdown-item" to="/login">
70
- Login
71
- </NuxtLink>
72
- </li>
73
- <li>
74
- <NuxtLink class="dropdown-item" to="/register">
75
- Register
76
- </NuxtLink>
77
- </li>
78
- <li>
79
- <NuxtLink class="dropdown-item" to="/my-account">
80
- My Account
81
- </NuxtLink>
82
- </li>
83
- <li>
84
- <NuxtLink class="dropdown-item" to="/change-password">
85
- Change Password
86
- </NuxtLink>
87
- </li>
88
- <li>
89
- <NuxtLink class="dropdown-item" to="/forgot-password">
90
- Forgot Password
91
- </NuxtLink>
92
- </li>
93
- </ul>
94
- </li>
95
- <li>
96
- <NuxtLink class="dropdown-item" to="/faq"> FAQ </NuxtLink>
97
- </li>
98
- <li>
99
- <NuxtLink class="dropdown-item" to="/privacy-policy">
100
- Privacy Policy
101
- </NuxtLink>
102
- </li>
103
- <li>
104
- <NuxtLink class="dropdown-item" to="/terms-conditions">
105
- Terms & Conditions
106
- </NuxtLink>
107
- </li>
108
- </ul>
109
- </li>
110
-
111
- <li class="nav-item mega-menu">
112
- <a href="#" class="nav-link dropdown-toggle"> Shop </a>
113
-
114
- <ul class="dropdown-menu">
115
- <li class="nav-item">
116
- <div class="row">
117
- <div class="col">
118
- <h6 class="sub-menu-title">Product Layouts</h6>
119
-
120
- <ul class="sub-menu">
121
- <li>
122
- <NuxtLink class="dropdown-item" to="/best-sellers">
123
- Best Sellers
124
- </NuxtLink>
125
- </li>
126
- <li>
127
- <NuxtLink class="dropdown-item" to="/featured-products">
128
- Featured Products
129
- </NuxtLink>
130
- </li>
131
- <li>
132
- <NuxtLink class="dropdown-item" to="/trending-products">
133
- Trending Products
134
- </NuxtLink>
135
- </li>
136
- <li>
137
- <NuxtLink class="dropdown-item" to="/new-arrivals">
138
- New Arrivals
139
- </NuxtLink>
140
- </li>
141
- <li>
142
- <NuxtLink class="dropdown-item" to="/categories">
143
- Categories
144
- </NuxtLink>
145
- </li>
146
- </ul>
147
- </div>
148
-
149
- <div class="col">
150
- <h6 class="sub-menu-title">Products Step</h6>
151
-
152
- <ul class="sub-menu">
153
- <li>
154
- <NuxtLink class="dropdown-item" to="/products">
155
- Products
156
- </NuxtLink>
157
- </li>
158
- <li>
159
- <NuxtLink class="dropdown-item" to="/cart">
160
- Cart
161
- </NuxtLink>
162
- </li>
163
- <li>
164
- <NuxtLink class="dropdown-item" to="/wishlist">
165
- Wishlist
166
- </NuxtLink>
167
- </li>
168
- <li>
169
- <NuxtLink class="dropdown-item" to="/checkout">
170
- Checkout
171
- </NuxtLink>
172
- </li>
173
- <li>
174
- <NuxtLink class="dropdown-item" to="/product-details">
175
- Product Details
176
- </NuxtLink>
177
- </li>
178
- </ul>
179
- </div>
180
-
181
- <div class="col">
182
- <h6 class="sub-menu-title">Admin Page</h6>
183
-
184
- <ul class="sub-menu">
185
- <li>
186
- <NuxtLink class="dropdown-item" to="/dashboard">
187
- Dashboard
188
- </NuxtLink>
189
- </li>
190
- <li>
191
- <NuxtLink class="dropdown-item" to="/edit-profile">
192
- Edit Profile
193
- </NuxtLink>
194
- </li>
195
- <li>
196
- <NuxtLink class="dropdown-item" to="/order-history">
197
- Order History
198
- </NuxtLink>
199
- </li>
200
- <li>
201
- <NuxtLink class="dropdown-item" to="/order-details">
202
- Order Details
203
- </NuxtLink>
204
- </li>
205
- <li>
206
- <NuxtLink class="dropdown-item" to="/password">
207
- Change Password
208
- </NuxtLink>
209
- </li>
210
- </ul>
211
- </div>
212
-
213
- <div class="col">
214
- <NuxtLink
215
- to="/products"
216
- class="bg-img menu-img"
217
- :style="{
218
- 'background-image': `url(${image})`,
219
- }"
220
- >
221
- </NuxtLink>
222
- </div>
223
- </div>
224
- </li>
225
- </ul>
226
- </li>
227
-
228
- <li class="nav-item dropdown">
229
- <a class="nav-link dropdown-toggle" href="#"> Blog </a>
230
-
231
- <ul class="dropdown-menu">
232
- <li>
233
- <NuxtLink class="dropdown-item" to="/our-blog">
234
- Our Blog
235
- </NuxtLink>
236
- </li>
237
- <li>
238
- <NuxtLink class="dropdown-item" to="/blog-details">
239
- Blog Details
240
- </NuxtLink>
241
- </li>
242
- <li>
243
- <NuxtLink class="dropdown-item" to="/tags"> Tags </NuxtLink>
244
- </li>
245
- <li>
246
- <NuxtLink class="dropdown-item" to="/categories">
247
- Categories
248
- </NuxtLink>
249
- </li>
250
- <li>
251
- <NuxtLink class="dropdown-item" to="/author"> Author </NuxtLink>
252
- </li>
253
- </ul>
254
- </li>
255
-
256
- <li class="nav-item dropdown">
257
- <NuxtLink class="nav-link" to="/contact"> Contact </NuxtLink>
258
- </li>
259
- </ul>
260
- </div>
261
-
262
- <ul
263
- class="d-none d-lg-flex others-options grocery-options ps-0 mb-0 list-unstyled justify-content-end"
264
- >
265
- <li class="info">
266
- <a href="tel:808-555-0111" class="text-decoration-none">
267
- <div class="d-flex align-items-center">
268
- <div class="flex-shrink-0">
269
- <i class="ri-phone-line bg-danger-10"></i>
270
- </div>
271
- <div class="flex-grow-1 ms-10">
272
- <span>Hotline</span>
273
- <h3>(808) 555-0111</h3>
274
- </div>
275
- </div>
276
- </a>
277
- </li>
278
- <li class="info">
279
- <a
280
- href="#"
281
- class="text-decoration-none success-hover-bg"
282
- @click="stateStoreInstance.onChange"
283
- >
284
- <div class="d-flex align-items-center">
285
- <div class="flex-shrink-0">
286
- <i class="ri-map-pin-2-line"></i>
287
- </div>
288
- <div class="flex-grow-1 ms-10">
289
- <span>Deliver to</span>
290
- <h3>Find Location</h3>
291
- </div>
292
- </div>
293
- </a>
294
- </li>
295
- </ul>
296
- </div>
297
- </div>
2
+ <LayoutNavbar :with-categories="false" />
298
3
  </template>
299
-
300
- <script lang="ts">
301
- import { defineComponent, ref, onMounted } from "vue";
302
- import stateStore from "~/utils/store";
303
-
304
- import image from "~/assets/images/menu-product.jpg";
305
-
306
- export default defineComponent({
307
- name: "NavbarStyleFour",
308
- setup() {
309
- const isSticky = ref(false);
310
- const show = ref(false);
311
- const stateStoreInstance = stateStore;
312
-
313
- const toggleCategories = () => {
314
- show.value = !show.value;
315
- };
316
-
317
- const handleScroll = () => {
318
- const scrollPos = window.scrollY;
319
- isSticky.value = scrollPos >= 100;
320
- };
321
-
322
- onMounted(() => {
323
- window.addEventListener("scroll", handleScroll);
324
- });
325
-
326
- return {
327
- isSticky,
328
- toggleCategories,
329
- stateStoreInstance,
330
- image,
331
- };
332
- },
333
- });
334
- </script>