# @schumann/ui ## 0.13.0 ### Minor Changes - Modal.Content ganhou slot `icon` no header e ConfirmModal ganhou modo alerta (hideCancel); FormField aceita `style` e SegmentedControl aceita `disabled`; fixes: pill não clipa mais rótulos de largura desigual e o footer do Modal ganhou respiro acima do divisor. ## 0.12.0 - **Fonte padrão trocada de Inter para Roboto** (`--font-sans`). Apps consumidores devem carregar Roboto com os pesos do DS (400/500/600/700/800) — Roboto do Google Fonts é variável e serve 600/800 (Roboto clássico não tinha, o que causaria faux-bold). A família continua sobrescrevível via token para quem quiser outra. Storybook renderiza em Roboto; toolbar de fonte removida. ## 0.11.1 - **Tipografia trocável documentada.** A fonte já era o token `--font-sans` (a lib não embute fontes) — README ganhou a seção "Tipografia" mostrando como um app usa **Roboto** (ou qualquer família) sobrescrevendo a variável. Storybook ganhou a toolbar **Fonte** (Inter/Roboto) para pré-visualizar ao vivo. Nenhuma mudança no bundle: Inter continua o padrão. ## 0.11.0 Extração de padrões de página recorrentes do frontend-v3 (auditoria de gap). Todos genéricos, sem regra de negócio. - **PageHeader** (template): eyebrow + título grande + slot de ações. Aparecia idêntico em 12/12 páginas. - **ProgressBar** (atom): barra fina com `%` colorido e limiar de perigo (>85% vira `dangerColor`). Repetido em 10 páginas. Aceita fração 0–1 ou `value`/`max`. - **StatCard** (molecule): ícone + label + valor mono + sublabel, com acento por cor. Era o SummaryCard/StatItem do briefing. - **EmptyState** (molecule): ícone + título + descrição + ações; variante `dashed` para dropzones. - **Tooltip** (molecule): acessível via Radix (hover + foco por teclado, ARIA), Provider embutido. Nova peer dep `@radix-ui/react-tooltip`. - **SegmentedControl** ganhou a variante **`tab`** (ativo com fill sólido brand) — cobre as barras de aba de 4 páginas (Configurações/Categorias/Transações/Recorrentes) sem componente novo. - Infra de teste: polyfill de `ResizeObserver` no setup (jsdom não tem; usado por primitivos Radix). ## 0.10.2 - **Fix: dropdowns `position: fixed` abriam deslocados dentro de containers com `transform`.** `MultiSelect` e `Menu` posicionam via `getBoundingClientRect()` (coordenadas de viewport), mas qualquer ancestral com `transform`/`filter`/`contain`/`will-change` vira o _containing block_ do `fixed` — inclusive uma matriz identidade, como a que o Storybook aplica no wrapper de zoom das páginas de Docs. Novo util `getFixedOffset()` (`utils/dom`) compensa esse offset; mantém o `fixed` (que existe para escapar do `overflow` de modais). - **Fix:** `Menu` — o foco automático no primeiro item usava `focus()` e fazia o browser **rolar a página** ao abrir; agora usa `focus({ preventScroll: true })`, já que o menu abre ancorado onde o usuário clicou. - Story `Menu/Open` passou a ancorar em um elemento real em vez de coordenadas hardcoded, ficando correta em qualquer contexto. ## 0.10.1 - **Fix (tema light):** `IconPicker` — ícones não-selecionados usavam branco translúcido fixo (`rgba(255,255,255,.55)`) e ficavam invisíveis em fundo claro; agora usam `var(--text-secondary)`. Mesmo problema no anel do botão "cor personalizada" do `ColorPicker`. Brancos que ficam **sobre cores saturadas** (check do swatch, check do MultiSelect, bordas internas dos sliders) foram mantidos — funcionam nos dois temas. ## 0.10.0 - **ColorPicker redesenhado** (visual V2, handoff `ColorPickerV2.dc.html`): swatches maiores (34px) com halo colorido no selecionado (`0 0 0 2px surface-card, 0 0 0 4px {hex}, glow`) + ícone de check; botão "cor personalizada" (roda cônica) que expande um **painel inline** (não mais dropdown flutuante) — SV de 168px, hue slider fino de 12px, linha de preview + campo dual **HEX/RGB** com abas. Selecionar um swatch não fecha mais o painel. - **Breaking (pré-1.0):** prop `colors` renomeada para `swatches`; `DEFAULT_COLORS` renomeado para `DEFAULT_SWATCHES` com a nova paleta de 10 cores do handoff. Novos props: `open`/`defaultOpen`/`onOpenChange` (padrão `useControllableState` da lib), `showInput` (esconde preview+campo, mantém só os sliders), `customLabel`. - Fix: `hsvToRgb` (utils/color) agora arredonda o resultado — antes vazava ruído de ponto flutuante (`45.00000000000001`) em qualquer consumidor que exibisse RGB cru, incluindo o novo campo RGB do ColorPicker. ## 0.9.0 - **Fix: tema Light não aplicava na página de Docs.** A página de Docs (autodocs — a visão padrão de cada componente) usava um `docs.theme` fixo do Storybook, que não reagia ao toggle dark/light da toolbar; só o pequeno canvas do componente virava claro, o resto da tela (título, descrição, tabela de props) ficava sempre escuro. Adicionado `.storybook/ThemedDocsContainer.tsx`: um `docs.container` customizado que ouve `GLOBALS_UPDATED` no channel do Storybook e troca entre `themes.dark`/`themes.light` — a página de Docs inteira agora acompanha o toggle, com contraste correto em todo o conteúdo (título, código inline, tabela de controles). Corrigido também `backgrounds: { disable: true }` (a chave certa era `disable`, não `disabled`). ## 0.8.1 - MonthPicker: +4px de folga na largura fixa da pill — meses com letras largas (Dezembro, Novembro) estavam ficando espremidos contra os chevrons. ## 0.8.0 - **MonthPicker com o visual do handoff** (`MonthPicker.html`): pill em `surface-raised` com divisor vertical entre label e chevrons, calendário na cor brand; painel 272px ancorado abaixo da pill (sem alinhamento forçado), ano em JetBrains Mono 800, células 44px "Jan/Fev/…", selecionado em brand sólido, mês atual com texto brand. Substitui o chip claro da spec antiga. - MonthPicker: largura da pill fixada pelo mês mais longo (ghost invisível) — os chevrons não se mexem ao trocar de mês; dígitos do ano em `tabular-nums`. - Migração interna para **Storybook 10** (imports `@storybook/react-vite` / `storybook/theming`). ## 0.7.0 - **MonthPicker:** barra agora idêntica ao topbar do app — `[📅 Mês Ano] ‹ ›` (nome completo, chevrons agrupados à direita); `monthLabels` passou a receber nomes completos (o grid abrevia sozinho). Painel repaginado: células maiores, cantos 16px, sombra maior e animação de entrada. ## 0.6.0 - **AppShell:** busca opcional no topo da sidebar (`searchable`/`searchPlaceholder`) que filtra os itens de nav pelo label (accent-insensitive) e esconde grupos vazios; item ativo agora é só o pill de fundo — removida a borda esquerda. ## 0.5.0 - **Novo `MonthPicker`**: barra `‹ mês ›` (pill com label mmm/aa minúsculo) + painel 4×3 dos 12 meses com navegação de ano. Mês atual com borda brand-200; selecionado em chip claro (exceção deliberada do DS no dark). Labels via `monthLabels`/`formatLabel`, Escape/backdrop fecham. ## 0.4.0 - **Removido `Select`** — o `Combobox` cobre o caso (pesquisável, teclado, `leading` por opção). - **Menu reformado:** fecha sozinho após clique em item, Escape fecha, navegação por setas, foco no primeiro item ao abrir, focus ring visível, `max-height` com scroll. - **Combobox/MultiSelect:** highlight de cursor agora é neutro + anel índigo (não se confunde mais com a cor de selecionado); MultiSelect integrado ao `FormField` (id/aria-describedby/estado inválido). - **Fix de camadas:** `--z-dropdown` agora fica **acima** do modal — Combobox/MultiSelect/Menu abertos dentro de um `Modal` não somem mais atrás dele. ## 0.3.0 - **Ícones em massa:** novo entry opt-in `@schumann/ui/icons` — registra o set Lucide completo (~2.000 ícones, ISC) no registro por nome. Importar uma vez no bootstrap; quem não importa não paga nada (`sideEffects` configurado). Nomes do DS têm precedência. - `getIconNames()` exportado — lista todos os nomes registrados (útil com `IconPicker`). - `IconPicker`: busca embutida (automática com >40 ícones) + grid rolável. - **Removidos** `ColorSwatches` e `ColorSelect` — só o `ColorPicker` completo permanece. - Scrollbar global fina e tema-aware no stylesheet da lib (webkit + `scrollbar-color` p/ Firefox/Chrome 121+), tokens `--scrollbar-thumb`/`--scrollbar-thumb-hover`. ## 0.2.0 Catálogo completo — todos os padrões visuais do frontend-v3 portados (inline-style → CSS com tokens, strings PT-BR → props com default, regras de negócio removidas). - **Atoms:** Icon/IconBox (set de ícones do DS + `registerIcons`/`registerIconAliases`), IconButton, Avatar, Switch, Skeleton. - **Molecules:** Select, Combobox (pesquisável, teclado), MultiSelect (chips), SegmentedControl (pill/card), SwitchCard, MoneyInput (máscara digit-shift), DateTimeInput (máscara dd/mm/aaaa hh:mm), ColorSwatches/ColorSelect/ColorPicker (HSV), IconPicker. - **Organisms:** Menu (kebab/contexto), DataTable (busca, ordenação, seleção, paginação, bulk actions), ConfirmModal (espera + erro embutidos, `formatError`). - **Templates:** AppShell (topbar + sidebar retrátil + drawer mobile, sem router). - Fix: keydown do input interno de Combobox/MultiSelect não borbulha mais para o trigger (tecla tratada 2×, herdado do app). ## 0.1.0 Base funcional inicial. - Tokens (primitivos + semânticos) com tema dark (padrão) e light. - Configuração de build (Vite library mode, ESM, `.d.ts`, `styles.css` único). - Storybook, Vitest + Testing Library + jest-axe, ESLint, Prettier, Changesets. - Componentes: `Button`, `Input`, `Text`, `Heading`, `Label`, `Badge`, `Spinner`, `FormField`, `Card`, `Modal`, `PageContainer`.