@brunoalz/smartgesti-site-editor 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/editor/LandingPageEditor.d.ts.map +1 -1
- package/dist/editor/LandingPageEditor.js +183 -169
- package/dist/editor/LandingPageEditor.js.map +1 -1
- package/dist/editor/PaletteSelector.d.ts +3 -0
- package/dist/editor/PaletteSelector.d.ts.map +1 -1
- package/dist/editor/PaletteSelector.js +114 -25
- package/dist/editor/PaletteSelector.js.map +1 -1
- package/dist/editor/components/RightPanel.d.ts +2 -0
- package/dist/editor/components/RightPanel.d.ts.map +1 -1
- package/dist/editor/components/RightPanel.js +23 -22
- package/dist/editor/components/RightPanel.js.map +1 -1
- package/dist/engine/export/exporters/content/AvatarExporter.js +2 -2
- package/dist/engine/export/exporters/content/AvatarExporter.js.map +1 -1
- package/dist/engine/export/exporters/content/BadgeExporter.js +11 -11
- package/dist/engine/export/exporters/content/BadgeExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/AdminSectionExporters.js +17 -17
- package/dist/engine/export/exporters/sections/AdminSectionExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/BlogPostExporters.js +34 -34
- package/dist/engine/export/exporters/sections/BlogPostExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/ContentGridExporters.js +16 -16
- package/dist/engine/export/exporters/sections/ContentGridExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/MarketingExporters.js +4 -4
- package/dist/engine/export/exporters/sections/MarketingExporters.js.map +1 -1
- package/dist/engine/render/renderers/content/BadgeRenderer.js +12 -12
- package/dist/engine/render/renderers/content/BadgeRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/AboutSectionRenderer.js +8 -8
- package/dist/engine/render/renderers/sections/AboutSectionRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/ContactSectionRenderer.js +52 -52
- package/dist/engine/render/renderers/sections/ContactSectionRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.js +5 -5
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureRenderer.js +9 -9
- package/dist/engine/render/renderers/sections/FeatureRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/PricingCardRenderer.js +5 -5
- package/dist/engine/render/renderers/sections/PricingCardRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/ProductShowcaseRenderer.js +17 -17
- package/dist/engine/render/renderers/sections/ProductShowcaseRenderer.js.map +1 -1
- package/dist/hooks/useEditorState.d.ts +2 -0
- package/dist/hooks/useEditorState.d.ts.map +1 -1
- package/dist/hooks/useEditorState.js +82 -77
- package/dist/hooks/useEditorState.js.map +1 -1
- package/dist/shared/templates/index.d.ts +4 -0
- package/dist/shared/templates/index.d.ts.map +1 -1
- package/dist/shared/templates/index.js +14 -7
- package/dist/shared/templates/index.js.map +1 -1
- package/dist/shared/templates/smartgesti-admin.d.ts.map +1 -1
- package/dist/shared/templates/smartgesti-admin.js +1 -4
- package/dist/shared/templates/smartgesti-admin.js.map +1 -1
- package/dist/utils/colorUtils.d.ts +73 -16
- package/dist/utils/colorUtils.d.ts.map +1 -1
- package/dist/utils/colorUtils.js +95 -9
- package/dist/utils/colorUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,13 +2,13 @@ import { escapeHtml as t, dataBlockIdAttr as y } from "../../shared/htmlHelpers.
|
|
|
2
2
|
import { generateScopedId as h } from "../../shared/idGenerator.js";
|
|
3
3
|
import { resolveResponsiveColumns as z, generateResponsiveGridStyles as H } from "../../shared/responsiveGridHelper.js";
|
|
4
4
|
function I(r, p, u, v) {
|
|
5
|
-
const { image: s, date: e, category: i, title: n, excerpt: d, linkText: a, linkHref:
|
|
6
|
-
return `<article ${y(r.id)} class="sg-blog-card" style="background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);">${
|
|
5
|
+
const { image: s, date: e, category: i, title: n, excerpt: d, linkText: a, linkHref: m } = r.props, l = s ? `<div style="height: 200px; background-image: url(${t(s)}); background-size: cover; background-position: center;"></div>` : "", c = e || i ? `<p style="font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;">${[e, i].filter(Boolean).join(" / ")}</p>` : "", g = a ? `<a href="${t(m || "#")}" style="color: var(--sg-primary); font-weight: 500; text-decoration: none;">${t(a)}</a>` : "";
|
|
6
|
+
return `<article ${y(r.id)} class="sg-blog-card" style="background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);">${l}<div style="padding: 1.5rem;">${c}<h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;">${t(n)}</h3>${d ? `<p style="color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;">${t(d)}</p>` : ""}${g}</div></article>`;
|
|
7
7
|
}
|
|
8
8
|
function S(r, p, u, v, s) {
|
|
9
|
-
const { title: e, subtitle: i, columns: n = 3, cards: d = [] } = r.props, a = h(r.id || "", "blog-grid"),
|
|
9
|
+
const { title: e, subtitle: i, columns: n = 3, cards: d = [] } = r.props, a = h(r.id || "", "blog-grid"), m = z(n, 1, 2, n), { inlineStyles: l, mediaQueries: c } = H(
|
|
10
10
|
a,
|
|
11
|
-
|
|
11
|
+
m,
|
|
12
12
|
"2rem"
|
|
13
13
|
), g = e || i ? `<div style="text-align: center; margin-bottom: 3rem;">${e ? `<h2 style="font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;">${t(e)}</h2>` : ""}${i ? `<p style="color: var(--sg-muted-text);">${t(i)}</p>` : ""}</div>` : "";
|
|
14
14
|
if (!s)
|
|
@@ -25,10 +25,10 @@ function S(r, p, u, v, s) {
|
|
|
25
25
|
v
|
|
26
26
|
)
|
|
27
27
|
).join("");
|
|
28
|
-
return `<style>${c}</style><section ${y(r.id)} style="padding: 4rem 0; background-color: var(--sg-bg);"><div style="max-width: 1200px; margin: 0 auto; padding: 0 1rem;">${g}<div id="${a}" style="${
|
|
28
|
+
return `<style>${c}</style><section ${y(r.id)} style="padding: 4rem 0; background-color: var(--sg-bg);"><div style="max-width: 1200px; margin: 0 auto; padding: 0 1rem;">${g}<div id="${a}" style="${l}">${o}</div></div></section>`;
|
|
29
29
|
}
|
|
30
30
|
function T(r, p, u, v) {
|
|
31
|
-
const { avatar: s, name: e, role: i } = r.props, n = s ? `<img src="${t(s)}" alt="${t(e)}" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover; margin: 0 auto 1rem; display: block;" />` : `<div style="width: 120px; height: 120px; border-radius: 50%; background-color: var(--sg-primary); color: #fff; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; font-size: 2rem; font-weight: 600;">${e ? e.charAt(0) : "?"}</div>`;
|
|
31
|
+
const { avatar: s, name: e, role: i } = r.props, n = s ? `<img src="${t(s)}" alt="${t(e)}" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover; margin: 0 auto 1rem; display: block;" />` : `<div style="width: 120px; height: 120px; border-radius: 50%; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; font-size: 2rem; font-weight: 600;">${e ? e.charAt(0) : "?"}</div>`;
|
|
32
32
|
return `<div ${y(r.id)} class="sg-team-card" style="text-align: center;">${n}<h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 0.25rem;">${t(e)}</h3>${i ? `<p style="color: var(--sg-muted-text); font-size: 0.875rem;">${t(i)}</p>` : ""}</div>`;
|
|
33
33
|
}
|
|
34
34
|
function G(r, p, u, v, s) {
|
|
@@ -37,9 +37,9 @@ function G(r, p, u, v, s) {
|
|
|
37
37
|
subtitle: i,
|
|
38
38
|
columns: n = 4,
|
|
39
39
|
members: d = []
|
|
40
|
-
} = r.props, a = h(r.id || "", "team-grid"),
|
|
40
|
+
} = r.props, a = h(r.id || "", "team-grid"), m = z(n, 1, 2, n), { inlineStyles: l, mediaQueries: c } = H(
|
|
41
41
|
a,
|
|
42
|
-
|
|
42
|
+
m,
|
|
43
43
|
"2rem"
|
|
44
44
|
), g = e || i ? `<div style="text-align: center; margin-bottom: 3rem;">${e ? `<h2 style="font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;">${t(e)}</h2>` : ""}${i ? `<p style="color: var(--sg-muted-text);">${t(i)}</p>` : ""}</div>` : "";
|
|
45
45
|
if (!s)
|
|
@@ -56,7 +56,7 @@ function G(r, p, u, v, s) {
|
|
|
56
56
|
v
|
|
57
57
|
)
|
|
58
58
|
).join("");
|
|
59
|
-
return `<style>${c}</style><section ${y(r.id)} style="padding: 4rem 0; background-color: var(--sg-surface);"><div style="max-width: 1200px; margin: 0 auto; padding: 0 1rem;">${g}<div id="${a}" style="${
|
|
59
|
+
return `<style>${c}</style><section ${y(r.id)} style="padding: 4rem 0; background-color: var(--sg-surface);"><div style="max-width: 1200px; margin: 0 auto; padding: 0 1rem;">${g}<div id="${a}" style="${l}">${o}</div></div></section>`;
|
|
60
60
|
}
|
|
61
61
|
function P(r, p, u, v) {
|
|
62
62
|
const {
|
|
@@ -64,7 +64,7 @@ function P(r, p, u, v) {
|
|
|
64
64
|
subtitle: e,
|
|
65
65
|
columns: i = 3,
|
|
66
66
|
cards: n = []
|
|
67
|
-
} = r.props, d = h(r.id || "", "course-grid"), a = z(i, 1, 2, i), { inlineStyles:
|
|
67
|
+
} = r.props, d = h(r.id || "", "course-grid"), a = z(i, 1, 2, i), { inlineStyles: m, mediaQueries: l } = H(
|
|
68
68
|
d,
|
|
69
69
|
a,
|
|
70
70
|
"2rem"
|
|
@@ -72,7 +72,7 @@ function P(r, p, u, v) {
|
|
|
72
72
|
const $ = o.image ? `<div style="height: 180px; background-image: url(${t(o.image)}); background-size: cover; background-position: center;"></div>` : "", f = o.period ? ' <span style="font-size: 0.875rem; font-weight: 400; color: var(--sg-muted-text);">/ ' + t(o.period) + "</span>" : "", b = o.price != null ? `<p style="font-size: 1rem; font-weight: 600; color: var(--sg-primary); margin-bottom: 0.5rem;">${t(String(o.price))}${f}</p>` : "", x = o.duration ? `<p style="color: var(--sg-muted-text); font-size: 0.875rem;">Duração: ${t(o.duration)}</p>` : "", w = o.level ? `<span style="display: inline-block; padding: 0.25rem 0.5rem; background-color: var(--sg-surface2); color: var(--sg-text); border-radius: 0.25rem; font-size: 0.75rem; margin-bottom: 0.5rem;">${t(o.level)}</span>` : "";
|
|
73
73
|
return `<div style="background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);">${$}<div style="padding: 1.5rem;">${w}<h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;">${t(o.title)}</h3>${o.description ? `<p style="color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;">${t(o.description)}</p>` : ""}${b}${x}</div></div>`;
|
|
74
74
|
}).join("");
|
|
75
|
-
return `<style>${
|
|
75
|
+
return `<style>${l}</style><section ${y(r.id)} style="padding: 4rem 0; background-color: var(--sg-bg);"><div style="max-width: 1200px; margin: 0 auto; padding: 0 1rem;">${c}<div id="${d}" style="${m}">${g}</div></div></section>`;
|
|
76
76
|
}
|
|
77
77
|
function D(r, p, u, v) {
|
|
78
78
|
const {
|
|
@@ -82,9 +82,9 @@ function D(r, p, u, v) {
|
|
|
82
82
|
buttonText: n,
|
|
83
83
|
buttonHref: d,
|
|
84
84
|
variant: a = "default",
|
|
85
|
-
badgeText:
|
|
86
|
-
bg:
|
|
87
|
-
} = r.props, c = a === "banner", g = `padding: 4rem 2rem; background-color: ${
|
|
85
|
+
badgeText: m,
|
|
86
|
+
bg: l
|
|
87
|
+
} = r.props, c = a === "banner", g = `padding: 4rem 2rem; background-color: ${l || "var(--sg-primary)"}; color: var(--sg-primary-text, #fff);`, o = h(r.id || "", "countdown-numbers"), $ = `
|
|
88
88
|
/* Countdown numbers: 2×2 grid em mobile, 1 linha em desktop */
|
|
89
89
|
#${o} {
|
|
90
90
|
display: grid;
|
|
@@ -99,7 +99,7 @@ function D(r, p, u, v) {
|
|
|
99
99
|
gap: 1.5rem;
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
-
`, f = c &&
|
|
102
|
+
`, f = c && m ? `<div style="width: 140px; height: 140px; border-radius: 50%; border: 3px solid rgba(255,255,255,0.5); display: flex; align-items: center; justify-content: center; flex-shrink: 0; text-align: center; padding: 1rem; font-weight: 600; font-size: 0.875rem;">${t(m)}</div>` : "", b = i ? `<style>${$}</style><div id="${o}">${["Days", "Hours", "Minutes", "Seconds"].map((C) => `<div style="text-align: center;"><div style="font-size: 1.75rem; font-weight: 700;">00</div><div style="font-size: 0.75rem; opacity: 0.9;">${C}</div></div>`).join("")}</div>` : "", x = n ? `<a href="${t(d || "#")}" style="display: inline-block; padding: 0.75rem 1.5rem; background-color: #fff; color: var(--sg-primary); font-weight: 600; border-radius: var(--sg-button-radius); text-decoration: none;">${t(n)}</a>` : "", w = `<div style="max-width: 1200px; margin: 0 auto; display: flex; align-items: center; gap: 2rem; flex-wrap: wrap; justify-content: center;">${f}<div style="flex: 1; min-width: 200px;">${s ? `<h2 style="margin-bottom: 0.5rem; font-size: 1.5rem;">${t(s)}</h2>` : ""}${e ? `<p style="opacity: 0.9; margin-bottom: 1rem;">${t(e)}</p>` : ""}${b}${x}</div></div>`;
|
|
103
103
|
return `<section ${y(r.id)} class="sg-countdown" style="${g}" data-variant="${t(a)}">${w}</section>`;
|
|
104
104
|
}
|
|
105
105
|
function Q(r, p, u, v) {
|
|
@@ -122,7 +122,7 @@ function Q(r, p, u, v) {
|
|
|
122
122
|
gap: 2rem;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
`, d = e.image ? `<div style="min-height: 300px; background-image: url(${t(e.image)}); background-size: cover; background-position: center;"></div>` : "", a = e.primaryButton ? `<a href="${t(e.primaryButton.href || "#")}" style="padding: 0.75rem 1.5rem; background-color: #fff; color: var(--sg-primary); border-radius: var(--sg-button-radius); font-weight: 500; text-decoration: none;">${t(e.primaryButton.text)}</a>` : "",
|
|
125
|
+
`, d = e.image ? `<div style="min-height: 300px; background-image: url(${t(e.image)}); background-size: cover; background-position: center;"></div>` : "", a = e.primaryButton ? `<a href="${t(e.primaryButton.href || "#")}" style="padding: 0.75rem 1.5rem; background-color: #fff; color: var(--sg-primary); border-radius: var(--sg-button-radius); font-weight: 500; text-decoration: none;">${t(e.primaryButton.text)}</a>` : "", m = e.secondaryButton ? `<a href="${t(e.secondaryButton.href || "#")}" style="padding: 0.75rem 1.5rem; border: 2px solid #fff; color: #fff; border-radius: var(--sg-button-radius); font-weight: 500; text-decoration: none;">${t(e.secondaryButton.text)}</a>` : "", l = `<div style="padding: 2rem; color: var(--sg-primary-text, #fff);">${e.title ? `<h2 style="margin-bottom: 1rem;">${t(e.title)}</h2>` : ""}${e.description ? `<p style="margin-bottom: 1.5rem; opacity: 0.9;">${t(e.description)}</p>` : ""}<div style="display: flex; gap: 1rem; flex-wrap: wrap;">${a}${m}</div></div>`, c = `<style>${n}</style><div id="${i}" style="background-color: var(--sg-primary); border-radius: var(--sg-card-radius); overflow: hidden;">${d}${l}</div>`;
|
|
126
126
|
return `<section ${y(r.id)} class="sg-carousel" style="padding: 4rem 0; background-color: var(--sg-surface);"><div style="max-width: 1200px; margin: 0 auto; padding: 0 1rem;">${c}</div></section>`;
|
|
127
127
|
}
|
|
128
128
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentGridExporters.js","sources":["../../../../../src/engine/export/exporters/sections/ContentGridExporters.ts"],"sourcesContent":["/**\n * Content Grid Exporters\n * Blog Cards, Team Cards, Course Cards, Countdown, Carousel\n * Mobile-first responsive grids\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport {\n resolveResponsiveColumns,\n generateResponsiveGridStyles,\n} from \"../../shared/responsiveGridHelper\";\n\nexport function exportBlogCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { image, date, category, title, excerpt, linkText, linkHref } = (\n block as any\n ).props;\n\n const imgHtml = image\n ? `<div style=\"height: 200px; background-image: url(${escapeHtml(image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const metaHtml =\n date || category\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${[date, category].filter(Boolean).join(\" / \")}</p>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-card\" style=\"background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\">${imgHtml}<div style=\"padding: 1.5rem;\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}</div></article>`;\n}\n\nexport function exportBlogCardGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, columns = 3, cards = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"blog-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n \"2rem\",\n );\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text);\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportBlogCardGrid requires renderChild function\");\n }\n\n const cardsHtml = cards\n .map((c: any, i: number) =>\n renderChild(\n {\n id: `${block.id}-card-${i}`,\n type: \"blogCard\",\n props: c,\n } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${cardsHtml}</div></div></section>`;\n}\n\nexport function exportTeamCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { avatar, name, role } = (block as any).props;\n\n const avatarHtml = avatar\n ? `<img src=\"${escapeHtml(avatar)}\" alt=\"${escapeHtml(name)}\" style=\"width: 120px; height: 120px; border-radius: 50%; object-fit: cover; margin: 0 auto 1rem; display: block;\" />`\n : `<div style=\"width: 120px; height: 120px; border-radius: 50%; background-color: var(--sg-primary); color: #fff; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; font-size: 2rem; font-weight: 600;\">${name ? name.charAt(0) : \"?\"}</div>`;\n\n return `<div ${dataBlockIdAttr(block.id)} class=\"sg-team-card\" style=\"text-align: center;\">${avatarHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.25rem;\">${escapeHtml(name)}</h3>${role ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(role)}</p>` : \"\"}</div>`;\n}\n\nexport function exportTeamGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 4,\n members = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"team-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n \"2rem\",\n );\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text);\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportTeamGrid requires renderChild function\");\n }\n\n const membersHtml = members\n .map((m: any, i: number) =>\n renderChild(\n {\n id: `${block.id}-member-${i}`,\n type: \"teamCard\",\n props: m,\n } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${membersHtml}</div></div></section>`;\n}\n\nexport function exportCourseCardGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title: courseTitle,\n subtitle: courseSubtitle,\n columns: courseCols = 3,\n cards = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"course-grid\");\n const responsiveConfig = resolveResponsiveColumns(courseCols, 1, 2, courseCols);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n \"2rem\",\n );\n\n const courseHeaderHtml =\n courseTitle || courseSubtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${courseTitle ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(courseTitle)}</h2>` : \"\"}${courseSubtitle ? `<p style=\"color: var(--sg-muted-text);\">${escapeHtml(courseSubtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const courseCardsHtml = cards\n .map((card: any) => {\n const imgHtml = card.image\n ? `<div style=\"height: 180px; background-image: url(${escapeHtml(card.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n const priceInner = card.period\n ? ' <span style=\"font-size: 0.875rem; font-weight: 400; color: var(--sg-muted-text);\">/ ' +\n escapeHtml(card.period) +\n \"</span>\"\n : \"\";\n const priceHtml =\n card.price != null\n ? `<p style=\"font-size: 1rem; font-weight: 600; color: var(--sg-primary); margin-bottom: 0.5rem;\">${escapeHtml(String(card.price))}${priceInner}</p>`\n : \"\";\n const durationHtml = card.duration\n ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">Duração: ${escapeHtml(card.duration)}</p>`\n : \"\";\n const levelHtml = card.level\n ? `<span style=\"display: inline-block; padding: 0.25rem 0.5rem; background-color: var(--sg-surface2); color: var(--sg-text); border-radius: 0.25rem; font-size: 0.75rem; margin-bottom: 0.5rem;\">${escapeHtml(card.level)}</span>`\n : \"\";\n return `<div style=\"background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\">${imgHtml}<div style=\"padding: 1.5rem;\">${levelHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(card.title)}</h3>${card.description ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;\">${escapeHtml(card.description)}</p>` : \"\"}${priceHtml}${durationHtml}</div></div>`;\n })\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${courseHeaderHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${courseCardsHtml}</div></div></section>`;\n}\n\nexport function exportCountdown(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n description,\n showPlaceholders = true,\n buttonText,\n buttonHref,\n variant = \"default\",\n badgeText,\n bg,\n } = (block as any).props;\n\n const isBanner = variant === \"banner\";\n const sectionStyle = `padding: 4rem 2rem; background-color: ${bg || \"var(--sg-primary)\"}; color: #fff;`;\n\n // Responsive countdown grid\n const countdownId = generateScopedId(block.id || \"\", \"countdown-numbers\");\n const countdownCss = `\n /* Countdown numbers: 2×2 grid em mobile, 1 linha em desktop */\n #${countdownId} {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 1rem;\n margin-bottom: 1rem;\n }\n\n @media (min-width: 640px) {\n #${countdownId} {\n grid-template-columns: repeat(4, 1fr);\n gap: 1.5rem;\n }\n }\n `;\n\n const badgeCircle =\n isBanner && badgeText\n ? `<div style=\"width: 140px; height: 140px; border-radius: 50%; border: 3px solid rgba(255,255,255,0.5); display: flex; align-items: center; justify-content: center; flex-shrink: 0; text-align: center; padding: 1rem; font-weight: 600; font-size: 0.875rem;\">${escapeHtml(badgeText)}</div>`\n : \"\";\n\n const placeholdersHtml = showPlaceholders\n ? `<style>${countdownCss}</style><div id=\"${countdownId}\">${[\"Days\", \"Hours\", \"Minutes\", \"Seconds\"].map((label) => `<div style=\"text-align: center;\"><div style=\"font-size: 1.75rem; font-weight: 700;\">00</div><div style=\"font-size: 0.75rem; opacity: 0.9;\">${label}</div></div>`).join(\"\")}</div>`\n : \"\";\n\n const btnHtml = buttonText\n ? `<a href=\"${escapeHtml(buttonHref || \"#\")}\" style=\"display: inline-block; padding: 0.75rem 1.5rem; background-color: #fff; color: var(--sg-primary); font-weight: 600; border-radius: var(--sg-button-radius); text-decoration: none;\">${escapeHtml(buttonText)}</a>`\n : \"\";\n\n const inner = `<div style=\"max-width: 1200px; margin: 0 auto; display: flex; align-items: center; gap: 2rem; flex-wrap: wrap; justify-content: center;\">${badgeCircle}<div style=\"flex: 1; min-width: 200px;\">${title ? `<h2 style=\"margin-bottom: 0.5rem; font-size: 1.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${description ? `<p style=\"opacity: 0.9; margin-bottom: 1rem;\">${escapeHtml(description)}</p>` : \"\"}${placeholdersHtml}${btnHtml}</div></div>`;\n\n return `<section ${dataBlockIdAttr(block.id)} class=\"sg-countdown\" style=\"${sectionStyle}\" data-variant=\"${escapeHtml(variant)}\">${inner}</section>`;\n}\n\nexport function exportCarousel(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { slides = [] } = (block as any).props;\n const slide = slides[0];\n\n if (!slide)\n return `<section ${dataBlockIdAttr(block.id)} class=\"sg-carousel\"></section>`;\n\n // Responsive carousel: 1 col (mobile) → 2 cols split (desktop)\n const carouselId = generateScopedId(block.id || \"\", \"carousel\");\n const carouselCss = `\n /* Base: Mobile - 1 coluna (stack) */\n #${carouselId} {\n display: grid;\n grid-template-columns: 1fr;\n gap: 0;\n align-items: center;\n }\n\n /* Desktop: 2 colunas (split) */\n @media (min-width: 1024px) {\n #${carouselId} {\n grid-template-columns: 1fr 1fr;\n gap: 2rem;\n }\n }\n `;\n\n const slideImg = slide.image\n ? `<div style=\"min-height: 300px; background-image: url(${escapeHtml(slide.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const primaryBtn = slide.primaryButton\n ? `<a href=\"${escapeHtml(slide.primaryButton.href || \"#\")}\" style=\"padding: 0.75rem 1.5rem; background-color: #fff; color: var(--sg-primary); border-radius: var(--sg-button-radius); font-weight: 500; text-decoration: none;\">${escapeHtml(slide.primaryButton.text)}</a>`\n : \"\";\n\n const secondaryBtn = slide.secondaryButton\n ? `<a href=\"${escapeHtml(slide.secondaryButton.href || \"#\")}\" style=\"padding: 0.75rem 1.5rem; border: 2px solid #fff; color: #fff; border-radius: var(--sg-button-radius); font-weight: 500; text-decoration: none;\">${escapeHtml(slide.secondaryButton.text)}</a>`\n : \"\";\n\n const slideContent = `<div style=\"padding: 2rem; color: #fff;\">${slide.title ? `<h2 style=\"margin-bottom: 1rem;\">${escapeHtml(slide.title)}</h2>` : \"\"}${slide.description ? `<p style=\"margin-bottom: 1.5rem; opacity: 0.9;\">${escapeHtml(slide.description)}</p>` : \"\"}<div style=\"display: flex; gap: 1rem; flex-wrap: wrap;\">${primaryBtn}${secondaryBtn}</div></div>`;\n\n const slideHtml = `<style>${carouselCss}</style><div id=\"${carouselId}\" style=\"background-color: var(--sg-primary); border-radius: var(--sg-card-radius); overflow: hidden;\">${slideImg}${slideContent}</div>`;\n\n return `<section ${dataBlockIdAttr(block.id)} class=\"sg-carousel\" style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${slideHtml}</div></section>`;\n}\n"],"names":["exportBlogCard","block","depth","basePath","theme","image","date","category","title","excerpt","linkText","linkHref","imgHtml","escapeHtml","metaHtml","linkHtml","dataBlockIdAttr","exportBlogCardGrid","renderChild","subtitle","columns","cards","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","headerHtml","cardsHtml","c","i","exportTeamCard","avatar","name","role","avatarHtml","exportTeamGrid","members","membersHtml","m","exportCourseCardGrid","courseTitle","courseSubtitle","courseCols","courseHeaderHtml","courseCardsHtml","card","priceInner","priceHtml","durationHtml","levelHtml","exportCountdown","description","showPlaceholders","buttonText","buttonHref","variant","badgeText","bg","isBanner","sectionStyle","countdownId","countdownCss","badgeCircle","placeholdersHtml","label","btnHtml","inner","exportCarousel","slides","slide","carouselId","carouselCss","slideImg","primaryBtn","secondaryBtn","slideContent","slideHtml"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ContentGridExporters.js","sources":["../../../../../src/engine/export/exporters/sections/ContentGridExporters.ts"],"sourcesContent":["/**\n * Content Grid Exporters\n * Blog Cards, Team Cards, Course Cards, Countdown, Carousel\n * Mobile-first responsive grids\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport {\n resolveResponsiveColumns,\n generateResponsiveGridStyles,\n} from \"../../shared/responsiveGridHelper\";\n\nexport function exportBlogCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { image, date, category, title, excerpt, linkText, linkHref } = (\n block as any\n ).props;\n\n const imgHtml = image\n ? `<div style=\"height: 200px; background-image: url(${escapeHtml(image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const metaHtml =\n date || category\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${[date, category].filter(Boolean).join(\" / \")}</p>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-card\" style=\"background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\">${imgHtml}<div style=\"padding: 1.5rem;\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}</div></article>`;\n}\n\nexport function exportBlogCardGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, columns = 3, cards = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"blog-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n \"2rem\",\n );\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text);\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportBlogCardGrid requires renderChild function\");\n }\n\n const cardsHtml = cards\n .map((c: any, i: number) =>\n renderChild(\n {\n id: `${block.id}-card-${i}`,\n type: \"blogCard\",\n props: c,\n } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${cardsHtml}</div></div></section>`;\n}\n\nexport function exportTeamCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { avatar, name, role } = (block as any).props;\n\n const avatarHtml = avatar\n ? `<img src=\"${escapeHtml(avatar)}\" alt=\"${escapeHtml(name)}\" style=\"width: 120px; height: 120px; border-radius: 50%; object-fit: cover; margin: 0 auto 1rem; display: block;\" />`\n : `<div style=\"width: 120px; height: 120px; border-radius: 50%; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; font-size: 2rem; font-weight: 600;\">${name ? name.charAt(0) : \"?\"}</div>`;\n\n return `<div ${dataBlockIdAttr(block.id)} class=\"sg-team-card\" style=\"text-align: center;\">${avatarHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.25rem;\">${escapeHtml(name)}</h3>${role ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(role)}</p>` : \"\"}</div>`;\n}\n\nexport function exportTeamGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 4,\n members = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"team-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n \"2rem\",\n );\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text);\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportTeamGrid requires renderChild function\");\n }\n\n const membersHtml = members\n .map((m: any, i: number) =>\n renderChild(\n {\n id: `${block.id}-member-${i}`,\n type: \"teamCard\",\n props: m,\n } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${membersHtml}</div></div></section>`;\n}\n\nexport function exportCourseCardGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title: courseTitle,\n subtitle: courseSubtitle,\n columns: courseCols = 3,\n cards = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"course-grid\");\n const responsiveConfig = resolveResponsiveColumns(courseCols, 1, 2, courseCols);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n \"2rem\",\n );\n\n const courseHeaderHtml =\n courseTitle || courseSubtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${courseTitle ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(courseTitle)}</h2>` : \"\"}${courseSubtitle ? `<p style=\"color: var(--sg-muted-text);\">${escapeHtml(courseSubtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const courseCardsHtml = cards\n .map((card: any) => {\n const imgHtml = card.image\n ? `<div style=\"height: 180px; background-image: url(${escapeHtml(card.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n const priceInner = card.period\n ? ' <span style=\"font-size: 0.875rem; font-weight: 400; color: var(--sg-muted-text);\">/ ' +\n escapeHtml(card.period) +\n \"</span>\"\n : \"\";\n const priceHtml =\n card.price != null\n ? `<p style=\"font-size: 1rem; font-weight: 600; color: var(--sg-primary); margin-bottom: 0.5rem;\">${escapeHtml(String(card.price))}${priceInner}</p>`\n : \"\";\n const durationHtml = card.duration\n ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">Duração: ${escapeHtml(card.duration)}</p>`\n : \"\";\n const levelHtml = card.level\n ? `<span style=\"display: inline-block; padding: 0.25rem 0.5rem; background-color: var(--sg-surface2); color: var(--sg-text); border-radius: 0.25rem; font-size: 0.75rem; margin-bottom: 0.5rem;\">${escapeHtml(card.level)}</span>`\n : \"\";\n return `<div style=\"background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\">${imgHtml}<div style=\"padding: 1.5rem;\">${levelHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(card.title)}</h3>${card.description ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;\">${escapeHtml(card.description)}</p>` : \"\"}${priceHtml}${durationHtml}</div></div>`;\n })\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${courseHeaderHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${courseCardsHtml}</div></div></section>`;\n}\n\nexport function exportCountdown(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n description,\n showPlaceholders = true,\n buttonText,\n buttonHref,\n variant = \"default\",\n badgeText,\n bg,\n } = (block as any).props;\n\n const isBanner = variant === \"banner\";\n const sectionStyle = `padding: 4rem 2rem; background-color: ${bg || \"var(--sg-primary)\"}; color: var(--sg-primary-text, #fff);`;\n\n // Responsive countdown grid\n const countdownId = generateScopedId(block.id || \"\", \"countdown-numbers\");\n const countdownCss = `\n /* Countdown numbers: 2×2 grid em mobile, 1 linha em desktop */\n #${countdownId} {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 1rem;\n margin-bottom: 1rem;\n }\n\n @media (min-width: 640px) {\n #${countdownId} {\n grid-template-columns: repeat(4, 1fr);\n gap: 1.5rem;\n }\n }\n `;\n\n const badgeCircle =\n isBanner && badgeText\n ? `<div style=\"width: 140px; height: 140px; border-radius: 50%; border: 3px solid rgba(255,255,255,0.5); display: flex; align-items: center; justify-content: center; flex-shrink: 0; text-align: center; padding: 1rem; font-weight: 600; font-size: 0.875rem;\">${escapeHtml(badgeText)}</div>`\n : \"\";\n\n const placeholdersHtml = showPlaceholders\n ? `<style>${countdownCss}</style><div id=\"${countdownId}\">${[\"Days\", \"Hours\", \"Minutes\", \"Seconds\"].map((label) => `<div style=\"text-align: center;\"><div style=\"font-size: 1.75rem; font-weight: 700;\">00</div><div style=\"font-size: 0.75rem; opacity: 0.9;\">${label}</div></div>`).join(\"\")}</div>`\n : \"\";\n\n const btnHtml = buttonText\n ? `<a href=\"${escapeHtml(buttonHref || \"#\")}\" style=\"display: inline-block; padding: 0.75rem 1.5rem; background-color: #fff; color: var(--sg-primary); font-weight: 600; border-radius: var(--sg-button-radius); text-decoration: none;\">${escapeHtml(buttonText)}</a>`\n : \"\";\n\n const inner = `<div style=\"max-width: 1200px; margin: 0 auto; display: flex; align-items: center; gap: 2rem; flex-wrap: wrap; justify-content: center;\">${badgeCircle}<div style=\"flex: 1; min-width: 200px;\">${title ? `<h2 style=\"margin-bottom: 0.5rem; font-size: 1.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${description ? `<p style=\"opacity: 0.9; margin-bottom: 1rem;\">${escapeHtml(description)}</p>` : \"\"}${placeholdersHtml}${btnHtml}</div></div>`;\n\n return `<section ${dataBlockIdAttr(block.id)} class=\"sg-countdown\" style=\"${sectionStyle}\" data-variant=\"${escapeHtml(variant)}\">${inner}</section>`;\n}\n\nexport function exportCarousel(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { slides = [] } = (block as any).props;\n const slide = slides[0];\n\n if (!slide)\n return `<section ${dataBlockIdAttr(block.id)} class=\"sg-carousel\"></section>`;\n\n // Responsive carousel: 1 col (mobile) → 2 cols split (desktop)\n const carouselId = generateScopedId(block.id || \"\", \"carousel\");\n const carouselCss = `\n /* Base: Mobile - 1 coluna (stack) */\n #${carouselId} {\n display: grid;\n grid-template-columns: 1fr;\n gap: 0;\n align-items: center;\n }\n\n /* Desktop: 2 colunas (split) */\n @media (min-width: 1024px) {\n #${carouselId} {\n grid-template-columns: 1fr 1fr;\n gap: 2rem;\n }\n }\n `;\n\n const slideImg = slide.image\n ? `<div style=\"min-height: 300px; background-image: url(${escapeHtml(slide.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const primaryBtn = slide.primaryButton\n ? `<a href=\"${escapeHtml(slide.primaryButton.href || \"#\")}\" style=\"padding: 0.75rem 1.5rem; background-color: #fff; color: var(--sg-primary); border-radius: var(--sg-button-radius); font-weight: 500; text-decoration: none;\">${escapeHtml(slide.primaryButton.text)}</a>`\n : \"\";\n\n const secondaryBtn = slide.secondaryButton\n ? `<a href=\"${escapeHtml(slide.secondaryButton.href || \"#\")}\" style=\"padding: 0.75rem 1.5rem; border: 2px solid #fff; color: #fff; border-radius: var(--sg-button-radius); font-weight: 500; text-decoration: none;\">${escapeHtml(slide.secondaryButton.text)}</a>`\n : \"\";\n\n const slideContent = `<div style=\"padding: 2rem; color: var(--sg-primary-text, #fff);\">${slide.title ? `<h2 style=\"margin-bottom: 1rem;\">${escapeHtml(slide.title)}</h2>` : \"\"}${slide.description ? `<p style=\"margin-bottom: 1.5rem; opacity: 0.9;\">${escapeHtml(slide.description)}</p>` : \"\"}<div style=\"display: flex; gap: 1rem; flex-wrap: wrap;\">${primaryBtn}${secondaryBtn}</div></div>`;\n\n const slideHtml = `<style>${carouselCss}</style><div id=\"${carouselId}\" style=\"background-color: var(--sg-primary); border-radius: var(--sg-card-radius); overflow: hidden;\">${slideImg}${slideContent}</div>`;\n\n return `<section ${dataBlockIdAttr(block.id)} class=\"sg-carousel\" style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${slideHtml}</div></section>`;\n}\n"],"names":["exportBlogCard","block","depth","basePath","theme","image","date","category","title","excerpt","linkText","linkHref","imgHtml","escapeHtml","metaHtml","linkHtml","dataBlockIdAttr","exportBlogCardGrid","renderChild","subtitle","columns","cards","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","headerHtml","cardsHtml","c","i","exportTeamCard","avatar","name","role","avatarHtml","exportTeamGrid","members","membersHtml","m","exportCourseCardGrid","courseTitle","courseSubtitle","courseCols","courseHeaderHtml","courseCardsHtml","card","priceInner","priceHtml","durationHtml","levelHtml","exportCountdown","description","showPlaceholders","buttonText","buttonHref","variant","badgeText","bg","isBanner","sectionStyle","countdownId","countdownCss","badgeCircle","placeholdersHtml","label","btnHtml","inner","exportCarousel","slides","slide","carouselId","carouselCss","slideImg","primaryBtn","secondaryBtn","slideContent","slideHtml"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { generateScopedId as C } from "../../shared/idGenerator.js";
|
|
|
3
3
|
import { resolveResponsiveColumns as k, generateResponsiveGridStyles as S } from "../../shared/responsiveGridHelper.js";
|
|
4
4
|
import { generateButtonHoverStyles as G, generateButtonOverlayCSS as R, getButtonHoverKeyframes as J } from "../../../shared/hoverEffects/buttonHover.js";
|
|
5
5
|
function Z(t, p, l, m) {
|
|
6
|
-
const { icon: n, title: o, description: r } = t.props, i = n ? '<div style="width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; color: #fff;">[★]</div>' : "";
|
|
6
|
+
const { icon: n, title: o, description: r } = t.props, i = n ? '<div style="width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; color: var(--sg-primary-text, #fff);">[★]</div>' : "";
|
|
7
7
|
return `<div ${$(t.id)} data-block-group="Conteúdo" style="padding: 1.5rem; text-align: center;">${i}<h3 style="font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;">${e(o)}</h3><p style="color: var(--sg-muted-text); font-size: 0.875rem;">${e(r)}</p></div>`;
|
|
8
8
|
}
|
|
9
9
|
function tt(t, p, l, m, n) {
|
|
@@ -14,7 +14,7 @@ function tt(t, p, l, m, n) {
|
|
|
14
14
|
variant: a = "default",
|
|
15
15
|
features: s = []
|
|
16
16
|
} = t.props, d = C(t.id || "", "feature-grid"), u = k(i, 1, 2, i), { inlineStyles: g, mediaQueries: v } = S(d, u, "2rem"), y = a === "image-cards", f = o || r ? `<div data-block-group="Conteúdo" style="text-align: center; margin-bottom: 3rem;">${o ? `<h2 style="font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;">${e(o)}</h2>` : ""}${r ? `<p style="color: var(--sg-muted-text); font-size: 1.125rem;">${e(r)}</p>` : ""}</div>` : "", z = s.map((c) => {
|
|
17
|
-
const h = y && c.image ? `<div style="width: 100%; height: 200px; background-image: url(${e(c.image)}); background-size: cover; background-position: center;"></div>` : "", b = !y && c.icon ? '<div style="width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin-bottom: 1rem; color: #fff;">[★]</div>' : "", B = c.link ? `<a href="${e(c.link.href || "#")}" style="display: inline-block; margin-top: 0.75rem; color: var(--sg-primary); font-weight: 500; text-decoration: none; border: 1px solid var(--sg-primary); padding: 0.5rem 1rem; border-radius: var(--sg-button-radius);">${e(c.link.text)}</a>` : "", H = y && c.image ? "1.5rem" : "2rem";
|
|
17
|
+
const h = y && c.image ? `<div style="width: 100%; height: 200px; background-image: url(${e(c.image)}); background-size: cover; background-position: center;"></div>` : "", b = !y && c.icon ? '<div style="width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin-bottom: 1rem; color: var(--sg-primary-text, #fff);">[★]</div>' : "", B = c.link ? `<a href="${e(c.link.href || "#")}" style="display: inline-block; margin-top: 0.75rem; color: var(--sg-primary); font-weight: 500; text-decoration: none; border: 1px solid var(--sg-primary); padding: 0.5rem 1rem; border-radius: var(--sg-button-radius);">${e(c.link.text)}</a>` : "", H = y && c.image ? "1.5rem" : "2rem";
|
|
18
18
|
return `<div style="background-color: var(--sg-bg); border-radius: 0.75rem; padding: ${y && c.image ? 0 : "2rem"}; box-shadow: var(--sg-card-shadow); overflow: hidden;">${h}<div style="padding: ${H};">${b}<h3 style="font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;">${e(c.title)}</h3><p style="color: var(--sg-muted-text);">${e(c.description)}</p>${B}</div></div>`;
|
|
19
19
|
}).join("");
|
|
20
20
|
return `<style>${v}</style><section ${w(t.id)} ${$(t.id)} style="padding: 4rem 0; background-color: var(--sg-surface);"><div style="max-width: 1200px; margin: 0 auto; padding: 0 1rem;">${f}<div data-block-group="Layout" id="${d}" style="${g}">${z}</div></div></section>`;
|
|
@@ -103,7 +103,7 @@ function rt(t, p, l, m) {
|
|
|
103
103
|
buttonText: s,
|
|
104
104
|
highlighted: d,
|
|
105
105
|
badge: u
|
|
106
|
-
} = t.props, g = u ? `<span style="position: absolute; top: -0.75rem; right: 1rem; background-color: var(--sg-primary); color: #fff; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem;">${e(u)}</span>` : "", v = a.map(
|
|
106
|
+
} = t.props, g = u ? `<span style="position: absolute; top: -0.75rem; right: 1rem; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem;">${e(u)}</span>` : "", v = a.map(
|
|
107
107
|
(f) => `<li style="padding: 0.5rem 0; display: flex; align-items: center; gap: 0.5rem;"><span style="color: var(--sg-success);">✓</span>${e(f)}</li>`
|
|
108
108
|
).join(""), y = d ? "background-color: var(--sg-primary); color: var(--sg-primary-text); border: none;" : "background-color: transparent; color: var(--sg-primary); border: 1px solid var(--sg-primary);";
|
|
109
109
|
return `<div ${$(t.id)} data-block-group="Conteúdo" style="background-color: var(--sg-bg); border-radius: 0.75rem; padding: 2rem; box-shadow: ${d ? "var(--sg-shadow-strong)" : "var(--sg-card-shadow)"}; border: ${d ? "2px solid var(--sg-primary)" : "1px solid var(--sg-border)"}; position: relative;">${g}<h3 style="font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;">${e(n)}</h3>${i ? `<p style="color: var(--sg-muted-text); margin-bottom: 1rem;">${e(i)}</p>` : ""}<div style="margin-bottom: 1.5rem;"><span style="font-size: 2.5rem; font-weight: 700;">${e(o)}</span>${r ? `<span style="color: var(--sg-muted-text);">${e(r)}</span>` : ""}</div><ul style="list-style: none; padding: 0; margin-bottom: 1.5rem;">${v}</ul>${s ? `<button style="width: 100%; padding: 0.625rem 1.25rem; ${y} border-radius: var(--sg-button-radius); font-weight: 500; cursor: pointer;">${e(s)}</button>` : ""}</div>`;
|
|
@@ -130,7 +130,7 @@ function it(t, p, l, m) {
|
|
|
130
130
|
authorCompany: i,
|
|
131
131
|
authorAvatar: a,
|
|
132
132
|
rating: s
|
|
133
|
-
} = t.props, d = s ? `<div data-block-group="Estilo" style="margin-bottom: 1rem; color: #fbbf24;">${"★".repeat(s)}</div>` : "", u = a ? `<img src="${e(a)}" alt="${e(o)}" style="width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover;" />` : `<div style="width: 3rem; height: 3rem; border-radius: 50%; background-color: var(--sg-primary); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 600;">${o ? o.split(" ").map((g) => g[0]).join("").toUpperCase().slice(0, 2) : "?"}</div>`;
|
|
133
|
+
} = t.props, d = s ? `<div data-block-group="Estilo" style="margin-bottom: 1rem; color: #fbbf24;">${"★".repeat(s)}</div>` : "", u = a ? `<img src="${e(a)}" alt="${e(o)}" style="width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover;" />` : `<div style="width: 3rem; height: 3rem; border-radius: 50%; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); display: flex; align-items: center; justify-content: center; font-weight: 600;">${o ? o.split(" ").map((g) => g[0]).join("").toUpperCase().slice(0, 2) : "?"}</div>`;
|
|
134
134
|
return `<div ${$(t.id)} style="background-color: var(--sg-surface); border-radius: var(--sg-card-radius); padding: 2rem;">${d}<blockquote data-block-group="Conteúdo" style="font-size: 1rem; margin-bottom: 1.5rem; font-style: italic;">"${e(n)}"</blockquote><div data-block-group="Autor" style="display: flex; align-items: center; gap: 1rem;">${u}<div><div style="font-weight: 600;">${e(o)}</div>${r || i ? `<div style="color: var(--sg-muted-text); font-size: 0.875rem;">${e(r || "")}${r && i ? ", " : ""}${e(i || "")}</div>` : ""}</div></div></div>`;
|
|
135
135
|
}
|
|
136
136
|
function nt(t, p, l, m, n) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketingExporters.js","sources":["../../../../../src/engine/export/exporters/sections/MarketingExporters.ts"],"sourcesContent":["/**\n * Marketing Sections Exporters\n * Feature, FeatureGrid, Pricing, Testimonials, FAQ, CTA, Stats, Logo Cloud, etc.\n * Mobile-first responsive grids with media queries\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, blockIdAttr, escapeHtml, resolveHref, linkTargetAttr } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport { resolveResponsiveColumns, generateResponsiveGridStyles } from \"../../shared/responsiveGridHelper\";\nimport {\n generateButtonHoverStyles,\n generateButtonOverlayCSS,\n getButtonHoverKeyframes,\n type ButtonHoverEffect,\n type ButtonHoverOverlay,\n} from \"../../../shared/hoverEffects\";\n\nexport function exportFeature(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { icon, title, description } = (block as any).props;\n const iconHtml = icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; color: #fff;\">[★]</div>`\n : \"\";\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"padding: 1.5rem; text-align: center;\">${iconHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3><p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(description)}</p></div>`;\n}\n\nexport function exportFeatureGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n variant = \"default\",\n features = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"feature-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const isImageCards = variant === \"image-cards\";\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const featuresHtml = features\n .map((f: any) => {\n const imgBlock =\n isImageCards && f.image\n ? `<div style=\"width: 100%; height: 200px; background-image: url(${escapeHtml(f.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n const iconBlock =\n !isImageCards && f.icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin-bottom: 1rem; color: #fff;\">[★]</div>`\n : \"\";\n const linkBlock = f.link\n ? `<a href=\"${escapeHtml(f.link.href || \"#\")}\" style=\"display: inline-block; margin-top: 0.75rem; color: var(--sg-primary); font-weight: 500; text-decoration: none; border: 1px solid var(--sg-primary); padding: 0.5rem 1rem; border-radius: var(--sg-button-radius);\">${escapeHtml(f.link.text)}</a>`\n : \"\";\n const innerPadding = isImageCards && f.image ? \"1.5rem\" : \"2rem\";\n return `<div style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: ${isImageCards && f.image ? 0 : \"2rem\"}; box-shadow: var(--sg-card-shadow); overflow: hidden;\">${imgBlock}<div style=\"padding: ${innerPadding};\">${iconBlock}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(f.title)}</h3><p style=\"color: var(--sg-muted-text);\">${escapeHtml(f.description)}</p>${linkBlock}</div></div>`;\n })\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${featuresHtml}</div></div></section>`;\n}\n\nexport function exportCta(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n description: ctaDesc,\n primaryButton,\n secondaryButton,\n variant = \"centered\",\n // Button size\n buttonSize = \"md\",\n // Button hover effects\n buttonHoverEffect = \"scale\",\n buttonHoverIntensity = 50,\n buttonHoverOverlay = \"none\",\n buttonHoverIconName = \"arrow-right\",\n } = (block as any).props;\n\n // Size-based styles\n const sizeStyles: Record<string, { padding: string; fontSize: string }> = {\n sm: { padding: \"0.5rem 1rem\", fontSize: \"0.875rem\" },\n md: { padding: \"0.75rem 1.5rem\", fontSize: \"1rem\" },\n lg: { padding: \"1rem 2rem\", fontSize: \"1.125rem\" },\n };\n const btnSize = sizeStyles[buttonSize] || sizeStyles.md;\n\n // Responsive buttons: column (mobile) → row (desktop)\n const ctaId = generateScopedId(block.id || \"\", \"cta-actions\");\n const scope = `[data-block-id=\"${block.id}\"]`;\n\n const isGradient = variant === \"gradient\";\n const primaryColor = theme?.colors?.primary || \"#3b82f6\";\n const primaryText = theme?.colors?.primaryText || \"#ffffff\";\n\n // Button colors depend on gradient variant\n const primaryBtnBg = isGradient ? \"#fff\" : primaryColor;\n const primaryBtnText = isGradient ? primaryColor : primaryText;\n const secondaryBtnBg = \"transparent\";\n const secondaryBtnText = isGradient ? \"#fff\" : primaryColor;\n const secondaryBtnBorder = isGradient ? \"#fff\" : primaryColor;\n\n let buttonsCss = `\n @media (max-width: 640px) {\n #${ctaId} {\n flex-direction: column !important;\n width: 100%;\n }\n #${ctaId} a {\n width: 100% !important;\n text-align: center;\n }\n }\n `;\n\n // Generate hover CSS\n if (buttonHoverEffect !== \"none\") {\n // Primary button hover\n const primaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: primaryBtnBg,\n buttonTextColor: primaryBtnText,\n variant: \"solid\",\n });\n\n // Secondary button hover\n const secondaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: secondaryBtnBorder,\n buttonTextColor: secondaryBtnText,\n variant: \"outline\",\n });\n\n // Base styles if needed\n if (primaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--primary {\n ${primaryHoverResult.base}\n }\n `;\n }\n\n if (secondaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--secondary {\n ${secondaryHoverResult.base}\n }\n `;\n }\n\n // Hover styles\n buttonsCss += `\n ${scope} .sg-cta__btn--primary:hover {\n ${primaryHoverResult.hover}\n }\n ${scope} .sg-cta__btn--secondary:hover {\n ${secondaryHoverResult.hover}\n }\n `;\n\n // Add keyframes for pulse animation\n buttonsCss += getButtonHoverKeyframes();\n }\n\n // Efeito overlay (adicional)\n if (buttonHoverOverlay && buttonHoverOverlay !== \"none\") {\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--primary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: primaryBtnText,\n });\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--secondary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: secondaryBtnText,\n });\n }\n\n const bgStyle = isGradient\n ? \"background: linear-gradient(135deg, var(--sg-primary), var(--sg-accent));\"\n : \"background-color: var(--sg-surface);\";\n const textColor = isGradient ? \"#fff\" : \"var(--sg-text)\";\n const mutedColor = isGradient\n ? \"rgba(255,255,255,0.9)\"\n : \"var(--sg-muted-text)\";\n const ctaPrimaryHref = primaryButton\n ? resolveHref(primaryButton.href || \"#\", basePath)\n : \"#\";\n const ctaSecondaryHref = secondaryButton\n ? resolveHref(secondaryButton.href || \"#\", basePath)\n : \"#\";\n\n const primaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${primaryBtnBg}; color: ${primaryBtnText}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n const secondaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${secondaryBtnBg}; color: ${secondaryBtnText}; border: 2px solid ${secondaryBtnBorder}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n\n const primaryBtnHtml = primaryButton\n ? `<a href=\"${escapeHtml(ctaPrimaryHref)}\"${linkTargetAttr(ctaPrimaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--primary\" style=\"${primaryBtnStyle}\">${escapeHtml(primaryButton.text)}</a>`\n : \"\";\n const secondaryBtnHtml = secondaryButton\n ? `<a href=\"${escapeHtml(ctaSecondaryHref)}\"${linkTargetAttr(ctaSecondaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--secondary\" style=\"${secondaryBtnStyle}\">${escapeHtml(secondaryButton.text)}</a>`\n : \"\";\n return `<style>${buttonsCss}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; ${bgStyle} text-align: center;\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\"><div data-block-group=\"Conteúdo\"><h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 1rem; color: ${textColor};\">${escapeHtml(title)}</h2>${ctaDesc ? `<p style=\"font-size: 1.125rem; margin-bottom: 2rem; color: ${mutedColor};\">${escapeHtml(ctaDesc)}</p>` : \"\"}</div><div data-block-group=\"Botoes\" id=\"${ctaId}\" style=\"display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap;\">${primaryBtnHtml}${secondaryBtnHtml}</div></div></section>`;\n}\n\nexport function exportPricingCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n name,\n price,\n period,\n description: desc,\n features = [],\n buttonText,\n highlighted,\n badge: pBadge,\n } = (block as any).props;\n\n const badgeHtml = pBadge\n ? `<span style=\"position: absolute; top: -0.75rem; right: 1rem; background-color: var(--sg-primary); color: #fff; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem;\">${escapeHtml(pBadge)}</span>`\n : \"\";\n const featuresHtml = features\n .map(\n (f: string) =>\n `<li style=\"padding: 0.5rem 0; display: flex; align-items: center; gap: 0.5rem;\"><span style=\"color: var(--sg-success);\">\\u2713</span>${escapeHtml(f)}</li>`,\n )\n .join(\"\");\n const buttonStyle = highlighted\n ? \"background-color: var(--sg-primary); color: var(--sg-primary-text); border: none;\"\n : \"background-color: transparent; color: var(--sg-primary); border: 1px solid var(--sg-primary);\";\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: 2rem; box-shadow: ${highlighted ? \"var(--sg-shadow-strong)\" : \"var(--sg-card-shadow)\"}; border: ${highlighted ? \"2px solid var(--sg-primary)\" : \"1px solid var(--sg-border)\"}; position: relative;\">${badgeHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(name)}</h3>${desc ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 1rem;\">${escapeHtml(desc)}</p>` : \"\"}<div style=\"margin-bottom: 1.5rem;\"><span style=\"font-size: 2.5rem; font-weight: 700;\">${escapeHtml(price)}</span>${period ? `<span style=\"color: var(--sg-muted-text);\">${escapeHtml(period)}</span>` : \"\"}</div><ul style=\"list-style: none; padding: 0; margin-bottom: 1.5rem;\">${featuresHtml}</ul>${buttonText ? `<button style=\"width: 100%; padding: 0.625rem 1.25rem; ${buttonStyle} border-radius: var(--sg-button-radius); font-weight: 500; cursor: pointer;\">${escapeHtml(buttonText)}</button>` : \"\"}</div>`;\n}\n\nexport function exportPricing(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, plans = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop, max 4)\n const gridId = generateScopedId(block.id || \"\", \"pricing-grid\");\n const maxCols = Math.min(plans.length, 4);\n const responsiveConfig = resolveResponsiveColumns({ lg: maxCols }, 1, 2, maxCols);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"align-items: start;\");\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportPricing requires renderChild function\");\n }\n\n const plansHtml = plans\n .map((p: any) =>\n renderChild(\n { id: `${block.id}-plan`, type: \"pricingCard\", props: p } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${plansHtml}</div></div></section>`;\n}\n\nexport function exportTestimonial(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n quote,\n authorName,\n authorRole,\n authorCompany,\n authorAvatar,\n rating,\n } = (block as any).props;\n\n const ratingHtml = rating\n ? `<div data-block-group=\"Estilo\" style=\"margin-bottom: 1rem; color: #fbbf24;\">${\"\\u2605\".repeat(rating)}</div>`\n : \"\";\n const avatarHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover;\" />`\n : `<div style=\"width: 3rem; height: 3rem; border-radius: 50%; background-color: var(--sg-primary); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 600;\">${\n authorName\n ? authorName\n .split(\" \")\n .map((n: string) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n : \"?\"\n }</div>`;\n return `<div ${dataBlockIdAttr(block.id)} style=\"background-color: var(--sg-surface); border-radius: var(--sg-card-radius); padding: 2rem;\">${ratingHtml}<blockquote data-block-group=\"Conteúdo\" style=\"font-size: 1rem; margin-bottom: 1.5rem; font-style: italic;\">\"${escapeHtml(quote)}\"</blockquote><div data-block-group=\"Autor\" style=\"display: flex; align-items: center; gap: 1rem;\">${avatarHtml}<div><div style=\"font-weight: 600;\">${escapeHtml(authorName)}</div>${authorRole || authorCompany ? `<div style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(authorRole || \"\")}${authorRole && authorCompany ? \", \" : \"\"}${escapeHtml(authorCompany || \"\")}</div>` : \"\"}</div></div></div>`;\n}\n\nexport function exportTestimonialGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n testimonials = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"testimonial-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportTestimonialGrid requires renderChild function\");\n }\n\n const testimonialsHtml = testimonials\n .map((t: any) =>\n renderChild(\n { id: `${block.id}-t`, type: \"testimonial\", props: t } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${testimonialsHtml}</div></div></section>`;\n}\n\nexport function exportFaqItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { question, answer } = (block as any).props;\n return `<details ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"border-bottom: 1px solid var(--sg-border); padding: 1rem 0;\"><summary style=\"font-weight: 600; cursor: pointer; display: flex; justify-content: space-between; align-items: center;\">${escapeHtml(question)}<span>+</span></summary><p style=\"margin-top: 1rem; color: var(--sg-muted-text);\">${escapeHtml(answer)}</p></details>`;\n}\n\nexport function exportFaq(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportFaq requires renderChild function\");\n }\n\n const itemsHtml = items\n .map((i: any) =>\n renderChild(\n { id: `${block.id}-faq`, type: \"faqItem\", props: i } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div>${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStats(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"stats-grid\");\n const responsiveConfig = resolveResponsiveColumns({ lg: items.length }, 1, 2, items.length);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"text-align: center;\");\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const itemsHtml = items\n .map(\n (i: any) =>\n `<div style=\"text-align: center;\"><div style=\"font-size: 3rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(i.prefix || \"\")}${escapeHtml(i.value)}${escapeHtml(i.suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(i.label)}</div></div>`,\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStatItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { value, label, prefix, suffix } = (block as any).props;\n return `<div ${dataBlockIdAttr(block.id)} style=\"text-align: center;\"><div style=\"font-size: 2.5rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(prefix || \"\")}${escapeHtml(value)}${escapeHtml(suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(label)}</div></div>`;\n}\n\nexport function exportLogoCloud(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, logos = [], grayscale } = (block as any).props;\n\n const titleHtml = title\n ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 2rem;\">${escapeHtml(title)}</p>`\n : \"\";\n\n const logosHtml = logos\n .map(\n (l: any) =>\n `<img src=\"${escapeHtml(l.src)}\" alt=\"${escapeHtml(l.alt)}\" style=\"height: 2rem; object-fit: contain; ${grayscale ? \"filter: grayscale(100%); opacity: 0.6;\" : \"\"}\" />`,\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 2rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem; text-align: center;\">${titleHtml}<div style=\"display: flex; justify-content: center; align-items: center; gap: 3rem; flex-wrap: wrap;\">${logosHtml}</div></div></section>`;\n}\n\nexport function exportSocialLinks(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n links = [],\n size = \"md\",\n variant = \"default\",\n } = (block as any).props;\n\n const sizeMap: Record<string, string> = {\n sm: \"1.25rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n };\n\n const iconSize = sizeMap[size] || sizeMap.md;\n\n const linksHtml = links\n .map(\n (l: any) =>\n `<a href=\"${escapeHtml(l.url)}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: flex; align-items: center; justify-content: center; width: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; height: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; background-color: ${variant === \"filled\" ? \"var(--sg-surface)\" : \"transparent\"}; border-radius: ${variant === \"filled\" ? \"50%\" : \"0\"}; color: var(--sg-muted-text); text-decoration: none;\">[${escapeHtml(l.platform)}]</a>`,\n )\n .join(\"\");\n\n return `<div ${dataBlockIdAttr(block.id)} style=\"display: flex; gap: 1rem; align-items: center;\">${linksHtml}</div>`;\n}\n"],"names":["exportFeature","block","depth","basePath","theme","icon","title","description","iconHtml","dataBlockIdAttr","escapeHtml","exportFeatureGrid","renderChild","subtitle","columns","variant","features","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","isImageCards","headerHtml","featuresHtml","f","imgBlock","iconBlock","linkBlock","innerPadding","blockIdAttr","exportCta","ctaDesc","primaryButton","secondaryButton","buttonSize","buttonHoverEffect","buttonHoverIntensity","buttonHoverOverlay","buttonHoverIconName","sizeStyles","btnSize","ctaId","scope","isGradient","primaryColor","primaryText","primaryBtnBg","primaryBtnText","secondaryBtnBg","secondaryBtnText","secondaryBtnBorder","buttonsCss","primaryHoverResult","generateButtonHoverStyles","secondaryHoverResult","getButtonHoverKeyframes","generateButtonOverlayCSS","bgStyle","textColor","mutedColor","ctaPrimaryHref","resolveHref","ctaSecondaryHref","primaryBtnStyle","secondaryBtnStyle","primaryBtnHtml","linkTargetAttr","secondaryBtnHtml","exportPricingCard","name","price","period","desc","buttonText","highlighted","pBadge","badgeHtml","buttonStyle","exportPricing","plans","maxCols","plansHtml","p","exportTestimonial","quote","authorName","authorRole","authorCompany","authorAvatar","rating","ratingHtml","avatarHtml","n","exportTestimonialGrid","testimonials","testimonialsHtml","t","exportFaqItem","question","answer","exportFaq","items","itemsHtml","i","exportStats","exportStatItem","value","label","prefix","suffix","exportLogoCloud","logos","grayscale","titleHtml","logosHtml","l","exportSocialLinks","links","size","sizeMap","iconSize","linksHtml"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarketingExporters.js","sources":["../../../../../src/engine/export/exporters/sections/MarketingExporters.ts"],"sourcesContent":["/**\n * Marketing Sections Exporters\n * Feature, FeatureGrid, Pricing, Testimonials, FAQ, CTA, Stats, Logo Cloud, etc.\n * Mobile-first responsive grids with media queries\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, blockIdAttr, escapeHtml, resolveHref, linkTargetAttr } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport { resolveResponsiveColumns, generateResponsiveGridStyles } from \"../../shared/responsiveGridHelper\";\nimport {\n generateButtonHoverStyles,\n generateButtonOverlayCSS,\n getButtonHoverKeyframes,\n type ButtonHoverEffect,\n type ButtonHoverOverlay,\n} from \"../../../shared/hoverEffects\";\n\nexport function exportFeature(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { icon, title, description } = (block as any).props;\n const iconHtml = icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; color: var(--sg-primary-text, #fff);\">[★]</div>`\n : \"\";\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"padding: 1.5rem; text-align: center;\">${iconHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3><p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(description)}</p></div>`;\n}\n\nexport function exportFeatureGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n variant = \"default\",\n features = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"feature-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const isImageCards = variant === \"image-cards\";\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const featuresHtml = features\n .map((f: any) => {\n const imgBlock =\n isImageCards && f.image\n ? `<div style=\"width: 100%; height: 200px; background-image: url(${escapeHtml(f.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n const iconBlock =\n !isImageCards && f.icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin-bottom: 1rem; color: var(--sg-primary-text, #fff);\">[★]</div>`\n : \"\";\n const linkBlock = f.link\n ? `<a href=\"${escapeHtml(f.link.href || \"#\")}\" style=\"display: inline-block; margin-top: 0.75rem; color: var(--sg-primary); font-weight: 500; text-decoration: none; border: 1px solid var(--sg-primary); padding: 0.5rem 1rem; border-radius: var(--sg-button-radius);\">${escapeHtml(f.link.text)}</a>`\n : \"\";\n const innerPadding = isImageCards && f.image ? \"1.5rem\" : \"2rem\";\n return `<div style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: ${isImageCards && f.image ? 0 : \"2rem\"}; box-shadow: var(--sg-card-shadow); overflow: hidden;\">${imgBlock}<div style=\"padding: ${innerPadding};\">${iconBlock}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(f.title)}</h3><p style=\"color: var(--sg-muted-text);\">${escapeHtml(f.description)}</p>${linkBlock}</div></div>`;\n })\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${featuresHtml}</div></div></section>`;\n}\n\nexport function exportCta(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n description: ctaDesc,\n primaryButton,\n secondaryButton,\n variant = \"centered\",\n // Button size\n buttonSize = \"md\",\n // Button hover effects\n buttonHoverEffect = \"scale\",\n buttonHoverIntensity = 50,\n buttonHoverOverlay = \"none\",\n buttonHoverIconName = \"arrow-right\",\n } = (block as any).props;\n\n // Size-based styles\n const sizeStyles: Record<string, { padding: string; fontSize: string }> = {\n sm: { padding: \"0.5rem 1rem\", fontSize: \"0.875rem\" },\n md: { padding: \"0.75rem 1.5rem\", fontSize: \"1rem\" },\n lg: { padding: \"1rem 2rem\", fontSize: \"1.125rem\" },\n };\n const btnSize = sizeStyles[buttonSize] || sizeStyles.md;\n\n // Responsive buttons: column (mobile) → row (desktop)\n const ctaId = generateScopedId(block.id || \"\", \"cta-actions\");\n const scope = `[data-block-id=\"${block.id}\"]`;\n\n const isGradient = variant === \"gradient\";\n const primaryColor = theme?.colors?.primary || \"#3b82f6\";\n const primaryText = theme?.colors?.primaryText || \"#ffffff\";\n\n // Button colors depend on gradient variant\n const primaryBtnBg = isGradient ? \"#fff\" : primaryColor;\n const primaryBtnText = isGradient ? primaryColor : primaryText;\n const secondaryBtnBg = \"transparent\";\n const secondaryBtnText = isGradient ? \"#fff\" : primaryColor;\n const secondaryBtnBorder = isGradient ? \"#fff\" : primaryColor;\n\n let buttonsCss = `\n @media (max-width: 640px) {\n #${ctaId} {\n flex-direction: column !important;\n width: 100%;\n }\n #${ctaId} a {\n width: 100% !important;\n text-align: center;\n }\n }\n `;\n\n // Generate hover CSS\n if (buttonHoverEffect !== \"none\") {\n // Primary button hover\n const primaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: primaryBtnBg,\n buttonTextColor: primaryBtnText,\n variant: \"solid\",\n });\n\n // Secondary button hover\n const secondaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: secondaryBtnBorder,\n buttonTextColor: secondaryBtnText,\n variant: \"outline\",\n });\n\n // Base styles if needed\n if (primaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--primary {\n ${primaryHoverResult.base}\n }\n `;\n }\n\n if (secondaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--secondary {\n ${secondaryHoverResult.base}\n }\n `;\n }\n\n // Hover styles\n buttonsCss += `\n ${scope} .sg-cta__btn--primary:hover {\n ${primaryHoverResult.hover}\n }\n ${scope} .sg-cta__btn--secondary:hover {\n ${secondaryHoverResult.hover}\n }\n `;\n\n // Add keyframes for pulse animation\n buttonsCss += getButtonHoverKeyframes();\n }\n\n // Efeito overlay (adicional)\n if (buttonHoverOverlay && buttonHoverOverlay !== \"none\") {\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--primary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: primaryBtnText,\n });\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--secondary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: secondaryBtnText,\n });\n }\n\n const bgStyle = isGradient\n ? \"background: linear-gradient(135deg, var(--sg-primary), var(--sg-accent));\"\n : \"background-color: var(--sg-surface);\";\n const textColor = isGradient ? \"#fff\" : \"var(--sg-text)\";\n const mutedColor = isGradient\n ? \"rgba(255,255,255,0.9)\"\n : \"var(--sg-muted-text)\";\n const ctaPrimaryHref = primaryButton\n ? resolveHref(primaryButton.href || \"#\", basePath)\n : \"#\";\n const ctaSecondaryHref = secondaryButton\n ? resolveHref(secondaryButton.href || \"#\", basePath)\n : \"#\";\n\n const primaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${primaryBtnBg}; color: ${primaryBtnText}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n const secondaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${secondaryBtnBg}; color: ${secondaryBtnText}; border: 2px solid ${secondaryBtnBorder}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n\n const primaryBtnHtml = primaryButton\n ? `<a href=\"${escapeHtml(ctaPrimaryHref)}\"${linkTargetAttr(ctaPrimaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--primary\" style=\"${primaryBtnStyle}\">${escapeHtml(primaryButton.text)}</a>`\n : \"\";\n const secondaryBtnHtml = secondaryButton\n ? `<a href=\"${escapeHtml(ctaSecondaryHref)}\"${linkTargetAttr(ctaSecondaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--secondary\" style=\"${secondaryBtnStyle}\">${escapeHtml(secondaryButton.text)}</a>`\n : \"\";\n return `<style>${buttonsCss}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; ${bgStyle} text-align: center;\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\"><div data-block-group=\"Conteúdo\"><h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 1rem; color: ${textColor};\">${escapeHtml(title)}</h2>${ctaDesc ? `<p style=\"font-size: 1.125rem; margin-bottom: 2rem; color: ${mutedColor};\">${escapeHtml(ctaDesc)}</p>` : \"\"}</div><div data-block-group=\"Botoes\" id=\"${ctaId}\" style=\"display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap;\">${primaryBtnHtml}${secondaryBtnHtml}</div></div></section>`;\n}\n\nexport function exportPricingCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n name,\n price,\n period,\n description: desc,\n features = [],\n buttonText,\n highlighted,\n badge: pBadge,\n } = (block as any).props;\n\n const badgeHtml = pBadge\n ? `<span style=\"position: absolute; top: -0.75rem; right: 1rem; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem;\">${escapeHtml(pBadge)}</span>`\n : \"\";\n const featuresHtml = features\n .map(\n (f: string) =>\n `<li style=\"padding: 0.5rem 0; display: flex; align-items: center; gap: 0.5rem;\"><span style=\"color: var(--sg-success);\">\\u2713</span>${escapeHtml(f)}</li>`,\n )\n .join(\"\");\n const buttonStyle = highlighted\n ? \"background-color: var(--sg-primary); color: var(--sg-primary-text); border: none;\"\n : \"background-color: transparent; color: var(--sg-primary); border: 1px solid var(--sg-primary);\";\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: 2rem; box-shadow: ${highlighted ? \"var(--sg-shadow-strong)\" : \"var(--sg-card-shadow)\"}; border: ${highlighted ? \"2px solid var(--sg-primary)\" : \"1px solid var(--sg-border)\"}; position: relative;\">${badgeHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(name)}</h3>${desc ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 1rem;\">${escapeHtml(desc)}</p>` : \"\"}<div style=\"margin-bottom: 1.5rem;\"><span style=\"font-size: 2.5rem; font-weight: 700;\">${escapeHtml(price)}</span>${period ? `<span style=\"color: var(--sg-muted-text);\">${escapeHtml(period)}</span>` : \"\"}</div><ul style=\"list-style: none; padding: 0; margin-bottom: 1.5rem;\">${featuresHtml}</ul>${buttonText ? `<button style=\"width: 100%; padding: 0.625rem 1.25rem; ${buttonStyle} border-radius: var(--sg-button-radius); font-weight: 500; cursor: pointer;\">${escapeHtml(buttonText)}</button>` : \"\"}</div>`;\n}\n\nexport function exportPricing(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, plans = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop, max 4)\n const gridId = generateScopedId(block.id || \"\", \"pricing-grid\");\n const maxCols = Math.min(plans.length, 4);\n const responsiveConfig = resolveResponsiveColumns({ lg: maxCols }, 1, 2, maxCols);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"align-items: start;\");\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportPricing requires renderChild function\");\n }\n\n const plansHtml = plans\n .map((p: any) =>\n renderChild(\n { id: `${block.id}-plan`, type: \"pricingCard\", props: p } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${plansHtml}</div></div></section>`;\n}\n\nexport function exportTestimonial(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n quote,\n authorName,\n authorRole,\n authorCompany,\n authorAvatar,\n rating,\n } = (block as any).props;\n\n const ratingHtml = rating\n ? `<div data-block-group=\"Estilo\" style=\"margin-bottom: 1rem; color: #fbbf24;\">${\"\\u2605\".repeat(rating)}</div>`\n : \"\";\n const avatarHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover;\" />`\n : `<div style=\"width: 3rem; height: 3rem; border-radius: 50%; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); display: flex; align-items: center; justify-content: center; font-weight: 600;\">${\n authorName\n ? authorName\n .split(\" \")\n .map((n: string) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n : \"?\"\n }</div>`;\n return `<div ${dataBlockIdAttr(block.id)} style=\"background-color: var(--sg-surface); border-radius: var(--sg-card-radius); padding: 2rem;\">${ratingHtml}<blockquote data-block-group=\"Conteúdo\" style=\"font-size: 1rem; margin-bottom: 1.5rem; font-style: italic;\">\"${escapeHtml(quote)}\"</blockquote><div data-block-group=\"Autor\" style=\"display: flex; align-items: center; gap: 1rem;\">${avatarHtml}<div><div style=\"font-weight: 600;\">${escapeHtml(authorName)}</div>${authorRole || authorCompany ? `<div style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(authorRole || \"\")}${authorRole && authorCompany ? \", \" : \"\"}${escapeHtml(authorCompany || \"\")}</div>` : \"\"}</div></div></div>`;\n}\n\nexport function exportTestimonialGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n testimonials = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"testimonial-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportTestimonialGrid requires renderChild function\");\n }\n\n const testimonialsHtml = testimonials\n .map((t: any) =>\n renderChild(\n { id: `${block.id}-t`, type: \"testimonial\", props: t } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${testimonialsHtml}</div></div></section>`;\n}\n\nexport function exportFaqItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { question, answer } = (block as any).props;\n return `<details ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"border-bottom: 1px solid var(--sg-border); padding: 1rem 0;\"><summary style=\"font-weight: 600; cursor: pointer; display: flex; justify-content: space-between; align-items: center;\">${escapeHtml(question)}<span>+</span></summary><p style=\"margin-top: 1rem; color: var(--sg-muted-text);\">${escapeHtml(answer)}</p></details>`;\n}\n\nexport function exportFaq(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportFaq requires renderChild function\");\n }\n\n const itemsHtml = items\n .map((i: any) =>\n renderChild(\n { id: `${block.id}-faq`, type: \"faqItem\", props: i } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div>${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStats(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"stats-grid\");\n const responsiveConfig = resolveResponsiveColumns({ lg: items.length }, 1, 2, items.length);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"text-align: center;\");\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const itemsHtml = items\n .map(\n (i: any) =>\n `<div style=\"text-align: center;\"><div style=\"font-size: 3rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(i.prefix || \"\")}${escapeHtml(i.value)}${escapeHtml(i.suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(i.label)}</div></div>`,\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStatItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { value, label, prefix, suffix } = (block as any).props;\n return `<div ${dataBlockIdAttr(block.id)} style=\"text-align: center;\"><div style=\"font-size: 2.5rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(prefix || \"\")}${escapeHtml(value)}${escapeHtml(suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(label)}</div></div>`;\n}\n\nexport function exportLogoCloud(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, logos = [], grayscale } = (block as any).props;\n\n const titleHtml = title\n ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 2rem;\">${escapeHtml(title)}</p>`\n : \"\";\n\n const logosHtml = logos\n .map(\n (l: any) =>\n `<img src=\"${escapeHtml(l.src)}\" alt=\"${escapeHtml(l.alt)}\" style=\"height: 2rem; object-fit: contain; ${grayscale ? \"filter: grayscale(100%); opacity: 0.6;\" : \"\"}\" />`,\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 2rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem; text-align: center;\">${titleHtml}<div style=\"display: flex; justify-content: center; align-items: center; gap: 3rem; flex-wrap: wrap;\">${logosHtml}</div></div></section>`;\n}\n\nexport function exportSocialLinks(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n links = [],\n size = \"md\",\n variant = \"default\",\n } = (block as any).props;\n\n const sizeMap: Record<string, string> = {\n sm: \"1.25rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n };\n\n const iconSize = sizeMap[size] || sizeMap.md;\n\n const linksHtml = links\n .map(\n (l: any) =>\n `<a href=\"${escapeHtml(l.url)}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: flex; align-items: center; justify-content: center; width: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; height: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; background-color: ${variant === \"filled\" ? \"var(--sg-surface)\" : \"transparent\"}; border-radius: ${variant === \"filled\" ? \"50%\" : \"0\"}; color: var(--sg-muted-text); text-decoration: none;\">[${escapeHtml(l.platform)}]</a>`,\n )\n .join(\"\");\n\n return `<div ${dataBlockIdAttr(block.id)} style=\"display: flex; gap: 1rem; align-items: center;\">${linksHtml}</div>`;\n}\n"],"names":["exportFeature","block","depth","basePath","theme","icon","title","description","iconHtml","dataBlockIdAttr","escapeHtml","exportFeatureGrid","renderChild","subtitle","columns","variant","features","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","isImageCards","headerHtml","featuresHtml","f","imgBlock","iconBlock","linkBlock","innerPadding","blockIdAttr","exportCta","ctaDesc","primaryButton","secondaryButton","buttonSize","buttonHoverEffect","buttonHoverIntensity","buttonHoverOverlay","buttonHoverIconName","sizeStyles","btnSize","ctaId","scope","isGradient","primaryColor","primaryText","primaryBtnBg","primaryBtnText","secondaryBtnBg","secondaryBtnText","secondaryBtnBorder","buttonsCss","primaryHoverResult","generateButtonHoverStyles","secondaryHoverResult","getButtonHoverKeyframes","generateButtonOverlayCSS","bgStyle","textColor","mutedColor","ctaPrimaryHref","resolveHref","ctaSecondaryHref","primaryBtnStyle","secondaryBtnStyle","primaryBtnHtml","linkTargetAttr","secondaryBtnHtml","exportPricingCard","name","price","period","desc","buttonText","highlighted","pBadge","badgeHtml","buttonStyle","exportPricing","plans","maxCols","plansHtml","p","exportTestimonial","quote","authorName","authorRole","authorCompany","authorAvatar","rating","ratingHtml","avatarHtml","n","exportTestimonialGrid","testimonials","testimonialsHtml","t","exportFaqItem","question","answer","exportFaq","items","itemsHtml","i","exportStats","exportStatItem","value","label","prefix","suffix","exportLogoCloud","logos","grayscale","titleHtml","logosHtml","l","exportSocialLinks","links","size","sizeMap","iconSize","linksHtml"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
2
2
|
function o(r) {
|
|
3
|
-
const { text:
|
|
3
|
+
const { text: a, variant: s = "default", size: f = "md" } = r.props, e = {
|
|
4
4
|
default: {
|
|
5
5
|
bg: "var(--sg-surface2, #f3f4f6)",
|
|
6
6
|
text: "var(--sg-text, #1f2937)"
|
|
@@ -9,17 +9,17 @@ function o(r) {
|
|
|
9
9
|
bg: "var(--sg-primary, #3b82f6)",
|
|
10
10
|
text: "var(--sg-primary-text, #fff)"
|
|
11
11
|
},
|
|
12
|
-
secondary: { bg: "var(--sg-secondary, #6b7280)", text: "#fff" },
|
|
13
|
-
success: { bg: "var(--sg-success, #10b981)", text: "#fff" },
|
|
14
|
-
warning: { bg: "var(--sg-warning, #f59e0b)", text: "#fff" },
|
|
15
|
-
danger: { bg: "var(--sg-danger, #ef4444)", text: "#fff" },
|
|
16
|
-
info: { bg: "var(--sg-info, #3b82f6)", text: "#fff" }
|
|
17
|
-
},
|
|
12
|
+
secondary: { bg: "var(--sg-secondary, #6b7280)", text: "var(--sg-primary-text, #fff)" },
|
|
13
|
+
success: { bg: "var(--sg-success, #10b981)", text: "var(--sg-primary-text, #fff)" },
|
|
14
|
+
warning: { bg: "var(--sg-warning, #f59e0b)", text: "var(--sg-primary-text, #fff)" },
|
|
15
|
+
danger: { bg: "var(--sg-danger, #ef4444)", text: "var(--sg-primary-text, #fff)" },
|
|
16
|
+
info: { bg: "var(--sg-info, #3b82f6)", text: "var(--sg-primary-text, #fff)" }
|
|
17
|
+
}, g = {
|
|
18
18
|
sm: { padding: "0.125rem 0.5rem", fontSize: "0.625rem" },
|
|
19
19
|
md: { padding: "0.25rem 0.75rem", fontSize: "0.75rem" },
|
|
20
20
|
lg: { padding: "0.375rem 1rem", fontSize: "0.875rem" }
|
|
21
|
-
}, t = e[
|
|
22
|
-
return /* @__PURE__ */
|
|
21
|
+
}, t = e[s] || e.default;
|
|
22
|
+
return /* @__PURE__ */ i(
|
|
23
23
|
"span",
|
|
24
24
|
{
|
|
25
25
|
style: {
|
|
@@ -28,9 +28,9 @@ function o(r) {
|
|
|
28
28
|
color: t.text,
|
|
29
29
|
borderRadius: "var(--sg-radius-pill, 9999px)",
|
|
30
30
|
fontWeight: 500,
|
|
31
|
-
...
|
|
31
|
+
...g[f]
|
|
32
32
|
},
|
|
33
|
-
children:
|
|
33
|
+
children: a
|
|
34
34
|
},
|
|
35
35
|
r.id
|
|
36
36
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BadgeRenderer.js","sources":["../../../../../src/engine/render/renderers/content/BadgeRenderer.tsx"],"sourcesContent":["/**\n * Badge Renderer\n * Renderiza badges/tags com variantes de cor\n */\n\nimport React from \"react\";\n\nexport function renderBadge(block: any): React.ReactNode {\n const { text, variant = \"default\", size = \"md\" } = block.props;\n\n const variantColors: Record<string, { bg: string; text: string }> = {\n default: {\n bg: \"var(--sg-surface2, #f3f4f6)\",\n text: \"var(--sg-text, #1f2937)\",\n },\n primary: {\n bg: \"var(--sg-primary, #3b82f6)\",\n text: \"var(--sg-primary-text, #fff)\",\n },\n secondary: { bg: \"var(--sg-secondary, #6b7280)\", text: \"#fff\" },\n success: { bg: \"var(--sg-success, #10b981)\", text: \"#fff\" },\n warning: { bg: \"var(--sg-warning, #f59e0b)\", text: \"#fff\" },\n danger: { bg: \"var(--sg-danger, #ef4444)\", text: \"#fff\" },\n info: { bg: \"var(--sg-info, #3b82f6)\", text: \"#fff\" },\n };\n\n const sizeStyles: Record<string, React.CSSProperties> = {\n sm: { padding: \"0.125rem 0.5rem\", fontSize: \"0.625rem\" },\n md: { padding: \"0.25rem 0.75rem\", fontSize: \"0.75rem\" },\n lg: { padding: \"0.375rem 1rem\", fontSize: \"0.875rem\" },\n };\n\n const colors = variantColors[variant] || variantColors.default;\n\n return (\n <span\n key={block.id}\n style={{\n display: \"inline-block\",\n backgroundColor: colors.bg,\n color: colors.text,\n borderRadius: \"var(--sg-radius-pill, 9999px)\",\n fontWeight: 500,\n ...sizeStyles[size],\n }}\n >\n {text}\n </span>\n );\n}\n"],"names":["renderBadge","block","text","variant","size","variantColors","sizeStyles","colors","jsx"],"mappings":";AAOO,SAASA,EAAYC,GAA6B;AACvD,QAAM,EAAE,MAAAC,GAAM,SAAAC,IAAU,WAAW,MAAAC,IAAO,KAAA,IAASH,EAAM,OAEnDI,IAA8D;AAAA,IAClE,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,MAAM;AAAA,IAAA;AAAA,IAER,WAAW,EAAE,IAAI,gCAAgC,MAAM
|
|
1
|
+
{"version":3,"file":"BadgeRenderer.js","sources":["../../../../../src/engine/render/renderers/content/BadgeRenderer.tsx"],"sourcesContent":["/**\n * Badge Renderer\n * Renderiza badges/tags com variantes de cor\n */\n\nimport React from \"react\";\n\nexport function renderBadge(block: any): React.ReactNode {\n const { text, variant = \"default\", size = \"md\" } = block.props;\n\n const variantColors: Record<string, { bg: string; text: string }> = {\n default: {\n bg: \"var(--sg-surface2, #f3f4f6)\",\n text: \"var(--sg-text, #1f2937)\",\n },\n primary: {\n bg: \"var(--sg-primary, #3b82f6)\",\n text: \"var(--sg-primary-text, #fff)\",\n },\n secondary: { bg: \"var(--sg-secondary, #6b7280)\", text: \"var(--sg-primary-text, #fff)\" },\n success: { bg: \"var(--sg-success, #10b981)\", text: \"var(--sg-primary-text, #fff)\" },\n warning: { bg: \"var(--sg-warning, #f59e0b)\", text: \"var(--sg-primary-text, #fff)\" },\n danger: { bg: \"var(--sg-danger, #ef4444)\", text: \"var(--sg-primary-text, #fff)\" },\n info: { bg: \"var(--sg-info, #3b82f6)\", text: \"var(--sg-primary-text, #fff)\" },\n };\n\n const sizeStyles: Record<string, React.CSSProperties> = {\n sm: { padding: \"0.125rem 0.5rem\", fontSize: \"0.625rem\" },\n md: { padding: \"0.25rem 0.75rem\", fontSize: \"0.75rem\" },\n lg: { padding: \"0.375rem 1rem\", fontSize: \"0.875rem\" },\n };\n\n const colors = variantColors[variant] || variantColors.default;\n\n return (\n <span\n key={block.id}\n style={{\n display: \"inline-block\",\n backgroundColor: colors.bg,\n color: colors.text,\n borderRadius: \"var(--sg-radius-pill, 9999px)\",\n fontWeight: 500,\n ...sizeStyles[size],\n }}\n >\n {text}\n </span>\n );\n}\n"],"names":["renderBadge","block","text","variant","size","variantColors","sizeStyles","colors","jsx"],"mappings":";AAOO,SAASA,EAAYC,GAA6B;AACvD,QAAM,EAAE,MAAAC,GAAM,SAAAC,IAAU,WAAW,MAAAC,IAAO,KAAA,IAASH,EAAM,OAEnDI,IAA8D;AAAA,IAClE,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,MAAM;AAAA,IAAA;AAAA,IAER,WAAW,EAAE,IAAI,gCAAgC,MAAM,+BAAA;AAAA,IACvD,SAAS,EAAE,IAAI,8BAA8B,MAAM,+BAAA;AAAA,IACnD,SAAS,EAAE,IAAI,8BAA8B,MAAM,+BAAA;AAAA,IACnD,QAAQ,EAAE,IAAI,6BAA6B,MAAM,+BAAA;AAAA,IACjD,MAAM,EAAE,IAAI,2BAA2B,MAAM,+BAAA;AAAA,EAA+B,GAGxEC,IAAkD;AAAA,IACtD,IAAI,EAAE,SAAS,mBAAmB,UAAU,WAAA;AAAA,IAC5C,IAAI,EAAE,SAAS,mBAAmB,UAAU,UAAA;AAAA,IAC5C,IAAI,EAAE,SAAS,iBAAiB,UAAU,WAAA;AAAA,EAAW,GAGjDC,IAASF,EAAcF,CAAO,KAAKE,EAAc;AAEvD,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,iBAAiBD,EAAO;AAAA,QACxB,OAAOA,EAAO;AAAA,QACd,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,GAAGD,EAAWF,CAAI;AAAA,MAAA;AAAA,MAGnB,UAAAF;AAAA,IAAA;AAAA,IAVID,EAAM;AAAA,EAAA;AAajB;"}
|