Flex
Container de layout flexbox encapsulado em web component — expõe a API completa do flexbox via `mk-flex`.
mk-flex encapsula display: flex (ou inline-flex) em um web component. direction, wrap, justifyContent, alignItems, alignContent e gap são configuráveis via props, com gap mapeado para a escala de tokens --db1-spacing-*. O host do mk-flex é o próprio flex container — não há wrapper interno, o shadow DOM renderiza apenas <slot />.
Padrão
Grupo de itens alinhado horizontalmente com espaçamento consistente via gap.
import { MkFlex } from '@db1/makuco-ui-react';
<MkFlex gap={4}>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</MkFlex><mk-flex gap="4">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</mk-flex>Direction
direction="column" empilha os itens verticalmente, reaproveitando o mesmo primitivo em vez de um componente dedicado de stack.
<MkFlex direction="column" gap={3}>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</MkFlex><mk-flex direction="column" gap="3">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</mk-flex>Wrap com múltiplas linhas
wrap="wrap" quebra os itens em múltiplas linhas quando não cabem no espaço disponível. alignContent distribui as linhas resultantes no eixo cruzado — só tem efeito visual perceptível com múltiplas linhas; com wrap="nowrap" (padrão) a prop é aceita mas não produz diferença visual.
<MkFlex wrap="wrap" alignContent="space-between" gap={3}>
<div>Item 1</div>
{/* ... */}
</MkFlex><mk-flex wrap="wrap" align-content="space-between" gap="3">
<div>Item 1</div>
<!-- ... -->
</mk-flex>justifyContent + alignItems
justifyContent alinha os itens no eixo principal; alignItems alinha cada item individualmente no eixo cruzado.
<MkFlex justifyContent="space-between" alignItems="center">
<div>Alto</div>
<div>Médio</div>
<div>Baixo</div>
</MkFlex><mk-flex justify-content="space-between" align-items="center">
<div>Alto</div>
<div>Médio</div>
<div>Baixo</div>
</mk-flex>Escala de gap
gap aceita um número de 0 a 13, mapeado para a escala de tokens --db1-spacing-{n}. gap="0" (padrão) emite gap: 0 sem referência a token, pois não existe --db1-spacing-0 na escala.
{[0, 1, 4, 8, 13].map((gap) => (
<MkFlex key={gap} gap={gap}>
<div>gap={gap}</div>
<div>Item</div>
<div>Item</div>
</MkFlex>
))}<mk-flex gap="0">
<div>gap=0</div>
<div>Item</div>
<div>Item</div>
</mk-flex>
<mk-flex gap="4">
<div>gap=4</div>
<div>Item</div>
<div>Item</div>
</mk-flex>
<!-- ... -->Inline dentro de texto
inline={true} renderiza display: inline-flex em vez de display: flex, permitindo compor ícone + label dentro de um fluxo de texto sem quebrar o layout ao redor.
<MkFlex inline gap={1} alignItems="center">
<span>★</span>
<span>destaque</span>
</MkFlex><mk-flex inline gap="1" align-items="center">
<span>★</span>
<span>destaque</span>
</mk-flex>Props — mk-flex
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
direction | "row" | "row-reverse" | "column" | "column-reverse" | "row" | Equivale ao CSS flex-direction. |
wrap | "nowrap" | "wrap" | "wrap-reverse" | "nowrap" | Equivale ao CSS flex-wrap. |
justifyContent | "start" | "end" | "center" | "stretch" | "space-between" | "space-around" | "space-evenly" | "normal" | "normal" | Alinhamento no eixo principal. Equivale ao CSS justify-content. |
alignItems | "start" | "end" | "center" | "stretch" | "baseline" | "stretch" | Alinhamento no eixo cruzado, por item. Equivale ao CSS align-items. |
alignContent | "start" | "end" | "center" | "stretch" | "space-between" | "space-around" | "space-evenly" | "normal" | "normal" | Distribuição de múltiplas linhas no eixo cruzado. Só visível com wrap="wrap" ou "wrap-reverse". Equivale ao CSS align-content. |
gap | number | 0 | Espaçamento entre itens, de 0 a 13, mapeado para --db1-spacing-{n}. 0 emite gap: 0 literal — não existe --db1-spacing-0 na escala. |
inline | boolean | false | Quando true, renderiza display: inline-flex em vez de display: flex. |
Slots
| Componente | Slot | Descrição |
|---|---|---|
mk-flex | (default) | Filhos do flex container. Qualquer elemento é válido como flex item. |
Acessibilidade
mk-flex é um layout primitive sem semântica de interação. O browser atribui o role padrão generic ao host — nenhum role adicional é adicionado. O conteúdo slotado é anunciado na ordem do DOM por leitores de tela, independente da ordem visual aplicada por direction/wrap.
direction="row-reverse", direction="column-reverse" e wrap="wrap-reverse" alteram apenas a ordem visual — nunca a ordem de foco ou de leitura. Evite usá-las quando a ordem carrega significado para quem navega por teclado ou leitor de tela (WCAG 1.3.2 Meaningful Sequence).