diff --git a/config/nam.3bear.design.json b/config/nam.3bear.design.json new file mode 100644 index 0000000..e9c9da9 --- /dev/null +++ b/config/nam.3bear.design.json @@ -0,0 +1,330 @@ +[ + { + "Header": { + "config": { + "sticky": true, + "variant": "ticker" + }, + "children": [ + { + "Banner": { + "config": { + "variant": "ticker", + "className": "h-12 bg-[#009b93] text-[#fff] gap-12", + "speed": 24, + "items": [ + { + "Link": { + "config": { + "label": "NEU: Overnight Oats – Sallys Nussecke 😍", + "href": "/" + } + } + }, + { + "Link": { + "config": { + "label": "Versandkostenfrei ab 45 € 💛", + "href": "/" + } + } + }, + { + "Link": { + "config": { + "label": "Gratis Geschenk ab 60 € Warenkorbwert 🎁", + "href": "/" + } + } + } + ] + } + } + }, + { + "Nav": { + "config": { + "className": "h-24 bg-white text-[#003F31] gap-12", + "left": [ + { + "Logo": { + "config": { + "src": "/3bear-logo.png", + "alt": "MyShop", + "className": "h-[150px] w-[180px]", + "objectFit": "contain" + } + } + }, + { + "VtMegaMenu": { + "config": { + "navLabel": { + "text": "Shop", + "className": "font-bold text-[1rem] text-[#003F31] flex items-center mr-8 gap-1 hover:text-[#009b93]", + "isShowArrow": true + } + } + } + }, + { + "Dropdown": { + "config": { + "trigger": { + "text": "Über Uns", + "className": "font-bold text-[1rem] text-[#003F31] flex items-center mr-8 gap-1 hover:text-[#009b93]", + "isShowArrow": true + }, + "items": [ + { + "text": "Unser Unternehmen", + "href": "/" + }, + { + "text": "Loren ipsum", + "href": "/" + }, + { + "text": "Not a Link" + } + ] + } + } + }, + { + "Dropdown": { + "config": { + "trigger": { + "text": "Über unsere Produkte", + "className": "font-bold text-[1rem] text-[#003F31] flex items-center mr-8 gap-1 hover:text-[#009b93]", + "isShowArrow": true + }, + "items": [ + { + "text": "Unser Unternehmen", + "href": "/" + }, + { + "text": "Loren ipsum", + "href": "/" + }, + { + "text": "Not a Link" + } + ] + } + } + }, + { + "Link": { + "config": { + "label": "Rezepte", + "href": "/", + "className": "font-bold text-[1rem] text-[#003F31] flex items-center mr-8 gap-1 hover:text-[#009b93]" + } + } + }, + { + "Link": { + "config": { + "label": "Triff Harry Kane", + "href": "/", + "className": "font-bold text-[1rem] text-[#003F31] flex items-center gap-1 hover:text-[#009b93]" + } + } + } + ], + "right": [ + { + "VtCountryCodeSelect": { + "config": { + "trigger": { + "className": "w-auto font-bold text-[13px] text-[#11314E] flex justify-start items-center gap-1 hover:text-[#009b93] bg-transparent shadow-none hover:bg-transparent", + "isFlag": true, + "isDisplayFullname": true + } + } + } + }, + { + "Button": { + "config": { + "icon": "MagnifyingGlass", + "className": "shadow-none" + } + } + }, + { + "AccountButton": { + "config": { + "icon": "User", + "className": " flex items-center gap-1 shadow-none" + } + } + }, + { + "VtCartButton": { + "config": { + "icon": "ShoppingBag", + "className": "shadow-none bg-transparent text-black w-[50px]" + } + } + } + ] + } + } + } + ] + } + }, + { + "CartMismatchBanner": { + "config": { + "show": true + } + } + }, + { + "FreeShippingPriceNudge": { + "config": { + "variant": "popup" + } + } + }, + { + "PropsChildren": {} + }, + { + "Footer": { + "config": { + "className": "content-container border-none flex w-full bg-[#003f31] text-white border justify-between pb-8 pt-14", + "leftClassName": "flex-col ml-3", + "centerClassName": "", + "rightClassName": "flex gap-[10rem] mr-[80px]", + "left": [ + { + "VtFooterHero": { + "config": { + "logoClassName": "h-[100px] w-[200px]", + "logoSrc": "/3bear-white-logo.avif", + "logoAlt": "3Bear", + "title": "Melde dich für unsere Oatnews an 💛", + "email": { + "emailInputClassName": "w-[300px] ml-8" + }, + "socials": [ + { "icon": "Twitter", "href": "/", "className": "w-5 h-5 text-white" }, + { "icon": "Twitter", "href": "/", "className": "w-5 h-5 text-white" }, + { "icon": "Twitter", "href": "/", "className": "w-5 h-5 text-white" }, + { "icon": "Twitter", "href": "/", "className": "w-5 h-5 text-white" } + ], + "socialsClassName": "ml-8 mt-10", + "className": "", + "ctaClassName": "ml-8", + "titleClassName": "ml-8 text-white w-full", + "descriptionClassName": "ml-8" + } + } + } + ], + "center": [], + "right": [ + { + "VtMenuItem": { + "config": { + "title": "Information", + "className": "flex flex-col gap-y-2 text-[24px] font-semibold text-white hover:text-white", + "itemClassName": "text-[1rem] font-[400] opacity-70 hover:text-white", + "items": [ + { + "text": "Über Uns", + "href": "/" + }, + { + "text": "Placeholder", + "href": "/categories/shoes" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + } + ] + } + } + }, + { + "VtMenuItem": { + "config": { + "title": "Kundendienst", + "className": "flex flex-col gap-y-2 text-[24px] font-semibold text-white hover:text-white", + "itemClassName": "text-[1rem] font-[400] flex items-center opacity-70 hover:text-white", + "items": [ + { + "text": "Twitter", + "href": "/" + }, + { + "text": "Facebook", + "href": "/categories/shoes" + }, + { + "text": "Pinterest", + "href": "/categories/accessories" + } + ] + } + } + }, + { + "VtMenuItem": { + "config": { + "title": "Weiteres", + "className": "flex flex-col gap-y-2 text-[24px] font-semibold text-white", + "itemClassName": "text-[1rem] font-[400] w-[150px] opacity-70 hover:text-white", + "items": [ + { + "text": "Karriere", + "href": "/" + }, + { + "text": "Unser Team", + "href": "/categories/shoes" + }, + { + "text": "B2B", + "href": "/categories/accessories" + }, + { + "text": "Presse", + "href": "/categories/accessories" + } + ] + } + } + } + ] + } + } + }, + { + "Footer": { + "config": { + "className": "content-container bg-[#003f31] w-full text text-[#11314E] flex items-center justify-between", + "leftClassName": "w-full", + "left": [ + ], + "center": [], + "right": [ + { + "VtFooterBottom": { + "config": { + "className": " mr-[80px]", + "icons": ["Mastercard", "PayPal", "Visa", "Mastercard","Mastercard","Mastercard","Mastercard"] + } + } + } + ] + } + } + } +] diff --git a/config/nam.drsquatch.design.json b/config/nam.drsquatch.design.json new file mode 100644 index 0000000..bcc4e8f --- /dev/null +++ b/config/nam.drsquatch.design.json @@ -0,0 +1,315 @@ +[ + { + "Header": { + "config": { + "sticky": true + }, + "children": [ + { + "Banner": { + "config": { + "variant": "nav", + "className": "h-12 bg-[#e6c981] text-black gap-12", + "center": [ + { + "Link": { + "config": { + "label": "BLACK FRIDAY", + "href": "/", + "className": "font-bold text-[1rem] flex items-center gap-1" + } + } + }, + { + "Link": { + "config": { + "label": "Up to 55% off Bundles", + "href": "/", + "className": "text-[1rem] flex items-center gap-1" + } + } + }, + { + "Link": { + "config": { + "label": "SHOP NOW", + "href": "/", + "className": "font-bold text-[1rem] flex items-center gap-1 underline" + } + } + } + ] + } + } + }, + { + "Nav": { + "config": { + "className": "h-24 bg-[#1f3521] text-white gap-12", + "left": [ + { + "Logo": { + "config": { + "src": "/drsquatch-logo.webp", + "alt": "MyShop", + "className": "h-auto w-40 mr-24", + "objectFit": "contain" + } + } + }, + { + "Link": { + "config": { + "label": "SUBCRIBE", + "href": "/", + "className": "font-bold text-[1rem] text-white flex items-center mr-8 gap-1 hover:underline hover:text-white" + } + } + }, + { + "Link": { + "config": { + "label": "REWARD", + "href": "/", + "className": "font-bold text-[1rem] text-white flex items-center mr-8 gap-1 hover:underline hover:text-white" + } + } + }, + { + "VtMegaMenu": { + "config": { + "navLabel": { + "text": "SHOP", + "className": "font-bold text-[1rem] flex items-center mr-8 gap-1 hover:bg-transparent hover:underline hover:text-white" + } + } + } + }, + { + "VtMegaMenu": { + "config": { + "navLabel": { + "text": "OUR STORY", + "className": "font-bold text-[1rem] text-white flex items-center hover:bg-transparent hover:underline hover:text-white" + } + } + } + } + ], + "right": [ + { + "VtCountryCodeSelect": { + "config": { + "trigger": { + "className": "w-auto font-bold text-[13px] text-white flex justify-start items-center gap-1 hover:text-[#009b93] bg-transparent shadow-none hover:bg-transparent", + "isFlag": true + } + } + } + }, + { + "Button": { + "config": { + "icon": "User", + "className": "shadow-none bg-transparent text-white hover:text-black" + } + } + }, + { + "VtCartButton": { + "config": { + "icon": "ShoppingCart", + "className": "shadow-none bg-transparent text-black w-[50px]" + } + } + } + ] + } + } + } + ] + } + }, + { + "CartMismatchBanner": { + "config": { + "show": true + } + } + }, + { + "FreeShippingPriceNudge": { + "config": { + "variant": "popup" + } + } + }, + { + "PropsChildren": {} + }, + { + "Footer": { + "config": { + "className": "content-container border-none bg-[#1f3621] flex w-full border justify-between pb-8 gap-10 pt-16 px-[120px]", + "leftClassName": "flex ml-6 gap-x-24", + "centerClassName": "flex", + "rightClassName": "flex", + "left": [ + { + "VtMenuItem": { + "config": { + "title": "Help", + "className": "flex flex-col gap-y-2 text-[16px] font-semibold text-white gap-8", + "itemClassName": "text-[14px] font-[400] mt-3", + "items": [ + { + "text": "FAQ", + "href": "/" + }, + { + "text": "Track my order", + "href": "/categories/shoes" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + } + ] + } + } + }, + { + "VtMenuItem": { + "config": { + "title": "Shop", + "className": "flex flex-col gap-y-2 text-[16px] font-semibold text-white", + "itemClassName": "text-[14px] font-[400] flex items-center mt-3", + "items": [ + { + "text": "Twitter", + "href": "/" + }, + { + "text": "Facebook", + "href": "/categories/shoes" + }, + { + "text": "Pinterest", + "href": "/categories/accessories" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + } + ] + } + } + }, + { + "VtMenuItem": { + "config": { + "title": "Info", + "className": "flex flex-col gap-y-2 text-[16px] font-semibold text-white", + "itemClassName": "text-[14px] font-[400] w-[200px] mt-3", + "items": [ + { + "text": "The Squatch Difference", + "href": "/" + }, + { + "text": "Why Natural Products", + "href": "/categories/shoes" + }, + { + "text": "No Harmful Ingredients", + "href": "/categories/accessories" + } + ] + } + } + } + ], + "center": [ + { + "Logo": { + "config": { + "src": "/b-corp-logo.webp", + "alt": "MyShop", + "className": "h-auto w-[90px] mr-24", + "objectFit": "contain" + } + } + } + ], + "right": [ + { + "VtFooterSignUp": { + "config": { + "title": "Don't miss out on hot deals! Sign up and get up to 30% off.", + "className": "max-w-[760px]", + "titleClassName": "text-white text-[18px]", + "formClassName": "mt-2 w-full", + "inputClassName": "w-full", + "buttonClassName": "bg-[#C4622C] w-[90px]", + "socialsClassName": "mt-4 gap-8", + "socials": [ + { "icon": "Twitter", "href": "/", "className": "w-5 h-5 text-white" }, + { "icon": "Twitter", "href": "/", "className": "w-5 h-5 text-white" }, + { "icon": "Twitter", "href": "/", "className": "w-5 h-5 text-white" }, + { "icon": "Twitter", "href": "/", "className": "w-5 h-5 text-white" } + ] + } + } + } + ] + } + } + }, + { + "VtFooterBottom": { + "config": { + "className": "text-white text-[14px] font-[400] bg-[#1f3621] flex items-center justify-center", + "text": "©2025 Vibentec IT. All rights reserved", + "linksClassName": "flex items-center text-orange-500 mt-2 pl-2", + "links": [ + { + "label": "Privacy Policy", + "href": "/" + }, + { + "label": "Terms of Service", + "href": "/categories/shoes" + }, + { + "label": "Cookie Policy", + "href": "/categories/accessories" + } + ] + } + } + } +] diff --git a/config/nam.mds-starter-design.json b/config/nam.mds-starter-design.json new file mode 100644 index 0000000..51affdf --- /dev/null +++ b/config/nam.mds-starter-design.json @@ -0,0 +1,228 @@ +[ + { + "Header": { + "config": { + "sticky": true + }, + "children": [ + { + "Banner": { + "config": { + "variant": "nav", + "className": "h-12 bg-[#E6EFFC] text-[#11314E] gap-12 pl-16", + "left": [ + { + "Link": { + "config": { + "label": "Über Uns", + "href": "/", + "className": "text-[13px] flex items-center gap-1 cursor-pointer" + } + } + }, + { + "Link": { + "config": { + "label": "Kontaktieren Uns", + "href": "/", + "className": "text-[13px] flex items-center gap-1" + } + } + } + ], + "center": [ + { + "Link": { + "config": { + "label": "Einsparung durch Digitalisierung in der Arztpraxis", + "href": "/", + "className": "text-[13px] flex items-center gap-1 " + } + } + }, + { + "Button": { + "config": { + "label": "Mehr Info", + "href": "/", + "className": "text-[13px] flex items-center bg-[#112638] gap-1 " + } + } + } + ], + "right": [ + { + "Dropdown": { + "config": { + "trigger": { + "text": "EURO", + "className": "font-bold text-[13px] text-[#11314E] flex items-center gap-1 hover:text-[#009b93]", + "isShowArrow": true + }, + "items": [ + { + "icon": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Flag_of_Germany.svg/1200px-Flag_of_Germany.svg.png", + "text": "EURO", + "href": "/" + } + ] + } + } + }, + { + "VtCountryCodeSelect": { + "config": { + "trigger": { + "className": "w-auto font-bold text-[13px] text-[#11314E] flex justify-start items-center gap-1 hover:text-[#009b93] bg-transparent shadow-none hover:bg-transparent", + "isFlag": false + } + } + } + } + ] + } + } + }, + { + "Nav": { + "config": { + "left": [ + { + "VtSideMenu": {} + }, + { + "VtMegaMenu": { + "config": { + "navLabel": { + "text": "Sale", + "className": "text-[13px] text-[#11314E] flex items-center mr-8 gap-1 hover:bg-transparent hover:underline hover:text-[#009b93]" + } + } + } + } + ], + "center": [ + { + "HomeButton": { + "config": { + "label": "Medusa Store" + } + } + } + ], + "right": [ + { + "AccountButton": { + "config": { + "label": "Account", + "className": "hover:text-ui-fg-base" + } + } + }, + { + "VtCartButton": { + "config": { + "variant": "link", + "className": "hover:text-ui-fg-base" + } + } + } + ] + } + } + } + ] + } + }, + { + "Hero": { + "config": { + "variant": "default" + } + } + }, + { + "CartMismatchBanner": { + "config": { + "show": true + } + } + }, + { + "FreeShippingPriceNudge": { + "config": { + "variant": "popup" + } + } + }, + { + "PropsChildren": {} + }, + { + "Footer": { + "config": { + "className": "content-container flex w-full border h-[300px] justify-between", + "left": [ + { + "VtMenuItem": { + "config": { + "title": "category", + "className": "flex flex-col gap-y-2", + "itemClassName": "text-ui-fg-subtle txt-small ml-3", + "items": [ + { + "text": "Clothing", + "href": "/" + }, + { + "text": "Shoes", + "href": "/categories/shoes" + }, + { + "text": "Accessories", + "href": "/categories/accessories" + } + ] + } + } + } + ], + "center": [ + { + "VtMenuItem": { + "config": { + "title": "category", + "className": "flex flex-col gap-y-2", + "itemClassName": "text-ui-fg-subtle txt-small ml-3", + "items": [ + { + "text": "Clothing", + "href": "/" + }, + { + "text": "Shoes", + "href": "/categories/shoes" + }, + { + "text": "Accessories", + "href": "/categories/accessories" + } + ] + } + } + } + ], + "right": [ + { + "Text": { + "config": { + "label": "Medusa Check", + "className": "text-[13px] text-[#A6A6A6]" + } + } + } + ] + } + } + } +] diff --git a/config/nam.vibentec.design.json b/config/nam.vibentec.design.json new file mode 100644 index 0000000..9b853d4 --- /dev/null +++ b/config/nam.vibentec.design.json @@ -0,0 +1,349 @@ +[ + { + "Header": { + "config": { + "sticky": true + }, + "children": [ + { + "Banner": { + "config": { + "variant": "nav", + "className": "h-12 bg-[#E6EFFC] text-[#11314E] gap-12 pl-16", + "left": [ + { + "Link": { + "config": { + "label": "Über Uns", + "href": "/", + "className": "text-[13px] flex items-center gap-1 cursor-pointer" + } + } + }, + { + "Link": { + "config": { + "label": "Kontaktieren Uns", + "href": "/", + "className": "text-[13px] flex items-center gap-1" + } + } + } + ], + "center": [ + { + "Link": { + "config": { + "label": "Einsparung durch Digitalisierung in der Arztpraxis", + "href": "/", + "className": "text-[13px] flex items-center gap-1 " + } + } + }, + { + "Link": { + "config": { + "label": "Mehr Info", + "href": "/", + "className": "text-[13px] rounded-md hover:text-white w-[80px] text-white text-center flex items-center bg-[#112638] flex justify-center h-[28px] " + } + } + } + ], + "right": [ + { + "Dropdown": { + "config": { + "trigger": { + "text": "EURO", + "className": "font-bold text-[13px] text-[#11314E] flex items-center gap-1 hover:text-[#009b93]", + "isShowArrow": true + }, + "items": [ + { + "icon": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Flag_of_Germany.svg/1200px-Flag_of_Germany.svg.png", + "text": "EURO", + "href": "/" + } + ] + } + } + }, + { + "VtCountryCodeSelect": { + "config": { + "trigger": { + "className": "w-auto font-bold text-[13px] text-[#11314E] flex justify-start items-center gap-1 hover:text-[#009b93] bg-transparent shadow-none hover:bg-transparent", + "isFlag": false + } + } + } + } + ] + } + } + }, + { + "Nav": { + "config": { + "className": "h-24 bg-[white] text-[#11314E] gap-12 pl-16", + "left": [ + { + "Logo": { + "config": { + "src": "/VibentecIT-logo.svg", + "alt": "MyShop", + "className": "h-full w-[180px] mr-4", + "objectFit": "contain" + } + } + }, + { + "Link": { + "config": { + "label": "Home", + "href": "/", + "className": "text-[13px] text-[#11314E] flex items-center mr-8 gap-1 hover:underline hover:text-[#009b93]" + } + } + }, + { + "Link": { + "config": { + "label": "Shop", + "href": "/", + "className": "text-[13px] text-[#11314E] flex items-center mr-6 gap-1 hover:underline hover:text-[#009b93]" + } + } + }, + { + "VtMegaMenu": { + "config": { + "navLabel": { + "text": "Sale", + "className": "text-[13px] text-[#11314E] flex items-center mr-8 gap-1 hover:bg-transparent hover:underline hover:text-[#009b93]" + } + } + } + }, + { + "VtMegaMenu": { + "config": { + "navLabel": { + "text": "OUR STORY", + "className": "font-bold text-[1rem] text-white flex items-center mr-8 gap-1 hover:bg-transparent hover:underline hover:text-white" + } + } + } + } + ], + "right": [ + { + "SearchInput": { + "config": { + "placeholder": "Search" + } + } + }, + { + "AccountButton": { + "config": { + "icon": "User", + "className": " flex items-center gap-1 shadow-none" + } + } + }, + { + "Button": { + "config": { + "icon": "Heart", + "className": " flex items-center gap-1 shadow-none w-[50px]" + } + } + }, + { + "VtCartButton": { + "config": { + "icon": "ShoppingCart", + "className": "shadow-none bg-transparent text-black w-[50px]" + } + } + } + ] + } + } + } + ] + } + }, + { + "Hero": { + "config": { + "variant": "vibentec", + "text": "alo", + "className": "bg-custom-gradient" + } + } + }, + { + "CartMismatchBanner": { + "config": { + "show": true + } + } + }, + { + "FreeShippingPriceNudge": { + "config": { + "variant": "popup" + } + } + }, + { + "PropsChildren": {} + }, + { + "Footer": { + "config": { + "className": "content-container flex w-full border justify-between pb-8", + "leftClassName": "flex-col ml-6", + "centerClassName": "flex mt-[130px] gap-24", + "rightClassName": "flex mt-[160px]", + "left": [ + { + "VtFooterHero": { + "config": { + "logoClassName": "h-[100px] w-[255px]", + "logoSrc": "/VibentecIT-logo.svg", + "logoAlt": "Vibentec IT", + "title": "Der Wegbereiter für innovative IT-Lösungen", + "description": "Tauchen Sie ein in eine Welt modernster Technologien, zuverlässiger Support und proaktiver Innovation – gemeinsam gestalten wir die digitale Zukunft Ihres Unternehmens.", + "cta": { "label": "Kontaktieren Sie uns", "href": "/" }, + "className": "", + "ctaClassName": "ml-8", + "titleClassName": "ml-8", + "descriptionClassName": "ml-8 w-[320px]" + } + } + } + ], + "center": [ + { + "VtMenuItem": { + "config": { + "title": "Unternehmen", + "className": "flex flex-col gap-y-2 text-[24px] font-semibold text-[#11314E]", + "itemClassName": "text-[1rem] font-[400]", + "items": [ + { + "text": "Über Uns", + "href": "/" + }, + { + "text": "Placeholder", + "href": "/categories/shoes" + }, + { + "text": "Placeholder", + "href": "/categories/accessories" + } + ] + } + } + }, + { + "VtMenuItem": { + "config": { + "title": "Social Media", + "className": "flex flex-col gap-y-2 text-[24px] font-semibold text-[#11314E]", + "itemClassName": "text-[1rem] font-[400] flex items-center", + "items": [ + { + "text": "Twitter", + "href": "/", + "icon": "X" + }, + { + "text": "Facebook", + "href": "/categories/shoes", + "icon": "X" + }, + { + "text": "Pinterest", + "href": "/categories/accessories", + "icon": "X" + } + ] + } + } + }, + { + "VtMenuItem": { + "config": { + "title": "Addresse", + "className": "flex flex-col gap-y-2 text-[24px] font-semibold text-[#11314E]", + "itemClassName": "text-[1rem] font-[400] w-[150px]", + "items": [ + { + "text": "Hopfenstr. 10c76185 Karlsruhe Deutschland", + "href": "/" + }, + { + "text": "+497271 5970098", + "href": "/categories/shoes" + }, + { + "text": "info@vibentec-it.io", + "href": "/categories/accessories" + } + ] + } + } + } + ], + "right": [ + { + "VtMenuItem": { + "config": { + "className": "flex flex-col gap-y-2 text-[24px] font-semibold text-[#11314E]", + "itemClassName": "text-[1rem] font-[400] w-[150px]", + "items": [ + { + "text": "Datenschutz", + "href": "/" + }, + { + "text": "Impressum", + "href": "/categories/shoes" + }, + { + "text": "Installation Info", + "href": "/categories/accessories" + } + ] + } + } + } + ] + } + } + }, + { + "Footer": { + "config": { + "className": "content-container h-[128px] w-full text text-[#11314E] flex items-center justify-between px-20 mt-2", + "leftClassName": "w-full", + "left": [ + { + "VtFooterBottom": { + "config": { + "text": "©2025 Vibentec IT. All rights reserved", + "icons": ["Mastercard", "PayPal", "Visa"] + } + } + } + ] + } + } + } +] diff --git a/public/3bear-logo.png b/public/3bear-logo.png new file mode 100644 index 0000000..f74c9f7 Binary files /dev/null and b/public/3bear-logo.png differ diff --git a/public/3bear-white-logo.avif b/public/3bear-white-logo.avif new file mode 100644 index 0000000..910ac13 Binary files /dev/null and b/public/3bear-white-logo.avif differ diff --git a/public/VibentecIT-logo.svg b/public/VibentecIT-logo.svg new file mode 100644 index 0000000..a1efe53 --- /dev/null +++ b/public/VibentecIT-logo.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/b-corp-logo.webp b/public/b-corp-logo.webp new file mode 100644 index 0000000..c5c6b27 Binary files /dev/null and b/public/b-corp-logo.webp differ diff --git a/public/drsquatch-logo.webp b/public/drsquatch-logo.webp new file mode 100644 index 0000000..11ae0eb Binary files /dev/null and b/public/drsquatch-logo.webp differ diff --git a/public/vibentec-img-banner.png b/public/vibentec-img-banner.png new file mode 100644 index 0000000..e1983f2 Binary files /dev/null and b/public/vibentec-img-banner.png differ diff --git a/src/app/[countryCode]/(main)/page.tsx b/src/app/[countryCode]/(main)/page.tsx index 16cc61e..5591710 100644 --- a/src/app/[countryCode]/(main)/page.tsx +++ b/src/app/[countryCode]/(main)/page.tsx @@ -30,7 +30,7 @@ export default async function Home(props: { return ( <> - + {/* */}
    diff --git a/src/modules/common/icons/index.ts b/src/modules/common/icons/index.ts new file mode 100644 index 0000000..580d7f0 --- /dev/null +++ b/src/modules/common/icons/index.ts @@ -0,0 +1,19 @@ +export { default as Back } from "./back" +export { default as Bancontact } from "./bancontact" +export { default as ChevronDown } from "./chevron-down" +export { default as Eye } from "./eye" +export { default as EyeOff } from "./eye-off" +export { default as FastDelivery } from "./fast-delivery" +export { default as Ideal } from "./ideal" +export { default as MapPin } from "./map-pin" +export { default as Medusa } from "./medusa" +export { default as Nextjs } from "./nextjs" +export { default as Package } from "./package" +export { default as PayPal } from "./paypal" +export { default as PlaceholderImage } from "./placeholder-image" +export { default as Refresh } from "./refresh" +export { default as Spinner } from "./spinner" +export { default as Trash } from "./trash" +export { default as User } from "./user" +export { default as X } from "./x" +export { default as Twitter } from "./twitter" \ No newline at end of file diff --git a/src/modules/common/icons/twitter.tsx b/src/modules/common/icons/twitter.tsx new file mode 100644 index 0000000..94340c5 --- /dev/null +++ b/src/modules/common/icons/twitter.tsx @@ -0,0 +1,27 @@ +import React from "react" + +import { IconProps } from "types/icon" + +const Twitter: React.FC = ({ + size = "20", + color = "currentColor", + ...attributes +}) => { + return ( + + + + ) +} + +export default Twitter \ No newline at end of file diff --git a/src/modules/layout/components/cart-button/index.tsx b/src/modules/layout/components/cart-button/index.tsx index 4d5bbd5..c79bf68 100644 --- a/src/modules/layout/components/cart-button/index.tsx +++ b/src/modules/layout/components/cart-button/index.tsx @@ -1,8 +1,8 @@ import { retrieveCart } from "@lib/data/cart" import CartDropdown from "../cart-dropdown" -export default async function CartButton() { +export default async function CartButton({ iconName }: { iconName?: string }) { const cart = await retrieveCart().catch(() => null) - return + return } diff --git a/src/modules/layout/components/cart-dropdown/index.tsx b/src/modules/layout/components/cart-dropdown/index.tsx index 304b2fe..ef5b6b9 100644 --- a/src/modules/layout/components/cart-dropdown/index.tsx +++ b/src/modules/layout/components/cart-dropdown/index.tsx @@ -9,6 +9,7 @@ import { import { convertToLocale } from "@lib/util/money" import { HttpTypes } from "@medusajs/types" import { Button } from "@medusajs/ui" +import * as MedusaIcons from "@medusajs/icons" import DeleteButton from "@modules/common/components/delete-button" import LineItemOptions from "@modules/common/components/line-item-options" import LineItemPrice from "@modules/common/components/line-item-price" @@ -19,8 +20,10 @@ import { Fragment, useEffect, useRef, useState } from "react" const CartDropdown = ({ cart: cartState, + iconName, }: { cart?: HttpTypes.StoreCart | null + iconName?: string }) => { const [activeTimer, setActiveTimer] = useState( undefined @@ -73,6 +76,10 @@ const CartDropdown = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [totalItems, itemRef.current]) + const Icon = iconName + ? (MedusaIcons as Record>)[iconName] + : undefined + return (
    - {`Cart (${totalItems})`} + {Icon ? ( + + ) : ( + {`Cart (${totalItems})`} + )} { +import * as MedusaIcons from "@medusajs/icons" +export const AccountButton = ({ + nodes, + context, +}: { + nodes: LayoutComponentDefinition + context: LayoutContext +}) => { const props = nodes.config ?? {} - const className = clx("hover:text-ui-fg-base", props.className); - const style: React.CSSProperties = {}; - if (props.bgColor) style.backgroundColor = props.bgColor; - if (props.textColor) style.color = props.textColor; + const className = clx("hover:text-ui-fg-base", props.className) + const style: React.CSSProperties = {} + if (props.bgColor) style.backgroundColor = props.bgColor + if (props.textColor) style.color = props.textColor const href = props.href ?? "/account" const label = props.label ?? "Account" - + const iconName = props.icon + const Icon = iconName + ? (MedusaIcons as Record>)[iconName] + : undefined return ( -
    +
    - {label} + {Icon ? : label} -
    +
    ) } -export default AccountButton \ No newline at end of file +export default AccountButton diff --git a/src/modules/layout/components/vt-cartbutton/index.tsx b/src/modules/layout/components/vt-cartbutton/index.tsx index d9ab53f..cb6a8f2 100644 --- a/src/modules/layout/components/vt-cartbutton/index.tsx +++ b/src/modules/layout/components/vt-cartbutton/index.tsx @@ -1,13 +1,21 @@ import LocalizedClientLink from "@modules/common/components/localized-client-link" -import { LayoutComponentDefinition, LayoutContext } from "vibentec/component-map"; +import { + LayoutComponentDefinition, + LayoutContext, +} from "vibentec/component-map" import { clx } from "@medusajs/ui" -import { Suspense } from "react"; -import CartButton from "@modules/layout/components/cart-button"; - -export const VtCartButton = ({ nodes, context }: { nodes: LayoutComponentDefinition; context: LayoutContext }) => { +import { Suspense } from "react" +import CartButton from "@modules/layout/components/cart-button" + +export const VtCartButton = ({ + nodes, + context, +}: { + nodes: LayoutComponentDefinition + context: LayoutContext +}) => { const props = nodes.config ?? {} const className = clx("hover:text-ui-fg-base flex gap-2", props.className) - return ( } > - + ) } -export default VtCartButton \ No newline at end of file +export default VtCartButton diff --git a/src/modules/layout/components/vt-mega-menu/index.tsx b/src/modules/layout/components/vt-mega-menu/index.tsx index a8f84db..8d55318 100644 --- a/src/modules/layout/components/vt-mega-menu/index.tsx +++ b/src/modules/layout/components/vt-mega-menu/index.tsx @@ -1,19 +1,34 @@ -import { LayoutComponentDefinition, LayoutContext } from "vibentec/component-map"; -import React, { Suspense } from "react"; -import SkeletonMegaMenu from "@modules/skeletons/components/vt-skeleton-mega-menu"; -import MegaMenuWrapper from "@modules/layout/components/vt-mega-menu/mega-menu-wrapper"; +import { + LayoutComponentDefinition, + LayoutContext, +} from "vibentec/component-map" +import React, { Suspense } from "react" +import SkeletonMegaMenu from "@modules/skeletons/components/vt-skeleton-mega-menu" +import MegaMenuWrapper from "@modules/layout/components/vt-mega-menu/mega-menu-wrapper" -export default function VtMegaMenu({ nodes, context }: { nodes: LayoutComponentDefinition; context: LayoutContext }) { +interface MegaMenuProps { + navLabel: { + text: string + className?: string + } +} +export default function VtMegaMenu({ + nodes, + context, +}: { + nodes: LayoutComponentDefinition + context: LayoutContext +}) { + const { navLabel } = nodes.config as MegaMenuProps ?? {} return ( ) } - diff --git a/src/modules/layout/components/vt-mega-menu/mega-menu-wrapper.tsx b/src/modules/layout/components/vt-mega-menu/mega-menu-wrapper.tsx index 328e9c7..a0d66dc 100644 --- a/src/modules/layout/components/vt-mega-menu/mega-menu-wrapper.tsx +++ b/src/modules/layout/components/vt-mega-menu/mega-menu-wrapper.tsx @@ -1,10 +1,12 @@ import { listCategories } from "@lib/data/categories" import MegaMenu from "./mega-menu" -export async function MegaMenuWrapper() { + + +export async function MegaMenuWrapper({ navLabel }: { navLabel: { text: string; className?: string } }) { const categories = await listCategories().catch(() => []) - return + return } export default MegaMenuWrapper diff --git a/src/modules/layout/components/vt-mega-menu/mega-menu.tsx b/src/modules/layout/components/vt-mega-menu/mega-menu.tsx index 50e2dd1..a4b9944 100644 --- a/src/modules/layout/components/vt-mega-menu/mega-menu.tsx +++ b/src/modules/layout/components/vt-mega-menu/mega-menu.tsx @@ -3,12 +3,16 @@ import { HttpTypes } from "@medusajs/types" import { clx } from "@medusajs/ui" import LocalizedClientLink from "@modules/common/components/localized-client-link" +import ChevronDown from "@modules/common/icons/chevron-down" import { usePathname } from "next/navigation" import { useEffect, useState } from "react" + const MegaMenu = ({ + navLabel, categories, }: { + navLabel: { text: string; className?: string, isShowArrow?: boolean }, categories: HttpTypes.StoreProductCategory[] }) => { const [isHovered, setIsHovered] = useState(false) @@ -81,10 +85,13 @@ const MegaMenu = ({ className="z-50" > - Products + {navLabel?.text ?? "Product"} {navLabel?.isShowArrow && } {isHovered && (
    @@ -94,7 +101,7 @@ const MegaMenu = ({ key={category.id} href={`/categories/${category.handle}`} className={clx( - "hover:bg-neutral-100 hover:cursor-pointer rounded-full px-3 py-2 w-fit font-medium", + "hover:bg-neutral-100 text-black hover:cursor-pointer rounded-full px-3 py-2 w-fit font-medium", selectedCategory === category.id && "bg-neutral-100" )} onMouseEnter={() => handleCategoryHover(category.id)} diff --git a/src/modules/layout/templates/hero/hero-default.tsx b/src/modules/layout/templates/hero/hero-default.tsx new file mode 100644 index 0000000..0944408 --- /dev/null +++ b/src/modules/layout/templates/hero/hero-default.tsx @@ -0,0 +1,31 @@ +import { Github } from "@medusajs/icons" +import { Button, Heading } from "@medusajs/ui" +export default function HeroDefault() { + return ( +
    + + + Ecommerce Starter Template + + + Powered by Medusa and Next.js + + + + + +
    + ) +} diff --git a/src/modules/layout/templates/hero/hero-vibentec.tsx b/src/modules/layout/templates/hero/hero-vibentec.tsx new file mode 100644 index 0000000..6d00f92 --- /dev/null +++ b/src/modules/layout/templates/hero/hero-vibentec.tsx @@ -0,0 +1,48 @@ +import { Github } from "@medusajs/icons" +import { Button, clx, Heading } from "@medusajs/ui" +import { + LayoutComponentDefinition, + LayoutContext, +} from "@vibentec/component-map" + +interface Props { + node: LayoutComponentDefinition + context: LayoutContext +} +const HeroVibentec = ({ node, context }: Props) => { + const props = node.config ?? {} + return ( +
    + + + {props.text ?? "Ecommerce Starter Template Vibentec"} + + + Powered by Medusa and Next.js + + + + + +
    + ) +} + +export default HeroVibentec diff --git a/src/modules/layout/templates/hero/index.tsx b/src/modules/layout/templates/hero/index.tsx new file mode 100644 index 0000000..64ccad9 --- /dev/null +++ b/src/modules/layout/templates/hero/index.tsx @@ -0,0 +1,40 @@ +import { + LayoutComponentDefinition, + LayoutContext, +} from "vibentec/component-map" +import { clx } from "@medusajs/ui" +import BannerHeroVibentec from "../hero/hero-vibentec" +import BannerHeroDefault from "../hero/hero-default" + +interface BannerProps { + variant: "vibentec" | "default" + className?: string + speed?: number +} +export default async function Hero({ + nodes, + context, +}: { + nodes: LayoutComponentDefinition + context: LayoutContext +}) { + const props = (nodes.config as BannerProps) ?? {} + const heroClassName = clx( + "h-[75vh] w-full border-b border-ui-border-base relative bg-ui-bg-subtle", + props.className + ) + if (!props.variant) return null + + const variants = { + vibentec: BannerHeroVibentec, + default: BannerHeroDefault + } + + const Component = variants[props.variant] + + return ( +
    + +
    + ) +} diff --git a/src/modules/layout/templates/vt-banner/banner-nav.tsx b/src/modules/layout/templates/vt-banner/banner-nav.tsx index 361e8be..54f17c0 100644 --- a/src/modules/layout/templates/vt-banner/banner-nav.tsx +++ b/src/modules/layout/templates/vt-banner/banner-nav.tsx @@ -10,14 +10,14 @@ export default function BannerNav({ node, context }: { node: LayoutComponentDefi const props = node.config as BannerNavProps ?? {}; return ( -