@@ -37,4 +45,4 @@ function LinkButtonWithOptionArrow( {telephone, activeArrow, width}:Props ){
)
}
-export default LinkButtonWithOptionArrow;
\ No newline at end of file
+export default LinkTelephoneWithOptionArrow;
\ No newline at end of file
diff --git a/components/ui/LinkWithOptionArrow.tsx b/components/ui/LinkWithOptionArrow.tsx
new file mode 100644
index 0000000..b234664
--- /dev/null
+++ b/components/ui/LinkWithOptionArrow.tsx
@@ -0,0 +1,56 @@
+import { clx } from "$store/sdk/clx.ts";
+
+interface Props{
+ text?:string;
+ link?: string | undefined;
+ activeArrow?: boolean;
+ width?: string;
+ customClass?:string;
+ fontSize?:string;
+ margin?:string;
+ activeArrowBlue?:boolean;
+}
+
+function LinkWithOptionArrow( {text, link, activeArrow, width, customClass, fontSize, margin, activeArrowBlue}:Props ){
+
+ return(
+
+
+ {text ? text : ''}
+
+ {activeArrow && (
+
+ )}
+
+ {activeArrowBlue && (
+
+ )}
+
+ )
+}
+
+export default LinkWithOptionArrow;
\ No newline at end of file
diff --git a/components/ui/Slider.tsx b/components/ui/Slider.tsx
index c0854af..b56c44a 100644
--- a/components/ui/Slider.tsx
+++ b/components/ui/Slider.tsx
@@ -1,14 +1,15 @@
import type { ComponentChildren, JSX } from "preact";
-function Dot({ index, children }: {
+function Dot({ index, classes, children }: {
index: number;
+ classes?:string;
children: ComponentChildren;
}) {
return (
diff --git a/fresh.gen.ts b/fresh.gen.ts
index 3f7d0a3..5d46c35 100644
--- a/fresh.gen.ts
+++ b/fresh.gen.ts
@@ -9,6 +9,7 @@ import * as $AddToCartButton_shopify from "./islands/AddToCartButton/shopify.tsx
import * as $AddToCartButton_vnda from "./islands/AddToCartButton/vnda.tsx";
import * as $AddToCartButton_vtex from "./islands/AddToCartButton/vtex.tsx";
import * as $AddToCartButton_wake from "./islands/AddToCartButton/wake.tsx";
+import * as $CasesComponent from "./islands/CasesComponent.tsx";
import * as $Header_Buttons from "./islands/Header/Buttons.tsx";
import * as $Header_Cart_linx from "./islands/Header/Cart/linx.tsx";
import * as $Header_Cart_nuvemshop from "./islands/Header/Cart/nuvemshop.tsx";
@@ -18,6 +19,7 @@ import * as $Header_Cart_vtex from "./islands/Header/Cart/vtex.tsx";
import * as $Header_Cart_wake from "./islands/Header/Cart/wake.tsx";
import * as $Header_Drawers from "./islands/Header/Drawers.tsx";
import * as $Header_Searchbar from "./islands/Header/Searchbar.tsx";
+import * as $Mosaic from "./islands/Mosaic.tsx";
import * as $Newsletter from "./islands/Newsletter.tsx";
import * as $OutOfStock from "./islands/OutOfStock.tsx";
import * as $ProductImageZoom from "./islands/ProductImageZoom.tsx";
@@ -39,6 +41,7 @@ const manifest = {
"./islands/AddToCartButton/vnda.tsx": $AddToCartButton_vnda,
"./islands/AddToCartButton/vtex.tsx": $AddToCartButton_vtex,
"./islands/AddToCartButton/wake.tsx": $AddToCartButton_wake,
+ "./islands/CasesComponent.tsx": $CasesComponent,
"./islands/Header/Buttons.tsx": $Header_Buttons,
"./islands/Header/Cart/linx.tsx": $Header_Cart_linx,
"./islands/Header/Cart/nuvemshop.tsx": $Header_Cart_nuvemshop,
@@ -48,6 +51,7 @@ const manifest = {
"./islands/Header/Cart/wake.tsx": $Header_Cart_wake,
"./islands/Header/Drawers.tsx": $Header_Drawers,
"./islands/Header/Searchbar.tsx": $Header_Searchbar,
+ "./islands/Mosaic.tsx": $Mosaic,
"./islands/Newsletter.tsx": $Newsletter,
"./islands/OutOfStock.tsx": $OutOfStock,
"./islands/ProductImageZoom.tsx": $ProductImageZoom,
diff --git a/islands/CasesComponent.tsx b/islands/CasesComponent.tsx
new file mode 100644
index 0000000..485ae73
--- /dev/null
+++ b/islands/CasesComponent.tsx
@@ -0,0 +1 @@
+export { default } from '$store/sections/Content/CasesComponent.tsx';
\ No newline at end of file
diff --git a/islands/Mosaic.tsx b/islands/Mosaic.tsx
new file mode 100644
index 0000000..0b91e07
--- /dev/null
+++ b/islands/Mosaic.tsx
@@ -0,0 +1 @@
+export { default } from '$store/sections/Content/Mosaic.tsx';
\ No newline at end of file
diff --git a/manifest.gen.ts b/manifest.gen.ts
index 312ac8a..0bd971d 100644
--- a/manifest.gen.ts
+++ b/manifest.gen.ts
@@ -14,48 +14,54 @@ import * as $$$$$$6 from "./sections/Category/CategoryGrid.tsx";
import * as $$$$$$7 from "./sections/Category/CategoryList.tsx";
import * as $$$$$$8 from "./sections/Content/Benefits.tsx";
import * as $$$$$$9 from "./sections/Content/BlogPosts.tsx";
-import * as $$$$$$10 from "./sections/Content/CallToAction.tsx";
-import * as $$$$$$11 from "./sections/Content/Faq.tsx";
-import * as $$$$$$12 from "./sections/Content/Features.tsx";
-import * as $$$$$$13 from "./sections/Content/Hero.tsx";
-import * as $$$$$$14 from "./sections/Content/ImageSection.tsx";
-import * as $$$$$$15 from "./sections/Content/Intro.tsx";
-import * as $$$$$$16 from "./sections/Content/Logos.tsx";
-import * as $$$$$$17 from "./sections/Content/Partners.tsx";
-import * as $$$$$$18 from "./sections/Content/RichText.tsx";
-import * as $$$$$$19 from "./sections/Content/Table.tsx";
-import * as $$$$$$20 from "./sections/Content/Testimonials.tsx";
-import * as $$$$$$21 from "./sections/Content/TextWithImage.tsx";
-import * as $$$$$$22 from "./sections/Footer/Footer.tsx";
-import * as $$$$$$23 from "./sections/Gallery.tsx";
-import * as $$$$$$24 from "./sections/Header/Header.tsx";
-import * as $$$$$$25 from "./sections/Images/BannerGrid.tsx";
-import * as $$$$$$26 from "./sections/Images/Carousel.tsx";
-import * as $$$$$$27 from "./sections/Images/ImageGallery.tsx";
-import * as $$$$$$28 from "./sections/Images/ShoppableBanner.tsx";
-import * as $$$$$$29 from "./sections/Layout/Container.tsx";
-import * as $$$$$$30 from "./sections/Layout/Flex.tsx";
-import * as $$$$$$31 from "./sections/Layout/Grid.tsx";
-import * as $$$$$$32 from "./sections/Layout/GridItem.tsx";
-import * as $$$$$$33 from "./sections/Links/LinkTree.tsx";
-import * as $$$$$$34 from "./sections/Links/Shortcuts.tsx";
-import * as $$$$$$35 from "./sections/Miscellaneous/CampaignTimer.tsx";
-import * as $$$$$$36 from "./sections/Miscellaneous/CookieConsent.tsx";
-import * as $$$$$$37 from "./sections/Miscellaneous/Slide.tsx";
-import * as $$$$$$38 from "./sections/Newsletter/Newsletter.tsx";
-import * as $$$$$$39 from "./sections/Product/ImageGalleryFrontBack.tsx";
-import * as $$$$$$40 from "./sections/Product/ImageGallerySlider.tsx";
-import * as $$$$$$41 from "./sections/Product/NotFound.tsx";
-import * as $$$$$$42 from "./sections/Product/NotFoundChallenge.tsx";
-import * as $$$$$$43 from "./sections/Product/ProductInfo.tsx";
-import * as $$$$$$44 from "./sections/Product/ProductShelf.tsx";
-import * as $$$$$$45 from "./sections/Product/ProductShelfTabbed.tsx";
-import * as $$$$$$46 from "./sections/Product/SearchResult.tsx";
-import * as $$$$$$47 from "./sections/Product/ShelfWithImage.tsx";
-import * as $$$$$$48 from "./sections/Product/Wishlist.tsx";
-import * as $$$$$$49 from "./sections/Social/InstagramPosts.tsx";
-import * as $$$$$$50 from "./sections/Social/WhatsApp.tsx";
-import * as $$$$$$51 from "./sections/Theme/Theme.tsx";
+import * as $$$$$$10 from "./sections/Content/BrandAnimation.tsx";
+import * as $$$$$$11 from "./sections/Content/CallToAction.tsx";
+import * as $$$$$$12 from "./sections/Content/CasesComponent.tsx";
+import * as $$$$$$13 from "./sections/Content/Faq.tsx";
+import * as $$$$$$14 from "./sections/Content/Features.tsx";
+import * as $$$$$$15 from "./sections/Content/Hero.tsx";
+import * as $$$$$$16 from "./sections/Content/ImageSection.tsx";
+import * as $$$$$$17 from "./sections/Content/Intro.tsx";
+import * as $$$$$$18 from "./sections/Content/Logos.tsx";
+import * as $$$$$$19 from "./sections/Content/Mosaic.tsx";
+import * as $$$$$$20 from "./sections/Content/Partners.tsx";
+import * as $$$$$$21 from "./sections/Content/RichText.tsx";
+import * as $$$$$$22 from "./sections/Content/Table.tsx";
+import * as $$$$$$23 from "./sections/Content/Testimonials.tsx";
+import * as $$$$$$24 from "./sections/Content/TextTopWidthCarousel.tsx";
+import * as $$$$$$25 from "./sections/Content/TextWithImage.tsx";
+import * as $$$$$$26 from "./sections/Content/TextWithImageAnimation.tsx";
+import * as $$$$$$27 from "./sections/Content/TextWithImageCustom.tsx";
+import * as $$$$$$28 from "./sections/Footer/Footer.tsx";
+import * as $$$$$$29 from "./sections/Gallery.tsx";
+import * as $$$$$$30 from "./sections/Header/Header.tsx";
+import * as $$$$$$31 from "./sections/Images/BannerGrid.tsx";
+import * as $$$$$$32 from "./sections/Images/Carousel.tsx";
+import * as $$$$$$33 from "./sections/Images/ImageGallery.tsx";
+import * as $$$$$$34 from "./sections/Images/ShoppableBanner.tsx";
+import * as $$$$$$35 from "./sections/Layout/Container.tsx";
+import * as $$$$$$36 from "./sections/Layout/Flex.tsx";
+import * as $$$$$$37 from "./sections/Layout/Grid.tsx";
+import * as $$$$$$38 from "./sections/Layout/GridItem.tsx";
+import * as $$$$$$39 from "./sections/Links/LinkTree.tsx";
+import * as $$$$$$40 from "./sections/Links/Shortcuts.tsx";
+import * as $$$$$$41 from "./sections/Miscellaneous/CampaignTimer.tsx";
+import * as $$$$$$42 from "./sections/Miscellaneous/CookieConsent.tsx";
+import * as $$$$$$43 from "./sections/Miscellaneous/Slide.tsx";
+import * as $$$$$$44 from "./sections/Newsletter/Newsletter.tsx";
+import * as $$$$$$45 from "./sections/Product/ImageGalleryFrontBack.tsx";
+import * as $$$$$$46 from "./sections/Product/ImageGallerySlider.tsx";
+import * as $$$$$$47 from "./sections/Product/NotFound.tsx";
+import * as $$$$$$48 from "./sections/Product/NotFoundChallenge.tsx";
+import * as $$$$$$49 from "./sections/Product/ProductInfo.tsx";
+import * as $$$$$$50 from "./sections/Product/ProductShelf.tsx";
+import * as $$$$$$51 from "./sections/Product/ProductShelfTabbed.tsx";
+import * as $$$$$$52 from "./sections/Product/SearchResult.tsx";
+import * as $$$$$$53 from "./sections/Product/ShelfWithImage.tsx";
+import * as $$$$$$54 from "./sections/Product/Wishlist.tsx";
+import * as $$$$$$55 from "./sections/Social/InstagramPosts.tsx";
+import * as $$$$$$56 from "./sections/Social/WhatsApp.tsx";
+import * as $$$$$$57 from "./sections/Theme/Theme.tsx";
import * as $$$$$$$$$$$0 from "./apps/decohub.ts";
import * as $$$$$$$$$$$1 from "./apps/site.ts";
@@ -77,48 +83,55 @@ const manifest = {
"deco-sites/agencian1/sections/Category/CategoryList.tsx": $$$$$$7,
"deco-sites/agencian1/sections/Content/Benefits.tsx": $$$$$$8,
"deco-sites/agencian1/sections/Content/BlogPosts.tsx": $$$$$$9,
- "deco-sites/agencian1/sections/Content/CallToAction.tsx": $$$$$$10,
- "deco-sites/agencian1/sections/Content/Faq.tsx": $$$$$$11,
- "deco-sites/agencian1/sections/Content/Features.tsx": $$$$$$12,
- "deco-sites/agencian1/sections/Content/Hero.tsx": $$$$$$13,
- "deco-sites/agencian1/sections/Content/ImageSection.tsx": $$$$$$14,
- "deco-sites/agencian1/sections/Content/Intro.tsx": $$$$$$15,
- "deco-sites/agencian1/sections/Content/Logos.tsx": $$$$$$16,
- "deco-sites/agencian1/sections/Content/Partners.tsx": $$$$$$17,
- "deco-sites/agencian1/sections/Content/RichText.tsx": $$$$$$18,
- "deco-sites/agencian1/sections/Content/Table.tsx": $$$$$$19,
- "deco-sites/agencian1/sections/Content/Testimonials.tsx": $$$$$$20,
- "deco-sites/agencian1/sections/Content/TextWithImage.tsx": $$$$$$21,
- "deco-sites/agencian1/sections/Footer/Footer.tsx": $$$$$$22,
- "deco-sites/agencian1/sections/Gallery.tsx": $$$$$$23,
- "deco-sites/agencian1/sections/Header/Header.tsx": $$$$$$24,
- "deco-sites/agencian1/sections/Images/BannerGrid.tsx": $$$$$$25,
- "deco-sites/agencian1/sections/Images/Carousel.tsx": $$$$$$26,
- "deco-sites/agencian1/sections/Images/ImageGallery.tsx": $$$$$$27,
- "deco-sites/agencian1/sections/Images/ShoppableBanner.tsx": $$$$$$28,
- "deco-sites/agencian1/sections/Layout/Container.tsx": $$$$$$29,
- "deco-sites/agencian1/sections/Layout/Flex.tsx": $$$$$$30,
- "deco-sites/agencian1/sections/Layout/Grid.tsx": $$$$$$31,
- "deco-sites/agencian1/sections/Layout/GridItem.tsx": $$$$$$32,
- "deco-sites/agencian1/sections/Links/LinkTree.tsx": $$$$$$33,
- "deco-sites/agencian1/sections/Links/Shortcuts.tsx": $$$$$$34,
- "deco-sites/agencian1/sections/Miscellaneous/CampaignTimer.tsx": $$$$$$35,
- "deco-sites/agencian1/sections/Miscellaneous/CookieConsent.tsx": $$$$$$36,
- "deco-sites/agencian1/sections/Miscellaneous/Slide.tsx": $$$$$$37,
- "deco-sites/agencian1/sections/Newsletter/Newsletter.tsx": $$$$$$38,
- "deco-sites/agencian1/sections/Product/ImageGalleryFrontBack.tsx": $$$$$$39,
- "deco-sites/agencian1/sections/Product/ImageGallerySlider.tsx": $$$$$$40,
- "deco-sites/agencian1/sections/Product/NotFound.tsx": $$$$$$41,
- "deco-sites/agencian1/sections/Product/NotFoundChallenge.tsx": $$$$$$42,
- "deco-sites/agencian1/sections/Product/ProductInfo.tsx": $$$$$$43,
- "deco-sites/agencian1/sections/Product/ProductShelf.tsx": $$$$$$44,
- "deco-sites/agencian1/sections/Product/ProductShelfTabbed.tsx": $$$$$$45,
- "deco-sites/agencian1/sections/Product/SearchResult.tsx": $$$$$$46,
- "deco-sites/agencian1/sections/Product/ShelfWithImage.tsx": $$$$$$47,
- "deco-sites/agencian1/sections/Product/Wishlist.tsx": $$$$$$48,
- "deco-sites/agencian1/sections/Social/InstagramPosts.tsx": $$$$$$49,
- "deco-sites/agencian1/sections/Social/WhatsApp.tsx": $$$$$$50,
- "deco-sites/agencian1/sections/Theme/Theme.tsx": $$$$$$51,
+ "deco-sites/agencian1/sections/Content/BrandAnimation.tsx": $$$$$$10,
+ "deco-sites/agencian1/sections/Content/CallToAction.tsx": $$$$$$11,
+ "deco-sites/agencian1/sections/Content/CasesComponent.tsx": $$$$$$12,
+ "deco-sites/agencian1/sections/Content/Faq.tsx": $$$$$$13,
+ "deco-sites/agencian1/sections/Content/Features.tsx": $$$$$$14,
+ "deco-sites/agencian1/sections/Content/Hero.tsx": $$$$$$15,
+ "deco-sites/agencian1/sections/Content/ImageSection.tsx": $$$$$$16,
+ "deco-sites/agencian1/sections/Content/Intro.tsx": $$$$$$17,
+ "deco-sites/agencian1/sections/Content/Logos.tsx": $$$$$$18,
+ "deco-sites/agencian1/sections/Content/Mosaic.tsx": $$$$$$19,
+ "deco-sites/agencian1/sections/Content/Partners.tsx": $$$$$$20,
+ "deco-sites/agencian1/sections/Content/RichText.tsx": $$$$$$21,
+ "deco-sites/agencian1/sections/Content/Table.tsx": $$$$$$22,
+ "deco-sites/agencian1/sections/Content/Testimonials.tsx": $$$$$$23,
+ "deco-sites/agencian1/sections/Content/TextTopWidthCarousel.tsx": $$$$$$24,
+ "deco-sites/agencian1/sections/Content/TextWithImage.tsx": $$$$$$25,
+ "deco-sites/agencian1/sections/Content/TextWithImageAnimation.tsx":
+ $$$$$$26,
+ "deco-sites/agencian1/sections/Content/TextWithImageCustom.tsx": $$$$$$27,
+ "deco-sites/agencian1/sections/Footer/Footer.tsx": $$$$$$28,
+ "deco-sites/agencian1/sections/Gallery.tsx": $$$$$$29,
+ "deco-sites/agencian1/sections/Header/Header.tsx": $$$$$$30,
+ "deco-sites/agencian1/sections/Images/BannerGrid.tsx": $$$$$$31,
+ "deco-sites/agencian1/sections/Images/Carousel.tsx": $$$$$$32,
+ "deco-sites/agencian1/sections/Images/ImageGallery.tsx": $$$$$$33,
+ "deco-sites/agencian1/sections/Images/ShoppableBanner.tsx": $$$$$$34,
+ "deco-sites/agencian1/sections/Layout/Container.tsx": $$$$$$35,
+ "deco-sites/agencian1/sections/Layout/Flex.tsx": $$$$$$36,
+ "deco-sites/agencian1/sections/Layout/Grid.tsx": $$$$$$37,
+ "deco-sites/agencian1/sections/Layout/GridItem.tsx": $$$$$$38,
+ "deco-sites/agencian1/sections/Links/LinkTree.tsx": $$$$$$39,
+ "deco-sites/agencian1/sections/Links/Shortcuts.tsx": $$$$$$40,
+ "deco-sites/agencian1/sections/Miscellaneous/CampaignTimer.tsx": $$$$$$41,
+ "deco-sites/agencian1/sections/Miscellaneous/CookieConsent.tsx": $$$$$$42,
+ "deco-sites/agencian1/sections/Miscellaneous/Slide.tsx": $$$$$$43,
+ "deco-sites/agencian1/sections/Newsletter/Newsletter.tsx": $$$$$$44,
+ "deco-sites/agencian1/sections/Product/ImageGalleryFrontBack.tsx": $$$$$$45,
+ "deco-sites/agencian1/sections/Product/ImageGallerySlider.tsx": $$$$$$46,
+ "deco-sites/agencian1/sections/Product/NotFound.tsx": $$$$$$47,
+ "deco-sites/agencian1/sections/Product/NotFoundChallenge.tsx": $$$$$$48,
+ "deco-sites/agencian1/sections/Product/ProductInfo.tsx": $$$$$$49,
+ "deco-sites/agencian1/sections/Product/ProductShelf.tsx": $$$$$$50,
+ "deco-sites/agencian1/sections/Product/ProductShelfTabbed.tsx": $$$$$$51,
+ "deco-sites/agencian1/sections/Product/SearchResult.tsx": $$$$$$52,
+ "deco-sites/agencian1/sections/Product/ShelfWithImage.tsx": $$$$$$53,
+ "deco-sites/agencian1/sections/Product/Wishlist.tsx": $$$$$$54,
+ "deco-sites/agencian1/sections/Social/InstagramPosts.tsx": $$$$$$55,
+ "deco-sites/agencian1/sections/Social/WhatsApp.tsx": $$$$$$56,
+ "deco-sites/agencian1/sections/Theme/Theme.tsx": $$$$$$57,
},
"apps": {
"deco-sites/agencian1/apps/decohub.ts": $$$$$$$$$$$0,
diff --git a/sections/Content/BrandAnimation.tsx b/sections/Content/BrandAnimation.tsx
new file mode 100644
index 0000000..49562a7
--- /dev/null
+++ b/sections/Content/BrandAnimation.tsx
@@ -0,0 +1,104 @@
+import type { ImageWidget } from "apps/admin/widgets.ts";
+import Image from "apps/website/components/Image.tsx";
+import { FnContext, SectionProps } from "deco/mod.ts";
+
+/** @title {{{alt}}} */
+interface PropsImage {
+ /** @title Insira a imagem */
+ image?: ImageWidget;
+ /** @title Insira o nome da imagem */
+ alt?: string;
+ /** @title Insira o link da imagem */
+ href?: string;
+ /**
+ * @title Insira a largura da imagem
+ * @description (ex: 112)
+ * */
+ width?:number;
+ /**
+ * @title Insira a altura da imagem
+ * @description (ex: 111)
+ * */
+ height?:number;
+}
+
+
+/** @title Marca */
+interface Props{
+ /** @title Imagem */
+ allImage:PropsImage[]
+ /** @title Deseja animação ? */
+ animationAction?:boolean;
+ /**
+ * @title Insira cor de fundo
+ * @description (ex: #ffffff)
+ * @format color
+ * */
+ backgroundColor?: string;
+ /**
+ * @title Insira o espaço entre as imagens
+ * @description (ex: 30)
+ * */
+ columnGap?: string;
+}
+
+function BrandAnimation( props: SectionProps
> ){
+ const { allImage, animationAction, backgroundColor, columnGap, device } = props;
+ const sizeImage = allImage?.length;
+ const arryTest = allImage && allImage.map(( {width} )=> width);
+ const sumColumn = sizeImage && columnGap ? sizeImage * Number(columnGap) : null;
+ const sumAllWidthImage = arryTest && arryTest.reduce((acc, curr) => acc && curr && (acc + curr));
+ const sumWidthTotal = sumAllWidthImage && sumColumn && sumAllWidthImage + sumColumn + (50*12);
+
+ return(
+ <>
+
+
+
+
+
+ {allImage && allImage.map(( { alt, image, width, height, href} )=>{
+
+ if( !image ) return null;
+
+ return(
+ <>
+ {image && (
+
+
+
+ )}
+ >
+ )
+ })}
+
+
+
+
+
+ >
+ )
+}
+
+export const loader = (props: Props, _req: Request, ctx: FnContext) => {
+ return {
+ ...props,
+ device: ctx.device,
+ };
+};
+
+export default BrandAnimation;
\ No newline at end of file
diff --git a/sections/Content/CasesComponent.tsx b/sections/Content/CasesComponent.tsx
new file mode 100644
index 0000000..62f096a
--- /dev/null
+++ b/sections/Content/CasesComponent.tsx
@@ -0,0 +1,150 @@
+import type { ImageWidget } from "apps/admin/widgets.ts";
+import Image from "apps/website/components/Image.tsx";
+import { FnContext, SectionProps } from "deco/mod.ts";
+import CasesComponentMobile from '$store/components/ui/CasesComponentMobile.tsx';
+import CasesComponentDesktop from '$store/components/ui/CasesComponentDesktop.tsx';
+import CasesComponentTextWithButton from '$store/components/ui/CasesComponentTextWithButton.tsx';
+
+/** @title {{{nameTag}}}*/
+interface TagProps{
+ imageTag?:ImageWidget;
+ /**@title nome da TAG */
+ nameTag?: string;
+}
+
+/** @title {{{alt}}}*/
+interface PropsImage{
+ /**@title Logo */
+ imageLogo?: ImageWidget;
+ /**@title nome da imagem */
+ alt?: string;
+ /**@title link */
+ href?:string;
+ /**@title Largura do logo */
+ /**@description (ex: 300) */
+ widthLogo?:number;
+ /**@title Altura do logo */
+ /**@description (ex: 300) */
+ heightLogo?:number;
+ /**@title Imagem de fundo*/
+ imageBackground?: ImageWidget;
+ /**@title Largura da imagem de fundo */
+ /**@description (ex: 300) */
+ widthImageBackground?:number;
+ /**@title Altura da imagem de fundo */
+ /**@description (ex: 300) */
+ heightImageBackground?:number;
+ /**@title Texto da porcentagem */
+ infoPorcentagem?:string;
+ /**@title Texto */
+ infoText?:string;
+ /**@title Ícone */
+ icon?:ImageWidget;
+
+ /********CONFIGURAÇÃO DO HOVER******* */
+
+ /**@title Logo (efeito hover) */
+ imageLogoHover?: ImageWidget;
+ /**@title Logo (efeito hover) Mobile*/
+ imageLogoMobileHover?: ImageWidget;
+ /**@title Largura do logo (efeito hover) */
+ /**@description (ex: 300) */
+ widthLogoHover?:number;
+ /**@title Altura do logo (efeito hover)*/
+ /**@description (ex: 300) */
+ heightLogoHover?:number;
+ /**@title Imagem de fundo (efeito hover)*/
+ imageBackgroundHover?: ImageWidget;
+ /**@title Larugura da imagem de fundo (efeito hover) */
+ /**@description (ex: 300) */
+ widthImageBackgroundHover?:number;
+ /**@title Altura da imagem de fundo (efeito hover) */
+ /**@description (ex: 300) */
+ heightImageBackgroundHover?:number;
+ /**@title Ícone (efeito hover)*/
+ iconHover?:ImageWidget;
+ /**@title Tags (efeito hover)*/
+ /** @maxItems 6 */
+ tagProps?:TagProps[]
+}
+
+interface Props{
+ /**@title Subtítulo */
+ /**@format html */
+ subtitle?:string;
+ /**@title Texto */
+ text?:string;
+ /**@title Texto do botão */
+ textButton?:string;
+ /**@title Link do botão */
+ hrefButton?:string;
+ /**@title Ativar icon arrow no link */
+ activeArrow?: boolean;
+ /** @description Configuração das imagens */
+ /** @maxItems 5 */
+ settingsImage?:PropsImage[];
+ /**@title Imagem de fundo da seção */
+ imageBackgroundSection?:ImageWidget;
+ /**@title Largura da imagem de fundo da seção */
+ /** @description (ex: 235) */
+ widthBackgroundSection?:number;
+ /**@title Altura da imagem de fundo da seção */
+ /** @description (ex: 396) */
+ heightBackgroundSection?:number;
+}
+
+function CasesComponent(props: SectionProps>){
+ const {
+ subtitle,
+ text,
+ textButton,
+ hrefButton,
+ activeArrow,
+ settingsImage,
+ device,
+ imageBackgroundSection,
+ widthBackgroundSection,
+ heightBackgroundSection
+ } = props;
+
+ return(
+ <>
+
+ {imageBackgroundSection && (
+
+ )}
+
+
+
+
+
+ {device === 'desktop' && ()}
+
+ {device === 'mobile' && ()}
+
+
+
+ >
+ )
+}
+
+export const loader = (props: Props, _req: Request, ctx: FnContext) => {
+ return {
+ ...props,
+ device: ctx.device,
+ };
+};
+
+export default CasesComponent;
\ No newline at end of file
diff --git a/sections/Content/Hero.tsx b/sections/Content/Hero.tsx
index 7a50a43..04662f1 100644
--- a/sections/Content/Hero.tsx
+++ b/sections/Content/Hero.tsx
@@ -1,10 +1,16 @@
import type { ImageWidget } from "apps/admin/widgets.ts";
import Image from "apps/website/components/Image.tsx";
+import { FnContext, SectionProps } from "deco/mod.ts";
+import { clx } from "$store/sdk/clx.ts";
export interface CTA {
id?: string;
- href: string;
+ /**@title Link do botão */
+ href?: string;
+ /**@title Texto 01 */
text: string;
+ /**@title Texto 02 */
+ text2?: string;
variant: "Normal" | "Reverse";
}
@@ -12,10 +18,38 @@ export interface Props {
/**
* @format html
*/
+ /** @title Título */
title: string;
+ /** @title Descrição */
+ /** @format html */
description: string;
+ /** @title Texto para animação */
+ descriptionAnimation?:string;
+ /** @title Imagem */
image?: ImageWidget;
+ /** @title Deseja posicionar manualmente? */
+ positionManual?: boolean;
+ /** @title Posição da imagem */
+ /** @description (Horizontal) */
+ translateX?: number;
+ /** @title Posição da imagem */
+ /** @description (Vertical) */
+ translateY?: number;
+ /** @title Largura da imagem */
+ widthImage?:number;
+ /** @title Lado do Bloco de texto */
placement: "left" | "right";
+ /**
+ * @title Lado do Imagem
+ * @description (valido caso posicionamento manual estiver ativado)
+ */
+ placementImage?: "right" | "left";
+ /**
+ * @title Título CTA
+ * @format html
+ */
+ titleCta?: string;
+ /** @title CTA */
cta: CTA[];
}
@@ -24,27 +58,53 @@ const PLACEMENT = {
right: "flex-col text-left lg:flex-row",
};
-export default function HeroFlats({
- title = "Hero",
- description = "Your description here",
- image,
- placement,
- cta,
-}: Props) {
+export default function HeroFlats(props: SectionProps>) {
+ const {
+ title = "Hero",
+ description = "Your description here",
+ descriptionAnimation,
+ image,
+ positionManual,
+ translateX,
+ translateY,
+ widthImage,
+ placement,
+ placementImage,
+ titleCta,
+ cta,
+ device
+ } = props;
+
+ const positionX = translateX ? translateX + 'px' : 0;
+ const positionY = translateY ? translateY + 'px' : 0;
+
+ const HEIGHT = 508;
+
return (
-
-
+
+
- {image && (
+ {image && device === 'desktop' && (
)}
-
-
-
- {description}
-
-
- {cta?.map((item) => (
-
-
-
-
- {item?.text}
-
-
- ))}
+ {title && (
+
+
+ )}
+ {descriptionAnimation &&(
+
+ {descriptionAnimation}
+
+ )}
+
+ {description && (
+
+
+ )}
+ {titleCta && (
+
+ )}
+
@@ -96,3 +186,10 @@ export default function HeroFlats({
);
}
+
+export const loader = (props: Props, _req: Request, ctx: FnContext) => {
+ return {
+ ...props,
+ device: ctx.device,
+ };
+};
\ No newline at end of file
diff --git a/sections/Content/Mosaic.tsx b/sections/Content/Mosaic.tsx
new file mode 100644
index 0000000..80a113d
--- /dev/null
+++ b/sections/Content/Mosaic.tsx
@@ -0,0 +1,387 @@
+import { FnContext, SectionProps } from "deco/mod.ts";
+import LinkWithOptionArrow from '$store/components/ui/LinkWithOptionArrow.tsx';
+import type { ImageWidget } from "apps/admin/widgets.ts";
+import Image from "apps/website/components/Image.tsx";
+import { HTMLWidget as HTML } from "apps/admin/widgets.ts";
+import { clx } from "$store/sdk/clx.ts";
+
+
+// INTERFACE GENERICA P/ IMAGEM
+interface ImageGeneric{
+ /**@title Imagem */
+ image?:ImageWidget;
+ /**@title Largura da imagem */
+ /**@description (ex: 390) */
+ width?:number;
+ /**@title Altura da imagem */
+ /**@description (ex: 250) */
+ height?:number;
+}
+
+// INTERFACE GENERICA P/ TEXTOS
+interface TextGeneric{
+ /** @title Título */
+ /** @format html */
+ title?:string;
+ /** @title Texto */
+ /** @format textarea */
+ text?:string;
+ /** @title Texto do Link */
+ textLink?:string;
+ /** @title Link */
+ /** @description (ex: https://agencian1.com.br/) */
+ link?:string;
+ /** @title Cor de fundo */
+ bgColor?: 'primary' | 'base-50'
+}
+
+const colorBackground = {
+ 'primary' : '#0C1F59',
+ 'base-50' : '#F3F4F7'
+}
+
+
+//* LAYOUT SUPERIOR
+/** @titleBy name */
+interface LayoutTop{
+ /**@title Nome do Bloco */
+ name?: string;
+
+ /** @title Textos */
+ text?: TextGeneric;
+
+ /** @title Desktop */
+ desktop?:ImageGeneric
+
+ /** @title Mobile */
+ mobile?:ImageGeneric
+}
+
+interface BottomLayout{
+ /** @title Imagem Superior */
+ top: ImageGeneric;
+ /** @title Imagem Inferior */
+ bottom: ImageGeneric
+}
+
+interface BottomSide{
+ /** @title Lado esquerdo */
+ left?:BottomLayout;
+ /** @title Lado direito */
+ right?:BottomLayout;
+}
+
+//* LAYOUT INFERIOR
+/** @titleBy name */
+interface LayoutBottom{
+ /**@title Nome do Bloco */
+ name?: string;
+
+ /** @title Textos */
+ text?:TextGeneric;
+
+ /** @title Desktop */
+ desktop?:BottomSide;
+
+ /** @title Mobile */
+ mobile?:BottomSide;
+}
+
+interface Props{
+ /** @title Imagem Superior */
+ /** @description (Limite 3 imagens) */
+ /** @maxItems 3 */
+ imageTop:LayoutTop[];
+ /** @title Imagem Inferior */
+ /** @description (Limite 2 imagens) */
+ /** @maxItems 2 */
+ imageBottom: LayoutBottom[];
+}
+
+
+function Mosaic( props: SectionProps
> ){
+ const { imageTop, imageBottom, device } = props;
+
+ // console.log('imageTop ----> ', imageTop)
+ // console.log('imageBottom ----> ', imageBottom)
+ // console.log('Mosaic device -----> ', device)
+
+ function handleMouserHover( e:MouseEvent ){
+ const { target } = e;
+ if(!target) return;
+ if( target && target instanceof HTMLElement ){
+ switch (e.type) {
+ case 'mouseleave':
+ console.log('event mouseleave ----> ', target)
+ break;
+ case 'mouseover':
+ console.log('event mouseover ----> ', target)
+ break;
+ }
+ }
+ }
+
+ return(
+ <>
+
+
+
+ {/* ITEMS TOP - INITIAL */}
+
+
+
+ {imageTop && imageTop?.map(({ desktop, mobile, text, name })=>{
+ return(
+ <>
+
+
+
+
+
+ { text && text?.title && (
+
+
+ ) }
+
+ {text && text?.text && (
+
+
+ {text.text}
+
+ )}
+
+ {text && text?.textLink && (
+
+
+
+ )}
+
+
+ {device === 'desktop' && desktop && desktop.image && desktop?.width && desktop?.height && (
+
+ )}
+ {device === 'mobile' && mobile && mobile.image && mobile?.width && mobile?.height && (
+
+ )}
+
+
+ >
+ )
+ })}
+
{/* ITEMS TOP - FINAL */}
+
+ {/* ITEMS BOTTOM - INITIAL */}
+
+ {imageBottom && imageBottom?.map(( { desktop, mobile, name, text } )=>{
+ return(
+ <>
+
+
+
+ {text && text?.title && (
+
+
+ )}
+ {text && text?.text && (
+
+ {text.text}
+
+ )}
+
+ {text && text?.textLink && (
+
+
+
+ )}
+
+
+
+ {device === 'desktop' &&
+ desktop && desktop?.left &&
+ desktop.left.top?.image &&
+ desktop.left?.top?.width &&
+ desktop.left?.top?.height && (
+
+ )}
+ {device === 'mobile' &&
+ mobile && mobile?.left &&
+ mobile.left.top?.image &&
+ mobile.left?.top?.width &&
+ mobile.left?.top?.height && (
+
+ )}
+
+ {device === 'desktop' &&
+ desktop && desktop?.left &&
+ desktop.left.bottom?.image &&
+ desktop.left?.bottom?.width &&
+ desktop.left?.bottom?.height && (
+
+ )}
+
+ {device === 'mobile' &&
+ mobile && mobile?.left &&
+ mobile.left.bottom?.image &&
+ mobile.left?.bottom?.width &&
+ mobile.left?.bottom?.height && (
+
+ )}
+
+
+ {device === 'desktop' &&
+ desktop && desktop?.right &&
+ desktop.right.top?.image &&
+ desktop.right?.top?.width &&
+ desktop.right?.top?.height && (
+
+ )}
+ {device === 'mobile' &&
+ mobile && mobile?.right &&
+ mobile.right.top?.image &&
+ mobile.right?.top?.width &&
+ mobile.right?.top?.height && (
+
+ )}
+ {device === 'desktop' &&
+ desktop && desktop?.right &&
+ desktop.right.bottom?.image &&
+ desktop.right?.bottom?.width &&
+ desktop.right?.bottom?.height && (
+
+ )}
+ {device === 'mobile' &&
+ mobile && mobile?.right &&
+ mobile.right.bottom?.image &&
+ mobile.right?.bottom?.width &&
+ mobile.right?.bottom?.height && (
+
+ )}
+
+
+
+ >
+ )
+ })}
+
+
+
+ >
+ )
+}
+
+export const loader = (props: Props, _req: Request, ctx: FnContext) => {
+ return {
+ ...props,
+ device: ctx.device,
+ };
+};
+
+export default Mosaic;
\ No newline at end of file
diff --git a/sections/Content/TextTopWidthCarousel.tsx b/sections/Content/TextTopWidthCarousel.tsx
new file mode 100644
index 0000000..9c5968a
--- /dev/null
+++ b/sections/Content/TextTopWidthCarousel.tsx
@@ -0,0 +1,233 @@
+import Slider from "$store/components/ui/Slider.tsx";
+import SliderJS from "$store/islands/SliderJS.tsx";
+import { useId } from "$store/sdk/useId.ts";
+import type { ImageWidget } from "apps/admin/widgets.ts";
+import { FnContext, SectionProps } from "deco/mod.ts";
+import Icon from "$store/components/ui/Icon.tsx";
+import { clx } from "$store/sdk/clx.ts";
+
+/** @titleBy name */
+interface InfoProps{
+ /**@title Nome*/
+ name?:string;
+ /**@title Título*/
+ title?:string;
+ /**@title Texto*/
+ /**@format textarea*/
+ text?:string
+ /**@title Texto do link*/
+ textLink?:string;
+ /**@title link*/
+ /**@description (ex: https://agencian1.com.br/)*/
+ href?:string;
+}
+
+/** @titleBy alt */
+export interface ImageCarousel {
+ settingsInfo?:InfoProps;
+ /** @title Imagem Desktop */
+ desktop: ImageWidget;
+ /** @title Nome da imagem */
+ alt: string;
+}
+
+export interface Props {
+ /**@title Título */
+ /**@format html */
+ title?:string;
+ /**@title Texto */
+ /**@format html */
+ text?:string;
+
+ images?: ImageCarousel[];
+ /** @title (Marque esta opção quando este banner for a maior imagem na tela para otimizações de imagem) */
+ preload?: boolean;
+ /** @title Mostrar setas */
+ /** @description (mostre setas para navegar pelas imagens) */
+ arrows?: boolean;
+ /** @title Mostrar pontos */
+ /** @description (mostre pontos para navegar pelas imagens) */
+ dots?: boolean;
+}
+
+function ImageCarouselItem({ image, lcp, id }: { image: ImageCarousel; lcp?: boolean; id: string }) {
+ const { alt, desktop, settingsInfo } = image;
+
+ return (
+ <>
+
+
+
+
+
+
+ { settingsInfo?.name && (
+
{ settingsInfo?.name }
+ ) }
+ { settingsInfo?.title && (
+
{ settingsInfo?.title }
+ ) }
+ { settingsInfo?.text && (
+
{ settingsInfo?.text }
+ ) }
+ { settingsInfo?.textLink && (
+
+
{ settingsInfo?.textLink }
+
+
+ ) }
+
+
+ >
+ );
+}
+
+function Dots( { images }: Props ) {
+ return (
+ <>
+