npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@tabeladev/tabelawebui

v0.28.4

Published

Tema + chrome compartilhado dos apps web do ianptkcs (Catppuccin + estética 'reading someone's source file').

Readme

TabelaWebUI

Tema + chrome compartilhado dos apps web do ianptkcs — Catppuccin (Latte/Mocha) com a estética "reading someone's source file": mono leva a estrutura, bordas afiadas, acento configurável.

English · Português

SvelteKit Cloudflare Workers License: AGPL-3.0

ko-fi


O que é

Equivalente web do tabelatuiui (os TUIs Bubble Tea): cada app mantém só o negócio dele; a lib cuida do tema e dos componentes que todo mundo desenhava do zero.

Instalação

Requer Svelte 5.

bun add @tabeladev/tabelawebui

Uso

Importe o tema uma vez no app e use os componentes:

<script>
	import { Card, Table, Badge, Button, Status } from '@tabeladev/tabelawebui';
</script>

<Card>
	<Card.Header>
		<Card.Title>Resumo</Card.Title>
		<Card.Description>mês atual</Card.Description>
	</Card.Header>
	<Card.Content>
		<Status kind="success">configurado</Status>
		<Button variant="primary">+ Nova transação</Button>
		<Table columns={['Data', 'Descrição']} rows={[{ Data: '01/08', Descrição: 'Mercado' }]} />
	</Card.Content>
</Card>

No CSS do app (uma vez):

@import "@tabeladev/tabelawebui/theme.css";

Componentes

| Componente | O que é | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Card | painel com header e conteúdo; API composta Card.Header/Title/Description/Content/Footer | | TabCard | painel "aba de arquivo" (chrome de página) | | Table | tabela com columns/rows, snippet cell, sort, filtro global, selection, loading/skeleton, empty e paginação (com pageSizeOptions; pageSize={0} mostra todas as linhas sem paginação) | | Badge | tag de texto pequena — variantes default / secondary / outline | | Button | variantes default / primary / ghost / danger / outline, size (default/sm/lg/icon-sm), href, loading; buttonVariants() | | Panel | contêiner com focused → borda accent; toggleable colapsável | | Status | semântico success / warning / error / info, com icon opcional | | Input | campo de texto (password, file com bind:files, ...), invalid | | Textarea | área de texto multi-linha (bind:value, rows, resize: vertical, invalid) | | Label | rótulo mono 13px | | Field | wrapper de form: label + children (input/textarea/select) + mensagem de erro opcional | | Radio | opção única: input oculto + indicador circular (accent no checked, foco por :has()) | | Checkbox | opção múltipla: input oculto + quadrado com | | Toggle | switch on/off (hidden checkbox + role switch, invalid) | | Select | listbox custom com options, bind:value, name, navegação por teclado e filter | | MultiSelect | seleção múltipla em popover com checkboxes, filter, hidden input com name | | Listbox | lista de opções visível (single/múltipla), filter, checkmark | | DatePicker | seletor de data/mês com popover calendário, bind:value, min/max, locale | | FileUpload | seletor de arquivos com drag-and-drop (basic/advanced), validação de accept/maxFileSize/fileLimit, progresso por arquivo, customUpload + uploadHandler (sem rede embutida), snippets | | Toaster | renderiza toasts + store toast; position configurável | | Timeline | linha do tempo (Timeline.Items com trilho, dot, skills) | | RuleCard | cartão com borda-superior, ícone e prosa serif | | Nav | navbar: logo + links em breadcrumb com / | | ThemeToggle | alterna data-theme/.dark + localStorage; showLabel opcional pra label visível claro/escuro | | AppShell | shell do app autenticado num só export composto: AppShell.Sidebar (desktop: brand + nav + tema/logout), AppShell.BottomNav (mobile), AppShell.Content (max-w-6xl) | | Wordmark | Tabela na cor do texto + suffix em accent; herda a fonte/tamanho do contexto | | Dropdown | menu com sombra impressa; fecha por fora/Esc | | Divider | linha horizontal/vertical, solid/dashed, label central | | Eyebrow | label de seção mono uppercase | | BracketLink | link mono [ label ], colchetes acendem no hover | | Message | alerta inline info/success/warn/error, closable, life (auto-dismiss) | | ProgressBar | barra de progresso determinada/indeterminada com label | | ErrorPage | display de página de erro (status em mono/accent, title, description, homeHref/homeLabel, actions snippet) — usado dentro de +error.svelte | | Skeleton | shimmer placeholder (width/height/rounded) | | Tooltip | tooltip CSS via data-tooltip (top/bottom/left/right) | | Dialog | modal com overlay, aria-modal, Esc/outside pra fechar, footer snippet | | Sidebar | painel lateral/top/bottom; mode overlay (drawer) ou push (estático, desktop), collapsible+collapsed, overlay off, breakpoint 768 (mobile vira drawer full-width), animado | | Tabs | barra de abas com value bindable, disabled, navegação por teclado | | Accordion | painéis colapsáveis (multiple, value bindable) | | Stepper | indicador de passos (onboarding) com value bindable | | Carousel | carrossel com page bindable, dots e arrows | | Rating | estrelas (max, readonly, cancel) | | StatusPill | pill fixa estilo toast (position, closable, visible bindable) | | FloatingActionPill | pill flutuante clicável (position, label, expandedaria-expanded) — estilo do StatusPill, mas <button> que abre painel/dialog | | ChatMessage | bubble de chat (role user/assistant, content, name, streaming → ellipsis pulsando) — render presentacional, sem lógica de SSE | | Landing | seções de landing num só export composto: Landing.Hero, Landing.Steps (cards numerados, número em box colorido), Landing.Features, Landing.Roadmap, Landing.Footer (name + tagline/licença/link de repo opcionais) | | SectionHeading | título de seção: eyebrow + h2 + lead | | TerminalWindow | janela de terminal: barra de dots + title + conteúdo (children) |

Tokens

O tema expõe custom properties --twui-*:

  • Semânticos: --twui-paper, --twui-paper-raised, --twui-ink, --twui-ink-soft, --twui-ink-faint, --twui-rule, --twui-accent, --twui-accent-soft, --twui-signal, --twui-signal-soft, --twui-danger
  • Fontes: --twui-font-mono, --twui-font-serif
  • Sombra: --twui-shadow-offset (hard offset 3px)
  • Paleta por flavor ativo: --twui-base, --twui-surface0, --twui-text, --twui-red, --twui-green, --twui-mauve, ... (via --twui-<color>)
  • Cores cruas por flavor: --twui-latte-* e --twui-mocha-* (escala completa — neutros + 14 acentos do Catppuccin)

Tema escuro via [data-theme="dark"] ou classe .dark no <html>. O tema aplica defaults de body (fundo, cor, fonte serif) e respeita prefers-reduced-motion.

Accent custom por app

O accent padrão é o marrom (claro) / pink (escuro). Cada app pode ter o seu escolhendo um nome via data-accent no <html> — a lib resolve o par Latte/Mocha automaticamente:

<html data-accent="teal"></html>

O --twui-accent-soft deriva sozinho (via color-mix); os semânticos --twui-signal/--twui-danger e os neutros não mudam. Acentos disponíveis:

| Accent | Latte (claro) | Mocha (escuro) | | ------------------ | ------------- | -------------- | | maroon (default) | #e64553 | #eba0ac | | mauve | #8839ef | #cba6f7 | | pink | #ea76cb | #f5c2e7 | | red | #d20f39 | #f38ba8 | | peach | #fe640b | #fab387 | | yellow | #df8e1d | #f9e2af | | green | #40a02b | #a6e3a1 | | teal | #179299 | #94e2d5 | | lavender | #7287fd | #b4befe | | rosewater | #dc8a78 | #f5e0dc | | flamingo | #dd7878 | #f2cdcd | | blue | #1e66f5 | #89b4fa | | sky | #04a5e5 | #89dceb | | sapphire | #209fb5 | #74c7ec |

(Escape hatch: quem precisar de uma cor fora da lista pode sobrescrever --twui-accent direto no layout.css, nos dois temas.)

Desenvolvimento

Stack: Svelte 5 + SvelteKit, Bun como package manager.

bun install
bun run check   # typecheck (svelte-kit sync + svelte-check)
bun run lint    # prettier
bun run build   # svelte-package (dist)

O pacote é publicado no npm como @tabeladev/tabelawebui; as versões seguem o CHANGELOG.md e a convenção do CONTRIBUTING.md.

Ferramentas

  • MCP server (mcp/): expõe componentes, tokens e accents como tools MCP pra coding agents (props com tipos, --twui-* light/dark, data-accent). Veja mcp/README.md pra instalar/rodar.

Pedindo um componente

Requests de feature feitos por outros agents vivem em requests/ como arquivos markdown — veja requests/README.md pro fluxo, e requests/_template.md pro que preencher. De fora deste repo, abra uma issue de feature request.

Changelog

Veja CHANGELOG.md para o histórico de versões.

Apoie o projeto

  • Global: ko-fi.com/ianptkcs

  • Brasil (Pix): escaneie o QR abaixo ou copie o código

    00020126580014BR.GOV.BCB.PIX01365ad933b0-dcdc-4525-a736-0759902aeec65204000053039865802BR5925Ian Patrick da Costa Soar6009SAO PAULO62140510tQA85x6Dov63041FB6

Licença

AGPL-3.0 — copyleft forte: você pode usar, modificar e até hospedar o TabelaWebUI comercialmente, mas qualquer versão modificada, inclusive rodando como serviço via rede (SaaS), precisa continuar open source sob a mesma licença.