@woovi/ui 6.3.5 → 6.3.7
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 +46 -4
- package/dist/index.cjs +3 -3
- package/dist/index.js +3 -3
- package/dist/llms.txt +1474 -0
- package/dist/theme/Themes.d.ts +0 -1
- package/package.json +9 -8
package/dist/llms.txt
ADDED
|
@@ -0,0 +1,1474 @@
|
|
|
1
|
+
# Woovi UI - Component Library
|
|
2
|
+
|
|
3
|
+
> Biblioteca de componentes React da Woovi para construir interfaces de pagamento e dashboards financeiros.
|
|
4
|
+
|
|
5
|
+
Documentacao: https://storybook.woovi.design
|
|
6
|
+
Repositorio: https://github.com/woovi/woovi-ui
|
|
7
|
+
Pacote NPM: @woovi/ui
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Instalacao
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @woovi/ui
|
|
15
|
+
# ou
|
|
16
|
+
yarn add @woovi/ui
|
|
17
|
+
# ou
|
|
18
|
+
pnpm add @woovi/ui
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Dependencias
|
|
22
|
+
|
|
23
|
+
- React 18+
|
|
24
|
+
- Material-UI (MUI) v5+
|
|
25
|
+
- TypeScript
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Avatar
|
|
30
|
+
|
|
31
|
+
Componentes para exibir fotos de perfil e grupos de usuarios.
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { Avatar, AvatarGroup, AvatarGroupArray, AvatarGroupSelectedAll } from '@woovi/ui';
|
|
35
|
+
|
|
36
|
+
// Avatar simples
|
|
37
|
+
<Avatar src="https://example.com/photo.jpg" alt="User" />
|
|
38
|
+
|
|
39
|
+
// Grupo de avatars
|
|
40
|
+
<AvatarGroup max={4}>
|
|
41
|
+
<Avatar src="/user1.jpg" />
|
|
42
|
+
<Avatar src="/user2.jpg" />
|
|
43
|
+
<Avatar src="/user3.jpg" />
|
|
44
|
+
</AvatarGroup>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
- Avatar: https://storybook.woovi.design/?path=/docs/components-avatar-avatar--docs
|
|
48
|
+
- AvatarGroup: https://storybook.woovi.design/?path=/docs/components-avatar-avatargroup--docs
|
|
49
|
+
- AvatarGroupArray: https://storybook.woovi.design/?path=/docs/components-avatar-avatargrouparray--docs
|
|
50
|
+
- AvatarGroupSelectedAll: https://storybook.woovi.design/?path=/docs/components-avatar-avatargroupselectedall--docs
|
|
51
|
+
|
|
52
|
+
## Auth
|
|
53
|
+
|
|
54
|
+
Componentes de autenticacao e login.
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
import { LoginWrapper } from '@woovi/ui';
|
|
58
|
+
|
|
59
|
+
<LoginWrapper>
|
|
60
|
+
<YourLoginForm />
|
|
61
|
+
</LoginWrapper>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
- LoginWrapper: https://storybook.woovi.design/?path=/docs/components-auth-loginwrapper--docs
|
|
65
|
+
|
|
66
|
+
## Banner
|
|
67
|
+
|
|
68
|
+
Componentes para exibir mensagens de alerta, erro e informacoes.
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
import { Banner, BannerError, BannerInfos } from '@woovi/ui';
|
|
72
|
+
|
|
73
|
+
// Banner generico
|
|
74
|
+
<Banner variant="info" message="Informacao importante" />
|
|
75
|
+
|
|
76
|
+
// Banner de erro
|
|
77
|
+
<BannerError message="Ocorreu um erro ao processar" />
|
|
78
|
+
|
|
79
|
+
// Banner informativo com detalhes
|
|
80
|
+
<BannerInfos
|
|
81
|
+
title="Atencao"
|
|
82
|
+
description="Sua sessao expira em 5 minutos"
|
|
83
|
+
/>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
- Banner: https://storybook.woovi.design/?path=/docs/components-banner-banner--docs
|
|
87
|
+
- BannerError: https://storybook.woovi.design/?path=/docs/components-banner-bannererror--docs
|
|
88
|
+
- BannerInfos: https://storybook.woovi.design/?path=/docs/components-banner-bannerinfos--docs
|
|
89
|
+
|
|
90
|
+
## Buttons
|
|
91
|
+
|
|
92
|
+
Botoes para acoes, copiar, pagamentos e menus.
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
import {
|
|
96
|
+
ActionButton,
|
|
97
|
+
ButtonMenu,
|
|
98
|
+
ButtonMenuItem,
|
|
99
|
+
CopyButton,
|
|
100
|
+
DangerButton,
|
|
101
|
+
PayWithPixButton,
|
|
102
|
+
ResponsiveSplitButton,
|
|
103
|
+
SplitButton
|
|
104
|
+
} from '@woovi/ui';
|
|
105
|
+
|
|
106
|
+
// Botao de acao primario
|
|
107
|
+
<ActionButton label="Salvar" onClick={handleSave} />
|
|
108
|
+
<ActionButton label="Salvar" loading={isLoading} />
|
|
109
|
+
<ActionButton label="Criar" icon="add" />
|
|
110
|
+
|
|
111
|
+
// Botao de copiar
|
|
112
|
+
<CopyButton text="Texto para copiar" />
|
|
113
|
+
|
|
114
|
+
// Botao de perigo/exclusao
|
|
115
|
+
<DangerButton label="Excluir" onClick={handleDelete} />
|
|
116
|
+
|
|
117
|
+
// Menu de botoes
|
|
118
|
+
<ButtonMenu label="Opcoes">
|
|
119
|
+
<ButtonMenuItem onClick={handleEdit}>Editar</ButtonMenuItem>
|
|
120
|
+
<ButtonMenuItem onClick={handleDelete}>Excluir</ButtonMenuItem>
|
|
121
|
+
</ButtonMenu>
|
|
122
|
+
|
|
123
|
+
// Botao de pagamento Pix
|
|
124
|
+
<PayWithPixButton onClick={handlePixPayment} />
|
|
125
|
+
|
|
126
|
+
// Split button com opcoes
|
|
127
|
+
<SplitButton
|
|
128
|
+
options={[
|
|
129
|
+
{ label: 'Acao 1', onClick: () => {} },
|
|
130
|
+
{ label: 'Acao 2', onClick: () => {} },
|
|
131
|
+
]}
|
|
132
|
+
/>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
- ActionButton: https://storybook.woovi.design/?path=/docs/components-buttons-actionbutton--docs
|
|
136
|
+
- ButtonMenu: https://storybook.woovi.design/?path=/docs/components-buttons-buttonmenu--docs
|
|
137
|
+
- CopyButton: https://storybook.woovi.design/?path=/docs/components-buttons-copybutton--docs
|
|
138
|
+
- DangerButton: https://storybook.woovi.design/?path=/docs/components-buttons-dangerbutton--docs
|
|
139
|
+
- PayWithPixButton: https://storybook.woovi.design/?path=/docs/components-buttons-paywithpixbutton--docs
|
|
140
|
+
- ResponsiveSplitButton: https://storybook.woovi.design/?path=/docs/components-buttons-responsivesplitbutton--docs
|
|
141
|
+
- SplitButton: https://storybook.woovi.design/?path=/docs/components-buttons-splitbutton--docs
|
|
142
|
+
|
|
143
|
+
### ClickPix Buttons
|
|
144
|
+
|
|
145
|
+
Botoes especificos para pagamentos via Pix com um clique.
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
import {
|
|
149
|
+
ClickPixButton,
|
|
150
|
+
DonateClickPixButton,
|
|
151
|
+
DonateWithClickButton
|
|
152
|
+
} from '@woovi/ui';
|
|
153
|
+
|
|
154
|
+
// Botao ClickPix padrao
|
|
155
|
+
<ClickPixButton onClick={handleClickPix} />
|
|
156
|
+
|
|
157
|
+
// Botao de doacao ClickPix
|
|
158
|
+
<DonateClickPixButton amount={1000} correlationID="donation-123" />
|
|
159
|
+
|
|
160
|
+
// Botao de doacao com click
|
|
161
|
+
<DonateWithClickButton />
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
- ClickPixButton: https://storybook.woovi.design/?path=/docs/components-buttons-clickpix-clickpixbutton--docs
|
|
165
|
+
- DonateClickPixButton: https://storybook.woovi.design/?path=/docs/components-buttons-clickpix-donateclickpixbutton--docs
|
|
166
|
+
- DonateWithClickButton: https://storybook.woovi.design/?path=/docs/components-buttons-clickpix-donatewithclickbutton--docs
|
|
167
|
+
|
|
168
|
+
## Card
|
|
169
|
+
|
|
170
|
+
Containers para exibir conteudo em formato de cartao.
|
|
171
|
+
|
|
172
|
+
```tsx
|
|
173
|
+
import {
|
|
174
|
+
Card,
|
|
175
|
+
CardActions,
|
|
176
|
+
CardBasicContext,
|
|
177
|
+
CardContent,
|
|
178
|
+
CardCopy,
|
|
179
|
+
CardForm,
|
|
180
|
+
CardList,
|
|
181
|
+
CardSelectable,
|
|
182
|
+
CardSkeleton,
|
|
183
|
+
CardStep,
|
|
184
|
+
CardWithActions,
|
|
185
|
+
CardWithIcon,
|
|
186
|
+
CardWithLink,
|
|
187
|
+
CardWithLinkSkeleton
|
|
188
|
+
} from '@woovi/ui';
|
|
189
|
+
|
|
190
|
+
// Card basico
|
|
191
|
+
<Card>
|
|
192
|
+
<CardContent>
|
|
193
|
+
<h2>Titulo do Card</h2>
|
|
194
|
+
<p>Conteudo do card</p>
|
|
195
|
+
</CardContent>
|
|
196
|
+
<CardActions>
|
|
197
|
+
<ActionButton label="Acao" />
|
|
198
|
+
</CardActions>
|
|
199
|
+
</Card>
|
|
200
|
+
|
|
201
|
+
// Card com icone
|
|
202
|
+
<CardWithIcon
|
|
203
|
+
icon="payment"
|
|
204
|
+
title="Pagamentos"
|
|
205
|
+
description="Gerencie seus pagamentos"
|
|
206
|
+
/>
|
|
207
|
+
|
|
208
|
+
// Card com link
|
|
209
|
+
<CardWithLink
|
|
210
|
+
title="Ver detalhes"
|
|
211
|
+
href="/details"
|
|
212
|
+
/>
|
|
213
|
+
|
|
214
|
+
// Card selecionavel
|
|
215
|
+
<CardSelectable
|
|
216
|
+
selected={isSelected}
|
|
217
|
+
onClick={() => setSelected(!isSelected)}
|
|
218
|
+
>
|
|
219
|
+
Conteudo selecionavel
|
|
220
|
+
</CardSelectable>
|
|
221
|
+
|
|
222
|
+
// Card de copia (para chaves Pix, etc)
|
|
223
|
+
<CardCopy value="chave-pix@email.com" />
|
|
224
|
+
|
|
225
|
+
// Card skeleton para loading
|
|
226
|
+
<CardSkeleton />
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
- Card: https://storybook.woovi.design/?path=/docs/components-card-card--docs
|
|
230
|
+
- CardActions: https://storybook.woovi.design/?path=/docs/components-card-cardactions--docs
|
|
231
|
+
- CardBasicContext: https://storybook.woovi.design/?path=/docs/components-card-cardbasiccontext--docs
|
|
232
|
+
- CardContent: https://storybook.woovi.design/?path=/docs/components-card-cardcontent--docs
|
|
233
|
+
- CardCopy: https://storybook.woovi.design/?path=/docs/components-card-cardcopy--docs
|
|
234
|
+
- CardForm: https://storybook.woovi.design/?path=/docs/components-card-cardform--docs
|
|
235
|
+
- CardList: https://storybook.woovi.design/?path=/docs/components-card-cardlist--docs
|
|
236
|
+
- CardSelectable: https://storybook.woovi.design/?path=/docs/components-card-cardselectable--docs
|
|
237
|
+
- CardSkeleton: https://storybook.woovi.design/?path=/docs/components-card-cardskeleton--docs
|
|
238
|
+
- CardStep: https://storybook.woovi.design/?path=/docs/components-card-cardstep--docs
|
|
239
|
+
- CardWithActions: https://storybook.woovi.design/?path=/docs/components-card-cardwithactions--docs
|
|
240
|
+
- CardWithIcon: https://storybook.woovi.design/?path=/docs/components-card-cardwithicon--docs
|
|
241
|
+
- CardWithLink: https://storybook.woovi.design/?path=/docs/components-card-cardwithlink--docs
|
|
242
|
+
- CardWithLinkSkeleton: https://storybook.woovi.design/?path=/docs/components-card-cardwithlinkskeleton--docs
|
|
243
|
+
|
|
244
|
+
## CardAnalytics
|
|
245
|
+
|
|
246
|
+
Componentes para exibir metricas e dados analiticos.
|
|
247
|
+
|
|
248
|
+
```tsx
|
|
249
|
+
import { CardAnalytics, CardAnalyticsSmall } from '@woovi/ui';
|
|
250
|
+
|
|
251
|
+
// Card de metricas
|
|
252
|
+
<CardAnalytics
|
|
253
|
+
title="Total de Vendas"
|
|
254
|
+
value="R$ 15.000,00"
|
|
255
|
+
change="+12%"
|
|
256
|
+
trend="up"
|
|
257
|
+
/>
|
|
258
|
+
|
|
259
|
+
// Versao compacta
|
|
260
|
+
<CardAnalyticsSmall
|
|
261
|
+
label="Conversao"
|
|
262
|
+
value="3.2%"
|
|
263
|
+
/>
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
- CardAnalytics: https://storybook.woovi.design/?path=/docs/components-cardanalytics-cardanalytics--docs
|
|
267
|
+
- CardAnalyticsSkeleton: https://storybook.woovi.design/?path=/docs/components-cardanalytics-cardanalyticsskeleton--docs
|
|
268
|
+
- CardAnalyticsSmall: https://storybook.woovi.design/?path=/docs/components-cardanalytics-cardanalyticssmall--docs
|
|
269
|
+
|
|
270
|
+
## CardGrid
|
|
271
|
+
|
|
272
|
+
Sistema de grid para organizar cards em layout responsivo.
|
|
273
|
+
|
|
274
|
+
```tsx
|
|
275
|
+
import { CardGrid, CardField, CardFieldCentered, Grid } from '@woovi/ui';
|
|
276
|
+
|
|
277
|
+
// Grid de cards
|
|
278
|
+
<CardGrid>
|
|
279
|
+
<CardField label="Nome" value="Joao Silva" />
|
|
280
|
+
<CardField label="Email" value="joao@email.com" />
|
|
281
|
+
<CardFieldCentered label="Status" value="Ativo" />
|
|
282
|
+
</CardGrid>
|
|
283
|
+
|
|
284
|
+
// Grid generico
|
|
285
|
+
<Grid columns={3} gap={2}>
|
|
286
|
+
<Card>Item 1</Card>
|
|
287
|
+
<Card>Item 2</Card>
|
|
288
|
+
<Card>Item 3</Card>
|
|
289
|
+
</Grid>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
- CardField: https://storybook.woovi.design/?path=/docs/components-cardgrid-cardfield--docs
|
|
293
|
+
- CardFieldCentered: https://storybook.woovi.design/?path=/docs/components-cardgrid-cardfieldcentered--docs
|
|
294
|
+
- CardGrid: https://storybook.woovi.design/?path=/docs/components-cardgrid-cardgrid--docs
|
|
295
|
+
- Grid: https://storybook.woovi.design/?path=/docs/components-cardgrid-grid--docs
|
|
296
|
+
|
|
297
|
+
## CardWithImage
|
|
298
|
+
|
|
299
|
+
Card com suporte a imagens.
|
|
300
|
+
|
|
301
|
+
```tsx
|
|
302
|
+
import { CardWithImage } from '@woovi/ui';
|
|
303
|
+
|
|
304
|
+
<CardWithImage
|
|
305
|
+
image="/product.jpg"
|
|
306
|
+
title="Produto"
|
|
307
|
+
description="Descricao do produto"
|
|
308
|
+
/>
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
- CardWithImage: https://storybook.woovi.design/?path=/docs/components-cardwithimage-cardwithimage--docs
|
|
312
|
+
|
|
313
|
+
## ClickPix
|
|
314
|
+
|
|
315
|
+
Componentes da marca ClickPix para pagamentos instantaneos.
|
|
316
|
+
|
|
317
|
+
```tsx
|
|
318
|
+
import { ClickPixButton, ClickPixLogo } from '@woovi/ui';
|
|
319
|
+
|
|
320
|
+
// Logo ClickPix
|
|
321
|
+
<ClickPixLogo width={120} />
|
|
322
|
+
|
|
323
|
+
// Botao ClickPix
|
|
324
|
+
<ClickPixButton variant="primary" onClick={handlePay} />
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
- ClickPixButton: https://storybook.woovi.design/?path=/docs/components-clickpix-clickpixbutton--docs
|
|
328
|
+
- ClickPixLogo: https://storybook.woovi.design/?path=/docs/components-clickpix-clickpixlogo--docs
|
|
329
|
+
|
|
330
|
+
## Code
|
|
331
|
+
|
|
332
|
+
Componente para exibir blocos de codigo.
|
|
333
|
+
|
|
334
|
+
```tsx
|
|
335
|
+
import { Code } from '@woovi/ui';
|
|
336
|
+
|
|
337
|
+
<Code language="javascript">
|
|
338
|
+
{`const pix = await woovi.createCharge({ value: 1000 });`}
|
|
339
|
+
</Code>
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
- Code: https://storybook.woovi.design/?path=/docs/components-code-code--docs
|
|
343
|
+
|
|
344
|
+
## Collapsible
|
|
345
|
+
|
|
346
|
+
Componentes expansiveis para organizar conteudo em secoes.
|
|
347
|
+
|
|
348
|
+
```tsx
|
|
349
|
+
import {
|
|
350
|
+
Collapse,
|
|
351
|
+
Collapsible,
|
|
352
|
+
CollapsibleActions,
|
|
353
|
+
CollapsibleStep,
|
|
354
|
+
CollapsibleTree,
|
|
355
|
+
LeafCollapsible
|
|
356
|
+
} from '@woovi/ui';
|
|
357
|
+
|
|
358
|
+
// Collapsible simples
|
|
359
|
+
<Collapsible title="Ver mais detalhes">
|
|
360
|
+
<p>Conteudo expandido</p>
|
|
361
|
+
</Collapsible>
|
|
362
|
+
|
|
363
|
+
// Collapsible com acoes
|
|
364
|
+
<CollapsibleActions
|
|
365
|
+
title="Configuracoes"
|
|
366
|
+
actions={<ActionButton label="Editar" />}
|
|
367
|
+
>
|
|
368
|
+
<p>Conteudo com acoes</p>
|
|
369
|
+
</CollapsibleActions>
|
|
370
|
+
|
|
371
|
+
// Collapsible em etapas
|
|
372
|
+
<CollapsibleStep step={1} title="Primeira etapa">
|
|
373
|
+
<p>Conteudo da etapa</p>
|
|
374
|
+
</CollapsibleStep>
|
|
375
|
+
|
|
376
|
+
// Arvore collapsible
|
|
377
|
+
<CollapsibleTree>
|
|
378
|
+
<LeafCollapsible title="Item pai">
|
|
379
|
+
<LeafCollapsible title="Item filho" />
|
|
380
|
+
</LeafCollapsible>
|
|
381
|
+
</CollapsibleTree>
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
- Collapse: https://storybook.woovi.design/?path=/docs/components-collapsible-collapse--docs
|
|
385
|
+
- Collapsible: https://storybook.woovi.design/?path=/docs/components-collapsible-collapsible--docs
|
|
386
|
+
- CollapsibleActions: https://storybook.woovi.design/?path=/docs/components-collapsible-collapsibleactions--docs
|
|
387
|
+
- CollapsibleInfinityActions: https://storybook.woovi.design/?path=/docs/components-collapsible-collapsibleinfinityactions--docs
|
|
388
|
+
- CollapsibleStep: https://storybook.woovi.design/?path=/docs/components-collapsible-collapsiblestep--docs
|
|
389
|
+
- CollapsibleStepHeader: https://storybook.woovi.design/?path=/docs/components-collapsible-collapsiblestepheader--docs
|
|
390
|
+
- CollapsibleTree: https://storybook.woovi.design/?path=/docs/components-collapsible-collapsibletree--docs
|
|
391
|
+
- LeafCollapsible: https://storybook.woovi.design/?path=/docs/components-collapsible-leafcollapsible--docs
|
|
392
|
+
- TransparencyCollapsibleWrapper: https://storybook.woovi.design/?path=/docs/components-collapsible-transparencycollapsiblewrapper--docs
|
|
393
|
+
|
|
394
|
+
## Company
|
|
395
|
+
|
|
396
|
+
Componentes relacionados a empresa/marca.
|
|
397
|
+
|
|
398
|
+
```tsx
|
|
399
|
+
import { CompanyLogo } from '@woovi/ui';
|
|
400
|
+
|
|
401
|
+
<CompanyLogo name="Empresa XYZ" logo="/logo.png" />
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
- CompanyLogo: https://storybook.woovi.design/?path=/docs/components-company-companylogo--docs
|
|
405
|
+
|
|
406
|
+
## Content
|
|
407
|
+
|
|
408
|
+
Componentes para estruturar conteudo e texto.
|
|
409
|
+
|
|
410
|
+
```tsx
|
|
411
|
+
import { Content, ActionMargin, ActionMarginText, IntroText } from '@woovi/ui';
|
|
412
|
+
|
|
413
|
+
// Container de conteudo
|
|
414
|
+
<Content>
|
|
415
|
+
<IntroText>Bem-vindo ao painel</IntroText>
|
|
416
|
+
<p>Seu conteudo aqui</p>
|
|
417
|
+
</Content>
|
|
418
|
+
|
|
419
|
+
// Margem para acoes
|
|
420
|
+
<ActionMargin>
|
|
421
|
+
<ActionButton label="Salvar" />
|
|
422
|
+
</ActionMargin>
|
|
423
|
+
|
|
424
|
+
// Texto com margem de acao
|
|
425
|
+
<ActionMarginText>
|
|
426
|
+
Clique no botao abaixo para continuar
|
|
427
|
+
</ActionMarginText>
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
- ActionMargin: https://storybook.woovi.design/?path=/docs/components-content-actionmargin--docs
|
|
431
|
+
- ActionMarginText: https://storybook.woovi.design/?path=/docs/components-content-actionmargintext--docs
|
|
432
|
+
- Content: https://storybook.woovi.design/?path=/docs/components-content-content--docs
|
|
433
|
+
- IntroText: https://storybook.woovi.design/?path=/docs/components-content-introtext--docs
|
|
434
|
+
|
|
435
|
+
## Countdown
|
|
436
|
+
|
|
437
|
+
Componentes de contagem regressiva para expiracoes de pagamento.
|
|
438
|
+
|
|
439
|
+
```tsx
|
|
440
|
+
import { Countdown } from '@woovi/ui';
|
|
441
|
+
|
|
442
|
+
// Contagem regressiva para expiracao de cobranca Pix
|
|
443
|
+
<Countdown
|
|
444
|
+
expiresAt={new Date('2024-12-31T23:59:59')}
|
|
445
|
+
onExpire={() => console.log('Expirado!')}
|
|
446
|
+
/>
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
- Countdown: https://storybook.woovi.design/?path=/docs/components-countdown-countdown--docs
|
|
450
|
+
- ShowCounter: https://storybook.woovi.design/?path=/docs/components-countdown-showcounter--docs
|
|
451
|
+
|
|
452
|
+
## DataGrid
|
|
453
|
+
|
|
454
|
+
Tabelas de dados avancadas com suporte a paginacao, ordenacao e filtros.
|
|
455
|
+
|
|
456
|
+
```tsx
|
|
457
|
+
import { DataGrid, DataGridLoading, DataGridDetailContainer } from '@woovi/ui';
|
|
458
|
+
|
|
459
|
+
// DataGrid basico
|
|
460
|
+
<DataGrid
|
|
461
|
+
columns={[
|
|
462
|
+
{ field: 'id', headerName: 'ID', width: 90 },
|
|
463
|
+
{ field: 'name', headerName: 'Nome', width: 150 },
|
|
464
|
+
{ field: 'status', headerName: 'Status', width: 110 },
|
|
465
|
+
]}
|
|
466
|
+
rows={data}
|
|
467
|
+
loading={isLoading}
|
|
468
|
+
onRowClick={(row) => console.log(row)}
|
|
469
|
+
/>
|
|
470
|
+
|
|
471
|
+
// Estado de loading
|
|
472
|
+
<DataGridLoading columns={3} rows={5} />
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
- DataGrid: https://storybook.woovi.design/?path=/docs/components-datagrid-datagrid--docs
|
|
476
|
+
- DataGridDetailContainer: https://storybook.woovi.design/?path=/docs/components-datagrid-datagriddetailcontainer--docs
|
|
477
|
+
- DataGridLoading: https://storybook.woovi.design/?path=/docs/components-datagrid-datagridloading--docs
|
|
478
|
+
|
|
479
|
+
## Dialog
|
|
480
|
+
|
|
481
|
+
Sistema de modais e dialogos.
|
|
482
|
+
|
|
483
|
+
```tsx
|
|
484
|
+
import { DialogProvider, useDialog } from '@woovi/ui';
|
|
485
|
+
|
|
486
|
+
// Provider no root da aplicacao
|
|
487
|
+
<DialogProvider>
|
|
488
|
+
<App />
|
|
489
|
+
</DialogProvider>
|
|
490
|
+
|
|
491
|
+
// Hook para abrir dialogos
|
|
492
|
+
const { openDialog, closeDialog } = useDialog();
|
|
493
|
+
|
|
494
|
+
openDialog({
|
|
495
|
+
title: 'Confirmar acao',
|
|
496
|
+
content: 'Deseja continuar?',
|
|
497
|
+
actions: [
|
|
498
|
+
{ label: 'Cancelar', onClick: closeDialog },
|
|
499
|
+
{ label: 'Confirmar', onClick: handleConfirm },
|
|
500
|
+
],
|
|
501
|
+
});
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
- DialogProvider: https://storybook.woovi.design/?path=/docs/components-dialog-dialogprovider--docs
|
|
505
|
+
|
|
506
|
+
## Drawer
|
|
507
|
+
|
|
508
|
+
Paineis laterais deslizantes.
|
|
509
|
+
|
|
510
|
+
```tsx
|
|
511
|
+
import { DrawerCard, DrawerResponsiveWrapper, SwipeableDrawer } from '@woovi/ui';
|
|
512
|
+
|
|
513
|
+
// Drawer com card
|
|
514
|
+
<DrawerCard open={isOpen} onClose={handleClose}>
|
|
515
|
+
<CardContent>Conteudo do drawer</CardContent>
|
|
516
|
+
</DrawerCard>
|
|
517
|
+
|
|
518
|
+
// Drawer responsivo (lateral em desktop, bottom sheet em mobile)
|
|
519
|
+
<DrawerResponsiveWrapper open={isOpen} onClose={handleClose}>
|
|
520
|
+
<p>Conteudo adaptativo</p>
|
|
521
|
+
</DrawerResponsiveWrapper>
|
|
522
|
+
|
|
523
|
+
// Drawer com suporte a swipe
|
|
524
|
+
<SwipeableDrawer open={isOpen} onClose={handleClose}>
|
|
525
|
+
<p>Arraste para fechar</p>
|
|
526
|
+
</SwipeableDrawer>
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
- DrawerCard: https://storybook.woovi.design/?path=/docs/components-drawer-drawercard--docs
|
|
530
|
+
- DrawerResponsiveWrapper: https://storybook.woovi.design/?path=/docs/components-drawer-drawerresponsivewrapper--docs
|
|
531
|
+
- SwipeableDrawer: https://storybook.woovi.design/?path=/docs/components-drawer-swipeabledrawer--docs
|
|
532
|
+
|
|
533
|
+
## Error
|
|
534
|
+
|
|
535
|
+
Componentes para tratamento e exibicao de erros.
|
|
536
|
+
|
|
537
|
+
```tsx
|
|
538
|
+
import { ErrorBoundaryWithRetry, ErrorView } from '@woovi/ui';
|
|
539
|
+
|
|
540
|
+
// Error boundary com retry
|
|
541
|
+
<ErrorBoundaryWithRetry>
|
|
542
|
+
<ComponentQuePodeFalhar />
|
|
543
|
+
</ErrorBoundaryWithRetry>
|
|
544
|
+
|
|
545
|
+
// Visualizacao de erro
|
|
546
|
+
<ErrorView
|
|
547
|
+
title="Algo deu errado"
|
|
548
|
+
message="Nao foi possivel carregar os dados"
|
|
549
|
+
onRetry={handleRetry}
|
|
550
|
+
/>
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
- ErrorBoundaryWithRetry: https://storybook.woovi.design/?path=/docs/components-error-errorboundarywithretry--docs
|
|
554
|
+
- ErrorView: https://storybook.woovi.design/?path=/docs/components-error-errorview--docs
|
|
555
|
+
|
|
556
|
+
## File
|
|
557
|
+
|
|
558
|
+
Componentes para upload e manipulacao de arquivos.
|
|
559
|
+
|
|
560
|
+
```tsx
|
|
561
|
+
import { FileDrop, Icon } from '@woovi/ui';
|
|
562
|
+
|
|
563
|
+
// Area de drop de arquivos
|
|
564
|
+
<FileDrop
|
|
565
|
+
onDrop={(files) => handleFiles(files)}
|
|
566
|
+
accept={{ 'image/*': ['.png', '.jpg'] }}
|
|
567
|
+
/>
|
|
568
|
+
|
|
569
|
+
// Icone Material
|
|
570
|
+
<Icon name="upload" />
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
- FileDrop: https://storybook.woovi.design/?path=/docs/components-file-filedrop--docs
|
|
574
|
+
- IconButton: https://storybook.woovi.design/?path=/docs/components-file-iconbutton--docs
|
|
575
|
+
- MaterialIcon: https://storybook.woovi.design/?path=/docs/components-file-materialicon--docs
|
|
576
|
+
|
|
577
|
+
## Filter
|
|
578
|
+
|
|
579
|
+
Sistema de filtros para busca e filtragem de dados.
|
|
580
|
+
|
|
581
|
+
```tsx
|
|
582
|
+
import { Filter, FilterRelayFormik } from '@woovi/ui';
|
|
583
|
+
|
|
584
|
+
// Filtro basico
|
|
585
|
+
<Filter
|
|
586
|
+
filters={[
|
|
587
|
+
{ field: 'status', label: 'Status', options: ['Ativo', 'Inativo'] },
|
|
588
|
+
{ field: 'date', label: 'Data', type: 'date' },
|
|
589
|
+
]}
|
|
590
|
+
onFilter={(values) => handleFilter(values)}
|
|
591
|
+
/>
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
- Filter: https://storybook.woovi.design/?path=/docs/components-filter-filter--docs
|
|
595
|
+
|
|
596
|
+
## Form
|
|
597
|
+
|
|
598
|
+
Componentes de formulario.
|
|
599
|
+
|
|
600
|
+
```tsx
|
|
601
|
+
import { FieldRow } from '@woovi/ui';
|
|
602
|
+
|
|
603
|
+
// Linha de campo de formulario
|
|
604
|
+
<FieldRow label="Email" required>
|
|
605
|
+
<input type="email" />
|
|
606
|
+
</FieldRow>
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
- FieldRow: https://storybook.woovi.design/?path=/docs/components-form-fieldrow--docs
|
|
610
|
+
|
|
611
|
+
## Heading
|
|
612
|
+
|
|
613
|
+
Cabecalhos e titulos de secao.
|
|
614
|
+
|
|
615
|
+
```tsx
|
|
616
|
+
import { SectionHeading } from '@woovi/ui';
|
|
617
|
+
|
|
618
|
+
<SectionHeading
|
|
619
|
+
title="Transacoes"
|
|
620
|
+
subtitle="Ultimas 30 dias"
|
|
621
|
+
action={<ActionButton label="Ver todas" />}
|
|
622
|
+
/>
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
- SectionHeading: https://storybook.woovi.design/?path=/docs/components-heading-sectionheading--docs
|
|
626
|
+
|
|
627
|
+
## Helpers
|
|
628
|
+
|
|
629
|
+
Utilitarios de layout e espacamento.
|
|
630
|
+
|
|
631
|
+
```tsx
|
|
632
|
+
import { Divider, HorizontalStack, HoverPopper } from '@woovi/ui';
|
|
633
|
+
|
|
634
|
+
// Divisor
|
|
635
|
+
<Divider />
|
|
636
|
+
|
|
637
|
+
// Stack horizontal
|
|
638
|
+
<HorizontalStack spacing={2}>
|
|
639
|
+
<ActionButton label="Botao 1" />
|
|
640
|
+
<ActionButton label="Botao 2" />
|
|
641
|
+
</HorizontalStack>
|
|
642
|
+
|
|
643
|
+
// Popper ao passar o mouse
|
|
644
|
+
<HoverPopper content="Tooltip detalhado">
|
|
645
|
+
<span>Passe o mouse</span>
|
|
646
|
+
</HoverPopper>
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
- Divider: https://storybook.woovi.design/?path=/docs/components-helpers-divider--docs
|
|
650
|
+
- HorizontalStack: https://storybook.woovi.design/?path=/docs/components-helpers-horizontalstack--docs
|
|
651
|
+
- HoverPopper: https://storybook.woovi.design/?path=/docs/components-helpers-hoverpopper--docs
|
|
652
|
+
|
|
653
|
+
## Import
|
|
654
|
+
|
|
655
|
+
Componentes para importacao de arquivos (CSV, XLSX).
|
|
656
|
+
|
|
657
|
+
```tsx
|
|
658
|
+
import { Dropzone, DropzoneFile } from '@woovi/ui';
|
|
659
|
+
|
|
660
|
+
// Dropzone para upload
|
|
661
|
+
<Dropzone
|
|
662
|
+
onDrop={(files) => handleImport(files)}
|
|
663
|
+
accept={{ 'text/csv': ['.csv'], 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx'] }}
|
|
664
|
+
>
|
|
665
|
+
Arraste arquivos CSV ou XLSX aqui
|
|
666
|
+
</Dropzone>
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
- Dropzone: https://storybook.woovi.design/?path=/docs/components-import-dropzone--docs
|
|
670
|
+
- DropzoneFile: https://storybook.woovi.design/?path=/docs/components-import-dropzonefile--docs
|
|
671
|
+
|
|
672
|
+
## Layout
|
|
673
|
+
|
|
674
|
+
Componentes para estrutura de pagina.
|
|
675
|
+
|
|
676
|
+
```tsx
|
|
677
|
+
import { LayoutRoot, LayoutWrapper, LayoutWrapperFluid } from '@woovi/ui';
|
|
678
|
+
|
|
679
|
+
// Layout raiz da aplicacao
|
|
680
|
+
<LayoutRoot>
|
|
681
|
+
<LayoutWrapper>
|
|
682
|
+
<Content />
|
|
683
|
+
</LayoutWrapper>
|
|
684
|
+
</LayoutRoot>
|
|
685
|
+
|
|
686
|
+
// Layout fluido (sem max-width)
|
|
687
|
+
<LayoutWrapperFluid>
|
|
688
|
+
<Content />
|
|
689
|
+
</LayoutWrapperFluid>
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
- LayoutRoot: https://storybook.woovi.design/?path=/docs/components-layoutroot--docs
|
|
693
|
+
- LayoutWrapper: https://storybook.woovi.design/?path=/docs/components-layoutwrapper-layoutwrapper--docs
|
|
694
|
+
- LayoutWrapperFluid: https://storybook.woovi.design/?path=/docs/components-layoutwrapper-layoutwrapperfluid--docs
|
|
695
|
+
|
|
696
|
+
## Link
|
|
697
|
+
|
|
698
|
+
Componentes de navegacao e links.
|
|
699
|
+
|
|
700
|
+
```tsx
|
|
701
|
+
import { Link, WooviLink } from '@woovi/ui';
|
|
702
|
+
|
|
703
|
+
// Link interno
|
|
704
|
+
<Link href="/dashboard">Ir para Dashboard</Link>
|
|
705
|
+
|
|
706
|
+
// Link externo
|
|
707
|
+
<Link href="https://woovi.com" external>Woovi</Link>
|
|
708
|
+
|
|
709
|
+
// Link estilizado Woovi
|
|
710
|
+
<WooviLink href="/pricing">Ver precos</WooviLink>
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
- Link: https://storybook.woovi.design/?path=/docs/components-link--docs
|
|
714
|
+
- WooviLink: https://storybook.woovi.design/?path=/docs/components-link-woovilink--docs
|
|
715
|
+
|
|
716
|
+
## Logo
|
|
717
|
+
|
|
718
|
+
Logotipos da Woovi e OpenPix.
|
|
719
|
+
|
|
720
|
+
```tsx
|
|
721
|
+
import { Logo, WooviLogo, OpenPixLogoColor } from '@woovi/ui';
|
|
722
|
+
|
|
723
|
+
// Logo generico
|
|
724
|
+
<Logo src="/logo.png" alt="Empresa" />
|
|
725
|
+
|
|
726
|
+
// Logo Woovi
|
|
727
|
+
<WooviLogo width={150} />
|
|
728
|
+
|
|
729
|
+
// Logo OpenPix colorido
|
|
730
|
+
<OpenPixLogoColor width={120} />
|
|
731
|
+
```
|
|
732
|
+
|
|
733
|
+
- Logo: https://storybook.woovi.design/?path=/docs/components-logo--docs
|
|
734
|
+
- OpenPixLogoColor: https://storybook.woovi.design/?path=/docs/components-logo-openpixlogocolor--docs
|
|
735
|
+
- WooviLogo: https://storybook.woovi.design/?path=/docs/components-logo-woovilogo--docs
|
|
736
|
+
|
|
737
|
+
## MUI
|
|
738
|
+
|
|
739
|
+
Componentes baseados no Material-UI customizados.
|
|
740
|
+
|
|
741
|
+
```tsx
|
|
742
|
+
import { BoxFlex, Typography } from '@woovi/ui';
|
|
743
|
+
|
|
744
|
+
// Box flexbox
|
|
745
|
+
<BoxFlex gap={2} alignItems="center">
|
|
746
|
+
<Typography variant="h6">Titulo</Typography>
|
|
747
|
+
<Typography variant="body1">Texto</Typography>
|
|
748
|
+
</BoxFlex>
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
- BoxFlex: https://storybook.woovi.design/?path=/docs/components-mui-boxflex--docs
|
|
752
|
+
- Typography: https://storybook.woovi.design/?path=/docs/components-mui-typography--docs
|
|
753
|
+
|
|
754
|
+
## MultiFactor
|
|
755
|
+
|
|
756
|
+
Componentes de autenticacao multi-fator para pagamentos.
|
|
757
|
+
|
|
758
|
+
```tsx
|
|
759
|
+
import {
|
|
760
|
+
MultiFactorPixPaymentView,
|
|
761
|
+
MultiFactorPixPaymentMatch,
|
|
762
|
+
MultiFactorPixPaymentMismatch,
|
|
763
|
+
MultiFactorConfirmModal
|
|
764
|
+
} from '@woovi/ui';
|
|
765
|
+
|
|
766
|
+
// View de pagamento multi-fator
|
|
767
|
+
<MultiFactorPixPaymentView
|
|
768
|
+
amount={5000}
|
|
769
|
+
onConfirm={handleConfirm}
|
|
770
|
+
/>
|
|
771
|
+
|
|
772
|
+
// Confirmacao de match
|
|
773
|
+
<MultiFactorPixPaymentMatch />
|
|
774
|
+
|
|
775
|
+
// Modal de confirmacao MFA
|
|
776
|
+
<MultiFactorConfirmModal
|
|
777
|
+
open={isOpen}
|
|
778
|
+
onConfirm={handleMFA}
|
|
779
|
+
onClose={handleClose}
|
|
780
|
+
/>
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
- MultiFactorPixPaymentMatch: https://storybook.woovi.design/?path=/docs/components-multifactor-multifactorpixpaymentmatch--docs
|
|
784
|
+
- MultiFactorPixPaymentMismatch: https://storybook.woovi.design/?path=/docs/components-multifactor-multifactorpixpaymentmismatch--docs
|
|
785
|
+
- MultiFactorPixPaymentView: https://storybook.woovi.design/?path=/docs/components-multifactor-multifactorpixpaymentview--docs
|
|
786
|
+
|
|
787
|
+
## OpenPix
|
|
788
|
+
|
|
789
|
+
Componentes especificos do ecossistema OpenPix.
|
|
790
|
+
|
|
791
|
+
```tsx
|
|
792
|
+
import { ChargeTagStatus, PixTransactionTypeTag, QRCodeWrapper } from '@woovi/ui';
|
|
793
|
+
|
|
794
|
+
// Tag de status de cobranca
|
|
795
|
+
<ChargeTagStatus status="COMPLETED" />
|
|
796
|
+
<ChargeTagStatus status="PENDING" />
|
|
797
|
+
<ChargeTagStatus status="EXPIRED" />
|
|
798
|
+
|
|
799
|
+
// Tag de tipo de transacao Pix
|
|
800
|
+
<PixTransactionTypeTag type="PAYMENT" />
|
|
801
|
+
<PixTransactionTypeTag type="WITHDRAWAL" />
|
|
802
|
+
|
|
803
|
+
// Wrapper para QR Code Pix
|
|
804
|
+
<QRCodeWrapper
|
|
805
|
+
value="00020126580014br.gov.bcb.pix..."
|
|
806
|
+
size={256}
|
|
807
|
+
/>
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
- ChargeTagStatus: https://storybook.woovi.design/?path=/docs/components-openpix-chargetagstatus--docs
|
|
811
|
+
- PixTransactionTypeTag: https://storybook.woovi.design/?path=/docs/components-openpix-pixtransactiontypetag--docs
|
|
812
|
+
- QrCodeWrapper: https://storybook.woovi.design/?path=/docs/components-openpix-qrcodewrapper--docs
|
|
813
|
+
|
|
814
|
+
## PaymentLinkRow
|
|
815
|
+
|
|
816
|
+
Componente para exibir links de pagamento em listas.
|
|
817
|
+
|
|
818
|
+
```tsx
|
|
819
|
+
import { PaymentLinkRow } from '@woovi/ui';
|
|
820
|
+
|
|
821
|
+
<PaymentLinkRow
|
|
822
|
+
title="Pagamento #123"
|
|
823
|
+
value={5000}
|
|
824
|
+
status="pending"
|
|
825
|
+
href="/payments/123"
|
|
826
|
+
/>
|
|
827
|
+
```
|
|
828
|
+
|
|
829
|
+
- PaymentLinkRow: https://storybook.woovi.design/?path=/docs/components-paymentlinkrow-paymentlinkrow--docs
|
|
830
|
+
|
|
831
|
+
## PinInput
|
|
832
|
+
|
|
833
|
+
Campos de entrada para PIN e codigos de verificacao.
|
|
834
|
+
|
|
835
|
+
```tsx
|
|
836
|
+
import { PinInput, PinInputFormik } from '@woovi/ui';
|
|
837
|
+
|
|
838
|
+
// Pin input standalone
|
|
839
|
+
<PinInput
|
|
840
|
+
length={6}
|
|
841
|
+
onChange={(value) => setPin(value)}
|
|
842
|
+
/>
|
|
843
|
+
|
|
844
|
+
// Pin input com Formik
|
|
845
|
+
<PinInputFormik name="verificationCode" length={4} />
|
|
846
|
+
```
|
|
847
|
+
|
|
848
|
+
- PinInput: https://storybook.woovi.design/?path=/docs/components-pininput-pininput--docs
|
|
849
|
+
- PinInputFormik: https://storybook.woovi.design/?path=/docs/components-pininput-pininputformik--docs
|
|
850
|
+
|
|
851
|
+
## RadioCard
|
|
852
|
+
|
|
853
|
+
Card selecionavel estilo radio button.
|
|
854
|
+
|
|
855
|
+
```tsx
|
|
856
|
+
import { RadioCard } from '@woovi/ui';
|
|
857
|
+
|
|
858
|
+
<RadioCard
|
|
859
|
+
selected={selectedOption === 'pix'}
|
|
860
|
+
onClick={() => setSelectedOption('pix')}
|
|
861
|
+
title="Pix"
|
|
862
|
+
description="Pagamento instantaneo"
|
|
863
|
+
icon="pix"
|
|
864
|
+
/>
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
- RadioCard: https://storybook.woovi.design/?path=/docs/components-radiocard-radiocard--docs
|
|
868
|
+
|
|
869
|
+
## RewardTicket
|
|
870
|
+
|
|
871
|
+
Componente para exibir tickets de recompensa/cashback.
|
|
872
|
+
|
|
873
|
+
```tsx
|
|
874
|
+
import { RewardTicket } from '@woovi/ui';
|
|
875
|
+
|
|
876
|
+
<RewardTicket
|
|
877
|
+
value={500}
|
|
878
|
+
description="Cashback de 5%"
|
|
879
|
+
/>
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
- RewardTicket: https://storybook.woovi.design/?path=/docs/components-rewardticket-rewardticket--docs
|
|
883
|
+
|
|
884
|
+
## Ribbon
|
|
885
|
+
|
|
886
|
+
Faixa decorativa para destacar elementos.
|
|
887
|
+
|
|
888
|
+
```tsx
|
|
889
|
+
import { Ribbon } from '@woovi/ui';
|
|
890
|
+
|
|
891
|
+
<Card>
|
|
892
|
+
<Ribbon label="Novo" color="primary" />
|
|
893
|
+
<CardContent>Conteudo</CardContent>
|
|
894
|
+
</Card>
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
- Ribbon: https://storybook.woovi.design/?path=/docs/components-ribbon-ribbon--docs
|
|
898
|
+
|
|
899
|
+
## Root
|
|
900
|
+
|
|
901
|
+
Componentes de estrutura raiz da aplicacao.
|
|
902
|
+
|
|
903
|
+
```tsx
|
|
904
|
+
import { ContentBoundary } from '@woovi/ui';
|
|
905
|
+
|
|
906
|
+
<ContentBoundary>
|
|
907
|
+
<YourAppContent />
|
|
908
|
+
</ContentBoundary>
|
|
909
|
+
```
|
|
910
|
+
|
|
911
|
+
- ContentBoundary: https://storybook.woovi.design/?path=/docs/components-root-contentboundary--docs
|
|
912
|
+
|
|
913
|
+
## Routed
|
|
914
|
+
|
|
915
|
+
Componentes com integracao de rotas.
|
|
916
|
+
|
|
917
|
+
```tsx
|
|
918
|
+
import { RoutedTabs, TabbedContent } from '@woovi/ui';
|
|
919
|
+
|
|
920
|
+
// Tabs com rotas
|
|
921
|
+
<RoutedTabs
|
|
922
|
+
tabs={[
|
|
923
|
+
{ label: 'Visao Geral', path: '/overview' },
|
|
924
|
+
{ label: 'Transacoes', path: '/transactions' },
|
|
925
|
+
{ label: 'Configuracoes', path: '/settings' },
|
|
926
|
+
]}
|
|
927
|
+
/>
|
|
928
|
+
|
|
929
|
+
// Conteudo com tabs
|
|
930
|
+
<TabbedContent
|
|
931
|
+
tabs={[
|
|
932
|
+
{ label: 'Tab 1', content: <Content1 /> },
|
|
933
|
+
{ label: 'Tab 2', content: <Content2 /> },
|
|
934
|
+
]}
|
|
935
|
+
/>
|
|
936
|
+
```
|
|
937
|
+
|
|
938
|
+
- RoutedTabs: https://storybook.woovi.design/?path=/docs/components-routed-routedtabs--docs
|
|
939
|
+
- TabbedContent: https://storybook.woovi.design/?path=/docs/components-routed-tabbedcontent--docs
|
|
940
|
+
|
|
941
|
+
## ScreenHeader
|
|
942
|
+
|
|
943
|
+
Cabecalhos de tela para dashboards.
|
|
944
|
+
|
|
945
|
+
```tsx
|
|
946
|
+
import { ScreenHeaderUI, ScreenHeaderCard, ScreenHeaderUIResponsive } from '@woovi/ui';
|
|
947
|
+
|
|
948
|
+
// Header de tela
|
|
949
|
+
<ScreenHeaderUI
|
|
950
|
+
title="Dashboard"
|
|
951
|
+
subtitle="Visao geral das suas transacoes"
|
|
952
|
+
actions={<ActionButton label="Exportar" />}
|
|
953
|
+
/>
|
|
954
|
+
|
|
955
|
+
// Header em card
|
|
956
|
+
<ScreenHeaderCard title="Configuracoes" />
|
|
957
|
+
|
|
958
|
+
// Header responsivo
|
|
959
|
+
<ScreenHeaderUIResponsive
|
|
960
|
+
title="Pagamentos"
|
|
961
|
+
backHref="/home"
|
|
962
|
+
/>
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
- ScreenHeaderUI: https://storybook.woovi.design/?path=/docs/components-screenheader-screenheaderui--docs
|
|
966
|
+
- ScreenHeaderCard: https://storybook.woovi.design/?path=/docs/components-screenheadercard-screenheadercard--docs
|
|
967
|
+
- ScreenHeaderUIResponsive: https://storybook.woovi.design/?path=/docs/components-screenheaderresponsive-screenheaderuiresponsive--docs
|
|
968
|
+
|
|
969
|
+
## Search
|
|
970
|
+
|
|
971
|
+
Campos de busca.
|
|
972
|
+
|
|
973
|
+
```tsx
|
|
974
|
+
import { GlobalSearchField, SearchField } from '@woovi/ui';
|
|
975
|
+
|
|
976
|
+
// Campo de busca global
|
|
977
|
+
<GlobalSearchField
|
|
978
|
+
placeholder="Buscar transacoes..."
|
|
979
|
+
onSearch={(query) => handleSearch(query)}
|
|
980
|
+
/>
|
|
981
|
+
|
|
982
|
+
// Campo de busca simples
|
|
983
|
+
<SearchField
|
|
984
|
+
value={search}
|
|
985
|
+
onChange={(e) => setSearch(e.target.value)}
|
|
986
|
+
/>
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
- GlobalSearchField: https://storybook.woovi.design/?path=/docs/components-search-globalsearchfield--docs
|
|
990
|
+
- SearchField: https://storybook.woovi.design/?path=/docs/components-searchfield--docs
|
|
991
|
+
|
|
992
|
+
## Select
|
|
993
|
+
|
|
994
|
+
Componentes de selecao.
|
|
995
|
+
|
|
996
|
+
```tsx
|
|
997
|
+
import { Select, SelectAll } from '@woovi/ui';
|
|
998
|
+
|
|
999
|
+
// Select basico
|
|
1000
|
+
<Select
|
|
1001
|
+
label="Status"
|
|
1002
|
+
value={status}
|
|
1003
|
+
onChange={setStatus}
|
|
1004
|
+
options={[
|
|
1005
|
+
{ value: 'active', label: 'Ativo' },
|
|
1006
|
+
{ value: 'inactive', label: 'Inativo' },
|
|
1007
|
+
]}
|
|
1008
|
+
/>
|
|
1009
|
+
|
|
1010
|
+
// Select com opcao "Todos"
|
|
1011
|
+
<SelectAll
|
|
1012
|
+
label="Filtrar por"
|
|
1013
|
+
value={filter}
|
|
1014
|
+
onChange={setFilter}
|
|
1015
|
+
options={options}
|
|
1016
|
+
/>
|
|
1017
|
+
```
|
|
1018
|
+
|
|
1019
|
+
- Select: https://storybook.woovi.design/?path=/docs/components-select-select--docs
|
|
1020
|
+
- SelectAll: https://storybook.woovi.design/?path=/docs/components-select-selectall--docs
|
|
1021
|
+
|
|
1022
|
+
## Sidebar
|
|
1023
|
+
|
|
1024
|
+
Sistema de navegacao lateral.
|
|
1025
|
+
|
|
1026
|
+
```tsx
|
|
1027
|
+
import { Sidebar, SidebarGroup, SidebarItem, SidebarMenuList } from '@woovi/ui';
|
|
1028
|
+
|
|
1029
|
+
<Sidebar>
|
|
1030
|
+
<SidebarGroup title="Principal">
|
|
1031
|
+
<SidebarItem icon="dashboard" label="Dashboard" href="/" />
|
|
1032
|
+
<SidebarItem icon="payment" label="Pagamentos" href="/payments" />
|
|
1033
|
+
</SidebarGroup>
|
|
1034
|
+
<SidebarGroup title="Configuracoes">
|
|
1035
|
+
<SidebarItem icon="settings" label="Conta" href="/settings" />
|
|
1036
|
+
</SidebarGroup>
|
|
1037
|
+
</Sidebar>
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
- Sidebar: https://storybook.woovi.design/?path=/docs/components-sidebar-sidebar--docs
|
|
1041
|
+
- Group: https://storybook.woovi.design/?path=/docs/components-sidebar-group--docs
|
|
1042
|
+
- Item: https://storybook.woovi.design/?path=/docs/components-sidebar-item--docs
|
|
1043
|
+
- MenuList: https://storybook.woovi.design/?path=/docs/components-sidebar-menulist--docs
|
|
1044
|
+
|
|
1045
|
+
## Snackbar
|
|
1046
|
+
|
|
1047
|
+
Notificacoes toast.
|
|
1048
|
+
|
|
1049
|
+
```tsx
|
|
1050
|
+
import { useSnackbar } from '@woovi/ui';
|
|
1051
|
+
|
|
1052
|
+
const { showSnackbar } = useSnackbar();
|
|
1053
|
+
|
|
1054
|
+
// Mostrar notificacao
|
|
1055
|
+
showSnackbar('Operacao realizada com sucesso!', { variant: 'success' });
|
|
1056
|
+
showSnackbar('Erro ao processar', { variant: 'error' });
|
|
1057
|
+
showSnackbar('Atencao!', { variant: 'warning' });
|
|
1058
|
+
```
|
|
1059
|
+
|
|
1060
|
+
- Snackbar: https://storybook.woovi.design/?path=/docs/components-snackbar-snackbar--docs
|
|
1061
|
+
- CloseSnack: https://storybook.woovi.design/?path=/docs/components-snackbar-closesnack--docs
|
|
1062
|
+
|
|
1063
|
+
## Statement
|
|
1064
|
+
|
|
1065
|
+
Componentes para extrato e historico de transacoes.
|
|
1066
|
+
|
|
1067
|
+
```tsx
|
|
1068
|
+
import { LedgerStatementText, TransactionTypeText } from '@woovi/ui';
|
|
1069
|
+
|
|
1070
|
+
// Texto de extrato
|
|
1071
|
+
<LedgerStatementText type="credit" value={1000} />
|
|
1072
|
+
<LedgerStatementText type="debit" value={-500} />
|
|
1073
|
+
|
|
1074
|
+
// Texto de tipo de transacao
|
|
1075
|
+
<TransactionTypeText type="PIX_RECEIVED" />
|
|
1076
|
+
<TransactionTypeText type="PIX_SENT" />
|
|
1077
|
+
```
|
|
1078
|
+
|
|
1079
|
+
- LedgerStatementText: https://storybook.woovi.design/?path=/docs/components-statement-ledgerstatementtext--docs
|
|
1080
|
+
- TransactionTypeText: https://storybook.woovi.design/?path=/docs/components-statement-transactiontypetext--docs
|
|
1081
|
+
|
|
1082
|
+
## Stepper
|
|
1083
|
+
|
|
1084
|
+
Componente de progresso em etapas.
|
|
1085
|
+
|
|
1086
|
+
```tsx
|
|
1087
|
+
import { Step, Stepper } from '@woovi/ui';
|
|
1088
|
+
|
|
1089
|
+
<Stepper activeStep={1}>
|
|
1090
|
+
<Step label="Dados pessoais" />
|
|
1091
|
+
<Step label="Endereco" />
|
|
1092
|
+
<Step label="Confirmacao" />
|
|
1093
|
+
</Stepper>
|
|
1094
|
+
```
|
|
1095
|
+
|
|
1096
|
+
- Step: https://storybook.woovi.design/?path=/docs/components-step--docs
|
|
1097
|
+
- Stepper: https://storybook.woovi.design/?path=/docs/components-stepper-stepper--docs
|
|
1098
|
+
|
|
1099
|
+
## SwipeableDialog
|
|
1100
|
+
|
|
1101
|
+
Dialog com suporte a gestos de swipe para mobile.
|
|
1102
|
+
|
|
1103
|
+
```tsx
|
|
1104
|
+
import {
|
|
1105
|
+
SwipeableDialog,
|
|
1106
|
+
SwipeableDialogContent,
|
|
1107
|
+
SwipeableDialogTitle,
|
|
1108
|
+
SwipeableDialogActions,
|
|
1109
|
+
SwipeableModal
|
|
1110
|
+
} from '@woovi/ui';
|
|
1111
|
+
|
|
1112
|
+
<SwipeableDialog open={isOpen} onClose={handleClose}>
|
|
1113
|
+
<SwipeableDialogTitle>Confirmar</SwipeableDialogTitle>
|
|
1114
|
+
<SwipeableDialogContent>
|
|
1115
|
+
Deseja continuar com esta acao?
|
|
1116
|
+
</SwipeableDialogContent>
|
|
1117
|
+
<SwipeableDialogActions>
|
|
1118
|
+
<ActionButton label="Cancelar" onClick={handleClose} />
|
|
1119
|
+
<ActionButton label="Confirmar" onClick={handleConfirm} />
|
|
1120
|
+
</SwipeableDialogActions>
|
|
1121
|
+
</SwipeableDialog>
|
|
1122
|
+
```
|
|
1123
|
+
|
|
1124
|
+
- SwipeableDialog: https://storybook.woovi.design/?path=/docs/components-swipeabledialog-swipeabledialog--docs
|
|
1125
|
+
- SwipeableModal: https://storybook.woovi.design/?path=/docs/components-swipeablemodal-swipeablemodal--docs
|
|
1126
|
+
|
|
1127
|
+
## Table
|
|
1128
|
+
|
|
1129
|
+
Componentes de tabela e listas virtualizadas.
|
|
1130
|
+
|
|
1131
|
+
```tsx
|
|
1132
|
+
import { CardListVirtualized, CardListLoading } from '@woovi/ui';
|
|
1133
|
+
|
|
1134
|
+
// Lista virtualizada para grandes conjuntos de dados
|
|
1135
|
+
<CardListVirtualized
|
|
1136
|
+
items={transactions}
|
|
1137
|
+
renderItem={(item) => <TransactionCard data={item} />}
|
|
1138
|
+
height={600}
|
|
1139
|
+
/>
|
|
1140
|
+
|
|
1141
|
+
// Estado de loading
|
|
1142
|
+
<CardListLoading count={5} />
|
|
1143
|
+
```
|
|
1144
|
+
|
|
1145
|
+
- CardListLoading: https://storybook.woovi.design/?path=/docs/components-table-cardlistloading--docs
|
|
1146
|
+
- CardListVirtualized: https://storybook.woovi.design/?path=/docs/components-table-cardlistvirtualized--docs
|
|
1147
|
+
|
|
1148
|
+
## Tag
|
|
1149
|
+
|
|
1150
|
+
Componentes de tag e status.
|
|
1151
|
+
|
|
1152
|
+
```tsx
|
|
1153
|
+
import {
|
|
1154
|
+
Tag,
|
|
1155
|
+
TagsContainer,
|
|
1156
|
+
TagWebhookStatus,
|
|
1157
|
+
CashbackTagStatus,
|
|
1158
|
+
TransactionTagStatus,
|
|
1159
|
+
TransactionTagEntryType
|
|
1160
|
+
} from '@woovi/ui';
|
|
1161
|
+
|
|
1162
|
+
// Tag simples
|
|
1163
|
+
<Tag label="Pix" color="primary" />
|
|
1164
|
+
<Tag label="Novo" color="success" />
|
|
1165
|
+
|
|
1166
|
+
// Container de tags
|
|
1167
|
+
<TagsContainer>
|
|
1168
|
+
<Tag label="Tag 1" />
|
|
1169
|
+
<Tag label="Tag 2" />
|
|
1170
|
+
</TagsContainer>
|
|
1171
|
+
|
|
1172
|
+
// Tags de status especificos
|
|
1173
|
+
<TagWebhookStatus status="active" />
|
|
1174
|
+
<CashbackTagStatus status="pending" />
|
|
1175
|
+
<TransactionTagStatus status="completed" />
|
|
1176
|
+
<TransactionTagEntryType type="credit" />
|
|
1177
|
+
```
|
|
1178
|
+
|
|
1179
|
+
- Tag: https://storybook.woovi.design/?path=/docs/components-tag-tag--docs
|
|
1180
|
+
- TagsContainer: https://storybook.woovi.design/?path=/docs/components-tag-tagscontainer--docs
|
|
1181
|
+
- TagWebhookStatus: https://storybook.woovi.design/?path=/docs/components-tagwebhookstatus--docs
|
|
1182
|
+
- CashbackTagStatus: https://storybook.woovi.design/?path=/docs/components-cashbacktagstatus--docs
|
|
1183
|
+
- TransactionTagStatus: https://storybook.woovi.design/?path=/docs/components-transactiontagstatus--docs
|
|
1184
|
+
- TransactionTagEntryType: https://storybook.woovi.design/?path=/docs/components-transactiontagentrytype--docs
|
|
1185
|
+
|
|
1186
|
+
## Term
|
|
1187
|
+
|
|
1188
|
+
Componentes de termos e condicoes.
|
|
1189
|
+
|
|
1190
|
+
```tsx
|
|
1191
|
+
import { Terms, TermsLink, TermsModal } from '@woovi/ui';
|
|
1192
|
+
|
|
1193
|
+
// Checkbox de termos
|
|
1194
|
+
<Terms
|
|
1195
|
+
checked={accepted}
|
|
1196
|
+
onChange={setAccepted}
|
|
1197
|
+
/>
|
|
1198
|
+
|
|
1199
|
+
// Link para termos
|
|
1200
|
+
<TermsLink href="/terms">Termos de Uso</TermsLink>
|
|
1201
|
+
|
|
1202
|
+
// Modal de termos
|
|
1203
|
+
<TermsModal
|
|
1204
|
+
open={showTerms}
|
|
1205
|
+
onAccept={handleAccept}
|
|
1206
|
+
onClose={() => setShowTerms(false)}
|
|
1207
|
+
/>
|
|
1208
|
+
```
|
|
1209
|
+
|
|
1210
|
+
- Terms: https://storybook.woovi.design/?path=/docs/components-term-terms--docs
|
|
1211
|
+
- TermsLink: https://storybook.woovi.design/?path=/docs/components-term-termslink--docs
|
|
1212
|
+
|
|
1213
|
+
## Text
|
|
1214
|
+
|
|
1215
|
+
Componentes de texto.
|
|
1216
|
+
|
|
1217
|
+
```tsx
|
|
1218
|
+
import { TextMultiline } from '@woovi/ui';
|
|
1219
|
+
|
|
1220
|
+
<TextMultiline text="Texto com\\nmultiplas\\nlinhas" />
|
|
1221
|
+
```
|
|
1222
|
+
|
|
1223
|
+
- TextMultiline: https://storybook.woovi.design/?path=/docs/components-text-textmultiline--docs
|
|
1224
|
+
|
|
1225
|
+
## Theme
|
|
1226
|
+
|
|
1227
|
+
Sistema de temas e dark mode.
|
|
1228
|
+
|
|
1229
|
+
```tsx
|
|
1230
|
+
import { ThemeProvider, useThemeMode } from '@woovi/ui';
|
|
1231
|
+
|
|
1232
|
+
// Provider de tema
|
|
1233
|
+
<ThemeProvider>
|
|
1234
|
+
<App />
|
|
1235
|
+
</ThemeProvider>
|
|
1236
|
+
|
|
1237
|
+
// Hook para alternar tema
|
|
1238
|
+
const { mode, toggleMode } = useThemeMode();
|
|
1239
|
+
|
|
1240
|
+
<button onClick={toggleMode}>
|
|
1241
|
+
Tema atual: {mode}
|
|
1242
|
+
</button>
|
|
1243
|
+
```
|
|
1244
|
+
|
|
1245
|
+
- ThemeProvider: https://storybook.woovi.design/?path=/docs/components-themeprovider--docs
|
|
1246
|
+
|
|
1247
|
+
## Timeline
|
|
1248
|
+
|
|
1249
|
+
Linha do tempo para historico de eventos.
|
|
1250
|
+
|
|
1251
|
+
```tsx
|
|
1252
|
+
import { Timeline, TimelineItem } from '@woovi/ui';
|
|
1253
|
+
|
|
1254
|
+
<Timeline>
|
|
1255
|
+
<TimelineItem
|
|
1256
|
+
title="Pagamento recebido"
|
|
1257
|
+
date="2024-01-15 10:30"
|
|
1258
|
+
status="success"
|
|
1259
|
+
/>
|
|
1260
|
+
<TimelineItem
|
|
1261
|
+
title="Cobranca criada"
|
|
1262
|
+
date="2024-01-15 10:00"
|
|
1263
|
+
status="info"
|
|
1264
|
+
/>
|
|
1265
|
+
</Timeline>
|
|
1266
|
+
```
|
|
1267
|
+
|
|
1268
|
+
- Timeline: https://storybook.woovi.design/?path=/docs/components-timeline-timeline--docs
|
|
1269
|
+
|
|
1270
|
+
## Utility Components
|
|
1271
|
+
|
|
1272
|
+
Componentes utilitarios diversos.
|
|
1273
|
+
|
|
1274
|
+
```tsx
|
|
1275
|
+
import {
|
|
1276
|
+
BackButton,
|
|
1277
|
+
Badge,
|
|
1278
|
+
Circle,
|
|
1279
|
+
CircleButton,
|
|
1280
|
+
Column,
|
|
1281
|
+
CopyInput,
|
|
1282
|
+
EmptyMessage,
|
|
1283
|
+
EncryptedText,
|
|
1284
|
+
FloatingMenu,
|
|
1285
|
+
LinearProgress,
|
|
1286
|
+
Loading,
|
|
1287
|
+
OverflowDiv,
|
|
1288
|
+
ProgressBar,
|
|
1289
|
+
QuestionTooltip,
|
|
1290
|
+
Row,
|
|
1291
|
+
SafeTextTooltip,
|
|
1292
|
+
ToggleButtonGroup
|
|
1293
|
+
} from '@woovi/ui';
|
|
1294
|
+
|
|
1295
|
+
// Botao voltar
|
|
1296
|
+
<BackButton onClick={() => navigate(-1)} />
|
|
1297
|
+
|
|
1298
|
+
// Badge de notificacao
|
|
1299
|
+
<Badge count={5}>
|
|
1300
|
+
<Icon name="notifications" />
|
|
1301
|
+
</Badge>
|
|
1302
|
+
|
|
1303
|
+
// Circulo decorativo
|
|
1304
|
+
<Circle color="primary" size={40} />
|
|
1305
|
+
|
|
1306
|
+
// Botao circular
|
|
1307
|
+
<CircleButton icon="add" onClick={handleAdd} />
|
|
1308
|
+
|
|
1309
|
+
// Layout em coluna
|
|
1310
|
+
<Column gap={2}>
|
|
1311
|
+
<Item1 />
|
|
1312
|
+
<Item2 />
|
|
1313
|
+
</Column>
|
|
1314
|
+
|
|
1315
|
+
// Input com botao de copiar
|
|
1316
|
+
<CopyInput value="texto-para-copiar" />
|
|
1317
|
+
|
|
1318
|
+
// Mensagem de estado vazio
|
|
1319
|
+
<EmptyMessage
|
|
1320
|
+
title="Nenhuma transacao"
|
|
1321
|
+
description="Suas transacoes aparecerao aqui"
|
|
1322
|
+
/>
|
|
1323
|
+
|
|
1324
|
+
// Texto criptografado (ex: CPF mascarado)
|
|
1325
|
+
<EncryptedText value="123.456.789-00" />
|
|
1326
|
+
|
|
1327
|
+
// Menu flutuante
|
|
1328
|
+
<FloatingMenu
|
|
1329
|
+
items={[
|
|
1330
|
+
{ label: 'Editar', onClick: handleEdit },
|
|
1331
|
+
{ label: 'Excluir', onClick: handleDelete },
|
|
1332
|
+
]}
|
|
1333
|
+
/>
|
|
1334
|
+
|
|
1335
|
+
// Barra de progresso linear
|
|
1336
|
+
<LinearProgress value={75} />
|
|
1337
|
+
|
|
1338
|
+
// Loading spinner
|
|
1339
|
+
<Loading />
|
|
1340
|
+
<Loading size="small" />
|
|
1341
|
+
|
|
1342
|
+
// Div com overflow controlado
|
|
1343
|
+
<OverflowDiv maxHeight={200}>
|
|
1344
|
+
<LongContent />
|
|
1345
|
+
</OverflowDiv>
|
|
1346
|
+
|
|
1347
|
+
// Barra de progresso
|
|
1348
|
+
<ProgressBar value={50} max={100} />
|
|
1349
|
+
|
|
1350
|
+
// Tooltip com icone de interrogacao
|
|
1351
|
+
<QuestionTooltip>
|
|
1352
|
+
Explicacao detalhada aqui
|
|
1353
|
+
</QuestionTooltip>
|
|
1354
|
+
|
|
1355
|
+
// Layout em linha
|
|
1356
|
+
<Row gap={2}>
|
|
1357
|
+
<Item1 />
|
|
1358
|
+
<Item2 />
|
|
1359
|
+
</Row>
|
|
1360
|
+
|
|
1361
|
+
// Tooltip com texto truncado seguro
|
|
1362
|
+
<SafeTextTooltip text="Texto muito longo que sera truncado..." />
|
|
1363
|
+
|
|
1364
|
+
// Grupo de botoes toggle
|
|
1365
|
+
<ToggleButtonGroup
|
|
1366
|
+
value={view}
|
|
1367
|
+
onChange={setView}
|
|
1368
|
+
options={[
|
|
1369
|
+
{ value: 'list', label: 'Lista' },
|
|
1370
|
+
{ value: 'grid', label: 'Grid' },
|
|
1371
|
+
]}
|
|
1372
|
+
/>
|
|
1373
|
+
```
|
|
1374
|
+
|
|
1375
|
+
- BackButton: https://storybook.woovi.design/?path=/docs/components-backbutton--docs
|
|
1376
|
+
- Badge: https://storybook.woovi.design/?path=/docs/components-badge--docs
|
|
1377
|
+
- Circle: https://storybook.woovi.design/?path=/docs/components-circle--docs
|
|
1378
|
+
- CircleButton: https://storybook.woovi.design/?path=/docs/components-circlebutton--docs
|
|
1379
|
+
- Column: https://storybook.woovi.design/?path=/docs/components-column--docs
|
|
1380
|
+
- CopyInput: https://storybook.woovi.design/?path=/docs/components-copyinput--docs
|
|
1381
|
+
- EmptyMessage: https://storybook.woovi.design/?path=/docs/components-emptymessage--docs
|
|
1382
|
+
- EncryptedText: https://storybook.woovi.design/?path=/docs/components-encryptedtext--docs
|
|
1383
|
+
- FloatingMenu: https://storybook.woovi.design/?path=/docs/components-floatingmenu--docs
|
|
1384
|
+
- LinearProgress: https://storybook.woovi.design/?path=/docs/components-linearprogress--docs
|
|
1385
|
+
- Loading: https://storybook.woovi.design/?path=/docs/components-loading--docs
|
|
1386
|
+
- OverflowDiv: https://storybook.woovi.design/?path=/docs/components-overflowdiv--docs
|
|
1387
|
+
- ProgressBar: https://storybook.woovi.design/?path=/docs/components-progressbar--docs
|
|
1388
|
+
- QuestionTooltip: https://storybook.woovi.design/?path=/docs/components-questiontooltip--docs
|
|
1389
|
+
- Row: https://storybook.woovi.design/?path=/docs/components-row--docs
|
|
1390
|
+
- SafeTextTooltip: https://storybook.woovi.design/?path=/docs/components-safetexttooltip--docs
|
|
1391
|
+
- ToggleButtonGroup: https://storybook.woovi.design/?path=/docs/components-togglebuttongroup--docs
|
|
1392
|
+
- UnsupportedBrowserWarning: https://storybook.woovi.design/?path=/docs/components-unsupportedbrowser-unsupportedbrowserwarning--docs
|
|
1393
|
+
- WindowPopper: https://storybook.woovi.design/?path=/docs/components-windowpopper-windowpopper--docs
|
|
1394
|
+
|
|
1395
|
+
---
|
|
1396
|
+
|
|
1397
|
+
## Exemplo Completo
|
|
1398
|
+
|
|
1399
|
+
```tsx
|
|
1400
|
+
import {
|
|
1401
|
+
ThemeProvider,
|
|
1402
|
+
LayoutRoot,
|
|
1403
|
+
LayoutWrapper,
|
|
1404
|
+
Sidebar,
|
|
1405
|
+
SidebarGroup,
|
|
1406
|
+
SidebarItem,
|
|
1407
|
+
ScreenHeaderUI,
|
|
1408
|
+
Card,
|
|
1409
|
+
CardContent,
|
|
1410
|
+
CardAnalytics,
|
|
1411
|
+
DataGrid,
|
|
1412
|
+
ActionButton,
|
|
1413
|
+
ChargeTagStatus,
|
|
1414
|
+
useSnackbar,
|
|
1415
|
+
} from '@woovi/ui';
|
|
1416
|
+
|
|
1417
|
+
function App() {
|
|
1418
|
+
const { showSnackbar } = useSnackbar();
|
|
1419
|
+
|
|
1420
|
+
const columns = [
|
|
1421
|
+
{ field: 'id', headerName: 'ID', width: 100 },
|
|
1422
|
+
{ field: 'customer', headerName: 'Cliente', width: 200 },
|
|
1423
|
+
{ field: 'amount', headerName: 'Valor', width: 150 },
|
|
1424
|
+
{
|
|
1425
|
+
field: 'status',
|
|
1426
|
+
headerName: 'Status',
|
|
1427
|
+
width: 120,
|
|
1428
|
+
renderCell: (params) => <ChargeTagStatus status={params.value} />
|
|
1429
|
+
},
|
|
1430
|
+
];
|
|
1431
|
+
|
|
1432
|
+
return (
|
|
1433
|
+
<ThemeProvider>
|
|
1434
|
+
<LayoutRoot>
|
|
1435
|
+
<Sidebar>
|
|
1436
|
+
<SidebarGroup title="Menu">
|
|
1437
|
+
<SidebarItem icon="dashboard" label="Dashboard" href="/" />
|
|
1438
|
+
<SidebarItem icon="payment" label="Cobrancas" href="/charges" />
|
|
1439
|
+
</SidebarGroup>
|
|
1440
|
+
</Sidebar>
|
|
1441
|
+
|
|
1442
|
+
<LayoutWrapper>
|
|
1443
|
+
<ScreenHeaderUI
|
|
1444
|
+
title="Dashboard"
|
|
1445
|
+
actions={
|
|
1446
|
+
<ActionButton
|
|
1447
|
+
label="Nova Cobranca"
|
|
1448
|
+
onClick={() => showSnackbar('Cobranca criada!')}
|
|
1449
|
+
/>
|
|
1450
|
+
}
|
|
1451
|
+
/>
|
|
1452
|
+
|
|
1453
|
+
<CardAnalytics
|
|
1454
|
+
title="Total Recebido"
|
|
1455
|
+
value="R$ 15.000,00"
|
|
1456
|
+
change="+12%"
|
|
1457
|
+
trend="up"
|
|
1458
|
+
/>
|
|
1459
|
+
|
|
1460
|
+
<Card>
|
|
1461
|
+
<CardContent>
|
|
1462
|
+
<DataGrid columns={columns} rows={data} />
|
|
1463
|
+
</CardContent>
|
|
1464
|
+
</Card>
|
|
1465
|
+
</LayoutWrapper>
|
|
1466
|
+
</LayoutRoot>
|
|
1467
|
+
</ThemeProvider>
|
|
1468
|
+
);
|
|
1469
|
+
}
|
|
1470
|
+
```
|
|
1471
|
+
|
|
1472
|
+
---
|
|
1473
|
+
|
|
1474
|
+
Gerado automaticamente para integracao com LLMs.
|