@brunoalz/smartgesti-site-editor 1.4.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/editor/BlockSelector.js +4 -2
  2. package/dist/editor/BlockSelector.js.map +1 -1
  3. package/dist/engine/export/exporters/layout/GridExporter.d.ts.map +1 -1
  4. package/dist/engine/export/exporters/layout/GridExporter.js +29 -12
  5. package/dist/engine/export/exporters/layout/GridExporter.js.map +1 -1
  6. package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts +2 -0
  7. package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts.map +1 -1
  8. package/dist/engine/export/exporters/sections/BlogPostExporters.js +183 -119
  9. package/dist/engine/export/exporters/sections/BlogPostExporters.js.map +1 -1
  10. package/dist/engine/export/exporters/sections/index.d.ts.map +1 -1
  11. package/dist/engine/export/exporters/sections/index.js +26 -24
  12. package/dist/engine/export/exporters/sections/index.js.map +1 -1
  13. package/dist/engine/index.js +97 -95
  14. package/dist/engine/index.js.map +1 -1
  15. package/dist/engine/plugins/builtin/blog/manifest.d.ts.map +1 -1
  16. package/dist/engine/plugins/builtin/blog/manifest.js +160 -72
  17. package/dist/engine/plugins/builtin/blog/manifest.js.map +1 -1
  18. package/dist/engine/plugins/contentHydration.js +144 -68
  19. package/dist/engine/plugins/contentHydration.js.map +1 -1
  20. package/dist/engine/registry/blocks/layout/grid.d.ts.map +1 -1
  21. package/dist/engine/registry/blocks/layout/grid.js +10 -4
  22. package/dist/engine/registry/blocks/layout/grid.js.map +1 -1
  23. package/dist/engine/registry/blocks/sections/blogRecentPosts.d.ts +3 -0
  24. package/dist/engine/registry/blocks/sections/blogRecentPosts.d.ts.map +1 -0
  25. package/dist/engine/registry/blocks/sections/blogRecentPosts.js +29 -0
  26. package/dist/engine/registry/blocks/sections/blogRecentPosts.js.map +1 -0
  27. package/dist/engine/registry/blocks/sections/blogTagCloud.d.ts +3 -0
  28. package/dist/engine/registry/blocks/sections/blogTagCloud.d.ts.map +1 -0
  29. package/dist/engine/registry/blocks/sections/blogTagCloud.js +31 -0
  30. package/dist/engine/registry/blocks/sections/blogTagCloud.js.map +1 -0
  31. package/dist/engine/registry/blocks/sections/index.d.ts +2 -0
  32. package/dist/engine/registry/blocks/sections/index.d.ts.map +1 -1
  33. package/dist/engine/render/renderers/layout/GridRenderer.d.ts.map +1 -1
  34. package/dist/engine/render/renderers/layout/GridRenderer.js +21 -18
  35. package/dist/engine/render/renderers/layout/GridRenderer.js.map +1 -1
  36. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.d.ts.map +1 -1
  37. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js +66 -47
  38. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js.map +1 -1
  39. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.d.ts.map +1 -1
  40. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js +175 -32
  41. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js.map +1 -1
  42. package/dist/engine/render/renderers/sections/BlogRecentPostsRenderer.d.ts +3 -0
  43. package/dist/engine/render/renderers/sections/BlogRecentPostsRenderer.d.ts.map +1 -0
  44. package/dist/engine/render/renderers/sections/BlogRecentPostsRenderer.js +148 -0
  45. package/dist/engine/render/renderers/sections/BlogRecentPostsRenderer.js.map +1 -0
  46. package/dist/engine/render/renderers/sections/BlogTagCloudRenderer.d.ts +3 -0
  47. package/dist/engine/render/renderers/sections/BlogTagCloudRenderer.d.ts.map +1 -0
  48. package/dist/engine/render/renderers/sections/BlogTagCloudRenderer.js +134 -0
  49. package/dist/engine/render/renderers/sections/BlogTagCloudRenderer.js.map +1 -0
  50. package/dist/engine/render/renderers/sections/index.js +20 -16
  51. package/dist/engine/render/renderers/sections/index.js.map +1 -1
  52. package/dist/engine/schema/siteDocument.d.ts +57 -2
  53. package/dist/engine/schema/siteDocument.d.ts.map +1 -1
  54. package/dist/engine/schema/siteDocument.js.map +1 -1
  55. package/dist/index.d.ts +1 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +108 -106
  58. package/dist/index.js.map +1 -1
  59. package/dist/viewer/LandingPageViewer.js +11 -11
  60. package/dist/viewer/LandingPageViewer.js.map +1 -1
  61. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BlogPostGridRenderer.js","sources":["../../../../../src/engine/render/renderers/sections/BlogPostGridRenderer.tsx"],"sourcesContent":["/**\n * BlogPostGrid Renderer\n * Renderiza grid de cards de blog posts com título, subtítulo e link \"ver todos\"\n */\n\nimport React from \"react\";\nimport { renderBlogPostCard } from \"./BlogPostCardRenderer\";\n\nexport function renderBlogPostGrid(block: any): React.ReactNode {\n const {\n title,\n subtitle,\n columns = 3,\n cards = [],\n variant = \"default\",\n showViewAll = false,\n viewAllText = \"Ver todos\",\n viewAllHref = \"#\",\n } = block.props;\n\n return (\n <section\n key={block.id}\n style={{\n padding: \"var(--sg-section-padding-md)\",\n backgroundColor: \"var(--sg-bg)\",\n }}\n >\n <div style={{ maxWidth: \"1200px\", margin: \"0 auto\", padding: \"0 1rem\" }}>\n {/* Header */}\n {(title || subtitle) && (\n <div data-block-group=\"Cabeçalho\" style={{ textAlign: \"center\", marginBottom: \"3rem\" }}>\n {title && (\n <h2\n style={{\n fontSize: \"var(--sg-heading-h2)\",\n marginBottom: \"0.5rem\",\n }}\n >\n {title}\n </h2>\n )}\n {subtitle && (\n <p\n style={{ color: \"var(--sg-muted-text)\", fontSize: \"1.125rem\" }}\n >\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n {/* Grid */}\n {cards.length > 0 ? (\n <div\n data-block-group=\"Layout\"\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: \"2rem\",\n }}\n >\n {cards.map((card: any, index: number) =>\n renderBlogPostCard({\n id: `${block.id}-card-${index}`,\n props: {\n ...card,\n variant:\n variant === \"featured\" && index === 0\n ? \"horizontal\"\n : variant === \"minimal\"\n ? \"minimal\"\n : \"default\",\n },\n }),\n )}\n </div>\n ) : (\n <div\n style={{\n textAlign: \"center\",\n padding: \"3rem 1rem\",\n color: \"var(--sg-muted-text)\",\n border: \"2px dashed var(--sg-border, #e5e7eb)\",\n borderRadius: \"var(--sg-card-radius, 0.5rem)\",\n }}\n >\n <p style={{ fontSize: \"1rem\", marginBottom: \"0.5rem\" }}>\n Nenhum post encontrado\n </p>\n <p style={{ fontSize: \"0.875rem\" }}>\n Os posts aparecerão aqui quando forem publicados.\n </p>\n </div>\n )}\n\n {/* View All link */}\n {showViewAll && (\n <div data-block-group=\"Rodapé\" style={{ textAlign: \"center\", marginTop: \"2.5rem\" }}>\n <a\n href={viewAllHref}\n style={{\n display: \"inline-block\",\n padding: \"0.75rem 2rem\",\n color: \"var(--sg-primary)\",\n border: \"1px solid var(--sg-primary)\",\n borderRadius: \"var(--sg-button-radius, 0.5rem)\",\n textDecoration: \"none\",\n fontWeight: 500,\n fontSize: \"0.9375rem\",\n }}\n >\n {viewAllText}\n </a>\n </div>\n )}\n </div>\n </section>\n );\n}\n"],"names":["renderBlogPostGrid","block","title","subtitle","columns","cards","variant","showViewAll","viewAllText","viewAllHref","jsx","jsxs","card","index","renderBlogPostCard"],"mappings":";;AAQO,SAASA,EAAmBC,GAA6B;AAC9D,QAAM;AAAA,IACJ,OAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,OAAAC,IAAQ,CAAA;AAAA,IACR,SAAAC,IAAU;AAAA,IACV,aAAAC,IAAc;AAAA,IACd,aAAAC,IAAc;AAAA,IACd,aAAAC,IAAc;AAAA,EAAA,IACZR,EAAM;AAEV,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,iBAAiB;AAAA,MAAA;AAAA,MAGnB,UAAA,gBAAAC,EAAC,OAAA,EAAI,OAAO,EAAE,UAAU,UAAU,QAAQ,UAAU,SAAS,SAAA,GAEzD,UAAA;AAAA,SAAAT,KAASC,MACT,gBAAAQ,EAAC,OAAA,EAAI,oBAAiB,aAAY,OAAO,EAAE,WAAW,UAAU,cAAc,OAAA,GAC3E,UAAA;AAAA,UAAAT,KACC,gBAAAQ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,cAAc;AAAA,cAAA;AAAA,cAGf,UAAAR;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJC,KACC,gBAAAO;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,EAAE,OAAO,wBAAwB,UAAU,WAAA;AAAA,cAEjD,UAAAP;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,GAEJ;AAAA,QAIDE,EAAM,SAAS,IACd,gBAAAK;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,oBAAiB;AAAA,YACjB,OAAO;AAAA,cACL,SAAS;AAAA,cACT,qBAAqB,UAAUN,CAAO;AAAA,cACtC,KAAK;AAAA,YAAA;AAAA,YAGN,UAAAC,EAAM;AAAA,cAAI,CAACO,GAAWC,MACrBC,EAAmB;AAAA,gBACjB,IAAI,GAAGb,EAAM,EAAE,SAASY,CAAK;AAAA,gBAC7B,OAAO;AAAA,kBACL,GAAGD;AAAA,kBACH,SACEN,MAAY,cAAcO,MAAU,IAChC,eACAP,MAAY,YACV,YACA;AAAA,gBAAA;AAAA,cACV,CACD;AAAA,YAAA;AAAA,UACH;AAAA,QAAA,IAGF,gBAAAK;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,WAAW;AAAA,cACX,SAAS;AAAA,cACT,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc;AAAA,YAAA;AAAA,YAGhB,UAAA;AAAA,cAAA,gBAAAD,EAAC,KAAA,EAAE,OAAO,EAAE,UAAU,QAAQ,cAAc,SAAA,GAAY,UAAA,yBAAA,CAExD;AAAA,gCACC,KAAA,EAAE,OAAO,EAAE,UAAU,WAAA,GAAc,UAAA,oDAAA,CAEpC;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAKHH,KACC,gBAAAG,EAAC,OAAA,EAAI,oBAAiB,UAAS,OAAO,EAAE,WAAW,UAAU,WAAW,SAAA,GACtE,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAMD;AAAA,YACN,OAAO;AAAA,cACL,SAAS;AAAA,cACT,SAAS;AAAA,cACT,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,UAAU;AAAA,YAAA;AAAA,YAGX,UAAAD;AAAA,UAAA;AAAA,QAAA,EACH,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,IA9FKP,EAAM;AAAA,EAAA;AAiGjB;"}
1
+ {"version":3,"file":"BlogPostGridRenderer.js","sources":["../../../../../src/engine/render/renderers/sections/BlogPostGridRenderer.tsx"],"sourcesContent":["/**\n * BlogPostGrid Renderer\n * Renderiza grid de cards de blog posts com título, subtítulo e link \"ver todos\"\n */\n\nimport React from \"react\";\nimport { renderBlogPostCard } from \"./BlogPostCardRenderer\";\n\n/**\n * Builds a pagination URL appending ?pagina=N (or &pagina=N if URL has params).\n * Page 1 returns base URL without param (cleaner URL).\n */\nfunction buildPageUrl(baseUrl: string, page: number): string {\n if (page <= 1) return baseUrl;\n const separator = baseUrl.includes(\"?\") ? \"&\" : \"?\";\n return `${baseUrl}${separator}pagina=${page}`;\n}\n\n/**\n * Generates an array of page numbers to display, with -1 for ellipsis.\n * Shows all pages if <= 7, otherwise uses ellipsis pattern.\n */\nfunction getPageNumbers(current: number, total: number): number[] {\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n const pages: number[] = [1];\n if (current > 3) pages.push(-1);\n const start = Math.max(2, current - 1);\n const end = Math.min(total - 1, current + 1);\n for (let i = start; i <= end; i++) pages.push(i);\n if (current < total - 2) pages.push(-1);\n if (pages[pages.length - 1] !== total) pages.push(total);\n return pages;\n}\n\nexport function renderBlogPostGrid(block: any): React.ReactNode {\n const {\n title,\n subtitle,\n columns = 3,\n cards = [],\n variant = \"default\",\n showViewAll = false,\n viewAllText = \"Ver todos\",\n viewAllHref = \"#\",\n currentPage = 1,\n totalPages = 1,\n paginationBaseUrl = \"#\",\n } = block.props;\n\n return (\n <section\n key={block.id}\n style={{\n padding: \"var(--sg-section-padding-md)\",\n backgroundColor: \"var(--sg-bg)\",\n }}\n >\n <div style={{ maxWidth: \"1200px\", margin: \"0 auto\", padding: \"0 1rem\" }}>\n {/* Header */}\n {(title || subtitle) && (\n <div data-block-group=\"Cabeçalho\" style={{ textAlign: \"center\", marginBottom: \"3rem\" }}>\n {title && (\n <h2\n style={{\n fontSize: \"var(--sg-heading-h2)\",\n marginBottom: \"0.5rem\",\n }}\n >\n {title}\n </h2>\n )}\n {subtitle && (\n <p\n style={{ color: \"var(--sg-muted-text)\", fontSize: \"1.125rem\" }}\n >\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n {/* Grid */}\n {cards.length > 0 ? (\n <div\n data-block-group=\"Layout\"\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: \"2rem\",\n }}\n >\n {cards.map((card: any, index: number) =>\n renderBlogPostCard({\n id: `${block.id}-card-${index}`,\n props: {\n ...card,\n variant:\n variant === \"featured\" && index === 0\n ? \"horizontal\"\n : variant === \"minimal\"\n ? \"minimal\"\n : \"default\",\n },\n }),\n )}\n </div>\n ) : (\n <div\n style={{\n textAlign: \"center\",\n padding: \"3rem 1rem\",\n color: \"var(--sg-muted-text)\",\n border: \"2px dashed var(--sg-border, #e5e7eb)\",\n borderRadius: \"var(--sg-card-radius, 0.5rem)\",\n }}\n >\n <p style={{ fontSize: \"1rem\", marginBottom: \"0.5rem\" }}>\n Nenhum post encontrado\n </p>\n <p style={{ fontSize: \"0.875rem\" }}>\n Os posts aparecerão aqui quando forem publicados.\n </p>\n </div>\n )}\n\n {/* View All link */}\n {showViewAll && (\n <div data-block-group=\"Rodapé\" style={{ textAlign: \"center\", marginTop: \"2.5rem\" }}>\n <a\n href={viewAllHref}\n style={{\n display: \"inline-block\",\n padding: \"0.75rem 2rem\",\n color: \"var(--sg-primary)\",\n border: \"1px solid var(--sg-primary)\",\n borderRadius: \"var(--sg-button-radius, 0.5rem)\",\n textDecoration: \"none\",\n fontWeight: 500,\n fontSize: \"0.9375rem\",\n }}\n >\n {viewAllText}\n </a>\n </div>\n )}\n\n {/* Pagination */}\n {totalPages > 1 && (\n <nav\n data-block-group=\"Paginação\"\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: \"0.375rem\",\n marginTop: \"2.5rem\",\n }}\n >\n {/* Previous */}\n {currentPage > 1 ? (\n <a\n href={buildPageUrl(paginationBaseUrl, currentPage - 1)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n borderRadius: \"var(--sg-card-radius, 0.5rem)\",\n border: \"1px solid var(--sg-border, #e5e7eb)\",\n textDecoration: \"none\",\n color: \"var(--sg-text)\",\n fontSize: \"0.875rem\",\n }}\n >\n ‹\n </a>\n ) : (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n borderRadius: \"var(--sg-card-radius, 0.5rem)\",\n border: \"1px solid var(--sg-border, #e5e7eb)\",\n color: \"var(--sg-muted-text)\",\n fontSize: \"0.875rem\",\n opacity: 0.4,\n }}\n >\n ‹\n </span>\n )}\n\n {/* Page numbers */}\n {getPageNumbers(currentPage, totalPages).map((page, idx) =>\n page === -1 ? (\n <span\n key={`ellipsis-${idx}`}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n color: \"var(--sg-muted-text)\",\n fontSize: \"0.875rem\",\n }}\n >\n …\n </span>\n ) : (\n <a\n key={page}\n href={buildPageUrl(paginationBaseUrl, page)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n borderRadius: \"var(--sg-card-radius, 0.5rem)\",\n border: `1px solid ${page === currentPage ? \"var(--sg-primary)\" : \"var(--sg-border, #e5e7eb)\"}`,\n backgroundColor:\n page === currentPage ? \"var(--sg-primary)\" : \"transparent\",\n color:\n page === currentPage\n ? \"var(--sg-primary-text, #fff)\"\n : \"var(--sg-text)\",\n textDecoration: \"none\",\n fontWeight: page === currentPage ? 600 : 400,\n fontSize: \"0.875rem\",\n }}\n >\n {page}\n </a>\n ),\n )}\n\n {/* Next */}\n {currentPage < totalPages ? (\n <a\n href={buildPageUrl(paginationBaseUrl, currentPage + 1)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n borderRadius: \"var(--sg-card-radius, 0.5rem)\",\n border: \"1px solid var(--sg-border, #e5e7eb)\",\n textDecoration: \"none\",\n color: \"var(--sg-text)\",\n fontSize: \"0.875rem\",\n }}\n >\n ›\n </a>\n ) : (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n borderRadius: \"var(--sg-card-radius, 0.5rem)\",\n border: \"1px solid var(--sg-border, #e5e7eb)\",\n color: \"var(--sg-muted-text)\",\n fontSize: \"0.875rem\",\n opacity: 0.4,\n }}\n >\n ›\n </span>\n )}\n </nav>\n )}\n </div>\n </section>\n );\n}\n"],"names":["buildPageUrl","baseUrl","page","separator","getPageNumbers","current","total","_","i","pages","start","end","renderBlogPostGrid","block","title","subtitle","columns","cards","variant","showViewAll","viewAllText","viewAllHref","currentPage","totalPages","paginationBaseUrl","jsx","jsxs","card","index","renderBlogPostCard","idx"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { default as React } from 'react';
2
+ export declare function renderBlogRecentPosts(block: any): React.ReactNode;
3
+ //# sourceMappingURL=BlogRecentPostsRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlogRecentPostsRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/render/renderers/sections/BlogRecentPostsRenderer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAuIjE"}
@@ -0,0 +1,148 @@
1
+ import { jsxs as t, jsx as r } from "react/jsx-runtime";
2
+ function c(i) {
3
+ const {
4
+ title: n = "Posts Recentes",
5
+ posts: o = [],
6
+ showThumbnail: l = !0,
7
+ showDate: d = !0,
8
+ showCategory: a = !1
9
+ } = i.props;
10
+ return /* @__PURE__ */ t(
11
+ "div",
12
+ {
13
+ "data-block-group": "Conteúdo",
14
+ style: {
15
+ backgroundColor: "var(--sg-bg)",
16
+ borderRadius: "var(--sg-card-radius, 0.75rem)",
17
+ border: "1px solid var(--sg-border, #e5e7eb)",
18
+ overflow: "hidden"
19
+ },
20
+ children: [
21
+ n && /* @__PURE__ */ r(
22
+ "div",
23
+ {
24
+ style: {
25
+ padding: "1rem 1.25rem",
26
+ borderBottom: "1px solid var(--sg-border, #e5e7eb)"
27
+ },
28
+ children: /* @__PURE__ */ r(
29
+ "h3",
30
+ {
31
+ style: {
32
+ fontSize: "1rem",
33
+ fontWeight: 600,
34
+ margin: 0,
35
+ color: "var(--sg-text)"
36
+ },
37
+ children: n
38
+ }
39
+ )
40
+ }
41
+ ),
42
+ /* @__PURE__ */ r("div", { style: { padding: "0.5rem 0" }, children: o.length === 0 ? /* @__PURE__ */ r(
43
+ "p",
44
+ {
45
+ style: {
46
+ padding: "1.5rem 1.25rem",
47
+ color: "var(--sg-muted-text)",
48
+ fontSize: "0.875rem",
49
+ textAlign: "center",
50
+ margin: 0
51
+ },
52
+ children: "Nenhum post recente"
53
+ }
54
+ ) : o.map((e, s) => /* @__PURE__ */ t(
55
+ "a",
56
+ {
57
+ href: `/site/p/blog/${e.slug}`,
58
+ style: {
59
+ display: "flex",
60
+ alignItems: "center",
61
+ gap: "0.75rem",
62
+ padding: "0.75rem 1.25rem",
63
+ textDecoration: "none",
64
+ color: "inherit",
65
+ transition: "background-color 0.15s"
66
+ },
67
+ children: [
68
+ l && e.image && /* @__PURE__ */ r(
69
+ "img",
70
+ {
71
+ src: e.image,
72
+ alt: e.title,
73
+ style: {
74
+ width: "64px",
75
+ height: "64px",
76
+ objectFit: "cover",
77
+ borderRadius: "var(--sg-card-radius, 0.5rem)",
78
+ flexShrink: 0
79
+ }
80
+ }
81
+ ),
82
+ /* @__PURE__ */ t("div", { style: { flex: 1, minWidth: 0 }, children: [
83
+ /* @__PURE__ */ r(
84
+ "div",
85
+ {
86
+ style: {
87
+ fontSize: "0.875rem",
88
+ fontWeight: 500,
89
+ color: "var(--sg-text)",
90
+ lineHeight: 1.4,
91
+ display: "-webkit-box",
92
+ WebkitLineClamp: 2,
93
+ WebkitBoxOrient: "vertical",
94
+ overflow: "hidden"
95
+ },
96
+ children: e.title
97
+ }
98
+ ),
99
+ /* @__PURE__ */ t(
100
+ "div",
101
+ {
102
+ style: {
103
+ display: "flex",
104
+ alignItems: "center",
105
+ gap: "0.5rem",
106
+ marginTop: "0.25rem"
107
+ },
108
+ children: [
109
+ d && e.date && /* @__PURE__ */ r(
110
+ "span",
111
+ {
112
+ style: {
113
+ fontSize: "0.75rem",
114
+ color: "var(--sg-muted-text)"
115
+ },
116
+ children: e.date
117
+ }
118
+ ),
119
+ a && e.category && /* @__PURE__ */ r(
120
+ "span",
121
+ {
122
+ style: {
123
+ fontSize: "0.6875rem",
124
+ color: "var(--sg-primary)",
125
+ fontWeight: 600,
126
+ textTransform: "uppercase",
127
+ letterSpacing: "0.03em"
128
+ },
129
+ children: e.category
130
+ }
131
+ )
132
+ ]
133
+ }
134
+ )
135
+ ] })
136
+ ]
137
+ },
138
+ s
139
+ )) })
140
+ ]
141
+ },
142
+ i.id
143
+ );
144
+ }
145
+ export {
146
+ c as renderBlogRecentPosts
147
+ };
148
+ //# sourceMappingURL=BlogRecentPostsRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlogRecentPostsRenderer.js","sources":["../../../../../src/engine/render/renderers/sections/BlogRecentPostsRenderer.tsx"],"sourcesContent":["/**\n * BlogRecentPosts Renderer\n * Widget de sidebar com lista dos posts mais recentes\n */\n\nimport React from \"react\";\n\ninterface RecentPost {\n title: string;\n slug: string;\n date?: string;\n image?: string;\n category?: string;\n}\n\nexport function renderBlogRecentPosts(block: any): React.ReactNode {\n const {\n title = \"Posts Recentes\",\n posts = [],\n showThumbnail = true,\n showDate = true,\n showCategory = false,\n } = block.props;\n\n return (\n <div\n key={block.id}\n data-block-group=\"Conteúdo\"\n style={{\n backgroundColor: \"var(--sg-bg)\",\n borderRadius: \"var(--sg-card-radius, 0.75rem)\",\n border: \"1px solid var(--sg-border, #e5e7eb)\",\n overflow: \"hidden\",\n }}\n >\n {title && (\n <div\n style={{\n padding: \"1rem 1.25rem\",\n borderBottom: \"1px solid var(--sg-border, #e5e7eb)\",\n }}\n >\n <h3\n style={{\n fontSize: \"1rem\",\n fontWeight: 600,\n margin: 0,\n color: \"var(--sg-text)\",\n }}\n >\n {title}\n </h3>\n </div>\n )}\n\n <div style={{ padding: \"0.5rem 0\" }}>\n {posts.length === 0 ? (\n <p\n style={{\n padding: \"1.5rem 1.25rem\",\n color: \"var(--sg-muted-text)\",\n fontSize: \"0.875rem\",\n textAlign: \"center\",\n margin: 0,\n }}\n >\n Nenhum post recente\n </p>\n ) : (\n posts.map((post: RecentPost, index: number) => (\n <a\n key={index}\n href={`/site/p/blog/${post.slug}`}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.75rem\",\n padding: \"0.75rem 1.25rem\",\n textDecoration: \"none\",\n color: \"inherit\",\n transition: \"background-color 0.15s\",\n }}\n >\n {showThumbnail && post.image && (\n <img\n src={post.image}\n alt={post.title}\n style={{\n width: \"64px\",\n height: \"64px\",\n objectFit: \"cover\",\n borderRadius: \"var(--sg-card-radius, 0.5rem)\",\n flexShrink: 0,\n }}\n />\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 500,\n color: \"var(--sg-text)\",\n lineHeight: 1.4,\n display: \"-webkit-box\",\n WebkitLineClamp: 2,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\",\n }}\n >\n {post.title}\n </div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.5rem\",\n marginTop: \"0.25rem\",\n }}\n >\n {showDate && post.date && (\n <span\n style={{\n fontSize: \"0.75rem\",\n color: \"var(--sg-muted-text)\",\n }}\n >\n {post.date}\n </span>\n )}\n {showCategory && post.category && (\n <span\n style={{\n fontSize: \"0.6875rem\",\n color: \"var(--sg-primary)\",\n fontWeight: 600,\n textTransform: \"uppercase\",\n letterSpacing: \"0.03em\",\n }}\n >\n {post.category}\n </span>\n )}\n </div>\n </div>\n </a>\n ))\n )}\n </div>\n </div>\n );\n}\n"],"names":["renderBlogRecentPosts","block","title","posts","showThumbnail","showDate","showCategory","jsxs","jsx","post","index"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { default as React } from 'react';
2
+ export declare function renderBlogTagCloud(block: any): React.ReactNode;
3
+ //# sourceMappingURL=BlogTagCloudRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlogTagCloudRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/render/renderers/sections/BlogTagCloudRenderer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAwH9D"}
@@ -0,0 +1,134 @@
1
+ import { jsxs as d, jsx as e } from "react/jsx-runtime";
2
+ function l(n) {
3
+ const {
4
+ title: o = "Tags",
5
+ tags: a = [],
6
+ variant: i = "badges"
7
+ } = n.props;
8
+ return /* @__PURE__ */ d(
9
+ "div",
10
+ {
11
+ "data-block-group": "Conteúdo",
12
+ style: {
13
+ backgroundColor: "var(--sg-bg)",
14
+ borderRadius: "var(--sg-card-radius, 0.75rem)",
15
+ border: "1px solid var(--sg-border, #e5e7eb)",
16
+ overflow: "hidden"
17
+ },
18
+ children: [
19
+ o && /* @__PURE__ */ e(
20
+ "div",
21
+ {
22
+ style: {
23
+ padding: "1rem 1.25rem",
24
+ borderBottom: "1px solid var(--sg-border, #e5e7eb)"
25
+ },
26
+ children: /* @__PURE__ */ e(
27
+ "h3",
28
+ {
29
+ style: {
30
+ fontSize: "1rem",
31
+ fontWeight: 600,
32
+ margin: 0,
33
+ color: "var(--sg-text)"
34
+ },
35
+ children: o
36
+ }
37
+ )
38
+ }
39
+ ),
40
+ /* @__PURE__ */ e("div", { style: { padding: "1rem 1.25rem" }, children: a.length === 0 ? /* @__PURE__ */ e(
41
+ "p",
42
+ {
43
+ style: {
44
+ color: "var(--sg-muted-text)",
45
+ fontSize: "0.875rem",
46
+ textAlign: "center",
47
+ margin: 0
48
+ },
49
+ children: "Nenhuma tag encontrada"
50
+ }
51
+ ) : i === "badges" ? /* @__PURE__ */ e(
52
+ "div",
53
+ {
54
+ style: {
55
+ display: "flex",
56
+ flexWrap: "wrap",
57
+ gap: "0.5rem"
58
+ },
59
+ children: a.map((r, t) => /* @__PURE__ */ d(
60
+ "span",
61
+ {
62
+ style: {
63
+ display: "inline-flex",
64
+ alignItems: "center",
65
+ gap: "0.375rem",
66
+ padding: "0.3rem 0.75rem",
67
+ borderRadius: "9999px",
68
+ fontSize: "0.8125rem",
69
+ fontWeight: 500,
70
+ backgroundColor: "var(--sg-surface, #f3f4f6)",
71
+ color: "var(--sg-text)"
72
+ },
73
+ children: [
74
+ r.name,
75
+ /* @__PURE__ */ d(
76
+ "span",
77
+ {
78
+ style: {
79
+ fontSize: "0.6875rem",
80
+ color: "var(--sg-muted-text)",
81
+ opacity: 0.7
82
+ },
83
+ children: [
84
+ "(",
85
+ r.count,
86
+ ")"
87
+ ]
88
+ }
89
+ )
90
+ ]
91
+ },
92
+ t
93
+ ))
94
+ }
95
+ ) : /* @__PURE__ */ e("div", { style: { display: "flex", flexDirection: "column", gap: "0.25rem" }, children: a.map((r, t) => /* @__PURE__ */ d(
96
+ "div",
97
+ {
98
+ style: {
99
+ display: "flex",
100
+ alignItems: "center",
101
+ justifyContent: "space-between",
102
+ padding: "0.5rem 0.75rem",
103
+ borderRadius: "var(--sg-card-radius, 0.5rem)",
104
+ fontSize: "0.875rem",
105
+ color: "var(--sg-text)"
106
+ },
107
+ children: [
108
+ /* @__PURE__ */ e("span", { children: r.name }),
109
+ /* @__PURE__ */ e(
110
+ "span",
111
+ {
112
+ style: {
113
+ fontSize: "0.75rem",
114
+ color: "var(--sg-muted-text)",
115
+ backgroundColor: "var(--sg-surface, #f3f4f6)",
116
+ padding: "0.125rem 0.5rem",
117
+ borderRadius: "9999px"
118
+ },
119
+ children: r.count
120
+ }
121
+ )
122
+ ]
123
+ },
124
+ t
125
+ )) }) })
126
+ ]
127
+ },
128
+ n.id
129
+ );
130
+ }
131
+ export {
132
+ l as renderBlogTagCloud
133
+ };
134
+ //# sourceMappingURL=BlogTagCloudRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlogTagCloudRenderer.js","sources":["../../../../../src/engine/render/renderers/sections/BlogTagCloudRenderer.tsx"],"sourcesContent":["/**\n * BlogTagCloud Renderer\n * Widget de sidebar com nuvem de tags do blog\n */\n\nimport React from \"react\";\n\ninterface TagItem {\n name: string;\n count: number;\n}\n\nexport function renderBlogTagCloud(block: any): React.ReactNode {\n const {\n title = \"Tags\",\n tags = [],\n variant = \"badges\",\n } = block.props;\n\n return (\n <div\n key={block.id}\n data-block-group=\"Conteúdo\"\n style={{\n backgroundColor: \"var(--sg-bg)\",\n borderRadius: \"var(--sg-card-radius, 0.75rem)\",\n border: \"1px solid var(--sg-border, #e5e7eb)\",\n overflow: \"hidden\",\n }}\n >\n {title && (\n <div\n style={{\n padding: \"1rem 1.25rem\",\n borderBottom: \"1px solid var(--sg-border, #e5e7eb)\",\n }}\n >\n <h3\n style={{\n fontSize: \"1rem\",\n fontWeight: 600,\n margin: 0,\n color: \"var(--sg-text)\",\n }}\n >\n {title}\n </h3>\n </div>\n )}\n\n <div style={{ padding: \"1rem 1.25rem\" }}>\n {tags.length === 0 ? (\n <p\n style={{\n color: \"var(--sg-muted-text)\",\n fontSize: \"0.875rem\",\n textAlign: \"center\",\n margin: 0,\n }}\n >\n Nenhuma tag encontrada\n </p>\n ) : variant === \"badges\" ? (\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: \"0.5rem\",\n }}\n >\n {tags.map((tag: TagItem, index: number) => (\n <span\n key={index}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.375rem\",\n padding: \"0.3rem 0.75rem\",\n borderRadius: \"9999px\",\n fontSize: \"0.8125rem\",\n fontWeight: 500,\n backgroundColor: \"var(--sg-surface, #f3f4f6)\",\n color: \"var(--sg-text)\",\n }}\n >\n {tag.name}\n <span\n style={{\n fontSize: \"0.6875rem\",\n color: \"var(--sg-muted-text)\",\n opacity: 0.7,\n }}\n >\n ({tag.count})\n </span>\n </span>\n ))}\n </div>\n ) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.25rem\" }}>\n {tags.map((tag: TagItem, index: number) => (\n <div\n key={index}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"0.5rem 0.75rem\",\n borderRadius: \"var(--sg-card-radius, 0.5rem)\",\n fontSize: \"0.875rem\",\n color: \"var(--sg-text)\",\n }}\n >\n <span>{tag.name}</span>\n <span\n style={{\n fontSize: \"0.75rem\",\n color: \"var(--sg-muted-text)\",\n backgroundColor: \"var(--sg-surface, #f3f4f6)\",\n padding: \"0.125rem 0.5rem\",\n borderRadius: \"9999px\",\n }}\n >\n {tag.count}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"names":["renderBlogTagCloud","block","title","tags","variant","jsxs","jsx","tag","index"],"mappings":";AAYO,SAASA,EAAmBC,GAA6B;AAC9D,QAAM;AAAA,IACJ,OAAAC,IAAQ;AAAA,IACR,MAAAC,IAAO,CAAA;AAAA,IACP,SAAAC,IAAU;AAAA,EAAA,IACRH,EAAM;AAEV,SACE,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,oBAAiB;AAAA,MACjB,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,UAAU;AAAA,MAAA;AAAA,MAGX,UAAA;AAAA,QAAAH,KACC,gBAAAI;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,cAAc;AAAA,YAAA;AAAA,YAGhB,UAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,UAAU;AAAA,kBACV,YAAY;AAAA,kBACZ,QAAQ;AAAA,kBACR,OAAO;AAAA,gBAAA;AAAA,gBAGR,UAAAJ;AAAA,cAAA;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,QAIJ,gBAAAI,EAAC,SAAI,OAAO,EAAE,SAAS,eAAA,GACpB,UAAAH,EAAK,WAAW,IACf,gBAAAG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,UAAU;AAAA,cACV,WAAW;AAAA,cACX,QAAQ;AAAA,YAAA;AAAA,YAEX,UAAA;AAAA,UAAA;AAAA,QAAA,IAGCF,MAAY,WACd,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,UAAU;AAAA,cACV,KAAK;AAAA,YAAA;AAAA,YAGN,UAAAH,EAAK,IAAI,CAACI,GAAcC,MACvB,gBAAAH;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,OAAO;AAAA,kBACL,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,KAAK;AAAA,kBACL,SAAS;AAAA,kBACT,cAAc;AAAA,kBACd,UAAU;AAAA,kBACV,YAAY;AAAA,kBACZ,iBAAiB;AAAA,kBACjB,OAAO;AAAA,gBAAA;AAAA,gBAGR,UAAA;AAAA,kBAAAE,EAAI;AAAA,kBACL,gBAAAF;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,UAAU;AAAA,wBACV,OAAO;AAAA,wBACP,SAAS;AAAA,sBAAA;AAAA,sBAEZ,UAAA;AAAA,wBAAA;AAAA,wBACGE,EAAI;AAAA,wBAAM;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACd;AAAA,cAAA;AAAA,cAtBKC;AAAA,YAAA,CAwBR;AAAA,UAAA;AAAA,QAAA,IAGH,gBAAAF,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,aAC1D,UAAAH,EAAK,IAAI,CAACI,GAAcC,MACvB,gBAAAH;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,SAAS;AAAA,cACT,cAAc;AAAA,cACd,UAAU;AAAA,cACV,OAAO;AAAA,YAAA;AAAA,YAGT,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAM,YAAI,KAAA,CAAK;AAAA,cAChB,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,UAAU;AAAA,oBACV,OAAO;AAAA,oBACP,iBAAiB;AAAA,oBACjB,SAAS;AAAA,oBACT,cAAc;AAAA,kBAAA;AAAA,kBAGf,UAAAC,EAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YACP;AAAA,UAAA;AAAA,UAtBKC;AAAA,QAAA,CAwBR,GACH,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,IA5GKP,EAAM;AAAA,EAAA;AA+GjB;"}
@@ -1,48 +1,52 @@
1
1
  import { renderRegistry as r } from "../../registry/renderRegistry.js";
2
2
  import { renderHero as e } from "./HeroRenderer.js";
3
- import { renderFeature as t } from "./FeatureRenderer.js";
4
- import { renderFeatureGrid as o } from "./FeatureGridRenderer.js";
3
+ import { renderFeature as o } from "./FeatureRenderer.js";
4
+ import { renderFeatureGrid as t } from "./FeatureGridRenderer.js";
5
5
  import { renderPricing as i } from "./PricingRenderer.js";
6
6
  import { renderPricingCard as m } from "./PricingCardRenderer.js";
7
7
  import { renderTestimonial as g } from "./TestimonialRenderer.js";
8
8
  import { renderTestimonialGrid as s } from "./TestimonialGridRenderer.js";
9
- import { renderFaq as a } from "./FaqRenderer.js";
10
- import { renderFaqItem as n } from "./FaqItemRenderer.js";
11
- import { renderCta as d } from "./CtaRenderer.js";
9
+ import { renderFaq as n } from "./FaqRenderer.js";
10
+ import { renderFaqItem as d } from "./FaqItemRenderer.js";
11
+ import { renderCta as a } from "./CtaRenderer.js";
12
12
  import { renderStats as f } from "./StatsRenderer.js";
13
13
  import { renderStatItem as p } from "./StatItemRenderer.js";
14
14
  import { renderLogoCloud as l } from "./LogoCloudRenderer.js";
15
15
  import { renderNavbar as c } from "./NavbarRenderer.js";
16
16
  import { renderFooter as u } from "./FooterRenderer.js";
17
17
  import { renderBlogPostCard as C } from "./BlogPostCardRenderer.js";
18
- import { renderBlogPostGrid as S } from "./BlogPostGridRenderer.js";
19
- import { renderBlogPostDetail as b } from "./BlogPostDetailRenderer.js";
20
- import { renderBlogCategoryFilter as P } from "./BlogCategoryFilterRenderer.js";
18
+ import { renderBlogPostGrid as b } from "./BlogPostGridRenderer.js";
19
+ import { renderBlogPostDetail as P } from "./BlogPostDetailRenderer.js";
20
+ import { renderBlogCategoryFilter as S } from "./BlogCategoryFilterRenderer.js";
21
21
  import { renderBlogSearchBar as B } from "./BlogSearchBarRenderer.js";
22
22
  import { renderProductShowcase as F } from "./ProductShowcaseRenderer.js";
23
23
  import { renderAboutSection as G } from "./AboutSectionRenderer.js";
24
24
  import { renderContactSection as h } from "./ContactSectionRenderer.js";
25
+ import { renderBlogRecentPosts as q } from "./BlogRecentPostsRenderer.js";
26
+ import { renderBlogTagCloud as I } from "./BlogTagCloudRenderer.js";
25
27
  r.register("hero", e);
26
- r.register("feature", t);
27
- r.register("featureGrid", o);
28
+ r.register("feature", o);
29
+ r.register("featureGrid", t);
28
30
  r.register("pricing", i);
29
31
  r.register("pricingCard", m);
30
32
  r.register("testimonial", g);
31
33
  r.register("testimonialGrid", s);
32
- r.register("faq", a);
33
- r.register("faqItem", n);
34
- r.register("cta", d);
34
+ r.register("faq", n);
35
+ r.register("faqItem", d);
36
+ r.register("cta", a);
35
37
  r.register("stats", f);
36
38
  r.register("statItem", p);
37
39
  r.register("logoCloud", l);
38
40
  r.register("navbar", c);
39
41
  r.register("footer", u);
40
42
  r.register("blogPostCard", C);
41
- r.register("blogPostGrid", S);
42
- r.register("blogPostDetail", b);
43
- r.register("blogCategoryFilter", P);
43
+ r.register("blogPostGrid", b);
44
+ r.register("blogPostDetail", P);
45
+ r.register("blogCategoryFilter", S);
44
46
  r.register("blogSearchBar", B);
45
47
  r.register("productShowcase", F);
46
48
  r.register("aboutSection", G);
47
49
  r.register("contactSection", h);
50
+ r.register("blogRecentPosts", q);
51
+ r.register("blogTagCloud", I);
48
52
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/engine/render/renderers/sections/index.ts"],"sourcesContent":["/**\n * Section Renderers\n * Auto-registra todos os renderizadores de seções\n */\n\nimport { renderRegistry } from \"../../registry/renderRegistry\";\nimport { renderHero } from \"./HeroRenderer\";\nimport { renderFeature } from \"./FeatureRenderer\";\nimport { renderFeatureGrid } from \"./FeatureGridRenderer\";\nimport { renderPricing } from \"./PricingRenderer\";\nimport { renderPricingCard } from \"./PricingCardRenderer\";\nimport { renderTestimonial } from \"./TestimonialRenderer\";\nimport { renderTestimonialGrid } from \"./TestimonialGridRenderer\";\nimport { renderFaq } from \"./FaqRenderer\";\nimport { renderFaqItem } from \"./FaqItemRenderer\";\nimport { renderCta } from \"./CtaRenderer\";\nimport { renderStats } from \"./StatsRenderer\";\nimport { renderStatItem } from \"./StatItemRenderer\";\nimport { renderLogoCloud } from \"./LogoCloudRenderer\";\nimport { renderNavbar } from \"./NavbarRenderer\";\nimport { renderFooter } from \"./FooterRenderer\";\nimport { renderBlogPostCard } from \"./BlogPostCardRenderer\";\nimport { renderBlogPostGrid } from \"./BlogPostGridRenderer\";\nimport { renderBlogPostDetail } from \"./BlogPostDetailRenderer\";\nimport { renderBlogCategoryFilter } from \"./BlogCategoryFilterRenderer\";\nimport { renderBlogSearchBar } from \"./BlogSearchBarRenderer\";\nimport { renderProductShowcase } from \"./ProductShowcaseRenderer\";\nimport { renderAboutSection } from \"./AboutSectionRenderer\";\nimport { renderContactSection } from \"./ContactSectionRenderer\";\n\n// Registrar renderizadores\nrenderRegistry.register(\"hero\", renderHero);\nrenderRegistry.register(\"feature\", renderFeature);\nrenderRegistry.register(\"featureGrid\", renderFeatureGrid);\nrenderRegistry.register(\"pricing\", renderPricing);\nrenderRegistry.register(\"pricingCard\", renderPricingCard);\nrenderRegistry.register(\"testimonial\", renderTestimonial);\nrenderRegistry.register(\"testimonialGrid\", renderTestimonialGrid);\nrenderRegistry.register(\"faq\", renderFaq);\nrenderRegistry.register(\"faqItem\", renderFaqItem);\nrenderRegistry.register(\"cta\", renderCta);\nrenderRegistry.register(\"stats\", renderStats);\nrenderRegistry.register(\"statItem\", renderStatItem);\nrenderRegistry.register(\"logoCloud\", renderLogoCloud);\nrenderRegistry.register(\"navbar\", renderNavbar);\nrenderRegistry.register(\"footer\", renderFooter);\nrenderRegistry.register(\"blogPostCard\", renderBlogPostCard);\nrenderRegistry.register(\"blogPostGrid\", renderBlogPostGrid);\nrenderRegistry.register(\"blogPostDetail\", renderBlogPostDetail);\nrenderRegistry.register(\"blogCategoryFilter\", renderBlogCategoryFilter);\nrenderRegistry.register(\"blogSearchBar\", renderBlogSearchBar);\nrenderRegistry.register(\"productShowcase\", renderProductShowcase);\nrenderRegistry.register(\"aboutSection\", renderAboutSection);\nrenderRegistry.register(\"contactSection\", renderContactSection);\n"],"names":["renderRegistry","renderHero","renderFeature","renderFeatureGrid","renderPricing","renderPricingCard","renderTestimonial","renderTestimonialGrid","renderFaq","renderFaqItem","renderCta","renderStats","renderStatItem","renderLogoCloud","renderNavbar","renderFooter","renderBlogPostCard","renderBlogPostGrid","renderBlogPostDetail","renderBlogCategoryFilter","renderBlogSearchBar","renderProductShowcase","renderAboutSection","renderContactSection"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA+BAA,EAAe,SAAS,QAAQC,CAAU;AAC1CD,EAAe,SAAS,WAAWE,CAAa;AAChDF,EAAe,SAAS,eAAeG,CAAiB;AACxDH,EAAe,SAAS,WAAWI,CAAa;AAChDJ,EAAe,SAAS,eAAeK,CAAiB;AACxDL,EAAe,SAAS,eAAeM,CAAiB;AACxDN,EAAe,SAAS,mBAAmBO,CAAqB;AAChEP,EAAe,SAAS,OAAOQ,CAAS;AACxCR,EAAe,SAAS,WAAWS,CAAa;AAChDT,EAAe,SAAS,OAAOU,CAAS;AACxCV,EAAe,SAAS,SAASW,CAAW;AAC5CX,EAAe,SAAS,YAAYY,CAAc;AAClDZ,EAAe,SAAS,aAAaa,CAAe;AACpDb,EAAe,SAAS,UAAUc,CAAY;AAC9Cd,EAAe,SAAS,UAAUe,CAAY;AAC9Cf,EAAe,SAAS,gBAAgBgB,CAAkB;AAC1DhB,EAAe,SAAS,gBAAgBiB,CAAkB;AAC1DjB,EAAe,SAAS,kBAAkBkB,CAAoB;AAC9DlB,EAAe,SAAS,sBAAsBmB,CAAwB;AACtEnB,EAAe,SAAS,iBAAiBoB,CAAmB;AAC5DpB,EAAe,SAAS,mBAAmBqB,CAAqB;AAChErB,EAAe,SAAS,gBAAgBsB,CAAkB;AAC1DtB,EAAe,SAAS,kBAAkBuB,CAAoB;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/engine/render/renderers/sections/index.ts"],"sourcesContent":["/**\n * Section Renderers\n * Auto-registra todos os renderizadores de seções\n */\n\nimport { renderRegistry } from \"../../registry/renderRegistry\";\nimport { renderHero } from \"./HeroRenderer\";\nimport { renderFeature } from \"./FeatureRenderer\";\nimport { renderFeatureGrid } from \"./FeatureGridRenderer\";\nimport { renderPricing } from \"./PricingRenderer\";\nimport { renderPricingCard } from \"./PricingCardRenderer\";\nimport { renderTestimonial } from \"./TestimonialRenderer\";\nimport { renderTestimonialGrid } from \"./TestimonialGridRenderer\";\nimport { renderFaq } from \"./FaqRenderer\";\nimport { renderFaqItem } from \"./FaqItemRenderer\";\nimport { renderCta } from \"./CtaRenderer\";\nimport { renderStats } from \"./StatsRenderer\";\nimport { renderStatItem } from \"./StatItemRenderer\";\nimport { renderLogoCloud } from \"./LogoCloudRenderer\";\nimport { renderNavbar } from \"./NavbarRenderer\";\nimport { renderFooter } from \"./FooterRenderer\";\nimport { renderBlogPostCard } from \"./BlogPostCardRenderer\";\nimport { renderBlogPostGrid } from \"./BlogPostGridRenderer\";\nimport { renderBlogPostDetail } from \"./BlogPostDetailRenderer\";\nimport { renderBlogCategoryFilter } from \"./BlogCategoryFilterRenderer\";\nimport { renderBlogSearchBar } from \"./BlogSearchBarRenderer\";\nimport { renderProductShowcase } from \"./ProductShowcaseRenderer\";\nimport { renderAboutSection } from \"./AboutSectionRenderer\";\nimport { renderContactSection } from \"./ContactSectionRenderer\";\nimport { renderBlogRecentPosts } from \"./BlogRecentPostsRenderer\";\nimport { renderBlogTagCloud } from \"./BlogTagCloudRenderer\";\n\n// Registrar renderizadores\nrenderRegistry.register(\"hero\", renderHero);\nrenderRegistry.register(\"feature\", renderFeature);\nrenderRegistry.register(\"featureGrid\", renderFeatureGrid);\nrenderRegistry.register(\"pricing\", renderPricing);\nrenderRegistry.register(\"pricingCard\", renderPricingCard);\nrenderRegistry.register(\"testimonial\", renderTestimonial);\nrenderRegistry.register(\"testimonialGrid\", renderTestimonialGrid);\nrenderRegistry.register(\"faq\", renderFaq);\nrenderRegistry.register(\"faqItem\", renderFaqItem);\nrenderRegistry.register(\"cta\", renderCta);\nrenderRegistry.register(\"stats\", renderStats);\nrenderRegistry.register(\"statItem\", renderStatItem);\nrenderRegistry.register(\"logoCloud\", renderLogoCloud);\nrenderRegistry.register(\"navbar\", renderNavbar);\nrenderRegistry.register(\"footer\", renderFooter);\nrenderRegistry.register(\"blogPostCard\", renderBlogPostCard);\nrenderRegistry.register(\"blogPostGrid\", renderBlogPostGrid);\nrenderRegistry.register(\"blogPostDetail\", renderBlogPostDetail);\nrenderRegistry.register(\"blogCategoryFilter\", renderBlogCategoryFilter);\nrenderRegistry.register(\"blogSearchBar\", renderBlogSearchBar);\nrenderRegistry.register(\"productShowcase\", renderProductShowcase);\nrenderRegistry.register(\"aboutSection\", renderAboutSection);\nrenderRegistry.register(\"contactSection\", renderContactSection);\nrenderRegistry.register(\"blogRecentPosts\", renderBlogRecentPosts);\nrenderRegistry.register(\"blogTagCloud\", renderBlogTagCloud);\n"],"names":["renderRegistry","renderHero","renderFeature","renderFeatureGrid","renderPricing","renderPricingCard","renderTestimonial","renderTestimonialGrid","renderFaq","renderFaqItem","renderCta","renderStats","renderStatItem","renderLogoCloud","renderNavbar","renderFooter","renderBlogPostCard","renderBlogPostGrid","renderBlogPostDetail","renderBlogCategoryFilter","renderBlogSearchBar","renderProductShowcase","renderAboutSection","renderContactSection","renderBlogRecentPosts","renderBlogTagCloud"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAiCAA,EAAe,SAAS,QAAQC,CAAU;AAC1CD,EAAe,SAAS,WAAWE,CAAa;AAChDF,EAAe,SAAS,eAAeG,CAAiB;AACxDH,EAAe,SAAS,WAAWI,CAAa;AAChDJ,EAAe,SAAS,eAAeK,CAAiB;AACxDL,EAAe,SAAS,eAAeM,CAAiB;AACxDN,EAAe,SAAS,mBAAmBO,CAAqB;AAChEP,EAAe,SAAS,OAAOQ,CAAS;AACxCR,EAAe,SAAS,WAAWS,CAAa;AAChDT,EAAe,SAAS,OAAOU,CAAS;AACxCV,EAAe,SAAS,SAASW,CAAW;AAC5CX,EAAe,SAAS,YAAYY,CAAc;AAClDZ,EAAe,SAAS,aAAaa,CAAe;AACpDb,EAAe,SAAS,UAAUc,CAAY;AAC9Cd,EAAe,SAAS,UAAUe,CAAY;AAC9Cf,EAAe,SAAS,gBAAgBgB,CAAkB;AAC1DhB,EAAe,SAAS,gBAAgBiB,CAAkB;AAC1DjB,EAAe,SAAS,kBAAkBkB,CAAoB;AAC9DlB,EAAe,SAAS,sBAAsBmB,CAAwB;AACtEnB,EAAe,SAAS,iBAAiBoB,CAAmB;AAC5DpB,EAAe,SAAS,mBAAmBqB,CAAqB;AAChErB,EAAe,SAAS,gBAAgBsB,CAAkB;AAC1DtB,EAAe,SAAS,kBAAkBuB,CAAoB;AAC9DvB,EAAe,SAAS,mBAAmBwB,CAAqB;AAChExB,EAAe,SAAS,gBAAgByB,CAAkB;"}
@@ -7,7 +7,7 @@ export type { TypographyConfig } from '../shared/typography';
7
7
  /**
8
8
  * Tipos de blocos disponíveis
9
9
  */
10
- export type BlockType = "container" | "stack" | "grid" | "box" | "spacer" | "heading" | "text" | "image" | "button" | "link" | "divider" | "badge" | "icon" | "avatar" | "video" | "socialLinks" | "card" | "section" | "hero" | "feature" | "featureGrid" | "pricing" | "pricingCard" | "testimonial" | "testimonialGrid" | "faq" | "faqItem" | "cta" | "stats" | "statItem" | "logoCloud" | "navbar" | "footer" | "countdown" | "carousel" | "blogCard" | "blogCardGrid" | "teamCard" | "teamGrid" | "courseCardGrid" | "categoryCardGrid" | "blogPostCard" | "blogPostGrid" | "blogPostDetail" | "blogCategoryFilter" | "blogSearchBar" | "productShowcase" | "aboutSection" | "contactSection" | "form" | "input" | "textarea" | "formSelect";
10
+ export type BlockType = "container" | "stack" | "grid" | "box" | "spacer" | "heading" | "text" | "image" | "button" | "link" | "divider" | "badge" | "icon" | "avatar" | "video" | "socialLinks" | "card" | "section" | "hero" | "feature" | "featureGrid" | "pricing" | "pricingCard" | "testimonial" | "testimonialGrid" | "faq" | "faqItem" | "cta" | "stats" | "statItem" | "logoCloud" | "navbar" | "footer" | "countdown" | "carousel" | "blogCard" | "blogCardGrid" | "teamCard" | "teamGrid" | "courseCardGrid" | "categoryCardGrid" | "blogPostCard" | "blogPostGrid" | "blogPostDetail" | "blogCategoryFilter" | "blogSearchBar" | "blogRecentPosts" | "blogTagCloud" | "productShowcase" | "aboutSection" | "contactSection" | "form" | "input" | "textarea" | "formSelect";
11
11
  /**
12
12
  * Props base de um bloco
13
13
  */
@@ -51,6 +51,8 @@ export interface GridBlock extends BlockBase {
51
51
  md?: number;
52
52
  lg?: number;
53
53
  };
54
+ /** CSS grid-template-columns override (ex: "1fr 320px", "2fr 1fr"). Tem prioridade sobre cols. */
55
+ colTemplate?: string;
54
56
  gap?: string;
55
57
  children?: Block[];
56
58
  };
@@ -889,6 +891,10 @@ export interface BlogPostGridBlock extends BlockBase {
889
891
  showViewAll?: boolean;
890
892
  viewAllText?: string;
891
893
  viewAllHref?: string;
894
+ /** Pagination — set by content hydration, not user-editable */
895
+ currentPage?: number;
896
+ totalPages?: number;
897
+ paginationBaseUrl?: string;
892
898
  };
893
899
  }
894
900
  /**
@@ -913,6 +919,12 @@ export interface BlogPostDetailBlock extends BlockBase {
913
919
  showTags?: boolean;
914
920
  showReadingTime?: boolean;
915
921
  contentMaxWidth?: string;
922
+ /** Nome do autor (populado pela hydration, editável no admin) */
923
+ authorName?: string;
924
+ /** Avatar URL do autor */
925
+ authorAvatar?: string;
926
+ /** Bio curta do autor */
927
+ authorBio?: string;
916
928
  metaTitle?: string;
917
929
  metaDescription?: string;
918
930
  ogImage?: string;
@@ -956,6 +968,49 @@ export interface BlogSearchBarBlock extends BlockBase {
956
968
  filterDate?: boolean;
957
969
  };
958
970
  }
971
+ /**
972
+ * BlogRecentPosts - Widget com os posts mais recentes do blog
973
+ */
974
+ export interface BlogRecentPostsBlock extends BlockBase {
975
+ type: "blogRecentPosts";
976
+ props: {
977
+ /** Título do widget (ex: "Posts Recentes") */
978
+ title?: string;
979
+ /** Quantidade de posts a exibir */
980
+ count?: number;
981
+ /** Posts hidratados pela contentHydration */
982
+ posts?: Array<{
983
+ title: string;
984
+ slug: string;
985
+ date?: string;
986
+ image?: string;
987
+ category?: string;
988
+ }>;
989
+ /** Mostrar miniatura */
990
+ showThumbnail?: boolean;
991
+ /** Mostrar data */
992
+ showDate?: boolean;
993
+ /** Mostrar badge de categoria */
994
+ showCategory?: boolean;
995
+ };
996
+ }
997
+ /**
998
+ * BlogTagCloud - Widget com nuvem de tags do blog
999
+ */
1000
+ export interface BlogTagCloudBlock extends BlockBase {
1001
+ type: "blogTagCloud";
1002
+ props: {
1003
+ /** Título do widget (ex: "Tags") */
1004
+ title?: string;
1005
+ /** Tags hidratadas pela contentHydration — array de {name, count} */
1006
+ tags?: Array<{
1007
+ name: string;
1008
+ count: number;
1009
+ }>;
1010
+ /** Estilo: "badges" | "list" */
1011
+ variant?: "badges" | "list";
1012
+ };
1013
+ }
959
1014
  /**
960
1015
  * ProductShowcase - Seção de produtos com layout alternado
961
1016
  */
@@ -1107,7 +1162,7 @@ export interface FormSelectBlock extends BlockBase {
1107
1162
  /**
1108
1163
  * Union type de todos os blocos
1109
1164
  */
1110
- export type Block = ContainerBlock | StackBlock | GridBlock | BoxBlock | SpacerBlock | HeadingBlock | TextBlock | ImageBlock | ButtonBlock | LinkBlock | DividerBlock | BadgeBlock | IconBlock | AvatarBlock | VideoBlock | SocialLinksBlock | CardBlock | SectionBlock | HeroBlock | FeatureBlock | FeatureGridBlock | PricingBlock | PricingCardBlock | TestimonialBlock | TestimonialGridBlock | FaqBlock | FaqItemBlock | CtaBlock | StatsBlock | StatItemBlock | LogoCloudBlock | NavbarBlock | FooterBlock | CountdownBlock | CarouselBlock | BlogCardBlock | BlogCardGridBlock | TeamCardBlock | TeamGridBlock | CourseCardGridBlock | CategoryCardGridBlock | BlogPostCardBlock | BlogPostGridBlock | BlogPostDetailBlock | BlogCategoryFilterBlock | BlogSearchBarBlock | ProductShowcaseBlock | AboutSectionBlock | ContactSectionBlock | FormBlock | InputBlock | TextareaBlock | FormSelectBlock;
1165
+ export type Block = ContainerBlock | StackBlock | GridBlock | BoxBlock | SpacerBlock | HeadingBlock | TextBlock | ImageBlock | ButtonBlock | LinkBlock | DividerBlock | BadgeBlock | IconBlock | AvatarBlock | VideoBlock | SocialLinksBlock | CardBlock | SectionBlock | HeroBlock | FeatureBlock | FeatureGridBlock | PricingBlock | PricingCardBlock | TestimonialBlock | TestimonialGridBlock | FaqBlock | FaqItemBlock | CtaBlock | StatsBlock | StatItemBlock | LogoCloudBlock | NavbarBlock | FooterBlock | CountdownBlock | CarouselBlock | BlogCardBlock | BlogCardGridBlock | TeamCardBlock | TeamGridBlock | CourseCardGridBlock | CategoryCardGridBlock | BlogPostCardBlock | BlogPostGridBlock | BlogPostDetailBlock | BlogCategoryFilterBlock | BlogSearchBarBlock | BlogRecentPostsBlock | BlogTagCloudBlock | ProductShowcaseBlock | AboutSectionBlock | ContactSectionBlock | FormBlock | InputBlock | TextareaBlock | FormSelectBlock;
1111
1166
  /**
1112
1167
  * Utility type: extract the block interface for a given BlockType
1113
1168
  */