From 2d363e1740ad1c866644f5d00d384c2f5d45d5d8 Mon Sep 17 00:00:00 2001 From: Alexandr SaVBaD Waltz Date: Sat, 31 May 2025 17:43:33 +0300 Subject: [PATCH] Features: 1) Introduce new components including `ui-counter`, `ui-link`, `base-auth`, and `base-header-catalogue` with scoped styles; 2) Add `useProductTags` composable and integrate GraphQL queries for product tagging; 3) Build standalone pages for cart and wishlist with basic templates; 4) Integrate `vue3-marquee-slider`, `swiper`, and `primeicons` dependencies for enhanced UI interactions; 5) Add skeleton loaders for language switcher and counter components; 6) Localize the app with support for `it-it`, `de-de`, `ja-jp`, `da-dk`, `fr-fr`, and `nl-nl` locales; Fixes: 1) Refactor `useProducts` and `useCategorybySlug` composables for improved error handling and lazy loading; 2) Correct import path in `product-page.vue` for `useProductBySlug`; 3) Update `useLanguages` composable to set current locale from local storage; 4) Remove unused `auth.js`, `base-header.vue`, and deprecated GraphQL fragments; Extra: Minor styling adjustments and removal of redundant console logs; Updated `package-lock.json` dependencies for version consistency. --- storefront/package-lock.json | 42 +++- storefront/package.json | 5 +- storefront/public/favicon.ico | Bin 4286 -> 41662 bytes storefront/src/App.vue | 30 ++- storefront/src/apollo/index.js | 9 +- .../SourceCodePro/SourceCodePro-Black.ttf | Bin 0 -> 132952 bytes .../SourceCodePro/SourceCodePro-Bold.ttf | Bin 0 -> 133464 bytes .../SourceCodePro/SourceCodePro-ExtraBold.ttf | Bin 0 -> 133448 bytes .../SourceCodePro-ExtraLight.ttf | Bin 0 -> 133304 bytes .../SourceCodePro/SourceCodePro-Light.ttf | Bin 0 -> 133696 bytes .../SourceCodePro/SourceCodePro-Medium.ttf | Bin 0 -> 133384 bytes .../SourceCodePro/SourceCodePro-Regular.ttf | Bin 0 -> 133596 bytes .../SourceCodePro/SourceCodePro-SemiBold.ttf | Bin 0 -> 133348 bytes storefront/src/assets/icons/eyeClosed.svg | 5 - storefront/src/assets/icons/eyeOpened.svg | 3 - .../src/assets/images/evibes-big-simple.png | Bin 0 -> 62415 bytes storefront/src/assets/images/evibes-big.png | Bin 0 -> 97723 bytes storefront/src/assets/images/homeBg.png | Bin 0 -> 1386954 bytes .../src/assets/styles/global/fonts.scss | 42 ++++ .../src/assets/styles/global/variables.scss | 8 +- storefront/src/components/base/base-auth.vue | 65 +++++ .../src/components/base/base-header.vue | 26 -- .../base/header/base-header-catalogue.vue | 43 ++++ .../base/header/base-header-search.vue | 237 ++++++++++++++++++ .../components/base/header/base-header.vue | 129 ++++++++++ .../src/components/cards/product-card.vue | 127 ++++++++++ .../src/components/forms/deposit-form.vue | 14 +- .../src/components/forms/login-form.vue | 32 ++- .../components/forms/new-password-form.vue | 6 + .../src/components/forms/register-form.vue | 85 +++++-- .../components/forms/reset-password-form.vue | 6 + .../src/components/forms/update-form.vue | 12 +- .../src/components/home/home-brands.vue | 48 ++++ .../components/home/home-collection-inner.vue | 106 ++++++++ .../src/components/home/home-collection.vue | 104 ++++++++ storefront/src/components/home/home-hero.vue | 42 ++++ .../header/header-search-skeleton.vue | 31 +++ .../skeletons/ui/counter-skeleton.vue | 30 +++ .../ui/language-switcher-skeleton.vue | 26 ++ storefront/src/components/ui/ui-button.vue | 26 +- storefront/src/components/ui/ui-checkbox.vue | 75 +++--- storefront/src/components/ui/ui-counter.vue | 27 ++ storefront/src/components/ui/ui-input.vue | 12 +- .../components/ui/ui-language-switcher.vue | 125 +++++++++ storefront/src/components/ui/ui-link.vue | 42 ++++ storefront/src/composables/auth/useLogin.js | 19 +- storefront/src/composables/auth/useLogout.js | 17 +- storefront/src/composables/auth/useRefresh.js | 12 +- storefront/src/composables/brands/index.js | 2 + .../src/composables/brands/useBrandByUuid.js | 24 ++ .../src/composables/brands/useBrands.js | 20 ++ .../categories/useCategorybySlug.js | 4 +- .../languages/useLanguageSwitch.js | 11 +- .../src/composables/languages/useLanguages.js | 4 +- storefront/src/composables/products/index.js | 4 +- .../composables/products/useProductTags.js | 20 ++ .../src/composables/products/useProducts.js | 58 ++--- storefront/src/composables/search/index.js | 2 + .../src/composables/search/useSearch.js | 52 ++++ .../src/composables/search/useSearchUi.js | 67 +++++ .../src/composables/user/useUserUpdating.js | 13 +- storefront/src/config/index.js | 66 ++++- .../src/graphql/fragments/brands.fragment.js | 8 + .../src/graphql/fragments/company.fragment.js | 12 - .../graphql/fragments/languages.fragment.js | 9 - .../graphql/fragments/products.fragment.js | 16 ++ storefront/src/graphql/mutations/search.js | 34 +++ storefront/src/graphql/queries/brands.js | 37 +++ storefront/src/graphql/queries/categories.js | 9 + storefront/src/graphql/queries/company.js | 11 +- storefront/src/graphql/queries/languages.js | 6 +- storefront/src/graphql/queries/products.js | 22 ++ storefront/src/locales/ar-ar.json | 3 + storefront/src/locales/cs-cz.json | 3 + storefront/src/locales/da-dk.json | 3 + storefront/src/locales/de-de.json | 3 + storefront/src/locales/en-gb.json | 48 +++- storefront/src/locales/en-us.json | 3 + storefront/src/locales/es-es.json | 3 + storefront/src/locales/fr-fr.json | 3 + storefront/src/locales/it-it.json | 3 + storefront/src/locales/ja-jp.json | 3 + storefront/src/locales/nl-nl.json | 3 + storefront/src/locales/pl-pl.json | 3 + storefront/src/locales/pt-br.json | 3 + storefront/src/locales/ro-ro.json | 3 + storefront/src/locales/ru-ru.json | 3 + storefront/src/locales/zh-hans.json | 3 + storefront/src/main.js | 1 + storefront/src/pages/cart-page.vue | 19 ++ storefront/src/pages/home-page.vue | 23 +- storefront/src/pages/product-page.vue | 2 +- storefront/src/pages/search-page.vue | 24 ++ storefront/src/pages/store-page.vue | 2 - storefront/src/pages/wishlist-page.vue | 19 ++ storefront/src/router/index.js | 68 +++-- storefront/src/stores/app.js | 25 ++ storefront/src/stores/auth.js | 14 -- storefront/src/stores/languages.js | 9 +- storefront/src/stores/user.js | 12 + 100 files changed, 2192 insertions(+), 298 deletions(-) create mode 100644 storefront/src/assets/fonts/SourceCodePro/SourceCodePro-Black.ttf create mode 100644 storefront/src/assets/fonts/SourceCodePro/SourceCodePro-Bold.ttf create mode 100644 storefront/src/assets/fonts/SourceCodePro/SourceCodePro-ExtraBold.ttf create mode 100644 storefront/src/assets/fonts/SourceCodePro/SourceCodePro-ExtraLight.ttf create mode 100644 storefront/src/assets/fonts/SourceCodePro/SourceCodePro-Light.ttf create mode 100644 storefront/src/assets/fonts/SourceCodePro/SourceCodePro-Medium.ttf create mode 100644 storefront/src/assets/fonts/SourceCodePro/SourceCodePro-Regular.ttf create mode 100644 storefront/src/assets/fonts/SourceCodePro/SourceCodePro-SemiBold.ttf delete mode 100644 storefront/src/assets/icons/eyeClosed.svg delete mode 100644 storefront/src/assets/icons/eyeOpened.svg create mode 100644 storefront/src/assets/images/evibes-big-simple.png create mode 100644 storefront/src/assets/images/evibes-big.png create mode 100644 storefront/src/assets/images/homeBg.png create mode 100644 storefront/src/components/base/base-auth.vue delete mode 100644 storefront/src/components/base/base-header.vue create mode 100644 storefront/src/components/base/header/base-header-catalogue.vue create mode 100644 storefront/src/components/base/header/base-header-search.vue create mode 100644 storefront/src/components/base/header/base-header.vue create mode 100644 storefront/src/components/cards/product-card.vue create mode 100644 storefront/src/components/home/home-brands.vue create mode 100644 storefront/src/components/home/home-collection-inner.vue create mode 100644 storefront/src/components/home/home-collection.vue create mode 100644 storefront/src/components/home/home-hero.vue create mode 100644 storefront/src/components/skeletons/header/header-search-skeleton.vue create mode 100644 storefront/src/components/skeletons/ui/counter-skeleton.vue create mode 100644 storefront/src/components/skeletons/ui/language-switcher-skeleton.vue create mode 100644 storefront/src/components/ui/ui-counter.vue create mode 100644 storefront/src/components/ui/ui-language-switcher.vue create mode 100644 storefront/src/components/ui/ui-link.vue create mode 100644 storefront/src/composables/brands/index.js create mode 100644 storefront/src/composables/brands/useBrandByUuid.js create mode 100644 storefront/src/composables/brands/useBrands.js create mode 100644 storefront/src/composables/products/useProductTags.js create mode 100644 storefront/src/composables/search/index.js create mode 100644 storefront/src/composables/search/useSearch.js create mode 100644 storefront/src/composables/search/useSearchUi.js create mode 100644 storefront/src/graphql/fragments/brands.fragment.js delete mode 100644 storefront/src/graphql/fragments/company.fragment.js delete mode 100644 storefront/src/graphql/fragments/languages.fragment.js create mode 100644 storefront/src/graphql/mutations/search.js create mode 100644 storefront/src/graphql/queries/brands.js create mode 100644 storefront/src/locales/ar-ar.json create mode 100644 storefront/src/locales/cs-cz.json create mode 100644 storefront/src/locales/da-dk.json create mode 100644 storefront/src/locales/de-de.json create mode 100644 storefront/src/locales/en-us.json create mode 100644 storefront/src/locales/es-es.json create mode 100644 storefront/src/locales/fr-fr.json create mode 100644 storefront/src/locales/it-it.json create mode 100644 storefront/src/locales/ja-jp.json create mode 100644 storefront/src/locales/nl-nl.json create mode 100644 storefront/src/locales/pl-pl.json create mode 100644 storefront/src/locales/pt-br.json create mode 100644 storefront/src/locales/ro-ro.json create mode 100644 storefront/src/locales/ru-ru.json create mode 100644 storefront/src/locales/zh-hans.json create mode 100644 storefront/src/pages/cart-page.vue create mode 100644 storefront/src/pages/search-page.vue create mode 100644 storefront/src/pages/wishlist-page.vue create mode 100644 storefront/src/stores/app.js delete mode 100644 storefront/src/stores/auth.js create mode 100644 storefront/src/stores/user.js diff --git a/storefront/package-lock.json b/storefront/package-lock.json index 177727fb..ef7189e7 100644 --- a/storefront/package-lock.json +++ b/storefront/package-lock.json @@ -15,9 +15,12 @@ "graphql": "^16.11.0", "graphql-tag": "^2.12.6", "pinia": "^3.0.1", + "primeicons": "^7.0.0", + "swiper": "^11.2.8", "vue": "^3.5.13", "vue-i18n": "^11.1.4", - "vue-router": "^4.5.0" + "vue-router": "^4.5.0", + "vue3-marquee-slider": "^1.0.5" }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.3", @@ -3344,6 +3347,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/primeicons": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-7.0.0.tgz", + "integrity": "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==", + "license": "MIT" + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -3618,6 +3627,25 @@ "node": ">=16" } }, + "node_modules/swiper": { + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.8.tgz", + "integrity": "sha512-S5FVf6zWynPWooi7pJ7lZhSUe2snTzqLuUzbd5h5PHUOhzgvW0bLKBd2wv0ixn6/5o9vwc/IkQT74CRcLJQzeg==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "license": "MIT", + "engines": { + "node": ">= 4.7.0" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -4050,6 +4078,18 @@ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", "license": "MIT" }, + "node_modules/vue3-marquee-slider": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/vue3-marquee-slider/-/vue3-marquee-slider-1.0.5.tgz", + "integrity": "sha512-92nrvGrmTC9Ltqz6QRXdkuJ5Tj6gM+69xy8sEB2kq/xY8RI/FTQxDF6QiCyJdieJDNL67giKlhJVDL0D9i9SxQ==", + "license": "MIT", + "dependencies": { + "vue": "^3.2.45" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/storefront/package.json b/storefront/package.json index cf36e216..c04c397d 100644 --- a/storefront/package.json +++ b/storefront/package.json @@ -16,9 +16,12 @@ "graphql": "^16.11.0", "graphql-tag": "^2.12.6", "pinia": "^3.0.1", + "primeicons": "^7.0.0", + "swiper": "^11.2.8", "vue": "^3.5.13", "vue-i18n": "^11.1.4", - "vue-router": "^4.5.0" + "vue-router": "^4.5.0", + "vue3-marquee-slider": "^1.0.5" }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.3", diff --git a/storefront/public/favicon.ico b/storefront/public/favicon.ico index df36fcfb72584e00488330b560ebcf34a41c64c2..f3ba783b76ad1acba13fc265b899e748eea1d049 100644 GIT binary patch literal 41662 zcmeI5X^>UbcE?Y@PTLk5Fr_3PVwF@`sh29Np7~<(AxX6nWJZ~%W}d+bCmc|_Q~8j5 zGO0X8Q3M2JP#h6NL1_jNTLuxw7pfi=GgwqUbSx`{7WB#gxAs~0?!NEd?%TZX2JG9` z_S`e=v-etiP5-sdAxWzA-@JK={y!kuye>)pI7yN}SJR>7kQ&GNyLnZTT>q=k?1284 zrfH>BXi!-Ll{HXV1C=#USp$_dP+0?&HBeatl{HXV1C=$<>(; zS8>hiA(N`t4X^LBWz>uTuZ@{IeA|Qt4Yaq$&7bq?=s9(pM$NeP#bHxxx%SyxC)D_T z9ra&1Umow`H4Y!%5D#`uzGM4==}S+4Jo~}3$L2qreyVnK-b3lfv+h5$ciKHC-feEuWpXY(IT zPb~1p{v+beBk9q(52XjD-+Oxd#6?f8A2Ge3>9JeJnT{*>xs~hkd~}-(FQCij+h$(h zH0|z_pD$dVezW9>^xy7iNWWhEc>3j{$I>qrEKfhT_GtQr&U1`&{5~wc?4ELG(<`^n zzG>aC`o8pq%~_f0z6#CrH1CKOuKTx$7yGo?Y^muwi z>wRziJtyCtv}6nIJ+-~{cc1)N^gcHCVbfhMBVS2QzFa6iY0LdVhb=w*&csElw%m?w znN+usc%r}b}|diRMh7Cvrr@yVPATX#%Y_~gbBGy1O{ zGP!2W(8<*_{3(1Z__I$s4f_J^O-2?-MixG5vSj=bZ$6dn**D|f({GNSzw{+N!^eTF zRCv->e?bq{>x(0%_Srdk@fPU%_2MUN-Q!cO8$Pwq%3G12U{|1JtaH{6ukVY`yJNzl zC-+Xj=i8(6mPxK;Q>52im)TZ4Le}<8U;6EvW9Lm=J9J77HpSP1^Qf{7{CP`j_merx zTG3Iir`{MlcOv?Qc#ti289jr|4|->8t*&a5^LnifF+{^fpt@o{C=G4It;%n%H-a_BQ5B#BbCoSHBFZAnM z#$01IB8%T+9aV}?E+enV|2jDH{vYsvu}%IA*1#vSF>jAw*sxl-7Z`G>zJAWf;Ro|u zIcP%F2CZLk5&RzH0(!Zg$G$g?3O94mx(#n0$%ztLGQ44z!`reeE8vmZDc+g)gfeaEI8mi)Xgo4-|l*!mIm{Z=c^ zW<5hM=WQw4;d|jf;TwD;8G#pW+k@}*XnJtwy)7>b?_zzF>ZdmxcbmRu*p%uW!pn&T z4KI{jz>nj?ub>}tb5u6@!x{Is?45r1w|naEIxRNM0E|>n7;k z5v{o9`CBJczczNx@MiUo9t5j&S>c&)jh#Dr)!>O0tWi1#e-^!iF4{GD@%B%ZXM+BQ zp=*nNaefdlek5KH&%Zc)YA!zSkSD?`H!4otJ8kK=$Q?XEAHr++@uvK|j{4{==i$XO zTEnd44dMxL2Yx7+2YxDgjNb=m+}HBHavR`PYo+5lvK=w~R>*fEMkF`lzAw58p5QZJ zU*hX~`){YM`>5nCw#yHNe(+$Y@Ir7E`0(tYaaG{+ouL`NEceFzz<)q*VVAbtKJy00 zZ#vWO&-q$-5_DI{8G)_8C_DvB1zIw9?10nFc~}ljp1NghAN+=0vgzdA(SPW^53vO@K>P=dXdxEt7+Wm$ zoL}EE_8NTT_vAA;KkyI0Qg#w^N|*HnKT6TD6mN3Ji}1tGF=yv@srg@Q$6Y>ReFZ=8 z4X7bvysj&|YV6p<6~d>jb}Yjcuwmdc*emidZ;Y8Yd}~&-gza26Y-(Swi5tE;^1E@= z^lNG0*X!huat%7f#;*RE<5L628jivG^)<}ewq`sn9v{HZp5Up`gRzM&*rWr~?-Q;M z=B~W1`0;^a8T27@>Pq>iFXS9-An;)3^>2<_U^z|ne#TN6wAwXg$#&?E zU+r9Ss(X4% z`G!|V&#j{-!DLGO3NkgtFr>mcAkQJs=QculK>1Bp+h8&V-+~{U+rmq0nG9yW7WbfU zXq;b_)sbu*Iio+ZipL!m*T{}H3!fnePhPQbT<5bN%R4#;U9?ZJ4)g+-VGaByt6Tcb zl7{pf<)pt_L<_Y7oF`9BZ4>AH8jhn^@jXJr4+#yNfjA0zhp%99`10Ve@Cf-kIOG17 z{mS(*|2?Wrz*ohFVl&~{+thlB4#Zzz?XOCYzHkMI*lh{fJEiHpK6&+41n3@tSNPN7jVvam-qVCy5{M<%=TC z`3T>?RGkPh7ya@4WAZaCwiE9@(fa&Y4cr4+CjQ$aoE84PD{N}V#D!13Et+oA+Gc&z z_zl(@w|8_MbVtX6(;kp6CQr+Ac&=eAT3@Uo;y(IEccI6Sqe8l#?|vaac1~KfYWLJT znyCRp&ojn%Rj+}4U<{1)!x>9Yqcf=$qwyPB5D(G7KM&7d)(Rh8&p}V(CTQ<+!q&0a z6B*9}?+WyxpA%h-$800sI$ro0dQ!(--k>Ei$GR?T_@~|u=Y9u1`?wunLH-#l>wp>u zFhgX|{RrQlFAw7ToF6X?o>YU5rmhH|2-#(y#&4dFEK_>{UX3g>E*ihV9yo62q(9Il z=oM1XJ6O1N8^<_YSK>>! zA3|R_U&nmVypI9iiQYypzcp^&oSo7Q?;&%NL2UVlk}dF3(}$T}%<0EWM+Ti3jc&wa6UtcfrVF+FdHYonJA} z$aRx9#g-y_$Rc(N8N-)Au2_fYd~hc)LG&g5*FM#$eFX2MztKPFBIN8CP4o-8G02kJ zpP&ie*kE;gF8#tU(M*L8*Z(~lR< z0lSBs5oglKYqDP~ezLmGA>x~Ohpv1{dg5hab+1V;I^VXBU(gWi#NB3#?>YfZ-IihB z@fY!r_9$+^267$t@EzGo^eKHne|#nUGvXk|j=VoTXq@6y>gXzUx-ma3Zm@VE#0`Z! zWDVnYf)$XT085~uBR8rM$7~Q@fKP8Rr+i*w-Zsz3`j6!~K7X<9Y2#pcxBIln&UhuJWHerC@K`SbjciPbc}zwj9r+tY_+fOl>ftM_}c^TX#9 z=a}R973wj+zALsoCw^98pM~dxPZ8pEV)lT6d3^r6FL%w?U30V8g-w2K>qUxYV{m?s>0dg5j&gci=|& zfgUr5I9RyH!ch13xy5J1T8g{c;dSL5RToUYn# z(EGi-??9a8I4#)17kW>KI?Oyil*bo&_wIOxBT{1l?%~bwDr6^X0iSTpLUmAfJda;E zR-D5wkU5^OHDNV1;3_-=xl<#)4tSNuqj7*qgGqsJP(uR7Vfs=va_C*+JK}6~A+mzK zH=pVvwNdDXkAx3`7qC7Z`vyBDz9PjFE|{1QquD)gK6((Hw^|qheCg=Dkgi(q zo#}^o7~Q;0`Wu|$4dG1i2V2Y7E$1qK37t(1U}*K)*7qaU;yksh+(X`vT3TXW?03M3 zmux4Gh)n_`MfX4-cuid`dMe-@jz@vjf^CR@YVZSj%gLJIf}z&X^!4C7;(t=C>JljgL~|h4@WKS2jUqu&+rbL0JcHP$)b3P{Q%>Ku7+Wm z{0S$P47%MyE@EErJLV^{1BP`_{p^~0M-%xh))wQ(mKOSQ-AVUieKU@jmVV9eYx9^F zEyNlD>+s*sbHjg?FNb$)qsG2BKfZqW)V}Z&KiRNG*#>xr%z@?OyCF}`3+D^Ga?F=4 z@?yM$Z)#wP)JfyFF)rhY_~LZv>1}uMgL#zV2XnUiPHh8jQKWv0b85t;acm0qgzsee z8NJi7Y1Fi9S>u*>QLKY(Ve_zq=sM&9U5CwazQB{lkkW4GpP%DYT%e_p1NgBAAY-zLEhjKF%)qu*lzPIea{EkK`zwbh4TeF zg}-LDNj@Dh*RIKTZb!F1r#xM6;zuc(mvg*aUSh9#2OYbF@8J1*c#!8w&}YH!2VTL) zt+&s)iLqcm%NbMUnzr9*aC(?7%xZV|jeaBcz<<~yTSLw~&zJBnpz{X#A)f_rs4>Gw z1P4H0mh&FFkD;Jw5jJo(DZ?)KpOG0`~QJ_P%tiyG(x} zCyGdec%RtE!#(_Vy+LeGzJl6z^YJw=&iQ%2ue-PCFZ2(#p16ZrNBmyLFk`-$?#kkR zd}3@0`FiX;^XclbvaT7Q>sauU^&_YC+ajF_E=8;r>TsyFT-bn31Z&`XDj_c=99;5j zxT?lV4W{LvbZw~F3^g2lOJS4phu{!~8#rKgUR%?}x)00{{~rtyzJU#cSy3ZLeh}Qu>lS=|J-J2q@cogON6)^AS}&Ie zwdTFmR%agN zrF0MXxldwplgSTpa4uJ2{KYP2_(aBQe0_KiCdj*BU{RjibN$tox**KE__y3y1FQvN zKy<`Gy$kiJVJcxQ#XO;A{~KW}j2n!TxYO5mOy|!2CTBsdI%|RVJJ>>7zI_KK9rC01 zoJ4=+-*>vRnfwlo_n)vEa-}fbqcx=gEorRT`KO`f z-wR`Yv^F(2x|Vz5bx1r6FTsy^{{VYIK8ZQOk9dA|EVEnSNaPV;m;OSh5*K%NZd~tU z!S5zNMh?aNa`|}e^~Zh8kNK?E8l;BFa`zf{JZAWT{IK?@M@7fFo^7xHQs?3t!|sab zz^>sjaS3t-UV)yY?#JKz2zDy0J=YK5;e5-8SQ_0`Y7V82Lrc~>x`g-KpegS-(D3ny zol4#7$6ZeRdrR;H9=MDU!;=R?XKxxc)7}x`xqg3VxA2nti}m4atFwI;UT^wBag*gM zviJ$T$G7W|0qCCh9r8RuMmP?xf&WLp#l~6qJjU&7l>9z9-w=Z@*Y|z!5uY%B6}?(` zZ{a@ABgaBMn|c8LZG@N~!5%J8c{hxlJoh^f3;Vhl_npV+KgNeYg$_dpAQ!QmFjpGB z1@#ulayk4knn=Hq|G*xSFaJiq3UmxS*7sl)kGsxiOg^smXtq@t1mDhNOg>K2VUihi zF!d|+b1Ct|=L=n32k~wPbwi;JFP|&IKQkMnI2m7#nBMR4eu`}kYZy4b8odae@VU{8 zJ<`DqIV!@lxUkbAt!2+r5Sbp75^tPSuPY*1V{3bA5mwBW^MMES}K^weh9s zi5|p9qz;?$Wp$q(L#1()5z%qsI%vO?!{*CjRE8feaE+7 zi;bhbW7q`j7x5VOE-xS067p8dE-8L6SLjXr$r=Nn2N$7cGqwrDk-qNS&o7rBPEY!` z?@VMm1%7~w;`72!_a*%La<;Aq!KT3}3i-i$A;!9xwq1GC+LRQpM*ACAJZ|&pJF%FWbM*>D(E}(9M8ia0{i)&lfImH<@DQA*T4(x1Y;xjjQ+;&JbB088zu~{P23I- z&;`D(z&81Y2{B2~(SaXs&wc!*__0y-aUay*c>*3FSMbB^uJV8Qxa4!rhi1-?4a&n2 z`{nr&bSqdWvIDMjG4jK0HuZkQ!cHIN!8bL)F`c%)1v{j++jy7hey1fmBKW&)YlZz@ zXh4G|9@C&kYp2N3gve&8+G zAMfozfBd@GcD2V7#)|C;x!ni#E$j@dmMzCN5!aIcZLg0DanAX{v+;-U`-va01<(iE z06&NU{`K!hUlXq<_<@}VLvenvuAw1xpwIUB!Fg)!u~o!k(wL`kZ zdB`_-&^vs~ig>Y93>eSRX+jxi|&+IzzOtxRk)xf$M1D2E^JM^G~YwgGQh6FI%5{V;}*6C;kp4}L|y_iEKK`L`XI z1GdHGk$fdKjP>!guu1wmJomwrZ=7`p4ZEsOUsv=;-hyuznU2u-ohL3QPNO55m%oEZ ztjjyptY5x?iQSKFQn}-Vj`%{v1%^{&`&yWK{_OR_d$83pc@3zFoAbvPr#(Li`+>&}1{6cC+$en~7jWBzw^?2OwC!a?tVS%oh_hl*$N1-T|*HX&}Ycdx}y{BB}OYD}r?g9q-5obMQW@;+ZP#Ax`d z=nmGV&0YRt@O{WPJ=6*x-jtt$5A*zx;&t4e9lOUC*b=a%Ly|k5{k8C{K=T6qg>CVs z>(H|SuMc=8GDA)Zxo2+PIy zyZrn5^1dFBGvoxh!+-ch_yFHI2s$kPJ}x{m9>{)S!#I!6(WJFPyn-!(mSK#S_IJvh z&di5-Av5Gty|xdUIri8c>xbvFF2G#K{Zi9#RQku{M0^O_e9oA2=s0Z1#u3v75PK7& z<99iqyJMU^(Wj4}xp-|7zH2%DYj=!~H9#H%TJ!JNfz4w>kcETNsUOIOzb!cqIe{rA zryg7QT)JaiJ>4gB@%fl!Of&D8)@Jj>uii+H3q5DYWZB|F(BQ{~9#`f0#c|zkqKmo>e=SJ@ zo}Bx;ko$GlrD^p1*1n3yqy2NqFWc<@U!p8)bY4H(?Eh0zRTrOcN|Jw$_cimXc>m@k zxiZ>sP5x3HM*TM?jY&g(|6GzLRnh+0q+wBf{->(C?~}Ux^({%=ndG|s{`bih=i>bz zlD}?^_s=H3XtRGVNm}FnQjIRYp8dw?c^X~Y{ms>BWAyy=z@Pd4Pe}slugmQ}oLpfm zqH(5;cVCiRp8S}mtx4E#6zTr3r7k_4tg-V=+E4x_Nq!ON^&`9CFXeoGKhQhBUt{Ob z_|;-C*S98DUl|Uqv3(8Ye;YXg&p-T20}6t9JEw#XY{?X#3S%VE5au4X5aSc0bE6 zoWCmh3%ey-&#lYTGnaGVm)Y}{r)QI7R(^hZ&Y867=G=U>FA``$Wc}HGdMZikLjPf3 zkF9O9zt;E9wSa4-hmz`W{@j`C*l+Ruy^WWxtpQo9va#QHTHm?-|4gnvRhzEO z?XS7Hwy8Ec-!!YXB|5JuUEQej{ya_TPaChuU;k5eQ*EQ3*U#vYrr%XH^=tYAmzOmC zpQP!=Q%OVad`oikji;*Wa`M)atiA3#3DL~#er?!q4E#vb{}5@LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/storefront/src/App.vue b/storefront/src/App.vue index e9dfd165..82a76878 100644 --- a/storefront/src/App.vue +++ b/storefront/src/App.vue @@ -1,11 +1,21 @@ + + \ No newline at end of file diff --git a/storefront/src/components/base/base-header.vue b/storefront/src/components/base/base-header.vue deleted file mode 100644 index 7bb95a87..00000000 --- a/storefront/src/components/base/base-header.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - - - \ No newline at end of file diff --git a/storefront/src/components/base/header/base-header-catalogue.vue b/storefront/src/components/base/header/base-header-catalogue.vue new file mode 100644 index 00000000..e2bd88f2 --- /dev/null +++ b/storefront/src/components/base/header/base-header-catalogue.vue @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/storefront/src/components/base/header/base-header-search.vue b/storefront/src/components/base/header/base-header-search.vue new file mode 100644 index 00000000..0420628a --- /dev/null +++ b/storefront/src/components/base/header/base-header-search.vue @@ -0,0 +1,237 @@ + + + + + \ No newline at end of file diff --git a/storefront/src/components/base/header/base-header.vue b/storefront/src/components/base/header/base-header.vue new file mode 100644 index 00000000..e3d609a6 --- /dev/null +++ b/storefront/src/components/base/header/base-header.vue @@ -0,0 +1,129 @@ + + + + + \ No newline at end of file diff --git a/storefront/src/components/cards/product-card.vue b/storefront/src/components/cards/product-card.vue new file mode 100644 index 00000000..7c412232 --- /dev/null +++ b/storefront/src/components/cards/product-card.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/storefront/src/components/forms/deposit-form.vue b/storefront/src/components/forms/deposit-form.vue index b023fc6b..2881375a 100644 --- a/storefront/src/components/forms/deposit-form.vue +++ b/storefront/src/components/forms/deposit-form.vue @@ -30,23 +30,23 @@ import {computed, ref} from "vue"; import UiButton from "@/components/ui/ui-button.vue"; import {useI18n} from "vue-i18n"; import {useDeposit} from "@/composables/user/useDeposit.js"; +import {useCompanyStore} from "@/stores/company.js"; const {t} = useI18n() +const companyStore = useCompanyStore() + +const paymentMin = computed(() => companyStore.companyInfo?.paymentGatewayMinimum) +const paymentMax = computed(() => companyStore.companyInfo?.paymentGatewayMaximum) const amount = ref('') const isFormValid = computed(() => { return ( - amount.value >= 5 && amount.value <= 500 + amount.value >= paymentMin.value && + amount.value <= paymentMax.value ) }) -const onlyNumbersKeypress = (event) => { - if (!/\d/.test(event.key)) { - event.preventDefault(); - } -} - const { deposit, loading } = useDeposit(); async function handleDeposit() { diff --git a/storefront/src/components/forms/login-form.vue b/storefront/src/components/forms/login-form.vue index 861b22e4..ac43f455 100644 --- a/storefront/src/components/forms/login-form.vue +++ b/storefront/src/components/forms/login-form.vue @@ -1,5 +1,6 @@ @@ -35,8 +49,11 @@ import UiInput from "@/components/ui/ui-input.vue"; import UiButton from "@/components/ui/ui-button.vue"; import UiCheckbox from "@/components/ui/ui-checkbox.vue"; import {useLogin} from "@/composables/auth"; +import UiLink from "@/components/ui/ui-link.vue"; +import {useAppStore} from "@/stores/app.js"; const {t} = useI18n() +const appStore = useAppStore() const email = ref('') const password = ref('') @@ -61,5 +78,18 @@ async function handleLogin() { display: flex; flex-direction: column; gap: 20px; + + &__title { + font-size: 36px; + color: $accent; + } + + &__register { + display: flex; + align-items: center; + gap: 5px; + + font-size: 12px; + } } \ No newline at end of file diff --git a/storefront/src/components/forms/new-password-form.vue b/storefront/src/components/forms/new-password-form.vue index 07ffe618..668d1e4a 100644 --- a/storefront/src/components/forms/new-password-form.vue +++ b/storefront/src/components/forms/new-password-form.vue @@ -1,5 +1,6 @@