@brunoalz/smartgesti-site-editor 1.5.0 → 1.5.1
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/engine/export/exporters/layout/GridExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/layout/GridExporter.js +21 -19
- package/dist/engine/export/exporters/layout/GridExporter.js.map +1 -1
- package/dist/engine/export/exporters/layout/StackExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/layout/StackExporter.js +26 -14
- package/dist/engine/export/exporters/layout/StackExporter.js.map +1 -1
- package/dist/engine/plugins/builtin/blog/manifest.d.ts.map +1 -1
- package/dist/engine/plugins/builtin/blog/manifest.js +6 -2
- package/dist/engine/plugins/builtin/blog/manifest.js.map +1 -1
- package/dist/engine/registry/blocks/layout/grid.d.ts.map +1 -1
- package/dist/engine/registry/blocks/layout/grid.js +12 -0
- package/dist/engine/registry/blocks/layout/grid.js.map +1 -1
- package/dist/engine/registry/blocks/layout/stack.d.ts.map +1 -1
- package/dist/engine/registry/blocks/layout/stack.js +15 -1
- package/dist/engine/registry/blocks/layout/stack.js.map +1 -1
- package/dist/engine/render/renderers/layout/GridRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/layout/GridRenderer.js +23 -21
- package/dist/engine/render/renderers/layout/GridRenderer.js.map +1 -1
- package/dist/engine/render/renderers/layout/StackRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/layout/StackRenderer.js +36 -25
- package/dist/engine/render/renderers/layout/StackRenderer.js.map +1 -1
- package/dist/engine/schema/siteDocument.d.ts +8 -0
- package/dist/engine/schema/siteDocument.d.ts.map +1 -1
- package/dist/engine/schema/siteDocument.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/layout/GridExporter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"GridExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/layout/GridExporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAS1D,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,KAAK,MAAM,GAC7F,MAAM,CAoER"}
|
|
@@ -1,35 +1,37 @@
|
|
|
1
|
-
import { dataBlockIdAttr as
|
|
2
|
-
import { generateGridId as
|
|
3
|
-
import { resolveResponsiveColumns as
|
|
4
|
-
function
|
|
5
|
-
const { cols:
|
|
6
|
-
if (!
|
|
1
|
+
import { dataBlockIdAttr as g } from "../../shared/htmlHelpers.js";
|
|
2
|
+
import { generateGridId as B } from "../../shared/idGenerator.js";
|
|
3
|
+
import { resolveResponsiveColumns as R, generateResponsiveGridStyles as j, BREAKPOINTS as A } from "../../shared/responsiveGridHelper.js";
|
|
4
|
+
function Q(i, h, f, y, d) {
|
|
5
|
+
const { cols: r = 3, colTemplate: o, gap: p = "1rem", maxWidth: l, padding: s, children: v = [] } = i.props;
|
|
6
|
+
if (!d)
|
|
7
7
|
throw new Error("exportGrid requires renderChild function");
|
|
8
|
-
const e =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const e = B(i.id || ""), a = v.map((n) => d(n, h + 1, f, y)).join(""), t = [];
|
|
9
|
+
l && (t.push(`max-width: ${l}`), t.push("margin-left: auto"), t.push("margin-right: auto")), s && (t.push(`padding-left: ${s}`), t.push(`padding-right: ${s}`));
|
|
10
|
+
const m = t.length > 0, $ = t.join("; ");
|
|
11
|
+
if (o) {
|
|
12
|
+
const n = `display: grid; gap: ${p};`, G = `
|
|
12
13
|
/* Base: Mobile 1 coluna */
|
|
13
14
|
#${e} {
|
|
14
15
|
grid-template-columns: 1fr;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
/* Desktop: template customizado */
|
|
18
|
-
@media (min-width: ${
|
|
19
|
+
@media (min-width: ${A.md}) {
|
|
19
20
|
#${e} {
|
|
20
|
-
grid-template-columns: ${
|
|
21
|
+
grid-template-columns: ${o};
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
|
-
`.trim()
|
|
24
|
+
`.trim(), u = `<div id="${e}" ${g(i.id)} style="${n}">${a}</div>`, I = m ? `<div style="${$}">${u}</div>` : u;
|
|
25
|
+
return `<style>${G}</style>${I}`;
|
|
24
26
|
}
|
|
25
|
-
const
|
|
27
|
+
const w = R(r, 1, 2, typeof r == "number" ? r : 3), { inlineStyles: x, mediaQueries: H } = j(
|
|
26
28
|
e,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
);
|
|
30
|
-
return `<style>${
|
|
29
|
+
w,
|
|
30
|
+
p
|
|
31
|
+
), c = `<div id="${e}" ${g(i.id)} style="${x}">${a}</div>`, S = m ? `<div style="${$}">${c}</div>` : c;
|
|
32
|
+
return `<style>${H}</style>${S}`;
|
|
31
33
|
}
|
|
32
34
|
export {
|
|
33
|
-
|
|
35
|
+
Q as exportGrid
|
|
34
36
|
};
|
|
35
37
|
//# sourceMappingURL=GridExporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridExporter.js","sources":["../../../../../src/engine/export/exporters/layout/GridExporter.ts"],"sourcesContent":["/**\n * Grid Block Exporter\n * Sistema responsivo mobile-first com media queries\n * Suporte a colTemplate para templates customizados (ex: \"1fr 320px\")\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr } from \"../../shared/htmlHelpers\";\nimport { generateGridId } from \"../../shared/idGenerator\";\nimport {\n resolveResponsiveColumns,\n generateResponsiveGridStyles,\n BREAKPOINTS,\n} from \"../../shared/responsiveGridHelper\";\n\nexport function exportGrid(\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 { cols = 3, colTemplate, gap = \"1rem\", children = [] } = (block as any).props;\n\n if (!renderChild) {\n throw new Error(\"exportGrid requires renderChild function\");\n }\n\n // Gerar ID único para este grid\n const gridId = generateGridId(block.id || \"\");\n\n // Renderizar filhos\n const childrenHtml = children\n .map((c: Block) => renderChild(c, depth + 1, basePath, theme))\n .join(\"\");\n\n // Se colTemplate está definido, usar template customizado com responsive\n if (colTemplate) {\n const inlineStyles = `display: grid; gap: ${gap};`;\n const mediaQueries = `\n /* Base: Mobile 1 coluna */\n #${gridId} {\n grid-template-columns: 1fr;\n }\n\n /* Desktop: template customizado */\n @media (min-width: ${BREAKPOINTS.md}) {\n #${gridId} {\n grid-template-columns: ${colTemplate};\n }\n }\n `.trim();\n\n
|
|
1
|
+
{"version":3,"file":"GridExporter.js","sources":["../../../../../src/engine/export/exporters/layout/GridExporter.ts"],"sourcesContent":["/**\n * Grid Block Exporter\n * Sistema responsivo mobile-first com media queries\n * Suporte a colTemplate para templates customizados (ex: \"1fr 320px\")\n * Suporte a maxWidth e padding para espaçamento\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr } from \"../../shared/htmlHelpers\";\nimport { generateGridId } from \"../../shared/idGenerator\";\nimport {\n resolveResponsiveColumns,\n generateResponsiveGridStyles,\n BREAKPOINTS,\n} from \"../../shared/responsiveGridHelper\";\n\nexport function exportGrid(\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 { cols = 3, colTemplate, gap = \"1rem\", maxWidth, padding, children = [] } = (block as any).props;\n\n if (!renderChild) {\n throw new Error(\"exportGrid requires renderChild function\");\n }\n\n // Gerar ID único para este grid\n const gridId = generateGridId(block.id || \"\");\n\n // Renderizar filhos\n const childrenHtml = children\n .map((c: Block) => renderChild(c, depth + 1, basePath, theme))\n .join(\"\");\n\n // Wrapper styles for maxWidth + padding\n const wrapperParts: string[] = [];\n if (maxWidth) {\n wrapperParts.push(`max-width: ${maxWidth}`);\n wrapperParts.push(\"margin-left: auto\");\n wrapperParts.push(\"margin-right: auto\");\n }\n if (padding) {\n wrapperParts.push(`padding-left: ${padding}`);\n wrapperParts.push(`padding-right: ${padding}`);\n }\n const hasWrapper = wrapperParts.length > 0;\n const wrapperStyle = wrapperParts.join(\"; \");\n\n // Se colTemplate está definido, usar template customizado com responsive\n if (colTemplate) {\n const inlineStyles = `display: grid; gap: ${gap};`;\n const mediaQueries = `\n /* Base: Mobile 1 coluna */\n #${gridId} {\n grid-template-columns: 1fr;\n }\n\n /* Desktop: template customizado */\n @media (min-width: ${BREAKPOINTS.md}) {\n #${gridId} {\n grid-template-columns: ${colTemplate};\n }\n }\n `.trim();\n\n const gridHtml = `<div id=\"${gridId}\" ${dataBlockIdAttr(block.id)} style=\"${inlineStyles}\">${childrenHtml}</div>`;\n const wrappedHtml = hasWrapper\n ? `<div style=\"${wrapperStyle}\">${gridHtml}</div>`\n : gridHtml;\n\n return `<style>${mediaQueries}</style>${wrappedHtml}`;\n }\n\n // Comportamento padrão: resolver configuração responsiva\n const responsiveConfig = resolveResponsiveColumns(cols, 1, 2, typeof cols === \"number\" ? cols : 3);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n gap,\n );\n\n const gridHtml = `<div id=\"${gridId}\" ${dataBlockIdAttr(block.id)} style=\"${inlineStyles}\">${childrenHtml}</div>`;\n const wrappedHtml = hasWrapper\n ? `<div style=\"${wrapperStyle}\">${gridHtml}</div>`\n : gridHtml;\n\n return `<style>${mediaQueries}</style>${wrappedHtml}`;\n}\n"],"names":["exportGrid","block","depth","basePath","theme","renderChild","cols","colTemplate","gap","maxWidth","padding","children","gridId","generateGridId","childrenHtml","c","wrapperParts","hasWrapper","wrapperStyle","inlineStyles","mediaQueries","BREAKPOINTS","gridHtml","dataBlockIdAttr","wrappedHtml","responsiveConfig","resolveResponsiveColumns","generateResponsiveGridStyles"],"mappings":";;;AAiBO,SAASA,EACdC,GACAC,GACAC,GACAC,GACAC,GACQ;AACR,QAAM,EAAE,MAAAC,IAAO,GAAG,aAAAC,GAAa,KAAAC,IAAM,QAAQ,UAAAC,GAAU,SAAAC,GAAS,UAAAC,IAAW,GAAC,IAAOV,EAAc;AAEjG,MAAI,CAACI;AACH,UAAM,IAAI,MAAM,0CAA0C;AAI5D,QAAMO,IAASC,EAAeZ,EAAM,MAAM,EAAE,GAGtCa,IAAeH,EAClB,IAAI,CAACI,MAAaV,EAAYU,GAAGb,IAAQ,GAAGC,GAAUC,CAAK,CAAC,EAC5D,KAAK,EAAE,GAGJY,IAAyB,CAAA;AAC/B,EAAIP,MACFO,EAAa,KAAK,cAAcP,CAAQ,EAAE,GAC1CO,EAAa,KAAK,mBAAmB,GACrCA,EAAa,KAAK,oBAAoB,IAEpCN,MACFM,EAAa,KAAK,iBAAiBN,CAAO,EAAE,GAC5CM,EAAa,KAAK,kBAAkBN,CAAO,EAAE;AAE/C,QAAMO,IAAaD,EAAa,SAAS,GACnCE,IAAeF,EAAa,KAAK,IAAI;AAG3C,MAAIT,GAAa;AACf,UAAMY,IAAe,uBAAuBX,CAAG,KACzCY,IAAe;AAAA;AAAA,OAElBR,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKYS,EAAY,EAAE;AAAA,SAC9BT,CAAM;AAAA,iCACkBL,CAAW;AAAA;AAAA;AAAA,IAGxC,KAAA,GAEMe,IAAW,YAAYV,CAAM,KAAKW,EAAgBtB,EAAM,EAAE,CAAC,WAAWkB,CAAY,KAAKL,CAAY,UACnGU,IAAcP,IAChB,eAAeC,CAAY,KAAKI,CAAQ,WACxCA;AAEJ,WAAO,UAAUF,CAAY,WAAWI,CAAW;AAAA,EACrD;AAGA,QAAMC,IAAmBC,EAAyBpB,GAAM,GAAG,GAAG,OAAOA,KAAS,WAAWA,IAAO,CAAC,GAC3F,EAAE,cAAAa,GAAc,cAAAC,EAAA,IAAiBO;AAAA,IACrCf;AAAA,IACAa;AAAA,IACAjB;AAAA,EAAA,GAGIc,IAAW,YAAYV,CAAM,KAAKW,EAAgBtB,EAAM,EAAE,CAAC,WAAWkB,CAAY,KAAKL,CAAY,UACnGU,IAAcP,IAChB,eAAeC,CAAY,KAAKI,CAAQ,WACxCA;AAEJ,SAAO,UAAUF,CAAY,WAAWI,CAAW;AACrD;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/layout/StackExporter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"StackExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/layout/StackExporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAK1D,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,KAAK,MAAM,GAC7F,MAAM,CAuER"}
|
|
@@ -1,21 +1,33 @@
|
|
|
1
|
-
import { dataBlockIdAttr as
|
|
1
|
+
import { dataBlockIdAttr as f } from "../../shared/htmlHelpers.js";
|
|
2
2
|
import { generateScopedId as v } from "../../shared/idGenerator.js";
|
|
3
|
-
import { generateFlexDirectionMediaQueries as
|
|
4
|
-
function
|
|
3
|
+
import { generateFlexDirectionMediaQueries as D, BREAKPOINTS as A } from "../../shared/responsiveGridHelper.js";
|
|
4
|
+
function M(t, m, $, x, s) {
|
|
5
5
|
const {
|
|
6
|
-
direction:
|
|
7
|
-
gap:
|
|
8
|
-
align:
|
|
9
|
-
justify:
|
|
10
|
-
wrap:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
direction: o = "col",
|
|
7
|
+
gap: u = "1rem",
|
|
8
|
+
align: i = "stretch",
|
|
9
|
+
justify: e = "start",
|
|
10
|
+
wrap: y = !1,
|
|
11
|
+
sticky: c = !1,
|
|
12
|
+
stickyOffset: w = "80px",
|
|
13
|
+
children: g = []
|
|
14
|
+
} = t.props;
|
|
15
|
+
if (!s)
|
|
14
16
|
throw new Error("exportStack requires renderChild function");
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
+
const n = v(t.id || "", "stack"), a = o === "row", l = "column", h = o === "row" ? "row" : "column", k = i === "start" ? "flex-start" : i === "end" ? "flex-end" : i === "center" ? "center" : "stretch", I = e === "start" ? "flex-start" : e === "end" ? "flex-end" : e === "center" ? "center" : e === "space-between" ? "space-between" : "space-around";
|
|
18
|
+
let r = a ? D(n, l, h) : "";
|
|
19
|
+
const S = c ? ` position: sticky; top: ${w}; align-self: flex-start;` : "";
|
|
20
|
+
c && (r += `
|
|
21
|
+
@media (max-width: ${A.md}) {
|
|
22
|
+
#${n} {
|
|
23
|
+
position: static !important;
|
|
24
|
+
align-self: stretch !important;
|
|
25
|
+
}
|
|
26
|
+
}`);
|
|
27
|
+
const d = g.map((j) => s(j, m + 1, $, x)).join(""), p = `display: flex; flex-direction: ${l}; gap: ${u}; align-items: ${k}; justify-content: ${I}; flex-wrap: ${y ? "wrap" : "nowrap"};${S}`;
|
|
28
|
+
return r ? `<style>${r}</style><div id="${n}" ${f(t.id)} style="${p}">${d}</div>` : `<div ${f(t.id)} style="${p}">${d}</div>`;
|
|
17
29
|
}
|
|
18
30
|
export {
|
|
19
|
-
|
|
31
|
+
M as exportStack
|
|
20
32
|
};
|
|
21
33
|
//# sourceMappingURL=StackExporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackExporter.js","sources":["../../../../../src/engine/export/exporters/layout/StackExporter.ts"],"sourcesContent":["/**\n * Stack Block Exporter\n * Responsive direction: column (mobile) → row (desktop) when direction=\"row\"\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport { generateFlexDirectionMediaQueries, BREAKPOINTS } from \"../../shared/responsiveGridHelper\";\n\nexport function exportStack(\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 direction = \"col\",\n gap = \"1rem\",\n align = \"stretch\",\n justify = \"start\",\n wrap = false,\n children = [],\n } = (block as any).props;\n\n if (!renderChild) {\n throw new Error(\"exportStack requires renderChild function\");\n }\n\n const stackId = generateScopedId(block.id || \"\", \"stack\");\n\n // Mobile-first: se direction=\"row\", começa column em mobile e vira row em desktop\n const isMobileFirst = direction === \"row\";\n const mobileDirection = isMobileFirst ? \"column\" : \"column\";\n const desktopDirection = direction === \"row\" ? \"row\" : \"column\";\n\n const alignItems =\n align === \"start\"\n ? \"flex-start\"\n : align === \"end\"\n ? \"flex-end\"\n : align === \"center\"\n ? \"center\"\n : \"stretch\";\n const justifyContent =\n justify === \"start\"\n ? \"flex-start\"\n : justify === \"end\"\n ? \"flex-end\"\n : justify === \"center\"\n ? \"center\"\n : justify === \"space-between\"\n ? \"space-between\"\n : \"space-around\";\n\n // Media queries
|
|
1
|
+
{"version":3,"file":"StackExporter.js","sources":["../../../../../src/engine/export/exporters/layout/StackExporter.ts"],"sourcesContent":["/**\n * Stack Block Exporter\n * Responsive direction: column (mobile) → row (desktop) when direction=\"row\"\n * Suporte a sticky positioning para sidebars\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport { generateFlexDirectionMediaQueries, BREAKPOINTS } from \"../../shared/responsiveGridHelper\";\n\nexport function exportStack(\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 direction = \"col\",\n gap = \"1rem\",\n align = \"stretch\",\n justify = \"start\",\n wrap = false,\n sticky = false,\n stickyOffset = \"80px\",\n children = [],\n } = (block as any).props;\n\n if (!renderChild) {\n throw new Error(\"exportStack requires renderChild function\");\n }\n\n const stackId = generateScopedId(block.id || \"\", \"stack\");\n\n // Mobile-first: se direction=\"row\", começa column em mobile e vira row em desktop\n const isMobileFirst = direction === \"row\";\n const mobileDirection = isMobileFirst ? \"column\" : \"column\";\n const desktopDirection = direction === \"row\" ? \"row\" : \"column\";\n\n const alignItems =\n align === \"start\"\n ? \"flex-start\"\n : align === \"end\"\n ? \"flex-end\"\n : align === \"center\"\n ? \"center\"\n : \"stretch\";\n const justifyContent =\n justify === \"start\"\n ? \"flex-start\"\n : justify === \"end\"\n ? \"flex-end\"\n : justify === \"center\"\n ? \"center\"\n : justify === \"space-between\"\n ? \"space-between\"\n : \"space-around\";\n\n // Media queries for responsive direction\n let mediaQueries = isMobileFirst\n ? generateFlexDirectionMediaQueries(stackId, mobileDirection as any, desktopDirection as any)\n : \"\";\n\n // Sticky: add position sticky on desktop, disable on mobile\n const stickyInline = sticky\n ? ` position: sticky; top: ${stickyOffset}; align-self: flex-start;`\n : \"\";\n\n if (sticky) {\n mediaQueries += `\n @media (max-width: ${BREAKPOINTS.md}) {\n #${stackId} {\n position: static !important;\n align-self: stretch !important;\n }\n }`;\n }\n\n const childrenHtml = children\n .map((c: Block) => renderChild(c, depth + 1, basePath, theme))\n .join(\"\");\n\n const inlineStyles = `display: flex; flex-direction: ${mobileDirection}; gap: ${gap}; align-items: ${alignItems}; justify-content: ${justifyContent}; flex-wrap: ${wrap ? \"wrap\" : \"nowrap\"};${stickyInline}`;\n\n return mediaQueries\n ? `<style>${mediaQueries}</style><div id=\"${stackId}\" ${dataBlockIdAttr(block.id)} style=\"${inlineStyles}\">${childrenHtml}</div>`\n : `<div ${dataBlockIdAttr(block.id)} style=\"${inlineStyles}\">${childrenHtml}</div>`;\n}\n"],"names":["exportStack","block","depth","basePath","theme","renderChild","direction","gap","align","justify","wrap","sticky","stickyOffset","children","stackId","generateScopedId","isMobileFirst","mobileDirection","desktopDirection","alignItems","justifyContent","mediaQueries","generateFlexDirectionMediaQueries","stickyInline","BREAKPOINTS","childrenHtml","c","inlineStyles","dataBlockIdAttr"],"mappings":";;;AAYO,SAASA,EACdC,GACAC,GACAC,GACAC,GACAC,GACQ;AACR,QAAM;AAAA,IACJ,WAAAC,IAAY;AAAA,IACZ,KAAAC,IAAM;AAAA,IACN,OAAAC,IAAQ;AAAA,IACR,SAAAC,IAAU;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,QAAAC,IAAS;AAAA,IACT,cAAAC,IAAe;AAAA,IACf,UAAAC,IAAW,CAAA;AAAA,EAAC,IACTZ,EAAc;AAEnB,MAAI,CAACI;AACH,UAAM,IAAI,MAAM,2CAA2C;AAG7D,QAAMS,IAAUC,EAAiBd,EAAM,MAAM,IAAI,OAAO,GAGlDe,IAAgBV,MAAc,OAC9BW,IAAkC,UAClCC,IAAmBZ,MAAc,QAAQ,QAAQ,UAEjDa,IACJX,MAAU,UACN,eACAA,MAAU,QACR,aACAA,MAAU,WACR,WACA,WACJY,IACJX,MAAY,UACR,eACAA,MAAY,QACV,aACAA,MAAY,WACV,WACAA,MAAY,kBACV,kBACA;AAGZ,MAAIY,IAAeL,IACfM,EAAkCR,GAASG,GAAwBC,CAAuB,IAC1F;AAGJ,QAAMK,IAAeZ,IACjB,2BAA2BC,CAAY,8BACvC;AAEJ,EAAID,MACFU,KAAgB;AAAA,yBACKG,EAAY,EAAE;AAAA,SAC9BV,CAAO;AAAA;AAAA;AAAA;AAAA;AAOd,QAAMW,IAAeZ,EAClB,IAAI,CAACa,MAAarB,EAAYqB,GAAGxB,IAAQ,GAAGC,GAAUC,CAAK,CAAC,EAC5D,KAAK,EAAE,GAEJuB,IAAe,kCAAkCV,CAAe,UAAUV,CAAG,kBAAkBY,CAAU,sBAAsBC,CAAc,gBAAgBV,IAAO,SAAS,QAAQ,IAAIa,CAAY;AAE3M,SAAOF,IACH,UAAUA,CAAY,oBAAoBP,CAAO,KAAKc,EAAgB3B,EAAM,EAAE,CAAC,WAAW0B,CAAY,KAAKF,CAAY,WACvH,QAAQG,EAAgB3B,EAAM,EAAE,CAAC,WAAW0B,CAAY,KAAKF,CAAY;AAC/E;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../../../src/engine/plugins/builtin/blog/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAqFtD,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../../../src/engine/plugins/builtin/blog/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAqFtD,eAAO,MAAM,UAAU,EAAE,kBAydxB,CAAC"}
|
|
@@ -246,7 +246,9 @@ const y = {
|
|
|
246
246
|
type: "grid",
|
|
247
247
|
props: {
|
|
248
248
|
colTemplate: "1fr 320px",
|
|
249
|
-
gap: "
|
|
249
|
+
gap: "2.5rem",
|
|
250
|
+
maxWidth: "1200px",
|
|
251
|
+
padding: "2rem",
|
|
250
252
|
children: [
|
|
251
253
|
// Coluna principal: blogPostDetail
|
|
252
254
|
{
|
|
@@ -269,13 +271,15 @@ const y = {
|
|
|
269
271
|
contentMaxWidth: "720px"
|
|
270
272
|
}
|
|
271
273
|
},
|
|
272
|
-
// Sidebar: stack vertical com widgets
|
|
274
|
+
// Sidebar: stack vertical com widgets (sticky por padrão)
|
|
273
275
|
{
|
|
274
276
|
id: "blog-detail-sidebar",
|
|
275
277
|
type: "stack",
|
|
276
278
|
props: {
|
|
277
279
|
direction: "col",
|
|
278
280
|
gap: "1.5rem",
|
|
281
|
+
sticky: !0,
|
|
282
|
+
stickyOffset: "80px",
|
|
279
283
|
children: [
|
|
280
284
|
{
|
|
281
285
|
id: "blog-sidebar-search",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sources":["../../../../../src/engine/plugins/builtin/blog/manifest.ts"],"sourcesContent":["/**\n * Blog Plugin Manifest\n * Plugin para blog com posts, categorias e tags.\n *\n * onActivate:\n * 1. Injeta seção blogPostGrid na home page (antes do footer)\n * 2. Cria página \"Blog\" com navbar + grid de posts + footer\n * 3. Cria página \"Post\" com navbar + detalhe do post + footer\n *\n * onDeactivate:\n * 1. Remove a seção injetada na home page\n * 2. Remove as páginas do plugin\n */\n\nimport type { PluginRegistration } from \"../../types\";\nimport type { SiteDocument, Block, BlockType } from \"../../../schema/siteDocument\";\nimport { pluginRegistry } from \"../../pluginRegistry\";\nimport { logger } from \"../../../../utils/logger\";\n\n// ─── ID usado para a seção de blog injetada na home page ───\nconst BLOG_HOME_SECTION_ID = \"plugin-blog-home-grid\";\n\n// ─── Sample blog cards para preview ───\nconst SAMPLE_BLOG_CARDS = [\n {\n title: \"Feira de Ciências 2026: Inovação e Criatividade\",\n excerpt:\n \"Nossos alunos apresentaram projetos incríveis na Feira de Ciências deste ano. Confira os destaques e premiações!\",\n image:\n \"https://images.unsplash.com/photo-1567168544230-3b9e5ec47659?w=800&h=400&fit=crop\",\n category: \"Eventos\",\n date: \"05 Fev 2026\",\n linkHref: \"/site/p/blog/feira-de-ciencias-2026\",\n linkText: \"Ler mais\",\n },\n {\n title: \"Matrículas Abertas para o Segundo Semestre\",\n excerpt:\n \"Garanta a vaga do seu filho na melhor escola da região. Condições especiais para matrículas antecipadas.\",\n image:\n \"https://images.unsplash.com/photo-1523050854058-8df90110c9f1?w=800&h=400&fit=crop\",\n category: \"Institucional\",\n date: \"01 Fev 2026\",\n linkHref: \"/site/p/blog/matriculas-segundo-semestre\",\n linkText: \"Ler mais\",\n },\n {\n title: \"5 Dicas para Preparar seu Filho para o Ano Letivo\",\n excerpt:\n \"Dicas práticas para uma transição tranquila e um início de ano produtivo para toda a família.\",\n image:\n \"https://images.unsplash.com/photo-1503676260728-1c00da094a0b?w=800&h=400&fit=crop\",\n category: \"Educação\",\n date: \"28 Jan 2026\",\n linkHref: \"/site/p/blog/dicas-preparar-ano-letivo\",\n linkText: \"Ler mais\",\n },\n];\n\n// ─── Conteúdo HTML rico para o post de exemplo ───\nconst SAMPLE_POST_CONTENT = `\n<h2>O que é a Feira de Ciências?</h2>\n<p>A Feira de Ciências é um evento anual que celebra a curiosidade, a pesquisa e a criatividade dos nossos alunos. Nesta edição especial de 2026, recebemos mais de <strong>500 visitantes</strong> e contamos com a participação de todas as turmas do Ensino Fundamental e Médio.</p>\n<p>Este ano, o tema central foi <em>\"Ciência e Sustentabilidade\"</em>, incentivando os estudantes a desenvolverem projetos que aliassem inovação tecnológica com responsabilidade ambiental.</p>\n\n<h2>Destaques da Edição 2026</h2>\n<p>Entre os mais de 50 projetos apresentados, alguns se destacaram pela originalidade e impacto:</p>\n<ul>\n <li><strong>Jardim Sustentável Inteligente</strong> — Alunos do 5º ano desenvolveram um sistema de irrigação automática usando sensores de umidade e placa Arduino.</li>\n <li><strong>Robótica Educacional</strong> — A turma do 8º ano criou um robô que auxilia no ensino de matemática para crianças do 1º ao 3º ano.</li>\n <li><strong>Energia Solar na Escola</strong> — Projeto do 2º ano do Ensino Médio demonstrou como painéis solares poderiam reduzir em 40% o consumo de energia da escola.</li>\n</ul>\n\n<blockquote>\n <p>\"A Feira de Ciências é um dos momentos mais importantes do nosso calendário escolar. Ver a dedicação e o brilho nos olhos dos alunos ao apresentarem seus projetos nos enche de orgulho e nos motiva a continuar investindo em educação de qualidade.\"</p>\n <p><strong>— Prof. Maria Silva, Coordenadora Pedagógica</strong></p>\n</blockquote>\n\n<h2>Premiações</h2>\n<p>O júri, composto por professores universitários e profissionais da área de tecnologia, selecionou os três melhores projetos:</p>\n<ol>\n <li><strong>1º Lugar:</strong> Jardim Sustentável Inteligente (5º ano)</li>\n <li><strong>2º Lugar:</strong> Energia Solar na Escola (2º EM)</li>\n <li><strong>3º Lugar:</strong> Robótica Educacional (8º ano)</li>\n</ol>\n\n<h2>Próximos Passos</h2>\n<p>Os três projetos finalistas representarão nossa escola na <strong>Feira Regional de Ciências</strong>, que acontecerá em março na capital. Os alunos já estão se preparando para levar suas apresentações a um público ainda maior.</p>\n<p>Parabéns a todos os participantes, professores orientadores e famílias que apoiaram essa jornada de descobertas!</p>\n`.trim();\n\n/**\n * Deep-clone um bloco com novo ID\n */\nfunction cloneBlock(block: Block, newId: string): Block {\n const cloned: Block = JSON.parse(JSON.stringify(block));\n return { ...cloned, id: newId };\n}\n\nexport const blogPlugin: PluginRegistration = {\n manifest: {\n id: \"blog\",\n version: \"1.0.0\",\n name: \"Blog\",\n description: \"Blog com posts, categorias e tags\",\n icon: \"FileText\",\n\n capabilities: {\n blocks: [\"blogPostCard\", \"blogPostGrid\", \"blogPostDetail\", \"blogCategoryFilter\", \"blogSearchBar\", \"blogRecentPosts\", \"blogTagCloud\"],\n\n pageTemplates: [\n {\n id: \"blog-listing\",\n name: \"Blog\",\n slug: \"blog\",\n pluginId: \"blog\",\n structure: [],\n dataSource: {\n provider: \"blog-posts\",\n mode: \"list\",\n },\n },\n {\n id: \"blog-post\",\n name: \"Post\",\n slug: \"blog/:slug\",\n pluginId: \"blog\",\n structure: [],\n dataSource: {\n provider: \"blog-posts\",\n mode: \"single\",\n paramMapping: { slug: \":slug\" },\n },\n editRestrictions: {\n nonRemovable: true,\n },\n },\n ],\n\n dataSchemas: [\n {\n type: \"blog-post\",\n label: \"Blog Post\",\n fields: [\n { name: \"title\", type: \"string\", required: true, label: \"Title\" },\n { name: \"slug\", type: \"string\", required: true, label: \"Slug\" },\n { name: \"excerpt\", type: \"string\", label: \"Excerpt\" },\n { name: \"content\", type: \"richtext\", required: true, label: \"Content\" },\n { name: \"featuredImage\", type: \"image\", label: \"Featured Image\" },\n { name: \"category\", type: \"string\", label: \"Category\" },\n { name: \"tags\", type: \"array\", label: \"Tags\" },\n { name: \"authorVariant\", type: \"string\", label: \"Author Variant\" },\n { name: \"readingTime\", type: \"number\", label: \"Reading Time\" },\n { name: \"metaTitle\", type: \"string\", label: \"Meta Title (SEO)\" },\n { name: \"metaDescription\", type: \"string\", label: \"Meta Description (SEO)\" },\n { name: \"ogImage\", type: \"image\", label: \"Open Graph Image\" },\n ],\n },\n ],\n\n contentProviders: [\"blog-posts\", \"blog-categories\"],\n },\n\n restrictions: {\n lockedFields: {\n blogPostDetail: [\"content\", \"date\"],\n },\n requiredPages: [\"blog-listing\", \"blog-post\"],\n },\n },\n\n onActivate(document: SiteDocument): SiteDocument {\n logger.debug(\"Blog plugin activating...\");\n\n const existingPageIds = new Set(document.pages.map((p) => p.id));\n const newPages = [...document.pages];\n\n // ── Encontrar home page para clonar navbar/footer ──\n const homePage =\n document.pages.find((p) => p.slug === \"home\") || document.pages[0];\n\n const homeNavbar = homePage?.structure.find((b) => b.type === \"navbar\");\n const homeFooter = homePage?.structure.find((b) => b.type === \"footer\");\n\n // ── 1. Adicionar link \"Blog\" à navbar da home page ──\n // Preserva os links existentes e apenas insere \"Blog\" antes do último item.\n if (homePage && homeNavbar) {\n const homeIdx = newPages.findIndex((p) => p.id === homePage.id);\n if (homeIdx >= 0) {\n const navbarProps = homeNavbar.props as Record<string, any>;\n const existingLinks: Array<{ text: string; href: string }> =\n Array.isArray(navbarProps.links) ? [...navbarProps.links] : [];\n const hasBlogLink = existingLinks.some(\n (l) => l.href === \"/p/blog\",\n );\n\n if (!hasBlogLink) {\n // Inserir \"Blog\" antes do último link (geralmente \"Contato\")\n const insertIdx = existingLinks.length > 0 ? existingLinks.length - 1 : 0;\n existingLinks.splice(insertIdx, 0, { text: \"Blog\", href: \"/p/blog\" });\n\n // Atualizar navbar na home page com o novo link\n const updatedStructure = newPages[homeIdx].structure.map((b) => {\n if (b.id === homeNavbar.id) {\n return { ...b, props: { ...b.props, links: existingLinks } } as Block;\n }\n return b;\n });\n newPages[homeIdx] = { ...newPages[homeIdx], structure: updatedStructure };\n logger.debug(\"Blog link added to home navbar\");\n\n // Atualizar referência para que clones nas páginas do blog usem navbar com link\n // (homeNavbar é const, então criamos a versão atualizada para uso nos clones)\n (homeNavbar as any).props = { ...navbarProps, links: existingLinks };\n }\n }\n }\n\n // ── 2. Injetar seção de blog na home page (antes do footer) ──\n if (homePage) {\n const homeIdx = newPages.findIndex((p) => p.id === homePage.id);\n const alreadyInjected = homePage.structure.some(\n (b) => b.id === BLOG_HOME_SECTION_ID,\n );\n\n if (homeIdx >= 0 && !alreadyInjected) {\n const blogHomeSection: Block = {\n id: BLOG_HOME_SECTION_ID,\n type: \"blogPostGrid\",\n props: {\n title: \"Blog\",\n subtitle: \"Últimas publicações\",\n columns: 3,\n cards: SAMPLE_BLOG_CARDS,\n variant: \"default\",\n showViewAll: true,\n viewAllText: \"Ver todos os posts\",\n viewAllHref: \"/site/p/blog\",\n },\n } as Block;\n\n const updatedStructure = [...newPages[homeIdx].structure];\n const footerIdx = updatedStructure.findIndex(\n (b) => b.type === \"footer\",\n );\n\n if (footerIdx >= 0) {\n updatedStructure.splice(footerIdx, 0, blogHomeSection);\n } else {\n updatedStructure.push(blogHomeSection);\n }\n\n newPages[homeIdx] = {\n ...newPages[homeIdx],\n structure: updatedStructure,\n };\n logger.debug(\"Blog section injected into home page\");\n }\n }\n\n // ── 3. Criar página \"Blog\" (listagem completa) ──\n if (!existingPageIds.has(\"blog\")) {\n const blogPageStructure: Block[] = [];\n\n // Navbar clonada da home\n if (homeNavbar) {\n blogPageStructure.push(cloneBlock(homeNavbar, \"blog-page-navbar\"));\n }\n\n // Hero banner do blog\n blogPageStructure.push({\n id: \"blog-page-hero\",\n type: \"hero\",\n props: {\n title: \"Blog\",\n subtitle: \"Novidades & Publicações\",\n description:\n \"Acompanhe as últimas novidades, eventos e conquistas da nossa comunidade escolar.\",\n variant: \"centered\",\n align: \"center\",\n overlay: true,\n overlayColor: \"rgba(79, 70, 229, 0.9)\",\n background: \"#4f46e5\",\n minHeight: \"280px\",\n },\n } as Block);\n\n // Search bar\n blogPageStructure.push({\n id: \"blog-search-bar\",\n type: \"blogSearchBar\",\n props: {\n placeholder: \"Buscar posts...\",\n variant: \"simple\",\n showIcon: true,\n searchUrl: \"/site/p/blog\",\n },\n } as Block);\n\n // Category filter\n blogPageStructure.push({\n id: \"blog-category-filter\",\n type: \"blogCategoryFilter\",\n props: {\n title: \"\",\n categories: SAMPLE_BLOG_CARDS.map((c) => ({\n name: c.category,\n slug: c.category.toLowerCase().replace(/\\s+/g, \"-\"),\n count: 1,\n })),\n variant: \"chips\",\n showCount: false,\n showAll: true,\n allLabel: \"Todas\",\n filterUrl: \"/site/p/blog\",\n },\n } as Block);\n\n // Grid de posts\n blogPageStructure.push({\n id: \"blog-grid-main\",\n type: \"blogPostGrid\",\n props: {\n title: \"\",\n subtitle: \"\",\n columns: 3,\n cards: SAMPLE_BLOG_CARDS,\n variant: \"default\",\n showViewAll: false,\n viewAllText: \"Ver todos\",\n viewAllHref: \"/site/p/blog\",\n },\n } as Block);\n\n // Footer clonado da home\n if (homeFooter) {\n blogPageStructure.push(cloneBlock(homeFooter, \"blog-page-footer\"));\n }\n\n newPages.push({\n id: \"blog\",\n name: \"Blog\",\n slug: \"blog\",\n pluginId: \"blog\",\n pageTemplateId: \"blog-listing\",\n structure: blogPageStructure,\n dataSource: {\n provider: \"blog-posts\",\n mode: \"list\",\n defaultParams: { limit: 15 },\n },\n });\n logger.debug(\"Blog listing page created\");\n }\n\n // ── 4. Criar página \"Post\" (detalhe com sidebar) ──\n if (!existingPageIds.has(\"blog-post\")) {\n const postPageStructure: Block[] = [];\n\n if (homeNavbar) {\n postPageStructure.push(cloneBlock(homeNavbar, \"post-page-navbar\"));\n }\n\n // Grid layout: conteúdo principal + sidebar\n postPageStructure.push({\n id: \"blog-detail-layout\",\n type: \"grid\",\n props: {\n colTemplate: \"1fr 320px\",\n gap: \"2rem\",\n children: [\n // Coluna principal: blogPostDetail\n {\n id: \"blog-detail-main\",\n type: \"blogPostDetail\",\n props: {\n title: \"Feira de Ciências 2026: Inovação e Criatividade\",\n content: SAMPLE_POST_CONTENT,\n featuredImage:\n \"https://images.unsplash.com/photo-1567168544230-3b9e5ec47659?w=1200&h=600&fit=crop\",\n date: \"05 Fev 2026\",\n category: \"Eventos\",\n authorVariant: \"inline\",\n readingTime: \"5 min de leitura\",\n tags: [\"Feira de Ciências\", \"Eventos\", \"Sustentabilidade\", \"Projetos\"],\n showFeaturedImage: true,\n showAuthor: true,\n showDate: true,\n showTags: true,\n showReadingTime: true,\n contentMaxWidth: \"720px\",\n },\n },\n // Sidebar: stack vertical com widgets\n {\n id: \"blog-detail-sidebar\",\n type: \"stack\",\n props: {\n direction: \"col\",\n gap: \"1.5rem\",\n children: [\n {\n id: \"blog-sidebar-search\",\n type: \"blogSearchBar\",\n props: {\n placeholder: \"Buscar posts...\",\n variant: \"simple\",\n showIcon: true,\n searchUrl: \"/site/p/blog\",\n },\n },\n {\n id: \"blog-sidebar-categories\",\n type: \"blogCategoryFilter\",\n props: {\n title: \"Categorias\",\n categories: SAMPLE_BLOG_CARDS.map((c) => ({\n name: c.category,\n slug: c.category.toLowerCase().replace(/\\s+/g, \"-\"),\n count: 1,\n })),\n variant: \"list\",\n showCount: true,\n showAll: true,\n allLabel: \"Todas\",\n filterUrl: \"/site/p/blog\",\n },\n },\n {\n id: \"blog-sidebar-recent\",\n type: \"blogRecentPosts\",\n props: {\n title: \"Posts Recentes\",\n count: 5,\n showThumbnail: true,\n showDate: true,\n showCategory: false,\n posts: SAMPLE_BLOG_CARDS.map((c) => ({\n title: c.title,\n slug: c.linkHref.replace(\"/site/p/blog/\", \"\"),\n date: c.date,\n image: c.image,\n category: c.category,\n })),\n },\n },\n {\n id: \"blog-sidebar-tags\",\n type: \"blogTagCloud\",\n props: {\n title: \"Tags\",\n tags: [\n { name: \"Eventos\", count: 3 },\n { name: \"Educação\", count: 2 },\n { name: \"Institucional\", count: 1 },\n { name: \"Sustentabilidade\", count: 1 },\n ],\n variant: \"badges\",\n },\n },\n ],\n },\n },\n ] as Block[],\n },\n } as Block);\n\n if (homeFooter) {\n postPageStructure.push(cloneBlock(homeFooter, \"post-page-footer\"));\n }\n\n newPages.push({\n id: \"blog-post\",\n name: \"Post\",\n slug: \"blog/:slug\",\n pluginId: \"blog\",\n pageTemplateId: \"blog-post\",\n isDynamic: true,\n structure: postPageStructure,\n dataSource: {\n provider: \"blog-posts\",\n mode: \"single\",\n paramMapping: { slug: \":slug\" },\n },\n editRestrictions: {\n nonRemovable: true,\n },\n });\n logger.debug(\"Blog post detail page created with sidebar layout\");\n }\n\n return {\n ...document,\n pages: newPages,\n };\n },\n\n onDeactivate(document: SiteDocument): SiteDocument {\n logger.debug(\"Blog plugin deactivating...\");\n\n const newPages = document.pages\n // Remover páginas do plugin\n .filter((page) => page.pluginId !== \"blog\")\n // Remover seção de blog injetada + link \"Blog\" da navbar\n .map((page) => {\n let structure = page.structure;\n\n // Remover seção de blog injetada\n const hasInjected = structure.some(\n (b) => b.id === BLOG_HOME_SECTION_ID,\n );\n if (hasInjected) {\n structure = structure.filter(\n (b) => b.id !== BLOG_HOME_SECTION_ID,\n );\n }\n\n // Remover link \"Blog\" (/p/blog) da navbar\n structure = structure.map((b) => {\n if (b.type !== \"navbar\") return b;\n const props = b.props as Record<string, any>;\n const links: Array<{ text: string; href: string }> = Array.isArray(props.links) ? props.links : [];\n const filtered = links.filter((l) => l.href !== \"/p/blog\");\n if (filtered.length !== links.length) {\n return { ...b, props: { ...props, links: filtered } } as Block;\n }\n return b;\n });\n\n if (structure !== page.structure) {\n return { ...page, structure };\n }\n return page;\n });\n\n logger.debug(\n `Removed ${document.pages.length - newPages.length} blog page(s) and injected section`,\n );\n\n return {\n ...document,\n pages: newPages,\n };\n },\n\n getEditorRestrictions(blockType: BlockType) {\n if (blockType === \"blogPostDetail\") {\n return {\n lockedFields: [\"content\", \"date\"],\n };\n }\n if (blockType === \"blogCategoryFilter\") {\n return {\n lockedFields: [\"categories\"],\n };\n }\n if (blockType === \"blogRecentPosts\") {\n return {\n lockedFields: [\"posts\"],\n };\n }\n if (blockType === \"blogTagCloud\") {\n return {\n lockedFields: [\"tags\"],\n };\n }\n return undefined;\n },\n};\n\n// Auto-registrar o plugin (side effect — como os blocos fazem com componentRegistry)\npluginRegistry.register(blogPlugin);\n"],"names":["BLOG_HOME_SECTION_ID","SAMPLE_BLOG_CARDS","SAMPLE_POST_CONTENT","cloneBlock","block","newId","blogPlugin","document","logger","existingPageIds","p","newPages","homePage","homeNavbar","b","homeFooter","homeIdx","navbarProps","existingLinks","l","insertIdx","updatedStructure","alreadyInjected","blogHomeSection","footerIdx","blogPageStructure","c","postPageStructure","page","structure","props","links","filtered","blockType","pluginRegistry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manifest.js","sources":["../../../../../src/engine/plugins/builtin/blog/manifest.ts"],"sourcesContent":["/**\n * Blog Plugin Manifest\n * Plugin para blog com posts, categorias e tags.\n *\n * onActivate:\n * 1. Injeta seção blogPostGrid na home page (antes do footer)\n * 2. Cria página \"Blog\" com navbar + grid de posts + footer\n * 3. Cria página \"Post\" com navbar + detalhe do post + footer\n *\n * onDeactivate:\n * 1. Remove a seção injetada na home page\n * 2. Remove as páginas do plugin\n */\n\nimport type { PluginRegistration } from \"../../types\";\nimport type { SiteDocument, Block, BlockType } from \"../../../schema/siteDocument\";\nimport { pluginRegistry } from \"../../pluginRegistry\";\nimport { logger } from \"../../../../utils/logger\";\n\n// ─── ID usado para a seção de blog injetada na home page ───\nconst BLOG_HOME_SECTION_ID = \"plugin-blog-home-grid\";\n\n// ─── Sample blog cards para preview ───\nconst SAMPLE_BLOG_CARDS = [\n {\n title: \"Feira de Ciências 2026: Inovação e Criatividade\",\n excerpt:\n \"Nossos alunos apresentaram projetos incríveis na Feira de Ciências deste ano. Confira os destaques e premiações!\",\n image:\n \"https://images.unsplash.com/photo-1567168544230-3b9e5ec47659?w=800&h=400&fit=crop\",\n category: \"Eventos\",\n date: \"05 Fev 2026\",\n linkHref: \"/site/p/blog/feira-de-ciencias-2026\",\n linkText: \"Ler mais\",\n },\n {\n title: \"Matrículas Abertas para o Segundo Semestre\",\n excerpt:\n \"Garanta a vaga do seu filho na melhor escola da região. Condições especiais para matrículas antecipadas.\",\n image:\n \"https://images.unsplash.com/photo-1523050854058-8df90110c9f1?w=800&h=400&fit=crop\",\n category: \"Institucional\",\n date: \"01 Fev 2026\",\n linkHref: \"/site/p/blog/matriculas-segundo-semestre\",\n linkText: \"Ler mais\",\n },\n {\n title: \"5 Dicas para Preparar seu Filho para o Ano Letivo\",\n excerpt:\n \"Dicas práticas para uma transição tranquila e um início de ano produtivo para toda a família.\",\n image:\n \"https://images.unsplash.com/photo-1503676260728-1c00da094a0b?w=800&h=400&fit=crop\",\n category: \"Educação\",\n date: \"28 Jan 2026\",\n linkHref: \"/site/p/blog/dicas-preparar-ano-letivo\",\n linkText: \"Ler mais\",\n },\n];\n\n// ─── Conteúdo HTML rico para o post de exemplo ───\nconst SAMPLE_POST_CONTENT = `\n<h2>O que é a Feira de Ciências?</h2>\n<p>A Feira de Ciências é um evento anual que celebra a curiosidade, a pesquisa e a criatividade dos nossos alunos. Nesta edição especial de 2026, recebemos mais de <strong>500 visitantes</strong> e contamos com a participação de todas as turmas do Ensino Fundamental e Médio.</p>\n<p>Este ano, o tema central foi <em>\"Ciência e Sustentabilidade\"</em>, incentivando os estudantes a desenvolverem projetos que aliassem inovação tecnológica com responsabilidade ambiental.</p>\n\n<h2>Destaques da Edição 2026</h2>\n<p>Entre os mais de 50 projetos apresentados, alguns se destacaram pela originalidade e impacto:</p>\n<ul>\n <li><strong>Jardim Sustentável Inteligente</strong> — Alunos do 5º ano desenvolveram um sistema de irrigação automática usando sensores de umidade e placa Arduino.</li>\n <li><strong>Robótica Educacional</strong> — A turma do 8º ano criou um robô que auxilia no ensino de matemática para crianças do 1º ao 3º ano.</li>\n <li><strong>Energia Solar na Escola</strong> — Projeto do 2º ano do Ensino Médio demonstrou como painéis solares poderiam reduzir em 40% o consumo de energia da escola.</li>\n</ul>\n\n<blockquote>\n <p>\"A Feira de Ciências é um dos momentos mais importantes do nosso calendário escolar. Ver a dedicação e o brilho nos olhos dos alunos ao apresentarem seus projetos nos enche de orgulho e nos motiva a continuar investindo em educação de qualidade.\"</p>\n <p><strong>— Prof. Maria Silva, Coordenadora Pedagógica</strong></p>\n</blockquote>\n\n<h2>Premiações</h2>\n<p>O júri, composto por professores universitários e profissionais da área de tecnologia, selecionou os três melhores projetos:</p>\n<ol>\n <li><strong>1º Lugar:</strong> Jardim Sustentável Inteligente (5º ano)</li>\n <li><strong>2º Lugar:</strong> Energia Solar na Escola (2º EM)</li>\n <li><strong>3º Lugar:</strong> Robótica Educacional (8º ano)</li>\n</ol>\n\n<h2>Próximos Passos</h2>\n<p>Os três projetos finalistas representarão nossa escola na <strong>Feira Regional de Ciências</strong>, que acontecerá em março na capital. Os alunos já estão se preparando para levar suas apresentações a um público ainda maior.</p>\n<p>Parabéns a todos os participantes, professores orientadores e famílias que apoiaram essa jornada de descobertas!</p>\n`.trim();\n\n/**\n * Deep-clone um bloco com novo ID\n */\nfunction cloneBlock(block: Block, newId: string): Block {\n const cloned: Block = JSON.parse(JSON.stringify(block));\n return { ...cloned, id: newId };\n}\n\nexport const blogPlugin: PluginRegistration = {\n manifest: {\n id: \"blog\",\n version: \"1.0.0\",\n name: \"Blog\",\n description: \"Blog com posts, categorias e tags\",\n icon: \"FileText\",\n\n capabilities: {\n blocks: [\"blogPostCard\", \"blogPostGrid\", \"blogPostDetail\", \"blogCategoryFilter\", \"blogSearchBar\", \"blogRecentPosts\", \"blogTagCloud\"],\n\n pageTemplates: [\n {\n id: \"blog-listing\",\n name: \"Blog\",\n slug: \"blog\",\n pluginId: \"blog\",\n structure: [],\n dataSource: {\n provider: \"blog-posts\",\n mode: \"list\",\n },\n },\n {\n id: \"blog-post\",\n name: \"Post\",\n slug: \"blog/:slug\",\n pluginId: \"blog\",\n structure: [],\n dataSource: {\n provider: \"blog-posts\",\n mode: \"single\",\n paramMapping: { slug: \":slug\" },\n },\n editRestrictions: {\n nonRemovable: true,\n },\n },\n ],\n\n dataSchemas: [\n {\n type: \"blog-post\",\n label: \"Blog Post\",\n fields: [\n { name: \"title\", type: \"string\", required: true, label: \"Title\" },\n { name: \"slug\", type: \"string\", required: true, label: \"Slug\" },\n { name: \"excerpt\", type: \"string\", label: \"Excerpt\" },\n { name: \"content\", type: \"richtext\", required: true, label: \"Content\" },\n { name: \"featuredImage\", type: \"image\", label: \"Featured Image\" },\n { name: \"category\", type: \"string\", label: \"Category\" },\n { name: \"tags\", type: \"array\", label: \"Tags\" },\n { name: \"authorVariant\", type: \"string\", label: \"Author Variant\" },\n { name: \"readingTime\", type: \"number\", label: \"Reading Time\" },\n { name: \"metaTitle\", type: \"string\", label: \"Meta Title (SEO)\" },\n { name: \"metaDescription\", type: \"string\", label: \"Meta Description (SEO)\" },\n { name: \"ogImage\", type: \"image\", label: \"Open Graph Image\" },\n ],\n },\n ],\n\n contentProviders: [\"blog-posts\", \"blog-categories\"],\n },\n\n restrictions: {\n lockedFields: {\n blogPostDetail: [\"content\", \"date\"],\n },\n requiredPages: [\"blog-listing\", \"blog-post\"],\n },\n },\n\n onActivate(document: SiteDocument): SiteDocument {\n logger.debug(\"Blog plugin activating...\");\n\n const existingPageIds = new Set(document.pages.map((p) => p.id));\n const newPages = [...document.pages];\n\n // ── Encontrar home page para clonar navbar/footer ──\n const homePage =\n document.pages.find((p) => p.slug === \"home\") || document.pages[0];\n\n const homeNavbar = homePage?.structure.find((b) => b.type === \"navbar\");\n const homeFooter = homePage?.structure.find((b) => b.type === \"footer\");\n\n // ── 1. Adicionar link \"Blog\" à navbar da home page ──\n // Preserva os links existentes e apenas insere \"Blog\" antes do último item.\n if (homePage && homeNavbar) {\n const homeIdx = newPages.findIndex((p) => p.id === homePage.id);\n if (homeIdx >= 0) {\n const navbarProps = homeNavbar.props as Record<string, any>;\n const existingLinks: Array<{ text: string; href: string }> =\n Array.isArray(navbarProps.links) ? [...navbarProps.links] : [];\n const hasBlogLink = existingLinks.some(\n (l) => l.href === \"/p/blog\",\n );\n\n if (!hasBlogLink) {\n // Inserir \"Blog\" antes do último link (geralmente \"Contato\")\n const insertIdx = existingLinks.length > 0 ? existingLinks.length - 1 : 0;\n existingLinks.splice(insertIdx, 0, { text: \"Blog\", href: \"/p/blog\" });\n\n // Atualizar navbar na home page com o novo link\n const updatedStructure = newPages[homeIdx].structure.map((b) => {\n if (b.id === homeNavbar.id) {\n return { ...b, props: { ...b.props, links: existingLinks } } as Block;\n }\n return b;\n });\n newPages[homeIdx] = { ...newPages[homeIdx], structure: updatedStructure };\n logger.debug(\"Blog link added to home navbar\");\n\n // Atualizar referência para que clones nas páginas do blog usem navbar com link\n // (homeNavbar é const, então criamos a versão atualizada para uso nos clones)\n (homeNavbar as any).props = { ...navbarProps, links: existingLinks };\n }\n }\n }\n\n // ── 2. Injetar seção de blog na home page (antes do footer) ──\n if (homePage) {\n const homeIdx = newPages.findIndex((p) => p.id === homePage.id);\n const alreadyInjected = homePage.structure.some(\n (b) => b.id === BLOG_HOME_SECTION_ID,\n );\n\n if (homeIdx >= 0 && !alreadyInjected) {\n const blogHomeSection: Block = {\n id: BLOG_HOME_SECTION_ID,\n type: \"blogPostGrid\",\n props: {\n title: \"Blog\",\n subtitle: \"Últimas publicações\",\n columns: 3,\n cards: SAMPLE_BLOG_CARDS,\n variant: \"default\",\n showViewAll: true,\n viewAllText: \"Ver todos os posts\",\n viewAllHref: \"/site/p/blog\",\n },\n } as Block;\n\n const updatedStructure = [...newPages[homeIdx].structure];\n const footerIdx = updatedStructure.findIndex(\n (b) => b.type === \"footer\",\n );\n\n if (footerIdx >= 0) {\n updatedStructure.splice(footerIdx, 0, blogHomeSection);\n } else {\n updatedStructure.push(blogHomeSection);\n }\n\n newPages[homeIdx] = {\n ...newPages[homeIdx],\n structure: updatedStructure,\n };\n logger.debug(\"Blog section injected into home page\");\n }\n }\n\n // ── 3. Criar página \"Blog\" (listagem completa) ──\n if (!existingPageIds.has(\"blog\")) {\n const blogPageStructure: Block[] = [];\n\n // Navbar clonada da home\n if (homeNavbar) {\n blogPageStructure.push(cloneBlock(homeNavbar, \"blog-page-navbar\"));\n }\n\n // Hero banner do blog\n blogPageStructure.push({\n id: \"blog-page-hero\",\n type: \"hero\",\n props: {\n title: \"Blog\",\n subtitle: \"Novidades & Publicações\",\n description:\n \"Acompanhe as últimas novidades, eventos e conquistas da nossa comunidade escolar.\",\n variant: \"centered\",\n align: \"center\",\n overlay: true,\n overlayColor: \"rgba(79, 70, 229, 0.9)\",\n background: \"#4f46e5\",\n minHeight: \"280px\",\n },\n } as Block);\n\n // Search bar\n blogPageStructure.push({\n id: \"blog-search-bar\",\n type: \"blogSearchBar\",\n props: {\n placeholder: \"Buscar posts...\",\n variant: \"simple\",\n showIcon: true,\n searchUrl: \"/site/p/blog\",\n },\n } as Block);\n\n // Category filter\n blogPageStructure.push({\n id: \"blog-category-filter\",\n type: \"blogCategoryFilter\",\n props: {\n title: \"\",\n categories: SAMPLE_BLOG_CARDS.map((c) => ({\n name: c.category,\n slug: c.category.toLowerCase().replace(/\\s+/g, \"-\"),\n count: 1,\n })),\n variant: \"chips\",\n showCount: false,\n showAll: true,\n allLabel: \"Todas\",\n filterUrl: \"/site/p/blog\",\n },\n } as Block);\n\n // Grid de posts\n blogPageStructure.push({\n id: \"blog-grid-main\",\n type: \"blogPostGrid\",\n props: {\n title: \"\",\n subtitle: \"\",\n columns: 3,\n cards: SAMPLE_BLOG_CARDS,\n variant: \"default\",\n showViewAll: false,\n viewAllText: \"Ver todos\",\n viewAllHref: \"/site/p/blog\",\n },\n } as Block);\n\n // Footer clonado da home\n if (homeFooter) {\n blogPageStructure.push(cloneBlock(homeFooter, \"blog-page-footer\"));\n }\n\n newPages.push({\n id: \"blog\",\n name: \"Blog\",\n slug: \"blog\",\n pluginId: \"blog\",\n pageTemplateId: \"blog-listing\",\n structure: blogPageStructure,\n dataSource: {\n provider: \"blog-posts\",\n mode: \"list\",\n defaultParams: { limit: 15 },\n },\n });\n logger.debug(\"Blog listing page created\");\n }\n\n // ── 4. Criar página \"Post\" (detalhe com sidebar) ──\n if (!existingPageIds.has(\"blog-post\")) {\n const postPageStructure: Block[] = [];\n\n if (homeNavbar) {\n postPageStructure.push(cloneBlock(homeNavbar, \"post-page-navbar\"));\n }\n\n // Grid layout: conteúdo principal + sidebar (com container e espaçamento)\n postPageStructure.push({\n id: \"blog-detail-layout\",\n type: \"grid\",\n props: {\n colTemplate: \"1fr 320px\",\n gap: \"2.5rem\",\n maxWidth: \"1200px\",\n padding: \"2rem\",\n children: [\n // Coluna principal: blogPostDetail\n {\n id: \"blog-detail-main\",\n type: \"blogPostDetail\",\n props: {\n title: \"Feira de Ciências 2026: Inovação e Criatividade\",\n content: SAMPLE_POST_CONTENT,\n featuredImage:\n \"https://images.unsplash.com/photo-1567168544230-3b9e5ec47659?w=1200&h=600&fit=crop\",\n date: \"05 Fev 2026\",\n category: \"Eventos\",\n authorVariant: \"inline\",\n readingTime: \"5 min de leitura\",\n tags: [\"Feira de Ciências\", \"Eventos\", \"Sustentabilidade\", \"Projetos\"],\n showFeaturedImage: true,\n showAuthor: true,\n showDate: true,\n showTags: true,\n showReadingTime: true,\n contentMaxWidth: \"720px\",\n },\n },\n // Sidebar: stack vertical com widgets (sticky por padrão)\n {\n id: \"blog-detail-sidebar\",\n type: \"stack\",\n props: {\n direction: \"col\",\n gap: \"1.5rem\",\n sticky: true,\n stickyOffset: \"80px\",\n children: [\n {\n id: \"blog-sidebar-search\",\n type: \"blogSearchBar\",\n props: {\n placeholder: \"Buscar posts...\",\n variant: \"simple\",\n showIcon: true,\n searchUrl: \"/site/p/blog\",\n },\n },\n {\n id: \"blog-sidebar-categories\",\n type: \"blogCategoryFilter\",\n props: {\n title: \"Categorias\",\n categories: SAMPLE_BLOG_CARDS.map((c) => ({\n name: c.category,\n slug: c.category.toLowerCase().replace(/\\s+/g, \"-\"),\n count: 1,\n })),\n variant: \"list\",\n showCount: true,\n showAll: true,\n allLabel: \"Todas\",\n filterUrl: \"/site/p/blog\",\n },\n },\n {\n id: \"blog-sidebar-recent\",\n type: \"blogRecentPosts\",\n props: {\n title: \"Posts Recentes\",\n count: 5,\n showThumbnail: true,\n showDate: true,\n showCategory: false,\n posts: SAMPLE_BLOG_CARDS.map((c) => ({\n title: c.title,\n slug: c.linkHref.replace(\"/site/p/blog/\", \"\"),\n date: c.date,\n image: c.image,\n category: c.category,\n })),\n },\n },\n {\n id: \"blog-sidebar-tags\",\n type: \"blogTagCloud\",\n props: {\n title: \"Tags\",\n tags: [\n { name: \"Eventos\", count: 3 },\n { name: \"Educação\", count: 2 },\n { name: \"Institucional\", count: 1 },\n { name: \"Sustentabilidade\", count: 1 },\n ],\n variant: \"badges\",\n },\n },\n ],\n },\n },\n ] as Block[],\n },\n } as Block);\n\n if (homeFooter) {\n postPageStructure.push(cloneBlock(homeFooter, \"post-page-footer\"));\n }\n\n newPages.push({\n id: \"blog-post\",\n name: \"Post\",\n slug: \"blog/:slug\",\n pluginId: \"blog\",\n pageTemplateId: \"blog-post\",\n isDynamic: true,\n structure: postPageStructure,\n dataSource: {\n provider: \"blog-posts\",\n mode: \"single\",\n paramMapping: { slug: \":slug\" },\n },\n editRestrictions: {\n nonRemovable: true,\n },\n });\n logger.debug(\"Blog post detail page created with sidebar layout\");\n }\n\n return {\n ...document,\n pages: newPages,\n };\n },\n\n onDeactivate(document: SiteDocument): SiteDocument {\n logger.debug(\"Blog plugin deactivating...\");\n\n const newPages = document.pages\n // Remover páginas do plugin\n .filter((page) => page.pluginId !== \"blog\")\n // Remover seção de blog injetada + link \"Blog\" da navbar\n .map((page) => {\n let structure = page.structure;\n\n // Remover seção de blog injetada\n const hasInjected = structure.some(\n (b) => b.id === BLOG_HOME_SECTION_ID,\n );\n if (hasInjected) {\n structure = structure.filter(\n (b) => b.id !== BLOG_HOME_SECTION_ID,\n );\n }\n\n // Remover link \"Blog\" (/p/blog) da navbar\n structure = structure.map((b) => {\n if (b.type !== \"navbar\") return b;\n const props = b.props as Record<string, any>;\n const links: Array<{ text: string; href: string }> = Array.isArray(props.links) ? props.links : [];\n const filtered = links.filter((l) => l.href !== \"/p/blog\");\n if (filtered.length !== links.length) {\n return { ...b, props: { ...props, links: filtered } } as Block;\n }\n return b;\n });\n\n if (structure !== page.structure) {\n return { ...page, structure };\n }\n return page;\n });\n\n logger.debug(\n `Removed ${document.pages.length - newPages.length} blog page(s) and injected section`,\n );\n\n return {\n ...document,\n pages: newPages,\n };\n },\n\n getEditorRestrictions(blockType: BlockType) {\n if (blockType === \"blogPostDetail\") {\n return {\n lockedFields: [\"content\", \"date\"],\n };\n }\n if (blockType === \"blogCategoryFilter\") {\n return {\n lockedFields: [\"categories\"],\n };\n }\n if (blockType === \"blogRecentPosts\") {\n return {\n lockedFields: [\"posts\"],\n };\n }\n if (blockType === \"blogTagCloud\") {\n return {\n lockedFields: [\"tags\"],\n };\n }\n return undefined;\n },\n};\n\n// Auto-registrar o plugin (side effect — como os blocos fazem com componentRegistry)\npluginRegistry.register(blogPlugin);\n"],"names":["BLOG_HOME_SECTION_ID","SAMPLE_BLOG_CARDS","SAMPLE_POST_CONTENT","cloneBlock","block","newId","blogPlugin","document","logger","existingPageIds","p","newPages","homePage","homeNavbar","b","homeFooter","homeIdx","navbarProps","existingLinks","l","insertIdx","updatedStructure","alreadyInjected","blogHomeSection","footerIdx","blogPageStructure","c","postPageStructure","page","structure","props","links","filtered","blockType","pluginRegistry"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/layout/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/layout/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,SAAS,EAAE,eA2CvB,CAAC"}
|
|
@@ -28,6 +28,18 @@ const o = {
|
|
|
28
28
|
label: "Gap",
|
|
29
29
|
inputType: "text",
|
|
30
30
|
group: "Layout"
|
|
31
|
+
},
|
|
32
|
+
maxWidth: {
|
|
33
|
+
label: "Largura Máxima",
|
|
34
|
+
description: "Largura máxima do container (ex: '1200px'). Centraliza com margem automática.",
|
|
35
|
+
inputType: "text",
|
|
36
|
+
group: "Espaçamento"
|
|
37
|
+
},
|
|
38
|
+
padding: {
|
|
39
|
+
label: "Padding Lateral",
|
|
40
|
+
description: "Espaçamento horizontal interno (ex: '2rem')",
|
|
41
|
+
inputType: "text",
|
|
42
|
+
group: "Espaçamento"
|
|
31
43
|
}
|
|
32
44
|
}
|
|
33
45
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.js","sources":["../../../../../src/engine/registry/blocks/layout/grid.ts"],"sourcesContent":["import { BlockDefinition } from \"../../types\";\nimport { componentRegistry } from \"../../registry\";\n\nexport const gridBlock: BlockDefinition = {\n type: \"grid\",\n name: \"Grid\",\n description: \"Layout em grid responsivo\",\n category: \"layout\",\n canHaveChildren: true,\n defaultProps: {\n cols: 3,\n gap: \"1rem\",\n },\n inspectorMeta: {\n cols: {\n label: \"Colunas\",\n description: \"Número de colunas (ou objeto responsivo)\",\n inputType: \"number\",\n min: 1,\n max: 12,\n group: \"Layout\",\n },\n colTemplate: {\n label: \"Template de Colunas\",\n description: \"CSS grid-template-columns (ex: '1fr 320px'). Se definido, sobrescreve 'Colunas'.\",\n inputType: \"text\",\n group: \"Layout\",\n },\n gap: {\n label: \"Gap\",\n inputType: \"text\",\n group: \"Layout\",\n },\n },\n};\n\n// Auto-registro\ncomponentRegistry.register(gridBlock);\n"],"names":["gridBlock","componentRegistry"],"mappings":";AAGO,MAAMA,IAA6B;AAAA,EACxC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,eAAe;AAAA,IACb,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IAAA;AAAA,IAET,aAAa;AAAA,MACX,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,IAET,KAAK;AAAA,MACH,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAGAC,EAAkB,SAASD,CAAS;"}
|
|
1
|
+
{"version":3,"file":"grid.js","sources":["../../../../../src/engine/registry/blocks/layout/grid.ts"],"sourcesContent":["import { BlockDefinition } from \"../../types\";\nimport { componentRegistry } from \"../../registry\";\n\nexport const gridBlock: BlockDefinition = {\n type: \"grid\",\n name: \"Grid\",\n description: \"Layout em grid responsivo\",\n category: \"layout\",\n canHaveChildren: true,\n defaultProps: {\n cols: 3,\n gap: \"1rem\",\n },\n inspectorMeta: {\n cols: {\n label: \"Colunas\",\n description: \"Número de colunas (ou objeto responsivo)\",\n inputType: \"number\",\n min: 1,\n max: 12,\n group: \"Layout\",\n },\n colTemplate: {\n label: \"Template de Colunas\",\n description: \"CSS grid-template-columns (ex: '1fr 320px'). Se definido, sobrescreve 'Colunas'.\",\n inputType: \"text\",\n group: \"Layout\",\n },\n gap: {\n label: \"Gap\",\n inputType: \"text\",\n group: \"Layout\",\n },\n maxWidth: {\n label: \"Largura Máxima\",\n description: \"Largura máxima do container (ex: '1200px'). Centraliza com margem automática.\",\n inputType: \"text\",\n group: \"Espaçamento\",\n },\n padding: {\n label: \"Padding Lateral\",\n description: \"Espaçamento horizontal interno (ex: '2rem')\",\n inputType: \"text\",\n group: \"Espaçamento\",\n },\n },\n};\n\n// Auto-registro\ncomponentRegistry.register(gridBlock);\n"],"names":["gridBlock","componentRegistry"],"mappings":";AAGO,MAAMA,IAA6B;AAAA,EACxC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,eAAe;AAAA,IACb,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IAAA;AAAA,IAET,aAAa;AAAA,MACX,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,IAET,KAAK;AAAA,MACH,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,IAET,UAAU;AAAA,MACR,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,IAET,SAAS;AAAA,MACP,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAGAC,EAAkB,SAASD,CAAS;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/layout/stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/layout/stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,UAAU,EAAE,eAkExB,CAAC"}
|
|
@@ -10,7 +10,9 @@ const a = {
|
|
|
10
10
|
gap: "1rem",
|
|
11
11
|
align: "stretch",
|
|
12
12
|
justify: "start",
|
|
13
|
-
wrap: !1
|
|
13
|
+
wrap: !1,
|
|
14
|
+
sticky: !1,
|
|
15
|
+
stickyOffset: "80px"
|
|
14
16
|
},
|
|
15
17
|
inspectorMeta: {
|
|
16
18
|
direction: {
|
|
@@ -49,6 +51,18 @@ const a = {
|
|
|
49
51
|
{ label: "Space Around", value: "space-around" }
|
|
50
52
|
],
|
|
51
53
|
group: "Layout"
|
|
54
|
+
},
|
|
55
|
+
sticky: {
|
|
56
|
+
label: "Fixo ao Rolar",
|
|
57
|
+
description: "Mantém o bloco visível enquanto o conteúdo rola (desativado em mobile)",
|
|
58
|
+
inputType: "checkbox",
|
|
59
|
+
group: "Comportamento"
|
|
60
|
+
},
|
|
61
|
+
stickyOffset: {
|
|
62
|
+
label: "Distância do Topo",
|
|
63
|
+
description: "Espaço do topo quando fixo (ex: 80px para abaixo da navbar)",
|
|
64
|
+
inputType: "text",
|
|
65
|
+
group: "Comportamento"
|
|
52
66
|
}
|
|
53
67
|
}
|
|
54
68
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack.js","sources":["../../../../../src/engine/registry/blocks/layout/stack.ts"],"sourcesContent":["import { BlockDefinition } from \"../../types\";\nimport { componentRegistry } from \"../../registry\";\n\nexport const stackBlock: BlockDefinition = {\n type: \"stack\",\n name: \"Stack\",\n description: \"Layout flex (linha ou coluna)\",\n category: \"layout\",\n canHaveChildren: true,\n defaultProps: {\n direction: \"col\",\n gap: \"1rem\",\n align: \"stretch\",\n justify: \"start\",\n wrap: false,\n },\n inspectorMeta: {\n direction: {\n label: \"Direção\",\n inputType: \"select\",\n options: [\n { label: \"Coluna\", value: \"col\" },\n { label: \"Linha\", value: \"row\" },\n ],\n group: \"Layout\",\n },\n gap: {\n label: \"Gap\",\n inputType: \"text\",\n group: \"Layout\",\n },\n align: {\n label: \"Alinhamento\",\n inputType: \"select\",\n options: [\n { label: \"Início\", value: \"start\" },\n { label: \"Centro\", value: \"center\" },\n { label: \"Fim\", value: \"end\" },\n { label: \"Esticar\", value: \"stretch\" },\n ],\n group: \"Layout\",\n },\n justify: {\n label: \"Justificar\",\n inputType: \"select\",\n options: [\n { label: \"Início\", value: \"start\" },\n { label: \"Centro\", value: \"center\" },\n { label: \"Fim\", value: \"end\" },\n { label: \"Space Between\", value: \"space-between\" },\n { label: \"Space Around\", value: \"space-around\" },\n ],\n group: \"Layout\",\n },\n },\n};\n\n// Auto-registro\ncomponentRegistry.register(stackBlock);\n"],"names":["stackBlock","componentRegistry"],"mappings":";AAGO,MAAMA,IAA8B;AAAA,EACzC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,cAAc;AAAA,IACZ,WAAW;AAAA,IACX,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"stack.js","sources":["../../../../../src/engine/registry/blocks/layout/stack.ts"],"sourcesContent":["import { BlockDefinition } from \"../../types\";\nimport { componentRegistry } from \"../../registry\";\n\nexport const stackBlock: BlockDefinition = {\n type: \"stack\",\n name: \"Stack\",\n description: \"Layout flex (linha ou coluna)\",\n category: \"layout\",\n canHaveChildren: true,\n defaultProps: {\n direction: \"col\",\n gap: \"1rem\",\n align: \"stretch\",\n justify: \"start\",\n wrap: false,\n sticky: false,\n stickyOffset: \"80px\",\n },\n inspectorMeta: {\n direction: {\n label: \"Direção\",\n inputType: \"select\",\n options: [\n { label: \"Coluna\", value: \"col\" },\n { label: \"Linha\", value: \"row\" },\n ],\n group: \"Layout\",\n },\n gap: {\n label: \"Gap\",\n inputType: \"text\",\n group: \"Layout\",\n },\n align: {\n label: \"Alinhamento\",\n inputType: \"select\",\n options: [\n { label: \"Início\", value: \"start\" },\n { label: \"Centro\", value: \"center\" },\n { label: \"Fim\", value: \"end\" },\n { label: \"Esticar\", value: \"stretch\" },\n ],\n group: \"Layout\",\n },\n justify: {\n label: \"Justificar\",\n inputType: \"select\",\n options: [\n { label: \"Início\", value: \"start\" },\n { label: \"Centro\", value: \"center\" },\n { label: \"Fim\", value: \"end\" },\n { label: \"Space Between\", value: \"space-between\" },\n { label: \"Space Around\", value: \"space-around\" },\n ],\n group: \"Layout\",\n },\n sticky: {\n label: \"Fixo ao Rolar\",\n description: \"Mantém o bloco visível enquanto o conteúdo rola (desativado em mobile)\",\n inputType: \"checkbox\",\n group: \"Comportamento\",\n },\n stickyOffset: {\n label: \"Distância do Topo\",\n description: \"Espaço do topo quando fixo (ex: 80px para abaixo da navbar)\",\n inputType: \"text\",\n group: \"Comportamento\",\n },\n },\n};\n\n// Auto-registro\ncomponentRegistry.register(stackBlock);\n"],"names":["stackBlock","componentRegistry"],"mappings":";AAGO,MAAMA,IAA8B;AAAA,EACzC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,cAAc;AAAA,IACZ,WAAW;AAAA,IACX,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,EAAA;AAAA,EAEhB,eAAe;AAAA,IACb,WAAW;AAAA,MACT,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,QACP,EAAE,OAAO,UAAU,OAAO,MAAA;AAAA,QAC1B,EAAE,OAAO,SAAS,OAAO,MAAA;AAAA,MAAM;AAAA,MAEjC,OAAO;AAAA,IAAA;AAAA,IAET,KAAK;AAAA,MACH,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,IAET,OAAO;AAAA,MACL,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,QACP,EAAE,OAAO,UAAU,OAAO,QAAA;AAAA,QAC1B,EAAE,OAAO,UAAU,OAAO,SAAA;AAAA,QAC1B,EAAE,OAAO,OAAO,OAAO,MAAA;AAAA,QACvB,EAAE,OAAO,WAAW,OAAO,UAAA;AAAA,MAAU;AAAA,MAEvC,OAAO;AAAA,IAAA;AAAA,IAET,SAAS;AAAA,MACP,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,QACP,EAAE,OAAO,UAAU,OAAO,QAAA;AAAA,QAC1B,EAAE,OAAO,UAAU,OAAO,SAAA;AAAA,QAC1B,EAAE,OAAO,OAAO,OAAO,MAAA;AAAA,QACvB,EAAE,OAAO,iBAAiB,OAAO,gBAAA;AAAA,QACjC,EAAE,OAAO,gBAAgB,OAAO,eAAA;AAAA,MAAe;AAAA,MAEjD,OAAO;AAAA,IAAA;AAAA,IAET,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,IAET,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAGAC,EAAkB,SAASD,CAAU;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/render/renderers/layout/GridRenderer.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/render/renderers/layout/GridRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,SAAS,CAwDjB"}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import { renderBlockNode as
|
|
4
|
-
function
|
|
5
|
-
const { cols:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
{
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
import { jsx as n, jsxs as x } from "react/jsx-runtime";
|
|
2
|
+
import s from "react";
|
|
3
|
+
import { renderBlockNode as y } from "../../renderNodeImpl.js";
|
|
4
|
+
function $(t, g) {
|
|
5
|
+
const { cols: i = 3, colTemplate: a, gap: l = "1rem", maxWidth: d, padding: e, children: c = [] } = t.props, f = typeof i == "number" ? i : i.lg || i.md || i.sm || 3, h = a || `repeat(${f}, 1fr)`, m = a ? `@media (max-width: 767px) { #grid-${t.id} { grid-template-columns: 1fr !important; } }` : "", r = {};
|
|
6
|
+
(d || e) && (d && (r.maxWidth = d, r.marginLeft = "auto", r.marginRight = "auto"), e && (r.paddingLeft = e, r.paddingRight = e));
|
|
7
|
+
const u = d || e, o = /* @__PURE__ */ n(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
id: `grid-${t.id}`,
|
|
11
|
+
style: {
|
|
12
|
+
display: "grid",
|
|
13
|
+
gridTemplateColumns: h,
|
|
14
|
+
gap: l
|
|
15
|
+
},
|
|
16
|
+
children: c.map((p) => /* @__PURE__ */ n(s.Fragment, { children: y(p, g + 1) }, p.id))
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
return /* @__PURE__ */ x(s.Fragment, { children: [
|
|
20
|
+
m && /* @__PURE__ */ n("style", { children: m }),
|
|
21
|
+
u ? /* @__PURE__ */ n("div", { style: r, children: o }) : o
|
|
22
|
+
] }, t.id);
|
|
21
23
|
}
|
|
22
24
|
export {
|
|
23
|
-
|
|
25
|
+
$ as renderGrid
|
|
24
26
|
};
|
|
25
27
|
//# sourceMappingURL=GridRenderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridRenderer.js","sources":["../../../../../src/engine/render/renderers/layout/GridRenderer.tsx"],"sourcesContent":["/**\n * Grid Renderer\n * Renderiza bloco de grid com CSS Grid\n * Suporte a colTemplate para templates customizados (ex: \"1fr 320px\")\n */\n\nimport React from \"react\";\nimport { GridBlock } from \"../../../schema/siteDocument\";\nimport { renderBlockNode } from \"../../renderNodeImpl\";\n\nexport function renderGrid(\n block: GridBlock,\n depth: number,\n): React.ReactNode {\n const { cols = 3, colTemplate, gap = \"1rem\", children = [] } = block.props;\n\n const gridCols =\n typeof cols === \"number\" ? cols : cols.lg || cols.md || cols.sm || 3;\n\n const gridTemplateColumns = colTemplate || `repeat(${gridCols}, 1fr)`;\n\n // When colTemplate is used, add responsive style to collapse to 1fr on mobile\n const responsiveStyle = colTemplate\n ? `@media (max-width: 767px) { #grid-${block.id} { grid-template-columns: 1fr !important; } }`\n : \"\";\n\n
|
|
1
|
+
{"version":3,"file":"GridRenderer.js","sources":["../../../../../src/engine/render/renderers/layout/GridRenderer.tsx"],"sourcesContent":["/**\n * Grid Renderer\n * Renderiza bloco de grid com CSS Grid\n * Suporte a colTemplate para templates customizados (ex: \"1fr 320px\")\n * Suporte a maxWidth e padding para espaçamento\n */\n\nimport React from \"react\";\nimport { GridBlock } from \"../../../schema/siteDocument\";\nimport { renderBlockNode } from \"../../renderNodeImpl\";\n\nexport function renderGrid(\n block: GridBlock,\n depth: number,\n): React.ReactNode {\n const { cols = 3, colTemplate, gap = \"1rem\", maxWidth, padding, children = [] } = block.props;\n\n const gridCols =\n typeof cols === \"number\" ? cols : cols.lg || cols.md || cols.sm || 3;\n\n const gridTemplateColumns = colTemplate || `repeat(${gridCols}, 1fr)`;\n\n // When colTemplate is used, add responsive style to collapse to 1fr on mobile\n const responsiveStyle = colTemplate\n ? `@media (max-width: 767px) { #grid-${block.id} { grid-template-columns: 1fr !important; } }`\n : \"\";\n\n // Wrapper styles for maxWidth + padding (container-like behavior)\n const wrapperStyle: React.CSSProperties = {};\n if (maxWidth || padding) {\n if (maxWidth) {\n wrapperStyle.maxWidth = maxWidth;\n wrapperStyle.marginLeft = \"auto\";\n wrapperStyle.marginRight = \"auto\";\n }\n if (padding) {\n wrapperStyle.paddingLeft = padding;\n wrapperStyle.paddingRight = padding;\n }\n }\n\n const hasWrapper = maxWidth || padding;\n\n const gridDiv = (\n <div\n id={`grid-${block.id}`}\n style={{\n display: \"grid\",\n gridTemplateColumns,\n gap,\n }}\n >\n {children.map((child) => (\n <React.Fragment key={child.id}>\n {renderBlockNode(child, depth + 1)}\n </React.Fragment>\n ))}\n </div>\n );\n\n return (\n <React.Fragment key={block.id}>\n {responsiveStyle && <style>{responsiveStyle}</style>}\n {hasWrapper ? (\n <div style={wrapperStyle}>{gridDiv}</div>\n ) : (\n gridDiv\n )}\n </React.Fragment>\n );\n}\n"],"names":["renderGrid","block","depth","cols","colTemplate","gap","maxWidth","padding","children","gridCols","gridTemplateColumns","responsiveStyle","wrapperStyle","hasWrapper","gridDiv","jsx","child","React","renderBlockNode","jsxs"],"mappings":";;;AAWO,SAASA,EACdC,GACAC,GACiB;AACjB,QAAM,EAAE,MAAAC,IAAO,GAAG,aAAAC,GAAa,KAAAC,IAAM,QAAQ,UAAAC,GAAU,SAAAC,GAAS,UAAAC,IAAW,GAAC,IAAMP,EAAM,OAElFQ,IACJ,OAAON,KAAS,WAAWA,IAAOA,EAAK,MAAMA,EAAK,MAAMA,EAAK,MAAM,GAE/DO,IAAsBN,KAAe,UAAUK,CAAQ,UAGvDE,IAAkBP,IACpB,qCAAqCH,EAAM,EAAE,kDAC7C,IAGEW,IAAoC,CAAA;AAC1C,GAAIN,KAAYC,OACVD,MACFM,EAAa,WAAWN,GACxBM,EAAa,aAAa,QAC1BA,EAAa,cAAc,SAEzBL,MACFK,EAAa,cAAcL,GAC3BK,EAAa,eAAeL;AAIhC,QAAMM,IAAaP,KAAYC,GAEzBO,IACJ,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAI,QAAQd,EAAM,EAAE;AAAA,MACpB,OAAO;AAAA,QACL,SAAS;AAAA,QACT,qBAAAS;AAAA,QACA,KAAAL;AAAA,MAAA;AAAA,MAGD,UAAAG,EAAS,IAAI,CAACQ,wBACZC,EAAM,UAAN,EACE,UAAAC,EAAgBF,GAAOd,IAAQ,CAAC,EAAA,GADdc,EAAM,EAE3B,CACD;AAAA,IAAA;AAAA,EAAA;AAIL,SACE,gBAAAG,EAACF,EAAM,UAAN,EACE,UAAA;AAAA,IAAAN,KAAmB,gBAAAI,EAAC,WAAO,UAAAJ,EAAA,CAAgB;AAAA,IAC3CE,IACC,gBAAAE,EAAC,OAAA,EAAI,OAAOH,GAAe,aAAQ,IAEnCE;AAAA,EAAA,EAAA,GALiBb,EAAM,EAO3B;AAEJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/render/renderers/layout/StackRenderer.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"StackRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/render/renderers/layout/StackRenderer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG1D,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,SAAS,CAsEjB"}
|
|
@@ -1,32 +1,43 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import
|
|
3
|
-
import { renderBlockNode as
|
|
4
|
-
function
|
|
1
|
+
import { jsxs as g, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import c from "react";
|
|
3
|
+
import { renderBlockNode as u } from "../../renderNodeImpl.js";
|
|
4
|
+
function v(t, o) {
|
|
5
5
|
const {
|
|
6
|
-
direction:
|
|
7
|
-
gap:
|
|
8
|
-
align:
|
|
6
|
+
direction: l = "col",
|
|
7
|
+
gap: p = "1rem",
|
|
8
|
+
align: r = "stretch",
|
|
9
9
|
justify: e = "start",
|
|
10
|
-
wrap:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
wrap: d = !1,
|
|
11
|
+
sticky: s = !1,
|
|
12
|
+
stickyOffset: f = "80px",
|
|
13
|
+
children: m = []
|
|
14
|
+
} = t.props, x = l === "row" ? "row" : "column", y = r === "start" ? "flex-start" : r === "end" ? "flex-end" : r === "center" ? "center" : "stretch", h = e === "start" ? "flex-start" : e === "end" ? "flex-end" : e === "center" ? "center" : e === "space-between" ? "space-between" : "space-around", w = s ? {
|
|
15
|
+
position: "sticky",
|
|
16
|
+
top: f,
|
|
17
|
+
alignSelf: "flex-start"
|
|
18
|
+
} : {}, i = s ? `@media (max-width: 767px) { #stack-${t.id} { position: static !important; align-self: stretch !important; } }` : "";
|
|
19
|
+
return /* @__PURE__ */ g(c.Fragment, { children: [
|
|
20
|
+
i && /* @__PURE__ */ n("style", { children: i }),
|
|
21
|
+
/* @__PURE__ */ n(
|
|
22
|
+
"div",
|
|
23
|
+
{
|
|
24
|
+
id: `stack-${t.id}`,
|
|
25
|
+
style: {
|
|
26
|
+
display: "flex",
|
|
27
|
+
flexDirection: x,
|
|
28
|
+
gap: p,
|
|
29
|
+
alignItems: y,
|
|
30
|
+
justifyContent: h,
|
|
31
|
+
flexWrap: d ? "wrap" : "nowrap",
|
|
32
|
+
...w
|
|
33
|
+
},
|
|
34
|
+
children: m.map((a) => /* @__PURE__ */ n(c.Fragment, { children: u(a, o + 1) }, a.id))
|
|
23
35
|
},
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
);
|
|
36
|
+
t.id
|
|
37
|
+
)
|
|
38
|
+
] }, t.id);
|
|
28
39
|
}
|
|
29
40
|
export {
|
|
30
|
-
|
|
41
|
+
v as renderStack
|
|
31
42
|
};
|
|
32
43
|
//# sourceMappingURL=StackRenderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackRenderer.js","sources":["../../../../../src/engine/render/renderers/layout/StackRenderer.tsx"],"sourcesContent":["/**\n * Stack Renderer\n * Renderiza bloco de stack com flex layout\n */\n\nimport React from \"react\";\nimport { StackBlock } from \"../../../schema/siteDocument\";\nimport { renderBlockNode } from \"../../renderNodeImpl\";\n\nexport function renderStack(\n block: StackBlock,\n depth: number,\n): React.ReactNode {\n const {\n direction = \"col\",\n gap = \"1rem\",\n align = \"stretch\",\n justify = \"start\",\n wrap = false,\n children = [],\n } = block.props;\n\n const flexDirection = direction === \"row\" ? \"row\" : \"column\";\n const alignItems =\n align === \"start\"\n ? \"flex-start\"\n : align === \"end\"\n ? \"flex-end\"\n : align === \"center\"\n ? \"center\"\n : \"stretch\";\n const justifyContent =\n justify === \"start\"\n ? \"flex-start\"\n : justify === \"end\"\n ? \"flex-end\"\n : justify === \"center\"\n ? \"center\"\n : justify === \"space-between\"\n ? \"space-between\"\n : \"space-around\";\n\n return (\n <div\n
|
|
1
|
+
{"version":3,"file":"StackRenderer.js","sources":["../../../../../src/engine/render/renderers/layout/StackRenderer.tsx"],"sourcesContent":["/**\n * Stack Renderer\n * Renderiza bloco de stack com flex layout\n * Suporte a sticky positioning para sidebars\n */\n\nimport React from \"react\";\nimport { StackBlock } from \"../../../schema/siteDocument\";\nimport { renderBlockNode } from \"../../renderNodeImpl\";\n\nexport function renderStack(\n block: StackBlock,\n depth: number,\n): React.ReactNode {\n const {\n direction = \"col\",\n gap = \"1rem\",\n align = \"stretch\",\n justify = \"start\",\n wrap = false,\n sticky = false,\n stickyOffset = \"80px\",\n children = [],\n } = block.props;\n\n const flexDirection = direction === \"row\" ? \"row\" : \"column\";\n const alignItems =\n align === \"start\"\n ? \"flex-start\"\n : align === \"end\"\n ? \"flex-end\"\n : align === \"center\"\n ? \"center\"\n : \"stretch\";\n const justifyContent =\n justify === \"start\"\n ? \"flex-start\"\n : justify === \"end\"\n ? \"flex-end\"\n : justify === \"center\"\n ? \"center\"\n : justify === \"space-between\"\n ? \"space-between\"\n : \"space-around\";\n\n // Sticky: position sticky + top offset + align-self flex-start (required in grid)\n const stickyStyles: React.CSSProperties = sticky\n ? {\n position: \"sticky\",\n top: stickyOffset,\n alignSelf: \"flex-start\",\n }\n : {};\n\n // Responsive: disable sticky on mobile via media query\n const responsiveStyle = sticky\n ? `@media (max-width: 767px) { #stack-${block.id} { position: static !important; align-self: stretch !important; } }`\n : \"\";\n\n return (\n <React.Fragment key={block.id}>\n {responsiveStyle && <style>{responsiveStyle}</style>}\n <div\n id={`stack-${block.id}`}\n key={block.id}\n style={{\n display: \"flex\",\n flexDirection,\n gap,\n alignItems,\n justifyContent,\n flexWrap: wrap ? \"wrap\" : \"nowrap\",\n ...stickyStyles,\n }}\n >\n {children.map((child) => (\n <React.Fragment key={child.id}>\n {renderBlockNode(child, depth + 1)}\n </React.Fragment>\n ))}\n </div>\n </React.Fragment>\n );\n}\n"],"names":["renderStack","block","depth","direction","gap","align","justify","wrap","sticky","stickyOffset","children","flexDirection","alignItems","justifyContent","stickyStyles","responsiveStyle","jsxs","React","jsx","child","renderBlockNode"],"mappings":";;;AAUO,SAASA,EACdC,GACAC,GACiB;AACjB,QAAM;AAAA,IACJ,WAAAC,IAAY;AAAA,IACZ,KAAAC,IAAM;AAAA,IACN,OAAAC,IAAQ;AAAA,IACR,SAAAC,IAAU;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,QAAAC,IAAS;AAAA,IACT,cAAAC,IAAe;AAAA,IACf,UAAAC,IAAW,CAAA;AAAA,EAAC,IACVT,EAAM,OAEJU,IAAgBR,MAAc,QAAQ,QAAQ,UAC9CS,IACJP,MAAU,UACN,eACAA,MAAU,QACR,aACAA,MAAU,WACR,WACA,WACJQ,IACJP,MAAY,UACR,eACAA,MAAY,QACV,aACAA,MAAY,WACV,WACAA,MAAY,kBACV,kBACA,gBAGNQ,IAAoCN,IACtC;AAAA,IACE,UAAU;AAAA,IACV,KAAKC;AAAA,IACL,WAAW;AAAA,EAAA,IAEb,CAAA,GAGEM,IAAkBP,IACpB,sCAAsCP,EAAM,EAAE,wEAC9C;AAEJ,SACE,gBAAAe,EAACC,EAAM,UAAN,EACE,UAAA;AAAA,IAAAF,KAAmB,gBAAAG,EAAC,WAAO,UAAAH,EAAA,CAAgB;AAAA,IAC5C,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI,SAASjB,EAAM,EAAE;AAAA,QAErB,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAAU;AAAA,UACA,KAAAP;AAAA,UACA,YAAAQ;AAAA,UACA,gBAAAC;AAAA,UACA,UAAUN,IAAO,SAAS;AAAA,UAC1B,GAAGO;AAAA,QAAA;AAAA,QAGJ,UAAAJ,EAAS,IAAI,CAACS,wBACZF,EAAM,UAAN,EACE,UAAAG,EAAgBD,GAAOjB,IAAQ,CAAC,EAAA,GADdiB,EAAM,EAE3B,CACD;AAAA,MAAA;AAAA,MAfIlB,EAAM;AAAA,IAAA;AAAA,EAgBb,EAAA,GApBmBA,EAAM,EAqB3B;AAEJ;"}
|
|
@@ -37,6 +37,10 @@ export interface StackBlock extends BlockBase {
|
|
|
37
37
|
align?: "start" | "center" | "end" | "stretch";
|
|
38
38
|
justify?: "start" | "center" | "end" | "space-between" | "space-around";
|
|
39
39
|
wrap?: boolean;
|
|
40
|
+
/** Sticky positioning (stays fixed while scrolling). Disabled on mobile. */
|
|
41
|
+
sticky?: boolean;
|
|
42
|
+
/** Top offset when sticky (ex: "80px" for below navbar). Default "80px". */
|
|
43
|
+
stickyOffset?: string;
|
|
40
44
|
children?: Block[];
|
|
41
45
|
};
|
|
42
46
|
}
|
|
@@ -54,6 +58,10 @@ export interface GridBlock extends BlockBase {
|
|
|
54
58
|
/** CSS grid-template-columns override (ex: "1fr 320px", "2fr 1fr"). Tem prioridade sobre cols. */
|
|
55
59
|
colTemplate?: string;
|
|
56
60
|
gap?: string;
|
|
61
|
+
/** Max-width of the grid container (ex: "1200px"). Centers with auto margin. */
|
|
62
|
+
maxWidth?: string;
|
|
63
|
+
/** Horizontal padding (ex: "2rem"). Applied to the grid wrapper. */
|
|
64
|
+
padding?: string;
|
|
57
65
|
children?: Block[];
|
|
58
66
|
};
|
|
59
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siteDocument.d.ts","sourceRoot":"","sources":["../../../src/engine/schema/siteDocument.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siteDocument.d.ts","sourceRoot":"","sources":["../../../src/engine/schema/siteDocument.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siteDocument.js","sources":["../../../src/engine/schema/siteDocument.ts"],"sourcesContent":["/**\n * Site Document Schema\n * Documento componível baseado em blocos\n */\n\nimport { ThemeTokens } from \"./themeTokens\";\nimport type { ImageGridItem, ImageGridPreset } from \"../shared/imageGrid\";\nimport type { TypographyConfig } from \"../shared/typography\";\nimport type { SitePluginsConfig, PageDataSource, PageEditRestrictions } from \"../plugins/types\";\n\n// Re-export shared types for convenience\nexport type { ImageGridItem, ImageGridPreset } from \"../shared/imageGrid\";\nexport type { TypographyConfig } from \"../shared/typography\";\n\n/**\n * Tipos de blocos disponíveis\n */\nexport type BlockType =\n // Layout primitives\n | \"container\"\n | \"stack\"\n | \"grid\"\n | \"box\"\n | \"spacer\"\n // Conteúdo básico\n | \"heading\"\n | \"text\"\n | \"image\"\n | \"button\"\n | \"link\"\n | \"divider\"\n // Conteúdo avançado\n | \"badge\"\n | \"icon\"\n | \"avatar\"\n | \"video\"\n | \"socialLinks\"\n // Composição básica\n | \"card\"\n | \"section\"\n // Seções compostas (Landing Page)\n | \"hero\"\n | \"feature\"\n | \"featureGrid\"\n | \"pricing\"\n | \"pricingCard\"\n | \"testimonial\"\n | \"testimonialGrid\"\n | \"faq\"\n | \"faqItem\"\n | \"cta\"\n | \"stats\"\n | \"statItem\"\n | \"logoCloud\"\n | \"navbar\"\n | \"footer\"\n // Novos blocos reutilizáveis\n | \"countdown\"\n | \"carousel\"\n | \"blogCard\"\n | \"blogCardGrid\"\n | \"teamCard\"\n | \"teamGrid\"\n | \"courseCardGrid\"\n | \"categoryCardGrid\"\n // Blog plugin (dinâmico)\n | \"blogPostCard\"\n | \"blogPostGrid\"\n | \"blogPostDetail\"\n | \"blogCategoryFilter\"\n | \"blogSearchBar\"\n | \"blogRecentPosts\"\n | \"blogTagCloud\"\n // Seções avançadas\n | \"productShowcase\"\n | \"aboutSection\"\n | \"contactSection\"\n // Formulários\n | \"form\"\n | \"input\"\n | \"textarea\"\n | \"formSelect\";\n\n/**\n * Props base de um bloco\n */\nexport interface BlockBase {\n id: string;\n type: BlockType;\n}\n\n/**\n * Container - Define largura máxima e padding\n */\nexport interface ContainerBlock extends BlockBase {\n type: \"container\";\n props: {\n maxWidth?: string; // ex: '1200px', '100%'\n padding?: string; // ex: '1rem', '2rem'\n children?: Block[];\n };\n}\n\n/**\n * Stack - Layout flex (row/col) com gap\n */\nexport interface StackBlock extends BlockBase {\n type: \"stack\";\n props: {\n direction?: \"row\" | \"col\";\n gap?: string; // ex: '1rem', '2rem'\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n justify?: \"start\" | \"center\" | \"end\" | \"space-between\" | \"space-around\";\n wrap?: boolean;\n children?: Block[];\n };\n}\n\n/**\n * Grid - Layout em grid responsivo\n */\nexport interface GridBlock extends BlockBase {\n type: \"grid\";\n props: {\n cols?: number | { sm?: number; md?: number; lg?: number };\n /** CSS grid-template-columns override (ex: \"1fr 320px\", \"2fr 1fr\"). Tem prioridade sobre cols. */\n colTemplate?: string;\n gap?: string;\n children?: Block[];\n };\n}\n\n/**\n * Box - Container genérico com estilos\n */\nexport interface BoxBlock extends BlockBase {\n type: \"box\";\n props: {\n bg?: string;\n border?: string;\n radius?: string;\n shadow?: string;\n padding?: string;\n children?: Block[];\n };\n}\n\n/**\n * Heading - Título (H1-H6)\n */\nexport interface HeadingBlock extends BlockBase {\n type: \"heading\";\n props: {\n level: 1 | 2 | 3 | 4 | 5 | 6;\n text: string;\n align?: \"left\" | \"center\" | \"right\";\n color?: string;\n };\n}\n\n/**\n * Text - Parágrafo de texto\n */\nexport interface TextBlock extends BlockBase {\n type: \"text\";\n props: {\n text: string;\n align?: \"left\" | \"center\" | \"right\";\n color?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n };\n}\n\n/**\n * Image - Imagem\n */\nexport interface ImageBlock extends BlockBase {\n type: \"image\";\n props: {\n src: string;\n alt?: string;\n width?: string;\n height?: string;\n objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n };\n}\n\n/**\n * Button - Botão\n */\nexport interface ButtonBlock extends BlockBase {\n type: \"button\";\n props: {\n text: string;\n href?: string;\n variant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\n size?: \"sm\" | \"md\" | \"lg\";\n // Hover effects (principal)\n /** Efeito de hover no botão */\n hoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n /** Intensidade do efeito (10-100) */\n hoverIntensity?: number;\n // Hover overlay (adicional - combina com o principal)\n /** Efeito visual adicional no hover */\n hoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n /** Nome do ícone para o efeito \"icon\" */\n hoverIconName?: string;\n };\n}\n\n/**\n * Link - Link\n */\nexport interface LinkBlock extends BlockBase {\n type: \"link\";\n props: {\n text: string;\n href: string;\n target?: \"_blank\" | \"_self\";\n // Hover effects\n /** Efeito de hover no link */\n hoverEffect?: \"none\" | \"background\" | \"underline\" | \"underline-center\" | \"scale\" | \"glow\";\n /** Intensidade do efeito (10-100) */\n hoverIntensity?: number;\n /** Cor do hover */\n hoverColor?: string;\n };\n}\n\n/**\n * Divider - Divisor horizontal\n */\nexport interface DividerBlock extends BlockBase {\n type: \"divider\";\n props: {\n color?: string;\n thickness?: string;\n };\n}\n\n/**\n * Card - Card com slots (header/content/footer)\n */\nexport interface CardBlock extends BlockBase {\n type: \"card\";\n props: {\n header?: Block[];\n content?: Block[];\n footer?: Block[];\n padding?: string;\n bg?: string;\n border?: string;\n radius?: string;\n shadow?: string;\n };\n}\n\n/**\n * Section - Seção container\n */\nexport interface SectionBlock extends BlockBase {\n type: \"section\";\n props: {\n id?: string;\n bg?: string;\n padding?: string;\n children?: Block[];\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS - LAYOUT AVANÇADO\n// ============================================================================\n\n/**\n * Spacer - Espaçador flexível\n */\nexport interface SpacerBlock extends BlockBase {\n type: \"spacer\";\n props: {\n height?: string;\n responsive?: { sm?: string; md?: string; lg?: string };\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS - CONTEÚDO AVANÇADO\n// ============================================================================\n\n/**\n * Badge - Tag/badge com variantes\n */\nexport interface BadgeBlock extends BlockBase {\n type: \"badge\";\n props: {\n text: string;\n variant?:\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n size?: \"sm\" | \"md\" | \"lg\";\n };\n}\n\n/**\n * Icon - Ícone SVG\n */\nexport interface IconBlock extends BlockBase {\n type: \"icon\";\n props: {\n name: string; // nome do ícone (ex: 'check', 'star', 'arrow-right')\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n color?: string;\n };\n}\n\n/**\n * Avatar - Imagem circular com fallback\n */\nexport interface AvatarBlock extends BlockBase {\n type: \"avatar\";\n props: {\n src?: string;\n alt?: string;\n name?: string; // Para gerar iniciais se não houver imagem\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n };\n}\n\n/**\n * Video - Embed de vídeo\n */\nexport interface VideoBlock extends BlockBase {\n type: \"video\";\n props: {\n src: string; // URL do YouTube, Vimeo ou MP4\n poster?: string;\n autoplay?: boolean;\n controls?: boolean;\n aspectRatio?: \"16:9\" | \"4:3\" | \"1:1\" | \"9:16\";\n };\n}\n\n/**\n * SocialLinks - Links de redes sociais\n */\nexport interface SocialLinksBlock extends BlockBase {\n type: \"socialLinks\";\n props: {\n links: Array<{\n platform:\n | \"facebook\"\n | \"twitter\"\n | \"instagram\"\n | \"linkedin\"\n | \"youtube\"\n | \"tiktok\"\n | \"github\"\n | \"whatsapp\";\n url: string;\n }>;\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"default\" | \"filled\" | \"outline\";\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS - SEÇÕES COMPOSTAS\n// ============================================================================\n\n/**\n * Hero - Seção hero completa\n */\nexport type HeroVariationId =\n | \"hero-split\"\n | \"hero-parallax\"\n | \"hero-overlay\"\n | \"hero-gradient\"\n | \"hero-minimal\"\n | \"hero-card\"\n | \"hero-carousel\";\n\nexport interface HeroBlock extends BlockBase {\n type: \"hero\";\n props: {\n variation?: HeroVariationId;\n variant?: \"centered\" | \"split\" | \"image-bg\" | \"video-bg\";\n title: string;\n subtitle?: string;\n description?: string;\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n image?: string;\n video?: string;\n badge?: string;\n align?: \"left\" | \"center\" | \"right\";\n /** Posição horizontal do container de conteúdo no layout */\n contentPosition?: \"left\" | \"center\" | \"right\";\n /** Espaçamento entre elementos do conteúdo (título, subtítulo, descrição, botões) */\n contentSpacing?: \"compact\" | \"default\" | \"spacious\";\n /** Distância entre o bloco de conteúdo e o bloco de imagem (layouts divididos) */\n blockGap?: \"default\" | \"wide\" | \"x-wide\";\n minHeight?: string;\n overlay?: boolean;\n /** Cor/gradiente do overlay (ex.: linear-gradient). Se omitido, usa fallback do CSS. */\n overlayColor?: string;\n /** Cor ou gradiente no layout split (lado do conteúdo). */\n background?: string;\n\n // === Typography Colors (legacy - mantido para retrocompatibilidade) ===\n /** Cor do título */\n titleColor?: string;\n /** Cor do subtítulo */\n subtitleColor?: string;\n /** Cor da descrição */\n descriptionColor?: string;\n\n // === Typography Config (novo sistema completo) ===\n /** Configuração completa de tipografia do título */\n titleTypography?: TypographyConfig;\n /** Configuração completa de tipografia do subtítulo */\n subtitleTypography?: TypographyConfig;\n /** Configuração completa de tipografia da descrição */\n descriptionTypography?: TypographyConfig;\n\n // === Badge Styling ===\n /** Cor de fundo do badge */\n badgeColor?: string;\n /** Cor do texto do badge */\n badgeTextColor?: string;\n\n // === Layout & Spacing ===\n /** Largura máxima do conteúdo */\n contentMaxWidth?: string;\n /** Espaçamento interno vertical */\n paddingY?: string;\n\n // === Image Styling ===\n /** Border radius da imagem (px) */\n imageRadius?: number;\n /** Sombra da imagem */\n imageShadow?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Posição da imagem no split */\n imagePosition?: \"left\" | \"right\";\n\n // === Button Size ===\n /** Tamanho dos botões */\n buttonSize?: \"sm\" | \"md\" | \"lg\";\n\n // === Primary Button Styling ===\n /** Variante do botão primário */\n primaryButtonVariant?: \"solid\" | \"outline\" | \"ghost\";\n /** Cor do botão primário */\n primaryButtonColor?: string;\n /** Cor do texto do botão primário */\n primaryButtonTextColor?: string;\n /** Border radius do botão primário */\n primaryButtonRadius?: number;\n\n // === Secondary Button Styling ===\n /** Variante do botão secundário */\n secondaryButtonVariant?: \"solid\" | \"outline\" | \"ghost\";\n /** Cor do botão secundário */\n secondaryButtonColor?: string;\n /** Cor do texto do botão secundário */\n secondaryButtonTextColor?: string;\n /** Border radius do botão secundário */\n secondaryButtonRadius?: number;\n\n // === Button Hover Effects (principal) ===\n /** Efeito de hover nos botões */\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n /** Intensidade do efeito (10-100) */\n buttonHoverIntensity?: number;\n\n // === Button Hover Overlay (adicional) ===\n /** Efeito visual adicional nos botões */\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n /** Nome do ícone para o efeito \"icon\" */\n buttonHoverIconName?: string;\n\n // === Decorative Elements ===\n /** Mostrar elemento decorativo de onda no fundo */\n showWave?: boolean;\n /** Cor da onda decorativa */\n waveColor?: string;\n\n // === Image Grid System ===\n /** Habilita grid de imagens no lugar da imagem única (split layout) */\n imageGridEnabled?: boolean;\n /** Preset de layout da grid */\n imageGridPreset?: ImageGridPreset;\n /** Array de imagens da grid (até 4) */\n imageGridImages?: ImageGridItem[];\n /** Espaçamento entre imagens em pixels */\n imageGridGap?: number;\n\n // === Carousel System ===\n /** Array de imagens do carrossel de fundo */\n carouselImages?: string[];\n /** Intervalo entre slides em segundos */\n carouselInterval?: number;\n /** Tipo de transição do carrossel */\n carouselTransition?: \"crossfade\" | \"slide\";\n };\n}\n\n/**\n * Feature - Card de feature individual\n */\nexport interface FeatureBlock extends BlockBase {\n type: \"feature\";\n props: {\n icon?: string;\n title: string;\n description: string;\n link?: { text: string; href: string };\n };\n}\n\n/**\n * FeatureGrid - Grid de features\n */\nexport interface FeatureGridBlock extends BlockBase {\n type: \"featureGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n variant?: \"default\" | \"cards\" | \"image-cards\";\n features: Array<{\n icon?: string;\n title: string;\n description: string;\n image?: string;\n link?: { text: string; href?: string };\n }>;\n };\n}\n\n/**\n * PricingCard - Card de preço individual\n */\nexport interface PricingCardBlock extends BlockBase {\n type: \"pricingCard\";\n props: {\n name: string;\n price: string;\n period?: string;\n description?: string;\n features: string[];\n buttonText?: string;\n buttonHref?: string;\n highlighted?: boolean;\n badge?: string;\n };\n}\n\n/**\n * Pricing - Seção de preços completa\n */\nexport interface PricingBlock extends BlockBase {\n type: \"pricing\";\n props: {\n title?: string;\n subtitle?: string;\n plans: Array<{\n name: string;\n price: string;\n period?: string;\n description?: string;\n features: string[];\n buttonText?: string;\n buttonHref?: string;\n highlighted?: boolean;\n badge?: string;\n }>;\n };\n}\n\n/**\n * Testimonial - Card de depoimento individual\n */\nexport interface TestimonialBlock extends BlockBase {\n type: \"testimonial\";\n props: {\n quote: string;\n authorName: string;\n authorRole?: string;\n authorCompany?: string;\n authorAvatar?: string;\n rating?: number; // 1-5 estrelas\n };\n}\n\n/**\n * TestimonialGrid - Grid de depoimentos\n */\nexport interface TestimonialGridBlock extends BlockBase {\n type: \"testimonialGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n testimonials: Array<{\n quote: string;\n authorName: string;\n authorRole?: string;\n authorCompany?: string;\n authorAvatar?: string;\n rating?: number;\n }>;\n };\n}\n\n/**\n * FaqItem - Item individual do FAQ\n */\nexport interface FaqItemBlock extends BlockBase {\n type: \"faqItem\";\n props: {\n question: string;\n answer: string;\n defaultOpen?: boolean;\n };\n}\n\n/**\n * Faq - Seção FAQ completa (accordion)\n */\nexport interface FaqBlock extends BlockBase {\n type: \"faq\";\n props: {\n title?: string;\n subtitle?: string;\n items: Array<{\n question: string;\n answer: string;\n }>;\n };\n}\n\n/**\n * CTA - Seção Call-to-Action\n */\nexport interface CtaBlock extends BlockBase {\n type: \"cta\";\n props: {\n title: string;\n description?: string;\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n variant?: \"default\" | \"centered\" | \"split\" | \"gradient\";\n bg?: string;\n // Button Size\n /** Tamanho dos botões */\n buttonSize?: \"sm\" | \"md\" | \"lg\";\n // Button Hover Effects (principal)\n /** Efeito de hover nos botões */\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n /** Intensidade do efeito (10-100) */\n buttonHoverIntensity?: number;\n // Button Hover Overlay (adicional)\n /** Efeito visual adicional nos botões */\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n /** Nome do ícone para o efeito \"icon\" */\n buttonHoverIconName?: string;\n };\n}\n\n/**\n * StatItem - Item individual de estatística\n */\nexport interface StatItemBlock extends BlockBase {\n type: \"statItem\";\n props: {\n value: string;\n label: string;\n prefix?: string;\n suffix?: string;\n };\n}\n\n/**\n * Stats - Seção de estatísticas\n */\nexport interface StatsBlock extends BlockBase {\n type: \"stats\";\n props: {\n title?: string;\n subtitle?: string;\n items: Array<{\n value: string;\n label: string;\n prefix?: string;\n suffix?: string;\n }>;\n };\n}\n\n/**\n * LogoCloud - Grid de logos\n */\nexport interface LogoCloudBlock extends BlockBase {\n type: \"logoCloud\";\n props: {\n title?: string;\n logos: Array<{\n src: string;\n alt: string;\n href?: string;\n }>;\n grayscale?: boolean;\n };\n}\n\n/**\n * Link da Navbar - pode ser um link simples ou ter um dropdown com subitems\n */\nexport type NavbarLink = {\n text: string;\n href?: string;\n dropdown?: Array<{ text: string; href: string }>;\n};\n\n/**\n * IDs das variações visuais do bloco Navbar\n */\nexport type NavbarVariationId =\n | \"navbar-simples\"\n | \"navbar-moderno\"\n | \"navbar-glass\"\n | \"navbar-elegante\"\n | \"navbar-pill\";\n\n/**\n * Navbar - Barra de navegação\n */\nexport interface NavbarBlock extends BlockBase {\n type: \"navbar\";\n props: {\n variation?: NavbarVariationId;\n /** URL da imagem do logo ou objeto com src, alt e href */\n logo?: string | { src: string; alt?: string; href?: string };\n logoText?: string;\n links: Array<NavbarLink>;\n ctaButton?: { text: string; href?: string };\n sticky?: boolean;\n /** Cor de fundo customizada (suporta gradientes) */\n bg?: string;\n\n // Layout Options\n /** Distribuição do navbar: expandido, centralizado ou compacto */\n layout?: \"expanded\" | \"centered\" | \"compact\";\n /** Modo flutuante: navbar com margem lateral e mais destaque */\n floating?: boolean;\n\n // Visual Customization\n /** Border radius em pixels (0-24) */\n borderRadius?: number;\n /** Sombra do navbar */\n shadow?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Opacidade do navbar (0-100) */\n opacity?: number;\n /** Intensidade do desfoque/blur (0-100) para efeito de vidro fosco */\n blurOpacity?: number;\n /** Altura do logo em pixels (30-120) */\n logoHeight?: number;\n /** Posição da borda: nenhuma, completa, superior, inferior, esquerda, direita */\n borderPosition?: \"none\" | \"all\" | \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Espessura da borda em pixels (1-4) */\n borderWidth?: number;\n /** Cor da borda */\n borderColor?: string;\n\n // Link Styling\n /** Cor dos links */\n linkColor?: string;\n /** Cor dos links no hover */\n linkHoverColor?: string;\n /** Tamanho da fonte dos links */\n linkFontSize?: \"sm\" | \"md\" | \"lg\";\n /** Efeito de hover nos links */\n linkHoverEffect?: \"background\" | \"underline\" | \"underline-center\" | \"slide-bg\" | \"scale\" | \"glow\";\n /** Intensidade do efeito de hover nos links (0-100) */\n linkHoverIntensity?: number;\n\n // Button/CTA Styling\n /** Variante do botão CTA */\n buttonVariant?: \"solid\" | \"outline\" | \"ghost\";\n /** Tamanho do botão CTA */\n buttonSize?: \"sm\" | \"md\" | \"lg\";\n /** Cor do botão CTA */\n buttonColor?: string;\n /** Cor do texto do botão CTA */\n buttonTextColor?: string;\n /** Border radius do botão em pixels (0-24) */\n buttonBorderRadius?: number;\n /** Efeito de hover no botão CTA */\n buttonHoverEffect?: \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n /** Intensidade do efeito de hover no botão (0-100) */\n buttonHoverIntensity?: number;\n /** Efeito visual adicional no botão CTA */\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n /** Nome do ícone para o efeito \"icon\" */\n buttonHoverIconName?: string;\n };\n}\n\n/**\n * Footer - Rodapé do site\n */\nexport interface FooterBlock extends BlockBase {\n type: \"footer\";\n props: {\n logo?: string | { src: string; alt?: string };\n logoText?: string;\n description?: string;\n columns?: Array<{\n title: string;\n links: Array<{\n text: string;\n href: string;\n }>;\n }>;\n social?: Array<{\n platform: string;\n href: string;\n }>;\n copyright?: string;\n variant?: \"simple\" | \"multi-column\";\n // Link Hover Effects\n /** Efeito de hover nos links */\n linkHoverEffect?: \"none\" | \"background\" | \"underline\" | \"underline-center\" | \"scale\" | \"glow\";\n /** Intensidade do efeito (10-100) */\n linkHoverIntensity?: number;\n /** Cor do link no hover */\n linkHoverColor?: string;\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS REUTILIZÁVEIS\n// ============================================================================\n\n/**\n * Countdown - Contador regressivo (eventos, matrículas, promoções)\n */\nexport interface CountdownBlock extends BlockBase {\n type: \"countdown\";\n props: {\n title?: string;\n description?: string;\n /** Data final em ISO string para cálculo real */\n endDate?: string;\n /** Exibir labels Days/Hours/Minutes/Seconds com valores 00 quando sem endDate */\n showPlaceholders?: boolean;\n buttonText?: string;\n buttonHref?: string;\n variant?: \"default\" | \"banner\";\n /** Texto no círculo decorativo (ex.: \"Admission on Going\") */\n badgeText?: string;\n bg?: string;\n };\n}\n\n/**\n * Carousel - Slider de slides (programas, destaques, depoimentos)\n */\nexport interface CarouselBlock extends BlockBase {\n type: \"carousel\";\n props: {\n slides: Array<{\n image?: string;\n title?: string;\n description?: string;\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n }>;\n autoplay?: boolean;\n showArrows?: boolean;\n showDots?: boolean;\n };\n}\n\n/**\n * BlogCard - Card de post/notícia individual\n */\nexport interface BlogCardBlock extends BlockBase {\n type: \"blogCard\";\n props: {\n image?: string;\n date?: string;\n category?: string;\n title: string;\n excerpt?: string;\n linkText?: string;\n linkHref?: string;\n };\n}\n\n/**\n * BlogCardGrid - Grid de cards de blog/notícias\n */\nexport interface BlogCardGridBlock extends BlockBase {\n type: \"blogCardGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n cards: Array<{\n image?: string;\n date?: string;\n category?: string;\n title: string;\n excerpt?: string;\n linkText?: string;\n linkHref?: string;\n }>;\n };\n}\n\n/**\n * TeamCard - Card de membro da equipe/professor\n */\nexport interface TeamCardBlock extends BlockBase {\n type: \"teamCard\";\n props: {\n avatar?: string;\n name: string;\n role?: string;\n };\n}\n\n/**\n * TeamGrid - Grid de membros da equipe\n */\nexport interface TeamGridBlock extends BlockBase {\n type: \"teamGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n members: Array<{\n avatar?: string;\n name: string;\n role?: string;\n }>;\n };\n}\n\n/**\n * CourseCardGrid - Grid de cards de curso (thumbnail, título, preço, rating, View Course)\n */\nexport interface CourseCardGridBlock extends BlockBase {\n type: \"courseCardGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n cards: Array<{\n image?: string;\n title: string;\n price?: string;\n period?: string;\n rating?: number;\n meta?: string[];\n buttonText?: string;\n buttonHref?: string;\n }>;\n };\n}\n\n/**\n * CategoryCardGrid - Grid de categorias (imagem de fundo + título overlay + link)\n */\nexport interface CategoryCardGridBlock extends BlockBase {\n type: \"categoryCardGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n categories: Array<{\n image: string;\n title: string;\n href?: string;\n }>;\n };\n}\n\n// ============================================================================\n// BLOCOS DE PLUGIN - BLOG (dinâmico, conectado a ContentProvider)\n// ============================================================================\n\n/**\n * BlogPostCard - Card individual de post (versão dinâmica do blogCard)\n * Pode receber dados de ContentProvider ou ter conteúdo estático\n */\nexport interface BlogPostCardBlock extends BlockBase {\n type: \"blogPostCard\";\n props: {\n title: string;\n excerpt?: string;\n image?: string;\n date?: string;\n category?: string;\n authorName?: string;\n authorAvatar?: string;\n readingTime?: string;\n linkHref?: string;\n linkText?: string;\n variant?: \"default\" | \"horizontal\" | \"minimal\";\n showImage?: boolean;\n showCategory?: boolean;\n showDate?: boolean;\n showAuthor?: boolean;\n showReadingTime?: boolean;\n };\n}\n\n/**\n * BlogPostGrid - Grid de posts com suporte a dados dinâmicos\n * Pode usar dataSource para buscar do ContentProvider ou cards estáticos\n */\nexport interface BlogPostGridBlock extends BlockBase {\n type: \"blogPostGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n /** Cards estáticos (quando não há dataSource) */\n cards?: Array<{\n title: string;\n excerpt?: string;\n image?: string;\n date?: string;\n category?: string;\n authorName?: string;\n linkHref?: string;\n linkText?: string;\n }>;\n /** Fonte de dados dinâmica (ContentProvider) */\n dataSource?: {\n provider: string;\n limit?: number;\n filter?: Record<string, unknown>;\n };\n variant?: \"default\" | \"featured\" | \"minimal\";\n showViewAll?: boolean;\n viewAllText?: string;\n viewAllHref?: string;\n /** Pagination — set by content hydration, not user-editable */\n currentPage?: number;\n totalPages?: number;\n paginationBaseUrl?: string;\n };\n}\n\n/**\n * BlogPostDetail - Conteúdo completo de um post (para página blog/:slug)\n * Recebe dados do ContentProvider na página dinâmica\n */\nexport interface BlogPostDetailBlock extends BlockBase {\n type: \"blogPostDetail\";\n props: {\n title: string;\n content: string;\n featuredImage?: string;\n date?: string;\n category?: string;\n /** Variante visual do bloco autor: \"inline\" | \"card\" | \"minimal\" */\n authorVariant?: \"inline\" | \"card\" | \"minimal\";\n readingTime?: string;\n tags?: string[];\n showFeaturedImage?: boolean;\n showAuthor?: boolean;\n showDate?: boolean;\n showTags?: boolean;\n showReadingTime?: boolean;\n contentMaxWidth?: string;\n /** Nome do autor (populado pela hydration, editável no admin) */\n authorName?: string;\n /** Avatar URL do autor */\n authorAvatar?: string;\n /** Bio curta do autor */\n authorBio?: string;\n // SEO fields (populated by ContentProvider, readOnly in editor)\n metaTitle?: string;\n metaDescription?: string;\n ogImage?: string;\n };\n}\n\n/**\n * BlogCategoryFilter - Filtro de categorias para listagem do blog\n * Dados populados pelo ContentProvider (categories extraídas dos posts)\n */\nexport interface BlogCategoryFilterBlock extends BlockBase {\n type: \"blogCategoryFilter\";\n props: {\n title?: string;\n categories: Array<{ name: string; slug: string; count?: number; image?: string }>;\n variant: \"chips\" | \"buttons\" | \"list\";\n showCount?: boolean;\n showAll?: boolean;\n allLabel?: string;\n activeCategory?: string;\n filterUrl?: string;\n };\n}\n\n/**\n * BlogSearchBar - Barra de busca para o blog\n * Envia busca via form action para URL configurável\n */\nexport interface BlogSearchBarBlock extends BlockBase {\n type: \"blogSearchBar\";\n props: {\n placeholder?: string;\n variant: \"simple\" | \"expanded\" | \"with-filters\";\n showIcon?: boolean;\n searchUrl?: string;\n filterCategories?: boolean;\n filterTags?: boolean;\n filterDate?: boolean;\n };\n}\n\n/**\n * BlogRecentPosts - Widget com os posts mais recentes do blog\n */\nexport interface BlogRecentPostsBlock extends BlockBase {\n type: \"blogRecentPosts\";\n props: {\n /** Título do widget (ex: \"Posts Recentes\") */\n title?: string;\n /** Quantidade de posts a exibir */\n count?: number;\n /** Posts hidratados pela contentHydration */\n posts?: Array<{\n title: string;\n slug: string;\n date?: string;\n image?: string;\n category?: string;\n }>;\n /** Mostrar miniatura */\n showThumbnail?: boolean;\n /** Mostrar data */\n showDate?: boolean;\n /** Mostrar badge de categoria */\n showCategory?: boolean;\n };\n}\n\n/**\n * BlogTagCloud - Widget com nuvem de tags do blog\n */\nexport interface BlogTagCloudBlock extends BlockBase {\n type: \"blogTagCloud\";\n props: {\n /** Título do widget (ex: \"Tags\") */\n title?: string;\n /** Tags hidratadas pela contentHydration — array de {name, count} */\n tags?: Array<{ name: string; count: number }>;\n /** Estilo: \"badges\" | \"list\" */\n variant?: \"badges\" | \"list\";\n };\n}\n\n// ============================================================================\n// SEÇÕES AVANÇADAS\n// ============================================================================\n\n/**\n * ProductShowcase - Seção de produtos com layout alternado\n */\nexport interface ProductShowcaseBlock extends BlockBase {\n type: \"productShowcase\";\n props: {\n title?: string;\n subtitle?: string;\n products: Array<{\n image?: string;\n icon?: string;\n badge?: string;\n name: string;\n description: string;\n longDescription?: string;\n features?: string[];\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n }>;\n variant?: \"alternating\" | \"grid\" | \"stacked\";\n bg?: string;\n // Button Hover Effects\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n buttonHoverIntensity?: number;\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n buttonHoverIconName?: string;\n };\n}\n\n/**\n * AboutSection - Seção sobre com imagem decorativa + texto + achievements\n */\nexport interface AboutSectionBlock extends BlockBase {\n type: \"aboutSection\";\n props: {\n title?: string;\n subtitle?: string;\n description?: string;\n secondaryDescription?: string;\n image?: string;\n achievements?: Array<{\n text: string;\n }>;\n primaryButton?: { text: string; href?: string };\n variant?: \"image-left\" | \"image-right\" | \"centered\";\n bg?: string;\n stats?: Array<{\n value: string;\n label: string;\n }>;\n // Button Hover Effects\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n buttonHoverIntensity?: number;\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n buttonHoverIconName?: string;\n };\n}\n\n/**\n * ContactSection - Seção de contato com info cards + formulário\n */\nexport interface ContactSectionBlock extends BlockBase {\n type: \"contactSection\";\n props: {\n title?: string;\n subtitle?: string;\n description?: string;\n contactInfo?: Array<{\n icon?: string;\n label: string;\n value: string;\n }>;\n formTitle?: string;\n formFields?: Array<{\n name: string;\n label: string;\n type: \"text\" | \"email\" | \"tel\" | \"textarea\";\n placeholder?: string;\n required?: boolean;\n }>;\n submitText?: string;\n variant?: \"split\" | \"stacked\" | \"form-only\";\n bg?: string;\n // Button Hover Effects\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n buttonHoverIntensity?: number;\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n buttonHoverIconName?: string;\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS - FORMULÁRIOS\n// ============================================================================\n\n/**\n * Form - Container de formulário\n */\nexport interface FormBlock extends BlockBase {\n type: \"form\";\n props: {\n action?: string;\n method?: \"get\" | \"post\";\n children?: Block[];\n submitText?: string;\n };\n}\n\n/**\n * Input - Campo de entrada\n */\nexport interface InputBlock extends BlockBase {\n type: \"input\";\n props: {\n name: string;\n label?: string;\n placeholder?: string;\n type?: \"text\" | \"email\" | \"password\" | \"tel\" | \"url\" | \"number\";\n required?: boolean;\n };\n}\n\n/**\n * Textarea - Campo de texto longo\n */\nexport interface TextareaBlock extends BlockBase {\n type: \"textarea\";\n props: {\n name: string;\n label?: string;\n placeholder?: string;\n rows?: number;\n required?: boolean;\n };\n}\n\n/**\n * FormSelect - Dropdown de formulário\n */\nexport interface FormSelectBlock extends BlockBase {\n type: \"formSelect\";\n props: {\n name: string;\n label?: string;\n placeholder?: string;\n options: Array<{ value: string; label: string }>;\n required?: boolean;\n };\n}\n\n// ============================================================================\n// UNION TYPE DE TODOS OS BLOCOS\n// ============================================================================\n\n/**\n * Union type de todos os blocos\n */\nexport type Block =\n // Layout\n | ContainerBlock\n | StackBlock\n | GridBlock\n | BoxBlock\n | SpacerBlock\n // Conteúdo básico\n | HeadingBlock\n | TextBlock\n | ImageBlock\n | ButtonBlock\n | LinkBlock\n | DividerBlock\n // Conteúdo avançado\n | BadgeBlock\n | IconBlock\n | AvatarBlock\n | VideoBlock\n | SocialLinksBlock\n // Composição básica\n | CardBlock\n | SectionBlock\n // Seções compostas\n | HeroBlock\n | FeatureBlock\n | FeatureGridBlock\n | PricingBlock\n | PricingCardBlock\n | TestimonialBlock\n | TestimonialGridBlock\n | FaqBlock\n | FaqItemBlock\n | CtaBlock\n | StatsBlock\n | StatItemBlock\n | LogoCloudBlock\n | NavbarBlock\n | FooterBlock\n // Novos blocos reutilizáveis\n | CountdownBlock\n | CarouselBlock\n | BlogCardBlock\n | BlogCardGridBlock\n | TeamCardBlock\n | TeamGridBlock\n | CourseCardGridBlock\n | CategoryCardGridBlock\n // Blog plugin (dinâmico)\n | BlogPostCardBlock\n | BlogPostGridBlock\n | BlogPostDetailBlock\n | BlogCategoryFilterBlock\n | BlogSearchBarBlock\n | BlogRecentPostsBlock\n | BlogTagCloudBlock\n // Seções avançadas\n | ProductShowcaseBlock\n | AboutSectionBlock\n | ContactSectionBlock\n // Formulários\n | FormBlock\n | InputBlock\n | TextareaBlock\n | FormSelectBlock;\n\n/**\n * Utility type: extract the block interface for a given BlockType\n */\nexport type BlockOfType<T extends BlockType> = Extract<Block, { type: T }>;\n\n/**\n * Utility type: extract the props type for a given BlockType\n */\nexport type BlockPropsFor<T extends BlockType> = BlockOfType<T>[\"props\"];\n\n/**\n * SEO configuration for a page\n */\nexport interface PageSeoConfig {\n metaTitle?: string;\n metaDescription?: string;\n ogImage?: string;\n ogType?: string;\n canonicalUrl?: string;\n noIndex?: boolean;\n}\n\n/**\n * Global site metadata for SEO\n */\nexport interface SiteMetadata {\n siteName?: string;\n defaultOgImage?: string;\n language?: string;\n}\n\n/**\n * Página do site\n */\nexport interface SitePage {\n id: string;\n name: string;\n slug: string;\n structure: Block[]; // Árvore de blocos\n /** ID do plugin que criou esta página (se for uma página de plugin) */\n pluginId?: string;\n /** ID do template de página do plugin */\n pageTemplateId?: string;\n /** Página dinâmica com dados de backend (ex.: blog/:slug) */\n isDynamic?: boolean;\n /** Configuração de dados dinâmicos (provider, modo, mapeamento) */\n dataSource?: PageDataSource;\n /** Restrições de edição impostas pelo plugin */\n editRestrictions?: PageEditRestrictions;\n /** SEO configuration for this page */\n seo?: PageSeoConfig;\n}\n\n/**\n * Coleções de conteúdo (testimonials, faq, posts, etc)\n */\nexport interface ContentCollection {\n id: string;\n type: \"testimonials\" | \"faq\" | \"posts\" | \"services\" | \"team\" | \"custom\";\n items: Array<Record<string, any>>;\n}\n\n/**\n * Documento completo do site\n */\nexport interface SiteDocument {\n schemaVersion: 2;\n theme: ThemeTokens;\n content?: {\n collections?: ContentCollection[];\n };\n pages: SitePage[];\n /** Configuração de plugins ativos e suas opções */\n plugins?: SitePluginsConfig;\n /** Global site metadata for SEO */\n metadata?: SiteMetadata;\n}\n\n/**\n * Helper para criar um documento vazio\n */\nexport function createEmptySiteDocument(\n _name: string = \"Novo Site\",\n): SiteDocument {\n return {\n schemaVersion: 2,\n theme: {\n colors: {\n bg: \"#ffffff\",\n surface: \"#f9fafb\",\n border: \"#e5e7eb\",\n text: \"#1f2937\",\n mutedText: \"#6b7280\",\n primary: \"#3b82f6\",\n primaryText: \"#ffffff\",\n secondary: \"#6b7280\",\n accent: \"#8b5cf6\",\n ring: \"#3b82f6\",\n },\n radiusScale: \"md\",\n shadowScale: \"soft\",\n spacingScale: \"normal\",\n motion: \"subtle\",\n backgroundStyle: \"flat\",\n typography: {\n fontFamily: {\n heading: \"system-ui, -apple-system, sans-serif\",\n body: \"system-ui, -apple-system, sans-serif\",\n },\n baseSize: \"16px\",\n headingScale: {\n h1: \"2.5rem\",\n h2: \"2rem\",\n h3: \"1.75rem\",\n h4: \"1.5rem\",\n h5: \"1.25rem\",\n h6: \"1rem\",\n },\n },\n },\n pages: [\n {\n id: \"home\",\n name: \"Home\",\n slug: \"home\",\n structure: [],\n },\n ],\n };\n}\n"],"names":["createEmptySiteDocument","_name"],"mappings":"AA08CO,SAASA,EACdC,IAAgB,aACF;AACd,SAAO;AAAA,IACL,eAAe;AAAA,IACf,OAAO;AAAA,MACL,QAAQ;AAAA,QACN,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,WAAW;AAAA,QACX,SAAS;AAAA,QACT,aAAa;AAAA,QACb,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,MAAM;AAAA,MAAA;AAAA,MAER,aAAa;AAAA,MACb,aAAa;AAAA,MACb,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,YAAY;AAAA,QACV,YAAY;AAAA,UACV,SAAS;AAAA,UACT,MAAM;AAAA,QAAA;AAAA,QAER,UAAU;AAAA,QACV,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QAAA;AAAA,MACN;AAAA,IACF;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,CAAA;AAAA,MAAC;AAAA,IACd;AAAA,EACF;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"siteDocument.js","sources":["../../../src/engine/schema/siteDocument.ts"],"sourcesContent":["/**\n * Site Document Schema\n * Documento componível baseado em blocos\n */\n\nimport { ThemeTokens } from \"./themeTokens\";\nimport type { ImageGridItem, ImageGridPreset } from \"../shared/imageGrid\";\nimport type { TypographyConfig } from \"../shared/typography\";\nimport type { SitePluginsConfig, PageDataSource, PageEditRestrictions } from \"../plugins/types\";\n\n// Re-export shared types for convenience\nexport type { ImageGridItem, ImageGridPreset } from \"../shared/imageGrid\";\nexport type { TypographyConfig } from \"../shared/typography\";\n\n/**\n * Tipos de blocos disponíveis\n */\nexport type BlockType =\n // Layout primitives\n | \"container\"\n | \"stack\"\n | \"grid\"\n | \"box\"\n | \"spacer\"\n // Conteúdo básico\n | \"heading\"\n | \"text\"\n | \"image\"\n | \"button\"\n | \"link\"\n | \"divider\"\n // Conteúdo avançado\n | \"badge\"\n | \"icon\"\n | \"avatar\"\n | \"video\"\n | \"socialLinks\"\n // Composição básica\n | \"card\"\n | \"section\"\n // Seções compostas (Landing Page)\n | \"hero\"\n | \"feature\"\n | \"featureGrid\"\n | \"pricing\"\n | \"pricingCard\"\n | \"testimonial\"\n | \"testimonialGrid\"\n | \"faq\"\n | \"faqItem\"\n | \"cta\"\n | \"stats\"\n | \"statItem\"\n | \"logoCloud\"\n | \"navbar\"\n | \"footer\"\n // Novos blocos reutilizáveis\n | \"countdown\"\n | \"carousel\"\n | \"blogCard\"\n | \"blogCardGrid\"\n | \"teamCard\"\n | \"teamGrid\"\n | \"courseCardGrid\"\n | \"categoryCardGrid\"\n // Blog plugin (dinâmico)\n | \"blogPostCard\"\n | \"blogPostGrid\"\n | \"blogPostDetail\"\n | \"blogCategoryFilter\"\n | \"blogSearchBar\"\n | \"blogRecentPosts\"\n | \"blogTagCloud\"\n // Seções avançadas\n | \"productShowcase\"\n | \"aboutSection\"\n | \"contactSection\"\n // Formulários\n | \"form\"\n | \"input\"\n | \"textarea\"\n | \"formSelect\";\n\n/**\n * Props base de um bloco\n */\nexport interface BlockBase {\n id: string;\n type: BlockType;\n}\n\n/**\n * Container - Define largura máxima e padding\n */\nexport interface ContainerBlock extends BlockBase {\n type: \"container\";\n props: {\n maxWidth?: string; // ex: '1200px', '100%'\n padding?: string; // ex: '1rem', '2rem'\n children?: Block[];\n };\n}\n\n/**\n * Stack - Layout flex (row/col) com gap\n */\nexport interface StackBlock extends BlockBase {\n type: \"stack\";\n props: {\n direction?: \"row\" | \"col\";\n gap?: string; // ex: '1rem', '2rem'\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n justify?: \"start\" | \"center\" | \"end\" | \"space-between\" | \"space-around\";\n wrap?: boolean;\n /** Sticky positioning (stays fixed while scrolling). Disabled on mobile. */\n sticky?: boolean;\n /** Top offset when sticky (ex: \"80px\" for below navbar). Default \"80px\". */\n stickyOffset?: string;\n children?: Block[];\n };\n}\n\n/**\n * Grid - Layout em grid responsivo\n */\nexport interface GridBlock extends BlockBase {\n type: \"grid\";\n props: {\n cols?: number | { sm?: number; md?: number; lg?: number };\n /** CSS grid-template-columns override (ex: \"1fr 320px\", \"2fr 1fr\"). Tem prioridade sobre cols. */\n colTemplate?: string;\n gap?: string;\n /** Max-width of the grid container (ex: \"1200px\"). Centers with auto margin. */\n maxWidth?: string;\n /** Horizontal padding (ex: \"2rem\"). Applied to the grid wrapper. */\n padding?: string;\n children?: Block[];\n };\n}\n\n/**\n * Box - Container genérico com estilos\n */\nexport interface BoxBlock extends BlockBase {\n type: \"box\";\n props: {\n bg?: string;\n border?: string;\n radius?: string;\n shadow?: string;\n padding?: string;\n children?: Block[];\n };\n}\n\n/**\n * Heading - Título (H1-H6)\n */\nexport interface HeadingBlock extends BlockBase {\n type: \"heading\";\n props: {\n level: 1 | 2 | 3 | 4 | 5 | 6;\n text: string;\n align?: \"left\" | \"center\" | \"right\";\n color?: string;\n };\n}\n\n/**\n * Text - Parágrafo de texto\n */\nexport interface TextBlock extends BlockBase {\n type: \"text\";\n props: {\n text: string;\n align?: \"left\" | \"center\" | \"right\";\n color?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n };\n}\n\n/**\n * Image - Imagem\n */\nexport interface ImageBlock extends BlockBase {\n type: \"image\";\n props: {\n src: string;\n alt?: string;\n width?: string;\n height?: string;\n objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n };\n}\n\n/**\n * Button - Botão\n */\nexport interface ButtonBlock extends BlockBase {\n type: \"button\";\n props: {\n text: string;\n href?: string;\n variant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\n size?: \"sm\" | \"md\" | \"lg\";\n // Hover effects (principal)\n /** Efeito de hover no botão */\n hoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n /** Intensidade do efeito (10-100) */\n hoverIntensity?: number;\n // Hover overlay (adicional - combina com o principal)\n /** Efeito visual adicional no hover */\n hoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n /** Nome do ícone para o efeito \"icon\" */\n hoverIconName?: string;\n };\n}\n\n/**\n * Link - Link\n */\nexport interface LinkBlock extends BlockBase {\n type: \"link\";\n props: {\n text: string;\n href: string;\n target?: \"_blank\" | \"_self\";\n // Hover effects\n /** Efeito de hover no link */\n hoverEffect?: \"none\" | \"background\" | \"underline\" | \"underline-center\" | \"scale\" | \"glow\";\n /** Intensidade do efeito (10-100) */\n hoverIntensity?: number;\n /** Cor do hover */\n hoverColor?: string;\n };\n}\n\n/**\n * Divider - Divisor horizontal\n */\nexport interface DividerBlock extends BlockBase {\n type: \"divider\";\n props: {\n color?: string;\n thickness?: string;\n };\n}\n\n/**\n * Card - Card com slots (header/content/footer)\n */\nexport interface CardBlock extends BlockBase {\n type: \"card\";\n props: {\n header?: Block[];\n content?: Block[];\n footer?: Block[];\n padding?: string;\n bg?: string;\n border?: string;\n radius?: string;\n shadow?: string;\n };\n}\n\n/**\n * Section - Seção container\n */\nexport interface SectionBlock extends BlockBase {\n type: \"section\";\n props: {\n id?: string;\n bg?: string;\n padding?: string;\n children?: Block[];\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS - LAYOUT AVANÇADO\n// ============================================================================\n\n/**\n * Spacer - Espaçador flexível\n */\nexport interface SpacerBlock extends BlockBase {\n type: \"spacer\";\n props: {\n height?: string;\n responsive?: { sm?: string; md?: string; lg?: string };\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS - CONTEÚDO AVANÇADO\n// ============================================================================\n\n/**\n * Badge - Tag/badge com variantes\n */\nexport interface BadgeBlock extends BlockBase {\n type: \"badge\";\n props: {\n text: string;\n variant?:\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n size?: \"sm\" | \"md\" | \"lg\";\n };\n}\n\n/**\n * Icon - Ícone SVG\n */\nexport interface IconBlock extends BlockBase {\n type: \"icon\";\n props: {\n name: string; // nome do ícone (ex: 'check', 'star', 'arrow-right')\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n color?: string;\n };\n}\n\n/**\n * Avatar - Imagem circular com fallback\n */\nexport interface AvatarBlock extends BlockBase {\n type: \"avatar\";\n props: {\n src?: string;\n alt?: string;\n name?: string; // Para gerar iniciais se não houver imagem\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n };\n}\n\n/**\n * Video - Embed de vídeo\n */\nexport interface VideoBlock extends BlockBase {\n type: \"video\";\n props: {\n src: string; // URL do YouTube, Vimeo ou MP4\n poster?: string;\n autoplay?: boolean;\n controls?: boolean;\n aspectRatio?: \"16:9\" | \"4:3\" | \"1:1\" | \"9:16\";\n };\n}\n\n/**\n * SocialLinks - Links de redes sociais\n */\nexport interface SocialLinksBlock extends BlockBase {\n type: \"socialLinks\";\n props: {\n links: Array<{\n platform:\n | \"facebook\"\n | \"twitter\"\n | \"instagram\"\n | \"linkedin\"\n | \"youtube\"\n | \"tiktok\"\n | \"github\"\n | \"whatsapp\";\n url: string;\n }>;\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"default\" | \"filled\" | \"outline\";\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS - SEÇÕES COMPOSTAS\n// ============================================================================\n\n/**\n * Hero - Seção hero completa\n */\nexport type HeroVariationId =\n | \"hero-split\"\n | \"hero-parallax\"\n | \"hero-overlay\"\n | \"hero-gradient\"\n | \"hero-minimal\"\n | \"hero-card\"\n | \"hero-carousel\";\n\nexport interface HeroBlock extends BlockBase {\n type: \"hero\";\n props: {\n variation?: HeroVariationId;\n variant?: \"centered\" | \"split\" | \"image-bg\" | \"video-bg\";\n title: string;\n subtitle?: string;\n description?: string;\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n image?: string;\n video?: string;\n badge?: string;\n align?: \"left\" | \"center\" | \"right\";\n /** Posição horizontal do container de conteúdo no layout */\n contentPosition?: \"left\" | \"center\" | \"right\";\n /** Espaçamento entre elementos do conteúdo (título, subtítulo, descrição, botões) */\n contentSpacing?: \"compact\" | \"default\" | \"spacious\";\n /** Distância entre o bloco de conteúdo e o bloco de imagem (layouts divididos) */\n blockGap?: \"default\" | \"wide\" | \"x-wide\";\n minHeight?: string;\n overlay?: boolean;\n /** Cor/gradiente do overlay (ex.: linear-gradient). Se omitido, usa fallback do CSS. */\n overlayColor?: string;\n /** Cor ou gradiente no layout split (lado do conteúdo). */\n background?: string;\n\n // === Typography Colors (legacy - mantido para retrocompatibilidade) ===\n /** Cor do título */\n titleColor?: string;\n /** Cor do subtítulo */\n subtitleColor?: string;\n /** Cor da descrição */\n descriptionColor?: string;\n\n // === Typography Config (novo sistema completo) ===\n /** Configuração completa de tipografia do título */\n titleTypography?: TypographyConfig;\n /** Configuração completa de tipografia do subtítulo */\n subtitleTypography?: TypographyConfig;\n /** Configuração completa de tipografia da descrição */\n descriptionTypography?: TypographyConfig;\n\n // === Badge Styling ===\n /** Cor de fundo do badge */\n badgeColor?: string;\n /** Cor do texto do badge */\n badgeTextColor?: string;\n\n // === Layout & Spacing ===\n /** Largura máxima do conteúdo */\n contentMaxWidth?: string;\n /** Espaçamento interno vertical */\n paddingY?: string;\n\n // === Image Styling ===\n /** Border radius da imagem (px) */\n imageRadius?: number;\n /** Sombra da imagem */\n imageShadow?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Posição da imagem no split */\n imagePosition?: \"left\" | \"right\";\n\n // === Button Size ===\n /** Tamanho dos botões */\n buttonSize?: \"sm\" | \"md\" | \"lg\";\n\n // === Primary Button Styling ===\n /** Variante do botão primário */\n primaryButtonVariant?: \"solid\" | \"outline\" | \"ghost\";\n /** Cor do botão primário */\n primaryButtonColor?: string;\n /** Cor do texto do botão primário */\n primaryButtonTextColor?: string;\n /** Border radius do botão primário */\n primaryButtonRadius?: number;\n\n // === Secondary Button Styling ===\n /** Variante do botão secundário */\n secondaryButtonVariant?: \"solid\" | \"outline\" | \"ghost\";\n /** Cor do botão secundário */\n secondaryButtonColor?: string;\n /** Cor do texto do botão secundário */\n secondaryButtonTextColor?: string;\n /** Border radius do botão secundário */\n secondaryButtonRadius?: number;\n\n // === Button Hover Effects (principal) ===\n /** Efeito de hover nos botões */\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n /** Intensidade do efeito (10-100) */\n buttonHoverIntensity?: number;\n\n // === Button Hover Overlay (adicional) ===\n /** Efeito visual adicional nos botões */\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n /** Nome do ícone para o efeito \"icon\" */\n buttonHoverIconName?: string;\n\n // === Decorative Elements ===\n /** Mostrar elemento decorativo de onda no fundo */\n showWave?: boolean;\n /** Cor da onda decorativa */\n waveColor?: string;\n\n // === Image Grid System ===\n /** Habilita grid de imagens no lugar da imagem única (split layout) */\n imageGridEnabled?: boolean;\n /** Preset de layout da grid */\n imageGridPreset?: ImageGridPreset;\n /** Array de imagens da grid (até 4) */\n imageGridImages?: ImageGridItem[];\n /** Espaçamento entre imagens em pixels */\n imageGridGap?: number;\n\n // === Carousel System ===\n /** Array de imagens do carrossel de fundo */\n carouselImages?: string[];\n /** Intervalo entre slides em segundos */\n carouselInterval?: number;\n /** Tipo de transição do carrossel */\n carouselTransition?: \"crossfade\" | \"slide\";\n };\n}\n\n/**\n * Feature - Card de feature individual\n */\nexport interface FeatureBlock extends BlockBase {\n type: \"feature\";\n props: {\n icon?: string;\n title: string;\n description: string;\n link?: { text: string; href: string };\n };\n}\n\n/**\n * FeatureGrid - Grid de features\n */\nexport interface FeatureGridBlock extends BlockBase {\n type: \"featureGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n variant?: \"default\" | \"cards\" | \"image-cards\";\n features: Array<{\n icon?: string;\n title: string;\n description: string;\n image?: string;\n link?: { text: string; href?: string };\n }>;\n };\n}\n\n/**\n * PricingCard - Card de preço individual\n */\nexport interface PricingCardBlock extends BlockBase {\n type: \"pricingCard\";\n props: {\n name: string;\n price: string;\n period?: string;\n description?: string;\n features: string[];\n buttonText?: string;\n buttonHref?: string;\n highlighted?: boolean;\n badge?: string;\n };\n}\n\n/**\n * Pricing - Seção de preços completa\n */\nexport interface PricingBlock extends BlockBase {\n type: \"pricing\";\n props: {\n title?: string;\n subtitle?: string;\n plans: Array<{\n name: string;\n price: string;\n period?: string;\n description?: string;\n features: string[];\n buttonText?: string;\n buttonHref?: string;\n highlighted?: boolean;\n badge?: string;\n }>;\n };\n}\n\n/**\n * Testimonial - Card de depoimento individual\n */\nexport interface TestimonialBlock extends BlockBase {\n type: \"testimonial\";\n props: {\n quote: string;\n authorName: string;\n authorRole?: string;\n authorCompany?: string;\n authorAvatar?: string;\n rating?: number; // 1-5 estrelas\n };\n}\n\n/**\n * TestimonialGrid - Grid de depoimentos\n */\nexport interface TestimonialGridBlock extends BlockBase {\n type: \"testimonialGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n testimonials: Array<{\n quote: string;\n authorName: string;\n authorRole?: string;\n authorCompany?: string;\n authorAvatar?: string;\n rating?: number;\n }>;\n };\n}\n\n/**\n * FaqItem - Item individual do FAQ\n */\nexport interface FaqItemBlock extends BlockBase {\n type: \"faqItem\";\n props: {\n question: string;\n answer: string;\n defaultOpen?: boolean;\n };\n}\n\n/**\n * Faq - Seção FAQ completa (accordion)\n */\nexport interface FaqBlock extends BlockBase {\n type: \"faq\";\n props: {\n title?: string;\n subtitle?: string;\n items: Array<{\n question: string;\n answer: string;\n }>;\n };\n}\n\n/**\n * CTA - Seção Call-to-Action\n */\nexport interface CtaBlock extends BlockBase {\n type: \"cta\";\n props: {\n title: string;\n description?: string;\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n variant?: \"default\" | \"centered\" | \"split\" | \"gradient\";\n bg?: string;\n // Button Size\n /** Tamanho dos botões */\n buttonSize?: \"sm\" | \"md\" | \"lg\";\n // Button Hover Effects (principal)\n /** Efeito de hover nos botões */\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n /** Intensidade do efeito (10-100) */\n buttonHoverIntensity?: number;\n // Button Hover Overlay (adicional)\n /** Efeito visual adicional nos botões */\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n /** Nome do ícone para o efeito \"icon\" */\n buttonHoverIconName?: string;\n };\n}\n\n/**\n * StatItem - Item individual de estatística\n */\nexport interface StatItemBlock extends BlockBase {\n type: \"statItem\";\n props: {\n value: string;\n label: string;\n prefix?: string;\n suffix?: string;\n };\n}\n\n/**\n * Stats - Seção de estatísticas\n */\nexport interface StatsBlock extends BlockBase {\n type: \"stats\";\n props: {\n title?: string;\n subtitle?: string;\n items: Array<{\n value: string;\n label: string;\n prefix?: string;\n suffix?: string;\n }>;\n };\n}\n\n/**\n * LogoCloud - Grid de logos\n */\nexport interface LogoCloudBlock extends BlockBase {\n type: \"logoCloud\";\n props: {\n title?: string;\n logos: Array<{\n src: string;\n alt: string;\n href?: string;\n }>;\n grayscale?: boolean;\n };\n}\n\n/**\n * Link da Navbar - pode ser um link simples ou ter um dropdown com subitems\n */\nexport type NavbarLink = {\n text: string;\n href?: string;\n dropdown?: Array<{ text: string; href: string }>;\n};\n\n/**\n * IDs das variações visuais do bloco Navbar\n */\nexport type NavbarVariationId =\n | \"navbar-simples\"\n | \"navbar-moderno\"\n | \"navbar-glass\"\n | \"navbar-elegante\"\n | \"navbar-pill\";\n\n/**\n * Navbar - Barra de navegação\n */\nexport interface NavbarBlock extends BlockBase {\n type: \"navbar\";\n props: {\n variation?: NavbarVariationId;\n /** URL da imagem do logo ou objeto com src, alt e href */\n logo?: string | { src: string; alt?: string; href?: string };\n logoText?: string;\n links: Array<NavbarLink>;\n ctaButton?: { text: string; href?: string };\n sticky?: boolean;\n /** Cor de fundo customizada (suporta gradientes) */\n bg?: string;\n\n // Layout Options\n /** Distribuição do navbar: expandido, centralizado ou compacto */\n layout?: \"expanded\" | \"centered\" | \"compact\";\n /** Modo flutuante: navbar com margem lateral e mais destaque */\n floating?: boolean;\n\n // Visual Customization\n /** Border radius em pixels (0-24) */\n borderRadius?: number;\n /** Sombra do navbar */\n shadow?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Opacidade do navbar (0-100) */\n opacity?: number;\n /** Intensidade do desfoque/blur (0-100) para efeito de vidro fosco */\n blurOpacity?: number;\n /** Altura do logo em pixels (30-120) */\n logoHeight?: number;\n /** Posição da borda: nenhuma, completa, superior, inferior, esquerda, direita */\n borderPosition?: \"none\" | \"all\" | \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Espessura da borda em pixels (1-4) */\n borderWidth?: number;\n /** Cor da borda */\n borderColor?: string;\n\n // Link Styling\n /** Cor dos links */\n linkColor?: string;\n /** Cor dos links no hover */\n linkHoverColor?: string;\n /** Tamanho da fonte dos links */\n linkFontSize?: \"sm\" | \"md\" | \"lg\";\n /** Efeito de hover nos links */\n linkHoverEffect?: \"background\" | \"underline\" | \"underline-center\" | \"slide-bg\" | \"scale\" | \"glow\";\n /** Intensidade do efeito de hover nos links (0-100) */\n linkHoverIntensity?: number;\n\n // Button/CTA Styling\n /** Variante do botão CTA */\n buttonVariant?: \"solid\" | \"outline\" | \"ghost\";\n /** Tamanho do botão CTA */\n buttonSize?: \"sm\" | \"md\" | \"lg\";\n /** Cor do botão CTA */\n buttonColor?: string;\n /** Cor do texto do botão CTA */\n buttonTextColor?: string;\n /** Border radius do botão em pixels (0-24) */\n buttonBorderRadius?: number;\n /** Efeito de hover no botão CTA */\n buttonHoverEffect?: \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n /** Intensidade do efeito de hover no botão (0-100) */\n buttonHoverIntensity?: number;\n /** Efeito visual adicional no botão CTA */\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n /** Nome do ícone para o efeito \"icon\" */\n buttonHoverIconName?: string;\n };\n}\n\n/**\n * Footer - Rodapé do site\n */\nexport interface FooterBlock extends BlockBase {\n type: \"footer\";\n props: {\n logo?: string | { src: string; alt?: string };\n logoText?: string;\n description?: string;\n columns?: Array<{\n title: string;\n links: Array<{\n text: string;\n href: string;\n }>;\n }>;\n social?: Array<{\n platform: string;\n href: string;\n }>;\n copyright?: string;\n variant?: \"simple\" | \"multi-column\";\n // Link Hover Effects\n /** Efeito de hover nos links */\n linkHoverEffect?: \"none\" | \"background\" | \"underline\" | \"underline-center\" | \"scale\" | \"glow\";\n /** Intensidade do efeito (10-100) */\n linkHoverIntensity?: number;\n /** Cor do link no hover */\n linkHoverColor?: string;\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS REUTILIZÁVEIS\n// ============================================================================\n\n/**\n * Countdown - Contador regressivo (eventos, matrículas, promoções)\n */\nexport interface CountdownBlock extends BlockBase {\n type: \"countdown\";\n props: {\n title?: string;\n description?: string;\n /** Data final em ISO string para cálculo real */\n endDate?: string;\n /** Exibir labels Days/Hours/Minutes/Seconds com valores 00 quando sem endDate */\n showPlaceholders?: boolean;\n buttonText?: string;\n buttonHref?: string;\n variant?: \"default\" | \"banner\";\n /** Texto no círculo decorativo (ex.: \"Admission on Going\") */\n badgeText?: string;\n bg?: string;\n };\n}\n\n/**\n * Carousel - Slider de slides (programas, destaques, depoimentos)\n */\nexport interface CarouselBlock extends BlockBase {\n type: \"carousel\";\n props: {\n slides: Array<{\n image?: string;\n title?: string;\n description?: string;\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n }>;\n autoplay?: boolean;\n showArrows?: boolean;\n showDots?: boolean;\n };\n}\n\n/**\n * BlogCard - Card de post/notícia individual\n */\nexport interface BlogCardBlock extends BlockBase {\n type: \"blogCard\";\n props: {\n image?: string;\n date?: string;\n category?: string;\n title: string;\n excerpt?: string;\n linkText?: string;\n linkHref?: string;\n };\n}\n\n/**\n * BlogCardGrid - Grid de cards de blog/notícias\n */\nexport interface BlogCardGridBlock extends BlockBase {\n type: \"blogCardGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n cards: Array<{\n image?: string;\n date?: string;\n category?: string;\n title: string;\n excerpt?: string;\n linkText?: string;\n linkHref?: string;\n }>;\n };\n}\n\n/**\n * TeamCard - Card de membro da equipe/professor\n */\nexport interface TeamCardBlock extends BlockBase {\n type: \"teamCard\";\n props: {\n avatar?: string;\n name: string;\n role?: string;\n };\n}\n\n/**\n * TeamGrid - Grid de membros da equipe\n */\nexport interface TeamGridBlock extends BlockBase {\n type: \"teamGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n members: Array<{\n avatar?: string;\n name: string;\n role?: string;\n }>;\n };\n}\n\n/**\n * CourseCardGrid - Grid de cards de curso (thumbnail, título, preço, rating, View Course)\n */\nexport interface CourseCardGridBlock extends BlockBase {\n type: \"courseCardGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n cards: Array<{\n image?: string;\n title: string;\n price?: string;\n period?: string;\n rating?: number;\n meta?: string[];\n buttonText?: string;\n buttonHref?: string;\n }>;\n };\n}\n\n/**\n * CategoryCardGrid - Grid de categorias (imagem de fundo + título overlay + link)\n */\nexport interface CategoryCardGridBlock extends BlockBase {\n type: \"categoryCardGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n categories: Array<{\n image: string;\n title: string;\n href?: string;\n }>;\n };\n}\n\n// ============================================================================\n// BLOCOS DE PLUGIN - BLOG (dinâmico, conectado a ContentProvider)\n// ============================================================================\n\n/**\n * BlogPostCard - Card individual de post (versão dinâmica do blogCard)\n * Pode receber dados de ContentProvider ou ter conteúdo estático\n */\nexport interface BlogPostCardBlock extends BlockBase {\n type: \"blogPostCard\";\n props: {\n title: string;\n excerpt?: string;\n image?: string;\n date?: string;\n category?: string;\n authorName?: string;\n authorAvatar?: string;\n readingTime?: string;\n linkHref?: string;\n linkText?: string;\n variant?: \"default\" | \"horizontal\" | \"minimal\";\n showImage?: boolean;\n showCategory?: boolean;\n showDate?: boolean;\n showAuthor?: boolean;\n showReadingTime?: boolean;\n };\n}\n\n/**\n * BlogPostGrid - Grid de posts com suporte a dados dinâmicos\n * Pode usar dataSource para buscar do ContentProvider ou cards estáticos\n */\nexport interface BlogPostGridBlock extends BlockBase {\n type: \"blogPostGrid\";\n props: {\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n /** Cards estáticos (quando não há dataSource) */\n cards?: Array<{\n title: string;\n excerpt?: string;\n image?: string;\n date?: string;\n category?: string;\n authorName?: string;\n linkHref?: string;\n linkText?: string;\n }>;\n /** Fonte de dados dinâmica (ContentProvider) */\n dataSource?: {\n provider: string;\n limit?: number;\n filter?: Record<string, unknown>;\n };\n variant?: \"default\" | \"featured\" | \"minimal\";\n showViewAll?: boolean;\n viewAllText?: string;\n viewAllHref?: string;\n /** Pagination — set by content hydration, not user-editable */\n currentPage?: number;\n totalPages?: number;\n paginationBaseUrl?: string;\n };\n}\n\n/**\n * BlogPostDetail - Conteúdo completo de um post (para página blog/:slug)\n * Recebe dados do ContentProvider na página dinâmica\n */\nexport interface BlogPostDetailBlock extends BlockBase {\n type: \"blogPostDetail\";\n props: {\n title: string;\n content: string;\n featuredImage?: string;\n date?: string;\n category?: string;\n /** Variante visual do bloco autor: \"inline\" | \"card\" | \"minimal\" */\n authorVariant?: \"inline\" | \"card\" | \"minimal\";\n readingTime?: string;\n tags?: string[];\n showFeaturedImage?: boolean;\n showAuthor?: boolean;\n showDate?: boolean;\n showTags?: boolean;\n showReadingTime?: boolean;\n contentMaxWidth?: string;\n /** Nome do autor (populado pela hydration, editável no admin) */\n authorName?: string;\n /** Avatar URL do autor */\n authorAvatar?: string;\n /** Bio curta do autor */\n authorBio?: string;\n // SEO fields (populated by ContentProvider, readOnly in editor)\n metaTitle?: string;\n metaDescription?: string;\n ogImage?: string;\n };\n}\n\n/**\n * BlogCategoryFilter - Filtro de categorias para listagem do blog\n * Dados populados pelo ContentProvider (categories extraídas dos posts)\n */\nexport interface BlogCategoryFilterBlock extends BlockBase {\n type: \"blogCategoryFilter\";\n props: {\n title?: string;\n categories: Array<{ name: string; slug: string; count?: number; image?: string }>;\n variant: \"chips\" | \"buttons\" | \"list\";\n showCount?: boolean;\n showAll?: boolean;\n allLabel?: string;\n activeCategory?: string;\n filterUrl?: string;\n };\n}\n\n/**\n * BlogSearchBar - Barra de busca para o blog\n * Envia busca via form action para URL configurável\n */\nexport interface BlogSearchBarBlock extends BlockBase {\n type: \"blogSearchBar\";\n props: {\n placeholder?: string;\n variant: \"simple\" | \"expanded\" | \"with-filters\";\n showIcon?: boolean;\n searchUrl?: string;\n filterCategories?: boolean;\n filterTags?: boolean;\n filterDate?: boolean;\n };\n}\n\n/**\n * BlogRecentPosts - Widget com os posts mais recentes do blog\n */\nexport interface BlogRecentPostsBlock extends BlockBase {\n type: \"blogRecentPosts\";\n props: {\n /** Título do widget (ex: \"Posts Recentes\") */\n title?: string;\n /** Quantidade de posts a exibir */\n count?: number;\n /** Posts hidratados pela contentHydration */\n posts?: Array<{\n title: string;\n slug: string;\n date?: string;\n image?: string;\n category?: string;\n }>;\n /** Mostrar miniatura */\n showThumbnail?: boolean;\n /** Mostrar data */\n showDate?: boolean;\n /** Mostrar badge de categoria */\n showCategory?: boolean;\n };\n}\n\n/**\n * BlogTagCloud - Widget com nuvem de tags do blog\n */\nexport interface BlogTagCloudBlock extends BlockBase {\n type: \"blogTagCloud\";\n props: {\n /** Título do widget (ex: \"Tags\") */\n title?: string;\n /** Tags hidratadas pela contentHydration — array de {name, count} */\n tags?: Array<{ name: string; count: number }>;\n /** Estilo: \"badges\" | \"list\" */\n variant?: \"badges\" | \"list\";\n };\n}\n\n// ============================================================================\n// SEÇÕES AVANÇADAS\n// ============================================================================\n\n/**\n * ProductShowcase - Seção de produtos com layout alternado\n */\nexport interface ProductShowcaseBlock extends BlockBase {\n type: \"productShowcase\";\n props: {\n title?: string;\n subtitle?: string;\n products: Array<{\n image?: string;\n icon?: string;\n badge?: string;\n name: string;\n description: string;\n longDescription?: string;\n features?: string[];\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n }>;\n variant?: \"alternating\" | \"grid\" | \"stacked\";\n bg?: string;\n // Button Hover Effects\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n buttonHoverIntensity?: number;\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n buttonHoverIconName?: string;\n };\n}\n\n/**\n * AboutSection - Seção sobre com imagem decorativa + texto + achievements\n */\nexport interface AboutSectionBlock extends BlockBase {\n type: \"aboutSection\";\n props: {\n title?: string;\n subtitle?: string;\n description?: string;\n secondaryDescription?: string;\n image?: string;\n achievements?: Array<{\n text: string;\n }>;\n primaryButton?: { text: string; href?: string };\n variant?: \"image-left\" | \"image-right\" | \"centered\";\n bg?: string;\n stats?: Array<{\n value: string;\n label: string;\n }>;\n // Button Hover Effects\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n buttonHoverIntensity?: number;\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n buttonHoverIconName?: string;\n };\n}\n\n/**\n * ContactSection - Seção de contato com info cards + formulário\n */\nexport interface ContactSectionBlock extends BlockBase {\n type: \"contactSection\";\n props: {\n title?: string;\n subtitle?: string;\n description?: string;\n contactInfo?: Array<{\n icon?: string;\n label: string;\n value: string;\n }>;\n formTitle?: string;\n formFields?: Array<{\n name: string;\n label: string;\n type: \"text\" | \"email\" | \"tel\" | \"textarea\";\n placeholder?: string;\n required?: boolean;\n }>;\n submitText?: string;\n variant?: \"split\" | \"stacked\" | \"form-only\";\n bg?: string;\n // Button Hover Effects\n buttonHoverEffect?: \"none\" | \"darken\" | \"lighten\" | \"scale\" | \"glow\" | \"shadow\" | \"pulse\";\n buttonHoverIntensity?: number;\n buttonHoverOverlay?: \"none\" | \"shine\" | \"fill\" | \"bounce\" | \"icon\" | \"border-glow\";\n buttonHoverIconName?: string;\n };\n}\n\n// ============================================================================\n// NOVOS BLOCOS - FORMULÁRIOS\n// ============================================================================\n\n/**\n * Form - Container de formulário\n */\nexport interface FormBlock extends BlockBase {\n type: \"form\";\n props: {\n action?: string;\n method?: \"get\" | \"post\";\n children?: Block[];\n submitText?: string;\n };\n}\n\n/**\n * Input - Campo de entrada\n */\nexport interface InputBlock extends BlockBase {\n type: \"input\";\n props: {\n name: string;\n label?: string;\n placeholder?: string;\n type?: \"text\" | \"email\" | \"password\" | \"tel\" | \"url\" | \"number\";\n required?: boolean;\n };\n}\n\n/**\n * Textarea - Campo de texto longo\n */\nexport interface TextareaBlock extends BlockBase {\n type: \"textarea\";\n props: {\n name: string;\n label?: string;\n placeholder?: string;\n rows?: number;\n required?: boolean;\n };\n}\n\n/**\n * FormSelect - Dropdown de formulário\n */\nexport interface FormSelectBlock extends BlockBase {\n type: \"formSelect\";\n props: {\n name: string;\n label?: string;\n placeholder?: string;\n options: Array<{ value: string; label: string }>;\n required?: boolean;\n };\n}\n\n// ============================================================================\n// UNION TYPE DE TODOS OS BLOCOS\n// ============================================================================\n\n/**\n * Union type de todos os blocos\n */\nexport type Block =\n // Layout\n | ContainerBlock\n | StackBlock\n | GridBlock\n | BoxBlock\n | SpacerBlock\n // Conteúdo básico\n | HeadingBlock\n | TextBlock\n | ImageBlock\n | ButtonBlock\n | LinkBlock\n | DividerBlock\n // Conteúdo avançado\n | BadgeBlock\n | IconBlock\n | AvatarBlock\n | VideoBlock\n | SocialLinksBlock\n // Composição básica\n | CardBlock\n | SectionBlock\n // Seções compostas\n | HeroBlock\n | FeatureBlock\n | FeatureGridBlock\n | PricingBlock\n | PricingCardBlock\n | TestimonialBlock\n | TestimonialGridBlock\n | FaqBlock\n | FaqItemBlock\n | CtaBlock\n | StatsBlock\n | StatItemBlock\n | LogoCloudBlock\n | NavbarBlock\n | FooterBlock\n // Novos blocos reutilizáveis\n | CountdownBlock\n | CarouselBlock\n | BlogCardBlock\n | BlogCardGridBlock\n | TeamCardBlock\n | TeamGridBlock\n | CourseCardGridBlock\n | CategoryCardGridBlock\n // Blog plugin (dinâmico)\n | BlogPostCardBlock\n | BlogPostGridBlock\n | BlogPostDetailBlock\n | BlogCategoryFilterBlock\n | BlogSearchBarBlock\n | BlogRecentPostsBlock\n | BlogTagCloudBlock\n // Seções avançadas\n | ProductShowcaseBlock\n | AboutSectionBlock\n | ContactSectionBlock\n // Formulários\n | FormBlock\n | InputBlock\n | TextareaBlock\n | FormSelectBlock;\n\n/**\n * Utility type: extract the block interface for a given BlockType\n */\nexport type BlockOfType<T extends BlockType> = Extract<Block, { type: T }>;\n\n/**\n * Utility type: extract the props type for a given BlockType\n */\nexport type BlockPropsFor<T extends BlockType> = BlockOfType<T>[\"props\"];\n\n/**\n * SEO configuration for a page\n */\nexport interface PageSeoConfig {\n metaTitle?: string;\n metaDescription?: string;\n ogImage?: string;\n ogType?: string;\n canonicalUrl?: string;\n noIndex?: boolean;\n}\n\n/**\n * Global site metadata for SEO\n */\nexport interface SiteMetadata {\n siteName?: string;\n defaultOgImage?: string;\n language?: string;\n}\n\n/**\n * Página do site\n */\nexport interface SitePage {\n id: string;\n name: string;\n slug: string;\n structure: Block[]; // Árvore de blocos\n /** ID do plugin que criou esta página (se for uma página de plugin) */\n pluginId?: string;\n /** ID do template de página do plugin */\n pageTemplateId?: string;\n /** Página dinâmica com dados de backend (ex.: blog/:slug) */\n isDynamic?: boolean;\n /** Configuração de dados dinâmicos (provider, modo, mapeamento) */\n dataSource?: PageDataSource;\n /** Restrições de edição impostas pelo plugin */\n editRestrictions?: PageEditRestrictions;\n /** SEO configuration for this page */\n seo?: PageSeoConfig;\n}\n\n/**\n * Coleções de conteúdo (testimonials, faq, posts, etc)\n */\nexport interface ContentCollection {\n id: string;\n type: \"testimonials\" | \"faq\" | \"posts\" | \"services\" | \"team\" | \"custom\";\n items: Array<Record<string, any>>;\n}\n\n/**\n * Documento completo do site\n */\nexport interface SiteDocument {\n schemaVersion: 2;\n theme: ThemeTokens;\n content?: {\n collections?: ContentCollection[];\n };\n pages: SitePage[];\n /** Configuração de plugins ativos e suas opções */\n plugins?: SitePluginsConfig;\n /** Global site metadata for SEO */\n metadata?: SiteMetadata;\n}\n\n/**\n * Helper para criar um documento vazio\n */\nexport function createEmptySiteDocument(\n _name: string = \"Novo Site\",\n): SiteDocument {\n return {\n schemaVersion: 2,\n theme: {\n colors: {\n bg: \"#ffffff\",\n surface: \"#f9fafb\",\n border: \"#e5e7eb\",\n text: \"#1f2937\",\n mutedText: \"#6b7280\",\n primary: \"#3b82f6\",\n primaryText: \"#ffffff\",\n secondary: \"#6b7280\",\n accent: \"#8b5cf6\",\n ring: \"#3b82f6\",\n },\n radiusScale: \"md\",\n shadowScale: \"soft\",\n spacingScale: \"normal\",\n motion: \"subtle\",\n backgroundStyle: \"flat\",\n typography: {\n fontFamily: {\n heading: \"system-ui, -apple-system, sans-serif\",\n body: \"system-ui, -apple-system, sans-serif\",\n },\n baseSize: \"16px\",\n headingScale: {\n h1: \"2.5rem\",\n h2: \"2rem\",\n h3: \"1.75rem\",\n h4: \"1.5rem\",\n h5: \"1.25rem\",\n h6: \"1rem\",\n },\n },\n },\n pages: [\n {\n id: \"home\",\n name: \"Home\",\n slug: \"home\",\n structure: [],\n },\n ],\n };\n}\n"],"names":["createEmptySiteDocument","_name"],"mappings":"AAk9CO,SAASA,EACdC,IAAgB,aACF;AACd,SAAO;AAAA,IACL,eAAe;AAAA,IACf,OAAO;AAAA,MACL,QAAQ;AAAA,QACN,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,WAAW;AAAA,QACX,SAAS;AAAA,QACT,aAAa;AAAA,QACb,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,MAAM;AAAA,MAAA;AAAA,MAER,aAAa;AAAA,MACb,aAAa;AAAA,MACb,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,YAAY;AAAA,QACV,YAAY;AAAA,UACV,SAAS;AAAA,UACT,MAAM;AAAA,QAAA;AAAA,QAER,UAAU;AAAA,QACV,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QAAA;AAAA,MACN;AAAA,IACF;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,CAAA;AAAA,MAAC;AAAA,IACd;AAAA,EACF;AAEJ;"}
|