@ffid-br/tailor-ui 0.1.2 → 0.3.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.
- package/README.md +96 -3
- package/dist/index.es.js +566 -238
- package/dist/index.umd.js +1 -1
- package/dist/style.css +13 -11
- package/dist/types/components/TailorLoader.d.ts +4 -4
- package/dist/types/components/TailorSidebar.d.ts +140 -0
- package/dist/types/index.d.ts +2 -0
- package/package.json +2 -2
package/dist/style.css
CHANGED
|
@@ -18,17 +18,19 @@
|
|
|
18
18
|
--tailor-ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
/* TailorLoader — a
|
|
22
|
-
.tailor-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
/* TailorLoader — a malha pequena se desenha a partir do ponto e some, em 2φ (3,236s). */
|
|
22
|
+
.tailor-malha__linha {
|
|
23
|
+
stroke-dasharray: 1;
|
|
24
|
+
stroke-dashoffset: 1;
|
|
25
|
+
animation: tailor-malha 3.236s var(--tailor-ease-in-out) infinite;
|
|
25
26
|
}
|
|
26
|
-
@keyframes tailor-
|
|
27
|
-
0% {
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
@keyframes tailor-malha {
|
|
28
|
+
0% { stroke-dashoffset: 1; opacity: 1; }
|
|
29
|
+
38.2% { stroke-dashoffset: 0; opacity: 1; }
|
|
30
|
+
80% { stroke-dashoffset: 0; opacity: 1; }
|
|
31
|
+
100% { stroke-dashoffset: 0; opacity: 0; }
|
|
30
32
|
}
|
|
31
|
-
.tailor-
|
|
33
|
+
.tailor-loader__reticencias::after {
|
|
32
34
|
content: '';
|
|
33
35
|
animation: tailor-reticencias 1.618s steps(4, end) infinite;
|
|
34
36
|
}
|
|
@@ -71,7 +73,7 @@
|
|
|
71
73
|
|
|
72
74
|
/* Menos movimento: a informação continua, o movimento sai. */
|
|
73
75
|
@media (prefers-reduced-motion: reduce) {
|
|
74
|
-
.tailor-
|
|
75
|
-
.tailor-
|
|
76
|
+
.tailor-malha__linha { animation: none; stroke-dashoffset: 0; }
|
|
77
|
+
.tailor-loader__reticencias::after { animation: none; content: '...'; }
|
|
76
78
|
.tailor-ponto-pisca { animation: none; }
|
|
77
79
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
export type TailorLoaderProps = {
|
|
3
|
-
/** Rótulo principal. Padrão: "
|
|
3
|
+
/** Rótulo principal. Padrão: "Carregando". */
|
|
4
4
|
label?: string;
|
|
5
5
|
/** Linha de apoio abaixo do rótulo (o que está sendo carregado, ou quanto falta). */
|
|
6
6
|
detail?: string;
|
|
7
7
|
/**
|
|
8
8
|
* `inline`: no lugar do conteúdo. `overlay`: tela inteira, bloqueia.
|
|
9
|
-
* `compact`: uma linha (
|
|
10
|
-
* `caixa`:
|
|
9
|
+
* `compact`: uma linha (ponto + rótulo), para botões e listas.
|
|
10
|
+
* `caixa`: numa caixa própria de 377px, com fundo e borda — para painéis
|
|
11
11
|
* estreitos e fundos com estampa (chat), onde o inline ficaria transparente.
|
|
12
12
|
*/
|
|
13
13
|
variant?: 'inline' | 'overlay' | 'compact' | 'caixa';
|
|
@@ -15,5 +15,5 @@ export type TailorLoaderProps = {
|
|
|
15
15
|
semRespiro?: boolean;
|
|
16
16
|
className?: string;
|
|
17
17
|
};
|
|
18
|
-
/** Loader da marca (
|
|
18
|
+
/** Loader da marca (ponto verde e malha Fibonacci). Sempre expõe `role="status"` com o rótulo. */
|
|
19
19
|
export declare const TailorLoader: React.FC<TailorLoaderProps>;
|
|
@@ -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>;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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.
|
|
5
|
-
"description": "Primitivos de marca Tailor.ia em React: loader, intro, transição de login e
|
|
4
|
+
"version": "0.3.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",
|