Pular para o conteúdo

DocsComeçarFrameworks

EN

Começar

Frameworks

A mesma base roda em HTML puro e tem adaptador oficial para React, Vue, Nuxt, Svelte, Angular e Astro.

Uma base, vários adaptadores

A base é um conjunto de 33 custom elements <u-*> que roda em qualquer página com JavaScript: HTML puro, PHP, Django, Rails, WordPress. Em cima dela há adaptadores oficiais, com tipos TypeScript, para React (Next e Vite), Vue, Nuxt, Svelte (SvelteKit), Angular e Astro.

Os nomes são os mesmos em todos: USankey, USlider, USelect. O adaptador só traduz props, eventos e o momento de registrar o elemento. A lógica do componente fica na base.

Qual pacote e como ligar

FrameworkPacoteValorEventosSSR
React, Next@leallabs/unslop-reactvalue + onChangeonChange, onApply, onReadySim
Vue@leallabs/unslop-vuev-model@u-changeSim
Nuxt@leallabs/unslop-nuxtv-model@u-changeSim
Svelte, SvelteKit@leallabs/unslop-sveltebind:valueonChangeSim
Angular@leallabs/unslop-angularngModel ou formControl(u-change)Sim
Astro@leallabs/unslop-astroSó o valor inicialaddEventListener("u-change")Sim
HTML puroNenhum: unslop.css e unslop.elements.jsvalueaddEventListener("u-change")Não se aplica

O adaptador pede o @leallabs/unslop como peer e o npm instala junto. No Astro ele é opcional, então vai no mesmo comando. Os <u-*> e o define() vêm desse pacote; sem build, o unslop.elements.js da CDN define os mesmos <u-*>. O unslop.js antigo continua valendo, com data-u e o evento u:change.

Um exemplo em cada um

Cada exemplo liga um slider a um valor e põe uma lista de barras dentro de um card. Os trechos saem das fixtures do repositório, que passam no teste.

Instalar

npm install @leallabs/unslop-react

CSS e registro

CSS: uma vez, na raiz. No Next fica em app/layout.tsx; no Vite, em main.tsx.

import "@leallabs/unslop/css";

Exemplo

Exemplo (de fixtures/vite-react/src/Demo.tsx e fixtures/next/components/Demo.tsx). No Next, o arquivo começa com "use client".

import { useState } from "react";
import { USlider, UBarlist } from "@leallabs/unslop-react";

const periods = [{
  label: "Hoje", total: 120,
  items: [{ label: "/docs", value: 80 }, { label: "/blog", value: 40 }],
}];

export default function Painel() {
  const [nivel, setNivel] = useState(2);
  return <>
    <USlider min={0} max={4} value={nivel} label="Esforço" onChange={(e) => setNivel(e.detail.value)} />
    <UBarlist card label="Visualizações" periods={periods} />
  </>;
}

O que muda entre eles

  • Angular não tem card. A moldura do gráfico fica escrita à mão, porque gerar por fora quebraria a hidratação.
  • Astro só tem o valor inicial. Não há estado reativo no servidor; a leitura é pelo evento.
  • Vue e Angular escutam u-change. O change colidiria com o evento nativo do input interno.

Como isso é testado

A cada versão, cada adaptador roda numa fixture real do framework e passa por renderização no servidor, hidratação, eventos, valor e vazamento de memória.

Digite pra buscar. Setas escolhem, Enter abre.