@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/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.