@crm-market/template-shared 1.0.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.
Files changed (160) hide show
  1. package/assets/css/custom.css +70 -0
  2. package/assets/css/remixicon.css +2782 -0
  3. package/assets/css/satoshi-font.css +31 -0
  4. package/assets/fonts/flaticon.css +463 -0
  5. package/assets/fonts/flaticon.eot +0 -0
  6. package/assets/fonts/flaticon.html +2153 -0
  7. package/assets/fonts/flaticon.svg +441 -0
  8. package/assets/fonts/flaticon.ttf +0 -0
  9. package/assets/fonts/flaticon.woff +0 -0
  10. package/assets/fonts/flaticon.woff2 +0 -0
  11. package/assets/fonts/remixicon.eot +0 -0
  12. package/assets/fonts/remixicon.svg +8230 -0
  13. package/assets/fonts/remixicon.ttf +0 -0
  14. package/assets/fonts/remixicon.woff +0 -0
  15. package/assets/fonts/remixicon.woff2 +0 -0
  16. package/assets/scss/_variables.scss +31 -0
  17. package/assets/scss/components/_about.scss +58 -0
  18. package/assets/scss/components/_authentication.scss +124 -0
  19. package/assets/scss/components/_backtoptop.scss +27 -0
  20. package/assets/scss/components/_banner.scss +396 -0
  21. package/assets/scss/components/_best-deals.scss +74 -0
  22. package/assets/scss/components/_blank.scss +40 -0
  23. package/assets/scss/components/_blog.scss +193 -0
  24. package/assets/scss/components/_cart.scss +108 -0
  25. package/assets/scss/components/_categories.scss +82 -0
  26. package/assets/scss/components/_checkout.scss +110 -0
  27. package/assets/scss/components/_dashboard.scss +388 -0
  28. package/assets/scss/components/_faq.scss +22 -0
  29. package/assets/scss/components/_filter-rang.scss +109 -0
  30. package/assets/scss/components/_footer.scss +270 -0
  31. package/assets/scss/components/_global.scss +550 -0
  32. package/assets/scss/components/_header.scss +587 -0
  33. package/assets/scss/components/_hurry.scss +52 -0
  34. package/assets/scss/components/_navbar.scss +1008 -0
  35. package/assets/scss/components/_offers.scss +689 -0
  36. package/assets/scss/components/_pagination.scss +71 -0
  37. package/assets/scss/components/_popup.scss +172 -0
  38. package/assets/scss/components/_preloader.scss +108 -0
  39. package/assets/scss/components/_products.scss +1147 -0
  40. package/assets/scss/components/_rtl.scss +806 -0
  41. package/assets/scss/components/_services.scss +16 -0
  42. package/assets/scss/components/_sidebar.scss +259 -0
  43. package/assets/scss/style.css +6676 -0
  44. package/assets/scss/style.css.map +1 -0
  45. package/assets/scss/style.scss +40 -0
  46. package/assets/webfonts/Satoshi-Bold.eot +0 -0
  47. package/assets/webfonts/Satoshi-Bold.woff +0 -0
  48. package/assets/webfonts/Satoshi-Bold.woff2 +0 -0
  49. package/assets/webfonts/Satoshi-Medium.eot +0 -0
  50. package/assets/webfonts/Satoshi-Medium.woff +0 -0
  51. package/assets/webfonts/Satoshi-Medium.woff2 +0 -0
  52. package/assets/webfonts/Satoshi-Regular.eot +0 -0
  53. package/assets/webfonts/Satoshi-Regular.woff +0 -0
  54. package/assets/webfonts/Satoshi-Regular.woff2 +0 -0
  55. package/components/AboutUs/AboutUsTuan.vue +25 -0
  56. package/components/AboutUs/Statistics.vue +42 -0
  57. package/components/AboutUs/SubscribeToTheNewsletter.vue +57 -0
  58. package/components/AddAddress/index.vue +70 -0
  59. package/components/BestSellers/Products.vue +1562 -0
  60. package/components/BestSellers/RecentlyViewed.vue +304 -0
  61. package/components/Cart/ProductQuantity.vue +29 -0
  62. package/components/Cart/index.vue +167 -0
  63. package/components/Categories/index.vue +305 -0
  64. package/components/ChangePassword/index.vue +71 -0
  65. package/components/Checkout/index.vue +192 -0
  66. package/components/Common/DashboardNavigation.vue +37 -0
  67. package/components/Common/PageBanner.vue +28 -0
  68. package/components/Common/ProductCard.vue +152 -0
  69. package/components/Common/Services.vue +58 -0
  70. package/components/Contact/ContactForm.vue +91 -0
  71. package/components/Contact/ContactInfo.vue +74 -0
  72. package/components/Dashboard/RecentOrder.vue +173 -0
  73. package/components/Dashboard/index.vue +79 -0
  74. package/components/EditAddress/index.vue +119 -0
  75. package/components/EditProfile/index.vue +97 -0
  76. package/components/FAQ/index.vue +121 -0
  77. package/components/FeaturedProduct/FeaturedProducts.vue +304 -0
  78. package/components/FeaturedProduct/Products.vue +1562 -0
  79. package/components/ForgotPassword/index.vue +51 -0
  80. package/components/Layout/BackToUp.vue +38 -0
  81. package/components/Layout/Copyright.vue +25 -0
  82. package/components/Layout/Footer.vue +183 -0
  83. package/components/Layout/FooterTwo.vue +165 -0
  84. package/components/Layout/LocationOption.vue +178 -0
  85. package/components/Layout/MiddleHeader.vue +229 -0
  86. package/components/Layout/MiddleHeaderThree.vue +204 -0
  87. package/components/Layout/MiddleHeaderTwo.vue +240 -0
  88. package/components/Layout/Navbar.vue +185 -0
  89. package/components/Layout/NavbarStyleFour.vue +334 -0
  90. package/components/Layout/NavbarStyleThree.vue +188 -0
  91. package/components/Layout/NavbarStyleTwo.vue +108 -0
  92. package/components/Layout/Preloader.vue +18 -0
  93. package/components/Layout/RTLSwitchBtn.vue +40 -0
  94. package/components/Layout/ResponsiveNavbar.vue +431 -0
  95. package/components/Layout/TopHeader.vue +130 -0
  96. package/components/Login/index.vue +94 -0
  97. package/components/MyAccount/index.vue +154 -0
  98. package/components/NewArrivals/Products.vue +1969 -0
  99. package/components/NewArrivals/RecentlyViewed.vue +304 -0
  100. package/components/OrderDetails/index.vue +77 -0
  101. package/components/OrderHistory/index.vue +197 -0
  102. package/components/PrivacyPolicy/index.vue +112 -0
  103. package/components/ProductDetails/ProductDetailsTab.vue +343 -0
  104. package/components/ProductDetails/ProductQuantity.vue +29 -0
  105. package/components/ProductDetails/RecentlyViewed.vue +304 -0
  106. package/components/ProductDetails/index.vue +268 -0
  107. package/components/Products/RecentlyViewed.vue +304 -0
  108. package/components/Products/index.vue +292 -0
  109. package/components/Register/index.vue +88 -0
  110. package/components/TermsConditions/index.vue +112 -0
  111. package/components/TrendingProducts/FeaturedProducts.vue +304 -0
  112. package/components/TrendingProducts/Products.vue +1564 -0
  113. package/components/Wishlist/ProductQuantity.vue +29 -0
  114. package/components/Wishlist/index.vue +128 -0
  115. package/composables/useCart.ts +149 -0
  116. package/composables/useCategories.ts +87 -0
  117. package/composables/useCheckout.ts +131 -0
  118. package/composables/useProducts.ts +162 -0
  119. package/composables/useSiteConfig.ts +236 -0
  120. package/composables/useTemplateSections.ts +74 -0
  121. package/e2e/cart.spec.ts +71 -0
  122. package/e2e/fixtures/mock-api.ts +166 -0
  123. package/e2e/homepage.spec.ts +65 -0
  124. package/e2e/layout.spec.ts +73 -0
  125. package/e2e/navigation.spec.ts +61 -0
  126. package/e2e/pages/cart.page.ts +44 -0
  127. package/e2e/pages/homepage.page.ts +46 -0
  128. package/e2e/playwright.config.ts +32 -0
  129. package/e2e/products.spec.ts +33 -0
  130. package/layouts/default.vue +94 -0
  131. package/layouts/inner.vue +70 -0
  132. package/nuxt.config.ts +86 -0
  133. package/package.json +38 -0
  134. package/pages/about-us.vue +12 -0
  135. package/pages/address.vue +10 -0
  136. package/pages/cart.vue +10 -0
  137. package/pages/categories.vue +10 -0
  138. package/pages/change-password.vue +10 -0
  139. package/pages/checkout.vue +10 -0
  140. package/pages/contact.vue +11 -0
  141. package/pages/dashboard.vue +10 -0
  142. package/pages/edit-address.vue +10 -0
  143. package/pages/edit-profile.vue +10 -0
  144. package/pages/faq.vue +10 -0
  145. package/pages/forgot-password.vue +10 -0
  146. package/pages/login.vue +10 -0
  147. package/pages/my-account.vue +10 -0
  148. package/pages/order-details.vue +10 -0
  149. package/pages/order-history.vue +10 -0
  150. package/pages/privacy-policy.vue +10 -0
  151. package/pages/product-details.vue +10 -0
  152. package/pages/products.vue +10 -0
  153. package/pages/register.vue +10 -0
  154. package/pages/terms-conditions.vue +10 -0
  155. package/pages/wishlist.vue +10 -0
  156. package/plugins/site-init.client.ts +24 -0
  157. package/plugins/vuetify.ts +18 -0
  158. package/types/index.ts +121 -0
  159. package/utils/image.ts +13 -0
  160. package/utils/store.ts +21 -0
@@ -0,0 +1,431 @@
1
+ <template>
2
+ <div
3
+ :class="[
4
+ 'mobile-navbar offcanvas offcanvas-end border-0',
5
+ { show: stateStoreInstance.show },
6
+ ]"
7
+ >
8
+ <div class="offcanvas-header justify-space-between">
9
+ <NuxtLink to="/" class="logo d-inline-block">
10
+ <img src="~/assets/images/logo.png" alt="logo" />
11
+ </NuxtLink>
12
+
13
+ <button
14
+ type="button"
15
+ class="close-btn bg-transparent position-relative lh-1 p-0 border-0"
16
+ @click="stateStoreInstance.onChangeShow"
17
+ >
18
+ <i class="ri-close-fill"></i>
19
+ </button>
20
+ </div>
21
+
22
+ <div class="offcanvas-body">
23
+ <v-expansion-panels variant="accordion" v-model="panel">
24
+ <v-expansion-panel>
25
+ <v-expansion-panel-title>Home</v-expansion-panel-title>
26
+ <v-expansion-panel-text>
27
+ <ul class="mobile-menu-items">
28
+ <li>
29
+ <NuxtLink
30
+ class="dropdown-item"
31
+ to="/"
32
+ @click="stateStoreInstance.onChangeShow"
33
+ >
34
+ Electronics & Telemobile Online Shop
35
+ </NuxtLink>
36
+ </li>
37
+ <li>
38
+ <NuxtLink
39
+ class="dropdown-item"
40
+ to="/grocery-shop"
41
+ @click="stateStoreInstance.onChangeShow"
42
+ >
43
+ Grocery Shop
44
+ </NuxtLink>
45
+ </li>
46
+ <li>
47
+ <NuxtLink
48
+ class="dropdown-item"
49
+ to="/healthy-diet-foods-shop"
50
+ @click="stateStoreInstance.onChangeShow"
51
+ >
52
+ Healthy Diet Foods Shop
53
+ </NuxtLink>
54
+ </li>
55
+ </ul>
56
+ </v-expansion-panel-text>
57
+ </v-expansion-panel>
58
+ <v-expansion-panel>
59
+ <v-expansion-panel-title>Pages</v-expansion-panel-title>
60
+ <v-expansion-panel-text>
61
+ <ul class="mobile-menu-items">
62
+ <li>
63
+ <NuxtLink
64
+ class="dropdown-item"
65
+ to="/about-us"
66
+ @click="stateStoreInstance.onChangeShow"
67
+ >
68
+ About Us
69
+ </NuxtLink>
70
+ </li>
71
+ <li class="mobile-menu-list">
72
+ <v-expansion-panels variant="accordion">
73
+ <v-expansion-panel>
74
+ <v-expansion-panel-title>
75
+ Authentication
76
+ </v-expansion-panel-title>
77
+ <v-expansion-panel-text>
78
+ <ul class="mobile-menu-items sub-dropdown">
79
+ <li>
80
+ <NuxtLink
81
+ class="dropdown-item"
82
+ to="/login"
83
+ @click="stateStoreInstance.onChangeShow"
84
+ >
85
+ Login
86
+ </NuxtLink>
87
+ </li>
88
+ <li>
89
+ <NuxtLink
90
+ class="dropdown-item"
91
+ to="/register"
92
+ @click="stateStoreInstance.onChangeShow"
93
+ >
94
+ Register
95
+ </NuxtLink>
96
+ </li>
97
+ <li>
98
+ <NuxtLink
99
+ class="dropdown-item"
100
+ to="/my-account"
101
+ @click="stateStoreInstance.onChangeShow"
102
+ >
103
+ My Account
104
+ </NuxtLink>
105
+ </li>
106
+ <li>
107
+ <NuxtLink
108
+ class="dropdown-item"
109
+ to="/change-password"
110
+ @click="stateStoreInstance.onChangeShow"
111
+ >
112
+ Change Password
113
+ </NuxtLink>
114
+ </li>
115
+ <li>
116
+ <NuxtLink
117
+ class="dropdown-item"
118
+ to="/forgot-password"
119
+ @click="stateStoreInstance.onChangeShow"
120
+ >
121
+ Forgot Password
122
+ </NuxtLink>
123
+ </li>
124
+ </ul>
125
+ </v-expansion-panel-text>
126
+ </v-expansion-panel>
127
+ </v-expansion-panels>
128
+ </li>
129
+ <li>
130
+ <NuxtLink
131
+ class="dropdown-item"
132
+ to="/faq"
133
+ @click="stateStoreInstance.onChangeShow"
134
+ >
135
+ FAQ
136
+ </NuxtLink>
137
+ </li>
138
+ <li>
139
+ <NuxtLink
140
+ class="dropdown-item"
141
+ to="/privacy-policy"
142
+ @click="stateStoreInstance.onChangeShow"
143
+ >
144
+ Privacy Policy
145
+ </NuxtLink>
146
+ </li>
147
+ <li>
148
+ <NuxtLink
149
+ class="dropdown-item"
150
+ to="/terms-conditions"
151
+ @click="stateStoreInstance.onChangeShow"
152
+ >
153
+ Terms & Conditions
154
+ </NuxtLink>
155
+ </li>
156
+ </ul>
157
+ </v-expansion-panel-text>
158
+ </v-expansion-panel>
159
+ <v-expansion-panel>
160
+ <v-expansion-panel-title>Shop</v-expansion-panel-title>
161
+ <v-expansion-panel-text>
162
+ <ul class="mobile-menu-items">
163
+ <li class="mobile-menu-list">
164
+ <v-expansion-panels variant="accordion">
165
+ <v-expansion-panel>
166
+ <v-expansion-panel-title>
167
+ Product Layouts
168
+ </v-expansion-panel-title>
169
+ <v-expansion-panel-text>
170
+ <ul class="mobile-menu-items sub-dropdown">
171
+ <li>
172
+ <NuxtLink
173
+ class="dropdown-item"
174
+ to="/best-sellers"
175
+ @click="stateStoreInstance.onChangeShow"
176
+ >
177
+ Best Sellers
178
+ </NuxtLink>
179
+ </li>
180
+ <li>
181
+ <NuxtLink
182
+ class="dropdown-item"
183
+ to="/featured-products"
184
+ @click="stateStoreInstance.onChangeShow"
185
+ >
186
+ Featured Products
187
+ </NuxtLink>
188
+ </li>
189
+ <li>
190
+ <NuxtLink
191
+ class="dropdown-item"
192
+ to="/trending-products"
193
+ @click="stateStoreInstance.onChangeShow"
194
+ >
195
+ Trending Products
196
+ </NuxtLink>
197
+ </li>
198
+ <li>
199
+ <NuxtLink
200
+ class="dropdown-item"
201
+ to="/new-arrivals"
202
+ @click="stateStoreInstance.onChangeShow"
203
+ >
204
+ New Arrivals
205
+ </NuxtLink>
206
+ </li>
207
+ <li>
208
+ <NuxtLink
209
+ class="dropdown-item"
210
+ to="/categories"
211
+ @click="stateStoreInstance.onChangeShow"
212
+ >
213
+ Categories
214
+ </NuxtLink>
215
+ </li>
216
+ </ul>
217
+ </v-expansion-panel-text>
218
+ </v-expansion-panel>
219
+ </v-expansion-panels>
220
+ </li>
221
+ <li class="mobile-menu-list">
222
+ <v-expansion-panels variant="accordion">
223
+ <v-expansion-panel>
224
+ <v-expansion-panel-title>
225
+ Products Step
226
+ </v-expansion-panel-title>
227
+ <v-expansion-panel-text>
228
+ <ul class="mobile-menu-items sub-dropdown">
229
+ <li>
230
+ <NuxtLink
231
+ class="dropdown-item"
232
+ to="/products"
233
+ @click="stateStoreInstance.onChangeShow"
234
+ >
235
+ Products
236
+ </NuxtLink>
237
+ </li>
238
+ <li>
239
+ <NuxtLink
240
+ class="dropdown-item"
241
+ to="/cart"
242
+ @click="stateStoreInstance.onChangeShow"
243
+ >
244
+ Cart
245
+ </NuxtLink>
246
+ </li>
247
+ <li>
248
+ <NuxtLink
249
+ class="dropdown-item"
250
+ to="/wishlist"
251
+ @click="stateStoreInstance.onChangeShow"
252
+ >
253
+ Wishlist
254
+ </NuxtLink>
255
+ </li>
256
+ <li>
257
+ <NuxtLink
258
+ class="dropdown-item"
259
+ to="/checkout"
260
+ @click="stateStoreInstance.onChangeShow"
261
+ >
262
+ Checkout
263
+ </NuxtLink>
264
+ </li>
265
+ <li>
266
+ <NuxtLink
267
+ class="dropdown-item"
268
+ to="/product-details"
269
+ @click="stateStoreInstance.onChangeShow"
270
+ >
271
+ Product Details
272
+ </NuxtLink>
273
+ </li>
274
+ </ul>
275
+ </v-expansion-panel-text>
276
+ </v-expansion-panel>
277
+ </v-expansion-panels>
278
+ </li>
279
+ <li class="mobile-menu-list">
280
+ <v-expansion-panels variant="accordion">
281
+ <v-expansion-panel>
282
+ <v-expansion-panel-title>
283
+ Admin Page
284
+ </v-expansion-panel-title>
285
+ <v-expansion-panel-text>
286
+ <ul class="mobile-menu-items sub-dropdown mb-3">
287
+ <li>
288
+ <NuxtLink
289
+ class="dropdown-item"
290
+ to="/dashboard"
291
+ @click="stateStoreInstance.onChangeShow"
292
+ >
293
+ Dashboard
294
+ </NuxtLink>
295
+ </li>
296
+ <li>
297
+ <NuxtLink
298
+ class="dropdown-item"
299
+ to="/edit-profile"
300
+ @click="stateStoreInstance.onChangeShow"
301
+ >
302
+ Edit Profile
303
+ </NuxtLink>
304
+ </li>
305
+ <li>
306
+ <NuxtLink
307
+ class="dropdown-item"
308
+ to="/order-history"
309
+ @click="stateStoreInstance.onChangeShow"
310
+ >
311
+ Order History
312
+ </NuxtLink>
313
+ </li>
314
+ <li>
315
+ <NuxtLink
316
+ class="dropdown-item"
317
+ to="/order-details"
318
+ @click="stateStoreInstance.onChangeShow"
319
+ >
320
+ Order Details
321
+ </NuxtLink>
322
+ </li>
323
+ <li>
324
+ <NuxtLink
325
+ class="dropdown-item"
326
+ to="/change-password"
327
+ @click="stateStoreInstance.onChangeShow"
328
+ >
329
+ Change Password
330
+ </NuxtLink>
331
+ </li>
332
+ </ul>
333
+ </v-expansion-panel-text>
334
+ </v-expansion-panel>
335
+ </v-expansion-panels>
336
+ </li>
337
+ </ul>
338
+ </v-expansion-panel-text>
339
+ </v-expansion-panel>
340
+ <v-expansion-panel>
341
+ <v-expansion-panel-title>Blog</v-expansion-panel-title>
342
+ <v-expansion-panel-text>
343
+ <ul class="mobile-menu-items">
344
+ <li>
345
+ <NuxtLink
346
+ class="dropdown-item"
347
+ to="/our-blog"
348
+ @click="stateStoreInstance.onChangeShow"
349
+ >
350
+ Our Blog
351
+ </NuxtLink>
352
+ </li>
353
+ <li>
354
+ <NuxtLink
355
+ class="dropdown-item"
356
+ to="/blog-details"
357
+ @click="stateStoreInstance.onChangeShow"
358
+ >
359
+ Blog Details
360
+ </NuxtLink>
361
+ </li>
362
+ <li>
363
+ <NuxtLink
364
+ class="dropdown-item"
365
+ to="/tags"
366
+ @click="stateStoreInstance.onChangeShow"
367
+ >
368
+ Tags
369
+ </NuxtLink>
370
+ </li>
371
+ <li>
372
+ <NuxtLink
373
+ class="dropdown-item"
374
+ to="/categories"
375
+ @click="stateStoreInstance.onChangeShow"
376
+ >
377
+ Categories
378
+ </NuxtLink>
379
+ </li>
380
+ <li>
381
+ <NuxtLink
382
+ class="dropdown-item"
383
+ to="/author"
384
+ @click="stateStoreInstance.onChangeShow"
385
+ >
386
+ Author
387
+ </NuxtLink>
388
+ </li>
389
+ </ul>
390
+ </v-expansion-panel-text>
391
+ </v-expansion-panel>
392
+ <v-expansion-panel>
393
+ <v-expansion-panel-title class="without-icon">
394
+ <NuxtLink to="/contact" @click="stateStoreInstance.onChangeShow">
395
+ Contact
396
+ </NuxtLink>
397
+ </v-expansion-panel-title>
398
+ </v-expansion-panel>
399
+ </v-expansion-panels>
400
+ </div>
401
+ </div>
402
+ </template>
403
+
404
+ <script lang="ts">
405
+ import { defineComponent, ref } from "vue";
406
+ import stateStore from "~/utils/store";
407
+
408
+ export default defineComponent({
409
+ name: "ResponsiveNavbar",
410
+ data: () => ({
411
+ panel: [0],
412
+ }),
413
+ setup() {
414
+ const show = ref(false);
415
+ const stateStoreInstance = stateStore;
416
+ const activeMobileMenu = ref<string | null>(null);
417
+
418
+ const toggleMobileMenu = (mobileMenu: string) => {
419
+ activeMobileMenu.value =
420
+ activeMobileMenu.value === mobileMenu ? null : mobileMenu;
421
+ };
422
+
423
+ return {
424
+ show,
425
+ stateStoreInstance,
426
+ toggleMobileMenu,
427
+ activeMobileMenu,
428
+ };
429
+ },
430
+ });
431
+ </script>
@@ -0,0 +1,130 @@
1
+ <template>
2
+ <div class="top-header-area border-bottom ptb-12">
3
+ <div class="container">
4
+ <v-row>
5
+ <v-col cols="12" lg="6" md="5">
6
+ <ul
7
+ class="ps-0 mb-0 list-unstyled info-link d-flex align-items-center justify-content-center justify-content-md-start position-relative tops-1"
8
+ >
9
+ <li>
10
+ <NuxtLink to="/about-us">About Us</NuxtLink>
11
+ </li>
12
+ <li>
13
+ <NuxtLink to="/faq">FAQs</NuxtLink>
14
+ </li>
15
+ <li>
16
+ <NuxtLink to="/contact">Help & Contact</NuxtLink>
17
+ </li>
18
+ </ul>
19
+ </v-col>
20
+ <v-col cols="12" lg="6" md="7">
21
+ <ul
22
+ class="ps-0 mb-0 list-unstyled info-link info-right d-flex align-items-center justify-content-center justify-content-md-end mt-2 mt-md-0"
23
+ >
24
+ <li>
25
+ <NuxtLink
26
+ to="/products"
27
+ class="text-danger d-flex align-items-center position-relative tops-1"
28
+ >
29
+ <i class="flaticon-flash-sale"></i>
30
+ <span>Flash sale 20% off</span>
31
+ </NuxtLink>
32
+ </li>
33
+ <li>
34
+ <div class="dropdown flag-wrap">
35
+ <button
36
+ class="dropdown-toggle fw-medium fs-14 p-0 border-0 bg-transparent flag"
37
+ @click="toggleDropdown"
38
+ :aria-pressed="show ? 'true' : 'false'"
39
+ :class="{ show: buttonShowState }"
40
+ >
41
+ <img :src="currentImage" :alt="currentName" />
42
+ <span>{{ currentName }}</span>
43
+ </button>
44
+ <ul class="dropdown-menu" :class="{ toggler: show }">
45
+ <li>
46
+ <div v-if="languages.length > 0">
47
+ <a
48
+ class="dropdown-item d-flex align-items-center"
49
+ href="#"
50
+ v-for="(language, index) in languages"
51
+ :key="language.id"
52
+ @click.prevent="toggleSelected(language, index)"
53
+ >
54
+ <img :src="language.image" :alt="language.name" />
55
+ <span class="ms-2">{{ language.name }}</span>
56
+ </a>
57
+ </div>
58
+ </li>
59
+ </ul>
60
+ </div>
61
+ </li>
62
+ <li>
63
+ <select
64
+ class="form-select p-0 border-0 currency fw-medium fs-14 text-secondary"
65
+ aria-label="Default select example"
66
+ >
67
+ <option selected>USD $</option>
68
+ <option value="1">EUR £</option>
69
+ <option value="2">YEN ¥</option>
70
+ </select>
71
+ </li>
72
+ </ul>
73
+ </v-col>
74
+ </v-row>
75
+ </div>
76
+ </div>
77
+ </template>
78
+
79
+ <script lang="ts">
80
+ import { defineComponent, ref } from "vue";
81
+ import image1 from "~/assets/images/united-states.png";
82
+ import image2 from "~/assets/images/china.png";
83
+ import image3 from "~/assets/images/arabi.png";
84
+
85
+ interface LanguageOption {
86
+ id: string;
87
+ image: string;
88
+ name: string;
89
+ }
90
+
91
+ export default defineComponent({
92
+ name: "TopHeader",
93
+ setup() {
94
+ const show = ref(false);
95
+ const buttonShowState = ref(false);
96
+ const languages = ref<LanguageOption[]>([
97
+ { id: "1", image: image1, name: "English" },
98
+ { id: "2", image: image2, name: "China" },
99
+ { id: "3", image: image3, name: "Arabic" },
100
+ ]);
101
+ const currentName = ref("English");
102
+ const currentImage = ref(image1);
103
+ const clicked = ref<number | null>(null);
104
+
105
+ const toggleDropdown = () => {
106
+ show.value = !show.value;
107
+ buttonShowState.value = !buttonShowState.value;
108
+ };
109
+
110
+ const toggleSelected = (language: LanguageOption, index: number) => {
111
+ clicked.value = clicked.value === index ? null : index;
112
+ currentName.value = language.name;
113
+ currentImage.value = language.image;
114
+ show.value = false;
115
+ buttonShowState.value = false;
116
+ };
117
+
118
+ return {
119
+ show,
120
+ buttonShowState,
121
+ languages,
122
+ currentName,
123
+ currentImage,
124
+ clicked,
125
+ toggleDropdown,
126
+ toggleSelected,
127
+ };
128
+ },
129
+ });
130
+ </script>
@@ -0,0 +1,94 @@
1
+ <template>
2
+ <div class="authentication-area ptb-60">
3
+ <div class="container">
4
+ <div class="authentication-content">
5
+ <div class="row">
6
+ <div class="col-lg-5">
7
+ <div class="login h-100 text-center">
8
+ <img
9
+ src="~/assets/images/login.png"
10
+ class="h-100 object-fit-cover"
11
+ alt="login"
12
+ />
13
+ </div>
14
+ </div>
15
+ <div class="col-lg-7">
16
+ <div class="authentication-form">
17
+ <ul class="nav nav-tabs login-tabs" id="myTab" role="tablist">
18
+ <li class="nav-item" role="presentation">
19
+ <NuxtLink to="/login" class="nav-link active">Login</NuxtLink>
20
+ </li>
21
+ <li class="nav-item" role="presentation">
22
+ <NuxtLink to="/register" class="nav-link">Register</NuxtLink>
23
+ </li>
24
+ </ul>
25
+ <p>
26
+ If you have an account, sign in with your username or email
27
+ address.
28
+ </p>
29
+ <form>
30
+ <div class="form-group mb-4">
31
+ <label class="label">Username or Email Address *</label>
32
+ <input
33
+ type="text"
34
+ class="form-control"
35
+ placeholder="Enter your user name"
36
+ />
37
+ </div>
38
+ <div class="form-group mb-4">
39
+ <label class="label">Your Password *</label>
40
+ <input
41
+ type="password"
42
+ class="form-control"
43
+ placeholder="Enter your password"
44
+ />
45
+ </div>
46
+ <div class="d-flex justify-content-between mb-4">
47
+ <div class="form-check">
48
+ <input
49
+ class="form-check-input"
50
+ type="checkbox"
51
+ value=""
52
+ id="flexCheckDefault"
53
+ />
54
+ <label class="form-check-label" for="flexCheckDefault">
55
+ Remember
56
+ </label>
57
+ </div>
58
+ <NuxtLink to="/forgot-password" class="text-primary">
59
+ Lost your password?
60
+ </NuxtLink>
61
+ </div>
62
+ <div class="form-group mb-4">
63
+ <button
64
+ type="submit"
65
+ class="btn btn-warning btn-pill text-white w-100 d-block"
66
+ >
67
+ Login
68
+ </button>
69
+ </div>
70
+ <div class="form-group mb-0">
71
+ <p class="text-secondary ms-1 text-primary">
72
+ Don’t have an account?
73
+ <NuxtLink
74
+ to="/register"
75
+ class="text-decoration-none text-primary"
76
+ >
77
+ Register
78
+ </NuxtLink>
79
+ </p>
80
+ </div>
81
+ </form>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ </div>
88
+ </template>
89
+
90
+ <script>
91
+ export default {
92
+ name: "Login",
93
+ };
94
+ </script>