@eduzz/ui-layout

中文文档
5.0.1发布于 2026/10/17MITTypeScriptCommonJS近 30 天下载 2117

Components de UI padrão das aplicações, aqui você vai encontrar:

原始使用文档
文档目录21 节
  1. Importação
  2. Estrutura base
  3. Desestruturando
  4. Exemplo
  5. Props
  6. Layout props
  7. Topbar props
  8. Topbar.Action props
  9. Topbar.UserMenuItem props
  10. Topbar.UserMenuGroup props
  11. Topbar.UnitySupportChat props
  12. Topbar.ModeSwitcher props
  13. Sidebar props
  14. Sidebar.Item props
  15. Sidebar.Group props
  16. Sidebar.GroupWithGroupSwitcher props
  17. SidebarGroupWithGroupSwitcherOption
  18. Content props
  19. useTheme
  20. Importação
  21. Exemplo

Eduzz UI: Layout Eduzz

Components de UI padrão das aplicações, aqui você vai encontrar:

Layout

Estrutura padrão das aplicações.

Importação

import Layout from '@eduzz/ui-layout';

// ou
import Layout from '@eduzz/ui-layout';
import Sidebar from '@eduzz/ui-layout/Sidebar';
import Topbar from '@eduzz/ui-layout/Topbar';
import Content from '@eduzz/ui-layout/Content';

Estrutura base

<Layout>
  <Layout.Topbar />
  <Layout.Sidebar />
  <Layout.Content />
</Layout>

Desestruturando

Para simplificar a escrita do código, você pode desestruturar os componentes.

import Layout from '@eduzz/ui-layout';

const { Sidebar, Topbar, Content } = Layout;
const { Item, Group, GroupWithGroupSwitcher } = Sidebar;

function CustomLayout() {
  return (
    <Layout>
      <Topbar {...topbarProps}>
        {...}
      </Topbar>

      <Sidebar {...sidebarProps}>
        {...}
      </Sidebar>

      <Content>
        {...}
      </Content>
    </Layout>
  );
}

export default CustomLayout;

Exemplo

import { NavLink, useLocation } from 'react-router-dom';

const { Sidebar, Topbar, Content } = Layout;
const { Item, Group, GroupWithGroupSwitcher } = Sidebar;

function MyComponent() {
  const location = useLocation();

  return (
    <Layout>
      <Topbar
        currentApplication='orbita'
        user={{
          name: 'Houston User',
          belt: 'Black Belt',
          avatar: 'https://picsum.photos/200',
          tag: 'unity'
        }}
      >
        <Topbar.UnitySupportChat token='...token gerado pelo servidor' />

        <Topbar.Action icon={<NotificationOutline size={25} />} label='Notificações' />
        <Topbar.Action icon={<InfoChatOutline size={25} />} />

        <Topbar.UserMenu>
          <Topbar.UserMenuItem>Meus Dados</Topbar.UserMenuItem>
          <Topbar.UserMenuItem>Minhas Compras</Topbar.UserMenuItem>

          <Topbar.UserMenuGroup label='Contas:'>
            <Topbar.UserMenuItem href='http://google.com' target='_blank'>
              John Doe
            </Topbar.UserMenuItem>
            <Topbar.UserMenuItem disabled>John Doe 2</Topbar.UserMenuItem>
          </Topbar.UserMenuGroup>

          <Topbar.UserMenuDivider />

          <Topbar.UserMenuItem>Sair</Topbar.UserMenuItem>
        </Topbar.UserMenu>
      </Topbar>

      <Sidebar currentLocation={location.pathname}>
        <Item href='/agendamento'>Resumo</Item>

        <GroupWithGroupSwitcher
            label='Integrações'
            options={[
              {
                id: 'whatsapp',
                label: 'Whatsapp',
                icon: <WhatsAppOutlined />,
                items: [
                  <Item key={'option-1-item-1'} id='sidebar-option-1-item-1'>
                    Templates
                  </Item>,
                  <Item key={'option-1-item-2'} id='sidebar-option-1-item-2'>
                    Configurações
                  </Item>
                ]
              },
              {
                id: 'email',
                label: 'Email',
                icon: <MailOutlined />,
                items: [
                  <Item key={'option-2-item-1'} id='sidebar-option-2-item-1'>
                    Layout
                  </Item>,
                  <Item key={'option-2-item-2'} id='sidebar-option-2-item-2'>
                    Templates
                  </Item>,
                  <Item key={'option-2-item-3'} id='sidebar-option-2-item-3'>
                    Configurações
                  </Item>
                ]
              }
            ]}
          />

        <Group label='Agendamento'>
          <Item as={NavLink} to='/agendamento'>
            Evento
          </Item>
          <Item as={NavLink} to='/agendamento'>
            MasterMind
          </Item>
          <Item as={NavLink} to='/agendamento'>
            Lançamento
          </Item>
        </Group>

        <Item disabled>Marketplace</Item>
      </Sidebar>

      <Content>{/*Your content here*/}</Content>
    </Layout>
  );
}

Props

Layout props

proptipoobrigatóriopadrãodescrição
mode'light' | 'dark'false'light'Modo (Dark ou Light mode)
persistModebooleanfalsefalseFaz o modo (Dark ou Light mode) persistir no cookie eduzz-theme
acceptModeBySearchParambooleanfalsefalseAceita receber ?eduzzMode=dark na URL por exemplo, para definir o mode
onModeChange(newMode: 'light' | 'dark') => voidfalse-Função a ser executada toda vez que houver uma mudança de modo.

Topbar props

proptipoobrigatóriopadrãodescrição
logourlfalse-Url para o logo padrao.
logoMobileurlfalse-Url para o logo na versão mobile.
logoDarkModeurlfalse-Url para o logo padrao no tema dark.
logoMobileDarkModeurlfalse-Url para o logo na versão mobile no tema dark.
currentApplicationstringfalse-Aplicação que está sendo usada, para marcar no menu de apps.
userobjectfalse-Se existe um usuário logado, sem ele não terá o menu User.
disableAppsbooleanfalsefalseSe verdadeiro esconde o menu de apps.
disableLogobooleanfalsefalseSe verdadeiro esconde a logo.
startElementReactNodefalse-Elemento que será adicionado antes da logo

Topbar.Action props

proptipoobrigatóriopadrãodescrição
iconReactNodetrue-Icone, tamanho ideal 25
labelstringfalse-
isActivebooleanfalsefalseSe o icone deve manter o estado de pressionado/ativo
onClickfunctionfalse-

Topbar.UserMenuItem props

proptipoobrigatóriopadrãodescrição
iconReactNodetrue-Icone, tamanho ideal 25
childrenstringfalse-Deve ser uma string
disabledbooleanfalse-
onClickfunctionfalse-

Topbar.UserMenuGroup props

proptipoobrigatóriopadrãodescrição
labelstringtrue-
childrenReactNodetrue-

Topbar.UnitySupportChat props

proptipoobrigatóriopadrãodescrição
tokenstringfalse-Token gerado pelo servidor para uso do LiveHelper

Topbar.ModeSwitcher props

proptipoobrigatóriopadrãodescrição
tooltipstringfalse'Tema'Texto para o tooltip do botão. mode
badgeDotbooleanfalsefalseSe um badgeDot deve ser adicionado ao botão .

Sidebar props

proptipoobrigatóriopadrãodescrição
currentLocationstringfalse-Caminho de localização atual (pathname).

Sidebar.Item props

proptipoobrigatóriopadrãodescrição
asReact.ElementTypefalse-Componente que envolve o item.
anyanyfalse-Qualquer prop que o as receba
isActivebooleanfalsefalseIrá usar o currentLocation fornecido para tentar ver se está ativo ou não
tabIndexnumberfalse-
disabledbooleanfalse-
onClickfunctionfalse-

Sidebar.Group props

proptipoobrigatóriopadrãodescrição
labelReact.ReactNodefalse--
startExpandedbooleanfalsetrueSe o grupo deve iniciar expandido por padrão
tabIndexnumberfalse-

Sidebar.GroupWithGroupSwitcher props

proptipoobrigatóriopadrãodescrição
idstringfalse-Identificador único para o elemento raiz (HTML <li>).
labelReactNodefalse-Label ou título do grupo, exibido acima das opções do seletor.
optionsSidebarGroupWithGroupSwitcherOption[]true-Array de opções que serão renderizadas no grupo. Cada opção define um conjunto de itens e atributos.
classNamestringfalse-Classe CSS adicional para customização do componente.
defaultOptionIdstring false-Valor padrão selecionado, caso não seja informado, será utilizada a primeira opção como padrão
onChangeOption(option: SidebarGroupWithGroupSwitcherOption) => voidfalse-Função que será chamada como callback ao alterar a opção

SidebarGroupWithGroupSwitcherOption

proptipoobrigatóriopadrãodescrição
idstringtrue-Identificador único da opção.
labelstringtrue-Texto que representa o rótulo da opção. Pode ser um nome ou título descritivo.
iconReactNodefalse-Elemento opcional que pode conter um ícone ou qualquer outro elemento visual.
itemsReactNode[]true-Conjunto de itens (children) que serão renderizados quando a opção estiver selecionada.

Content props

proptipoobrigatóriopadrãodescrição
disablePaddingbooleanfalse-Remove o padding

useTheme

Hook para ler e alterar o modo do tema (light / dark). Deve ser usado dentro de um Layout.

import { useTheme } from '@eduzz/ui-layout';

function ThemeToggle() {
  const { theme, toggle, setTheme } = useTheme();

  return (
    <>
      <button onClick={toggle}>Tema atual: {theme}</button>
      <button onClick={() => setTheme('dark')}>Dark</button>
    </>
  );
}

App Loader

Loader de aplicação padrão.

Importação

import AppLoader, { useAppLoader } from '@eduzz/ui-layout';

Exemplo

Coloque no momento de createRoot e use o lazy para aparecer o loader antes da aplicação. Coloque o minimo de imports nesse arquivo para carregar o mais rapido possível.

import { lazy } from 'react';
import { createRoot } from 'react-dom/client';
import AppLoader from '@eduzz/ui-layout'; 

const App = lazy(() => import('./App'));

createRoot(document.getElementById('app') as HTMLElement).render(
  <AppLoader>
    <App />
  </AppLoader>
);

// App.tsx
import { useEffect } from 'react';
import { useAppLoader } from '@eduzz/ui-layout';

function App() {
  const appLoader = useAppLoader();

  useEffect(() => {
    // Faça o que precisar ser feito e entao chame o `hide`
    appLoader.hide();
    // Caso queira aparecer novamente
    appLoader.show();
    // Se algo acontecer pode mostrar uma mensagem de erro
    appLoader.error(new Error(), () => console.log('Tente novamente'));
  }, []);

  return <div />
}

版本与发布记录

@eduzz/ui-layout 共发布 172 个版本,首次发布于 2023/06/30;过去 12 个月发布了 53 个版本。

版本发布日期距今
5.0.1latest2026/10/1728 天前
5.0.1-rc.2rc2026/10/101 个月前
5.0.1-rc.12026/10/031 个月前
5.0.1-rc.02026/10/031 个月前
5.0.02026/09/012 个月前
5.0.0-rc.222026/08/262 个月前

其他发布通道:legacy → 1.4.17,rc → 5.0.1-rc.2。

关于 @eduzz/ui-layout 的常见问题

@eduzz/ui-layout 是什么?

Components de UI padrão das aplicações, aqui você vai encontrar:

如何安装 @eduzz/ui-layout?

在项目目录运行 npm install @eduzz/ui-layout,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=18)、react-dom(>=18)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@eduzz/ui-layout 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@eduzz/ui-layout 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@eduzz/ui-layout 可以商用吗?

@eduzz/ui-layout 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@eduzz/ui-layout 的下载量有多少?

根据 npm 官方下载统计,@eduzz/ui-layout 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,117 次,日均约 71 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@eduzz/ui-layout 还在维护吗?

最新版本 5.0.1 发布于 2026/10/17(28 天前);至今共发布 172 个版本,其中过去 12 个月发布了 53 个;首次发布于 2023/06/30。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。