flenx 0.4.1
flenx: ^0.4.1 copied to clipboard
SSR Flutter/Dart estilo Next.js: kit de UI em Dart (sem HTML/CSS), blog, SEO/sitemap/llms.txt automáticos, admin, APIs (Dart ou PHP) e banco plugável (Supabase/Firebase).
Changelog #
0.4.1 #
- fix(pub.dev/dartdoc): renomeia
lib/docs/→lib/documents/(o nomedocsdentro delib/fazia a descoberta de bibliotecas do dartdoc/pana falhar — "unable to locate the input directory at 'lib/docs'" — deixando a análise do pub.dev incompleta). API pública inalterada (mesmos símbolos exportados porpackage:flenx/app.dart).
0.4.0 #
Marketing e medição (novo — package:flenx/app.dart) #
FlenxTracking— ligue pixels e analytics só passando os IDs (nada fica fixo):Ga4,GoogleAds,MetaPixel,BingUet,LinkedInInsight,FirebasePusheCustomPixel(para qualquer outro pixel, sem alterar a lib).flenx.track('Lead')— um comando avisa TODOS os pixels de uma vez. Eventos prontos: WhatsApp →Contact,FlenxLeadForm→Lead,FlenxViewEvent→ViewContent.FlenxConsent— banner de cookies (LGPD) com Google Consent Mode: os pixels só disparam depois do aceite.FlenxLeadFormagora envia o lead porpostUrl(Brevo/HubSpot/webhook) além do mailto, com checkbox de consentimento opcional. Textos dos alertas configuráveis.
SEO #
FlenxFaq— seção de perguntas & respostas visível (sem JS); combine comRouteMeta.faqspara o rich result FAQPage.RouteMeta.services(SeoService) → JSON-LDService(ajuda a aparecer em buscas por IA / GEO).SeoConfig:googleSiteVerification/bingSiteVerification(metas do Search Console) eratingValue/reviewCount(JSON-LDAggregateRating— estrelas).
Acessibilidade / tema #
- Cor do "eyebrow" das seções agora escurece automaticamente para passar no contraste WCAG considerando o fundo real da seção (não só o branco).
- Componentes usam tokens da paleta (
var(--token)) em vez de cinzas fixos — qualquer projeto re-tematiza sobrescrevendo os tokens.
0.3.4 #
PDF (package:flenx/pdf.dart) #
- Novo módulo de PDF on-brand —
FlenxPdf.build(FlenxPdfDoc)monta documentos A4 a partir de blocos tipados:FlenxPdfCover,FlenxPdfChecklist,FlenxPdfSpotlight,FlenxPdfSteps,FlenxPdfCompare,FlenxPdfCombo,FlenxPdfText,FlenxPdfContacteFlenxPdfTable, com paleta/logo porFlenxPdfBrand. Sem HTML — tudo em Dart. FlenxCardPdf— cartão de visita em PDF (frente/verso, 85×55 mm com sangria, QR code) no padrão da marca.- Rodapé configurável por marca —
FlenxPdfBrand.footerText/footerSite(antes o rodapé era fixo). Sem quebra de API (ambos opcionais). - Papel timbrado preserva a proporção do logo (
FittedBox) — logos largos não são mais distorcidos.
UI #
FlenxPromo: liga/desliga manual viaenabled, além do agendamento porstart/end. Padrãoenabled: true(sem quebra de API).
0.3.3 #
FlenxFloatingButton: novos parâmetrospulse(animação de anel/pulso para chamar atenção, com elevação no hover) epulseColor. Respeitaprefers-reduced-motion. Sem quebra de API (padrãopulse: false).
0.3.2 #
- Compatibilidade com a plataforma Web:
package:flenx/flenx.dartnão puxa maisdart:io. As partes que dependem do servidor usam imports condicionais — no navegador viram stubs que lançamUnsupportedError:BlogRepository,BlogScaffold,JsonlDbExecutor,PhpApiGeneratoreFileLeadStore.DbConfige os canais FCM/Twilio agora leem variáveis de ambiente por um helper multiplataforma (platformEnv), vazio no navegador. Nenhuma mudança de API no servidor.
0.3.1 #
SiteHeadermobile: o menu agora abre como drawer lateral direito (desliza da direita, com backdrop escuro que fecha ao tocar fora) e o hambúrguer fica encostado à direita do header. Antes o menu caía como painel de largura total.
0.3.0 #
Deploy / geração estática #
jaspr buildemmode: staticagora funciona — a flenx passou a reportar todas as suas rotas ao proxy dojaspr_clino modo generate (ServerApp.requestRouteGeneration). Antes o build travava em "Starting server app..." porque a flenx usa servidor próprio (shelf) e não aServerAppdo jaspr, então nenhuma rota era reportada.- SEO + 404 gerados automaticamente no build estático, sem config: o build
agora emite
robots.txt,sitemap.xml,llms.txt,llms-full.txte404.htmldireto na saída (a flenx reporta esses paths e serve/404.htmlcom status 200).
UI / só-Dart (sem HTML/CSS no app) #
FlenxHeroCover— hero de tela cheia com imagem de fundo (Ken Burns), logo flutuando e conteúdo animado, 100% via parâmetros (o CSS fica dentro do componente).FlenxFloatingButton— botão flutuante genérico para qualquer chat/ação (presets.whatsapp/.telegram/.messenger+ configurável: ícone, cor, canto).FlenxApp.run(floatingButtons:)— botões flutuantes globais (todas as páginas).FlenxApp.run(globalScripts:)— injeta<script src defer>global (ex.: analytics).SiteBrand(logoHeight:)— altura do logo no header sem escrever CSS.FlenxStyle+globalStyles: List<FlenxStyle>— estilo global no padrão Flutter: seletor + props tipadas (Color,EdgeInsets,FontWeight,TextAlign,doubleem px), ex.:FlenxStyle('h1', color: Colors.white, fontSize: 48, fontWeight: FontWeight.bold). A flenx converte em CSS.rawGlobalStyles: List<String>é o escape hatch de CSS puro (aceita até o conteúdo de um arquivo.css).
Tema / marca #
FlenxApp.run(primaryColor:, primaryColorDark:)— define os tokens CSS--primary/--primary-dark(usados por botões, links e destaques) sem precisar escrever CSS.FlenxApp.run(faviconUrl:, appleTouchIconUrl:)— emite<link rel="icon">e<link rel="apple-touch-icon">no<head>.
SEO #
SeoConfig(defaultImage:)—og:image/twitter:imagepadrão para todas as páginas quando a rota não defineRouteMeta.image(cai paralogoUrlse ausente).
Acessibilidade #
FlenxPageagora emite um landmark<main>— o conteúdo fica dentro de<main>, com header/footer (SiteHeader/FlenxFooter) fora, preservando os landmarks banner/contentinfo no topo. Corrige o aviso "documento sem main".
DX #
package:flenx/app.dartagora re-exportacss,StyleseStyleRule— dá para customizarglobalStyles(ex.:css.keyframes(...)) sem importar jaspr direto.
0.2.0 #
Novos componentes #
- FlenxAnimated — scroll-reveal com IntersectionObserver (fadeIn, slideUp, slideDown, slideLeft, slideRight, zoomIn, pulse, bounce, float, spin)
- FlenxAnimation — enum de animações para todos os componentes
- FlenxHeroSplit — hero duas colunas (texto + imagem); no mobile a imagem vira fundo desfocado
- FlenxSvg — exibe SVG externo (
<img>) ou inline (sem HTML/CSS) - FlenxLottie — animação Lottie via CDN com fila de inicialização
- FlenxRive — animação Rive via CDN com fila de inicialização
- FlenxAudioPlayer — player de áudio inline (faixa ou rádio ao vivo)
- FlenxAudioPlayerFloat — player flutuante fixo no bottom (rádio / podcast)
- FlenxAccordion / FlenxAccordionItem — acordeão FAQ puro CSS
- FlenxBanner — banner de anúncio/alerta com ícone e dismiss
- FlenxAlert — alerta inline com variantes (info, success, warning, error)
- FlenxSpacer — espaçamento vertical explícito
Animações em componentes existentes #
FlenxColumn,FlenxGrid— parâmetroanimationcom stagger automático nos filhosFlenxCard,FlenxHeading,FlenxText,FlenxButton,FlenxSection— parâmetroanimationFeaturesSection,FlenxSteps— parâmetroanimate: bool
Background image #
FlenxSectioneFlenxCard— parâmetrosbackgroundImageebackgroundImageOpacity
Sistema de temas (CSS custom properties) #
FlenxPage— novos parâmetrosprimaryColor,primaryDarkColor,secondaryColor; injeta:root { --primary: X; --primary-d: Y; }para que todos os componentes usem a cor da marca automaticamentesite_header_styles—.login-btn,.brand,.nav-link:hovere dropdown usamvar(--primary)/var(--primary-d)FlenxButton— default viavar(--primary, fallback); aceitacolorpara sobrescrever por instânciaFeaturesSectioneFlenxSteps— eyebrow/badge viavar(--primary, fallback)
SEO / GEO / AEO #
SeoConfig— novos campos:telephone,email,address: SeoAddress?,about: String?SeoAddress— endereço físico (PostalAddress + GeoCoordinates para schema.org)JsonLdGenerator— emite@type: LocalBusiness(com endereço, telefone, geo) quandoaddressestá presenteLlmsTxtGeneratoreLlmsFullGenerator— injetam bloco de contato/endereço eaboutno topo do/llms.txte/llms-full.txt
Kit de e-commerce (loja estilo marketplace) #
- FlenxStoreShell — raiz da loja: header (logo, CEP, busca, conta/desejos/carrinho), nav de categorias, promo e rodapé
- FlenxHeroCarousel / FlenxHeroSlide — hero em carrossel com fade automático, imagem de fundo e indicadores clicáveis
- FlenxHeroBanner — banner de destaque único (eyebrow, título, preço, CTA)
- FlenxProductCard — card de produto (foto/emoji, selo, marca, preços, parcelas, comprar)
- FlenxProductShelf — prateleira com contador regressivo ao vivo e carrossel horizontal com auto-avanço
- FlenxProductGrid — grade de catálogo
- FlenxProductDetail — página de detalhe (trilha, foto, preços, descrição, CTAs)
- FlenxPricePills / FlenxBrandStrip / FlenxBenefitsBar — faixas de preço, marcas e benefícios
- Modelos:
FlenxPricePill,FlenxBrandItem,FlenxBenefit,FlenxHeroSlide
Blocos de portal de notícias (estilo G1) #
- FlenxNewsHeader — cabeçalho de portal com editorias e indicador AO VIVO
- FlenxNewsHighlight — manchete principal (imagem 16:9, chapéu, linha-fina, autor · data)
- FlenxNewsCard — cartão de notícia
- FlenxNewsSectionTitle — título de editoria
- FlenxMostRead — bloco "Mais lidas" numerado
- FlenxSidebarLayout — layout de duas colunas (conteúdo + sidebar)
0.1.1 #
- README reformulado: logo, badges, links (pub.dev, showcase, exemplos) e seção de build e deploy (servidor SSR, site estático e API PHP).
- Sem mudanças de código.
0.1.0 #
- Primeira versão pública do Flenx.
- SSR em Flutter/Dart (jaspr) com kit de UI em Dart (sem HTML/CSS).
- Blog com fontes em Markdown e/ou banco de dados, editor de posts estilo G1.
- SEO/GEO/AEO automáticos: sitemap, robots, llms.txt e JSON-LD.
- Admin reutilizável (ilha Flutter): CRUD genérico, permissões por papel, editor de conteúdo e edição da tela inicial.
- APIs declarativas (runtime Dart/shelf ou geração de PHP) e banco plugável (JSONL, MySQL, Supabase, Firebase, REST).