@brunoalz/smartgesti-site-editor 0.2.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/editor/BlockSelector.d.ts +2 -1
- package/dist/editor/BlockSelector.d.ts.map +1 -1
- package/dist/editor/BlockSelector.js +55 -64
- package/dist/editor/BlockSelector.js.map +1 -1
- package/dist/editor/LandingPageEditor.d.ts +19 -0
- package/dist/editor/LandingPageEditor.d.ts.map +1 -0
- package/dist/editor/LandingPageEditor.js +239 -0
- package/dist/editor/LandingPageEditor.js.map +1 -0
- package/dist/editor/PageTabBar.d.ts +4 -1
- package/dist/editor/PageTabBar.d.ts.map +1 -1
- package/dist/editor/PageTabBar.js +179 -41
- package/dist/editor/PageTabBar.js.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts +5 -3
- package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js +60 -113
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js.map +1 -1
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts +3 -1
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js +47 -33
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js.map +1 -1
- package/dist/editor/PropertyEditor/PropertyGroup.d.ts +1 -1
- package/dist/editor/PropertyEditor/PropertyGroup.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/VariationSelector.d.ts +2 -1
- package/dist/editor/PropertyEditor/VariationSelector.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/VariationSelector.js +35 -31
- package/dist/editor/PropertyEditor/VariationSelector.js.map +1 -1
- package/dist/editor/PropertyEditor/index.js +30 -28
- package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.d.ts +16 -0
- package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.d.ts.map +1 -0
- package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.js +170 -0
- package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.js.map +1 -0
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.d.ts +1 -1
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.js +148 -121
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.js.map +1 -1
- package/dist/editor/PropertyEditor/inputs/ImageInput.d.ts.map +1 -0
- package/dist/{components → editor/PropertyEditor}/inputs/ImageInput.js +41 -39
- package/dist/editor/PropertyEditor/inputs/ImageInput.js.map +1 -0
- package/dist/editor/PropertyEditor/inputs/TypographyInput.js +41 -44
- package/dist/editor/PropertyEditor/inputs/TypographyInput.js.map +1 -1
- package/dist/editor/PropertyEditor/inputs/index.d.ts +2 -0
- package/dist/editor/PropertyEditor/inputs/index.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.d.ts +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.js +167 -139
- package/dist/editor/PropertyEditor/renderPropertyInput.js.map +1 -1
- package/dist/editor/components/CenterPanel.d.ts +13 -4
- package/dist/editor/components/CenterPanel.d.ts.map +1 -1
- package/dist/editor/components/CenterPanel.js +40 -31
- package/dist/editor/components/CenterPanel.js.map +1 -1
- package/dist/editor/components/LeftPanel.d.ts +2 -1
- package/dist/editor/components/LeftPanel.d.ts.map +1 -1
- package/dist/editor/components/LeftPanel.js +13 -12
- package/dist/editor/components/LeftPanel.js.map +1 -1
- package/dist/editor/components/LoadingSpinner.d.ts.map +1 -0
- package/dist/editor/components/LoadingSpinner.js.map +1 -0
- package/dist/editor/components/RightPanel.d.ts +8 -2
- package/dist/editor/components/RightPanel.d.ts.map +1 -1
- package/dist/editor/components/RightPanel.js +24 -19
- package/dist/editor/components/RightPanel.js.map +1 -1
- package/dist/editor/components/Toolbar.d.ts +5 -1
- package/dist/editor/components/Toolbar.d.ts.map +1 -1
- package/dist/editor/components/Toolbar.js +56 -40
- package/dist/editor/components/Toolbar.js.map +1 -1
- package/dist/engine/export/exportHtml.d.ts +10 -5
- package/dist/engine/export/exportHtml.d.ts.map +1 -1
- package/dist/engine/export/exportHtml.js +38 -40
- package/dist/engine/export/exportHtml.js.map +1 -1
- package/dist/engine/export/exporters/content/HeadingExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/content/HeadingExporter.js +6 -6
- package/dist/engine/export/exporters/content/HeadingExporter.js.map +1 -1
- package/dist/engine/export/exporters/content/LinkExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/content/LinkExporter.js +6 -6
- package/dist/engine/export/exporters/content/LinkExporter.js.map +1 -1
- package/dist/engine/export/exporters/content/TextExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/content/TextExporter.js +7 -7
- package/dist/engine/export/exporters/content/TextExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts +6 -0
- package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts.map +1 -0
- package/dist/engine/export/exporters/sections/BlogPostExporters.js +101 -0
- package/dist/engine/export/exporters/sections/BlogPostExporters.js.map +1 -0
- package/dist/engine/export/exporters/sections/FooterExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/FooterExporter.js +33 -40
- package/dist/engine/export/exporters/sections/FooterExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/HeroExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/HeroExporter.js +222 -218
- package/dist/engine/export/exporters/sections/HeroExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/MarketingExporters.js +88 -88
- package/dist/engine/export/exporters/sections/MarketingExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/NavbarExporter.js +34 -34
- package/dist/engine/export/exporters/sections/NavbarExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/index.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/index.js +29 -22
- package/dist/engine/export/exporters/sections/index.js.map +1 -1
- package/dist/engine/export/sanitizeHtml.d.ts.map +1 -1
- package/dist/engine/export/sanitizeHtml.js +65 -18
- package/dist/engine/export/sanitizeHtml.js.map +1 -1
- package/dist/engine/export/styleResolver.d.ts.map +1 -1
- package/dist/engine/export/styleResolver.js +33 -33
- package/dist/engine/export/styleResolver.js.map +1 -1
- package/dist/engine/generators/generateLandingPage.d.ts +4 -4
- package/dist/engine/generators/generateLandingPage.d.ts.map +1 -1
- package/dist/engine/generators/generateLandingPage.js.map +1 -1
- package/dist/engine/index.d.ts +6 -3
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +99 -89
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/patch/PatchBuilder.d.ts +11 -11
- package/dist/engine/patch/PatchBuilder.d.ts.map +1 -1
- package/dist/engine/patch/PatchBuilder.js +92 -93
- package/dist/engine/patch/PatchBuilder.js.map +1 -1
- package/dist/engine/patch/applyPatch.js.map +1 -1
- package/dist/engine/plugins/builtin/blog/index.d.ts +3 -0
- package/dist/engine/plugins/builtin/blog/index.d.ts.map +1 -0
- package/dist/engine/plugins/builtin/blog/manifest.d.ts +3 -0
- package/dist/engine/plugins/builtin/blog/manifest.d.ts.map +1 -0
- package/dist/engine/plugins/builtin/blog/manifest.js +273 -0
- package/dist/engine/plugins/builtin/blog/manifest.js.map +1 -0
- package/dist/engine/plugins/builtin/blog/mockContentProvider.d.ts +7 -0
- package/dist/engine/plugins/builtin/blog/mockContentProvider.d.ts.map +1 -0
- package/dist/engine/plugins/builtin/blog/mockContentProvider.js +135 -0
- package/dist/engine/plugins/builtin/blog/mockContentProvider.js.map +1 -0
- package/dist/engine/plugins/contentHydration.d.ts +17 -0
- package/dist/engine/plugins/contentHydration.d.ts.map +1 -0
- package/dist/engine/plugins/contentHydration.js +121 -0
- package/dist/engine/plugins/contentHydration.js.map +1 -0
- package/dist/engine/plugins/dynamicPageResolver.d.ts +25 -0
- package/dist/engine/plugins/dynamicPageResolver.d.ts.map +1 -0
- package/dist/engine/plugins/dynamicPageResolver.js +32 -0
- package/dist/engine/plugins/dynamicPageResolver.js.map +1 -0
- package/dist/engine/plugins/index.d.ts +11 -0
- package/dist/engine/plugins/index.d.ts.map +1 -0
- package/dist/engine/plugins/pluginRegistry.d.ts +37 -0
- package/dist/engine/plugins/pluginRegistry.d.ts.map +1 -0
- package/dist/engine/plugins/pluginRegistry.js +134 -0
- package/dist/engine/plugins/pluginRegistry.js.map +1 -0
- package/dist/engine/plugins/types.d.ts +180 -0
- package/dist/engine/plugins/types.d.ts.map +1 -0
- package/dist/engine/presets/heroVariations.d.ts +5 -0
- package/dist/engine/presets/heroVariations.d.ts.map +1 -1
- package/dist/engine/presets/heroVariations.js +50 -6
- package/dist/engine/presets/heroVariations.js.map +1 -1
- package/dist/engine/preview/Preview.d.ts +19 -0
- package/dist/engine/preview/Preview.d.ts.map +1 -0
- package/dist/engine/preview/Preview.js +418 -0
- package/dist/engine/preview/Preview.js.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostCard.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/blogPostCard.d.ts.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostCard.js +53 -0
- package/dist/engine/registry/blocks/sections/blogPostCard.js.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostDetail.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/blogPostDetail.d.ts.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostDetail.js +49 -0
- package/dist/engine/registry/blocks/sections/blogPostDetail.js.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostGrid.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/blogPostGrid.d.ts.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostGrid.js +89 -0
- package/dist/engine/registry/blocks/sections/blogPostGrid.js.map +1 -0
- package/dist/engine/registry/blocks/sections/hero.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/hero.js +67 -14
- package/dist/engine/registry/blocks/sections/hero.js.map +1 -1
- package/dist/engine/registry/blocks/sections/index.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/index.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/navbar.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/navbar.js +2 -1
- package/dist/engine/registry/blocks/sections/navbar.js.map +1 -1
- package/dist/engine/registry/registry.d.ts.map +1 -1
- package/dist/engine/registry/registry.js +39 -36
- package/dist/engine/registry/registry.js.map +1 -1
- package/dist/engine/registry/types.d.ts +17 -13
- package/dist/engine/registry/types.d.ts.map +1 -1
- package/dist/engine/render/renderNodeImpl.js +85 -85
- package/dist/engine/render/renderNodeImpl.js.map +1 -1
- package/dist/engine/render/renderPage.d.ts +3 -3
- package/dist/engine/render/renderPage.d.ts.map +1 -1
- package/dist/engine/render/renderPage.js.map +1 -1
- package/dist/engine/render/renderers/composition/CardRenderer.js +4 -4
- package/dist/engine/render/renderers/content/LinkRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/content/LinkRenderer.js +41 -16
- package/dist/engine/render/renderers/content/LinkRenderer.js.map +1 -1
- package/dist/engine/render/renderers/content/SocialLinksRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/content/SocialLinksRenderer.js +16 -23
- package/dist/engine/render/renderers/content/SocialLinksRenderer.js.map +1 -1
- package/dist/engine/render/renderers/forms/FormRenderer.js +6 -6
- package/dist/engine/render/renderers/layout/GridRenderer.js +3 -3
- package/dist/engine/render/renderers/sections/BlogPostCardRenderer.d.ts +3 -0
- package/dist/engine/render/renderers/sections/BlogPostCardRenderer.d.ts.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostCardRenderer.js +199 -0
- package/dist/engine/render/renderers/sections/BlogPostCardRenderer.js.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.d.ts +3 -0
- package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.d.ts.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js +293 -0
- package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostGridRenderer.d.ts +3 -0
- package/dist/engine/render/renderers/sections/BlogPostGridRenderer.d.ts.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js +101 -0
- package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js.map +1 -0
- package/dist/engine/render/renderers/sections/CtaRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/CtaRenderer.js +33 -31
- package/dist/engine/render/renderers/sections/CtaRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FaqItemRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/FaqItemRenderer.js +7 -6
- package/dist/engine/render/renderers/sections/FaqItemRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FaqRenderer.js +7 -7
- package/dist/engine/render/renderers/sections/FaqRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.js +19 -18
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureRenderer.js +5 -4
- package/dist/engine/render/renderers/sections/FeatureRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FooterRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/FooterRenderer.js +25 -30
- package/dist/engine/render/renderers/sections/FooterRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/HeroRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/HeroRenderer.js +293 -229
- package/dist/engine/render/renderers/sections/HeroRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/NavbarRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/NavbarRenderer.js +23 -22
- package/dist/engine/render/renderers/sections/NavbarRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/PricingCardRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/PricingCardRenderer.js +7 -6
- package/dist/engine/render/renderers/sections/PricingCardRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/PricingRenderer.js +9 -9
- package/dist/engine/render/renderers/sections/PricingRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/TestimonialGridRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/TestimonialGridRenderer.js +17 -16
- package/dist/engine/render/renderers/sections/TestimonialGridRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/TestimonialRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/TestimonialRenderer.js +11 -10
- package/dist/engine/render/renderers/sections/TestimonialRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/index.js +24 -18
- package/dist/engine/render/renderers/sections/index.js.map +1 -1
- package/dist/engine/schema/siteDocument.d.ts +118 -7
- package/dist/engine/schema/siteDocument.d.ts.map +1 -1
- package/dist/engine/schema/siteDocument.js +1 -1
- package/dist/engine/schema/siteDocument.js.map +1 -1
- package/dist/engine/schema/themeTokens.d.ts +1 -1
- package/dist/engine/schema/themeTokens.js.map +1 -1
- package/dist/engine/shared/carouselAnimation.d.ts +20 -0
- package/dist/engine/shared/carouselAnimation.d.ts.map +1 -0
- package/dist/engine/shared/carouselAnimation.js +62 -0
- package/dist/engine/shared/carouselAnimation.js.map +1 -0
- package/dist/engine/shared/imageGrid/presets.js +4 -12
- package/dist/engine/shared/imageGrid/presets.js.map +1 -1
- package/dist/engine/shared/imageGrid/types.d.ts +2 -0
- package/dist/engine/shared/imageGrid/types.d.ts.map +1 -1
- package/dist/engine/shared/layoutConstants.d.ts +13 -0
- package/dist/engine/shared/layoutConstants.d.ts.map +1 -0
- package/dist/engine/shared/layoutConstants.js +14 -0
- package/dist/engine/shared/layoutConstants.js.map +1 -0
- package/dist/engine/shared/shadowConstants.d.ts +5 -0
- package/dist/engine/shared/shadowConstants.d.ts.map +1 -0
- package/dist/engine/shared/shadowConstants.js +11 -0
- package/dist/engine/shared/shadowConstants.js.map +1 -0
- package/dist/engine/shared/showWhen.d.ts +44 -0
- package/dist/engine/shared/showWhen.d.ts.map +1 -0
- package/dist/engine/shared/showWhen.js +33 -0
- package/dist/engine/shared/showWhen.js.map +1 -0
- package/dist/engine/shared/socialIcons.d.ts +6 -0
- package/dist/engine/shared/socialIcons.d.ts.map +1 -0
- package/dist/engine/shared/socialIcons.js +13 -0
- package/dist/engine/shared/socialIcons.js.map +1 -0
- package/dist/engine/shared/typeGuards.d.ts +11 -0
- package/dist/engine/shared/typeGuards.d.ts.map +1 -0
- package/dist/hooks/useEditorState.d.ts +8 -5
- package/dist/hooks/useEditorState.d.ts.map +1 -1
- package/dist/hooks/useEditorState.js +150 -194
- package/dist/hooks/useEditorState.js.map +1 -1
- package/dist/hooks/useNavbarAutoSync.d.ts +2 -2
- package/dist/hooks/useNavbarAutoSync.d.ts.map +1 -1
- package/dist/hooks/useNavbarAutoSync.js.map +1 -1
- package/dist/index.d.ts +60 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +109 -124
- package/dist/index.js.map +1 -1
- package/dist/shared/index.d.ts +2 -2
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/schema.d.ts +4 -4
- package/dist/shared/schema.d.ts.map +1 -1
- package/dist/shared/schema.js.map +1 -1
- package/dist/shared/templates/escola-blog.d.ts +3 -0
- package/dist/shared/templates/escola-blog.d.ts.map +1 -0
- package/dist/shared/templates/escola-blog.js +160 -0
- package/dist/shared/templates/escola-blog.js.map +1 -0
- package/dist/shared/templates/escola-edvi.d.ts +2 -2
- package/dist/shared/templates/escola-edvi.d.ts.map +1 -1
- package/dist/shared/templates/escola-edvi.js.map +1 -1
- package/dist/shared/templates/escola-premium.d.ts +2 -2
- package/dist/shared/templates/escola-premium.d.ts.map +1 -1
- package/dist/shared/templates/escola-premium.js.map +1 -1
- package/dist/shared/templates/escola-zilom.d.ts +2 -2
- package/dist/shared/templates/escola-zilom.d.ts.map +1 -1
- package/dist/shared/templates/escola-zilom.js.map +1 -1
- package/dist/shared/templates/index.d.ts +7 -5
- package/dist/shared/templates/index.d.ts.map +1 -1
- package/dist/shared/templates/index.js +30 -12
- package/dist/shared/templates/index.js.map +1 -1
- package/dist/shared/validators.d.ts +3 -3
- package/dist/shared/validators.d.ts.map +1 -1
- package/dist/shared/validators.js.map +1 -1
- package/dist/site/BlockRenderer.d.ts +1 -1
- package/dist/site/BlockRenderer.d.ts.map +1 -1
- package/dist/site/BlockRenderer.js +22 -26
- package/dist/site/BlockRenderer.js.map +1 -1
- package/dist/site/blocks/Button.js +15 -17
- package/dist/site/blocks/Button.js.map +1 -1
- package/dist/site/blocks/Card.js +13 -15
- package/dist/site/blocks/Card.js.map +1 -1
- package/dist/site/blocks/Features.js +15 -17
- package/dist/site/blocks/Features.js.map +1 -1
- package/dist/site/blocks/Footer.js +10 -12
- package/dist/site/blocks/Footer.js.map +1 -1
- package/dist/site/blocks/Hero.js +12 -14
- package/dist/site/blocks/Hero.js.map +1 -1
- package/dist/site/blocks/Navbar.js +13 -15
- package/dist/site/blocks/Navbar.js.map +1 -1
- package/dist/site/blocks/Section.js +9 -11
- package/dist/site/blocks/Section.js.map +1 -1
- package/dist/site/blocks/SectionHeader.js +9 -11
- package/dist/site/blocks/SectionHeader.js.map +1 -1
- package/dist/site/blocks/SiteRoot.js +9 -12
- package/dist/site/blocks/SiteRoot.js.map +1 -1
- package/dist/site/index.js +73 -73
- package/dist/styles/site/sections.css.d.ts +1 -1
- package/dist/utils/blockUtils.d.ts +2 -2
- package/dist/utils/blockUtils.d.ts.map +1 -1
- package/dist/utils/blockUtils.js.map +1 -1
- package/dist/utils/changeDetector.d.ts +3 -2
- package/dist/utils/changeDetector.d.ts.map +1 -1
- package/dist/utils/changeDetector.js +39 -39
- package/dist/utils/changeDetector.js.map +1 -1
- package/dist/utils/cn.js +2 -2
- package/dist/utils/dataURLUtils.d.ts +24 -0
- package/dist/utils/dataURLUtils.d.ts.map +1 -0
- package/dist/utils/dataURLUtils.js +47 -0
- package/dist/utils/dataURLUtils.js.map +1 -0
- package/dist/utils/documentHash.d.ts +2 -2
- package/dist/utils/documentHash.d.ts.map +1 -1
- package/dist/utils/documentHash.js +8 -7
- package/dist/utils/documentHash.js.map +1 -1
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +13 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/navbarSync.d.ts +3 -3
- package/dist/utils/navbarSync.d.ts.map +1 -1
- package/dist/utils/navbarSync.js +25 -24
- package/dist/utils/navbarSync.js.map +1 -1
- package/dist/utils/sharedTemplateToEngine.d.ts +7 -8
- package/dist/utils/sharedTemplateToEngine.d.ts.map +1 -1
- package/dist/utils/sharedTemplateToEngine.js +14 -87
- package/dist/utils/sharedTemplateToEngine.js.map +1 -1
- package/dist/viewer/LandingPageViewer.d.ts +32 -0
- package/dist/viewer/LandingPageViewer.d.ts.map +1 -0
- package/dist/viewer/LandingPageViewer.js +300 -0
- package/dist/viewer/LandingPageViewer.js.map +1 -0
- package/package.json +10 -5
- package/dist/components/ComponentPalette/definitions.d.ts +0 -3
- package/dist/components/ComponentPalette/definitions.d.ts.map +0 -1
- package/dist/components/ComponentPalette/definitions.js +0 -206
- package/dist/components/ComponentPalette/definitions.js.map +0 -1
- package/dist/components/ComponentPalette/index.d.ts +0 -7
- package/dist/components/ComponentPalette/index.d.ts.map +0 -1
- package/dist/components/ComponentPalette/index.js +0 -86
- package/dist/components/ComponentPalette/index.js.map +0 -1
- package/dist/components/LoadingSpinner.d.ts.map +0 -1
- package/dist/components/LoadingSpinner.js.map +0 -1
- package/dist/components/PreviewPanel/index.d.ts +0 -12
- package/dist/components/PreviewPanel/index.d.ts.map +0 -1
- package/dist/components/PreviewPanel/index.js +0 -140
- package/dist/components/PreviewPanel/index.js.map +0 -1
- package/dist/components/PropertyPanel/index.d.ts +0 -8
- package/dist/components/PropertyPanel/index.d.ts.map +0 -1
- package/dist/components/PropertyPanel/index.js +0 -223
- package/dist/components/PropertyPanel/index.js.map +0 -1
- package/dist/components/SiteEditor/index.d.ts +0 -3
- package/dist/components/SiteEditor/index.d.ts.map +0 -1
- package/dist/components/SiteEditor/index.js +0 -251
- package/dist/components/SiteEditor/index.js.map +0 -1
- package/dist/components/SiteViewer/index.d.ts +0 -3
- package/dist/components/SiteViewer/index.d.ts.map +0 -1
- package/dist/components/SiteViewer/index.js +0 -55
- package/dist/components/SiteViewer/index.js.map +0 -1
- package/dist/components/TemplateSelector/index.d.ts +0 -7
- package/dist/components/TemplateSelector/index.d.ts.map +0 -1
- package/dist/components/TemplateSelector/index.js +0 -109
- package/dist/components/TemplateSelector/index.js.map +0 -1
- package/dist/components/Toolbar/index.d.ts +0 -15
- package/dist/components/Toolbar/index.d.ts.map +0 -1
- package/dist/components/Toolbar/index.js +0 -113
- package/dist/components/Toolbar/index.js.map +0 -1
- package/dist/components/editors/PaletteSelector.d.ts +0 -14
- package/dist/components/editors/PaletteSelector.d.ts.map +0 -1
- package/dist/components/editors/PaletteSelector.js +0 -175
- package/dist/components/editors/PaletteSelector.js.map +0 -1
- package/dist/components/effects/SectionGlow.d.ts +0 -12
- package/dist/components/effects/SectionGlow.d.ts.map +0 -1
- package/dist/components/effects/SectionGlow.js +0 -139
- package/dist/components/effects/SectionGlow.js.map +0 -1
- package/dist/components/inputs/CheckboxInput.d.ts +0 -3
- package/dist/components/inputs/CheckboxInput.d.ts.map +0 -1
- package/dist/components/inputs/CheckboxInput.js +0 -46
- package/dist/components/inputs/CheckboxInput.js.map +0 -1
- package/dist/components/inputs/ColorInput.d.ts +0 -7
- package/dist/components/inputs/ColorInput.d.ts.map +0 -1
- package/dist/components/inputs/ColorInput.js +0 -180
- package/dist/components/inputs/ColorInput.js.map +0 -1
- package/dist/components/inputs/GradientInput.d.ts +0 -7
- package/dist/components/inputs/GradientInput.d.ts.map +0 -1
- package/dist/components/inputs/GradientInput.js +0 -78
- package/dist/components/inputs/GradientInput.js.map +0 -1
- package/dist/components/inputs/ImageInput.d.ts.map +0 -1
- package/dist/components/inputs/ImageInput.js.map +0 -1
- package/dist/components/inputs/SelectInput.d.ts +0 -7
- package/dist/components/inputs/SelectInput.d.ts.map +0 -1
- package/dist/components/inputs/SelectInput.js +0 -97
- package/dist/components/inputs/SelectInput.js.map +0 -1
- package/dist/components/inputs/SliderInput.d.ts +0 -8
- package/dist/components/inputs/SliderInput.d.ts.map +0 -1
- package/dist/components/inputs/SliderInput.js +0 -77
- package/dist/components/inputs/SliderInput.js.map +0 -1
- package/dist/components/inputs/index.d.ts +0 -11
- package/dist/components/inputs/index.d.ts.map +0 -1
- package/dist/components/inputs/types.d.ts +0 -48
- package/dist/components/inputs/types.d.ts.map +0 -1
- package/dist/components/inputs/types.js +0 -9
- package/dist/components/inputs/types.js.map +0 -1
- package/dist/components/renderers/ComponentRenderer.d.ts +0 -8
- package/dist/components/renderers/ComponentRenderer.d.ts.map +0 -1
- package/dist/components/renderers/ComponentRenderer.js +0 -13
- package/dist/components/renderers/ComponentRenderer.js.map +0 -1
- package/dist/components/renderers/HeroRenderer.d.ts +0 -3
- package/dist/components/renderers/HeroRenderer.d.ts.map +0 -1
- package/dist/components/renderers/HeroRenderer.js +0 -10
- package/dist/components/renderers/HeroRenderer.js.map +0 -1
- package/dist/components/renderers/hero/HeroBanner.d.ts +0 -3
- package/dist/components/renderers/hero/HeroBanner.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroBanner.js +0 -122
- package/dist/components/renderers/hero/HeroBanner.js.map +0 -1
- package/dist/components/renderers/hero/HeroCinematic.d.ts +0 -3
- package/dist/components/renderers/hero/HeroCinematic.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroCinematic.js +0 -141
- package/dist/components/renderers/hero/HeroCinematic.js.map +0 -1
- package/dist/components/renderers/hero/HeroClassic.d.ts +0 -3
- package/dist/components/renderers/hero/HeroClassic.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroClassic.js +0 -241
- package/dist/components/renderers/hero/HeroClassic.js.map +0 -1
- package/dist/components/renderers/hero/HeroCollage.d.ts +0 -3
- package/dist/components/renderers/hero/HeroCollage.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroCollage.js +0 -131
- package/dist/components/renderers/hero/HeroCollage.js.map +0 -1
- package/dist/components/renderers/hero/HeroColumns.d.ts +0 -3
- package/dist/components/renderers/hero/HeroColumns.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroColumns.js +0 -114
- package/dist/components/renderers/hero/HeroColumns.js.map +0 -1
- package/dist/components/renderers/hero/HeroGlass.d.ts +0 -3
- package/dist/components/renderers/hero/HeroGlass.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroGlass.js +0 -119
- package/dist/components/renderers/hero/HeroGlass.js.map +0 -1
- package/dist/components/renderers/hero/HeroNeon.d.ts +0 -3
- package/dist/components/renderers/hero/HeroNeon.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroNeon.js +0 -136
- package/dist/components/renderers/hero/HeroNeon.js.map +0 -1
- package/dist/components/renderers/hero/HeroParallax.d.ts +0 -3
- package/dist/components/renderers/hero/HeroParallax.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroParallax.js +0 -99
- package/dist/components/renderers/hero/HeroParallax.js.map +0 -1
- package/dist/components/renderers/hero/HeroSplit.d.ts +0 -3
- package/dist/components/renderers/hero/HeroSplit.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroSplit.js +0 -142
- package/dist/components/renderers/hero/HeroSplit.js.map +0 -1
- package/dist/components/renderers/hero/HeroSpotlight.d.ts +0 -3
- package/dist/components/renderers/hero/HeroSpotlight.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroSpotlight.js +0 -213
- package/dist/components/renderers/hero/HeroSpotlight.js.map +0 -1
- package/dist/components/renderers/hero/index.d.ts +0 -14
- package/dist/components/renderers/hero/index.d.ts.map +0 -1
- package/dist/components/renderers/index.d.ts +0 -8
- package/dist/components/renderers/index.d.ts.map +0 -1
- package/dist/components/renderers/index.js +0 -89
- package/dist/components/renderers/index.js.map +0 -1
- package/dist/components/renderers/types.d.ts +0 -11
- package/dist/components/renderers/types.d.ts.map +0 -1
- package/dist/editor/LandingPageEditorV2.d.ts +0 -19
- package/dist/editor/LandingPageEditorV2.d.ts.map +0 -1
- package/dist/editor/LandingPageEditorV2.js +0 -311
- package/dist/editor/LandingPageEditorV2.js.map +0 -1
- package/dist/editor/PropertyEditor/PropertyGroup.js +0 -23
- package/dist/editor/PropertyEditor/PropertyGroup.js.map +0 -1
- package/dist/engine/preview/PreviewV2.d.ts +0 -15
- package/dist/engine/preview/PreviewV2.d.ts.map +0 -1
- package/dist/engine/preview/PreviewV2.js +0 -242
- package/dist/engine/preview/PreviewV2.js.map +0 -1
- package/dist/modules/registry.d.ts +0 -31
- package/dist/modules/registry.d.ts.map +0 -1
- package/dist/modules/registry.js +0 -67
- package/dist/modules/registry.js.map +0 -1
- package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -57
- package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
- package/dist/node_modules/@dnd-kit/core/dist/core.esm.js +0 -2345
- package/dist/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
- package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -440
- package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
- package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -236
- package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
- package/dist/node_modules/clsx/dist/clsx.js +0 -17
- package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/Icon.js +0 -35
- package/dist/node_modules/lucide-react/dist/esm/Icon.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +0 -18
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +0 -15
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-right.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-right.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/check.js +0 -6
- package/dist/node_modules/lucide-react/dist/esm/icons/check.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +0 -6
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -15
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +0 -12
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/globe.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/globe.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/grid-3x3.js +0 -12
- package/dist/node_modules/lucide-react/dist/esm/icons/grid-3x3.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.js +0 -13
- package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/heading.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/heading.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/image.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/image.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/images.js +0 -11
- package/dist/node_modules/lucide-react/dist/esm/icons/images.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/list.js +0 -13
- package/dist/node_modules/lucide-react/dist/esm/icons/list.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.js +0 -6
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer-click.js +0 -18
- package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer-click.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/navigation.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/navigation.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/phone.js +0 -14
- package/dist/node_modules/lucide-react/dist/esm/icons/phone.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/plus.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/plus.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/redo-2.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/redo-2.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/redo.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/redo.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/save.js +0 -16
- package/dist/node_modules/lucide-react/dist/esm/icons/save.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/square.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/square.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/star.js +0 -14
- package/dist/node_modules/lucide-react/dist/esm/icons/star.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js +0 -12
- package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/type.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/type.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/undo-2.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/undo-2.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/undo.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/undo.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/user.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/user.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js +0 -6
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js.map +0 -1
- package/dist/node_modules/react-colorful/dist/index.js +0 -167
- package/dist/node_modules/react-colorful/dist/index.js.map +0 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -2266
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
- package/dist/types/index.d.ts +0 -99
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/module.d.ts +0 -25
- package/dist/types/module.d.ts.map +0 -1
- package/dist/utils/htmlExporter.d.ts +0 -6
- package/dist/utils/htmlExporter.d.ts.map +0 -1
- package/dist/utils/htmlExporter.js +0 -92
- package/dist/utils/htmlExporter.js.map +0 -1
- package/dist/utils/themeApplier.d.ts +0 -11
- package/dist/utils/themeApplier.d.ts.map +0 -1
- package/dist/utils/themeApplier.js +0 -29
- package/dist/utils/themeApplier.js.map +0 -1
- package/dist/utils/useDebounce.d.ts +0 -12
- package/dist/utils/useDebounce.d.ts.map +0 -1
- package/dist/viewer/LandingPageViewerV2.d.ts +0 -25
- package/dist/viewer/LandingPageViewerV2.d.ts.map +0 -1
- package/dist/viewer/LandingPageViewerV2.js +0 -253
- package/dist/viewer/LandingPageViewerV2.js.map +0 -1
- /package/dist/{components → editor/PropertyEditor}/inputs/ImageInput.d.ts +0 -0
- /package/dist/{components → editor/components}/LoadingSpinner.d.ts +0 -0
- /package/dist/{components → editor/components}/LoadingSpinner.js +0 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { pluginRegistry as h } from "../../pluginRegistry.js";
|
|
2
|
+
import { logger as n } from "../../../../utils/logger.js";
|
|
3
|
+
const g = "plugin-blog-home-grid", c = [
|
|
4
|
+
{
|
|
5
|
+
title: "Feira de Ciências 2026: Inovação e Criatividade",
|
|
6
|
+
excerpt: "Nossos alunos apresentaram projetos incríveis na Feira de Ciências deste ano. Confira os destaques e premiações!",
|
|
7
|
+
image: "https://images.unsplash.com/photo-1567168544230-3b9e5ec47659?w=800&h=400&fit=crop",
|
|
8
|
+
category: "Eventos",
|
|
9
|
+
date: "05 Fev 2026",
|
|
10
|
+
linkHref: "/site/p/blog/feira-de-ciencias-2026",
|
|
11
|
+
linkText: "Ler mais"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
title: "Matrículas Abertas para o Segundo Semestre",
|
|
15
|
+
excerpt: "Garanta a vaga do seu filho na melhor escola da região. Condições especiais para matrículas antecipadas.",
|
|
16
|
+
image: "https://images.unsplash.com/photo-1523050854058-8df90110c9f1?w=800&h=400&fit=crop",
|
|
17
|
+
category: "Institucional",
|
|
18
|
+
date: "01 Fev 2026",
|
|
19
|
+
linkHref: "/site/p/blog/matriculas-segundo-semestre",
|
|
20
|
+
linkText: "Ler mais"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
title: "5 Dicas para Preparar seu Filho para o Ano Letivo",
|
|
24
|
+
excerpt: "Dicas práticas para uma transição tranquila e um início de ano produtivo para toda a família.",
|
|
25
|
+
image: "https://images.unsplash.com/photo-1503676260728-1c00da094a0b?w=800&h=400&fit=crop",
|
|
26
|
+
category: "Educação",
|
|
27
|
+
date: "28 Jan 2026",
|
|
28
|
+
linkHref: "/site/p/blog/dicas-preparar-ano-letivo",
|
|
29
|
+
linkText: "Ler mais"
|
|
30
|
+
}
|
|
31
|
+
], v = `
|
|
32
|
+
<h2>O que é a Feira de Ciências?</h2>
|
|
33
|
+
<p>A Feira de Ciências é um evento anual que celebra a curiosidade, a pesquisa e a criatividade dos nossos alunos. Nesta edição especial de 2026, recebemos mais de <strong>500 visitantes</strong> e contamos com a participação de todas as turmas do Ensino Fundamental e Médio.</p>
|
|
34
|
+
<p>Este ano, o tema central foi <em>"Ciência e Sustentabilidade"</em>, incentivando os estudantes a desenvolverem projetos que aliassem inovação tecnológica com responsabilidade ambiental.</p>
|
|
35
|
+
|
|
36
|
+
<h2>Destaques da Edição 2026</h2>
|
|
37
|
+
<p>Entre os mais de 50 projetos apresentados, alguns se destacaram pela originalidade e impacto:</p>
|
|
38
|
+
<ul>
|
|
39
|
+
<li><strong>Jardim Sustentável Inteligente</strong> — Alunos do 5º ano desenvolveram um sistema de irrigação automática usando sensores de umidade e placa Arduino.</li>
|
|
40
|
+
<li><strong>Robótica Educacional</strong> — A turma do 8º ano criou um robô que auxilia no ensino de matemática para crianças do 1º ao 3º ano.</li>
|
|
41
|
+
<li><strong>Energia Solar na Escola</strong> — Projeto do 2º ano do Ensino Médio demonstrou como painéis solares poderiam reduzir em 40% o consumo de energia da escola.</li>
|
|
42
|
+
</ul>
|
|
43
|
+
|
|
44
|
+
<blockquote>
|
|
45
|
+
<p>"A Feira de Ciências é um dos momentos mais importantes do nosso calendário escolar. Ver a dedicação e o brilho nos olhos dos alunos ao apresentarem seus projetos nos enche de orgulho e nos motiva a continuar investindo em educação de qualidade."</p>
|
|
46
|
+
<p><strong>— Prof. Maria Silva, Coordenadora Pedagógica</strong></p>
|
|
47
|
+
</blockquote>
|
|
48
|
+
|
|
49
|
+
<h2>Premiações</h2>
|
|
50
|
+
<p>O júri, composto por professores universitários e profissionais da área de tecnologia, selecionou os três melhores projetos:</p>
|
|
51
|
+
<ol>
|
|
52
|
+
<li><strong>1º Lugar:</strong> Jardim Sustentável Inteligente (5º ano)</li>
|
|
53
|
+
<li><strong>2º Lugar:</strong> Energia Solar na Escola (2º EM)</li>
|
|
54
|
+
<li><strong>3º Lugar:</strong> Robótica Educacional (8º ano)</li>
|
|
55
|
+
</ol>
|
|
56
|
+
|
|
57
|
+
<h2>Próximos Passos</h2>
|
|
58
|
+
<p>Os três projetos finalistas representarão nossa escola na <strong>Feira Regional de Ciências</strong>, que acontecerá em março na capital. Os alunos já estão se preparando para levar suas apresentações a um público ainda maior.</p>
|
|
59
|
+
<p>Parabéns a todos os participantes, professores orientadores e famílias que apoiaram essa jornada de descobertas!</p>
|
|
60
|
+
`.trim();
|
|
61
|
+
function p(o, s) {
|
|
62
|
+
return { ...JSON.parse(JSON.stringify(o)), id: s };
|
|
63
|
+
}
|
|
64
|
+
const f = {
|
|
65
|
+
manifest: {
|
|
66
|
+
id: "blog",
|
|
67
|
+
version: "1.0.0",
|
|
68
|
+
name: "Blog",
|
|
69
|
+
description: "Blog com posts, categorias e tags",
|
|
70
|
+
icon: "FileText",
|
|
71
|
+
capabilities: {
|
|
72
|
+
blocks: ["blogPostCard", "blogPostGrid", "blogPostDetail"],
|
|
73
|
+
pageTemplates: [
|
|
74
|
+
{
|
|
75
|
+
id: "blog-listing",
|
|
76
|
+
name: "Blog",
|
|
77
|
+
slug: "blog",
|
|
78
|
+
pluginId: "blog",
|
|
79
|
+
structure: [],
|
|
80
|
+
dataSource: {
|
|
81
|
+
provider: "blog-posts",
|
|
82
|
+
mode: "list"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: "blog-post",
|
|
87
|
+
name: "Post",
|
|
88
|
+
slug: "blog/:slug",
|
|
89
|
+
pluginId: "blog",
|
|
90
|
+
structure: [],
|
|
91
|
+
dataSource: {
|
|
92
|
+
provider: "blog-posts",
|
|
93
|
+
mode: "single",
|
|
94
|
+
paramMapping: { slug: ":slug" }
|
|
95
|
+
},
|
|
96
|
+
editRestrictions: {
|
|
97
|
+
lockedStructure: !0,
|
|
98
|
+
nonRemovable: !0
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
dataSchemas: [
|
|
103
|
+
{
|
|
104
|
+
type: "blog-post",
|
|
105
|
+
label: "Blog Post",
|
|
106
|
+
fields: [
|
|
107
|
+
{ name: "title", type: "string", required: !0, label: "Title" },
|
|
108
|
+
{ name: "slug", type: "string", required: !0, label: "Slug" },
|
|
109
|
+
{ name: "excerpt", type: "string", label: "Excerpt" },
|
|
110
|
+
{ name: "content", type: "richtext", required: !0, label: "Content" },
|
|
111
|
+
{ name: "featuredImage", type: "image", label: "Featured Image" },
|
|
112
|
+
{ name: "category", type: "string", label: "Category" },
|
|
113
|
+
{ name: "tags", type: "array", label: "Tags" },
|
|
114
|
+
{ name: "authorVariant", type: "string", label: "Author Variant" },
|
|
115
|
+
{ name: "readingTime", type: "number", label: "Reading Time" }
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
contentProviders: ["blog-posts", "blog-categories"]
|
|
120
|
+
},
|
|
121
|
+
restrictions: {
|
|
122
|
+
lockedFields: {
|
|
123
|
+
blogPostDetail: ["content", "date"]
|
|
124
|
+
},
|
|
125
|
+
requiredPages: ["blog-listing", "blog-post"]
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
onActivate(o) {
|
|
129
|
+
n.debug("Blog plugin activating...");
|
|
130
|
+
const s = new Set(o.pages.map((e) => e.id)), a = [...o.pages], i = o.pages.find((e) => e.slug === "home") || o.pages[0], t = i?.structure.find((e) => e.type === "navbar"), l = i?.structure.find((e) => e.type === "footer");
|
|
131
|
+
if (i) {
|
|
132
|
+
const e = a.findIndex((r) => r.id === i.id), m = i.structure.some(
|
|
133
|
+
(r) => r.id === g
|
|
134
|
+
);
|
|
135
|
+
if (e >= 0 && !m) {
|
|
136
|
+
const r = {
|
|
137
|
+
id: g,
|
|
138
|
+
type: "blogPostGrid",
|
|
139
|
+
props: {
|
|
140
|
+
title: "Blog",
|
|
141
|
+
subtitle: "Últimas publicações",
|
|
142
|
+
columns: 3,
|
|
143
|
+
cards: c,
|
|
144
|
+
variant: "default",
|
|
145
|
+
showViewAll: !0,
|
|
146
|
+
viewAllText: "Ver todos os posts",
|
|
147
|
+
viewAllHref: "/site/p/blog"
|
|
148
|
+
}
|
|
149
|
+
}, d = [...a[e].structure], u = d.findIndex(
|
|
150
|
+
(b) => b.type === "footer"
|
|
151
|
+
);
|
|
152
|
+
u >= 0 ? d.splice(u, 0, r) : d.push(r), a[e] = {
|
|
153
|
+
...a[e],
|
|
154
|
+
structure: d
|
|
155
|
+
}, n.debug("Blog section injected into home page");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (!s.has("blog")) {
|
|
159
|
+
const e = [];
|
|
160
|
+
t && e.push(p(t, "blog-page-navbar")), e.push({
|
|
161
|
+
id: "blog-page-hero",
|
|
162
|
+
type: "hero",
|
|
163
|
+
props: {
|
|
164
|
+
title: "Blog",
|
|
165
|
+
subtitle: "Novidades & Publicações",
|
|
166
|
+
description: "Acompanhe as últimas novidades, eventos e conquistas da nossa comunidade escolar.",
|
|
167
|
+
variant: "centered",
|
|
168
|
+
align: "center",
|
|
169
|
+
overlay: !0,
|
|
170
|
+
overlayColor: "rgba(79, 70, 229, 0.9)",
|
|
171
|
+
background: "#4f46e5",
|
|
172
|
+
minHeight: "280px"
|
|
173
|
+
}
|
|
174
|
+
}), e.push({
|
|
175
|
+
id: "blog-grid-main",
|
|
176
|
+
type: "blogPostGrid",
|
|
177
|
+
props: {
|
|
178
|
+
title: "",
|
|
179
|
+
subtitle: "",
|
|
180
|
+
columns: 3,
|
|
181
|
+
cards: c,
|
|
182
|
+
variant: "default",
|
|
183
|
+
showViewAll: !1,
|
|
184
|
+
viewAllText: "Ver todos",
|
|
185
|
+
viewAllHref: "/blog"
|
|
186
|
+
}
|
|
187
|
+
}), l && e.push(p(l, "blog-page-footer")), a.push({
|
|
188
|
+
id: "blog",
|
|
189
|
+
name: "Blog",
|
|
190
|
+
slug: "blog",
|
|
191
|
+
pluginId: "blog",
|
|
192
|
+
pageTemplateId: "blog-listing",
|
|
193
|
+
structure: e,
|
|
194
|
+
dataSource: {
|
|
195
|
+
provider: "blog-posts",
|
|
196
|
+
mode: "list"
|
|
197
|
+
}
|
|
198
|
+
}), n.debug("Blog listing page created");
|
|
199
|
+
}
|
|
200
|
+
if (!s.has("blog-post")) {
|
|
201
|
+
const e = [];
|
|
202
|
+
t && e.push(p(t, "post-page-navbar")), e.push({
|
|
203
|
+
id: "blog-detail-main",
|
|
204
|
+
type: "blogPostDetail",
|
|
205
|
+
props: {
|
|
206
|
+
title: "Feira de Ciências 2026: Inovação e Criatividade",
|
|
207
|
+
content: v,
|
|
208
|
+
featuredImage: "https://images.unsplash.com/photo-1567168544230-3b9e5ec47659?w=1200&h=600&fit=crop",
|
|
209
|
+
date: "05 Fev 2026",
|
|
210
|
+
category: "Eventos",
|
|
211
|
+
authorVariant: "inline",
|
|
212
|
+
readingTime: "5 min de leitura",
|
|
213
|
+
tags: ["Feira de Ciências", "Eventos", "Sustentabilidade", "Projetos"],
|
|
214
|
+
showFeaturedImage: !0,
|
|
215
|
+
showAuthor: !0,
|
|
216
|
+
showDate: !0,
|
|
217
|
+
showTags: !0,
|
|
218
|
+
showReadingTime: !0,
|
|
219
|
+
contentMaxWidth: "720px"
|
|
220
|
+
}
|
|
221
|
+
}), l && e.push(p(l, "post-page-footer")), a.push({
|
|
222
|
+
id: "blog-post",
|
|
223
|
+
name: "Post",
|
|
224
|
+
slug: "blog/:slug",
|
|
225
|
+
pluginId: "blog",
|
|
226
|
+
pageTemplateId: "blog-post",
|
|
227
|
+
isDynamic: !0,
|
|
228
|
+
structure: e,
|
|
229
|
+
dataSource: {
|
|
230
|
+
provider: "blog-posts",
|
|
231
|
+
mode: "single",
|
|
232
|
+
paramMapping: { slug: ":slug" }
|
|
233
|
+
},
|
|
234
|
+
editRestrictions: {
|
|
235
|
+
lockedStructure: !0,
|
|
236
|
+
nonRemovable: !0
|
|
237
|
+
}
|
|
238
|
+
}), n.debug("Blog post detail page created");
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
...o,
|
|
242
|
+
pages: a
|
|
243
|
+
};
|
|
244
|
+
},
|
|
245
|
+
onDeactivate(o) {
|
|
246
|
+
n.debug("Blog plugin deactivating...");
|
|
247
|
+
const s = o.pages.filter((a) => a.pluginId !== "blog").map((a) => a.structure.some(
|
|
248
|
+
(t) => t.id === g
|
|
249
|
+
) ? {
|
|
250
|
+
...a,
|
|
251
|
+
structure: a.structure.filter(
|
|
252
|
+
(t) => t.id !== g
|
|
253
|
+
)
|
|
254
|
+
} : a);
|
|
255
|
+
return n.debug(
|
|
256
|
+
`Removed ${o.pages.length - s.length} blog page(s) and injected section`
|
|
257
|
+
), {
|
|
258
|
+
...o,
|
|
259
|
+
pages: s
|
|
260
|
+
};
|
|
261
|
+
},
|
|
262
|
+
getEditorRestrictions(o) {
|
|
263
|
+
if (o === "blogPostDetail")
|
|
264
|
+
return {
|
|
265
|
+
lockedFields: ["content", "date"]
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
h.register(f);
|
|
270
|
+
export {
|
|
271
|
+
f as blogPlugin
|
|
272
|
+
};
|
|
273
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sources":["../../../../../src/engine/plugins/builtin/blog/manifest.ts"],"sourcesContent":["/**\n * Blog Plugin Manifest\n * Plugin para blog com posts, categorias e tags.\n *\n * onActivate:\n * 1. Injeta seção blogPostGrid na home page (antes do footer)\n * 2. Cria página \"Blog\" com navbar + grid de posts + footer\n * 3. Cria página \"Post\" com navbar + detalhe do post + footer\n *\n * onDeactivate:\n * 1. Remove a seção injetada na home page\n * 2. Remove as páginas do plugin\n */\n\nimport type { PluginRegistration } from \"../../types\";\nimport type { SiteDocument, Block, BlockType } from \"../../../schema/siteDocument\";\nimport { pluginRegistry } from \"../../pluginRegistry\";\nimport { logger } from \"../../../../utils/logger\";\n\n// ─── ID usado para a seção de blog injetada na home page ───\nconst BLOG_HOME_SECTION_ID = \"plugin-blog-home-grid\";\n\n// ─── Sample blog cards para preview ───\nconst SAMPLE_BLOG_CARDS = [\n {\n title: \"Feira de Ciências 2026: Inovação e Criatividade\",\n excerpt:\n \"Nossos alunos apresentaram projetos incríveis na Feira de Ciências deste ano. Confira os destaques e premiações!\",\n image:\n \"https://images.unsplash.com/photo-1567168544230-3b9e5ec47659?w=800&h=400&fit=crop\",\n category: \"Eventos\",\n date: \"05 Fev 2026\",\n linkHref: \"/site/p/blog/feira-de-ciencias-2026\",\n linkText: \"Ler mais\",\n },\n {\n title: \"Matrículas Abertas para o Segundo Semestre\",\n excerpt:\n \"Garanta a vaga do seu filho na melhor escola da região. Condições especiais para matrículas antecipadas.\",\n image:\n \"https://images.unsplash.com/photo-1523050854058-8df90110c9f1?w=800&h=400&fit=crop\",\n category: \"Institucional\",\n date: \"01 Fev 2026\",\n linkHref: \"/site/p/blog/matriculas-segundo-semestre\",\n linkText: \"Ler mais\",\n },\n {\n title: \"5 Dicas para Preparar seu Filho para o Ano Letivo\",\n excerpt:\n \"Dicas práticas para uma transição tranquila e um início de ano produtivo para toda a família.\",\n image:\n \"https://images.unsplash.com/photo-1503676260728-1c00da094a0b?w=800&h=400&fit=crop\",\n category: \"Educação\",\n date: \"28 Jan 2026\",\n linkHref: \"/site/p/blog/dicas-preparar-ano-letivo\",\n linkText: \"Ler mais\",\n },\n];\n\n// ─── Conteúdo HTML rico para o post de exemplo ───\nconst SAMPLE_POST_CONTENT = `\n<h2>O que é a Feira de Ciências?</h2>\n<p>A Feira de Ciências é um evento anual que celebra a curiosidade, a pesquisa e a criatividade dos nossos alunos. Nesta edição especial de 2026, recebemos mais de <strong>500 visitantes</strong> e contamos com a participação de todas as turmas do Ensino Fundamental e Médio.</p>\n<p>Este ano, o tema central foi <em>\"Ciência e Sustentabilidade\"</em>, incentivando os estudantes a desenvolverem projetos que aliassem inovação tecnológica com responsabilidade ambiental.</p>\n\n<h2>Destaques da Edição 2026</h2>\n<p>Entre os mais de 50 projetos apresentados, alguns se destacaram pela originalidade e impacto:</p>\n<ul>\n <li><strong>Jardim Sustentável Inteligente</strong> — Alunos do 5º ano desenvolveram um sistema de irrigação automática usando sensores de umidade e placa Arduino.</li>\n <li><strong>Robótica Educacional</strong> — A turma do 8º ano criou um robô que auxilia no ensino de matemática para crianças do 1º ao 3º ano.</li>\n <li><strong>Energia Solar na Escola</strong> — Projeto do 2º ano do Ensino Médio demonstrou como painéis solares poderiam reduzir em 40% o consumo de energia da escola.</li>\n</ul>\n\n<blockquote>\n <p>\"A Feira de Ciências é um dos momentos mais importantes do nosso calendário escolar. Ver a dedicação e o brilho nos olhos dos alunos ao apresentarem seus projetos nos enche de orgulho e nos motiva a continuar investindo em educação de qualidade.\"</p>\n <p><strong>— Prof. Maria Silva, Coordenadora Pedagógica</strong></p>\n</blockquote>\n\n<h2>Premiações</h2>\n<p>O júri, composto por professores universitários e profissionais da área de tecnologia, selecionou os três melhores projetos:</p>\n<ol>\n <li><strong>1º Lugar:</strong> Jardim Sustentável Inteligente (5º ano)</li>\n <li><strong>2º Lugar:</strong> Energia Solar na Escola (2º EM)</li>\n <li><strong>3º Lugar:</strong> Robótica Educacional (8º ano)</li>\n</ol>\n\n<h2>Próximos Passos</h2>\n<p>Os três projetos finalistas representarão nossa escola na <strong>Feira Regional de Ciências</strong>, que acontecerá em março na capital. Os alunos já estão se preparando para levar suas apresentações a um público ainda maior.</p>\n<p>Parabéns a todos os participantes, professores orientadores e famílias que apoiaram essa jornada de descobertas!</p>\n`.trim();\n\n/**\n * Deep-clone um bloco com novo ID\n */\nfunction cloneBlock(block: Block, newId: string): Block {\n const cloned: Block = JSON.parse(JSON.stringify(block));\n return { ...cloned, id: newId };\n}\n\nexport const blogPlugin: PluginRegistration = {\n manifest: {\n id: \"blog\",\n version: \"1.0.0\",\n name: \"Blog\",\n description: \"Blog com posts, categorias e tags\",\n icon: \"FileText\",\n\n capabilities: {\n blocks: [\"blogPostCard\", \"blogPostGrid\", \"blogPostDetail\"],\n\n pageTemplates: [\n {\n id: \"blog-listing\",\n name: \"Blog\",\n slug: \"blog\",\n pluginId: \"blog\",\n structure: [],\n dataSource: {\n provider: \"blog-posts\",\n mode: \"list\",\n },\n },\n {\n id: \"blog-post\",\n name: \"Post\",\n slug: \"blog/:slug\",\n pluginId: \"blog\",\n structure: [],\n dataSource: {\n provider: \"blog-posts\",\n mode: \"single\",\n paramMapping: { slug: \":slug\" },\n },\n editRestrictions: {\n lockedStructure: true,\n nonRemovable: true,\n },\n },\n ],\n\n dataSchemas: [\n {\n type: \"blog-post\",\n label: \"Blog Post\",\n fields: [\n { name: \"title\", type: \"string\", required: true, label: \"Title\" },\n { name: \"slug\", type: \"string\", required: true, label: \"Slug\" },\n { name: \"excerpt\", type: \"string\", label: \"Excerpt\" },\n { name: \"content\", type: \"richtext\", required: true, label: \"Content\" },\n { name: \"featuredImage\", type: \"image\", label: \"Featured Image\" },\n { name: \"category\", type: \"string\", label: \"Category\" },\n { name: \"tags\", type: \"array\", label: \"Tags\" },\n { name: \"authorVariant\", type: \"string\", label: \"Author Variant\" },\n { name: \"readingTime\", type: \"number\", label: \"Reading Time\" },\n ],\n },\n ],\n\n contentProviders: [\"blog-posts\", \"blog-categories\"],\n },\n\n restrictions: {\n lockedFields: {\n blogPostDetail: [\"content\", \"date\"],\n },\n requiredPages: [\"blog-listing\", \"blog-post\"],\n },\n },\n\n onActivate(document: SiteDocument): SiteDocument {\n logger.debug(\"Blog plugin activating...\");\n\n const existingPageIds = new Set(document.pages.map((p) => p.id));\n const newPages = [...document.pages];\n\n // ── Encontrar home page para clonar navbar/footer ──\n const homePage =\n document.pages.find((p) => p.slug === \"home\") || document.pages[0];\n\n const homeNavbar = homePage?.structure.find((b) => b.type === \"navbar\");\n const homeFooter = homePage?.structure.find((b) => b.type === \"footer\");\n\n // ── 1. Injetar seção de blog na home page (antes do footer) ──\n if (homePage) {\n const homeIdx = newPages.findIndex((p) => p.id === homePage.id);\n const alreadyInjected = homePage.structure.some(\n (b) => b.id === BLOG_HOME_SECTION_ID,\n );\n\n if (homeIdx >= 0 && !alreadyInjected) {\n const blogHomeSection: Block = {\n id: BLOG_HOME_SECTION_ID,\n type: \"blogPostGrid\",\n props: {\n title: \"Blog\",\n subtitle: \"Últimas publicações\",\n columns: 3,\n cards: SAMPLE_BLOG_CARDS,\n variant: \"default\",\n showViewAll: true,\n viewAllText: \"Ver todos os posts\",\n viewAllHref: \"/site/p/blog\",\n },\n } as Block;\n\n const updatedStructure = [...newPages[homeIdx].structure];\n const footerIdx = updatedStructure.findIndex(\n (b) => b.type === \"footer\",\n );\n\n if (footerIdx >= 0) {\n updatedStructure.splice(footerIdx, 0, blogHomeSection);\n } else {\n updatedStructure.push(blogHomeSection);\n }\n\n newPages[homeIdx] = {\n ...newPages[homeIdx],\n structure: updatedStructure,\n };\n logger.debug(\"Blog section injected into home page\");\n }\n }\n\n // ── 2. Criar página \"Blog\" (listagem completa) ──\n if (!existingPageIds.has(\"blog\")) {\n const blogPageStructure: Block[] = [];\n\n // Navbar clonada da home\n if (homeNavbar) {\n blogPageStructure.push(cloneBlock(homeNavbar, \"blog-page-navbar\"));\n }\n\n // Hero banner do blog\n blogPageStructure.push({\n id: \"blog-page-hero\",\n type: \"hero\",\n props: {\n title: \"Blog\",\n subtitle: \"Novidades & Publicações\",\n description:\n \"Acompanhe as últimas novidades, eventos e conquistas da nossa comunidade escolar.\",\n variant: \"centered\",\n align: \"center\",\n overlay: true,\n overlayColor: \"rgba(79, 70, 229, 0.9)\",\n background: \"#4f46e5\",\n minHeight: \"280px\",\n },\n } as Block);\n\n // Grid de posts\n blogPageStructure.push({\n id: \"blog-grid-main\",\n type: \"blogPostGrid\",\n props: {\n title: \"\",\n subtitle: \"\",\n columns: 3,\n cards: SAMPLE_BLOG_CARDS,\n variant: \"default\",\n showViewAll: false,\n viewAllText: \"Ver todos\",\n viewAllHref: \"/blog\",\n },\n } as Block);\n\n // Footer clonado da home\n if (homeFooter) {\n blogPageStructure.push(cloneBlock(homeFooter, \"blog-page-footer\"));\n }\n\n newPages.push({\n id: \"blog\",\n name: \"Blog\",\n slug: \"blog\",\n pluginId: \"blog\",\n pageTemplateId: \"blog-listing\",\n structure: blogPageStructure,\n dataSource: {\n provider: \"blog-posts\",\n mode: \"list\",\n },\n });\n logger.debug(\"Blog listing page created\");\n }\n\n // ── 3. Criar página \"Post\" (detalhe) ──\n if (!existingPageIds.has(\"blog-post\")) {\n const postPageStructure: Block[] = [];\n\n if (homeNavbar) {\n postPageStructure.push(cloneBlock(homeNavbar, \"post-page-navbar\"));\n }\n\n postPageStructure.push({\n id: \"blog-detail-main\",\n type: \"blogPostDetail\",\n props: {\n title: \"Feira de Ciências 2026: Inovação e Criatividade\",\n content: SAMPLE_POST_CONTENT,\n featuredImage:\n \"https://images.unsplash.com/photo-1567168544230-3b9e5ec47659?w=1200&h=600&fit=crop\",\n date: \"05 Fev 2026\",\n category: \"Eventos\",\n authorVariant: \"inline\",\n readingTime: \"5 min de leitura\",\n tags: [\"Feira de Ciências\", \"Eventos\", \"Sustentabilidade\", \"Projetos\"],\n showFeaturedImage: true,\n showAuthor: true,\n showDate: true,\n showTags: true,\n showReadingTime: true,\n contentMaxWidth: \"720px\",\n },\n } as Block);\n\n if (homeFooter) {\n postPageStructure.push(cloneBlock(homeFooter, \"post-page-footer\"));\n }\n\n newPages.push({\n id: \"blog-post\",\n name: \"Post\",\n slug: \"blog/:slug\",\n pluginId: \"blog\",\n pageTemplateId: \"blog-post\",\n isDynamic: true,\n structure: postPageStructure,\n dataSource: {\n provider: \"blog-posts\",\n mode: \"single\",\n paramMapping: { slug: \":slug\" },\n },\n editRestrictions: {\n lockedStructure: true,\n nonRemovable: true,\n },\n });\n logger.debug(\"Blog post detail page created\");\n }\n\n return {\n ...document,\n pages: newPages,\n };\n },\n\n onDeactivate(document: SiteDocument): SiteDocument {\n logger.debug(\"Blog plugin deactivating...\");\n\n const newPages = document.pages\n // Remover páginas do plugin\n .filter((page) => page.pluginId !== \"blog\")\n // Remover seção de blog injetada na home page\n .map((page) => {\n const hasInjected = page.structure.some(\n (b) => b.id === BLOG_HOME_SECTION_ID,\n );\n if (hasInjected) {\n return {\n ...page,\n structure: page.structure.filter(\n (b) => b.id !== BLOG_HOME_SECTION_ID,\n ),\n };\n }\n return page;\n });\n\n logger.debug(\n `Removed ${document.pages.length - newPages.length} blog page(s) and injected section`,\n );\n\n return {\n ...document,\n pages: newPages,\n };\n },\n\n getEditorRestrictions(blockType: BlockType) {\n if (blockType === \"blogPostDetail\") {\n return {\n lockedFields: [\"content\", \"date\"],\n };\n }\n return undefined;\n },\n};\n\n// Auto-registrar o plugin (side effect — como os blocos fazem com componentRegistry)\npluginRegistry.register(blogPlugin);\n"],"names":["BLOG_HOME_SECTION_ID","SAMPLE_BLOG_CARDS","SAMPLE_POST_CONTENT","cloneBlock","block","newId","blogPlugin","document","logger","existingPageIds","p","newPages","homePage","homeNavbar","b","homeFooter","homeIdx","alreadyInjected","blogHomeSection","updatedStructure","footerIdx","blogPageStructure","postPageStructure","page","blockType","pluginRegistry"],"mappings":";;AAoBA,MAAMA,IAAuB,yBAGvBC,IAAoB;AAAA,EACxB;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,IACF,OACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEZ;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,IACF,OACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEZ;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,IACF,OACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAEd,GAGMC,IAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6B1B,KAAA;AAKF,SAASC,EAAWC,GAAcC,GAAsB;AAEtD,SAAO,EAAE,GADa,KAAK,MAAM,KAAK,UAAUD,CAAK,CAAC,GAClC,IAAIC,EAAA;AAC1B;AAEO,MAAMC,IAAiC;AAAA,EAC5C,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IAEN,cAAc;AAAA,MACZ,QAAQ,CAAC,gBAAgB,gBAAgB,gBAAgB;AAAA,MAEzD,eAAe;AAAA,QACb;AAAA,UACE,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW,CAAA;AAAA,UACX,YAAY;AAAA,YACV,UAAU;AAAA,YACV,MAAM;AAAA,UAAA;AAAA,QACR;AAAA,QAEF;AAAA,UACE,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW,CAAA;AAAA,UACX,YAAY;AAAA,YACV,UAAU;AAAA,YACV,MAAM;AAAA,YACN,cAAc,EAAE,MAAM,QAAA;AAAA,UAAQ;AAAA,UAEhC,kBAAkB;AAAA,YAChB,iBAAiB;AAAA,YACjB,cAAc;AAAA,UAAA;AAAA,QAChB;AAAA,MACF;AAAA,MAGF,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,YACN,EAAE,MAAM,SAAS,MAAM,UAAU,UAAU,IAAM,OAAO,QAAA;AAAA,YACxD,EAAE,MAAM,QAAQ,MAAM,UAAU,UAAU,IAAM,OAAO,OAAA;AAAA,YACvD,EAAE,MAAM,WAAW,MAAM,UAAU,OAAO,UAAA;AAAA,YAC1C,EAAE,MAAM,WAAW,MAAM,YAAY,UAAU,IAAM,OAAO,UAAA;AAAA,YAC5D,EAAE,MAAM,iBAAiB,MAAM,SAAS,OAAO,iBAAA;AAAA,YAC/C,EAAE,MAAM,YAAY,MAAM,UAAU,OAAO,WAAA;AAAA,YAC3C,EAAE,MAAM,QAAQ,MAAM,SAAS,OAAO,OAAA;AAAA,YACtC,EAAE,MAAM,iBAAiB,MAAM,UAAU,OAAO,iBAAA;AAAA,YAChD,EAAE,MAAM,eAAe,MAAM,UAAU,OAAO,eAAA;AAAA,UAAe;AAAA,QAC/D;AAAA,MACF;AAAA,MAGF,kBAAkB,CAAC,cAAc,iBAAiB;AAAA,IAAA;AAAA,IAGpD,cAAc;AAAA,MACZ,cAAc;AAAA,QACZ,gBAAgB,CAAC,WAAW,MAAM;AAAA,MAAA;AAAA,MAEpC,eAAe,CAAC,gBAAgB,WAAW;AAAA,IAAA;AAAA,EAC7C;AAAA,EAGF,WAAWC,GAAsC;AAC/C,IAAAC,EAAO,MAAM,2BAA2B;AAExC,UAAMC,IAAkB,IAAI,IAAIF,EAAS,MAAM,IAAI,CAACG,MAAMA,EAAE,EAAE,CAAC,GACzDC,IAAW,CAAC,GAAGJ,EAAS,KAAK,GAG7BK,IACJL,EAAS,MAAM,KAAK,CAACG,MAAMA,EAAE,SAAS,MAAM,KAAKH,EAAS,MAAM,CAAC,GAE7DM,IAAaD,GAAU,UAAU,KAAK,CAACE,MAAMA,EAAE,SAAS,QAAQ,GAChEC,IAAaH,GAAU,UAAU,KAAK,CAACE,MAAMA,EAAE,SAAS,QAAQ;AAGtE,QAAIF,GAAU;AACZ,YAAMI,IAAUL,EAAS,UAAU,CAACD,MAAMA,EAAE,OAAOE,EAAS,EAAE,GACxDK,IAAkBL,EAAS,UAAU;AAAA,QACzC,CAACE,MAAMA,EAAE,OAAOd;AAAA,MAAA;AAGlB,UAAIgB,KAAW,KAAK,CAACC,GAAiB;AACpC,cAAMC,IAAyB;AAAA,UAC7B,IAAIlB;AAAA,UACJ,MAAM;AAAA,UACN,OAAO;AAAA,YACL,OAAO;AAAA,YACP,UAAU;AAAA,YACV,SAAS;AAAA,YACT,OAAOC;AAAA,YACP,SAAS;AAAA,YACT,aAAa;AAAA,YACb,aAAa;AAAA,YACb,aAAa;AAAA,UAAA;AAAA,QACf,GAGIkB,IAAmB,CAAC,GAAGR,EAASK,CAAO,EAAE,SAAS,GAClDI,IAAYD,EAAiB;AAAA,UACjC,CAAC,MAAM,EAAE,SAAS;AAAA,QAAA;AAGpB,QAAIC,KAAa,IACfD,EAAiB,OAAOC,GAAW,GAAGF,CAAe,IAErDC,EAAiB,KAAKD,CAAe,GAGvCP,EAASK,CAAO,IAAI;AAAA,UAClB,GAAGL,EAASK,CAAO;AAAA,UACnB,WAAWG;AAAA,QAAA,GAEbX,EAAO,MAAM,sCAAsC;AAAA,MACrD;AAAA,IACF;AAGA,QAAI,CAACC,EAAgB,IAAI,MAAM,GAAG;AAChC,YAAMY,IAA6B,CAAA;AAGnC,MAAIR,KACFQ,EAAkB,KAAKlB,EAAWU,GAAY,kBAAkB,CAAC,GAInEQ,EAAkB,KAAK;AAAA,QACrB,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,UACL,OAAO;AAAA,UACP,UAAU;AAAA,UACV,aACE;AAAA,UACF,SAAS;AAAA,UACT,OAAO;AAAA,UACP,SAAS;AAAA,UACT,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,WAAW;AAAA,QAAA;AAAA,MACb,CACQ,GAGVA,EAAkB,KAAK;AAAA,QACrB,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,UACL,OAAO;AAAA,UACP,UAAU;AAAA,UACV,SAAS;AAAA,UACT,OAAOpB;AAAA,UACP,SAAS;AAAA,UACT,aAAa;AAAA,UACb,aAAa;AAAA,UACb,aAAa;AAAA,QAAA;AAAA,MACf,CACQ,GAGNc,KACFM,EAAkB,KAAKlB,EAAWY,GAAY,kBAAkB,CAAC,GAGnEJ,EAAS,KAAK;AAAA,QACZ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,WAAWU;AAAA,QACX,YAAY;AAAA,UACV,UAAU;AAAA,UACV,MAAM;AAAA,QAAA;AAAA,MACR,CACD,GACDb,EAAO,MAAM,2BAA2B;AAAA,IAC1C;AAGA,QAAI,CAACC,EAAgB,IAAI,WAAW,GAAG;AACrC,YAAMa,IAA6B,CAAA;AAEnC,MAAIT,KACFS,EAAkB,KAAKnB,EAAWU,GAAY,kBAAkB,CAAC,GAGnES,EAAkB,KAAK;AAAA,QACrB,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,UACL,OAAO;AAAA,UACP,SAASpB;AAAA,UACT,eACE;AAAA,UACF,MAAM;AAAA,UACN,UAAU;AAAA,UACV,eAAe;AAAA,UACf,aAAa;AAAA,UACb,MAAM,CAAC,qBAAqB,WAAW,oBAAoB,UAAU;AAAA,UACrE,mBAAmB;AAAA,UACnB,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,UAAU;AAAA,UACV,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,QAAA;AAAA,MACnB,CACQ,GAENa,KACFO,EAAkB,KAAKnB,EAAWY,GAAY,kBAAkB,CAAC,GAGnEJ,EAAS,KAAK;AAAA,QACZ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,WAAWW;AAAA,QACX,YAAY;AAAA,UACV,UAAU;AAAA,UACV,MAAM;AAAA,UACN,cAAc,EAAE,MAAM,QAAA;AAAA,QAAQ;AAAA,QAEhC,kBAAkB;AAAA,UAChB,iBAAiB;AAAA,UACjB,cAAc;AAAA,QAAA;AAAA,MAChB,CACD,GACDd,EAAO,MAAM,+BAA+B;AAAA,IAC9C;AAEA,WAAO;AAAA,MACL,GAAGD;AAAA,MACH,OAAOI;AAAA,IAAA;AAAA,EAEX;AAAA,EAEA,aAAaJ,GAAsC;AACjD,IAAAC,EAAO,MAAM,6BAA6B;AAE1C,UAAMG,IAAWJ,EAAS,MAEvB,OAAO,CAACgB,MAASA,EAAK,aAAa,MAAM,EAEzC,IAAI,CAACA,MACgBA,EAAK,UAAU;AAAA,MACjC,CAACT,MAAMA,EAAE,OAAOd;AAAA,IAAA,IAGT;AAAA,MACL,GAAGuB;AAAA,MACH,WAAWA,EAAK,UAAU;AAAA,QACxB,CAACT,MAAMA,EAAE,OAAOd;AAAA,MAAA;AAAA,IAClB,IAGGuB,CACR;AAEH,WAAAf,EAAO;AAAA,MACL,WAAWD,EAAS,MAAM,SAASI,EAAS,MAAM;AAAA,IAAA,GAG7C;AAAA,MACL,GAAGJ;AAAA,MACH,OAAOI;AAAA,IAAA;AAAA,EAEX;AAAA,EAEA,sBAAsBa,GAAsB;AAC1C,QAAIA,MAAc;AAChB,aAAO;AAAA,QACL,cAAc,CAAC,WAAW,MAAM;AAAA,MAAA;AAAA,EAItC;AACF;AAGAC,EAAe,SAASnB,CAAU;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockContentProvider.d.ts","sourceRoot":"","sources":["../../../../../src/engine/plugins/builtin/blog/mockContentProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,aAAa,CAAC;AAiHrB;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,eAiDrC,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
const s = [
|
|
2
|
+
{
|
|
3
|
+
id: "mock-post-1",
|
|
4
|
+
type: "blog-post",
|
|
5
|
+
slug: "bem-vindo-ao-nosso-blog",
|
|
6
|
+
data: {
|
|
7
|
+
title: "Bem-vindo ao nosso blog!",
|
|
8
|
+
excerpt: "Estamos animados em lançar nosso blog oficial. Acompanhe as novidades e dicas.",
|
|
9
|
+
content: "<p>Estamos animados em lançar nosso blog oficial. Aqui você encontrará notícias, tutoriais e dicas importantes.</p>",
|
|
10
|
+
featuredImage: "https://images.unsplash.com/photo-1499750310107-5fef28a66643?w=800&h=400&fit=crop",
|
|
11
|
+
category: "Novidades",
|
|
12
|
+
tags: ["lançamento", "novidades"],
|
|
13
|
+
authorName: "Equipe Editorial",
|
|
14
|
+
authorAvatar: "",
|
|
15
|
+
readingTime: 3
|
|
16
|
+
},
|
|
17
|
+
metadata: {
|
|
18
|
+
createdAt: "2025-01-15T10:00:00Z",
|
|
19
|
+
updatedAt: "2025-01-15T10:00:00Z",
|
|
20
|
+
publishedAt: "2025-01-15T10:00:00Z",
|
|
21
|
+
status: "published"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "mock-post-2",
|
|
26
|
+
type: "blog-post",
|
|
27
|
+
slug: "dicas-para-estudantes",
|
|
28
|
+
data: {
|
|
29
|
+
title: "5 Dicas para Estudantes de Sucesso",
|
|
30
|
+
excerpt: "Confira as melhores práticas para melhorar seus estudos e alcançar seus objetivos acadêmicos.",
|
|
31
|
+
content: "<p>Estudar de forma eficiente é uma habilidade que pode ser desenvolvida. Confira nossas dicas.</p>",
|
|
32
|
+
featuredImage: "https://images.unsplash.com/photo-1523050854058-8df90110c9f1?w=800&h=400&fit=crop",
|
|
33
|
+
category: "Educação",
|
|
34
|
+
tags: ["educação", "dicas", "estudos"],
|
|
35
|
+
authorName: "Prof. Maria Silva",
|
|
36
|
+
authorAvatar: "",
|
|
37
|
+
readingTime: 5
|
|
38
|
+
},
|
|
39
|
+
metadata: {
|
|
40
|
+
createdAt: "2025-01-20T14:30:00Z",
|
|
41
|
+
updatedAt: "2025-01-20T14:30:00Z",
|
|
42
|
+
publishedAt: "2025-01-20T14:30:00Z",
|
|
43
|
+
status: "published"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: "mock-post-3",
|
|
48
|
+
type: "blog-post",
|
|
49
|
+
slug: "novidades-do-semestre",
|
|
50
|
+
data: {
|
|
51
|
+
title: "Novidades para o Próximo Semestre",
|
|
52
|
+
excerpt: "Novos cursos, eventos e melhorias que estão chegando. Saiba tudo sobre o que vem por aí.",
|
|
53
|
+
content: "<p>O próximo semestre traz muitas novidades. Novos cursos, eventos e oportunidades para todos.</p>",
|
|
54
|
+
featuredImage: "https://images.unsplash.com/photo-1524178232363-1fb2b075b655?w=800&h=400&fit=crop",
|
|
55
|
+
category: "Institucional",
|
|
56
|
+
tags: ["semestre", "novidades", "cursos"],
|
|
57
|
+
authorName: "Coordenação Acadêmica",
|
|
58
|
+
authorAvatar: "",
|
|
59
|
+
readingTime: 4
|
|
60
|
+
},
|
|
61
|
+
metadata: {
|
|
62
|
+
createdAt: "2025-02-01T09:00:00Z",
|
|
63
|
+
updatedAt: "2025-02-01T09:00:00Z",
|
|
64
|
+
publishedAt: "2025-02-01T09:00:00Z",
|
|
65
|
+
status: "published"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
];
|
|
69
|
+
function r(a) {
|
|
70
|
+
const e = a.data, t = a.metadata, o = t?.publishedAt ? new Date(t.publishedAt).toLocaleDateString("pt-BR", {
|
|
71
|
+
day: "2-digit",
|
|
72
|
+
month: "short",
|
|
73
|
+
year: "numeric"
|
|
74
|
+
}) : "";
|
|
75
|
+
return {
|
|
76
|
+
title: e.title || "",
|
|
77
|
+
excerpt: e.excerpt || "",
|
|
78
|
+
image: e.featuredImage || "",
|
|
79
|
+
date: o,
|
|
80
|
+
category: e.category || "",
|
|
81
|
+
authorName: e.authorName || "",
|
|
82
|
+
authorAvatar: e.authorAvatar || "",
|
|
83
|
+
readingTime: e.readingTime ? `${e.readingTime} min de leitura` : "",
|
|
84
|
+
linkHref: `/site/p/blog/${a.slug || a.id}`,
|
|
85
|
+
linkText: "Ler mais",
|
|
86
|
+
// Detail-specific props
|
|
87
|
+
content: e.content || "",
|
|
88
|
+
featuredImage: e.featuredImage || "",
|
|
89
|
+
tags: Array.isArray(e.tags) ? e.tags : []
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const d = {
|
|
93
|
+
type: "blog-posts",
|
|
94
|
+
async fetchList(a) {
|
|
95
|
+
const e = a.limit ?? 10, t = a.page ?? 1, o = (t - 1) * e;
|
|
96
|
+
return {
|
|
97
|
+
items: s.slice(o, o + e),
|
|
98
|
+
total: s.length,
|
|
99
|
+
page: t,
|
|
100
|
+
limit: e,
|
|
101
|
+
hasMore: o + e < s.length
|
|
102
|
+
};
|
|
103
|
+
},
|
|
104
|
+
async fetchById(a) {
|
|
105
|
+
return s.find((e) => e.id === a || e.slug === a) ?? null;
|
|
106
|
+
},
|
|
107
|
+
getSchema() {
|
|
108
|
+
return {
|
|
109
|
+
type: "blog-post",
|
|
110
|
+
label: "Blog Post",
|
|
111
|
+
fields: [
|
|
112
|
+
{ name: "title", type: "string", required: !0, label: "Título" },
|
|
113
|
+
{ name: "slug", type: "string", required: !0, label: "Slug" },
|
|
114
|
+
{ name: "excerpt", type: "string", label: "Resumo" },
|
|
115
|
+
{
|
|
116
|
+
name: "content",
|
|
117
|
+
type: "richtext",
|
|
118
|
+
required: !0,
|
|
119
|
+
label: "Conteúdo"
|
|
120
|
+
},
|
|
121
|
+
{ name: "featuredImage", type: "image", label: "Imagem de Capa" },
|
|
122
|
+
{ name: "category", type: "string", label: "Categoria" },
|
|
123
|
+
{ name: "tags", type: "array", label: "Tags" },
|
|
124
|
+
{ name: "authorName", type: "string", label: "Autor" },
|
|
125
|
+
{ name: "authorAvatar", type: "image", label: "Avatar do Autor" },
|
|
126
|
+
{ name: "readingTime", type: "number", label: "Tempo de Leitura" }
|
|
127
|
+
]
|
|
128
|
+
};
|
|
129
|
+
},
|
|
130
|
+
toBlockProps: r
|
|
131
|
+
};
|
|
132
|
+
export {
|
|
133
|
+
d as mockBlogContentProvider
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=mockContentProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockContentProvider.js","sources":["../../../../../src/engine/plugins/builtin/blog/mockContentProvider.ts"],"sourcesContent":["/**\n * Mock Blog Content Provider\n * Provides placeholder blog data for editor preview when no real\n * ContentProvider is registered by the consumer.\n */\n\nimport type {\n ContentProvider,\n ContentItem,\n ContentListParams,\n ContentListResult,\n DataSchema,\n} from \"../../types\";\n\nconst MOCK_POSTS: ContentItem[] = [\n {\n id: \"mock-post-1\",\n type: \"blog-post\",\n slug: \"bem-vindo-ao-nosso-blog\",\n data: {\n title: \"Bem-vindo ao nosso blog!\",\n excerpt:\n \"Estamos animados em lançar nosso blog oficial. Acompanhe as novidades e dicas.\",\n content:\n \"<p>Estamos animados em lançar nosso blog oficial. Aqui você encontrará notícias, tutoriais e dicas importantes.</p>\",\n featuredImage:\n \"https://images.unsplash.com/photo-1499750310107-5fef28a66643?w=800&h=400&fit=crop\",\n category: \"Novidades\",\n tags: [\"lançamento\", \"novidades\"],\n authorName: \"Equipe Editorial\",\n authorAvatar: \"\",\n readingTime: 3,\n },\n metadata: {\n createdAt: \"2025-01-15T10:00:00Z\",\n updatedAt: \"2025-01-15T10:00:00Z\",\n publishedAt: \"2025-01-15T10:00:00Z\",\n status: \"published\",\n },\n },\n {\n id: \"mock-post-2\",\n type: \"blog-post\",\n slug: \"dicas-para-estudantes\",\n data: {\n title: \"5 Dicas para Estudantes de Sucesso\",\n excerpt:\n \"Confira as melhores práticas para melhorar seus estudos e alcançar seus objetivos acadêmicos.\",\n content:\n \"<p>Estudar de forma eficiente é uma habilidade que pode ser desenvolvida. Confira nossas dicas.</p>\",\n featuredImage:\n \"https://images.unsplash.com/photo-1523050854058-8df90110c9f1?w=800&h=400&fit=crop\",\n category: \"Educação\",\n tags: [\"educação\", \"dicas\", \"estudos\"],\n authorName: \"Prof. Maria Silva\",\n authorAvatar: \"\",\n readingTime: 5,\n },\n metadata: {\n createdAt: \"2025-01-20T14:30:00Z\",\n updatedAt: \"2025-01-20T14:30:00Z\",\n publishedAt: \"2025-01-20T14:30:00Z\",\n status: \"published\",\n },\n },\n {\n id: \"mock-post-3\",\n type: \"blog-post\",\n slug: \"novidades-do-semestre\",\n data: {\n title: \"Novidades para o Próximo Semestre\",\n excerpt:\n \"Novos cursos, eventos e melhorias que estão chegando. Saiba tudo sobre o que vem por aí.\",\n content:\n \"<p>O próximo semestre traz muitas novidades. Novos cursos, eventos e oportunidades para todos.</p>\",\n featuredImage:\n \"https://images.unsplash.com/photo-1524178232363-1fb2b075b655?w=800&h=400&fit=crop\",\n category: \"Institucional\",\n tags: [\"semestre\", \"novidades\", \"cursos\"],\n authorName: \"Coordenação Acadêmica\",\n authorAvatar: \"\",\n readingTime: 4,\n },\n metadata: {\n createdAt: \"2025-02-01T09:00:00Z\",\n updatedAt: \"2025-02-01T09:00:00Z\",\n publishedAt: \"2025-02-01T09:00:00Z\",\n status: \"published\",\n },\n },\n];\n\n/**\n * Converts a ContentItem to blogPostCard block props\n */\nfunction toBlockProps(item: ContentItem): Record<string, unknown> {\n const d = item.data;\n const meta = item.metadata;\n\n const publishedDate = meta?.publishedAt\n ? new Date(meta.publishedAt).toLocaleDateString(\"pt-BR\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n })\n : \"\";\n\n return {\n title: d.title || \"\",\n excerpt: d.excerpt || \"\",\n image: d.featuredImage || \"\",\n date: publishedDate,\n category: d.category || \"\",\n authorName: d.authorName || \"\",\n authorAvatar: d.authorAvatar || \"\",\n readingTime: d.readingTime ? `${d.readingTime} min de leitura` : \"\",\n linkHref: `/site/p/blog/${item.slug || item.id}`,\n linkText: \"Ler mais\",\n // Detail-specific props\n content: d.content || \"\",\n featuredImage: d.featuredImage || \"\",\n tags: Array.isArray(d.tags) ? d.tags : [],\n };\n}\n\n/**\n * Mock ContentProvider for blog posts.\n * Returns placeholder data for editor preview.\n */\nexport const mockBlogContentProvider: ContentProvider = {\n type: \"blog-posts\",\n\n async fetchList(params: ContentListParams): Promise<ContentListResult> {\n const limit = params.limit ?? 10;\n const page = params.page ?? 1;\n const start = (page - 1) * limit;\n const items = MOCK_POSTS.slice(start, start + limit);\n\n return {\n items,\n total: MOCK_POSTS.length,\n page,\n limit,\n hasMore: start + limit < MOCK_POSTS.length,\n };\n },\n\n async fetchById(idOrSlug: string): Promise<ContentItem | null> {\n return (\n MOCK_POSTS.find((p) => p.id === idOrSlug || p.slug === idOrSlug) ?? null\n );\n },\n\n getSchema(): DataSchema {\n return {\n type: \"blog-post\",\n label: \"Blog Post\",\n fields: [\n { name: \"title\", type: \"string\", required: true, label: \"Título\" },\n { name: \"slug\", type: \"string\", required: true, label: \"Slug\" },\n { name: \"excerpt\", type: \"string\", label: \"Resumo\" },\n {\n name: \"content\",\n type: \"richtext\",\n required: true,\n label: \"Conteúdo\",\n },\n { name: \"featuredImage\", type: \"image\", label: \"Imagem de Capa\" },\n { name: \"category\", type: \"string\", label: \"Categoria\" },\n { name: \"tags\", type: \"array\", label: \"Tags\" },\n { name: \"authorName\", type: \"string\", label: \"Autor\" },\n { name: \"authorAvatar\", type: \"image\", label: \"Avatar do Autor\" },\n { name: \"readingTime\", type: \"number\", label: \"Tempo de Leitura\" },\n ],\n };\n },\n\n toBlockProps,\n};\n"],"names":["MOCK_POSTS","toBlockProps","item","d","meta","publishedDate","mockBlogContentProvider","params","limit","page","start","idOrSlug","p"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SitePage } from '../schema/siteDocument';
|
|
2
|
+
import { ContentProvider, ContentListParams } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Map of provider type → ContentProvider instance
|
|
5
|
+
*/
|
|
6
|
+
export type ContentProviderMap = Map<string, ContentProvider>;
|
|
7
|
+
/**
|
|
8
|
+
* Hydrates a page's blocks with data from ContentProviders.
|
|
9
|
+
*
|
|
10
|
+
* For pages with a dataSource:
|
|
11
|
+
* - mode "list": fetches list and populates grid blocks' `cards` prop
|
|
12
|
+
* - mode "single": fetches single item and spreads props onto detail blocks
|
|
13
|
+
*
|
|
14
|
+
* Returns a new page with hydrated block props (original page is not mutated).
|
|
15
|
+
*/
|
|
16
|
+
export declare function hydratePageWithContent(page: SitePage, providers: ContentProviderMap, urlParams?: Record<string, string>, fetchParams?: ContentListParams): Promise<SitePage>;
|
|
17
|
+
//# sourceMappingURL=contentHydration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentHydration.d.ts","sourceRoot":"","sources":["../../../src/engine/plugins/contentHydration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAe,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,kBAAkB,EAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,QAAQ,CAAC,CAsCnB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { logger as c } from "../../utils/logger.js";
|
|
2
|
+
async function l(r, e, t, n) {
|
|
3
|
+
if (!r.dataSource)
|
|
4
|
+
return r;
|
|
5
|
+
const { provider: o, mode: s, paramMapping: a } = r.dataSource, i = e.get(o);
|
|
6
|
+
if (!i)
|
|
7
|
+
return c.warn(
|
|
8
|
+
`ContentProvider "${o}" not found for page "${r.id}". Rendering with static props.`
|
|
9
|
+
), r;
|
|
10
|
+
try {
|
|
11
|
+
if (s === "list")
|
|
12
|
+
return await p(r, i, n);
|
|
13
|
+
if (s === "single") {
|
|
14
|
+
const u = m(a, t);
|
|
15
|
+
return u ? await h(r, i, u) : (c.warn(
|
|
16
|
+
`Could not resolve ID/slug for page "${r.id}" from URL params. Using static props.`
|
|
17
|
+
), r);
|
|
18
|
+
}
|
|
19
|
+
return r;
|
|
20
|
+
} catch (u) {
|
|
21
|
+
return c.error(`Error hydrating page "${r.id}":`, u), r;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function p(r, e, t) {
|
|
25
|
+
const n = {
|
|
26
|
+
limit: 12,
|
|
27
|
+
...r.dataSource?.defaultParams,
|
|
28
|
+
...t
|
|
29
|
+
}, o = await e.fetchList(n);
|
|
30
|
+
if (!o.items || o.items.length === 0)
|
|
31
|
+
return r;
|
|
32
|
+
const s = o.items.map((i) => e.toBlockProps(i)), a = r.structure.map(
|
|
33
|
+
(i) => d(i, s)
|
|
34
|
+
);
|
|
35
|
+
return {
|
|
36
|
+
...r,
|
|
37
|
+
structure: a
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function d(r, e) {
|
|
41
|
+
if (r.type === "blogPostGrid")
|
|
42
|
+
return {
|
|
43
|
+
...r,
|
|
44
|
+
props: {
|
|
45
|
+
...r.props,
|
|
46
|
+
cards: e
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const t = r.props;
|
|
50
|
+
return t.children && Array.isArray(t.children) ? {
|
|
51
|
+
...r,
|
|
52
|
+
props: {
|
|
53
|
+
...t,
|
|
54
|
+
children: t.children.map(
|
|
55
|
+
(n) => d(n, e)
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
} : r;
|
|
59
|
+
}
|
|
60
|
+
async function h(r, e, t) {
|
|
61
|
+
const n = await e.fetchById(t);
|
|
62
|
+
if (!n)
|
|
63
|
+
return c.warn(`Content item "${t}" not found. Using static props.`), r;
|
|
64
|
+
const o = e.toBlockProps(n), s = r.structure.map(
|
|
65
|
+
(a) => f(a, o, n)
|
|
66
|
+
);
|
|
67
|
+
return {
|
|
68
|
+
...r,
|
|
69
|
+
structure: s
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function f(r, e, t) {
|
|
73
|
+
if (r.type === "blogPostDetail")
|
|
74
|
+
return {
|
|
75
|
+
...r,
|
|
76
|
+
props: {
|
|
77
|
+
...r.props,
|
|
78
|
+
...e,
|
|
79
|
+
// Preserve metadata
|
|
80
|
+
_contentItemId: t.id,
|
|
81
|
+
_contentItemSlug: t.slug
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
if (r.type === "blogPostCard")
|
|
85
|
+
return {
|
|
86
|
+
...r,
|
|
87
|
+
props: {
|
|
88
|
+
...r.props,
|
|
89
|
+
...e
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const n = r.props;
|
|
93
|
+
return n.children && Array.isArray(n.children) ? {
|
|
94
|
+
...r,
|
|
95
|
+
props: {
|
|
96
|
+
...n,
|
|
97
|
+
children: n.children.map(
|
|
98
|
+
(o) => f(o, e, t)
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
} : r;
|
|
102
|
+
}
|
|
103
|
+
function m(r, e) {
|
|
104
|
+
if (!(!r || !e)) {
|
|
105
|
+
for (const t of ["slug", "id"]) {
|
|
106
|
+
const n = r[t];
|
|
107
|
+
if (n) {
|
|
108
|
+
const o = n.startsWith(":") ? n.slice(1) : n, s = e[o];
|
|
109
|
+
if (s) return s;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
for (const t of Object.values(r)) {
|
|
113
|
+
const n = t.startsWith(":") ? t.slice(1) : t, o = e[n];
|
|
114
|
+
if (o) return o;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
l as hydratePageWithContent
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=contentHydration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentHydration.js","sources":["../../../src/engine/plugins/contentHydration.ts"],"sourcesContent":["/**\n * Content Hydration\n * Hydrates page blocks with data from ContentProviders before rendering.\n *\n * This works at the data level, before either rendering pipeline\n * (React renderers or HTML exporters) processes the blocks.\n */\n\nimport { logger } from \"../../utils/logger\";\nimport type { SitePage, Block } from \"../schema/siteDocument\";\nimport type { ContentProvider, ContentItem, ContentListParams } from \"./types\";\n\n/**\n * Map of provider type → ContentProvider instance\n */\nexport type ContentProviderMap = Map<string, ContentProvider>;\n\n/**\n * Hydrates a page's blocks with data from ContentProviders.\n *\n * For pages with a dataSource:\n * - mode \"list\": fetches list and populates grid blocks' `cards` prop\n * - mode \"single\": fetches single item and spreads props onto detail blocks\n *\n * Returns a new page with hydrated block props (original page is not mutated).\n */\nexport async function hydratePageWithContent(\n page: SitePage,\n providers: ContentProviderMap,\n urlParams?: Record<string, string>,\n fetchParams?: ContentListParams,\n): Promise<SitePage> {\n // No dataSource → return page as-is\n if (!page.dataSource) {\n return page;\n }\n\n const { provider: providerType, mode, paramMapping } = page.dataSource;\n const provider = providers.get(providerType);\n\n if (!provider) {\n logger.warn(\n `ContentProvider \"${providerType}\" not found for page \"${page.id}\". Rendering with static props.`,\n );\n return page;\n }\n\n try {\n if (mode === \"list\") {\n return await hydrateListPage(page, provider, fetchParams);\n }\n\n if (mode === \"single\") {\n // Resolve the ID/slug from URL params\n const idOrSlug = resolveIdFromParams(paramMapping, urlParams);\n if (!idOrSlug) {\n logger.warn(\n `Could not resolve ID/slug for page \"${page.id}\" from URL params. Using static props.`,\n );\n return page;\n }\n return await hydrateSinglePage(page, provider, idOrSlug);\n }\n\n return page;\n } catch (error) {\n logger.error(`Error hydrating page \"${page.id}\":`, error);\n return page;\n }\n}\n\n/**\n * Hydrates a list-mode page: fetches items and populates grid blocks.\n */\nasync function hydrateListPage(\n page: SitePage,\n provider: ContentProvider,\n fetchParams?: ContentListParams,\n): Promise<SitePage> {\n const params: ContentListParams = {\n limit: 12,\n ...page.dataSource?.defaultParams,\n ...fetchParams,\n };\n\n const result = await provider.fetchList(params);\n\n if (!result.items || result.items.length === 0) {\n return page;\n }\n\n // Convert items to block props\n const cardProps = result.items.map((item) => provider.toBlockProps(item));\n\n // Hydrate all grid blocks on the page with the fetched cards\n const hydratedStructure = page.structure.map((block) =>\n hydrateGridBlock(block, cardProps),\n );\n\n return {\n ...page,\n structure: hydratedStructure,\n };\n}\n\n/**\n * Hydrates grid blocks (blogPostGrid, etc.) with card data.\n */\nfunction hydrateGridBlock(\n block: Block,\n cardProps: Record<string, unknown>[],\n): Block {\n // Direct match: blogPostGrid gets cards populated\n if (block.type === \"blogPostGrid\") {\n return {\n ...block,\n props: {\n ...block.props,\n cards: cardProps,\n },\n };\n }\n\n // Recurse into children for nested structures\n const props = block.props as Record<string, unknown>;\n if (props.children && Array.isArray(props.children)) {\n return {\n ...block,\n props: {\n ...props,\n children: (props.children as Block[]).map((child) =>\n hydrateGridBlock(child, cardProps),\n ),\n },\n };\n }\n\n return block;\n}\n\n/**\n * Hydrates a single-mode page: fetches one item and populates detail blocks.\n */\nasync function hydrateSinglePage(\n page: SitePage,\n provider: ContentProvider,\n idOrSlug: string,\n): Promise<SitePage> {\n const item = await provider.fetchById(idOrSlug);\n\n if (!item) {\n logger.warn(`Content item \"${idOrSlug}\" not found. Using static props.`);\n return page;\n }\n\n const blockProps = provider.toBlockProps(item);\n\n // Hydrate all detail blocks on the page\n const hydratedStructure = page.structure.map((block) =>\n hydrateDetailBlock(block, blockProps, item),\n );\n\n return {\n ...page,\n structure: hydratedStructure,\n };\n}\n\n/**\n * Hydrates detail blocks (blogPostDetail, etc.) with item data.\n */\nfunction hydrateDetailBlock(\n block: Block,\n blockProps: Record<string, unknown>,\n item: ContentItem,\n): Block {\n if (block.type === \"blogPostDetail\") {\n return {\n ...block,\n props: {\n ...block.props,\n ...blockProps,\n // Preserve metadata\n _contentItemId: item.id,\n _contentItemSlug: item.slug,\n },\n };\n }\n\n // Also hydrate blogPostCard blocks that reference the same item\n if (block.type === \"blogPostCard\") {\n return {\n ...block,\n props: {\n ...block.props,\n ...blockProps,\n },\n };\n }\n\n // Recurse into children\n const props = block.props as Record<string, unknown>;\n if (props.children && Array.isArray(props.children)) {\n return {\n ...block,\n props: {\n ...props,\n children: (props.children as Block[]).map((child) =>\n hydrateDetailBlock(child, blockProps, item),\n ),\n },\n };\n }\n\n return block;\n}\n\n/**\n * Resolves the item ID/slug from URL params using paramMapping.\n * e.g., paramMapping: { slug: \":slug\" }, urlParams: { slug: \"my-post\" } → \"my-post\"\n */\nfunction resolveIdFromParams(\n paramMapping?: Record<string, string>,\n urlParams?: Record<string, string>,\n): string | undefined {\n if (!paramMapping || !urlParams) return undefined;\n\n // Try slug first, then id\n for (const key of [\"slug\", \"id\"]) {\n const paramPattern = paramMapping[key];\n if (paramPattern) {\n // Extract param name from pattern (e.g., \":slug\" → \"slug\")\n const paramName = paramPattern.startsWith(\":\")\n ? paramPattern.slice(1)\n : paramPattern;\n const value = urlParams[paramName];\n if (value) return value;\n }\n }\n\n // Fallback: return first available param value\n for (const paramPattern of Object.values(paramMapping)) {\n const paramName = paramPattern.startsWith(\":\")\n ? paramPattern.slice(1)\n : paramPattern;\n const value = urlParams[paramName];\n if (value) return value;\n }\n\n return undefined;\n}\n"],"names":["hydratePageWithContent","page","providers","urlParams","fetchParams","providerType","mode","paramMapping","provider","logger","hydrateListPage","idOrSlug","resolveIdFromParams","hydrateSinglePage","error","params","result","cardProps","item","hydratedStructure","block","hydrateGridBlock","props","child","blockProps","hydrateDetailBlock","key","paramPattern","paramName","value"],"mappings":"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"}
|