@ffid-br/tailor-ui 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,140 @@
1
+ import { default as React, ReactNode } from 'react';
2
+ export type SuperficieSidebar = 'auto' | 'clara' | 'escura';
3
+ export type BreakpointSidebar = 'md' | 'lg';
4
+ export type TailorSidebarItem = {
5
+ id: string;
6
+ rotulo: string;
7
+ /** Ícone de linha (lucide, heroicons outline). Recebe só `className`. */
8
+ icone: React.ComponentType<{
9
+ className?: string;
10
+ }>;
11
+ href?: string;
12
+ ativo?: boolean;
13
+ /** Contagem ou marcador curto. `0` e `''` não aparecem. */
14
+ badge?: number | string;
15
+ /** `alerta` pinta o chip de vermelho. Padrão: neutro (preto/branco). */
16
+ badgeTom?: 'neutro' | 'alerta';
17
+ /** Subitens. O item pai vira um botão que abre e fecha a lista. */
18
+ filhos?: TailorSidebarItem[];
19
+ /** Chamado no clique. Sem `href`, o item vira um botão de ação. */
20
+ onSelect?: () => void;
21
+ /** Item visível mas inativo (ex.: "Em breve"). */
22
+ desabilitado?: boolean;
23
+ };
24
+ export type TailorSidebarGrupo = {
25
+ rotulo?: string;
26
+ itens: TailorSidebarItem[];
27
+ };
28
+ export type TailorSidebarLinkProps = {
29
+ href?: string;
30
+ className: string;
31
+ children: ReactNode;
32
+ 'aria-current'?: 'page';
33
+ 'aria-label'?: string;
34
+ title?: string;
35
+ onClick: () => void;
36
+ };
37
+ /** Troca o `<a>` padrão pelo link do roteador (NavLink/Link do React Router). */
38
+ export type TailorSidebarRenderLink = (item: TailorSidebarItem, props: TailorSidebarLinkProps) => ReactNode;
39
+ export type SidebarItemProps = {
40
+ item: TailorSidebarItem;
41
+ nivel?: number;
42
+ };
43
+ /** Um item da nav. Exportado para quem monta grupos à mão (ex.: sub-nav do Orchestrator). */
44
+ export declare const SidebarItem: React.FC<SidebarItemProps>;
45
+ export type SidebarGroupProps = {
46
+ rotulo?: string;
47
+ itens?: TailorSidebarItem[];
48
+ /** `<SidebarItem>`s ou `<li>` próprios, depois dos `itens`. */
49
+ children?: ReactNode;
50
+ };
51
+ /** Grupo com rótulo de 11px. No trilho o rótulo sai e o espaço entre grupos fica. */
52
+ export declare const SidebarGroup: React.FC<SidebarGroupProps>;
53
+ export type TailorSidebarProps = {
54
+ /** Nome do produto no lockup ("Conta", "Studio", "BI", "Pilot"). */
55
+ produto: string;
56
+ /** Logo do cliente (whitelabel) no lugar do wordmark. */
57
+ logoClaro?: string;
58
+ logoEscuro?: string;
59
+ /** Substitui o lockup inteiro (ex.: logo do cliente com link para o início). */
60
+ marca?: ReactNode;
61
+ /** Marca no trilho recolhido, acima do botão de expandir. Padrão: nenhuma. */
62
+ marcaRecolhida?: ReactNode;
63
+ grupos: TailorSidebarGrupo[];
64
+ /** Seletor de contas. Ocupa a linha; some no trilho. */
65
+ accountSelector?: ReactNode;
66
+ /** Seletor de apps, à direita do seletor de contas (centralizado no trilho). */
67
+ apps?: ReactNode;
68
+ /** Conteúdo extra no fim da nav (grupos montados à mão, aviso de status). */
69
+ children?: ReactNode;
70
+ /** Rodapé fixo: em geral o `TailorUserMenu`. */
71
+ rodape?: ReactNode;
72
+ /** "Powered by Tailor.ia". Ligue só quando a logo do cliente substitui o wordmark. */
73
+ poweredBy?: boolean;
74
+ superficie?: SuperficieSidebar;
75
+ /** Trilho de 80px, só ícones. Controlado pelo app (ele guarda a preferência). */
76
+ recolhido?: boolean;
77
+ /** Sem isto, o botão de recolher não aparece. */
78
+ onRecolher?: (recolhido: boolean) => void;
79
+ /** Gaveta do celular aberta. Abaixo do breakpoint a barra fixa some. */
80
+ aberto?: boolean;
81
+ onFechar?: () => void;
82
+ /** Onde a barra fixa vira gaveta. Padrão `lg` (1024px). */
83
+ breakpoint?: BreakpointSidebar;
84
+ renderLink?: TailorSidebarRenderLink;
85
+ /** Nome da navegação para leitores de tela. */
86
+ ariaLabel?: string;
87
+ /** Classes extras no `<aside>` (ex.: `fixed inset-y-0` em vez de `sticky`). */
88
+ className?: string;
89
+ };
90
+ /**
91
+ * Barra lateral padrão: marca + recolher, seletor de contas + apps, grupos de
92
+ * itens, rodapé. O mesmo `grupos` desenha a barra fixa e a gaveta do celular.
93
+ */
94
+ export declare const TailorSidebar: React.FC<TailorSidebarProps>;
95
+ export type TailorUserMenuAcao = {
96
+ rotulo: string;
97
+ icone?: React.ComponentType<{
98
+ className?: string;
99
+ }>;
100
+ href?: string;
101
+ onSelect?: () => void;
102
+ /** `perigo` para "Sair". */
103
+ tom?: 'perigo';
104
+ };
105
+ export type TailorUserMenuProps = {
106
+ nome: string;
107
+ /** Linha de baixo: e-mail. */
108
+ detalhe?: string;
109
+ /** Papel na conta ("Administrador"), mostrado no painel. */
110
+ papel?: string;
111
+ avatarUrl?: string;
112
+ acoes?: TailorUserMenuAcao[];
113
+ /** Conteúdo livre no painel, antes das ações (tema, notificações push). */
114
+ children?: ReactNode;
115
+ };
116
+ /**
117
+ * Menu do usuário para o `rodape` da `TailorSidebar`. Botão que abre um painel
118
+ * (padrão disclosure: aceita conteúdo livre, como o seletor de tema). Esc e
119
+ * clique fora fecham; setas percorrem os itens.
120
+ */
121
+ export declare const TailorUserMenu: React.FC<TailorUserMenuProps>;
122
+ export type TailorMobileBarProps = {
123
+ /** Abre a gaveta: ligue no `aberto` da `TailorSidebar`. */
124
+ onAbrirMenu: () => void;
125
+ /** Gaveta aberta, para o `aria-expanded` do hambúrguer. */
126
+ menuAberto?: boolean;
127
+ produto: string;
128
+ logoClaro?: string;
129
+ logoEscuro?: string;
130
+ marca?: ReactNode;
131
+ apps?: ReactNode;
132
+ /** À direita dos apps (sino, avatar). */
133
+ direita?: ReactNode;
134
+ superficie?: SuperficieSidebar;
135
+ /** Mesmo breakpoint da `TailorSidebar`. A barra some a partir dele. */
136
+ breakpoint?: BreakpointSidebar;
137
+ className?: string;
138
+ };
139
+ /** Barra do topo no celular: hambúrguer, marca, apps. A nav fica toda na gaveta. */
140
+ export declare const TailorMobileBar: React.FC<TailorMobileBarProps>;
@@ -9,3 +9,5 @@ export type { TailorBrandMarkProps } from './components/TailorBrandMark';
9
9
  export { EntrarOverlay, EntradaApp, marcarEntradaPendente, limparEntradaPendente, ENTRADA_PENDENTE, } from './components/entrada';
10
10
  export type { EntrarOverlayProps } from './components/entrada';
11
11
  export { logoTailor, logoTailorBranco } from './logos';
12
+ export { TailorSidebar, SidebarGroup, SidebarItem, TailorUserMenu, TailorMobileBar } from './components/TailorSidebar';
13
+ export type { TailorSidebarProps, TailorSidebarItem, TailorSidebarGrupo, TailorSidebarLinkProps, TailorSidebarRenderLink, SuperficieSidebar, BreakpointSidebar, SidebarGroupProps, SidebarItemProps, TailorUserMenuProps, TailorUserMenuAcao, TailorMobileBarProps, } from './components/TailorSidebar';
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@ffid-br/tailor-ui",
3
3
  "private": false,
4
- "version": "0.1.2",
5
- "description": "Primitivos de marca Tailor.ia em React: loader, intro, transição de login e lockup.",
4
+ "version": "0.2.0",
5
+ "description": "Primitivos de marca Tailor.ia em React: loader, intro, transição de login, lockup e barra lateral.",
6
6
  "type": "module",
7
7
  "main": "dist/index.umd.js",
8
8
  "module": "dist/index.es.js",