@brunoalz/smartgesti-site-editor 1.5.2 → 1.7.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 (80) hide show
  1. package/dist/editor/LandingPageEditor.d.ts.map +1 -1
  2. package/dist/editor/LandingPageEditor.js +199 -185
  3. package/dist/editor/LandingPageEditor.js.map +1 -1
  4. package/dist/editor/PropertyEditor/VariationSelector.d.ts +1 -1
  5. package/dist/editor/PropertyEditor/VariationSelector.d.ts.map +1 -1
  6. package/dist/editor/PropertyEditor/VariationSelector.js +262 -93
  7. package/dist/editor/PropertyEditor/VariationSelector.js.map +1 -1
  8. package/dist/engine/export/exporters/layout/GridExporter.d.ts.map +1 -1
  9. package/dist/engine/export/exporters/layout/GridExporter.js +47 -31
  10. package/dist/engine/export/exporters/layout/GridExporter.js.map +1 -1
  11. package/dist/engine/export/exporters/layout/StackExporter.d.ts.map +1 -1
  12. package/dist/engine/export/exporters/layout/StackExporter.js +17 -16
  13. package/dist/engine/export/exporters/layout/StackExporter.js.map +1 -1
  14. package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts.map +1 -1
  15. package/dist/engine/export/exporters/sections/BlogPostExporters.js +246 -186
  16. package/dist/engine/export/exporters/sections/BlogPostExporters.js.map +1 -1
  17. package/dist/engine/plugins/builtin/blog/manifest.d.ts.map +1 -1
  18. package/dist/engine/plugins/builtin/blog/manifest.js +65 -47
  19. package/dist/engine/plugins/builtin/blog/manifest.js.map +1 -1
  20. package/dist/engine/presets/blogVariations.d.ts +51 -0
  21. package/dist/engine/presets/blogVariations.d.ts.map +1 -0
  22. package/dist/engine/presets/blogVariations.js +267 -0
  23. package/dist/engine/presets/blogVariations.js.map +1 -0
  24. package/dist/engine/registry/blocks/layout/grid.d.ts.map +1 -1
  25. package/dist/engine/registry/blocks/layout/grid.js +84 -42
  26. package/dist/engine/registry/blocks/layout/grid.js.map +1 -1
  27. package/dist/engine/registry/blocks/layout/stack.d.ts.map +1 -1
  28. package/dist/engine/registry/blocks/layout/stack.js +14 -13
  29. package/dist/engine/registry/blocks/layout/stack.js.map +1 -1
  30. package/dist/engine/registry/blocks/sections/blogCategoryFilter.d.ts.map +1 -1
  31. package/dist/engine/registry/blocks/sections/blogCategoryFilter.js +62 -5
  32. package/dist/engine/registry/blocks/sections/blogCategoryFilter.js.map +1 -1
  33. package/dist/engine/registry/blocks/sections/blogPostDetail.d.ts.map +1 -1
  34. package/dist/engine/registry/blocks/sections/blogPostDetail.js +16 -4
  35. package/dist/engine/registry/blocks/sections/blogPostDetail.js.map +1 -1
  36. package/dist/engine/registry/blocks/sections/blogRecentPosts.d.ts.map +1 -1
  37. package/dist/engine/registry/blocks/sections/blogRecentPosts.js +62 -5
  38. package/dist/engine/registry/blocks/sections/blogRecentPosts.js.map +1 -1
  39. package/dist/engine/registry/blocks/sections/blogSearchBar.d.ts.map +1 -1
  40. package/dist/engine/registry/blocks/sections/blogSearchBar.js +23 -1
  41. package/dist/engine/registry/blocks/sections/blogSearchBar.js.map +1 -1
  42. package/dist/engine/registry/blocks/sections/blogTagCloud.d.ts.map +1 -1
  43. package/dist/engine/registry/blocks/sections/blogTagCloud.js +63 -6
  44. package/dist/engine/registry/blocks/sections/blogTagCloud.js.map +1 -1
  45. package/dist/engine/render/renderers/layout/GridRenderer.d.ts.map +1 -1
  46. package/dist/engine/render/renderers/layout/GridRenderer.js +51 -18
  47. package/dist/engine/render/renderers/layout/GridRenderer.js.map +1 -1
  48. package/dist/engine/render/renderers/layout/StackRenderer.d.ts.map +1 -1
  49. package/dist/engine/render/renderers/layout/StackRenderer.js +30 -25
  50. package/dist/engine/render/renderers/layout/StackRenderer.js.map +1 -1
  51. package/dist/engine/render/renderers/sections/BlogCategoryFilterRenderer.d.ts.map +1 -1
  52. package/dist/engine/render/renderers/sections/BlogCategoryFilterRenderer.js +157 -132
  53. package/dist/engine/render/renderers/sections/BlogCategoryFilterRenderer.js.map +1 -1
  54. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js +17 -17
  55. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js.map +1 -1
  56. package/dist/engine/render/renderers/sections/BlogRecentPostsRenderer.d.ts.map +1 -1
  57. package/dist/engine/render/renderers/sections/BlogRecentPostsRenderer.js +168 -136
  58. package/dist/engine/render/renderers/sections/BlogRecentPostsRenderer.js.map +1 -1
  59. package/dist/engine/render/renderers/sections/BlogSearchBarRenderer.d.ts.map +1 -1
  60. package/dist/engine/render/renderers/sections/BlogSearchBarRenderer.js +59 -102
  61. package/dist/engine/render/renderers/sections/BlogSearchBarRenderer.js.map +1 -1
  62. package/dist/engine/render/renderers/sections/BlogTagCloudRenderer.d.ts.map +1 -1
  63. package/dist/engine/render/renderers/sections/BlogTagCloudRenderer.js +158 -122
  64. package/dist/engine/render/renderers/sections/BlogTagCloudRenderer.js.map +1 -1
  65. package/dist/engine/schema/siteDocument.d.ts +57 -1
  66. package/dist/engine/schema/siteDocument.d.ts.map +1 -1
  67. package/dist/engine/schema/siteDocument.js.map +1 -1
  68. package/dist/engine/shared/hoverEffects/colorUtils.d.ts +2 -1
  69. package/dist/engine/shared/hoverEffects/colorUtils.d.ts.map +1 -1
  70. package/dist/engine/shared/hoverEffects/colorUtils.js +16 -12
  71. package/dist/engine/shared/hoverEffects/colorUtils.js.map +1 -1
  72. package/dist/engine/shared/widgetStyles.d.ts +9 -0
  73. package/dist/engine/shared/widgetStyles.d.ts.map +1 -0
  74. package/dist/engine/shared/widgetStyles.js +13 -0
  75. package/dist/engine/shared/widgetStyles.js.map +1 -0
  76. package/dist/index.d.ts +2 -0
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +84 -71
  79. package/dist/index.js.map +1 -1
  80. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BlogPostExporters.js","sources":["../../../../../src/engine/export/exporters/sections/BlogPostExporters.ts"],"sourcesContent":["/**\n * Blog Post Exporters\n * BlogPostCard, BlogPostGrid, BlogPostDetail\n * Mobile-first responsive layouts for blog plugin blocks\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport {\n resolveResponsiveColumns,\n generateResponsiveGridStyles,\n} from \"../../shared/responsiveGridHelper\";\n\n// ---------------------------------------------------------------------------\n// BlogPostCard\n// ---------------------------------------------------------------------------\n\nexport function exportBlogPostCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n excerpt,\n image,\n date,\n category,\n authorName,\n authorAvatar,\n readingTime,\n linkHref,\n linkText,\n variant = \"default\",\n showImage = true,\n showCategory = true,\n showDate = true,\n showAuthor = false,\n showReadingTime = false,\n } = (block as any).props;\n\n // ---------- variant: horizontal ----------\n if (variant === \"horizontal\") {\n const imgHtml =\n showImage && image\n ? `<div style=\"width: 260px; min-height: 180px; flex-shrink: 0; background-image: url(${escapeHtml(image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const metaParts: string[] = [];\n if (showCategory && category) metaParts.push(escapeHtml(category));\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${metaParts.join(\" &middot; \")}</p>`\n : \"\";\n\n const authorHtml =\n showAuthor && authorName\n ? `<div style=\"display: flex; align-items: center; gap: 0.5rem; margin-top: auto; padding-top: 0.75rem;\">${\n authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 28px; height: 28px; border-radius: 50%; object-fit: cover;\" />`\n : \"\"\n }<span style=\"font-size: 0.8rem; color: var(--sg-muted-text);\">${escapeHtml(authorName)}</span></div>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-card\" style=\"display: flex; background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\" data-variant=\"horizontal\">${imgHtml}<div style=\"padding: 1.25rem; display: flex; flex-direction: column; flex: 1;\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 0.75rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}${authorHtml}</div></article>`;\n }\n\n // ---------- variant: minimal ----------\n if (variant === \"minimal\") {\n const metaParts: string[] = [];\n if (showCategory && category) metaParts.push(escapeHtml(category));\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${metaParts.join(\" &middot; \")}</p>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-card\" style=\"padding: 1.25rem 0; border-bottom: 1px solid var(--sg-border, #e5e7eb);\" data-variant=\"minimal\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.25rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 0.5rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}</article>`;\n }\n\n // ---------- variant: default ----------\n const imgHtml =\n showImage && image\n ? `<div style=\"height: 200px; background-image: url(${escapeHtml(image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const metaParts: string[] = [];\n if (showCategory && category) metaParts.push(escapeHtml(category));\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${metaParts.join(\" &middot; \")}</p>`\n : \"\";\n\n const authorHtml =\n showAuthor && authorName\n ? `<div style=\"display: flex; align-items: center; gap: 0.5rem; margin-top: 1rem;\">${\n authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 32px; height: 32px; border-radius: 50%; object-fit: cover;\" />`\n : \"\"\n }<span style=\"font-size: 0.8rem; color: var(--sg-muted-text);\">${escapeHtml(authorName)}</span></div>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-card\" style=\"background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\" data-variant=\"default\">${imgHtml}<div style=\"padding: 1.5rem;\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}${authorHtml}</div></article>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogPostGrid\n// ---------------------------------------------------------------------------\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 */\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\n/**\n * Generates pagination HTML nav element.\n */\nfunction generatePaginationHtml(\n currentPage: number,\n totalPages: number,\n paginationBaseUrl: string,\n): string {\n if (totalPages <= 1) return \"\";\n\n const btnBase = \"display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:var(--sg-card-radius, 0.5rem);text-decoration:none;font-size:0.875rem;\";\n const borderNormal = \"border:1px solid var(--sg-border, #e5e7eb);\";\n const borderActive = \"border:1px solid var(--sg-primary);\";\n\n // Previous\n const prevHtml = currentPage > 1\n ? `<a href=\"${escapeHtml(buildPageUrl(paginationBaseUrl, currentPage - 1))}\" style=\"${btnBase}${borderNormal}color:var(--sg-text);\">&lsaquo;</a>`\n : `<span style=\"${btnBase}${borderNormal}color:var(--sg-muted-text);opacity:0.4;\">&lsaquo;</span>`;\n\n // Page numbers\n const pageNumbers = getPageNumbers(currentPage, totalPages);\n const pagesHtml = pageNumbers.map((page, idx) => {\n if (page === -1) {\n return `<span style=\"${btnBase}color:var(--sg-muted-text);\">&hellip;</span>`;\n }\n const isActive = page === currentPage;\n return `<a href=\"${escapeHtml(buildPageUrl(paginationBaseUrl, page))}\" style=\"${btnBase}${isActive ? borderActive : borderNormal}background-color:${isActive ? \"var(--sg-primary)\" : \"transparent\"};color:${isActive ? \"var(--sg-primary-text, #fff)\" : \"var(--sg-text)\"};font-weight:${isActive ? \"600\" : \"400\"};\">${page}</a>`;\n }).join(\"\");\n\n // Next\n const nextHtml = currentPage < totalPages\n ? `<a href=\"${escapeHtml(buildPageUrl(paginationBaseUrl, currentPage + 1))}\" style=\"${btnBase}${borderNormal}color:var(--sg-text);\">&rsaquo;</a>`\n : `<span style=\"${btnBase}${borderNormal}color:var(--sg-muted-text);opacity:0.4;\">&rsaquo;</span>`;\n\n return `<nav data-block-group=\"Paginação\" style=\"display:flex;justify-content:center;align-items:center;gap:0.375rem;margin-top:2.5rem;\">${prevHtml}${pagesHtml}${nextHtml}</nav>`;\n}\n\nexport function exportBlogPostGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n cards = [],\n showViewAll = false,\n viewAllText,\n viewAllHref,\n currentPage = 1,\n totalPages = 1,\n paginationBaseUrl = \"#\",\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) -> 2 cols (tablet) -> N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"blog-post-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n \"2rem\",\n );\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Cabeçalho\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text);\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportBlogPostGrid requires renderChild function\");\n }\n\n const cardsHtml = cards.length > 0\n ? cards\n .map((c: any, i: number) =>\n renderChild(\n {\n id: `${block.id}-card-${i}`,\n type: \"blogPostCard\",\n props: c,\n } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\")\n : `<div style=\"grid-column: 1 / -1; text-align: center; padding: 3rem 1rem; color: var(--sg-muted-text); border: 2px dashed var(--sg-border, #e5e7eb); border-radius: var(--sg-card-radius, 0.5rem);\"><p style=\"font-size: 1rem; margin-bottom: 0.5rem;\">Nenhum post encontrado</p><p style=\"font-size: 0.875rem;\">Os posts aparecerão aqui quando forem publicados.</p></div>`;\n\n const viewAllHtml =\n showViewAll && viewAllText\n ? `<div data-block-group=\"Rodapé\" style=\"text-align: center; margin-top: 2.5rem;\"><a href=\"${escapeHtml(viewAllHref || \"#\")}\" style=\"display: inline-block; padding: 0.75rem 1.5rem; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); font-weight: 600; border-radius: var(--sg-button-radius); text-decoration: none;\">${escapeHtml(viewAllText)}</a></div>`\n : \"\";\n\n const paginationHtml = generatePaginationHtml(currentPage, totalPages, paginationBaseUrl);\n\n return `<style>${mediaQueries}</style><section ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${cardsHtml}</div>${viewAllHtml}${paginationHtml}</div></section>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogPostDetail\n// ---------------------------------------------------------------------------\n\nexport function exportBlogPostDetail(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n content,\n featuredImage,\n date,\n category,\n readingTime,\n tags = [],\n showFeaturedImage = true,\n showAuthor = true,\n authorVariant = \"inline\",\n showDate = true,\n showTags = true,\n showReadingTime = true,\n contentMaxWidth = \"720px\",\n authorName,\n authorAvatar,\n authorBio,\n } = (block as any).props;\n\n const displayName = escapeHtml(authorName || \"Nome do Autor\");\n const displayBio = authorBio ? escapeHtml(authorBio) : \"\";\n\n // Featured image banner\n const featuredImageHtml =\n showFeaturedImage && featuredImage\n ? `<div data-block-group=\"Mídia\" style=\"width: 100%; height: 400px; background-image: url(${escapeHtml(featuredImage)}); background-size: cover; background-position: center; border-radius: var(--sg-card-radius); margin-bottom: 2rem;\"></div>`\n : \"\";\n\n // Category badge\n const categoryHtml = category\n ? `<span style=\"display: inline-block; padding: 0.25rem 0.75rem; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); border-radius: 999px; font-size: 0.75rem; font-weight: 600; margin-bottom: 1rem;\">${escapeHtml(category)}</span>`\n : \"\";\n\n // Meta line (date + reading time)\n const metaParts: string[] = [];\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1.5rem;\">${metaParts.join(\" &middot; \")}</p>`\n : \"\";\n\n // Title\n const titleHtml = `<h1 data-block-group=\"Conteúdo\" style=\"font-size: var(--sg-heading-h1, 2.25rem); font-weight: 700; margin-bottom: 0.75rem; line-height: 1.2;\">${escapeHtml(title)}</h1>`;\n\n // Content — trusted HTML from backend, not escaped\n const contentHtml = content\n ? `<div class=\"sg-blog-post-content\" style=\"font-size: 1.0625rem; line-height: 1.75; color: var(--sg-text);\">${content}</div>`\n : \"\";\n\n // Author avatar — real image or placeholder\n const avatarLargeHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${displayName}\" style=\"width:56px;height:56px;border-radius:50%;object-fit:cover;flex-shrink:0;\" />`\n : `<div style=\"width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg, var(--sg-primary, #6366f1) 0%, #818cf8 100%);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--sg-primary-text, #fff);font-size:1.5rem;font-weight:700;\">${displayName.charAt(0).toUpperCase()}</div>`;\n const avatarSmallHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${displayName}\" style=\"width:40px;height:40px;border-radius:50%;object-fit:cover;flex-shrink:0;\" />`\n : `<div style=\"width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg, var(--sg-primary, #6366f1) 0%, #818cf8 100%);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--sg-primary-text, #fff);font-size:1.1rem;font-weight:700;\">${displayName.charAt(0).toUpperCase()}</div>`;\n\n let authorHtml = \"\";\n if (showAuthor) {\n const bioHtml = displayBio ? `<p style=\"color:var(--sg-muted-text);font-size:0.875rem;margin:0.25rem 0 0;\">${displayBio}</p>` : \"\";\n if (authorVariant === \"card\") {\n authorHtml = `<div data-block-group=\"Autor\" style=\"display:flex;align-items:flex-start;gap:1rem;margin-top:3rem;padding:1.25rem;border-radius:var(--sg-card-radius, 0.75rem);background-color:var(--sg-surface, #f9fafb);\">${avatarLargeHtml}<div><div style=\"font-size:0.75rem;color:var(--sg-muted-text);text-transform:uppercase;letter-spacing:0.05em;margin-bottom:0.125rem;\">Escrito por</div><div style=\"font-weight:600;font-size:1rem;\">${displayName}</div>${bioHtml}</div></div>`;\n } else if (authorVariant === \"minimal\") {\n authorHtml = `<p data-block-group=\"Autor\" style=\"margin-top:3rem;padding-top:2rem;border-top:1px solid var(--sg-border, #e5e7eb);color:var(--sg-muted-text);font-size:0.9375rem;\">Escrito por <span style=\"font-weight:600;color:var(--sg-text);\">${displayName}</span></p>`;\n } else {\n // inline (default)\n authorHtml = `<div data-block-group=\"Autor\" style=\"display:flex;align-items:center;gap:0.75rem;margin-top:3rem;padding-top:2rem;border-top:1px solid var(--sg-border, #e5e7eb);\">${avatarSmallHtml}<div><div style=\"font-size:0.75rem;color:var(--sg-muted-text);\">Escrito por</div><div style=\"font-weight:600;font-size:0.9375rem;\">${displayName}</div></div></div>`;\n }\n }\n\n // Tags\n const tagsHtml =\n showTags && tags.length > 0\n ? `<div data-block-group=\"Visibilidade\" style=\"margin-top: 2rem; display: flex; flex-wrap: wrap; gap: 0.5rem;\">${tags\n .map(\n (tag: string) =>\n `<span style=\"display: inline-block; padding: 0.25rem 0.75rem; background-color: var(--sg-surface, #f3f4f6); color: var(--sg-text); border-radius: 999px; font-size: 0.75rem;\">${escapeHtml(tag)}</span>`,\n )\n .join(\"\")}</div>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-detail\" style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: ${escapeHtml(contentMaxWidth)}; margin: 0 auto; padding: 0 1rem;\">${featuredImageHtml}${categoryHtml}${titleHtml}${metaHtml}${contentHtml}${authorHtml}${tagsHtml}</div></article>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogCategoryFilter\n// ---------------------------------------------------------------------------\n\nexport function exportBlogCategoryFilter(\n block: Block,\n _depth: number,\n _basePath?: string,\n _theme?: ThemeTokens,\n): string {\n const {\n title,\n categories = [],\n variant = \"chips\",\n showCount = true,\n showAll = true,\n allLabel = \"Todas\",\n activeCategory,\n filterUrl = \"#\",\n } = (block as any).props;\n\n const buildHref = (slug?: string) => {\n if (!slug) return escapeHtml(filterUrl);\n return escapeHtml(`${filterUrl}?categoria=${slug}`);\n };\n\n let itemsHtml = \"\";\n\n if (variant === \"chips\") {\n const allChip = showAll\n ? `<a href=\"${escapeHtml(filterUrl)}\" style=\"display:inline-flex;align-items:center;gap:0.375rem;padding:0.375rem 0.875rem;border-radius:9999px;font-size:0.875rem;font-weight:500;text-decoration:none;background-color:${!activeCategory ? \"var(--sg-primary)\" : \"var(--sg-surface, #f3f4f6)\"};color:${!activeCategory ? \"var(--sg-primary-text, #fff)\" : \"var(--sg-text)\"};\">${escapeHtml(allLabel)}</a>`\n : \"\";\n\n const chips = categories\n .map((cat: any) => {\n const isActive = activeCategory === cat.slug;\n const countHtml = showCount && cat.count != null ? `<span style=\"font-size:0.75rem;opacity:0.7;\">(${cat.count})</span>` : \"\";\n return `<a href=\"${buildHref(cat.slug)}\" style=\"display:inline-flex;align-items:center;gap:0.375rem;padding:0.375rem 0.875rem;border-radius:9999px;font-size:0.875rem;font-weight:500;text-decoration:none;background-color:${isActive ? \"var(--sg-primary)\" : \"var(--sg-surface, #f3f4f6)\"};color:${isActive ? \"var(--sg-primary-text, #fff)\" : \"var(--sg-text)\"};\">${escapeHtml(cat.name)}${countHtml}</a>`;\n })\n .join(\"\");\n\n itemsHtml = `<div style=\"display:flex;flex-wrap:wrap;gap:0.5rem;\">${allChip}${chips}</div>`;\n } else if (variant === \"buttons\") {\n const allBtn = showAll\n ? `<a href=\"${escapeHtml(filterUrl)}\" style=\"display:inline-flex;align-items:center;gap:0.375rem;padding:0.5rem 1rem;border-radius:var(--sg-card-radius, 0.5rem);font-size:0.875rem;font-weight:500;text-decoration:none;border:1px solid ${!activeCategory ? \"var(--sg-primary)\" : \"var(--sg-border, #e5e7eb)\"};background-color:${!activeCategory ? \"var(--sg-primary)\" : \"transparent\"};color:${!activeCategory ? \"var(--sg-primary-text, #fff)\" : \"var(--sg-text)\"};\">${escapeHtml(allLabel)}</a>`\n : \"\";\n\n const btns = categories\n .map((cat: any) => {\n const isActive = activeCategory === cat.slug;\n const countHtml = showCount && cat.count != null ? `<span style=\"font-size:0.75rem;opacity:0.7;\">(${cat.count})</span>` : \"\";\n return `<a href=\"${buildHref(cat.slug)}\" style=\"display:inline-flex;align-items:center;gap:0.375rem;padding:0.5rem 1rem;border-radius:var(--sg-card-radius, 0.5rem);font-size:0.875rem;font-weight:500;text-decoration:none;border:1px solid ${isActive ? \"var(--sg-primary)\" : \"var(--sg-border, #e5e7eb)\"};background-color:${isActive ? \"var(--sg-primary)\" : \"transparent\"};color:${isActive ? \"var(--sg-primary-text, #fff)\" : \"var(--sg-text)\"};\">${escapeHtml(cat.name)}${countHtml}</a>`;\n })\n .join(\"\");\n\n itemsHtml = `<div style=\"display:flex;flex-wrap:wrap;gap:0.5rem;\">${allBtn}${btns}</div>`;\n } else {\n // list variant\n const allItem = showAll\n ? `<a href=\"${escapeHtml(filterUrl)}\" style=\"display:flex;align-items:center;justify-content:space-between;padding:0.625rem 0.75rem;border-radius:var(--sg-card-radius, 0.5rem);font-size:0.875rem;font-weight:${!activeCategory ? \"600\" : \"400\"};text-decoration:none;background-color:${!activeCategory ? \"var(--sg-surface, #f3f4f6)\" : \"transparent\"};color:${!activeCategory ? \"var(--sg-primary)\" : \"var(--sg-text)\"};\">${escapeHtml(allLabel)}</a>`\n : \"\";\n\n const items = categories\n .map((cat: any) => {\n const isActive = activeCategory === cat.slug;\n const countHtml = showCount && cat.count != null\n ? `<span style=\"font-size:0.75rem;color:var(--sg-muted-text);background-color:var(--sg-surface, #f3f4f6);padding:0.125rem 0.5rem;border-radius:9999px;\">${cat.count}</span>`\n : \"\";\n return `<a href=\"${buildHref(cat.slug)}\" style=\"display:flex;align-items:center;justify-content:space-between;padding:0.625rem 0.75rem;border-radius:var(--sg-card-radius, 0.5rem);font-size:0.875rem;font-weight:${isActive ? \"600\" : \"400\"};text-decoration:none;background-color:${isActive ? \"var(--sg-surface, #f3f4f6)\" : \"transparent\"};color:${isActive ? \"var(--sg-primary)\" : \"var(--sg-text)\"};\">${escapeHtml(cat.name)}${countHtml}</a>`;\n })\n .join(\"\");\n\n itemsHtml = `<div style=\"display:flex;flex-direction:column;gap:0.25rem;\">${allItem}${items}</div>`;\n }\n\n const titleHtml = title\n ? `<h3 style=\"font-size:1rem;font-weight:600;margin-bottom:1rem;color:var(--sg-text);\">${escapeHtml(title)}</h3>`\n : \"\";\n\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"padding:1.5rem 0;background-color:var(--sg-bg);\"><div style=\"max-width:1200px;margin:0 auto;padding:0 1rem;\">${titleHtml}${itemsHtml}</div></div>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogSearchBar\n// ---------------------------------------------------------------------------\n\nexport function exportBlogSearchBar(\n block: Block,\n _depth: number,\n _basePath?: string,\n _theme?: ThemeTokens,\n): string {\n const {\n placeholder = \"Buscar posts...\",\n variant = \"simple\",\n showIcon = true,\n searchUrl = \"#\",\n filterCategories = false,\n filterTags = false,\n filterDate = false,\n } = (block as any).props;\n\n const searchIconSvg = showIcon\n ? `<svg style=\"position:absolute;left:0.75rem;top:50%;transform:translateY(-50%);width:1.25rem;height:1.25rem;color:var(--sg-muted-text);\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.35-4.35\" stroke-linecap=\"round\"/></svg>`\n : \"\";\n\n const inputPadding = showIcon ? \"padding-left:2.5rem;\" : \"\";\n\n if (variant === \"expanded\") {\n const inputHtml = `<div style=\"position:relative;width:100%;max-width:600px;\">${searchIconSvg}<input type=\"search\" name=\"busca\" placeholder=\"${escapeHtml(placeholder)}\" style=\"width:100%;${inputPadding}padding-right:1rem;padding-top:0.875rem;padding-bottom:0.875rem;font-size:1.0625rem;border:2px solid var(--sg-border, #e5e7eb);border-radius:var(--sg-card-radius, 0.5rem);background-color:var(--sg-bg);color:var(--sg-text);outline:none;\" /></div>`;\n\n return `<form ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" action=\"${escapeHtml(searchUrl)}\" method=\"get\" style=\"padding:2rem 0;background-color:var(--sg-bg);\"><div style=\"max-width:1200px;margin:0 auto;padding:0 1rem;display:flex;justify-content:center;\">${inputHtml}</div></form>`;\n }\n\n if (variant === \"with-filters\") {\n const inputHtml = `<div style=\"position:relative;flex:1;min-width:200px;\">${searchIconSvg}<input type=\"search\" name=\"busca\" placeholder=\"${escapeHtml(placeholder)}\" style=\"width:100%;${inputPadding}padding-right:1rem;padding-top:0.625rem;padding-bottom:0.625rem;font-size:0.875rem;border:1px solid var(--sg-border, #e5e7eb);border-radius:var(--sg-card-radius, 0.5rem);background-color:var(--sg-bg);color:var(--sg-text);outline:none;\" /></div>`;\n\n const filters: string[] = [];\n if (filterCategories) {\n filters.push(`<select name=\"categoria\" style=\"padding:0.625rem 0.75rem;font-size:0.875rem;border:1px solid var(--sg-border, #e5e7eb);border-radius:var(--sg-card-radius, 0.5rem);background-color:var(--sg-bg);color:var(--sg-text);\"><option value=\"\">Categoria</option></select>`);\n }\n if (filterTags) {\n filters.push(`<select name=\"tag\" style=\"padding:0.625rem 0.75rem;font-size:0.875rem;border:1px solid var(--sg-border, #e5e7eb);border-radius:var(--sg-card-radius, 0.5rem);background-color:var(--sg-bg);color:var(--sg-text);\"><option value=\"\">Tag</option></select>`);\n }\n if (filterDate) {\n filters.push(`<select name=\"periodo\" style=\"padding:0.625rem 0.75rem;font-size:0.875rem;border:1px solid var(--sg-border, #e5e7eb);border-radius:var(--sg-card-radius, 0.5rem);background-color:var(--sg-bg);color:var(--sg-text);\"><option value=\"\">Período</option></select>`);\n }\n\n return `<form ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" action=\"${escapeHtml(searchUrl)}\" method=\"get\" style=\"padding:1.5rem 0;background-color:var(--sg-bg);\"><div style=\"max-width:1200px;margin:0 auto;padding:0 1rem;display:flex;flex-wrap:wrap;gap:0.75rem;align-items:center;\">${inputHtml}${filters.join(\"\")}</div></form>`;\n }\n\n // simple variant\n const inputHtml = `<div style=\"position:relative;width:100%;max-width:400px;\">${searchIconSvg}<input type=\"search\" name=\"busca\" placeholder=\"${escapeHtml(placeholder)}\" style=\"width:100%;${inputPadding}padding-right:1rem;padding-top:0.625rem;padding-bottom:0.625rem;font-size:0.875rem;border:1px solid var(--sg-border, #e5e7eb);border-radius:var(--sg-card-radius, 0.5rem);background-color:var(--sg-bg);color:var(--sg-text);outline:none;\" /></div>`;\n\n return `<form ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" action=\"${escapeHtml(searchUrl)}\" method=\"get\" style=\"padding:1.5rem 0;background-color:var(--sg-bg);\"><div style=\"max-width:1200px;margin:0 auto;padding:0 1rem;\">${inputHtml}</div></form>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogRecentPosts\n// ---------------------------------------------------------------------------\n\nexport function exportBlogRecentPosts(\n block: Block,\n _depth: number,\n _basePath?: string,\n _theme?: ThemeTokens,\n): string {\n const {\n title = \"Posts Recentes\",\n posts = [],\n showThumbnail = true,\n showDate = true,\n showCategory = false,\n } = (block as any).props;\n\n const titleHtml = title\n ? `<div style=\"padding:1rem 1.25rem;border-bottom:1px solid var(--sg-border, #e5e7eb);\"><h3 style=\"font-size:1rem;font-weight:600;margin:0;color:var(--sg-text);\">${escapeHtml(title)}</h3></div>`\n : \"\";\n\n let contentHtml = \"\";\n if (posts.length === 0) {\n contentHtml = `<p style=\"padding:1.5rem 1.25rem;color:var(--sg-muted-text);font-size:0.875rem;text-align:center;margin:0;\">Nenhum post recente</p>`;\n } else {\n const itemsHtml = posts\n .map((post: any) => {\n const imgHtml =\n showThumbnail && post.image\n ? `<img src=\"${escapeHtml(post.image)}\" alt=\"${escapeHtml(post.title)}\" style=\"width:64px;height:64px;object-fit:cover;border-radius:var(--sg-card-radius, 0.5rem);flex-shrink:0;\" />`\n : \"\";\n\n const metaParts: string[] = [];\n if (showDate && post.date) metaParts.push(escapeHtml(post.date));\n if (showCategory && post.category) metaParts.push(`<span style=\"font-size:0.6875rem;color:var(--sg-primary);font-weight:600;text-transform:uppercase;letter-spacing:0.03em;\">${escapeHtml(post.category)}</span>`);\n const metaHtml = metaParts.length\n ? `<div style=\"display:flex;align-items:center;gap:0.5rem;margin-top:0.25rem;font-size:0.75rem;color:var(--sg-muted-text);\">${metaParts.join(\"\")}</div>`\n : \"\";\n\n return `<a href=\"/site/p/blog/${escapeHtml(post.slug)}\" style=\"display:flex;align-items:center;gap:0.75rem;padding:0.75rem 1.25rem;text-decoration:none;color:inherit;\">${imgHtml}<div style=\"flex:1;min-width:0;\"><div style=\"font-size:0.875rem;font-weight:500;color:var(--sg-text);line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;\">${escapeHtml(post.title)}</div>${metaHtml}</div></a>`;\n })\n .join(\"\");\n contentHtml = itemsHtml;\n }\n\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color:var(--sg-bg);border-radius:var(--sg-card-radius, 0.75rem);border:1px solid var(--sg-border, #e5e7eb);overflow:hidden;\">${titleHtml}<div style=\"padding:0.5rem 0;\">${contentHtml}</div></div>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogTagCloud\n// ---------------------------------------------------------------------------\n\nexport function exportBlogTagCloud(\n block: Block,\n _depth: number,\n _basePath?: string,\n _theme?: ThemeTokens,\n): string {\n const {\n title = \"Tags\",\n tags = [],\n variant = \"badges\",\n } = (block as any).props;\n\n const titleHtml = title\n ? `<div style=\"padding:1rem 1.25rem;border-bottom:1px solid var(--sg-border, #e5e7eb);\"><h3 style=\"font-size:1rem;font-weight:600;margin:0;color:var(--sg-text);\">${escapeHtml(title)}</h3></div>`\n : \"\";\n\n let contentHtml = \"\";\n if (tags.length === 0) {\n contentHtml = `<p style=\"color:var(--sg-muted-text);font-size:0.875rem;text-align:center;margin:0;\">Nenhuma tag encontrada</p>`;\n } else if (variant === \"badges\") {\n const badgesHtml = tags\n .map(\n (tag: any) =>\n `<span style=\"display:inline-flex;align-items:center;gap:0.375rem;padding:0.3rem 0.75rem;border-radius:9999px;font-size:0.8125rem;font-weight:500;background-color:var(--sg-surface, #f3f4f6);color:var(--sg-text);\">${escapeHtml(tag.name)}<span style=\"font-size:0.6875rem;color:var(--sg-muted-text);opacity:0.7;\">(${tag.count})</span></span>`,\n )\n .join(\"\");\n contentHtml = `<div style=\"display:flex;flex-wrap:wrap;gap:0.5rem;\">${badgesHtml}</div>`;\n } else {\n const listHtml = tags\n .map(\n (tag: any) =>\n `<div style=\"display:flex;align-items:center;justify-content:space-between;padding:0.5rem 0.75rem;border-radius:var(--sg-card-radius, 0.5rem);font-size:0.875rem;color:var(--sg-text);\"><span>${escapeHtml(tag.name)}</span><span style=\"font-size:0.75rem;color:var(--sg-muted-text);background-color:var(--sg-surface, #f3f4f6);padding:0.125rem 0.5rem;border-radius:9999px;\">${tag.count}</span></div>`,\n )\n .join(\"\");\n contentHtml = `<div style=\"display:flex;flex-direction:column;gap:0.25rem;\">${listHtml}</div>`;\n }\n\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color:var(--sg-bg);border-radius:var(--sg-card-radius, 0.75rem);border:1px solid var(--sg-border, #e5e7eb);overflow:hidden;\">${titleHtml}<div style=\"padding:1rem 1.25rem;\">${contentHtml}</div></div>`;\n}\n"],"names":["exportBlogPostCard","block","depth","basePath","theme","title","excerpt","image","date","category","authorName","authorAvatar","readingTime","linkHref","linkText","variant","showImage","showCategory","showDate","showAuthor","showReadingTime","imgHtml","escapeHtml","metaParts","metaHtml","authorHtml","linkHtml","dataBlockIdAttr","buildPageUrl","baseUrl","page","separator","getPageNumbers","current","total","_","i","pages","start","end","generatePaginationHtml","currentPage","totalPages","paginationBaseUrl","btnBase","borderNormal","borderActive","prevHtml","pagesHtml","idx","isActive","nextHtml","exportBlogPostGrid","renderChild","subtitle","columns","cards","showViewAll","viewAllText","viewAllHref","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","headerHtml","cardsHtml","c","viewAllHtml","paginationHtml","exportBlogPostDetail","content","featuredImage","tags","showFeaturedImage","authorVariant","showTags","contentMaxWidth","authorBio","displayName","displayBio","featuredImageHtml","categoryHtml","titleHtml","contentHtml","avatarLargeHtml","avatarSmallHtml","bioHtml","tagsHtml","tag","exportBlogCategoryFilter","_depth","_basePath","_theme","categories","showCount","showAll","allLabel","activeCategory","filterUrl","buildHref","slug","itemsHtml","allChip","chips","cat","countHtml","allBtn","btns","allItem","items","exportBlogSearchBar","placeholder","showIcon","searchUrl","filterCategories","filterTags","filterDate","searchIconSvg","inputPadding","inputHtml","filters","exportBlogRecentPosts","posts","showThumbnail","post","exportBlogTagCloud"],"mappings":"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"}
1
+ {"version":3,"file":"BlogPostExporters.js","sources":["../../../../../src/engine/export/exporters/sections/BlogPostExporters.ts"],"sourcesContent":["/**\n * Blog Post Exporters\n * BlogPostCard, BlogPostGrid, BlogPostDetail\n * Mobile-first responsive layouts for blog plugin blocks\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport {\n resolveResponsiveColumns,\n generateResponsiveGridStyles,\n} from \"../../shared/responsiveGridHelper\";\nimport { resolveWidgetShadow } from \"../../../shared/widgetStyles\";\nimport { generateLinkHoverStyles } from \"../../../shared/hoverEffects\";\n\n// ---------------------------------------------------------------------------\n// BlogPostCard\n// ---------------------------------------------------------------------------\n\nexport function exportBlogPostCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n excerpt,\n image,\n date,\n category,\n authorName,\n authorAvatar,\n readingTime,\n linkHref,\n linkText,\n variant = \"default\",\n showImage = true,\n showCategory = true,\n showDate = true,\n showAuthor = false,\n showReadingTime = false,\n } = (block as any).props;\n\n // ---------- variant: horizontal ----------\n if (variant === \"horizontal\") {\n const imgHtml =\n showImage && image\n ? `<div style=\"width: 260px; min-height: 180px; flex-shrink: 0; background-image: url(${escapeHtml(image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const metaParts: string[] = [];\n if (showCategory && category) metaParts.push(escapeHtml(category));\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${metaParts.join(\" &middot; \")}</p>`\n : \"\";\n\n const authorHtml =\n showAuthor && authorName\n ? `<div style=\"display: flex; align-items: center; gap: 0.5rem; margin-top: auto; padding-top: 0.75rem;\">${\n authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 28px; height: 28px; border-radius: 50%; object-fit: cover;\" />`\n : \"\"\n }<span style=\"font-size: 0.8rem; color: var(--sg-muted-text);\">${escapeHtml(authorName)}</span></div>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-card\" style=\"display: flex; background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\" data-variant=\"horizontal\">${imgHtml}<div style=\"padding: 1.25rem; display: flex; flex-direction: column; flex: 1;\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 0.75rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}${authorHtml}</div></article>`;\n }\n\n // ---------- variant: minimal ----------\n if (variant === \"minimal\") {\n const metaParts: string[] = [];\n if (showCategory && category) metaParts.push(escapeHtml(category));\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${metaParts.join(\" &middot; \")}</p>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-card\" style=\"padding: 1.25rem 0; border-bottom: 1px solid var(--sg-border, #e5e7eb);\" data-variant=\"minimal\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.25rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 0.5rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}</article>`;\n }\n\n // ---------- variant: default ----------\n const imgHtml =\n showImage && image\n ? `<div style=\"height: 200px; background-image: url(${escapeHtml(image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const metaParts: string[] = [];\n if (showCategory && category) metaParts.push(escapeHtml(category));\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${metaParts.join(\" &middot; \")}</p>`\n : \"\";\n\n const authorHtml =\n showAuthor && authorName\n ? `<div style=\"display: flex; align-items: center; gap: 0.5rem; margin-top: 1rem;\">${\n authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 32px; height: 32px; border-radius: 50%; object-fit: cover;\" />`\n : \"\"\n }<span style=\"font-size: 0.8rem; color: var(--sg-muted-text);\">${escapeHtml(authorName)}</span></div>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-card\" style=\"background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\" data-variant=\"default\">${imgHtml}<div style=\"padding: 1.5rem;\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}${authorHtml}</div></article>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogPostGrid\n// ---------------------------------------------------------------------------\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 */\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\n/**\n * Generates pagination HTML nav element.\n */\nfunction generatePaginationHtml(\n currentPage: number,\n totalPages: number,\n paginationBaseUrl: string,\n): string {\n if (totalPages <= 1) return \"\";\n\n const btnBase = \"display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:var(--sg-card-radius, 0.5rem);text-decoration:none;font-size:0.875rem;\";\n const borderNormal = \"border:1px solid var(--sg-border, #e5e7eb);\";\n const borderActive = \"border:1px solid var(--sg-primary);\";\n\n // Previous\n const prevHtml = currentPage > 1\n ? `<a href=\"${escapeHtml(buildPageUrl(paginationBaseUrl, currentPage - 1))}\" style=\"${btnBase}${borderNormal}color:var(--sg-text);\">&lsaquo;</a>`\n : `<span style=\"${btnBase}${borderNormal}color:var(--sg-muted-text);opacity:0.4;\">&lsaquo;</span>`;\n\n // Page numbers\n const pageNumbers = getPageNumbers(currentPage, totalPages);\n const pagesHtml = pageNumbers.map((page, idx) => {\n if (page === -1) {\n return `<span style=\"${btnBase}color:var(--sg-muted-text);\">&hellip;</span>`;\n }\n const isActive = page === currentPage;\n return `<a href=\"${escapeHtml(buildPageUrl(paginationBaseUrl, page))}\" style=\"${btnBase}${isActive ? borderActive : borderNormal}background-color:${isActive ? \"var(--sg-primary)\" : \"transparent\"};color:${isActive ? \"var(--sg-primary-text, #fff)\" : \"var(--sg-text)\"};font-weight:${isActive ? \"600\" : \"400\"};\">${page}</a>`;\n }).join(\"\");\n\n // Next\n const nextHtml = currentPage < totalPages\n ? `<a href=\"${escapeHtml(buildPageUrl(paginationBaseUrl, currentPage + 1))}\" style=\"${btnBase}${borderNormal}color:var(--sg-text);\">&rsaquo;</a>`\n : `<span style=\"${btnBase}${borderNormal}color:var(--sg-muted-text);opacity:0.4;\">&rsaquo;</span>`;\n\n return `<nav data-block-group=\"Paginação\" style=\"display:flex;justify-content:center;align-items:center;gap:0.375rem;margin-top:2.5rem;\">${prevHtml}${pagesHtml}${nextHtml}</nav>`;\n}\n\nexport function exportBlogPostGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n cards = [],\n showViewAll = false,\n viewAllText,\n viewAllHref,\n currentPage = 1,\n totalPages = 1,\n paginationBaseUrl = \"#\",\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) -> 2 cols (tablet) -> N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"blog-post-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n \"2rem\",\n );\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Cabeçalho\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text);\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportBlogPostGrid requires renderChild function\");\n }\n\n const cardsHtml = cards.length > 0\n ? cards\n .map((c: any, i: number) =>\n renderChild(\n {\n id: `${block.id}-card-${i}`,\n type: \"blogPostCard\",\n props: c,\n } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\")\n : `<div style=\"grid-column: 1 / -1; text-align: center; padding: 3rem 1rem; color: var(--sg-muted-text); border: 2px dashed var(--sg-border, #e5e7eb); border-radius: var(--sg-card-radius, 0.5rem);\"><p style=\"font-size: 1rem; margin-bottom: 0.5rem;\">Nenhum post encontrado</p><p style=\"font-size: 0.875rem;\">Os posts aparecerão aqui quando forem publicados.</p></div>`;\n\n const viewAllHtml =\n showViewAll && viewAllText\n ? `<div data-block-group=\"Rodapé\" style=\"text-align: center; margin-top: 2.5rem;\"><a href=\"${escapeHtml(viewAllHref || \"#\")}\" style=\"display: inline-block; padding: 0.75rem 1.5rem; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); font-weight: 600; border-radius: var(--sg-button-radius); text-decoration: none;\">${escapeHtml(viewAllText)}</a></div>`\n : \"\";\n\n const paginationHtml = generatePaginationHtml(currentPage, totalPages, paginationBaseUrl);\n\n return `<style>${mediaQueries}</style><section ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${cardsHtml}</div>${viewAllHtml}${paginationHtml}</div></section>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogPostDetail\n// ---------------------------------------------------------------------------\n\nexport function exportBlogPostDetail(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n content,\n featuredImage,\n date,\n category,\n readingTime,\n tags = [],\n showFeaturedImage = true,\n showAuthor = true,\n authorVariant = \"inline\",\n showDate = true,\n showTags = true,\n showReadingTime = true,\n contentMaxWidth = \"720px\",\n authorName,\n authorAvatar,\n authorBio,\n } = (block as any).props;\n\n const displayName = escapeHtml(authorName || \"Nome do Autor\");\n const displayBio = authorBio ? escapeHtml(authorBio) : \"\";\n\n // Featured image banner\n const featuredImageHtml =\n showFeaturedImage && featuredImage\n ? `<div data-block-group=\"Mídia\" style=\"width: 100%; margin: 0 auto 2.5rem auto; border-radius: var(--sg-card-radius); overflow: hidden;\"><img src=\"${escapeHtml(featuredImage)}\" alt=\"${escapeHtml(title || \"\")}\" style=\"width: 100%; height: auto; max-height: 520px; object-fit: cover; display: block;\" /></div>`\n : \"\";\n\n // Category badge\n const categoryHtml = category\n ? `<span style=\"display: inline-block; padding: 0.25rem 0.75rem; background-color: var(--sg-primary); color: var(--sg-primary-text, #fff); border-radius: 999px; font-size: 0.75rem; font-weight: 600; margin-bottom: 1rem;\">${escapeHtml(category)}</span>`\n : \"\";\n\n // Meta line (date + reading time)\n const metaParts: string[] = [];\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1.5rem;\">${metaParts.join(\" &middot; \")}</p>`\n : \"\";\n\n // Title\n const titleHtml = `<h1 data-block-group=\"Conteúdo\" style=\"font-size: var(--sg-heading-h1, 2.25rem); font-weight: 700; margin-bottom: 0.75rem; line-height: 1.2;\">${escapeHtml(title)}</h1>`;\n\n // Content — trusted HTML from backend, not escaped\n const contentHtml = content\n ? `<div class=\"sg-blog-post-content\" style=\"font-size: 1.0625rem; line-height: 1.75; color: var(--sg-text);\">${content}</div>`\n : \"\";\n\n // Author avatar — real image or placeholder\n const avatarLargeHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${displayName}\" style=\"width:56px;height:56px;border-radius:50%;object-fit:cover;flex-shrink:0;\" />`\n : `<div style=\"width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg, var(--sg-primary, #6366f1) 0%, #818cf8 100%);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--sg-primary-text, #fff);font-size:1.5rem;font-weight:700;\">${displayName.charAt(0).toUpperCase()}</div>`;\n const avatarSmallHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${displayName}\" style=\"width:40px;height:40px;border-radius:50%;object-fit:cover;flex-shrink:0;\" />`\n : `<div style=\"width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg, var(--sg-primary, #6366f1) 0%, #818cf8 100%);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--sg-primary-text, #fff);font-size:1.1rem;font-weight:700;\">${displayName.charAt(0).toUpperCase()}</div>`;\n\n let authorHtml = \"\";\n if (showAuthor) {\n const bioHtml = displayBio ? `<p style=\"color:var(--sg-muted-text);font-size:0.875rem;margin:0.25rem 0 0;\">${displayBio}</p>` : \"\";\n if (authorVariant === \"card\") {\n authorHtml = `<div data-block-group=\"Autor\" style=\"display:flex;align-items:flex-start;gap:1rem;margin-top:3rem;padding:1.25rem;border-radius:var(--sg-card-radius, 0.75rem);background-color:var(--sg-surface, #f9fafb);\">${avatarLargeHtml}<div><div style=\"font-size:0.75rem;color:var(--sg-muted-text);text-transform:uppercase;letter-spacing:0.05em;margin-bottom:0.125rem;\">Escrito por</div><div style=\"font-weight:600;font-size:1rem;\">${displayName}</div>${bioHtml}</div></div>`;\n } else if (authorVariant === \"minimal\") {\n authorHtml = `<p data-block-group=\"Autor\" style=\"margin-top:3rem;padding-top:2rem;border-top:1px solid var(--sg-border, #e5e7eb);color:var(--sg-muted-text);font-size:0.9375rem;\">Escrito por <span style=\"font-weight:600;color:var(--sg-text);\">${displayName}</span></p>`;\n } else {\n // inline (default)\n authorHtml = `<div data-block-group=\"Autor\" style=\"display:flex;align-items:center;gap:0.75rem;margin-top:3rem;padding-top:2rem;border-top:1px solid var(--sg-border, #e5e7eb);\">${avatarSmallHtml}<div><div style=\"font-size:0.75rem;color:var(--sg-muted-text);\">Escrito por</div><div style=\"font-weight:600;font-size:0.9375rem;\">${displayName}</div></div></div>`;\n }\n }\n\n // Tags\n const tagsHtml =\n showTags && tags.length > 0\n ? `<div data-block-group=\"Visibilidade\" style=\"margin-top: 2rem; display: flex; flex-wrap: wrap; gap: 0.5rem;\">${tags\n .map(\n (tag: string) =>\n `<span style=\"display: inline-block; padding: 0.25rem 0.75rem; background-color: var(--sg-surface, #f3f4f6); color: var(--sg-text); border-radius: 999px; font-size: 0.75rem;\">${escapeHtml(tag)}</span>`,\n )\n .join(\"\")}</div>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-detail\" style=\"padding: 0; padding-bottom: 6rem;\">${featuredImageHtml}<div style=\"max-width: ${escapeHtml(contentMaxWidth)}; margin: 0 auto; padding: 0 1rem;\">${categoryHtml}${titleHtml}${metaHtml}${contentHtml}${authorHtml}${tagsHtml}</div></article>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogCategoryFilter\n// ---------------------------------------------------------------------------\n\nexport function exportBlogCategoryFilter(\n block: Block,\n _depth: number,\n _basePath?: string,\n _theme?: ThemeTokens,\n): string {\n const {\n title,\n categories = [],\n variant = \"chips\",\n showCount = true,\n showAll = true,\n allLabel = \"Todas\",\n activeCategory,\n filterUrl = \"#\",\n borderRadius = \"0.75rem\",\n shadow = \"none\",\n linkColor: linkColorProp,\n } = (block as any).props;\n\n const linkColor = linkColorProp || \"var(--sg-text)\";\n const widgetId = `widget-cat-${block.id || \"\"}`;\n const boxShadow = resolveWidgetShadow(shadow);\n const shadowStyle = boxShadow !== \"none\" ? `box-shadow:${boxShadow};` : \"\";\n\n const buildHref = (slug?: string) => {\n if (!slug) return escapeHtml(filterUrl);\n return escapeHtml(`${filterUrl}?categoria=${slug}`);\n };\n\n // Hover CSS\n const linkHoverColor = (block as any).props.linkHoverColor || \"\";\n const linkHoverEffect = (block as any).props.linkHoverEffect || \"background\";\n const linkHoverIntensity = (block as any).props.linkHoverIntensity ?? 50;\n\n let hoverCSS = \"\";\n if (linkHoverColor) {\n const styles = generateLinkHoverStyles({\n effect: linkHoverEffect as any,\n intensity: linkHoverIntensity,\n hoverColor: linkHoverColor,\n });\n const baseRule = styles.base\n ? `#${widgetId} .sg-cat-chip:not(.sg-cat-active), #${widgetId} .sg-cat-btn:not(.sg-cat-active), #${widgetId} .sg-cat-list-item { ${styles.base}; transition: all 0.3s ease; }`\n : `#${widgetId} .sg-cat-chip, #${widgetId} .sg-cat-btn, #${widgetId} .sg-cat-list-item { transition: all 0.3s ease; }`;\n const hoverRule = `#${widgetId} .sg-cat-chip:hover:not(.sg-cat-active), #${widgetId} .sg-cat-btn:hover:not(.sg-cat-active), #${widgetId} .sg-cat-list-item:hover { ${styles.hover}; transition: all 0.3s ease; }`;\n hoverCSS = `<style>${baseRule}\\n${hoverRule}</style>`;\n } else {\n hoverCSS = `<style>\n #${widgetId} .sg-cat-chip:hover { opacity:0.8; transform:translateY(-1px); }\n #${widgetId} .sg-cat-btn:hover { border-color:var(--sg-primary) !important; color:var(--sg-primary) !important; }\n #${widgetId} .sg-cat-list-item:hover { background-color:rgba(0,0,0,0.04); }\n </style>`;\n }\n\n let itemsHtml = \"\";\n\n if (variant === \"chips\") {\n const chipStyle = (isActive: boolean) => `display:inline-flex;align-items:center;gap:0.375rem;padding:0.375rem 0.875rem;border-radius:9999px;font-size:0.875rem;font-weight:500;text-decoration:none;background-color:${isActive ? \"var(--sg-primary)\" : \"var(--sg-bg)\"};color:${isActive ? \"var(--sg-primary-text, #fff)\" : linkColor};transition:all 0.2s ease;`;\n const allChip = showAll ? `<a href=\"${escapeHtml(filterUrl)}\" class=\"sg-cat-chip\" style=\"${chipStyle(!activeCategory)}\">${escapeHtml(allLabel)}</a>` : \"\";\n const chips = categories.map((cat: any) => {\n const isActive = activeCategory === cat.slug;\n const countHtml = showCount && cat.count != null ? `<span style=\"font-size:0.75rem;opacity:0.7;\">(${cat.count})</span>` : \"\";\n return `<a href=\"${buildHref(cat.slug)}\" class=\"${isActive ? \"sg-cat-active\" : \"sg-cat-chip\"}\" style=\"${chipStyle(isActive)}\">${escapeHtml(cat.name)}${countHtml}</a>`;\n }).join(\"\");\n itemsHtml = `<div style=\"display:flex;flex-wrap:wrap;gap:0.5rem;\">${allChip}${chips}</div>`;\n } else if (variant === \"buttons\") {\n const btnStyle = (isActive: boolean) => `display:inline-flex;align-items:center;gap:0.375rem;padding:0.5rem 1rem;border-radius:calc(${borderRadius} * 0.6);font-size:0.875rem;font-weight:500;text-decoration:none;border:1px solid ${isActive ? \"var(--sg-primary)\" : \"var(--sg-border, #e5e7eb)\"};background-color:${isActive ? \"var(--sg-primary)\" : \"transparent\"};color:${isActive ? \"var(--sg-primary-text, #fff)\" : linkColor};transition:all 0.2s ease;`;\n const allBtn = showAll ? `<a href=\"${escapeHtml(filterUrl)}\" class=\"sg-cat-btn\" style=\"${btnStyle(!activeCategory)}\">${escapeHtml(allLabel)}</a>` : \"\";\n const btns = categories.map((cat: any) => {\n const isActive = activeCategory === cat.slug;\n const countHtml = showCount && cat.count != null ? `<span style=\"font-size:0.75rem;opacity:0.7;\">(${cat.count})</span>` : \"\";\n return `<a href=\"${buildHref(cat.slug)}\" class=\"${isActive ? \"sg-cat-active\" : \"sg-cat-btn\"}\" style=\"${btnStyle(isActive)}\">${escapeHtml(cat.name)}${countHtml}</a>`;\n }).join(\"\");\n itemsHtml = `<div style=\"display:flex;flex-wrap:wrap;gap:0.5rem;\">${allBtn}${btns}</div>`;\n } else {\n const listStyle = (isActive: boolean) => `display:flex;align-items:center;justify-content:space-between;padding:0.625rem 0.75rem;border-radius:calc(${borderRadius} * 0.5);font-size:0.875rem;font-weight:${isActive ? \"600\" : \"400\"};text-decoration:none;background-color:${isActive ? \"var(--sg-bg)\" : \"transparent\"};color:${isActive ? \"var(--sg-primary)\" : linkColor};transition:all 0.2s ease;`;\n const allItem = showAll ? `<a href=\"${escapeHtml(filterUrl)}\" class=\"sg-cat-list-item\" style=\"${listStyle(!activeCategory)}\">${escapeHtml(allLabel)}</a>` : \"\";\n const items = categories.map((cat: any) => {\n const isActive = activeCategory === cat.slug;\n const countHtml = showCount && cat.count != null ? `<span style=\"font-size:0.75rem;color:var(--sg-muted-text);background-color:var(--sg-bg);padding:0.125rem 0.5rem;border-radius:9999px;\">${cat.count}</span>` : \"\";\n return `<a href=\"${buildHref(cat.slug)}\" class=\"sg-cat-list-item\" style=\"${listStyle(isActive)}\">${escapeHtml(cat.name)}${countHtml}</a>`;\n }).join(\"\");\n itemsHtml = `<div style=\"display:flex;flex-direction:column;gap:0.125rem;\">${allItem}${items}</div>`;\n }\n\n const titleHtml = title\n ? `<div style=\"padding:1rem 1.25rem;border-bottom:1px solid var(--sg-border, #e5e7eb);\"><h3 style=\"font-size:1rem;font-weight:600;margin:0;color:var(--sg-text);\">${escapeHtml(title)}</h3></div>`\n : \"\";\n\n const contentPad = variant === \"list\" ? \"padding:0.5rem 0.75rem;\" : \"padding:1rem 1.25rem;\";\n\n return `${hoverCSS}<div id=\"${widgetId}\" ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color:var(--sg-surface, var(--sg-bg));border:1px solid var(--sg-border, #e5e7eb);border-radius:${borderRadius};${shadowStyle}overflow:hidden;\">${titleHtml}<div style=\"${contentPad}\">${itemsHtml}</div></div>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogSearchBar\n// ---------------------------------------------------------------------------\n\nexport function exportBlogSearchBar(\n block: Block,\n _depth: number,\n _basePath?: string,\n _theme?: ThemeTokens,\n): string {\n const {\n placeholder = \"Buscar posts...\",\n variant = \"simple\",\n showIcon = true,\n searchUrl = \"#\",\n filterCategories = false,\n filterTags = false,\n filterDate = false,\n borderRadius = \"0.75rem\",\n shadow = \"none\",\n } = (block as any).props;\n\n const widgetId = `widget-search-${block.id || \"\"}`;\n const boxShadow = resolveWidgetShadow(shadow);\n const shadowStyle = boxShadow !== \"none\" ? `box-shadow:${boxShadow};` : \"\";\n const inputRadius = `calc(${borderRadius} * 0.6)`;\n\n const focusCSS = `<style>\n #${widgetId} input:focus, #${widgetId} select:focus {\n border-color: var(--sg-primary);\n box-shadow: 0 0 0 3px rgba(var(--sg-primary-rgb, 59, 130, 246), 0.15);\n }\n </style>`;\n\n const searchIconSvg = showIcon\n ? `<svg style=\"position:absolute;left:0.75rem;top:50%;transform:translateY(-50%);width:1.25rem;height:1.25rem;color:var(--sg-muted-text);\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.35-4.35\" stroke-linecap=\"round\"/></svg>`\n : \"\";\n\n const inputPadding = showIcon ? \"padding-left:2.5rem;\" : \"\";\n const isExpanded = variant === \"expanded\";\n const inputBorder = isExpanded ? \"2px\" : \"1px\";\n const inputFontSize = isExpanded ? \"1.0625rem\" : \"0.875rem\";\n const inputPadY = isExpanded ? \"0.875rem\" : \"0.625rem\";\n\n const inputStyle = `width:100%;${inputPadding}padding-right:1rem;padding-top:${inputPadY};padding-bottom:${inputPadY};font-size:${inputFontSize};border:${inputBorder} solid var(--sg-border, #e5e7eb);border-radius:${inputRadius};background-color:var(--sg-bg);color:var(--sg-text);outline:none;transition:border-color 0.2s, box-shadow 0.2s;`;\n const selectStyle = `padding:0.625rem 0.75rem;font-size:0.875rem;border:1px solid var(--sg-border, #e5e7eb);border-radius:${inputRadius};background-color:var(--sg-bg);color:var(--sg-text);transition:border-color 0.2s;`;\n\n const inputHtml = `<div style=\"position:relative;\">${searchIconSvg}<input type=\"search\" name=\"busca\" placeholder=\"${escapeHtml(placeholder)}\" style=\"${inputStyle}\" /></div>`;\n\n let formContent = inputHtml;\n if (variant === \"with-filters\") {\n const filters: string[] = [];\n if (filterCategories) filters.push(`<select name=\"categoria\" style=\"${selectStyle}\"><option value=\"\">Categoria</option></select>`);\n if (filterTags) filters.push(`<select name=\"tag\" style=\"${selectStyle}\"><option value=\"\">Tag</option></select>`);\n if (filterDate) filters.push(`<select name=\"periodo\" style=\"${selectStyle}\"><option value=\"\">Período</option></select>`);\n formContent = `${inputHtml}<div style=\"display:flex;flex-wrap:wrap;gap:0.5rem;margin-top:0.75rem;\">${filters.join(\"\")}</div>`;\n }\n\n return `${focusCSS}<div id=\"${widgetId}\" ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color:var(--sg-surface, var(--sg-bg));border:1px solid var(--sg-border, #e5e7eb);border-radius:${borderRadius};${shadowStyle}overflow:hidden;\"><form action=\"${escapeHtml(searchUrl)}\" method=\"get\" style=\"padding:1.25rem;\">${formContent}</form></div>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogRecentPosts\n// ---------------------------------------------------------------------------\n\nexport function exportBlogRecentPosts(\n block: Block,\n _depth: number,\n _basePath?: string,\n _theme?: ThemeTokens,\n): string {\n const {\n title = \"Posts Recentes\",\n posts = [],\n showThumbnail = true,\n showDate = true,\n showCategory = false,\n borderRadius = \"0.75rem\",\n shadow = \"none\",\n linkColor: linkColorProp,\n } = (block as any).props;\n\n const linkColor = linkColorProp || \"var(--sg-text)\";\n const widgetId = `widget-recent-${block.id || \"\"}`;\n const boxShadow = resolveWidgetShadow(shadow);\n const shadowStyle = boxShadow !== \"none\" ? `box-shadow:${boxShadow};` : \"\";\n\n const linkHoverColor = (block as any).props.linkHoverColor || \"\";\n const linkHoverEffect = (block as any).props.linkHoverEffect || \"background\";\n const linkHoverIntensity = (block as any).props.linkHoverIntensity ?? 50;\n\n let hoverCSS = \"\";\n if (linkHoverColor) {\n const styles = generateLinkHoverStyles({\n effect: linkHoverEffect as any,\n intensity: linkHoverIntensity,\n hoverColor: linkHoverColor,\n });\n const baseRule = styles.base\n ? `#${widgetId} .sg-recent-post { ${styles.base}; transition: all 0.3s ease; }`\n : `#${widgetId} .sg-recent-post { transition: all 0.3s ease; }`;\n const hoverRule = `#${widgetId} .sg-recent-post:hover { ${styles.hover}; transition: all 0.3s ease; }\n #${widgetId} .sg-recent-post:hover .sg-recent-title { color: ${linkHoverColor}; }`;\n hoverCSS = `<style>${baseRule}\\n${hoverRule}</style>`;\n } else {\n hoverCSS = `<style>\n #${widgetId} .sg-recent-post:hover { background-color:rgba(0,0,0,0.04); }\n #${widgetId} .sg-recent-post:hover .sg-recent-title { color:var(--sg-primary); }\n </style>`;\n }\n\n const titleHtml = title\n ? `<div style=\"padding:1rem 1.25rem;border-bottom:1px solid var(--sg-border, #e5e7eb);\"><h3 style=\"font-size:1rem;font-weight:600;margin:0;color:var(--sg-text);\">${escapeHtml(title)}</h3></div>`\n : \"\";\n\n let contentHtml = \"\";\n if (posts.length === 0) {\n contentHtml = `<p style=\"padding:1.5rem 1.25rem;color:var(--sg-muted-text);font-size:0.875rem;text-align:center;margin:0;\">Nenhum post recente</p>`;\n } else {\n contentHtml = posts\n .map((post: any) => {\n const imgHtml =\n showThumbnail && post.image\n ? `<img src=\"${escapeHtml(post.image)}\" alt=\"${escapeHtml(post.title)}\" style=\"width:64px;height:64px;object-fit:cover;border-radius:calc(${borderRadius} * 0.5);flex-shrink:0;\" />`\n : \"\";\n\n const metaParts: string[] = [];\n if (showDate && post.date) metaParts.push(escapeHtml(post.date));\n if (showCategory && post.category) metaParts.push(`<span style=\"font-size:0.6875rem;color:var(--sg-primary);font-weight:600;text-transform:uppercase;letter-spacing:0.03em;\">${escapeHtml(post.category)}</span>`);\n const metaHtml = metaParts.length\n ? `<div style=\"display:flex;align-items:center;gap:0.5rem;margin-top:0.25rem;font-size:0.75rem;color:var(--sg-muted-text);\">${metaParts.join(\"\")}</div>`\n : \"\";\n\n return `<a href=\"/site/p/blog/${escapeHtml(post.slug)}\" class=\"sg-recent-post\" style=\"display:flex;align-items:center;gap:0.75rem;padding:0.75rem 1.25rem;text-decoration:none;color:inherit;transition:background-color 0.2s;\">${imgHtml}<div style=\"flex:1;min-width:0;\"><div class=\"sg-recent-title\" style=\"font-size:0.875rem;font-weight:500;color:${linkColor};line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;transition:color 0.2s;\">${escapeHtml(post.title)}</div>${metaHtml}</div></a>`;\n })\n .join(\"\");\n }\n\n return `${hoverCSS}<div id=\"${widgetId}\" ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color:var(--sg-surface, var(--sg-bg));border-radius:${borderRadius};border:1px solid var(--sg-border, #e5e7eb);${shadowStyle}overflow:hidden;\">${titleHtml}<div style=\"padding:0.5rem 0;\">${contentHtml}</div></div>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogTagCloud\n// ---------------------------------------------------------------------------\n\nexport function exportBlogTagCloud(\n block: Block,\n _depth: number,\n _basePath?: string,\n _theme?: ThemeTokens,\n): string {\n const {\n title = \"Tags\",\n tags = [],\n variant = \"badges\",\n borderRadius = \"0.75rem\",\n shadow = \"none\",\n linkColor: linkColorProp,\n } = (block as any).props;\n\n const linkColor = linkColorProp || \"var(--sg-text)\";\n const widgetId = `widget-tags-${block.id || \"\"}`;\n const boxShadow = resolveWidgetShadow(shadow);\n const shadowStyle = boxShadow !== \"none\" ? `box-shadow:${boxShadow};` : \"\";\n\n const linkHoverColor = (block as any).props.linkHoverColor || \"\";\n const linkHoverEffect = (block as any).props.linkHoverEffect || \"background\";\n const linkHoverIntensity = (block as any).props.linkHoverIntensity ?? 50;\n\n let hoverCSS = \"\";\n if (linkHoverColor) {\n const styles = generateLinkHoverStyles({\n effect: linkHoverEffect as any,\n intensity: linkHoverIntensity,\n hoverColor: linkHoverColor,\n });\n const baseRule = styles.base\n ? `#${widgetId} .sg-tag-badge, #${widgetId} .sg-tag-list-item { ${styles.base}; transition: all 0.3s ease; }`\n : `#${widgetId} .sg-tag-badge, #${widgetId} .sg-tag-list-item { transition: all 0.3s ease; }`;\n const hoverRule = `#${widgetId} .sg-tag-badge:hover, #${widgetId} .sg-tag-list-item:hover { ${styles.hover}; transition: all 0.3s ease; }`;\n hoverCSS = `<style>${baseRule}\\n${hoverRule}</style>`;\n } else {\n hoverCSS = `<style>\n #${widgetId} .sg-tag-badge:hover { opacity:0.8; transform:translateY(-1px); }\n #${widgetId} .sg-tag-list-item:hover { background-color:rgba(0,0,0,0.04); }\n </style>`;\n }\n\n const titleHtml = title\n ? `<div style=\"padding:1rem 1.25rem;border-bottom:1px solid var(--sg-border, #e5e7eb);\"><h3 style=\"font-size:1rem;font-weight:600;margin:0;color:var(--sg-text);\">${escapeHtml(title)}</h3></div>`\n : \"\";\n\n let contentHtml = \"\";\n if (tags.length === 0) {\n contentHtml = `<p style=\"color:var(--sg-muted-text);font-size:0.875rem;text-align:center;margin:0;\">Nenhuma tag encontrada</p>`;\n } else if (variant === \"badges\") {\n const badgesHtml = tags\n .map(\n (tag: any) =>\n `<span class=\"sg-tag-badge\" style=\"display:inline-flex;align-items:center;gap:0.375rem;padding:0.3rem 0.75rem;border-radius:9999px;font-size:0.8125rem;font-weight:500;background-color:var(--sg-bg);color:${linkColor};cursor:pointer;transition:all 0.2s ease;\">${escapeHtml(tag.name)}<span style=\"font-size:0.6875rem;color:var(--sg-muted-text);opacity:0.7;\">(${tag.count})</span></span>`,\n )\n .join(\"\");\n contentHtml = `<div style=\"display:flex;flex-wrap:wrap;gap:0.5rem;\">${badgesHtml}</div>`;\n } else {\n const listHtml = tags\n .map(\n (tag: any) =>\n `<div class=\"sg-tag-list-item\" style=\"display:flex;align-items:center;justify-content:space-between;padding:0.5rem 0.75rem;border-radius:calc(${borderRadius} * 0.5);font-size:0.875rem;color:${linkColor};cursor:pointer;transition:background-color 0.2s;\"><span>${escapeHtml(tag.name)}</span><span style=\"font-size:0.75rem;color:var(--sg-muted-text);background-color:var(--sg-bg);padding:0.125rem 0.5rem;border-radius:9999px;\">${tag.count}</span></div>`,\n )\n .join(\"\");\n contentHtml = `<div style=\"display:flex;flex-direction:column;gap:0.25rem;\">${listHtml}</div>`;\n }\n\n return `${hoverCSS}<div id=\"${widgetId}\" ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color:var(--sg-surface, var(--sg-bg));border-radius:${borderRadius};border:1px solid var(--sg-border, #e5e7eb);${shadowStyle}overflow:hidden;\">${titleHtml}<div style=\"padding:1rem 1.25rem;\">${contentHtml}</div></div>`;\n}\n"],"names":["exportBlogPostCard","block","depth","basePath","theme","title","excerpt","image","date","category","authorName","authorAvatar","readingTime","linkHref","linkText","variant","showImage","showCategory","showDate","showAuthor","showReadingTime","imgHtml","escapeHtml","metaParts","metaHtml","authorHtml","linkHtml","dataBlockIdAttr","buildPageUrl","baseUrl","page","separator","getPageNumbers","current","total","_","i","pages","start","end","generatePaginationHtml","currentPage","totalPages","paginationBaseUrl","btnBase","borderNormal","borderActive","prevHtml","pagesHtml","idx","isActive","nextHtml","exportBlogPostGrid","renderChild","subtitle","columns","cards","showViewAll","viewAllText","viewAllHref","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","headerHtml","cardsHtml","c","viewAllHtml","paginationHtml","exportBlogPostDetail","content","featuredImage","tags","showFeaturedImage","authorVariant","showTags","contentMaxWidth","authorBio","displayName","displayBio","featuredImageHtml","categoryHtml","titleHtml","contentHtml","avatarLargeHtml","avatarSmallHtml","bioHtml","tagsHtml","tag","exportBlogCategoryFilter","_depth","_basePath","_theme","categories","showCount","showAll","allLabel","activeCategory","filterUrl","borderRadius","shadow","linkColorProp","linkColor","widgetId","boxShadow","resolveWidgetShadow","shadowStyle","buildHref","slug","linkHoverColor","linkHoverEffect","linkHoverIntensity","hoverCSS","styles","generateLinkHoverStyles","baseRule","hoverRule","itemsHtml","chipStyle","allChip","chips","cat","countHtml","btnStyle","allBtn","btns","listStyle","allItem","items","contentPad","exportBlogSearchBar","placeholder","showIcon","searchUrl","filterCategories","filterTags","filterDate","inputRadius","focusCSS","searchIconSvg","inputPadding","isExpanded","inputBorder","inputFontSize","inputPadY","inputStyle","selectStyle","inputHtml","formContent","filters","exportBlogRecentPosts","posts","showThumbnail","post","exportBlogTagCloud"],"mappings":"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"}
@@ -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,kBA8dxB,CAAC"}
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,kBAifxB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { pluginRegistry as f } from "../../pluginRegistry.js";
2
- import { logger as p } from "../../../../utils/logger.js";
2
+ import { logger as d } from "../../../../utils/logger.js";
3
3
  const m = "plugin-blog-home-grid", c = [
4
4
  {
5
5
  title: "Feira de Ciências 2026: Inovação e Criatividade",
@@ -128,27 +128,27 @@ const y = {
128
128
  }
129
129
  },
130
130
  onActivate(t) {
131
- p.debug("Blog plugin activating...");
132
- const n = new Set(t.pages.map((e) => e.id)), o = [...t.pages], i = t.pages.find((e) => e.slug === "home") || t.pages[0], l = i?.structure.find((e) => e.type === "navbar"), r = i?.structure.find((e) => e.type === "footer");
131
+ d.debug("Blog plugin activating...");
132
+ const n = new Set(t.pages.map((e) => e.id)), a = [...t.pages], i = t.pages.find((e) => e.slug === "home") || t.pages[0], l = i?.structure.find((e) => e.type === "navbar"), r = i?.structure.find((e) => e.type === "footer");
133
133
  if (i && l) {
134
- const e = o.findIndex((a) => a.id === i.id);
134
+ const e = a.findIndex((o) => o.id === i.id);
135
135
  if (e >= 0) {
136
- const a = l.props, s = Array.isArray(a.links) ? [...a.links] : [];
136
+ const o = l.props, s = Array.isArray(o.links) ? [...o.links] : [];
137
137
  if (!s.some(
138
- (d) => d.href === "/p/blog"
138
+ (p) => p.href === "/p/blog"
139
139
  )) {
140
- const d = s.length > 0 ? s.length - 1 : 0;
141
- s.splice(d, 0, { text: "Blog", href: "/p/blog" });
142
- const h = o[e].structure.map((u) => u.id === l.id ? { ...u, props: { ...u.props, links: s } } : u);
143
- o[e] = { ...o[e], structure: h }, p.debug("Blog link added to home navbar"), l.props = { ...a, links: s };
140
+ const p = s.length > 0 ? s.length - 1 : 0;
141
+ s.splice(p, 0, { text: "Blog", href: "/p/blog" });
142
+ const h = a[e].structure.map((u) => u.id === l.id ? { ...u, props: { ...u.props, links: s } } : u);
143
+ a[e] = { ...a[e], structure: h }, d.debug("Blog link added to home navbar"), l.props = { ...o, links: s };
144
144
  }
145
145
  }
146
146
  }
147
147
  if (i) {
148
- const e = o.findIndex((s) => s.id === i.id), a = i.structure.some(
148
+ const e = a.findIndex((s) => s.id === i.id), o = i.structure.some(
149
149
  (s) => s.id === m
150
150
  );
151
- if (e >= 0 && !a) {
151
+ if (e >= 0 && !o) {
152
152
  const s = {
153
153
  id: m,
154
154
  type: "blogPostGrid",
@@ -162,13 +162,13 @@ const y = {
162
162
  viewAllText: "Ver todos os posts",
163
163
  viewAllHref: "/site/p/blog"
164
164
  }
165
- }, g = [...o[e].structure], d = g.findIndex(
165
+ }, g = [...a[e].structure], p = g.findIndex(
166
166
  (h) => h.type === "footer"
167
167
  );
168
- d >= 0 ? g.splice(d, 0, s) : g.push(s), o[e] = {
169
- ...o[e],
168
+ p >= 0 ? g.splice(p, 0, s) : g.push(s), a[e] = {
169
+ ...a[e],
170
170
  structure: g
171
- }, p.debug("Blog section injected into home page");
171
+ }, d.debug("Blog section injected into home page");
172
172
  }
173
173
  }
174
174
  if (!n.has("blog")) {
@@ -201,9 +201,9 @@ const y = {
201
201
  type: "blogCategoryFilter",
202
202
  props: {
203
203
  title: "",
204
- categories: c.map((a) => ({
205
- name: a.category,
206
- slug: a.category.toLowerCase().replace(/\s+/g, "-"),
204
+ categories: c.map((o) => ({
205
+ name: o.category,
206
+ slug: o.category.toLowerCase().replace(/\s+/g, "-"),
207
207
  count: 1
208
208
  })),
209
209
  variant: "chips",
@@ -225,7 +225,7 @@ const y = {
225
225
  viewAllText: "Ver todos",
226
226
  viewAllHref: "/site/p/blog"
227
227
  }
228
- }), r && e.push(b(r, "blog-page-footer")), o.push({
228
+ }), r && e.push(b(r, "blog-page-footer")), a.push({
229
229
  id: "blog",
230
230
  name: "Blog",
231
231
  slug: "blog",
@@ -237,23 +237,26 @@ const y = {
237
237
  mode: "list",
238
238
  defaultParams: { limit: 15 }
239
239
  }
240
- }), p.debug("Blog listing page created");
240
+ }), d.debug("Blog listing page created");
241
241
  }
242
242
  if (!n.has("blog-post")) {
243
243
  const e = [];
244
244
  if (l) {
245
- const a = b(l, "post-page-navbar");
246
- a.props.sticky = !0, e.push(a);
245
+ const o = b(l, "post-page-navbar");
246
+ o.props.sticky = !0, e.push(o);
247
247
  }
248
248
  e.push({
249
249
  id: "blog-detail-layout",
250
250
  type: "grid",
251
251
  props: {
252
+ cols: 2,
252
253
  colTemplate: "1fr 320px",
253
254
  gap: "2.5rem",
254
255
  maxWidth: "1200px",
255
256
  padding: "2rem",
256
257
  paddingTop: "6rem",
258
+ paddingBottom: "6rem",
259
+ bg: "var(--sg-bg)",
257
260
  children: [
258
261
  // Coluna principal: blogPostDetail
259
262
  {
@@ -284,7 +287,8 @@ const y = {
284
287
  direction: "col",
285
288
  gap: "1.5rem",
286
289
  sticky: !0,
287
- stickyOffset: "80px",
290
+ stickyOffset: "100px",
291
+ paddingBottom: "6rem",
288
292
  children: [
289
293
  {
290
294
  id: "blog-sidebar-search",
@@ -293,7 +297,9 @@ const y = {
293
297
  placeholder: "Buscar posts...",
294
298
  variant: "simple",
295
299
  showIcon: !0,
296
- searchUrl: "/site/p/blog"
300
+ searchUrl: "/site/p/blog",
301
+ borderRadius: "0.75rem",
302
+ shadow: "sm"
297
303
  }
298
304
  },
299
305
  {
@@ -301,16 +307,20 @@ const y = {
301
307
  type: "blogCategoryFilter",
302
308
  props: {
303
309
  title: "Categorias",
304
- categories: c.map((a) => ({
305
- name: a.category,
306
- slug: a.category.toLowerCase().replace(/\s+/g, "-"),
310
+ categories: c.map((o) => ({
311
+ name: o.category,
312
+ slug: o.category.toLowerCase().replace(/\s+/g, "-"),
307
313
  count: 1
308
314
  })),
309
315
  variant: "list",
310
316
  showCount: !0,
311
317
  showAll: !0,
312
318
  allLabel: "Todas",
313
- filterUrl: "/site/p/blog"
319
+ filterUrl: "/site/p/blog",
320
+ linkColor: "#374151",
321
+ linkHoverColor: "#2563eb",
322
+ borderRadius: "0.75rem",
323
+ shadow: "sm"
314
324
  }
315
325
  },
316
326
  {
@@ -322,13 +332,17 @@ const y = {
322
332
  showThumbnail: !0,
323
333
  showDate: !0,
324
334
  showCategory: !1,
325
- posts: c.map((a) => ({
326
- title: a.title,
327
- slug: a.linkHref.replace("/site/p/blog/", ""),
328
- date: a.date,
329
- image: a.image,
330
- category: a.category
331
- }))
335
+ posts: c.map((o) => ({
336
+ title: o.title,
337
+ slug: o.linkHref.replace("/site/p/blog/", ""),
338
+ date: o.date,
339
+ image: o.image,
340
+ category: o.category
341
+ })),
342
+ linkColor: "#374151",
343
+ linkHoverColor: "#2563eb",
344
+ borderRadius: "0.75rem",
345
+ shadow: "sm"
332
346
  }
333
347
  },
334
348
  {
@@ -342,7 +356,11 @@ const y = {
342
356
  { name: "Institucional", count: 1 },
343
357
  { name: "Sustentabilidade", count: 1 }
344
358
  ],
345
- variant: "badges"
359
+ variant: "badges",
360
+ linkColor: "#374151",
361
+ linkHoverColor: "#2563eb",
362
+ borderRadius: "0.75rem",
363
+ shadow: "sm"
346
364
  }
347
365
  }
348
366
  ]
@@ -350,7 +368,7 @@ const y = {
350
368
  }
351
369
  ]
352
370
  }
353
- }), r && e.push(b(r, "post-page-footer")), o.push({
371
+ }), r && e.push(b(r, "post-page-footer")), a.push({
354
372
  id: "blog-post",
355
373
  name: "Post",
356
374
  slug: "blog/:slug",
@@ -366,28 +384,28 @@ const y = {
366
384
  editRestrictions: {
367
385
  nonRemovable: !0
368
386
  }
369
- }), p.debug("Blog post detail page created with sidebar layout");
387
+ }), d.debug("Blog post detail page created with sidebar layout");
370
388
  }
371
389
  return {
372
390
  ...t,
373
- pages: o
391
+ pages: a
374
392
  };
375
393
  },
376
394
  onDeactivate(t) {
377
- p.debug("Blog plugin deactivating...");
378
- const n = t.pages.filter((o) => o.pluginId !== "blog").map((o) => {
379
- let i = o.structure;
395
+ d.debug("Blog plugin deactivating...");
396
+ const n = t.pages.filter((a) => a.pluginId !== "blog").map((a) => {
397
+ let i = a.structure;
380
398
  return i.some(
381
399
  (r) => r.id === m
382
400
  ) && (i = i.filter(
383
401
  (r) => r.id !== m
384
402
  )), i = i.map((r) => {
385
403
  if (r.type !== "navbar") return r;
386
- const e = r.props, a = Array.isArray(e.links) ? e.links : [], s = a.filter((g) => g.href !== "/p/blog");
387
- return s.length !== a.length ? { ...r, props: { ...e, links: s } } : r;
388
- }), i !== o.structure ? { ...o, structure: i } : o;
404
+ const e = r.props, o = Array.isArray(e.links) ? e.links : [], s = o.filter((g) => g.href !== "/p/blog");
405
+ return s.length !== o.length ? { ...r, props: { ...e, links: s } } : r;
406
+ }), i !== a.structure ? { ...a, structure: i } : a;
389
407
  });
390
- return p.debug(
408
+ return d.debug(
391
409
  `Removed ${t.pages.length - n.length} blog page(s) and injected section`
392
410
  ), {
393
411
  ...t,