From e792a4b886eebd160d892dd07786a928d7c9e693 Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Date: Thu, 1 May 2025 10:24:55 +0530 Subject: [PATCH] html --- .../com/realnet/dlf/Builders/HtmlBuilder.java | 4146 ++++++++++++++++- .../dlf/Services/Design_lbraryService.java | 2 +- 2 files changed, 4136 insertions(+), 12 deletions(-) diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/dlf/Builders/HtmlBuilder.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/dlf/Builders/HtmlBuilder.java index ab8de8d..3c44ce9 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/dlf/Builders/HtmlBuilder.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/dlf/Builders/HtmlBuilder.java @@ -1,17 +1,11 @@ package com.realnet.dlf.Builders; -import java.util.HashMap; -import java.util.*; -import java.util.Map; -import java.util.function.Function; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; -import java.util.stream.Collectors; public class HtmlBuilder { @@ -21,11 +15,4141 @@ public class HtmlBuilder { // Blog Related // TYPE_RENDERERS.put("cta-block", HtmlBuilder::renderCtaBlock); - - // + + // + TYPE_RENDERERS.put("Navbar 6", HtmlBuilder::renderHeader); + + TYPE_RENDERERS.put(" Testimonial Section 6", HtmlBuilder::renderTestimonialSection); + + TYPE_RENDERERS.put(" Testimonial Section 7", HtmlBuilder::renderTestimonialSection); + + TYPE_RENDERERS.put(" css", HtmlBuilder::renderFeatureSection2); + + TYPE_RENDERERS.put(" body1", HtmlBuilder::renderFeatureGridContentSection); + + TYPE_RENDERERS.put(" imagegrid", HtmlBuilder::renderFeatureImageGrid); + + TYPE_RENDERERS.put(" Blog Posts 5", HtmlBuilder::renderPerfectBlogPost); + + TYPE_RENDERERS.put(" Blog Posts 4", HtmlBuilder::renderListPost); + + TYPE_RENDERERS.put(" Blog Posts 3", HtmlBuilder::renderClassicListPost); + + TYPE_RENDERERS.put(" Blog Posts 2", HtmlBuilder::renderBlogTemplate); + + TYPE_RENDERERS.put(" Blog Posts 1", HtmlBuilder::renderHowToBlogPost); + + TYPE_RENDERERS.put(" CTA Sections 5", HtmlBuilder::renderHeroBanner); + + TYPE_RENDERERS.put(" CTA Sections 4", HtmlBuilder::renderContactSignupSection); + + TYPE_RENDERERS.put(" CTA Sections 3", HtmlBuilder::renderCTASection); + + TYPE_RENDERERS.put(" CTA Sections 2", HtmlBuilder::renderCTABlock); + + TYPE_RENDERERS.put(" CTA Sections 1", HtmlBuilder::renderSubscriptionSection); + + TYPE_RENDERERS.put("Contact Sections 5", HtmlBuilder::renderContactUsSection); + + TYPE_RENDERERS.put("Contact Sections 4", HtmlBuilder::renderContactPage); + + TYPE_RENDERERS.put("Contact Sections 3", HtmlBuilder::renderContactSplitSection); + + TYPE_RENDERERS.put("Contact Sections 2", HtmlBuilder::renderContactInfoSection); + + TYPE_RENDERERS.put("Contact Sections 1", HtmlBuilder::renderContactFormSection); + + TYPE_RENDERERS.put(" Pricing Sections 5", HtmlBuilder::renderSinglePlanSection); + + TYPE_RENDERERS.put(" Pricing Sections 4", HtmlBuilder::renderTogglePricingSection); + + TYPE_RENDERERS.put(" Pricing Sections 3", HtmlBuilder::renderAdvancedPricingSection); + + TYPE_RENDERERS.put(" Pricing Sections 2", HtmlBuilder::renderPricingSectionDark); + + TYPE_RENDERERS.put(" Pricing Sections1", HtmlBuilder::renderPricingSection); + + TYPE_RENDERERS.put(" Testimonial Section2", HtmlBuilder::renderTestimonialGrid); + + TYPE_RENDERERS.put("Testimonial Section 1", HtmlBuilder::renderSimpleTestimonialSection); + + TYPE_RENDERERS.put("Testimonial ", HtmlBuilder::renderTestimonialSection); + + TYPE_RENDERERS.put(" callToAction 1", HtmlBuilder::renderCtaSection); + + TYPE_RENDERERS.put("TestimonialSection Client 2", HtmlBuilder::renderClientTestimonialStructured); + + TYPE_RENDERERS.put("TestimonialSection Client 1", HtmlBuilder::renderClientTestimonialSection); + + TYPE_RENDERERS.put("Team 5", HtmlBuilder::renderTeamShowcase); + + TYPE_RENDERERS.put("Team 4", HtmlBuilder::renderTeamGridSection); + + TYPE_RENDERERS.put("Team 3", HtmlBuilder::renderTeamSlider); + + TYPE_RENDERERS.put("Team 2", HtmlBuilder::renderTeamSectionTemplate); + + TYPE_RENDERERS.put(" Team 1", HtmlBuilder::renderTeamSection); + + TYPE_RENDERERS.put("Blog 5", HtmlBuilder::renderSimpleBlogSection); + + TYPE_RENDERERS.put("Blog 4", HtmlBuilder::renderBlogPage); + + TYPE_RENDERERS.put("Blog 3", HtmlBuilder::renderBlogHomePage); + + TYPE_RENDERERS.put("Blog 2", HtmlBuilder::renderBlogPreviewSection); + + TYPE_RENDERERS.put("Blog 1", HtmlBuilder::renderBlogListSection); + + TYPE_RENDERERS.put("Footer 5", HtmlBuilder::renderFooter1Component); + + TYPE_RENDERERS.put("Footer 4", HtmlBuilder::renderCleanFooter); + + TYPE_RENDERERS.put("Footer 3", HtmlBuilder::renderStructuredFooter); + + TYPE_RENDERERS.put("Footer 2", HtmlBuilder::renderFooterAdvanced); + + TYPE_RENDERERS.put("Footer", HtmlBuilder::renderContactAndFooter); + + TYPE_RENDERERS.put("Feature", HtmlBuilder::renderFeatureListSection); + +// TYPE_RENDERERS.put("Feature 4", HtmlBuilder::renderFeatureGridSection); + + TYPE_RENDERERS.put("Feature 3", HtmlBuilder::renderImageLeftFeatureSection); + + TYPE_RENDERERS.put("Feature 2", HtmlBuilder::renderCenteredHero); + + TYPE_RENDERERS.put(" Feature 1", HtmlBuilder::renderFeatureSection); + + TYPE_RENDERERS.put("FAQ 5", HtmlBuilder::renderEcommerceFAQ); + + TYPE_RENDERERS.put("FAQ 4", HtmlBuilder::renderDashboardLayout); + + TYPE_RENDERERS.put("FAQ 3", HtmlBuilder::renderFAQIllustrated); + + TYPE_RENDERERS.put("FAQ 2", HtmlBuilder::renderFAQTwoColumn); + + TYPE_RENDERERS.put("FAQ 1", HtmlBuilder::renderFAQSection); + + TYPE_RENDERERS.put("Navbar 5", HtmlBuilder::renderNavbarWithImageLogo); + + TYPE_RENDERERS.put("Navbar 4", HtmlBuilder::renderSimpleNavbar); + + TYPE_RENDERERS.put("Navbar 3", HtmlBuilder::renderMegaNavbar); + + TYPE_RENDERERS.put("Navbar 2", HtmlBuilder::renderNavBarFromJson); + + TYPE_RENDERERS.put("Navbar 1", HtmlBuilder::renderSimpleHeader); + + TYPE_RENDERERS.put("Logo 5", HtmlBuilder::renderLogoGuidelines); + + TYPE_RENDERERS.put("Logo 4", HtmlBuilder::renderLogoGrid); + + TYPE_RENDERERS.put("Logo 3", HtmlBuilder::renderBrandGuideline); + + TYPE_RENDERERS.put("Logo 2", HtmlBuilder::renderLogoShowcaseSection); + + TYPE_RENDERERS.put("Logo 1", HtmlBuilder::renderLogoCloud); + + TYPE_RENDERERS.put("HeroHeader5", HtmlBuilder::renderHeroWithArtwork); + + TYPE_RENDERERS.put(" HeroHeader4", HtmlBuilder::renderLeftTextRightCardsHero); + + TYPE_RENDERERS.put(" HeroHeader3", HtmlBuilder::renderAdvancedHeroSection); + + TYPE_RENDERERS.put(" HeroHeader2", HtmlBuilder::renderCenteredHeroSection); + + TYPE_RENDERERS.put(" HeroHeader1", HtmlBuilder::renderHeroTwoColumnSection); + + TYPE_RENDERERS.put("Header 5", HtmlBuilder::renderWebliumHeaderAndHero); + + TYPE_RENDERERS.put("Header 4", HtmlBuilder::renderMegaNavbar); + + TYPE_RENDERERS.put("Header 3", HtmlBuilder::renderHeroSplitHeadingSection); + + TYPE_RENDERERS.put("Header 2", HtmlBuilder::renderHeroSectionCentered); + + TYPE_RENDERERS.put("Header", HtmlBuilder::renderHeroSection); + + TYPE_RENDERERS.put("Blog Header 5", HtmlBuilder::renderBlogHeader); + + TYPE_RENDERERS.put("Blog Header 4", HtmlBuilder::renderTemplateLibrary); + + TYPE_RENDERERS.put("Blog Header 3", HtmlBuilder::renderBlogSection2); + + TYPE_RENDERERS.put("Blog Header 2", HtmlBuilder::renderBlogSection2); + + TYPE_RENDERERS.put("Blog Header 1", HtmlBuilder::renderBlogThumbnailGrid); } - - // -} + // + public static String renderHeader(Map data) { + StringBuilder html = new StringBuilder(); + + html.append("
"); + // Safely cast children list + List> children = (List>) data.get("children"); + + if (children != null) { + // Logo + children.stream().filter(child -> "logo".equals(child.get("type"))).findFirst().ifPresent(logo -> { + String logoContent = (String) logo.get("content"); + html.append("
").append(logoContent).append("
"); + }); + + // Navigation + children.stream().filter(child -> "nav".equals(child.get("type"))).findFirst().ifPresent(nav -> { + html.append(""); + }); + } + + // Button + List> childrens = (List>) data.get("children"); + Map button = null; + if (childrens != null) { + button = childrens.stream().filter(child -> "button".equals(child.get("type"))).findFirst().orElse(null); + } + + if (button != null) { + String buttonText = (String) ((Map) button).get("content"); + html.append(""); + } + + html.append("
"); + + return html.toString(); + } + + public static String renderTestimonialSection() { + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Heading + html.append("

Customer Testimonials

"); + html.append("

What our clients are saying about us

"); + + // Grid start + html.append("
"); + + // Testimonial 1 + html.append(renderTestimonialCard("★★★★★", "This platform transformed the way we manage projects!", + "avatar1.png", "Alice Johnson", "Project Manager, TechCorp")); + + // Testimonial 2 + html.append(renderTestimonialCard("★★★★★", "A game changer for our development process!", "avatar2.png", + "Michael Smith", "CEO, Innovate Inc.")); + + // Testimonial 3 + html.append(renderTestimonialCard("★★★★★", "I can't imagine working without this tool!", "avatar3.png", + "Sarah Lee", "Lead Developer, WebSolutions")); + + html.append("
"); // End grid + + html.append("
"); + + return html.toString(); + } + + private static String renderTestimonialCard(String stars, String quote, String avatarSrc, String name, + String position) { + return new StringBuilder().append("
").append("
") + .append(stars).append("
").append("

").append(quote).append("

") + .append("
").append("\"").append(name).append("\"").append("").append(name).append("") + .append("

").append(position).append("

").append("
").append("
").toString(); + } + + private static String renderTestimonialSection(Map sectionData) { + StringBuilder html = new StringBuilder(); + + html.append("
"); + + html.append("

Customer Testimonials

"); + html.append("

What our clients are saying about us

"); + + html.append("
"); + + List> cards = new ArrayList<>(); + + Object childrenObj = sectionData.get("children"); + if (childrenObj instanceof List) { + List childrenList = (List) childrenObj; + if (childrenList.size() > 2 && childrenList.get(2) instanceof Map) { + Map thirdChild = (Map) childrenList.get(2); + Object grandChildrenObj = thirdChild.get("children"); + if (grandChildrenObj instanceof List) { + cards = (List>) grandChildrenObj; + } + } + } + + for (Map card : cards) { + html.append("
"); + + List> cardChildren = (List>) card.get("children"); + for (Map child : cardChildren) { + String type = (String) child.get("type"); + switch (type) { + case "div": + String divClass = (String) child.get("class"); + if ("stars".equals(divClass)) { + html.append("
").append(child.get("content")).append("
"); + } else if ("author".equals(divClass)) { + html.append("
"); + List> authorChildren = (List>) child.get("children"); + for (Map authorChild : authorChildren) { + String authorType = (String) authorChild.get("type"); + switch (authorType) { + case "img": + html.append("\"").append(authorChild.get("alt")).append("\"/"); + break; + case "strong": + html.append("").append(authorChild.get("content")).append(""); + break; + case "p": + html.append("

").append(authorChild.get("content")).append("

"); + break; + } + } + html.append("
"); + } + break; + case "p": + html.append("

").append(child.get("content")).append("

"); + break; + } + } + + html.append("
"); + } + + html.append("
"); + return html.toString(); + } + + public static String renderFeatureSection(Map sectionData) { + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Feature Grid + html.append("
"); + + // Image Section + html.append("
") + .append("\"Feature").append("
"); + + // Content Section + html.append("
").append( + "

Unlock Your Project's Potential with Our Comprehensive Development Platform

") + .append("

Easily create and manage your projects from start to finish. Select the technologies that best suit your needs and bring your ideas to life.

") + .append("
    ").append("
  • Effortless project creation and management.
  • ") + .append("
  • Choose from a wide range of technologies.
  • ") + .append("
  • Design intuitive wireframes for your applications.
  • ").append("
").append("
"); + + html.append("
"); // End feature-grid + html.append("
"); + + return html.toString(); + } + + private static String renderFeatureGridContentSection(Map data) { + Map section = (Map) data.get("feature-section"); + List> children = (List>) section.get("children"); + + StringBuilder html = new StringBuilder(); + html.append("
"); + + for (Map grid : children) { + if (!"grid".equals(grid.get("type"))) + continue; + + List> gridChildren = (List>) grid.get("children"); + html.append("
"); + + for (Map child : gridChildren) { + String type = (String) child.get("type"); + + if ("image".equals(type)) { + String src = (String) child.get("src"); + String alt = (String) child.getOrDefault("alt", "feature image"); + html.append("
").append("\"")").append("
"); + } else if ("content".equals(type)) { + html.append("
"); + + List> contentChildren = (List>) child.get("children"); + for (Map content : contentChildren) { + String contentType = (String) content.get("type"); + + if ("heading".equals(contentType)) { + html.append("

").append(content.get("content")).append("

"); + } else if ("paragraph".equals(contentType)) { + html.append("

").append(content.get("content")) + .append("

"); + } else if ("list".equals(contentType)) { + html.append("
    "); + List> items = (List>) content.get("children"); + for (Map item : items) { + html.append("
  • ").append(item.get("content")).append("
  • "); + } + html.append("
"); + } + } + + html.append("
"); + } + } + + html.append("
"); + } + + html.append("
"); + return html.toString(); + } + + private static String renderFeatureImageGrid(Map data) { + Map section = (Map) data.get("Feature Section"); + List> images = (List>) section.get("images"); + String sectionClass = (String) section.getOrDefault("class", "image-grid"); + + StringBuilder html = new StringBuilder(); + html.append("
"); + + for (Map img : images) { + String imgClass = (String) img.getOrDefault("class", ""); + String width = (String) img.getOrDefault("width", "100%"); + String aspectRatio = (String) img.getOrDefault("aspectRatio", "1"); + + html.append("
") + .append("
").append("
"); + } + + html.append("
"); + return html.toString(); + } + + private static String renderPerfectBlogPost(Map data) { + Map post = (Map) data.get("perfect-blog-post"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Title + html.append("

").append(post.get("title")).append("

"); + + // Sections + List> sections = (List>) post.get("sections"); + html.append("
"); + for (Map section : sections) { + html.append("
").append("

") + .append(section.get("label")).append("

").append("

") + .append(section.get("description")).append("

").append("
"); + } + html.append("
"); + + // Footer + String footer = (String) post.get("footer"); + if (footer != null && !footer.isEmpty()) { + html.append("
").append("

").append(footer).append("

").append("
"); + } + + html.append("
"); + return html.toString(); + } + + private static String renderListPost(Map data) { + Map post = (Map) data.get("list-post"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Title + html.append("

").append(post.get("title")).append("

"); + + // Intro + Map intro = (Map) post.get("intro"); + html.append("
").append("

").append(intro.get("hook")).append("

") + .append("

").append(intro.get("summary")).append("

") + .append("

").append(intro.get("benefitStatement")).append("

").append("
"); + + // List Items + List> items = (List>) post.get("listItems"); + html.append("
"); + for (Map item : items) { + html.append("
").append("

") + .append(item.get("number")).append(". ").append(item.get("title")).append("

") + .append("

").append(item.get("description")).append("

").append("
"); + } + html.append("
"); + + // Conclusion + Map conclusion = (Map) post.get("conclusion"); + html.append("
").append("

").append(conclusion.get("summary")) + .append("

").append("

").append(conclusion.get("callToAction")).append("

") + .append("
"); + + html.append("
"); + return html.toString(); + } + + private static String renderClassicListPost(Map data) { + Map post = (Map) data.get("classic-list-post"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Title + html.append("

").append(post.get("title")).append("

"); + + // Hook + html.append("

").append(post.get("hook")).append("

"); + + // Content List + List> contentList = (List>) post.get("content"); + for (Map item : contentList) { + html.append("
"); + html.append("

").append(item.get("subheading")).append("

"); + html.append("

").append(item.get("description")).append("

"); + + List steps = (List) item.get("actionSteps"); + html.append("
    "); + for (String step : steps) { + html.append("
  • ").append(step).append("
  • "); + } + html.append("
"); + + html.append("
"); + } + + // Conclusion + html.append("
"); + html.append("

").append(post.get("conclusion")).append("

"); + html.append("

").append(post.get("callToAction")).append("

"); + html.append("
"); + + html.append("
"); + return html.toString(); + } + + private static String renderBlogTemplate(Map data) { + Map section = (Map) data.get("section"); + Map header = (Map) data.get("header"); + List navItems = (List) data.get("navigation"); + Map layout = (Map) data.get("layout"); + List> columns = (List>) layout.get("columns"); + + StringBuilder html = new StringBuilder(); + html.append("
"); + + // Header + html.append("
").append("").append(header.get("icon")) + .append("").append("

").append(header.get("title")).append("

").append("
"); + + // Navigation + html.append(""); + + // Layout columns + html.append("
"); + for (Map column : columns) { + String type = (String) column.get("type"); + if ("main".equals(type)) { + html.append("
"); + List> blocks = (List>) column.get("contentBlocks"); + for (Map block : blocks) { + html.append("
").append("

").append(block.get("heading")) + .append("

").append("

").append(block.get("text")).append("

").append("
"); + } + html.append("
"); + } else if ("sidebar".equals(type)) { + html.append("
"); + List widgets = (List) column.get("widgets"); + for (String widget : widgets) { + html.append("
").append("

").append(widget).append("

") + .append("
"); + } + html.append("
"); + } + } + html.append("
"); // end of layout + + html.append("
"); + return html.toString(); + } + + private static String renderHowToBlogPost(Map data) { + Map post = (Map) data.get("how-to-blog-post"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Title + html.append("

").append(post.get("title")).append("

"); + + // Hook + html.append("

").append(post.get("hook")).append("

"); + + // Content + Map content = (Map) post.get("content"); + html.append("
"); + html.append("

Approach 1

").append(content.get("approach1")).append("

"); + html.append("

Approach 2

").append(content.get("approach2")).append("

"); + html.append("
"); + + // Conclusion + Map conclusion = (Map) post.get("conclusion"); + html.append("
"); + html.append("

Recap

").append(conclusion.get("recap")).append("

"); + html.append("

Next Step

").append(conclusion.get("cta")).append("

"); + html.append("
"); + + html.append("
"); + return html.toString(); + } + + private static String renderHeroBanner(Map data) { + Map section = (Map) data.get("HeroBanner"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Headline + Map headline = (Map) section.get("headline"); + html.append("

").append(headline.get("text")) + .append("

"); + + // Subheading + Map subheading = (Map) section.get("subheading"); + html.append("

").append(subheading.get("text")) + .append("

"); + + // CTA Button + Map cta = (Map) section.get("ctaButton"); + html.append("").append(cta.get("text")) + .append(""); + + // Decorative Images + List> images = (List>) section.get("decorativeImages"); + for (Map img : images) { + html.append("\"decoration\""); + } + + html.append("
"); + return html.toString(); + } + + private static String renderContactSignupSection(Map data) { + Map section = (Map) data.get("ContactSignupSection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Left Side (Text) + Map left = (Map) section.get("left"); + Map heading = (Map) left.get("heading"); + Map description = (Map) left.get("description"); + + html.append("
").append("

") + .append(heading.get("text")).append("

").append("

").append(description.get("text")).append("

").append("
"); + + // Right Side (Form) + Map right = (Map) section.get("right"); + Map form = (Map) right.get("form"); + html.append("
").append("
"); + + List> fields = (List>) form.get("fields"); + for (Map field : fields) { + html.append(""); + } + + Map button = (Map) form.get("button"); + html.append(""); + + html.append("
"); + html.append("
"); + + return html.toString(); + } + + private static String renderCTASection(Map data) { + Map section = (Map) data.get("CTASection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + Map title = (Map) section.get("title"); + html.append("

").append(title.get("text")).append("

"); + + Map desc = (Map) section.get("description"); + html.append("

").append(desc.get("text")).append("

"); + + Map button = (Map) section.get("button"); + html.append("").append(button.get("label")) + .append(""); + + html.append("
"); + return html.toString(); + } + + private static String renderCTABlock(Map data) { + Map block = (Map) data.get("CTABlock"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Heading + Map heading = (Map) block.get("heading"); + html.append("

").append(heading.get("text")) + .append("

"); + + // Description + Map description = (Map) block.get("description"); + html.append("

").append(description.get("text")) + .append("

"); + + // Buttons + List> buttons = (List>) block.get("buttons"); + html.append("
"); + for (Map button : buttons) { + html.append("").append(button.get("label")) + .append(""); + } + html.append("
"); + + html.append("
"); + return html.toString(); + } + + private static String renderSubscriptionSection(Map data) { + Map section = (Map) data.get("SubscriptionSection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + html.append("
"); + Map heading = (Map) section.get("heading"); + Map desc = (Map) section.get("description"); + html.append("

").append(heading.get("text")) + .append("

"); + html.append("

").append(desc.get("text")).append("

"); + html.append("
"); + + html.append("
"); + Map form = (Map) section.get("form"); + html.append("
"); + + List> fields = (List>) form.get("fields"); + for (Map field : fields) { + html.append(""); + } + + Map button = (Map) form.get("button"); + html.append(""); + + Map disclaimer = (Map) form.get("disclaimer"); + Map link = (Map) disclaimer.get("link"); + html.append("

").append(disclaimer.get("text")).append(" ") + .append(link.get("label")).append("

"); + + html.append(""); + html.append("
"); + + html.append("
"); + return html.toString(); + } + + private static String renderContactUsSection(Map data) { + StringBuilder html = new StringBuilder(); + Map section = (Map) data.get("ContactUsSection"); + + // Get In Touch Block + Map getInTouch = (Map) section.get("getInTouch"); + html.append("
"); + html.append("

").append(getInTouch.get("heading")).append("

"); + html.append("
"); + List> columns = (List>) getInTouch.get("columns"); + for (Map col : columns) { + html.append("
").append("
").append(col.get("icon")) + .append("
").append("

").append(col.get("title")).append("

"); + List lines = (List) col.get("lines"); + for (String line : lines) { + html.append("

").append(line).append("

"); + } + html.append("
"); + } + html.append("
"); + + // Message Us Block + Map messageUs = (Map) section.get("messageUs"); + html.append("
"); + Map left = (Map) messageUs.get("leftColumn"); + html.append("
").append("

").append(left.get("heading")).append("

") + .append("

").append(left.get("description")).append("

").append("") + .append(left.get("awardText")).append("").append("
"); + + Map form = (Map) messageUs.get("form"); + List> fields = (List>) form.get("fields"); + + html.append("
"); + for (Map field : fields) { + String type = (String) field.get("type"); + String name = (String) field.get("name"); + String placeholder = (String) field.get("placeholder"); + if ("textarea".equals(type)) { + int rows = (int) field.getOrDefault("rows", 4); + html.append(""); + } else { + html.append(""); + } + } + html.append(""); + html.append(""); + html.append("
"); + + return html.toString(); + } + + private static String renderContactPage(Map data) { + StringBuilder html = new StringBuilder(); + html.append("
"); + + List> children = (List>) data.get("children"); + + for (Map block : children) { + String type = getString(block, "type"); + String className = getString(block, "class"); + Map style = (Map) block.get("style"); + String styleAttr = (style != null && style.containsKey("backgroundImage")) + ? " style=\"background-image:" + style.get("backgroundImage") + ";\"" + : ""; + + html.append("<").append(type).append(" class=\"").append(className).append("\"").append(styleAttr) + .append(">"); + + List> subChildren = (List>) block.get("children"); + for (Map child : subChildren) { + String childType = getString(child, "type"); + String childClass = getString(child, "class"); + String content = getString(child, "content"); + String src = getString(child, "src"); + String name = getString(child, "name"); + String placeholder = getString(child, "placeholder"); + String inputType = getString(child, "inputType"); + + if ("ul".equals(childType)) { + html.append("
    "); + List> items = (List>) child.get("children"); + for (Map item : items) { + html.append("
  • ").append(getString(item, "content")).append("
  • "); + } + html.append("
"); + } else if ("iframe".equals(childType)) { + html.append(""); + } else if ("form".equals(childType)) { + html.append("
"); + List> fields = (List>) child.get("children"); + for (Map field : fields) { + String fType = getString(field, "type"); + if ("input".equals(fType)) { + html.append(""); + } else if ("textarea".equals(fType)) { + html.append(""); + } else if ("button".equals(fType)) { + html.append(""); + } else { + html.append("<").append(fType).append(" class=\"").append(field.get("class")).append("\">") + .append(field.get("content")).append(""); + } + } + html.append(""); + } else { + html.append("<").append(childType).append(" class=\"").append(childClass).append("\">") + .append(content).append(""); + } + } + + html.append(""); + } + + html.append("
"); + return html.toString(); + } + + private static String renderContactSplitSection(Map data) { + StringBuilder html = new StringBuilder(); + html.append("
"); + + List> children = (List>) data.get("children"); + for (Map panel : children) { + String className = getString(panel, "class"); + String type = getString(panel, "type"); + Map style = (Map) panel.get("style"); + String styleAttr = (style != null && style.containsKey("backgroundImage")) + ? " style=\"background-image:" + style.get("backgroundImage") + ";\"" + : ""; + + html.append("<").append(type).append(" class=\"").append(className).append("\"").append(styleAttr) + .append(">"); + + List> subChildren = (List>) panel.get("children"); + for (Map sub : subChildren) { + String subType = getString(sub, "type"); + String subClass = getString(sub, "class"); + List> subContent = (List>) sub.get("children"); + + if ("form".equals(subType)) { + html.append("
"); + for (Map field : subContent) { + String fType = getString(field, "type"); + String fClass = getString(field, "class", ""); + String placeholder = getString(field, "placeholder"); + String name = getString(field, "name"); + if ("input".equals(fType)) { + String inputType = getString(field, "inputType"); + html.append(""); + } else if ("textarea".equals(fType)) { + html.append(""); + } else if ("button".equals(fType)) { + html.append(""); + } + } + html.append(""); + } else { + html.append("<").append(subType).append(" class=\"").append(subClass).append("\">"); + for (Map el : subContent) { + String eType = getString(el, "type"); + String eClass = getString(el, "class"); + String content = getString(el, "content").replace("\n", "
"); + + html.append("<").append(eType).append(" class=\"").append(eClass).append("\">").append(content) + .append(""); + } + html.append(""); + } + } + html.append(""); + } + + html.append("
"); + return html.toString(); + } + + private static String renderContactInfoSection(Map data) { + StringBuilder html = new StringBuilder(); + html.append("
"); + + List> children = (List>) data.get("children"); + for (Map element : children) { + String type = getString(element, "type"); + String className = getString(element, "class"); + String content = getString(element, "content"); + String src = getString(element, "src"); + String alt = getString(element, "alt"); + + if ("img".equals(type)) { + html.append("\"")"); + } else if ("div".equals(type)) { + html.append("
"); + + List> innerChildren = (List>) element.get("children"); + for (Map inner : innerChildren) { + String innerType = getString(inner, "type"); + String innerClass = getString(inner, "class"); + String innerContent = getString(inner, "content"); + + html.append("<").append(innerType).append(" class=\"").append(innerClass).append("\">") + .append(innerContent.replace("\n", "
")).append(""); + } + + html.append("
"); + } else { + html.append("<").append(type).append(" class=\"").append(className).append("\">").append(content) + .append(""); + } + } + + html.append("
"); + return html.toString(); + } + + private static String renderContactFormSection(Map data) { + Map section = data; + StringBuilder html = new StringBuilder(); + html.append("
"); + + List> children = (List>) section.get("children"); + + for (Map block : children) { + String blockClass = getString(block, "class"); + String blockType = getString(block, "type"); + List> blockChildren = (List>) block.get("children"); + + html.append("<").append(blockType).append(" class=\"").append(blockClass).append("\">"); + + for (Map element : blockChildren) { + String type = getString(element, "type"); + + if ("input".equals(type)) { + String inputType = getString(element, "fieldType"); + String name = getString(element, "name"); + String placeholder = getString(element, "placeholder"); + + html.append(""); + } else if ("textarea".equals(type)) { + html.append(""); + } else if ("label".equals(type)) { + html.append(""); + } else if ("button".equals(type)) { + html.append(""); + } else { + html.append("<").append(type).append(" class=\"").append(getString(element, "class")).append("\">") + .append(getString(element, "content")).append(""); + } + } + + html.append(""); + } + + html.append("
"); + return html.toString(); + } + + private static String renderSinglePlanSection(Map data) { + Map section = (Map) data.get("PricingSection"); + if (section == null) { + section = data; + } + + StringBuilder html = new StringBuilder(); + html.append("
"); + + List> children = (List>) section.get("children"); + + for (Map block : children) { + String blockClass = getString(block, "class"); + List> blockChildren = (List>) block.get("children"); + + html.append("
"); + for (Map element : blockChildren) { + String type = getString(element, "type"); + String className = getString(element, "class"); + String content = getString(element, "content"); + String href = getString(element, "href"); + + if ("a".equals(type)) { + html.append("") + .append(content).append(""); + } else { + html.append("<").append(type).append(" class=\"").append(className).append("\">").append(content) + .append(""); + } + } + html.append("
"); + } + + html.append("
"); + return html.toString(); + } + + private static String renderTogglePricingSection(Map data) { + Map section = (Map) data.get("PricingSection"); + String title = getString(section, "title"); + String subtitle = getString(section, "subtitle"); + Map toggle = (Map) section.get("toggle"); + List toggleOptions = (List) toggle.get("options"); + + StringBuilder html = new StringBuilder(); + html.append("
"); + + // Header + html.append("

").append(title).append("

"); + html.append("

").append(subtitle).append("

"); + + // Toggle Switch + html.append("
"); + for (String option : toggleOptions) { + html.append(""); + } + html.append("
"); + + // Plans + html.append("
"); + List> plans = (List>) section.get("plans"); + for (Map plan : plans) { + boolean highlight = Boolean.TRUE.equals(plan.get("highlight")); + String cardClass = "pricing-card" + (highlight ? " highlight" : ""); + + html.append("
").append("

").append(getString(plan, "name")) + .append("

").append("
").append(getString(plan, "price")).append("
") + .append("
").append(getString(plan, "savings")).append("
") + .append("
").append(getString(plan, "bonus")).append("
") + .append("
    "); + + for (String feature : (List) plan.get("features")) { + html.append("
  • ").append(feature).append("
  • "); + } + + html.append("
").append("").append("
"); + } + + html.append("
"); + return html.toString(); + } + + private static String renderAdvancedPricingSection(Map data) { + Map section = (Map) data.get("PricingSection"); + Map header = (Map) section.get("header"); + List tabs = (List) section.get("tabs"); + Map hub = (Map) section.get("hub"); + List> plans = (List>) section.get("plans"); + + String themeColor = getString(header, "themeColor"); + + StringBuilder html = new StringBuilder(); + html.append("
"); + + // Header + html.append("
").append("

") + .append(header.get("title")).append("

").append("

").append(header.get("subtitle")).append("

") + .append("
"); + + // Tabs + html.append("
"); + for (String tab : tabs) { + html.append(""); + } + html.append("
"); + + // Hub Info + html.append("
").append("

").append(hub.get("name")).append("

").append("

") + .append(hub.get("description")).append("

").append("") + .append(hub.get("link")).append("").append("
"); + + // Plans + html.append("
"); + for (Map plan : plans) { + html.append("
").append("

").append(plan.get("name")).append("

") + .append("

").append(plan.get("priceMonthly")).append("

") + .append("

").append(plan.get("priceYearly")).append("

") + .append("

").append(plan.get("contacts")).append(" marketing contacts

") + .append("

").append(plan.get("notes")).append("

") + .append("") + .append("
"); + } + html.append("
"); + + return html.toString(); + } + + private static String renderPricingSectionDark(Map data) { + Map section = (Map) data.get("PricingSectionDark"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Badge, title, description + html.append("

").append(getString(section, "badge")).append("

"); + html.append("

").append(getString(section, "title")).append("

"); + html.append("

").append(getString(section, "description")).append("

"); + + // Cards + html.append("
"); + List> cards = (List>) section.get("cards"); + for (Map card : cards) { + boolean highlight = Boolean.TRUE.equals(card.get("highlight")); + String cardClass = "pricing-card" + (highlight ? " highlight" : ""); + + html.append("
").append("

") + .append(getString(card, "badge")).append("

").append("

") + .append(getString(card, "type")).append("

").append("

") + .append(getString(card, "price")).append("

"); + + html.append("
    "); + for (String feature : (List) card.get("features")) { + html.append("
  • ").append(feature).append("
  • "); + } + html.append("
"); + + Map button = (Map) card.get("button"); + String btnStyle = getString(button, "style"); + html.append(""); + + html.append("
"); + } + html.append("
"); + + return html.toString(); + } + + private static String renderPricingSection(Map data) { + Map section = (Map) data.get("PricingSection"); + String sectionClass = getString(section, "class"); + + Map tagline = (Map) section.get("tagline"); + Map title = (Map) section.get("title"); + Map description = (Map) section.get("description"); + List> cards = (List>) section.get("cards"); + + StringBuilder html = new StringBuilder(); + html.append("
"); + + // Section heading + html.append("

").append(getString(tagline, "text")) + .append("

"); + html.append("

").append(getString(title, "text")) + .append("

"); + html.append("

") + .append(getString(description, "text")).append("

"); + + // Cards + html.append("
"); + for (Map card : cards) { + List features = (List) card.get("features"); + Map button = (Map) card.get("button"); + + html.append("
").append("

") + .append(getString(card, "plan")).append("

").append("

") + .append(getString(card, "monthly")).append(" / mo

").append("

") + .append(getString(card, "yearly")).append(" / yr

").append("
    "); + for (String feature : features) { + html.append("
  • ").append(feature).append("
  • "); + } + html.append("
").append("").append("
"); + } + html.append("
"); + + return html.toString(); + } + + private static String renderTestimonialGrid(Map data) { + Map section = (Map) data.get("TestimonialGrid"); + String sectionClass = getString(section, "class"); + List> children = (List>) section.get("children"); + + StringBuilder html = new StringBuilder(); + html.append("
"); + + for (Map child : children) { + String type = getString(child, "type"); + String childClass = getString(child, "class"); + switch (type) { + case "h2": + case "p": + html.append("<").append(type).append(" class=\"").append(childClass).append("\">") + .append(getString(child, "content")).append(""); + break; + case "div": + html.append("
"); + List> cards = (List>) child.get("children"); + for (Map card : cards) { + html.append("
"); + for (Map item : (List>) card.get("children")) { + String itemType = getString(item, "type"); + String itemClass = getString(item, "class"); + switch (itemType) { + case "div": + if ("author".equals(itemClass)) { + html.append("
"); + List> authorItems = (List>) item + .get("children"); + for (Map authorItem : authorItems) { + String t = getString(authorItem, "type"); + switch (t) { + case "img": + html.append("\"").append(getString(authorItem,"); + break; + case "strong": + html.append("").append(getString(authorItem, "content")) + .append(""); + break; + case "p": + html.append("

").append(getString(authorItem, "content")).append("

"); + break; + } + } + html.append("
"); + } else { + html.append("
") + .append(getString(item, "content")).append("
"); + } + break; + case "p": + html.append("

").append(getString(item, "content")).append("

"); + break; + } + } + html.append("
"); + } + html.append("
"); + break; + } + } + + html.append("
"); + return html.toString(); + } + + private static String renderSimpleTestimonialSection(Map data) { + Map section = (Map) data.get("TestimonialSection"); + String sectionClass = getString(section, "class"); + + Map logo = (Map) section.get("logo"); + String quote = getString(section, "quote"); + Map author = (Map) section.get("author"); + + StringBuilder html = new StringBuilder(); + html.append("
"); + + // Logo + html.append("
").append("\"").append(getString(logo,").append("
"); + + // Quote + html.append("
").append(quote).append("
"); + + // Author block + html.append("
").append("\"").append(getString(author,").append("
").append("") + .append(getString(author, "name")).append("
").append("") + .append(getString(author, "position")).append("").append("
"); + + html.append("
"); + return html.toString(); + } + + private static String renderTestimonialSection3(Map data) { + Map section = (Map) data.get("TestimonialSection"); + String themeClass = "testimonial-section " + getString(section, "theme"); // e.g., "dark" + String heading = getString(section, "heading"); + List> cards = (List>) section.get("cards"); + + StringBuilder html = new StringBuilder(); + html.append("
"); + + // Heading + html.append("

").append(heading).append("

"); + + // Cards container + html.append("
"); + for (Map card : cards) { + Map author = (Map) card.get("author"); + html.append("
").append("

") + .append(getString(card, "quote")).append("

").append("
") + .append("\"").append(getString(author,") + .append("
").append("").append(getString(author, "name")) + .append("
").append("").append(getString(author, "position")).append("") + .append("
"); + } + html.append("
"); + return html.toString(); + } + + private static String renderCtaSection(Map data) { + StringBuilder html = new StringBuilder(); + String sectionClass = getString(data, "class"); + List> children = (List>) data.get("children"); + + html.append("
"); + + for (Map child : children) { + String type = getString(child, "type"); + switch (type) { + case "h2": + html.append("

").append(getString(child, "content")).append("

"); + break; + case "p": + html.append("

").append(getString(child, "content")).append("

"); + break; + case "a": + html.append("").append(getString(child, "content")).append(""); + break; + } + } + + html.append("
"); + return html.toString(); + } + + private static String renderClientTestimonialStructured(Map data) { + StringBuilder html = new StringBuilder(); + String sectionClass = getString(data, "class"); + Map style = (Map) data.get("style"); + String bgStyle = style != null ? " style=\"background-image: " + getString(style, "backgroundImage") + ";\"" + : ""; + + html.append("
"); + + List> children = (List>) data.get("children"); + for (Map child : children) { + String type = getString(child, "type"); + String childClass = getString(child, "class"); + + switch (type) { + case "img": + html.append("\"").append(getString(child,"); + break; + case "h2": + case "p": + html.append("<").append(type).append(" class=\"").append(childClass).append("\">") + .append(getString(child, "content")).append(""); + break; + case "div": + html.append("
"); + List> innerChildren = (List>) child.get("children"); + for (Map item : innerChildren) { + String innerType = getString(item, "type"); + String innerClass = getString(item, "class"); + switch (innerType) { + case "img": + html.append("\"").append(getString(item,"); + break; + case "p": + html.append("

").append(getString(item, "content")) + .append("

"); + break; + case "div": // rating + int rating = (int) item.getOrDefault("rating", 0); + html.append("
"); + for (int i = 0; i < rating; i++) { + html.append("⭐"); + } + html.append("
"); + break; + } + } + html.append("
"); + break; + case "a": + html.append("").append(getString(child, "content")).append(""); + break; + } + } + + html.append("
"); + return html.toString(); + } + + private static String renderClientTestimonialSection(Map data) { + Map section = (Map) data.get("ClientTestimonialSection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Logo & Title + html.append("
").append("\"Logo\"").append("

") + .append(getString(section, "title")).append("

").append("
"); + + // Testimonial + List> testimonials = (List>) section.get("testimonials"); + if (!testimonials.isEmpty()) { + Map t = testimonials.get(0); + html.append("
").append("\"").append(getString(t,") + .append("

").append(getString(t, "name")).append("

") + .append("
"); + int stars = (int) t.getOrDefault("rating", 0); + for (int i = 0; i < stars; i++) { + html.append("⭐"); + } + html.append("
").append("

").append(getString(t, "quote")).append("

") + .append("
"); + } + + // CTA Button + Map cta = (Map) section.get("cta"); + html.append("") + .append(getString(cta, "label")).append(""); + + // Contact Info + Map contact = (Map) section.get("contactInfo"); + html.append("
").append("

Phone: ") + .append(getString(contact, "phone")).append("

").append("

Email: ") + .append(getString(contact, "email")).append("

").append("

Website: ") + .append(getString(contact, "website")).append("

").append("
"); + + html.append("
"); + return html.toString(); + } + + private static String renderTeamShowcase(Map data) { + StringBuilder html = new StringBuilder(); + List> children = (List>) data.get("children"); + + html.append("
"); + + for (Map child : children) { + String type = getString(child, "type"); + + switch (type) { + case "heading": + html.append("

").append(getString(child, "content")).append("

"); + break; + case "subtitle": + html.append("

").append(getString(child, "content")).append("

"); + break; + case "group-list": + List> groups = (List>) child.get("children"); + for (Map group : groups) { + String groupName = getString(group, "groupName"); + html.append("
").append("

").append(groupName) + .append("

").append("
"); + + List> members = (List>) group.get("children"); + for (Map member : members) { + html.append("
").append("\"")").append("

") + .append(getString(member, "name")).append("

").append("

") + .append(getString(member, "role")).append("

").append("
"); + } + + html.append("
"); // close team-grid and team-group + } + break; + } + } + + html.append("
"); + return html.toString(); + } + + private static String renderTeamGridSection(Map data) { + Map section = (Map) data.get("children") != null ? data + : Collections.singletonMap("children", Collections.emptyList()); + + List> children = (List>) section.get("children"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + for (Map child : children) { + String type = getString(child, "type"); + + switch (type) { + case "tag": + html.append("").append(getString(child, "content")).append(""); + break; + case "heading": + html.append("

").append(getString(child, "content")).append("

"); + break; + case "description": + html.append("

").append(getString(child, "content")).append("

"); + break; + case "grid": + html.append("
"); + List> members = (List>) child.get("children"); + for (Map member : members) { + html.append("
").append("\"").append(getString(member,").append("

") + .append(getString(member, "name")).append("

").append("

") + .append(getString(member, "description")).append("

").append("
"); + } + html.append("
"); + break; + } + } + + html.append("
"); + return html.toString(); + } + + private static String renderTeamSlider(Map data) { + Map slider = (Map) data.get("teamSlider"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Title and subtitle + html.append("
").append("

").append(getString(slider, "title")).append("

") + .append("

").append(getString(slider, "subtitle")).append("

").append("
"); + + List> members = (List>) slider.get("members"); + + // Slider wrapper + html.append("
"); + for (Map member : members) { + html.append("
") + + .append("\"")") + + .append("

").append(getString(member, "name")).append("

").append("

") + .append(getString(member, "role")).append("

").append("

") + .append(getString(member, "bio")).append("

") + + .append("
"); + List> socials = (List>) member.get("socials"); + for (Map social : socials) { + html.append(""); + } + html.append("
") + + .append("View Profile").append("
"); + } + html.append("
"); + + return html.toString(); + } + + private static String renderTeamSectionTemplate(Map data) { + Map template = (Map) data.get("teamSectionTemplate"); + StringBuilder html = new StringBuilder(); + + List> variations = (List>) template.get("variations"); + for (Map variation : variations) { + String layout = getString(variation, "layout"); + String sectionTitle = getString(variation, "sectionTitle"); + + html.append("
").append("

") + .append(sectionTitle).append("

"); + + // Optional category tags (highlighted layout only) + if (variation.containsKey("categories")) { + List categories = (List) variation.get("categories"); + html.append("
"); + for (String cat : categories) { + html.append("").append(cat).append(""); + } + html.append("
"); + } + + // Highlighted member + if (variation.containsKey("highlightedMember")) { + Map highlight = (Map) variation.get("highlightedMember"); + html.append("
").append("\"").append(getString(highlight,").append("

").append(getString(highlight, "name")).append("

") + .append("

").append(getString(highlight, "role")).append("

") + .append("

").append(getString(highlight, "bio")).append("

") + .append("
"); + + List socials = (List) highlight.get("socials"); + for (String s : socials) { + html.append(""); + } + html.append("
"); + } + + // Member cards + List> members = (List>) variation.get("members"); + html.append("
"); + for (Map member : members) { + html.append("
").append("\"").append(getString(member,").append("

") + .append(getString(member, "name")).append("

").append("

") + .append(getString(member, "role")).append("

").append("
"); + } + html.append("
"); + } + + return html.toString(); + } + + private static String renderTeamSection(Map data) { + Map section = (Map) data.get("teamSection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Title and description + html.append("
").append("

").append(getString(section, "title")).append("

") + .append("

").append(getString(section, "description")).append("

").append("
"); + + // Member cards + List> members = (List>) section.get("members"); + html.append("
"); + for (Map member : members) { + html.append("
").append("\"").append(getString(member,").append("

") + .append(getString(member, "name")).append("

").append("

").append(getString(member, "role")) + .append("

").append("
"); + + List socials = (List) member.get("socials"); + for (String icon : socials) { + html.append(""); + } + + html.append("
"); + } + html.append("
"); + + // Button + Map button = (Map) section.get("button"); + html.append(""); + + html.append("
"); + return html.toString(); + } + + private static String renderSimpleBlogSection(Map data) { + StringBuilder html = new StringBuilder(); + + String section = getString(data, "section"); + Map heading = (Map) data.get("heading"); + + html.append("
"); + + // Section heading + html.append("
").append("").append(section) + .append("").append("

") + .append(getString(heading, "title").replace(getString(heading, "highlighted"), + "" + getString(heading, "highlighted") + "")) + .append("

").append("

").append(getString(heading, "description")).append("

") + .append("
"); + + // Blog post grid + List> posts = (List>) data.get("posts"); + html.append("
"); + for (Map post : posts) { + html.append("
").append("\"").append(getString(post,") + .append("
").append("") + .append(getString(post, "date")).append("").append("") + .append(getString(post, "category")).append("").append("

") + .append(getString(post, "title")).append("

").append("

") + .append(getString(post, "description")).append("

").append("") + .append(getString(post, "cta")).append("").append("
"); + } + html.append("
"); + return html.toString(); + } + + private static String renderBlogPage(Map data) { + Map page = (Map) data.get("blogPage"); + StringBuilder html = new StringBuilder(); + + // Header + Map header = (Map) page.get("header"); + html.append("
").append("
").append(getString(header, "logo")) + .append("
").append("
"); + + List socialIcons = (List) header.get("socialIcons"); + for (String icon : socialIcons) { + html.append(""); + } + List actions = (List) header.get("actions"); + for (String action : actions) { + html.append(""); + } + html.append("
"); + + // Hero Section + Map heroSection = (Map) page.get("heroSection"); + Map mainPost = (Map) heroSection.get("mainPost"); + + html.append("
").append("
").append("\"").append(getString(mainPost,").append("").append(getString(mainPost, "category")) + .append("").append("

").append(getString(mainPost, "title")).append("

") + .append("

By ").append(getString(mainPost, "author")).append("

") + .append("
"); + + List> featured = (List>) heroSection.get("featuredPosts"); + html.append("
"); + for (Map post : featured) { + html.append("
").append("\"").append(getString(post,").append("

") + .append(getString(post, "title")).append("

").append("
"); + } + html.append("
"); + + // Post Grid + List> posts = (List>) page.get("postGrid"); + html.append("
"); + for (Map post : posts) { + html.append("
").append("\"").append(getString(post,").append("

") + .append(getString(post, "title")).append("

").append("
"); + } + html.append("
"); + + return html.toString(); + } + + private static String renderBlogHomePage(Map data) { + Map page = (Map) data.get("blogHomePage"); + StringBuilder html = new StringBuilder(); + + // Top Navigation + html.append("
").append("
").append(getString(page, "logo")) + .append("
").append("
"); + List icons = (List) page.get("topBarIcons"); + for (String icon : icons) { + html.append(""); + } + html.append("
"); + + // Hero Section + Map hero = (Map) page.get("heroSection"); + html.append("
").append("") + .append(getString(hero, "label")).append("").append("

").append(getString(hero, "title")) + .append("

").append("

").append(getString(hero, "excerpt")).append("

") + .append("
").append(getString(hero, "author")).append(" • ") + .append(getString(hero, "date")).append("
"); + + // Editor's Pick + html.append("
").append("

Editor’s Pick

"); + List> editorPick = (List>) page.get("editorPick"); + for (Map pick : editorPick) { + html.append("
").append("\"").append(getString(pick,").append("

") + .append(getString(pick, "title")).append("

").append("
"); + } + html.append("
"); + + // Trending Section + html.append("
").append("

Trending

"); + List> trending = (List>) page.get("trending"); + for (Map trend : trending) { + html.append("
").append("").append(trend.get("rank")) + .append("").append("\"")").append("

").append(getString(trend, "title")) + .append("

").append("
"); + } + html.append("
"); + + return html.toString(); + } + + private static String renderBlogPreviewSection(Map data) { + Map section = (Map) data.get("blogPreviewSection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Section header + html.append("
").append("") + .append(getString(section, "sectionLabel")).append("").append("

") + .append(getString(section, "heading")).append("

").append("

") + .append(getString(section, "subtext")).append("

").append("
"); + + // Blog cards + List> blogs = (List>) section.get("blogs"); + html.append("
"); + for (Map blog : blogs) { + html.append("
") + + .append("
").append("\"").append(getString(blog,") + .append("
") + + .append("
").append("
") + .append("").append(getString(blog, "category")).append("") + .append(" • ").append(getString(blog, "readTime")).append("") + .append("
").append("

").append(getString(blog, "title")).append("

").append("

") + .append(getString(blog, "excerpt")).append("

").append("Read more →") + .append("
") + + .append("
"); + } + html.append("
"); + + // CTA + Map viewAll = (Map) section.get("viewAll"); + html.append(""); + + html.append("
"); + return html.toString(); + } + + private static String renderBlogListSection(Map data) { + Map section = (Map) data.get("blogListSection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Section header + html.append("
").append("

").append(getString(section, "title")).append("

") + .append("

").append(getString(section, "subtitle")).append("

").append("
"); + + // Blog cards + List> blogs = (List>) section.get("blogs"); + html.append("
"); + + for (Map blog : blogs) { + html.append("
"); + + // Blog image + html.append("
").append("\"").append(getString(blog,").append("
"); + + // Blog content + html.append("
").append("") + .append(getString(blog, "category")).append("").append("

") + .append(getString(blog, "title")).append("

").append("

") + .append(getString(blog, "description")).append("

").append("
") + .append("").append(getString(blog, "author")).append("").append(" • ") + .append("").append(getString(blog, "date")).append("").append(" • ") + .append("").append(getString(blog, "readTime")).append("") + .append("
").append("
"); + + html.append("
"); // blog-card + } + + html.append("
"); // blog-grid + + // CTA Button + Map cta = (Map) section.get("cta"); + html.append(""); + + html.append("
"); + return html.toString(); + } + + private static String renderFooter1Component(Map data) { + StringBuilder html = new StringBuilder(); + + String type = getString(data, "type", "footer"); + String clazz = getString(data, "class", "footer-1"); + + html.append("<").append(type).append(" class=\"").append(clazz).append("\">"); + + List> children = getChildren(data); + for (Map child : children) { + html.append(renderFooter1Node(child)); + } + + html.append(""); + return html.toString(); + } + + private static String renderFooter1Node(Map node) { + StringBuilder html = new StringBuilder(); + + String type = getString(node, "type"); + String clazz = getString(node, "class"); + String content = getString(node, "content"); + List> children = getChildren(node); + + switch (type) { + case "div": + case "section": + html.append("<").append(type); + if (!clazz.isEmpty()) { + html.append(" class=\"").append(clazz).append("\""); + } + html.append(">"); + for (Map child : children) { + html.append(renderFooter1Node(child)); + } + html.append(""); + break; + + case "h1": + case "h2": + case "h3": + case "h4": + case "p": + html.append("<").append(type); + if (!clazz.isEmpty()) { + html.append(" class=\"").append(clazz).append("\""); + } + html.append(">").append(content).append(""); + break; + + case "ul": + html.append(""); + for (Map li : children) { + html.append(renderFooter1Node(li)); + } + html.append(""); + break; + + case "li": + html.append("").append(content).append(""); + break; + + case "a": + String href = getString(node, "href", "#"); + html.append("").append(content).append(""); + break; + + case "img": + String src = getString(node, "src"); + String alt = getString(node, "alt", "image"); + html.append("\"").append(alt).append("\"");"); + break; + + default: + // fallback to div wrapper + html.append("").append(content); + for (Map child : children) { + html.append(renderFooter1Node(child)); + } + html.append(""); + } + + return html.toString(); + } + + private static String renderCleanFooter(Map data) { + Map footer = (Map) data.get("Footer"); + StringBuilder html = new StringBuilder(); + + String background = getString(footer, "background", "#f5f5f5"); + String padding = getString(footer, "padding", "40px"); + String fontFamily = getString(footer, "fontFamily", "sans-serif"); + + html.append("
"); + + html.append("
"); + + // Logo + Map logo = (Map) footer.get("Logo"); + html.append("
") + .append(getString(logo, "text", "Logo")).append("
"); + + // Address + html.append("
").append("

").append(getString(footer, "Address", "")) + .append("

").append("
"); + + // Contact + Map contact = (Map) footer.get("Contact"); + html.append("
"); + if (contact.containsKey("phone")) { + html.append("

Phone: ").append(getString(contact, "phone")).append("

"); + } + if (contact.containsKey("email")) { + html.append("

Email: ").append(getString(contact, "email")).append("

"); + } + html.append("
"); + + // Social Icons + List> socials = (List>) footer.get("SocialLinks"); + html.append("
"); + for (Map s : socials) { + String icon = getString(s, "platform").toLowerCase().replaceAll("[^a-z0-9]", ""); + html.append(""); + } + html.append("
"); + + html.append("
"); // footer-top + + // Footer Links + Map>> links = (Map>>) footer.get("Links"); + html.append("
"); + + for (Map.Entry>> entry : links.entrySet()) { + html.append(""); + } + + html.append("
"); // footer-links + + html.append("
"); + return html.toString(); + } + + private static String renderStructuredFooter(Map data) { + Map footer = (Map) data.get("Footer"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // ✅ Top Bar + Map topBar = (Map) footer.get("topBar"); + if (topBar != null) { + html.append("
").append("").append(getString(topBar, "text")) + .append("").append("
"); + List> socials = (List>) topBar.get("socialLinks"); + for (Map social : socials) { + html.append("").append("") + .append(""); + } + html.append("
"); + } + + // ✅ Main Columns + List> columns = (List>) footer.get("columns"); + html.append("
"); + for (Map col : columns) { + html.append("
").append("

").append(getString(col, "title")).append("

"); + + // Content block + if (col.containsKey("content")) { + html.append("

").append(getString(col, "content")).append("

"); + } + + // Link block + if (col.containsKey("links")) { + List> links = (List>) col.get("links"); + for (Map link : links) { + html.append("") + .append(getString(link, "label")).append(""); + } + } + + // Info block + if (col.containsKey("info")) { + Map info = (Map) col.get("info"); + html.append("
    "); + if (info.containsKey("address")) + html.append("
  • ").append(getString(info, "address")).append("
  • "); + if (info.containsKey("email")) + html.append("
  • ").append(getString(info, "email")).append("
  • "); + if (info.containsKey("phone")) + html.append("
  • ").append(getString(info, "phone")).append("
  • "); + if (info.containsKey("fax")) + html.append("
  • ").append(getString(info, "fax")).append("
  • "); + html.append("
"); + } + + html.append("
"); + } + html.append("
"); // footer-columns + + // ✅ Bottom Bar + Map bottom = (Map) footer.get("bottom"); + if (bottom != null) { + html.append("
").append("

").append(getString(bottom, "text")).append("

") + .append("
"); + } + + html.append("
"); + return html.toString(); + } + + private static String renderFooterAdvanced(Map data) { + Map footer = (Map) data.get("Footer"); + StringBuilder html = new StringBuilder(); + + String bg = getString(footer, "backgroundColor", "#111"); + String textColor = getString(footer, "textColor", "white"); + html.append("
"); + + html.append("
"); + + // Logo block + Map logo = (Map) footer.get("logo"); + html.append("
").append("

").append(getString(logo, "text")).append("

") + .append("

").append(getString(logo, "slogan")).append("

").append("
"); + + // Link Columns + List> columns = (List>) footer.get("linkColumns"); + html.append("
"); + for (Map column : columns) { + html.append("
"); + List> links = (List>) column.get("links"); + for (Map link : links) { + html.append("").append(getString(link, "label")) + .append(""); + } + html.append("
"); + } + html.append("
"); // footer-links + html.append("
"); // footer-top + + // Social icons + List> socials = (List>) footer.get("socialIcons"); + html.append("
").append("
"); + for (Map icon : socials) { + html.append(""); + } + html.append("
"); + + // Copyright + html.append("

").append(getString(footer, "copyright")).append("

"); + html.append("
"); // footer-bottom + + html.append("
"); + return html.toString(); + } + + private static String renderContactAndFooter(Map data) { + Map contact = (Map) data.get("ContactSection"); + Map footer = (Map) data.get("Footer"); + StringBuilder html = new StringBuilder(); + + // Contact Section + String bg = getString(contact, "background", "#fff"); + String textColor = getString(contact, "textColor", "#000"); + String fontFamily = getString(contact, "fontFamily", "sans-serif"); + + html.append("
"); + + html.append("
"); + + // LEFT Column + Map left = (Map) contact.get("left"); + html.append("
").append("

").append(getString(left, "heading")).append("

") + .append("

").append(getString(left, "description")).append("

"); + + Map cta = (Map) left.get("ctaButton"); + Map style = (Map) cta.get("style"); + html.append("") + .append(getString(cta, "label")).append(""); + + html.append("
"); + + // RIGHT Column + Map right = (Map) contact.get("right"); + Map details = (Map) right.get("contactDetails"); + + html.append("
"); + + if (details.containsKey("email")) { + Map email = (Map) details.get("email"); + html.append("
").append("").append(getString(email, "label")) + .append(": ").append("") + .append(getString(email, "value")).append("
"); + } + + if (details.containsKey("phone")) { + Map phone = (Map) details.get("phone"); + html.append("
").append("").append(getString(phone, "label")) + .append(": ").append("") + .append(getString(phone, "value")).append("
"); + } + + if (details.containsKey("address")) { + Map address = (Map) details.get("address"); + List lines = (List) address.get("lines"); + html.append("
").append("").append(getString(address, "label")) + .append(":

"); + for (String line : lines) { + html.append(line).append("
"); + } + html.append("

"); + } + + // Social icons + List> socials = (List>) right.get("socialLinks"); + html.append("
"); + for (Map s : socials) { + html.append(""); + } + html.append("
"); + + html.append("
"); + + // Footer + String footerBg = getString(footer, "backgroundColor", "#000"); + String footerColor = getString(footer, "textColor", "#fff"); + String align = getString(footer, "alignment", "center"); + boolean repeatIcons = Boolean.TRUE.equals(footer.get("socialIconsRepeated")); + + html.append("
").append("

") + .append(getString(footer, "content")).append("

"); + + if (repeatIcons) { + html.append("
"); + for (Map s : socials) { + html.append(""); + } + html.append("
"); + } + + html.append("
"); + return html.toString(); + } + + private static String renderFeatureListSection(Map data) { + Map section = (Map) data.get("FeatureSection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + List> children = getChildren(section); + for (Map child : children) { + String type = getString(child, "type"); + String clazz = getString(child, "class", ""); + String content = getString(child, "content", ""); + + if ("h2".equals(type)) { + html.append("

").append(content).append("

"); + } else if ("div".equals(type) && "feature-list".equals(clazz)) { + html.append("
"); + + List> featureItems = getChildren(child); + for (Map item : featureItems) { + html.append("
"); + + List> itemChildren = getChildren(item); + for (Map node : itemChildren) { + String nodeType = getString(node, "type"); + String nodeClass = getString(node, "class", ""); + + if ("div".equals(nodeType) && "feature-icon".equals(nodeClass)) { + html.append("
"); + + List> iconChildren = getChildren(node); + for (Map icon : iconChildren) { + String iconSrc = getString(icon, "src"); + String iconAlt = getString(icon, "alt", "Icon"); + html.append("
"); + } + + html.append("
"); + } + + if ("h3".equals(nodeType)) { + html.append("

") + .append(getString(node, "content")).append("

"); + } + + if ("p".equals(nodeType)) { + html.append("

") + .append(getString(node, "content")).append("

"); + } + + if ("a".equals(nodeType)) { + html.append("").append(getString(node, "content")).append(""); + } + } + + html.append("
"); // end feature-item + } + + html.append("
"); // end feature-list + } + } + + html.append("
"); + return html.toString(); + } + +//private static String renderFeatureGridSection(Map data) { +// StringBuilder html = new StringBuilder(); +// html.append("
"); +// +// List> children = getChildren(data); +// for (Map node : children) { +// String type = getString(node, "type"); +// String clazz = getString(node, "class", ""); +// String content = getString(node, "content", ""); +// +// switch (type) { +// case "p": +// html.append("

").append(content).append("

"); +// break; +// case "h2": +// html.append("

").append(content).append("

"); +// break; +// case "div": +// if ("feature-grid".equals(clazz)) { +// html.append("
"); +// for (Map card : getChildren(node)) { +// html.append("
"); +// for (Map cardChild : getChildren(card)) { +// String cardType = getString(cardChild, "type"); +// String cardClass = getString(cardChild, "class", ""); +// if ("div".equals(cardType) && "card-img".equals(cardClass)) { +// html.append("
"); +// for (Map img : getChildren(cardChild)) { +// String imgSrc = getString(img, "src"); +// String alt = getString(img, "alt"); +// html.append("
"); +// } +// html.append("
"); +// } else if ("h3".equals(cardType)) { +// html.append("

").append(getString(cardChild, "content")).append("

"); +// } else if ("p".equals(cardType)) { +// html.append("

").append(getString(cardChild, "content")).append("

"); +// } +// } +// html.append("
"); +// } +// html.append("
"); +// } else if ("cta-buttons".equals(clazz)) { +// html.append("
"); +// for (Map link : getChildren(node)) { +// html.append(" data) { + StringBuilder html = new StringBuilder(); + html.append("
"); + + List> children = getChildren(data); + for (Map block : children) { + String blockClass = getString(block, "class", ""); + html.append(""); + } + + html.append("
"); + return html.toString(); + } + + private static String renderCenteredHero(Map data) { + StringBuilder html = new StringBuilder(); + + html.append("
"); + + List> children = getChildren(data); + for (Map node : children) { + String type = getString(node, "type"); + String clazz = getString(node, "class", ""); + String content = getString(node, "content", ""); + + switch (type) { + case "p": + html.append("

").append(content).append("

"); + break; + + case "h2": + html.append("

").append(content).append("

"); + break; + + case "div": + html.append("
"); + for (Map btn : getChildren(node)) { + html.append("").append(getString(btn, "content")) + .append(""); + } + html.append("
"); + break; + + case "img": + html.append("\"")"); + break; + } + } + + html.append("
"); + return html.toString(); + } + + private static String renderFeatureSection2(Map data) { + StringBuilder html = new StringBuilder(); + + html.append("
"); + + List> children = getChildren(data); + for (Map child : children) { + String childClass = getString(child, "class", ""); + html.append("
"); + + List> innerChildren = getChildren(child); + for (Map inner : innerChildren) { + String type = getString(inner, "type"); + String clazz = getString(inner, "class", ""); + String content = getString(inner, "content", ""); + + switch (type) { + case "span": + html.append("").append(content).append(""); + break; + case "h2": + html.append("

").append(content).append("

"); + break; + case "p": + html.append("

").append(content).append("

"); + break; + + case "placeholder-img": + case "div": + String divClass = getString(inner, "class"); + // Agar ye ek image placeholder hai + if (inner.containsKey("src")) { + String src = getString(inner, "src"); + String alt = getString(inner, "alt", "Image"); + html.append("
"); + } else { + // Normal div with buttons or children + html.append("
"); + for (Map btn : getChildren(inner)) { + html.append(""); + } + html.append("
"); + } + break; + + } + + html.append("
"); + } + + html.append("
"); + } + return html.toString(); + } + + private static String renderEcommerceFAQ(Map data) { + Map faq = (Map) data.get("ecommerceFAQs"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + html.append("

").append(getString(faq, "title")).append("

"); + + List> categories = (List>) faq.get("categories"); + for (Map category : categories) { + html.append("
").append("

").append(getString(category, "title")) + .append("

").append("
    "); + List questions = (List) category.get("questions"); + for (String question : questions) { + html.append("
  • ").append(question).append("
  • "); + } + html.append("
"); + } + + html.append("
"); + return html.toString(); + } + + private static String renderDashboardLayout(Map data) { + Map dashboard = (Map) data.get("dashboardLayout"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Sidebar + Map sidebar = (Map) dashboard.get("sidebar"); + List items = (List) sidebar.get("items"); + int activeIndex = (int) sidebar.getOrDefault("activeIndex", 0); + + html.append(""); + + // Main Content + List> main = (List>) dashboard.get("mainContent"); + html.append("
"); + for (Map item : main) { + boolean highlight = Boolean.TRUE.equals(item.get("highlight")); + html.append("
").append(getString(item, "title")).append("
"); + } + html.append("
"); + + // Right Panel + Map right = (Map) dashboard.get("rightPanel"); + List> sections = (List>) right.get("sections"); + + html.append(""); + + html.append("
"); + return html.toString(); + } + + private static String renderFAQIllustrated(Map data) { + Map section = (Map) data.get("FAQIllustratedSection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Title and search + html.append("
").append("

").append(getString(section, "title")).append("

") + .append("").append("
"); + + html.append("
"); + + // Illustration + html.append("
").append("\"FAQ") + .append("
"); + + // Questions + List> questions = (List>) section.get("questions"); + html.append("
"); + for (Map q : questions) { + html.append("
").append("

").append(getString(q, "question")).append("

") + .append("

").append(getString(q, "answer")).append("

").append("
"); + } + html.append("
"); + + html.append("
"); // faq-body + html.append("
"); + + return html.toString(); + } + + private static String renderFAQTwoColumn(Map data) { + Map faq = (Map) data.get("FAQTwoColumn"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Header + html.append("
").append("

").append(getString(faq, "title")).append("

") + .append("

").append(getString(faq, "description")).append("

").append("
"); + + // Questions split into 2 columns + List> questions = (List>) faq.get("questions"); + int total = questions.size(); + int splitIndex = (int) Math.ceil(total / 2.0); + + html.append("
"); + + // Left Column + html.append("
"); + for (int i = 0; i < splitIndex; i++) { + Map q = questions.get(i); + html.append("
").append("

").append(getString(q, "question")).append("

") + .append("

").append(getString(q, "answer")).append("

").append("
"); + } + html.append("
"); + + // Right Column + html.append("
"); + for (int i = splitIndex; i < total; i++) { + Map q = questions.get(i); + html.append("
").append("

").append(getString(q, "question")).append("

") + .append("

").append(getString(q, "answer")).append("

").append("
"); + } + html.append("
"); + + html.append("
"); // faq-columns + + // CTA + Map cta = (Map) faq.get("cta"); + if (cta != null) { + html.append(""); + } + + html.append("
"); + return html.toString(); + } + + private static String renderFAQSection(Map data) { + Map faq = (Map) data.get("FAQSection"); + StringBuilder html = new StringBuilder(); + + html.append("
"); + + // Title and subtitle + html.append("

").append(getString(faq, "title")).append("

"); + html.append("

").append(getString(faq, "subtitle")).append("

"); + + // Questions + List> questions = (List>) faq.get("questions"); + html.append("
"); + for (Map q : questions) { + html.append("
").append("

") + .append(getString(q, "question")).append("

").append("

") + .append(getString(q, "answer")).append("

").append("
"); + } + html.append("
"); + + // CTA + Map cta = (Map) faq.get("cta"); + if (cta != null) { + Map button = (Map) cta.get("button"); + html.append("
").append("

").append(getString(cta, "title")).append("

") + .append("

").append(getString(cta, "subtitle")).append("

"); + if (button != null) { + html.append("") + .append(getString(button, "label", "Contact")).append(""); + } + html.append("
"); + } + + html.append("
"); + return html.toString(); + } + + private static String renderNavbarWithImageLogo(Map data) { + Map navbar = (Map) data.get("Navbar"); + StringBuilder html = new StringBuilder(); + + html.append(""); + return html.toString(); + } + + private static String renderSimpleNavbar(Map data) { + Map navbar = (Map) data.get("Navbar"); + StringBuilder html = new StringBuilder(); + + html.append(""); + return html.toString(); + } + + private static String renderMegaNavbar(Map data) { + StringBuilder html = new StringBuilder(); + html.append("