@ffid-br/tailor-ui 0.3.0 → 0.5.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 +51 -0
- package/dist/index.es.js +803 -356
- package/dist/index.umd.js +1 -1
- package/dist/style.css +72 -0
- package/dist/types/components/AgenteMascote.d.ts +58 -0
- package/dist/types/components/EquipeDock.d.ts +25 -0
- package/dist/types/components/MascoteVetor.d.ts +188 -0
- package/dist/types/index.d.ts +5 -0
- package/package.json +5 -2
package/dist/style.css
CHANGED
|
@@ -71,9 +71,81 @@
|
|
|
71
71
|
to { opacity: 1; transform: none; }
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
/* AgenteMascote — personagem 8x8 (QD-0426). Movimento em degraus, como pixel. */
|
|
75
|
+
.tailor-mascote { --tailor-mascote-tinta: var(--tailor-black); }
|
|
76
|
+
.tailor-mascote__corpo { grid-auto-rows: var(--tailor-celula, 4px); }
|
|
77
|
+
.tailor-mascote__pixel { width: var(--tailor-celula, 4px); height: var(--tailor-celula, 4px); }
|
|
78
|
+
.tailor-mascote__tinta { background: var(--tailor-mascote-tinta); }
|
|
79
|
+
.tailor-mascote__verde { background: var(--tailor-green); }
|
|
80
|
+
.tailor-mascote__selo {
|
|
81
|
+
min-width: 16px; height: 16px; padding: 0 4px; box-sizing: border-box;
|
|
82
|
+
display: flex; align-items: center; justify-content: center;
|
|
83
|
+
background: var(--tailor-black); color: var(--tailor-white); font-size: 10px; line-height: 1;
|
|
84
|
+
}
|
|
85
|
+
.tailor-mascote--desligado { --tailor-mascote-tinta: #999999; }
|
|
86
|
+
.tailor-mascote--desligado .tailor-mascote__verde { background: #999999; }
|
|
87
|
+
.tailor-mascote__corpo { animation: tailor-mascote-bob 1.6s steps(2, end) infinite; }
|
|
88
|
+
.tailor-mascote--analisando .tailor-mascote__corpo,
|
|
89
|
+
.tailor-mascote--subiu .tailor-mascote__corpo { animation-duration: 0.6s; }
|
|
90
|
+
.tailor-mascote--desligado .tailor-mascote__corpo { animation: none; }
|
|
91
|
+
.tailor-mascote__olho { animation: tailor-mascote-piscar 4s infinite; }
|
|
92
|
+
.tailor-mascote__verde { animation: tailor-mascote-pulso 2.4s steps(1, end) infinite; }
|
|
93
|
+
.tailor-mascote--analisando .tailor-mascote__verde { animation-duration: 1s; }
|
|
94
|
+
@keyframes tailor-mascote-bob { 0%, 100% { transform: none; } 50% { transform: translateY(calc(var(--tailor-celula, 4px) * -0.5)); } }
|
|
95
|
+
@keyframes tailor-mascote-piscar { 0%, 90%, 100% { transform: none; } 94% { transform: scaleY(0.15); } }
|
|
96
|
+
@keyframes tailor-mascote-pulso { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0.25; } }
|
|
97
|
+
|
|
98
|
+
/* Ponto do estado: quadrado, sempre ao lado do texto. */
|
|
99
|
+
.tailor-estado__ponto { display: inline-block; width: 8px; height: 8px; }
|
|
100
|
+
.tailor-estado__ponto--analisando { background: var(--tailor-green); }
|
|
101
|
+
.tailor-estado__ponto--esperando { background: #FF9033; }
|
|
102
|
+
.tailor-estado__ponto--feito { background: #008548; }
|
|
103
|
+
.tailor-estado__ponto--subiu { background: #0040FF; }
|
|
104
|
+
.tailor-estado__ponto--desligado { background: #999999; }
|
|
105
|
+
.tailor-estado__ponto--parado { background: #666666; }
|
|
106
|
+
.tailor-estado__ponto--cumprimentando { background: var(--tailor-green); }
|
|
107
|
+
.tailor-estado__ponto--falando { background: #008548; }
|
|
108
|
+
.tailor-estado__ponto--erro { background: #FF0040; }
|
|
109
|
+
|
|
110
|
+
/* AgenteMascote estilo vetor: o movimento diz o estado; o olhar segue o cursor. */
|
|
111
|
+
.tailor-mv { line-height: 0; }
|
|
112
|
+
.tailor-mv__corpo { transform-box: fill-box; transform-origin: 50% 100%; animation: tailor-mv-respira 3.2s ease-in-out infinite; }
|
|
113
|
+
.tailor-mv--esperando .tailor-mv__corpo { animation: tailor-mv-espera 1.8s ease-in-out infinite; }
|
|
114
|
+
.tailor-mv--pensando .tailor-mv__corpo { animation: tailor-mv-inclina 2.6s ease-in-out infinite; }
|
|
115
|
+
.tailor-mv--comemorando .tailor-mv__corpo { animation: tailor-mv-pulo 0.9s cubic-bezier(.16,1,.3,1) infinite; }
|
|
116
|
+
.tailor-mv--erro .tailor-mv__corpo { animation: tailor-mv-treme 1.6s ease-in-out infinite; }
|
|
117
|
+
.tailor-mv--dormindo .tailor-mv__corpo { animation-duration: 5s; opacity: 0.55; }
|
|
118
|
+
.tailor-mv__olhos { transform-box: fill-box; transform-origin: center; animation: tailor-mv-piscar 4.2s infinite; }
|
|
119
|
+
.tailor-mv__pupila { transform: translate(var(--tailor-mv-x, 0), var(--tailor-mv-y, 0)); transition: transform 0.12s ease-out; }
|
|
120
|
+
.tailor-mv--pensando .tailor-mv__pupila { transform: translate(-4px, -5px); }
|
|
121
|
+
.tailor-mv__verde { animation: tailor-mv-pulso 2.4s ease-in-out infinite; }
|
|
122
|
+
.tailor-mv__balao {
|
|
123
|
+
position: absolute; left: 58%; bottom: 88%; z-index: 1; width: max-content; max-width: 180px;
|
|
124
|
+
background: var(--tailor-black); color: var(--tailor-white); padding: 8px 10px;
|
|
125
|
+
font: 500 12px/1.35 var(--font-tailor, "Raleway", system-ui, sans-serif); text-align: left;
|
|
126
|
+
}
|
|
127
|
+
.tailor-mv__balao::after { content: ""; position: absolute; left: 10px; bottom: -5px; width: 10px; height: 10px; background: inherit; transform: rotate(45deg); }
|
|
128
|
+
.tailor-mv__pontos > span { display: inline-block; width: 6px; height: 6px; margin: 0 2px; background: var(--tailor-green); animation: tailor-mv-ponto 1.4s infinite; }
|
|
129
|
+
.tailor-mv__pontos > span:nth-child(2) { animation-delay: 0.2s; }
|
|
130
|
+
.tailor-mv__pontos > span:nth-child(3) { animation-delay: 0.4s; }
|
|
131
|
+
.tailor-mv__confete rect { animation: tailor-mv-cai 1.8s linear infinite; }
|
|
132
|
+
.tailor-mv__zzz text { animation: tailor-mv-sobe 3s linear infinite; font: 600 18px sans-serif; }
|
|
133
|
+
@keyframes tailor-mv-respira { 0%, 100% { transform: none; } 50% { transform: scale(1.015, 0.985); } }
|
|
134
|
+
@keyframes tailor-mv-espera { 0%, 100% { transform: none; } 50% { transform: translateY(-4px); } }
|
|
135
|
+
@keyframes tailor-mv-inclina { 0%, 100% { transform: rotate(-5deg); } 50% { transform: rotate(-2deg); } }
|
|
136
|
+
@keyframes tailor-mv-pulo { 0%, 100% { transform: scale(1.03, 0.97); } 40% { transform: translateY(-18px) scale(0.98, 1.02); } }
|
|
137
|
+
@keyframes tailor-mv-treme { 0%, 60%, 100% { transform: none; } 66% { transform: translateX(-5px); } 72% { transform: translateX(5px); } 78% { transform: translateX(-3px); } 84% { transform: translateX(3px); } }
|
|
138
|
+
@keyframes tailor-mv-piscar { 0%, 94%, 100% { transform: none; } 97% { transform: scaleY(0.1); } }
|
|
139
|
+
@keyframes tailor-mv-pulso { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }
|
|
140
|
+
@keyframes tailor-mv-ponto { 0%, 80%, 100% { opacity: 0.25; } 40% { opacity: 1; } }
|
|
141
|
+
@keyframes tailor-mv-cai { 0% { transform: translateY(-20px); opacity: 0; } 15% { opacity: 1; } 100% { transform: translateY(70px); opacity: 0; } }
|
|
142
|
+
@keyframes tailor-mv-sobe { 0% { transform: none; opacity: 0; } 20% { opacity: 1; } 100% { transform: translate(14px, -40px); opacity: 0; } }
|
|
143
|
+
|
|
74
144
|
/* Menos movimento: a informação continua, o movimento sai. */
|
|
75
145
|
@media (prefers-reduced-motion: reduce) {
|
|
76
146
|
.tailor-malha__linha { animation: none; stroke-dashoffset: 0; }
|
|
77
147
|
.tailor-loader__reticencias::after { animation: none; content: '...'; }
|
|
78
148
|
.tailor-ponto-pisca { animation: none; }
|
|
149
|
+
.tailor-mascote__corpo, .tailor-mascote__olho, .tailor-mascote__verde { animation: none; }
|
|
150
|
+
.tailor-mv *, .tailor-mv *::after { animation: none !important; transition: none !important; }
|
|
79
151
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { AcessorioDoMascote, ChaveDoAgenteVetor, ExpressaoDoMascote, ObjetoDoMascote, TemaDoMascote } from './MascoteVetor';
|
|
2
|
+
/**
|
|
3
|
+
* Mapas 8x8 dos agentes (QD-0426, estilo Dots). `k` tinta, `e` olho (pisca),
|
|
4
|
+
* `g` o único verde do personagem (pulsa), `.` vazio. Desenho aprovado em
|
|
5
|
+
* https://claude.ai/artifact/HoWCZX7aFiKPEqwhXyzm5k
|
|
6
|
+
*/
|
|
7
|
+
declare const MAPAS: {
|
|
8
|
+
readonly desk: readonly ["...gg...", "...kk...", ".kkkkkk.", ".ke..ek.", "kk....kk", ".k.kk.k.", ".kkkkkk.", "........"];
|
|
9
|
+
readonly pergunte: readonly [".......g", "kkkkkkk.", "k.....k.", "k.e.e.k.", "k.....k.", "kkkkkkk.", ".kk.....", ".k......"];
|
|
10
|
+
readonly pm: readonly ["..gggg..", "kkkkkkkk", "k......k", "k.e..e.k", "k......k", "k.kkkk.k", "k......k", "kkkkkkkk"];
|
|
11
|
+
readonly diretor: readonly [".kkkkkk.", ".k....k.", "kkkkkkkk", ".kk..kk.", ".k....k.", ".k.kk.k.", ".kkkkkk.", "...gg..."];
|
|
12
|
+
};
|
|
13
|
+
/** Agentes com desenho em pixel. Os demais só existem em vetor. */
|
|
14
|
+
export type ChaveDoMascote = keyof typeof MAPAS;
|
|
15
|
+
export type ChaveDoAgente = ChaveDoAgenteVetor;
|
|
16
|
+
export type EstadoDoMascote = 'analisando' | 'esperando' | 'feito' | 'subiu' | 'desligado' | 'parado' | 'cumprimentando' | 'falando' | 'erro';
|
|
17
|
+
/** Texto do estado: a cor nunca fala sozinha. */
|
|
18
|
+
export declare const ROTULO_DO_ESTADO: Record<EstadoDoMascote, string>;
|
|
19
|
+
/** O vetor pinta por variável; `auto` segue o `dark:` do app. */
|
|
20
|
+
declare const SUPERFICIE: {
|
|
21
|
+
auto: string;
|
|
22
|
+
clara: string;
|
|
23
|
+
escura: string;
|
|
24
|
+
};
|
|
25
|
+
export type AgenteMascoteProps = {
|
|
26
|
+
agente: ChaveDoAgente;
|
|
27
|
+
/** Nome exibido (a conta pode renomear). Vai no rótulo acessível. */
|
|
28
|
+
nome: string;
|
|
29
|
+
estado?: EstadoDoMascote;
|
|
30
|
+
/** Quantas coisas esperam a pessoa. Só aparece acima de zero. */
|
|
31
|
+
selo?: number;
|
|
32
|
+
/** Lado de cada quadradinho, em px. Padrão: 4 (32px no total). No vetor, a largura padrão é `celula * 8`. */
|
|
33
|
+
celula?: number;
|
|
34
|
+
/** Mostra o ponto e o texto do estado ao lado. */
|
|
35
|
+
mostrarEstado?: boolean;
|
|
36
|
+
/** `pixel` (padrão) é a grade 8x8; `vetor` é o companheiro animado. Agentes sem mapa 8x8 saem sempre em vetor. */
|
|
37
|
+
estilo?: 'pixel' | 'vetor';
|
|
38
|
+
/** Vetor: largura em px. */
|
|
39
|
+
tamanho?: number;
|
|
40
|
+
/** Vetor: olhar no lugar do padrão do estado. */
|
|
41
|
+
expressao?: ExpressaoDoMascote;
|
|
42
|
+
/** Vetor: acessório + objeto de uma data (`natal`, `pascoa`...). */
|
|
43
|
+
tema?: TemaDoMascote;
|
|
44
|
+
acessorio?: AcessorioDoMascote;
|
|
45
|
+
objeto?: ObjetoDoMascote;
|
|
46
|
+
/** Vetor: frase no balão. Também entra no rótulo acessível. */
|
|
47
|
+
fala?: string;
|
|
48
|
+
/** Vetor: `auto` segue o tema do app; `clara`/`escura` travam (ex.: painel sempre branco). */
|
|
49
|
+
superficie?: keyof typeof SUPERFICIE;
|
|
50
|
+
className?: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* O personagem do agente, com o estado em ponto + texto. Em pixel, anima em
|
|
54
|
+
* degraus; em vetor, olha o cursor e muda de olhar e movimento por estado.
|
|
55
|
+
* Com menos movimento, para.
|
|
56
|
+
*/
|
|
57
|
+
export declare function AgenteMascote({ agente, nome, estado, selo, celula, mostrarEstado, estilo, tamanho, expressao, tema, acessorio, objeto, fala, superficie, className, }: AgenteMascoteProps): import("react").JSX.Element;
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { ChaveDoAgente, EstadoDoMascote } from './AgenteMascote';
|
|
3
|
+
export type AgenteDaEquipe = {
|
|
4
|
+
chave: ChaveDoAgente;
|
|
5
|
+
nome: string;
|
|
6
|
+
estado?: EstadoDoMascote;
|
|
7
|
+
selo?: number;
|
|
8
|
+
/** O que a aba mostra (feed, pergunta...). Sem conteúdo, a aba diz "Em breve". */
|
|
9
|
+
conteudo?: React.ReactNode;
|
|
10
|
+
};
|
|
11
|
+
export type EquipeDockProps = {
|
|
12
|
+
/** O primeiro é o que aparece no botão flutuante. */
|
|
13
|
+
agentes: AgenteDaEquipe[];
|
|
14
|
+
abertoInicial?: boolean;
|
|
15
|
+
/** Título do painel. Padrão: "Equipe". */
|
|
16
|
+
titulo?: string;
|
|
17
|
+
/** `pixel` (padrão) ou `vetor`, para todos os mascotes do dock. */
|
|
18
|
+
estilo?: 'pixel' | 'vetor';
|
|
19
|
+
className?: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* A equipe de agentes num canto da tela: botão com o mascote principal e o selo
|
|
23
|
+
* de pendências somado; abre um painel com uma aba por agente.
|
|
24
|
+
*/
|
|
25
|
+
export declare function EquipeDock({ agentes, abertoInicial, titulo, estilo, className }: EquipeDockProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
declare const AGENTES: {
|
|
3
|
+
desk: {
|
|
4
|
+
topo: number;
|
|
5
|
+
apoio: [number, number];
|
|
6
|
+
olhos: {
|
|
7
|
+
l: number;
|
|
8
|
+
r: number;
|
|
9
|
+
y: number;
|
|
10
|
+
};
|
|
11
|
+
corpo: React.JSX.Element;
|
|
12
|
+
verde: React.JSX.Element;
|
|
13
|
+
};
|
|
14
|
+
pergunte: {
|
|
15
|
+
topo: number;
|
|
16
|
+
apoio: [number, number];
|
|
17
|
+
olhos: {
|
|
18
|
+
l: number;
|
|
19
|
+
r: number;
|
|
20
|
+
y: number;
|
|
21
|
+
};
|
|
22
|
+
corpo: React.JSX.Element;
|
|
23
|
+
verde: React.JSX.Element;
|
|
24
|
+
};
|
|
25
|
+
pm: {
|
|
26
|
+
topo: number;
|
|
27
|
+
apoio: [number, number];
|
|
28
|
+
olhos: {
|
|
29
|
+
l: number;
|
|
30
|
+
r: number;
|
|
31
|
+
y: number;
|
|
32
|
+
};
|
|
33
|
+
corpo: React.JSX.Element;
|
|
34
|
+
verde: React.JSX.Element;
|
|
35
|
+
};
|
|
36
|
+
diretor: {
|
|
37
|
+
topo: number;
|
|
38
|
+
apoio: [number, number];
|
|
39
|
+
olhos: {
|
|
40
|
+
l: number;
|
|
41
|
+
r: number;
|
|
42
|
+
y: number;
|
|
43
|
+
};
|
|
44
|
+
lente: true;
|
|
45
|
+
corpo: React.JSX.Element;
|
|
46
|
+
verde: React.JSX.Element;
|
|
47
|
+
};
|
|
48
|
+
sdr: {
|
|
49
|
+
topo: number;
|
|
50
|
+
apoio: [number, number];
|
|
51
|
+
olhos: {
|
|
52
|
+
l: number;
|
|
53
|
+
r: number;
|
|
54
|
+
y: number;
|
|
55
|
+
};
|
|
56
|
+
corpo: React.JSX.Element;
|
|
57
|
+
verde: React.JSX.Element;
|
|
58
|
+
};
|
|
59
|
+
cred: {
|
|
60
|
+
topo: number;
|
|
61
|
+
apoio: [number, number];
|
|
62
|
+
olhos: {
|
|
63
|
+
l: number;
|
|
64
|
+
r: number;
|
|
65
|
+
y: number;
|
|
66
|
+
};
|
|
67
|
+
corpo: React.JSX.Element;
|
|
68
|
+
verde: React.JSX.Element;
|
|
69
|
+
};
|
|
70
|
+
score: {
|
|
71
|
+
topo: number;
|
|
72
|
+
apoio: [number, number];
|
|
73
|
+
olhos: {
|
|
74
|
+
l: number;
|
|
75
|
+
r: number;
|
|
76
|
+
y: number;
|
|
77
|
+
};
|
|
78
|
+
corpo: React.JSX.Element;
|
|
79
|
+
verde: React.JSX.Element;
|
|
80
|
+
};
|
|
81
|
+
pilot: {
|
|
82
|
+
topo: number;
|
|
83
|
+
apoio: [number, number];
|
|
84
|
+
olhos: {
|
|
85
|
+
l: number;
|
|
86
|
+
r: number;
|
|
87
|
+
y: number;
|
|
88
|
+
};
|
|
89
|
+
corpo: React.JSX.Element;
|
|
90
|
+
verde: React.JSX.Element;
|
|
91
|
+
};
|
|
92
|
+
flow: {
|
|
93
|
+
topo: number;
|
|
94
|
+
apoio: [number, number];
|
|
95
|
+
olhos: {
|
|
96
|
+
l: number;
|
|
97
|
+
r: number;
|
|
98
|
+
y: number;
|
|
99
|
+
};
|
|
100
|
+
corpo: React.JSX.Element;
|
|
101
|
+
verde: React.JSX.Element;
|
|
102
|
+
};
|
|
103
|
+
bi: {
|
|
104
|
+
topo: number;
|
|
105
|
+
apoio: [number, number];
|
|
106
|
+
olhos: {
|
|
107
|
+
l: number;
|
|
108
|
+
r: number;
|
|
109
|
+
y: number;
|
|
110
|
+
};
|
|
111
|
+
corpo: React.JSX.Element;
|
|
112
|
+
verde: React.JSX.Element;
|
|
113
|
+
};
|
|
114
|
+
rh: {
|
|
115
|
+
topo: number;
|
|
116
|
+
apoio: [number, number];
|
|
117
|
+
olhos: {
|
|
118
|
+
l: number;
|
|
119
|
+
r: number;
|
|
120
|
+
y: number;
|
|
121
|
+
};
|
|
122
|
+
corpo: React.JSX.Element;
|
|
123
|
+
verde: React.JSX.Element;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
export type ChaveDoAgenteVetor = keyof typeof AGENTES;
|
|
127
|
+
/** Expressão só nos olhos: formato, pálpebra e pupila, por lado. */
|
|
128
|
+
declare const EXPRESSOES: {
|
|
129
|
+
neutro: ["aberto", "aberto"];
|
|
130
|
+
feliz: ["feliz", "feliz"];
|
|
131
|
+
piscando: ["aberto", "feliz"];
|
|
132
|
+
surpreso: ["grande", "grande"];
|
|
133
|
+
bravo: ["bravo", "bravo"];
|
|
134
|
+
triste: ["triste", "triste"];
|
|
135
|
+
desconfiado: ["meio", "meio"];
|
|
136
|
+
sonolento: ["fechado", "fechado"];
|
|
137
|
+
tonto: ["x", "x"];
|
|
138
|
+
};
|
|
139
|
+
export type ExpressaoDoMascote = keyof typeof EXPRESSOES;
|
|
140
|
+
/** Pose do vetor: o movimento, o olhar padrão e os enfeites de cada estado. */
|
|
141
|
+
export type PoseDoMascote = 'parado' | 'cumprimentando' | 'pensando' | 'falando' | 'esperando' | 'comemorando' | 'erro' | 'dormindo';
|
|
142
|
+
/** Desenhados com o topo da cabeça em (0, 0). Só em tinta: o verde é do agente. */
|
|
143
|
+
declare const ACESSORIOS: {
|
|
144
|
+
gorro: React.JSX.Element;
|
|
145
|
+
orelhas: React.JSX.Element;
|
|
146
|
+
festa: React.JSX.Element;
|
|
147
|
+
bruxa: React.JSX.Element;
|
|
148
|
+
bone: React.JSX.Element;
|
|
149
|
+
capacete: React.JSX.Element;
|
|
150
|
+
coroa: React.JSX.Element;
|
|
151
|
+
};
|
|
152
|
+
export type AcessorioDoMascote = keyof typeof ACESSORIOS;
|
|
153
|
+
/** Desenhados com o canto de apoio em (0, 0), encostados no lado direito do corpo. */
|
|
154
|
+
declare const OBJETOS: {
|
|
155
|
+
presente: React.JSX.Element;
|
|
156
|
+
ovo: React.JSX.Element;
|
|
157
|
+
bolo: React.JSX.Element;
|
|
158
|
+
abobora: React.JSX.Element;
|
|
159
|
+
bola: React.JSX.Element;
|
|
160
|
+
sabre: React.JSX.Element;
|
|
161
|
+
trofeu: React.JSX.Element;
|
|
162
|
+
};
|
|
163
|
+
export type ObjetoDoMascote = keyof typeof OBJETOS;
|
|
164
|
+
/** Tema = acessório + objeto num nome só. */
|
|
165
|
+
declare const TEMAS: {
|
|
166
|
+
natal: ["gorro", "presente"];
|
|
167
|
+
pascoa: ["orelhas", "ovo"];
|
|
168
|
+
aniversario: ["festa", "bolo"];
|
|
169
|
+
halloween: ["bruxa", "abobora"];
|
|
170
|
+
copa: ["bone", "bola"];
|
|
171
|
+
galaxia: ["capacete", "sabre"];
|
|
172
|
+
premiacao: ["coroa", "trofeu"];
|
|
173
|
+
};
|
|
174
|
+
export type TemaDoMascote = keyof typeof TEMAS;
|
|
175
|
+
export type MascoteVetorProps = {
|
|
176
|
+
agente: ChaveDoAgenteVetor;
|
|
177
|
+
pose: PoseDoMascote;
|
|
178
|
+
expressao?: ExpressaoDoMascote;
|
|
179
|
+
tema?: TemaDoMascote;
|
|
180
|
+
acessorio?: AcessorioDoMascote;
|
|
181
|
+
objeto?: ObjetoDoMascote;
|
|
182
|
+
fala?: string;
|
|
183
|
+
/** Abaixo de 48px o balão some (no dock, por exemplo); a fala segue no rótulo acessível. */
|
|
184
|
+
tamanho: number;
|
|
185
|
+
};
|
|
186
|
+
/** Só o desenho; rótulo acessível, selo e estado ficam no `AgenteMascote`. */
|
|
187
|
+
export declare function MascoteVetor({ agente, pose, expressao, tema, acessorio, objeto, fala, tamanho }: MascoteVetorProps): React.JSX.Element;
|
|
188
|
+
export {};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -11,3 +11,8 @@ export type { EntrarOverlayProps } from './components/entrada';
|
|
|
11
11
|
export { logoTailor, logoTailorBranco } from './logos';
|
|
12
12
|
export { TailorSidebar, SidebarGroup, SidebarItem, TailorUserMenu, TailorMobileBar } from './components/TailorSidebar';
|
|
13
13
|
export type { TailorSidebarProps, TailorSidebarItem, TailorSidebarGrupo, TailorSidebarLinkProps, TailorSidebarRenderLink, SuperficieSidebar, BreakpointSidebar, SidebarGroupProps, SidebarItemProps, TailorUserMenuProps, TailorUserMenuAcao, TailorMobileBarProps, } from './components/TailorSidebar';
|
|
14
|
+
export { AgenteMascote, ROTULO_DO_ESTADO } from './components/AgenteMascote';
|
|
15
|
+
export type { AgenteMascoteProps, ChaveDoMascote, ChaveDoAgente, EstadoDoMascote } from './components/AgenteMascote';
|
|
16
|
+
export type { ExpressaoDoMascote, TemaDoMascote, AcessorioDoMascote, ObjetoDoMascote, } from './components/MascoteVetor';
|
|
17
|
+
export { EquipeDock } from './components/EquipeDock';
|
|
18
|
+
export type { EquipeDockProps, AgenteDaEquipe } from './components/EquipeDock';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ffid-br/tailor-ui",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
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",
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
"typecheck": "tsc --noEmit",
|
|
33
33
|
"test": "vitest run",
|
|
34
34
|
"test:watch": "vitest",
|
|
35
|
-
"prepublishOnly": "npm run build"
|
|
35
|
+
"prepublishOnly": "npm run build",
|
|
36
|
+
"exemplos": "vite exemplos --config exemplos/vite.config.ts"
|
|
36
37
|
},
|
|
37
38
|
"peerDependencies": {
|
|
38
39
|
"framer-motion": "^10.0.0 || ^11.0.0 || ^12.0.0",
|
|
@@ -40,6 +41,7 @@
|
|
|
40
41
|
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
44
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
43
45
|
"@testing-library/jest-dom": "^6.9.1",
|
|
44
46
|
"@testing-library/react": "^16.3.2",
|
|
45
47
|
"@types/react": "^18.3.5",
|
|
@@ -49,6 +51,7 @@
|
|
|
49
51
|
"jsdom": "^29.0.1",
|
|
50
52
|
"react": "^18.3.1",
|
|
51
53
|
"react-dom": "^18.3.1",
|
|
54
|
+
"tailwindcss": "^4.3.3",
|
|
52
55
|
"typescript": "^5.5.3",
|
|
53
56
|
"vite": "^5.4.2",
|
|
54
57
|
"vite-plugin-dts": "^4.5.3",
|