lsoft-ui 0.0.1
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/LICENSE +21 -0
- package/README.md +82 -0
- package/dist/components/Accordion/CustomAccordionGroup.d.ts +10 -0
- package/dist/components/Accordion/CustomAccordionGroup.js +20 -0
- package/dist/components/Accordion/CustomAccordionItem.d.ts +12 -0
- package/dist/components/Accordion/CustomAccordionItem.js +5 -0
- package/dist/components/CustomAlertDialog.d.ts +8 -0
- package/dist/components/CustomAlertDialog.js +18 -0
- package/dist/components/CustomAutoComplete.d.ts +35 -0
- package/dist/components/CustomAutoComplete.js +141 -0
- package/dist/components/CustomBadge.d.ts +9 -0
- package/dist/components/CustomBadge.js +25 -0
- package/dist/components/CustomButton.d.ts +16 -0
- package/dist/components/CustomButton.js +18 -0
- package/dist/components/CustomCard.d.ts +11 -0
- package/dist/components/CustomCard.js +20 -0
- package/dist/components/CustomCheckBox.d.ts +12 -0
- package/dist/components/CustomCheckBox.js +26 -0
- package/dist/components/CustomCheckboxGroup.d.ts +21 -0
- package/dist/components/CustomCheckboxGroup.js +28 -0
- package/dist/components/CustomDrawer.d.ts +11 -0
- package/dist/components/CustomDrawer.js +36 -0
- package/dist/components/CustomIconButton.d.ts +7 -0
- package/dist/components/CustomIconButton.js +19 -0
- package/dist/components/CustomInput.d.ts +19 -0
- package/dist/components/CustomInput.js +32 -0
- package/dist/components/CustomInputNumber.d.ts +17 -0
- package/dist/components/CustomInputNumber.js +23 -0
- package/dist/components/CustomList.d.ts +22 -0
- package/dist/components/CustomList.js +27 -0
- package/dist/components/CustomLoadingCenterPage.d.ts +6 -0
- package/dist/components/CustomLoadingCenterPage.js +5 -0
- package/dist/components/CustomModal.d.ts +19 -0
- package/dist/components/CustomModal.js +83 -0
- package/dist/components/CustomModalNfe.d.ts +34 -0
- package/dist/components/CustomModalNfe.js +86 -0
- package/dist/components/CustomMultSelect.d.ts +28 -0
- package/dist/components/CustomMultSelect.js +51 -0
- package/dist/components/CustomMultipleInputs.d.ts +36 -0
- package/dist/components/CustomMultipleInputs.js +91 -0
- package/dist/components/CustomPopover.d.ts +21 -0
- package/dist/components/CustomPopover.js +19 -0
- package/dist/components/CustomRadioGroup.d.ts +32 -0
- package/dist/components/CustomRadioGroup.js +37 -0
- package/dist/components/CustomSelect.d.ts +20 -0
- package/dist/components/CustomSelect.js +25 -0
- package/dist/components/CustomSkeleton.d.ts +9 -0
- package/dist/components/CustomSkeleton.js +17 -0
- package/dist/components/CustomSwitch.d.ts +20 -0
- package/dist/components/CustomSwitch.js +15 -0
- package/dist/components/CustomTable.d.ts +51 -0
- package/dist/components/CustomTable.js +307 -0
- package/dist/components/CustomTabs.d.ts +27 -0
- package/dist/components/CustomTabs.js +100 -0
- package/dist/components/CustomTextarea.d.ts +14 -0
- package/dist/components/CustomTextarea.js +35 -0
- package/dist/components/CustomToast.d.ts +10 -0
- package/dist/components/CustomToast.js +6 -0
- package/dist/components/DatePicker/CustomDatePicker.d.ts +24 -0
- package/dist/components/DatePicker/CustomDatePicker.js +628 -0
- package/dist/components/Pagination/CustomPagination.d.ts +50 -0
- package/dist/components/Pagination/CustomPagination.js +159 -0
- package/dist/components/ThemeToggle.d.ts +1 -0
- package/dist/components/ThemeToggle.js +30 -0
- package/dist/components/index.d.ts +30 -0
- package/dist/components/index.js +30 -0
- package/dist/contexts/ThemeContext.d.ts +18 -0
- package/dist/contexts/ThemeContext.js +34 -0
- package/dist/examples/CodeViewer.d.ts +8 -0
- package/dist/examples/CodeViewer.js +7 -0
- package/dist/examples/FormikExample.d.ts +2 -0
- package/dist/examples/FormikExample.js +199 -0
- package/dist/examples/NumberInputExample.d.ts +2 -0
- package/dist/examples/NumberInputExample.js +198 -0
- package/dist/examples/ReactHookFormExample.d.ts +2 -0
- package/dist/examples/ReactHookFormExample.js +217 -0
- package/dist/examples/SimpleFormExample.d.ts +2 -0
- package/dist/examples/SimpleFormExample.js +216 -0
- package/dist/examples/TabsExample.d.ts +2 -0
- package/dist/examples/TabsExample.js +182 -0
- package/dist/examples/index.d.ts +6 -0
- package/dist/examples/index.js +6 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.js +32 -0
- package/dist/providers/LsCKFrontProvider.d.ts +6 -0
- package/dist/providers/LsCKFrontProvider.js +7 -0
- package/dist/stories/Londrisoft/Components/Accordion/CustomAccordionGroup.stories.d.ts +13 -0
- package/dist/stories/Londrisoft/Components/Accordion/CustomAccordionGroup.stories.js +787 -0
- package/dist/stories/Londrisoft/Components/Accordion/CustomAccordionItem.stories.d.ts +13 -0
- package/dist/stories/Londrisoft/Components/Accordion/CustomAccordionItem.stories.js +759 -0
- package/dist/stories/Londrisoft/Components/Checkbox/CustomCheckBox.stories.d.ts +15 -0
- package/dist/stories/Londrisoft/Components/Checkbox/CustomCheckBox.stories.js +770 -0
- package/dist/stories/Londrisoft/Components/Checkbox/CustomCheckboxGroup.stories.d.ts +33 -0
- package/dist/stories/Londrisoft/Components/Checkbox/CustomCheckboxGroup.stories.js +2152 -0
- package/dist/stories/Londrisoft/Components/CustomAlertDialog.stories.d.ts +24 -0
- package/dist/stories/Londrisoft/Components/CustomAlertDialog.stories.js +462 -0
- package/dist/stories/Londrisoft/Components/CustomAutoComplete.stories.d.ts +41 -0
- package/dist/stories/Londrisoft/Components/CustomAutoComplete.stories.js +1135 -0
- package/dist/stories/Londrisoft/Components/CustomBadge.stories.d.ts +21 -0
- package/dist/stories/Londrisoft/Components/CustomBadge.stories.js +546 -0
- package/dist/stories/Londrisoft/Components/CustomButton.stories.d.ts +17 -0
- package/dist/stories/Londrisoft/Components/CustomButton.stories.js +1099 -0
- package/dist/stories/Londrisoft/Components/CustomCard.stories.d.ts +17 -0
- package/dist/stories/Londrisoft/Components/CustomCard.stories.js +687 -0
- package/dist/stories/Londrisoft/Components/CustomDrawer.stories.d.ts +24 -0
- package/dist/stories/Londrisoft/Components/CustomDrawer.stories.js +521 -0
- package/dist/stories/Londrisoft/Components/CustomIconButton.stories.d.ts +14 -0
- package/dist/stories/Londrisoft/Components/CustomIconButton.stories.js +1024 -0
- package/dist/stories/Londrisoft/Components/CustomInput.stories.d.ts +15 -0
- package/dist/stories/Londrisoft/Components/CustomInput.stories.js +1094 -0
- package/dist/stories/Londrisoft/Components/CustomInputNumber.stories.d.ts +11 -0
- package/dist/stories/Londrisoft/Components/CustomInputNumber.stories.js +676 -0
- package/dist/stories/Londrisoft/Components/CustomList.stories.d.ts +18 -0
- package/dist/stories/Londrisoft/Components/CustomList.stories.js +1353 -0
- package/dist/stories/Londrisoft/Components/CustomLoadingCenterPage.stories.d.ts +17 -0
- package/dist/stories/Londrisoft/Components/CustomLoadingCenterPage.stories.js +304 -0
- package/dist/stories/Londrisoft/Components/CustomModal.stories.d.ts +19 -0
- package/dist/stories/Londrisoft/Components/CustomModal.stories.js +631 -0
- package/dist/stories/Londrisoft/Components/CustomModalNfe.stories.d.ts +19 -0
- package/dist/stories/Londrisoft/Components/CustomModalNfe.stories.js +589 -0
- package/dist/stories/Londrisoft/Components/CustomMultSelect.stories.d.ts +15 -0
- package/dist/stories/Londrisoft/Components/CustomMultSelect.stories.js +447 -0
- package/dist/stories/Londrisoft/Components/CustomMultipleInputs.stories.d.ts +15 -0
- package/dist/stories/Londrisoft/Components/CustomMultipleInputs.stories.js +1068 -0
- package/dist/stories/Londrisoft/Components/CustomPopover.stories.d.ts +10 -0
- package/dist/stories/Londrisoft/Components/CustomPopover.stories.js +208 -0
- package/dist/stories/Londrisoft/Components/CustomSelect.stories.d.ts +27 -0
- package/dist/stories/Londrisoft/Components/CustomSelect.stories.js +1086 -0
- package/dist/stories/Londrisoft/Components/CustomSkeleton.stories.d.ts +25 -0
- package/dist/stories/Londrisoft/Components/CustomSkeleton.stories.js +534 -0
- package/dist/stories/Londrisoft/Components/CustomSwitch.stories.d.ts +15 -0
- package/dist/stories/Londrisoft/Components/CustomSwitch.stories.js +422 -0
- package/dist/stories/Londrisoft/Components/CustomTable.stories.d.ts +43 -0
- package/dist/stories/Londrisoft/Components/CustomTable.stories.js +2121 -0
- package/dist/stories/Londrisoft/Components/CustomTabs.stories.d.ts +19 -0
- package/dist/stories/Londrisoft/Components/CustomTabs.stories.js +866 -0
- package/dist/stories/Londrisoft/Components/CustomTextarea.stories.d.ts +21 -0
- package/dist/stories/Londrisoft/Components/CustomTextarea.stories.js +408 -0
- package/dist/stories/Londrisoft/Components/CustomToast.stories.d.ts +21 -0
- package/dist/stories/Londrisoft/Components/CustomToast.stories.js +1041 -0
- package/dist/stories/Londrisoft/Components/DatePicker/CustomDatePicker.stories.d.ts +17 -0
- package/dist/stories/Londrisoft/Components/DatePicker/CustomDatePicker.stories.js +653 -0
- package/dist/stories/Londrisoft/Components/Pagination/CustomPagination.stories.d.ts +17 -0
- package/dist/stories/Londrisoft/Components/Pagination/CustomPagination.stories.js +429 -0
- package/dist/stories/Londrisoft/Components/Radio/CustomRadioGroup.stories.d.ts +22 -0
- package/dist/stories/Londrisoft/Components/Radio/CustomRadioGroup.stories.js +766 -0
- package/dist/stories/Londrisoft/Examples/IntegrationExamples.stories.d.ts +16 -0
- package/dist/stories/Londrisoft/Examples/IntegrationExamples.stories.js +514 -0
- package/dist/stories/Londrisoft/Theme/ThemeShowcase.stories.d.ts +5 -0
- package/dist/stories/Londrisoft/Theme/ThemeShowcase.stories.js +112 -0
- package/dist/stories/options.d.ts +13 -0
- package/dist/stories/options.js +124 -0
- package/dist/theme/bime.d.ts +92 -0
- package/dist/theme/bime.js +352 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/theme/index.js +8 -0
- package/dist/theme/waipe.d.ts +102 -0
- package/dist/theme/waipe.js +362 -0
- package/package.json +53 -0
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Button, VStack, Text, Box, HStack } from "@chakra-ui/react";
|
|
4
|
+
import { CustomModalNfe, StatusNFeResumeEnum, } from "../../../components/CustomModalNfe";
|
|
5
|
+
const meta = {
|
|
6
|
+
title: "Londrisoft/Components/CustomModalNfe",
|
|
7
|
+
component: CustomModalNfe,
|
|
8
|
+
tags: ["autodocs"],
|
|
9
|
+
args: {
|
|
10
|
+
isOpen: false,
|
|
11
|
+
onClose: () => { },
|
|
12
|
+
size: "2xl",
|
|
13
|
+
nfSelected: {
|
|
14
|
+
serie: "001",
|
|
15
|
+
nfnumero: 123456,
|
|
16
|
+
modelo: 55,
|
|
17
|
+
dataemissao: "2024-01-15T10:30:00Z",
|
|
18
|
+
datacancelado: "",
|
|
19
|
+
clicnpj: "12.345.678/0001-90",
|
|
20
|
+
agente: 1,
|
|
21
|
+
nomagente: "João Silva",
|
|
22
|
+
pedido: 789,
|
|
23
|
+
totalnota: 1500.75,
|
|
24
|
+
chave_nfe: "35200112345678000190550000001234567890123456",
|
|
25
|
+
tpamb: "1",
|
|
26
|
+
cliemail: "cliente@exemplo.com",
|
|
27
|
+
mensagem: "",
|
|
28
|
+
status: "100",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
argTypes: {
|
|
32
|
+
isOpen: {
|
|
33
|
+
control: { type: "boolean" },
|
|
34
|
+
description: "Controla se o modal está aberto ou fechado. Deve ser gerenciado pelo componente pai.",
|
|
35
|
+
table: { category: "State" },
|
|
36
|
+
},
|
|
37
|
+
onClose: {
|
|
38
|
+
action: "closed",
|
|
39
|
+
description: "Função callback chamada quando o modal é fechado (clique no X, ESC, overlay, etc.).",
|
|
40
|
+
table: { category: "Events" },
|
|
41
|
+
},
|
|
42
|
+
size: {
|
|
43
|
+
control: { type: "select", options: ["sm", "md", "lg", "xl", "2xl"] },
|
|
44
|
+
description: "Tamanho do modal (largura do ModalContent). Padrão: '2xl'.",
|
|
45
|
+
table: { category: "Appearance" },
|
|
46
|
+
},
|
|
47
|
+
nfSelected: {
|
|
48
|
+
control: "object",
|
|
49
|
+
description: "Objeto com os dados da nota fiscal a ser exibida. Deve seguir a interface NFeNotaItem.",
|
|
50
|
+
table: { category: "Content" },
|
|
51
|
+
},
|
|
52
|
+
bodyOptions: {
|
|
53
|
+
control: "text",
|
|
54
|
+
description: "Conteúdo adicional opcional a ser exibido no corpo do modal. Aceita ReactNode.",
|
|
55
|
+
table: { category: "Content" },
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
parameters: {
|
|
59
|
+
docs: {
|
|
60
|
+
description: {
|
|
61
|
+
component: `
|
|
62
|
+
**CustomModalNfe** é um componente modal especializado para exibição de detalhes de Nota Fiscal Eletrônica (NFe), com suporte a diferentes status e formatação automática de dados.
|
|
63
|
+
|
|
64
|
+
## Características Principais
|
|
65
|
+
|
|
66
|
+
- **Especializado em NFe**: Componente específico para exibição de dados de notas fiscais
|
|
67
|
+
- **Status Visuais**: Suporte a 6 status diferentes com cores e ícones específicos
|
|
68
|
+
- **Formatação Automática**: Formatação automática de chave de acesso (44 dígitos)
|
|
69
|
+
- **Cópia de Chave**: Funcionalidade de copiar chave de acesso com feedback visual
|
|
70
|
+
- **Layout Responsivo**: Campos organizados em grid flexível
|
|
71
|
+
- **Acessibilidade**: Implementação completa de ARIA labels e navegação por teclado
|
|
72
|
+
- **Extensível**: Suporte a conteúdo customizado via \`bodyOptions\`
|
|
73
|
+
- **Integração com Toast**: Feedback visual ao copiar chave de acesso
|
|
74
|
+
|
|
75
|
+
## Casos de Uso Comuns
|
|
76
|
+
|
|
77
|
+
- **Visualização de NFe**: Exibir detalhes completos de uma nota fiscal
|
|
78
|
+
- **Status de Processamento**: Mostrar status atual da nota (aprovada, cancelada, etc.)
|
|
79
|
+
- **Cópia de Chave**: Permitir copiar chave de acesso para uso externo
|
|
80
|
+
- **Detalhes de Emissão**: Exibir série, número, modelo e data de emissão
|
|
81
|
+
- **Mensagens de Erro**: Exibir mensagens quando a nota contém "Arquivo XML"
|
|
82
|
+
|
|
83
|
+
## Benefícios de UX
|
|
84
|
+
|
|
85
|
+
- **Feedback Visual Imediato**: Status claros com cores e ícones
|
|
86
|
+
- **Ações Rápidas**: Cópia de chave com um clique
|
|
87
|
+
- **Informação Organizada**: Layout claro e hierárquico
|
|
88
|
+
- **Acessibilidade**: Suporte completo para usuários com necessidades especiais
|
|
89
|
+
- **Consistência**: Padrão visual uniforme para todas as NFe
|
|
90
|
+
|
|
91
|
+
## Status Suportados
|
|
92
|
+
|
|
93
|
+
- **100 (APPROVED)**: Nota fiscal aprovada - verde (alert.success)
|
|
94
|
+
- **101 (CANCELED)**: Nota fiscal cancelada - vermelho (alert.error)
|
|
95
|
+
- **102 (INUTILIZED)**: Nota fiscal inutilizada - vermelho (alert.error)
|
|
96
|
+
- **103 (DENIED)**: Nota fiscal não autorizada - amarelo (alert.warning)
|
|
97
|
+
- **104 (NOT_TRANSMITTED)**: Nota fiscal não transmitida - amarelo (alert.warning)
|
|
98
|
+
- **105 (WITH_ERROR)**: Nota fiscal rejeitada - amarelo (alert.warning)
|
|
99
|
+
`,
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
backgrounds: {
|
|
103
|
+
default: "light",
|
|
104
|
+
values: [
|
|
105
|
+
{ name: "light", value: "#ffffff" },
|
|
106
|
+
{ name: "dark", value: "#000000" },
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
a11y: {
|
|
110
|
+
element: "#root",
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
export default meta;
|
|
115
|
+
/** 🎯 Default: Exemplo básico do CustomModalNfe */
|
|
116
|
+
export const Default = {
|
|
117
|
+
name: "Padrão",
|
|
118
|
+
render: (args) => {
|
|
119
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
120
|
+
return (_jsxs(VStack, { spacing: 4, children: [_jsx(Button, { onClick: () => setIsOpen(true), children: "Abrir Modal NFe" }), _jsx(CustomModalNfe, Object.assign({}, args, { isOpen: isOpen, onClose: () => setIsOpen(false) }))] }));
|
|
121
|
+
},
|
|
122
|
+
parameters: {
|
|
123
|
+
docs: {
|
|
124
|
+
description: {
|
|
125
|
+
story: `
|
|
126
|
+
**Exemplo básico** do CustomModalNfe com configuração padrão.
|
|
127
|
+
|
|
128
|
+
**Características:**
|
|
129
|
+
- Modal com tamanho 2xl (padrão)
|
|
130
|
+
- Exibe dados básicos da nota fiscal
|
|
131
|
+
- Status aprovado (100)
|
|
132
|
+
- Chave de acesso formatada
|
|
133
|
+
- Botão de fechar funcional
|
|
134
|
+
|
|
135
|
+
**Casos de uso:**
|
|
136
|
+
- Visualização rápida de NFe
|
|
137
|
+
- Detalhes de nota aprovada
|
|
138
|
+
- Consulta de informações básicas
|
|
139
|
+
|
|
140
|
+
**Dicas de implementação:**
|
|
141
|
+
- Gerencie o estado \`isOpen\` no componente pai
|
|
142
|
+
- Forneça todos os dados obrigatórios em \`nfSelected\`
|
|
143
|
+
- Use \`onClose\` para atualizar o estado de abertura
|
|
144
|
+
`,
|
|
145
|
+
},
|
|
146
|
+
source: {
|
|
147
|
+
code: `
|
|
148
|
+
import React, { useState } from 'react';
|
|
149
|
+
import { CustomModalNfe, StatusNFeResumeEnum, NFeNotaItem } from './CustomModalNfe';
|
|
150
|
+
import { Button } from '@chakra-ui/react';
|
|
151
|
+
|
|
152
|
+
const BasicModalNfe = () => {
|
|
153
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
154
|
+
|
|
155
|
+
const nfData: NFeNotaItem = {
|
|
156
|
+
serie: "001",
|
|
157
|
+
nfnumero: 123456,
|
|
158
|
+
modelo: 55,
|
|
159
|
+
dataemissao: "2024-01-15T10:30:00Z",
|
|
160
|
+
datacancelado: "",
|
|
161
|
+
clicnpj: "12.345.678/0001-90",
|
|
162
|
+
agente: 1,
|
|
163
|
+
nomagente: "João Silva",
|
|
164
|
+
pedido: 789,
|
|
165
|
+
totalnota: 1500.75,
|
|
166
|
+
chave_nfe: "35200112345678000190550000001234567890123456",
|
|
167
|
+
tpamb: "1",
|
|
168
|
+
cliemail: "cliente@exemplo.com",
|
|
169
|
+
mensagem: "",
|
|
170
|
+
status: "100",
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
return (
|
|
174
|
+
<>
|
|
175
|
+
<Button onClick={() => setIsOpen(true)}>Abrir Modal NFe</Button>
|
|
176
|
+
<CustomModalNfe
|
|
177
|
+
isOpen={isOpen}
|
|
178
|
+
onClose={() => setIsOpen(false)}
|
|
179
|
+
nfSelected={nfData}
|
|
180
|
+
/>
|
|
181
|
+
</>
|
|
182
|
+
);
|
|
183
|
+
};
|
|
184
|
+
`,
|
|
185
|
+
language: "tsx",
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
/** 📊 Status: Demonstração de diferentes status */
|
|
191
|
+
export const Status = {
|
|
192
|
+
name: "Status",
|
|
193
|
+
render: () => {
|
|
194
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
195
|
+
const [currentStatus, setCurrentStatus] = useState(StatusNFeResumeEnum.APPROVED);
|
|
196
|
+
const baseNfData = {
|
|
197
|
+
serie: "001",
|
|
198
|
+
nfnumero: 123456,
|
|
199
|
+
modelo: 55,
|
|
200
|
+
dataemissao: "2024-01-15T10:30:00Z",
|
|
201
|
+
datacancelado: "",
|
|
202
|
+
clicnpj: "12.345.678/0001-90",
|
|
203
|
+
agente: 1,
|
|
204
|
+
nomagente: "João Silva",
|
|
205
|
+
pedido: 789,
|
|
206
|
+
totalnota: 1500.75,
|
|
207
|
+
chave_nfe: "35200112345678000190550000001234567890123456",
|
|
208
|
+
tpamb: "1",
|
|
209
|
+
cliemail: "cliente@exemplo.com",
|
|
210
|
+
mensagem: "",
|
|
211
|
+
status: String(currentStatus),
|
|
212
|
+
};
|
|
213
|
+
const statusOptions = [
|
|
214
|
+
{ value: StatusNFeResumeEnum.APPROVED, label: "Aprovada (100)" },
|
|
215
|
+
{ value: StatusNFeResumeEnum.CANCELED, label: "Cancelada (101)" },
|
|
216
|
+
{ value: StatusNFeResumeEnum.INUTILIZED, label: "Inutilizada (102)" },
|
|
217
|
+
{ value: StatusNFeResumeEnum.DENIED, label: "Não Autorizada (103)" },
|
|
218
|
+
{ value: StatusNFeResumeEnum.NOT_TRANSMITTED, label: "Não Transmitida (104)" },
|
|
219
|
+
{ value: StatusNFeResumeEnum.WITH_ERROR, label: "Rejeitada (105)" },
|
|
220
|
+
];
|
|
221
|
+
return (_jsxs(VStack, { spacing: 6, align: "stretch", children: [_jsxs(Box, { children: [_jsx(Text, { fontSize: "lg", fontWeight: "bold", mb: 3, children: "Selecione um Status" }), _jsx(HStack, { spacing: 2, flexWrap: "wrap", children: statusOptions.map((option) => (_jsx(Button, { size: "sm", onClick: () => {
|
|
222
|
+
setCurrentStatus(option.value);
|
|
223
|
+
setIsOpen(true);
|
|
224
|
+
}, colorScheme: currentStatus === option.value ? "blue" : "gray", children: option.label }, option.value))) })] }), _jsx(CustomModalNfe, { isOpen: isOpen, onClose: () => setIsOpen(false), nfSelected: baseNfData })] }));
|
|
225
|
+
},
|
|
226
|
+
parameters: {
|
|
227
|
+
docs: {
|
|
228
|
+
description: {
|
|
229
|
+
story: `
|
|
230
|
+
**Demonstração** dos diferentes status de NFe e suas representações visuais.
|
|
231
|
+
|
|
232
|
+
**Status disponíveis:**
|
|
233
|
+
|
|
234
|
+
1. **Aprovada (100)**
|
|
235
|
+
- Cor: Verde (alert.success)
|
|
236
|
+
- Ícone: CheckCircle2Icon
|
|
237
|
+
- Mensagem: "Nota fiscal aprovada"
|
|
238
|
+
|
|
239
|
+
2. **Cancelada (101)**
|
|
240
|
+
- Cor: Vermelho (alert.error)
|
|
241
|
+
- Ícone: XCircle
|
|
242
|
+
- Mensagem: "Nota fiscal cancelada"
|
|
243
|
+
|
|
244
|
+
3. **Inutilizada (102)**
|
|
245
|
+
- Cor: Vermelho (alert.error)
|
|
246
|
+
- Ícone: CircleSlash
|
|
247
|
+
- Mensagem: "Nota fiscal inutilizada"
|
|
248
|
+
|
|
249
|
+
4. **Não Autorizada (103)**
|
|
250
|
+
- Cor: Amarelo (alert.warning)
|
|
251
|
+
- Ícone: XCircle
|
|
252
|
+
- Mensagem: "Nota fiscal não autorizada"
|
|
253
|
+
|
|
254
|
+
5. **Não Transmitida (104)**
|
|
255
|
+
- Cor: Amarelo (alert.warning)
|
|
256
|
+
- Ícone: XCircle
|
|
257
|
+
- Mensagem: "Nota fiscal não transmitida"
|
|
258
|
+
|
|
259
|
+
6. **Rejeitada (105)**
|
|
260
|
+
- Cor: Amarelo (alert.warning)
|
|
261
|
+
- Ícone: XCircle
|
|
262
|
+
- Mensagem: "Nota fiscal rejeitada"
|
|
263
|
+
|
|
264
|
+
**Casos de uso:**
|
|
265
|
+
- Visualizar status atual da nota
|
|
266
|
+
- Identificar problemas rapidamente
|
|
267
|
+
- Feedback visual imediato
|
|
268
|
+
|
|
269
|
+
**Dicas de implementação:**
|
|
270
|
+
- Use cores consistentes para facilitar identificação
|
|
271
|
+
- Ícones ajudam na compreensão rápida
|
|
272
|
+
- Mensagens devem ser claras e objetivas
|
|
273
|
+
`,
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
/** 📋 Com Mensagem XML: Exibe textarea quando há mensagem com "Arquivo XML" */
|
|
279
|
+
export const WithXmlMessage = {
|
|
280
|
+
name: "Com Mensagem XML",
|
|
281
|
+
render: () => {
|
|
282
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
283
|
+
const nfDataWithMessage = {
|
|
284
|
+
serie: "001",
|
|
285
|
+
nfnumero: 123456,
|
|
286
|
+
modelo: 55,
|
|
287
|
+
dataemissao: "2024-01-15T10:30:00Z",
|
|
288
|
+
datacancelado: "",
|
|
289
|
+
clicnpj: "12.345.678/0001-90",
|
|
290
|
+
agente: 1,
|
|
291
|
+
nomagente: "João Silva",
|
|
292
|
+
pedido: 789,
|
|
293
|
+
totalnota: 1500.75,
|
|
294
|
+
chave_nfe: "35200112345678000190550000001234567890123456",
|
|
295
|
+
tpamb: "1",
|
|
296
|
+
cliemail: "cliente@exemplo.com",
|
|
297
|
+
mensagem: "Arquivo XML não encontrado ou inválido. Verifique os dados e tente novamente.",
|
|
298
|
+
status: "105",
|
|
299
|
+
};
|
|
300
|
+
return (_jsxs(VStack, { spacing: 4, children: [_jsx(Button, { onClick: () => setIsOpen(true), children: "Abrir Modal com Mensagem XML" }), _jsx(CustomModalNfe, { isOpen: isOpen, onClose: () => setIsOpen(false), nfSelected: nfDataWithMessage })] }));
|
|
301
|
+
},
|
|
302
|
+
parameters: {
|
|
303
|
+
docs: {
|
|
304
|
+
description: {
|
|
305
|
+
story: `
|
|
306
|
+
**Demonstração** do comportamento quando a mensagem contém "Arquivo XML".
|
|
307
|
+
|
|
308
|
+
**Comportamento:**
|
|
309
|
+
- Quando \`mensagem\` contém "Arquivo XML", exibe \`CustomTextarea\` em vez de \`CustomInput\`
|
|
310
|
+
- Textarea permite visualizar mensagens longas
|
|
311
|
+
- Campo de chave de acesso não é exibido quando há mensagem XML
|
|
312
|
+
|
|
313
|
+
**Casos de uso:**
|
|
314
|
+
- Erros relacionados a arquivo XML
|
|
315
|
+
- Mensagens de validação longas
|
|
316
|
+
- Informações detalhadas sobre problemas
|
|
317
|
+
|
|
318
|
+
**Dicas de implementação:**
|
|
319
|
+
- Use mensagens claras e descritivas
|
|
320
|
+
- Considere truncamento para mensagens muito longas
|
|
321
|
+
- Forneça contexto suficiente para o usuário resolver o problema
|
|
322
|
+
`,
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
/** 🎨 Com Conteúdo Customizado: Usando bodyOptions */
|
|
328
|
+
export const WithCustomContent = {
|
|
329
|
+
name: "Com Conteúdo Customizado",
|
|
330
|
+
render: () => {
|
|
331
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
332
|
+
const nfData = {
|
|
333
|
+
serie: "001",
|
|
334
|
+
nfnumero: 123456,
|
|
335
|
+
modelo: 55,
|
|
336
|
+
dataemissao: "2024-01-15T10:30:00Z",
|
|
337
|
+
datacancelado: "",
|
|
338
|
+
clicnpj: "12.345.678/0001-90",
|
|
339
|
+
agente: 1,
|
|
340
|
+
nomagente: "João Silva",
|
|
341
|
+
pedido: 789,
|
|
342
|
+
totalnota: 1500.75,
|
|
343
|
+
chave_nfe: "35200112345678000190550000001234567890123456",
|
|
344
|
+
tpamb: "1",
|
|
345
|
+
cliemail: "cliente@exemplo.com",
|
|
346
|
+
mensagem: "",
|
|
347
|
+
status: "100",
|
|
348
|
+
};
|
|
349
|
+
const customBodyContent = (_jsxs(Box, { mt: 4, p: 4, bg: "gray.50", borderRadius: "md", children: [_jsx(Text, { fontSize: "sm", fontWeight: "bold", mb: 2, children: "Informa\u00E7\u00F5es Adicionais" }), _jsxs(VStack, { align: "stretch", spacing: 2, children: [_jsxs(Text, { fontSize: "xs", children: [_jsx("strong", { children: "CNPJ Cliente:" }), " ", nfData.clicnpj] }), _jsxs(Text, { fontSize: "xs", children: [_jsx("strong", { children: "E-mail:" }), " ", nfData.cliemail] }), _jsxs(Text, { fontSize: "xs", children: [_jsx("strong", { children: "Pedido:" }), " ", nfData.pedido] }), _jsxs(Text, { fontSize: "xs", children: [_jsx("strong", { children: "Total:" }), " R$ ", nfData.totalnota.toFixed(2)] })] })] }));
|
|
350
|
+
return (_jsxs(VStack, { spacing: 4, children: [_jsx(Button, { onClick: () => setIsOpen(true), children: "Abrir Modal com Conte\u00FAdo Customizado" }), _jsx(CustomModalNfe, { isOpen: isOpen, onClose: () => setIsOpen(false), nfSelected: nfData, bodyOptions: customBodyContent })] }));
|
|
351
|
+
},
|
|
352
|
+
parameters: {
|
|
353
|
+
docs: {
|
|
354
|
+
description: {
|
|
355
|
+
story: `
|
|
356
|
+
**Demonstração** do uso de \`bodyOptions\` para adicionar conteúdo customizado.
|
|
357
|
+
|
|
358
|
+
**Funcionalidades:**
|
|
359
|
+
- \`bodyOptions\` permite adicionar qualquer ReactNode após os campos padrão
|
|
360
|
+
- Útil para informações adicionais, ações, ou conteúdo específico
|
|
361
|
+
- Mantém o layout consistente com o resto do modal
|
|
362
|
+
|
|
363
|
+
**Casos de uso:**
|
|
364
|
+
- Informações adicionais da nota
|
|
365
|
+
- Botões de ação (download, reenvio, etc.)
|
|
366
|
+
- Histórico de eventos
|
|
367
|
+
- Links relacionados
|
|
368
|
+
|
|
369
|
+
**Dicas de implementação:**
|
|
370
|
+
- Use para informações complementares
|
|
371
|
+
- Mantenha consistência visual
|
|
372
|
+
- Considere responsividade
|
|
373
|
+
- Não abuse - mantenha o modal focado
|
|
374
|
+
`,
|
|
375
|
+
},
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
};
|
|
379
|
+
/** 📏 Tamanhos: Demonstração de diferentes tamanhos */
|
|
380
|
+
export const Sizes = {
|
|
381
|
+
name: "Tamanhos",
|
|
382
|
+
render: () => {
|
|
383
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
384
|
+
const [currentSize, setCurrentSize] = useState("2xl");
|
|
385
|
+
const nfData = {
|
|
386
|
+
serie: "001",
|
|
387
|
+
nfnumero: 123456,
|
|
388
|
+
modelo: 55,
|
|
389
|
+
dataemissao: "2024-01-15T10:30:00Z",
|
|
390
|
+
datacancelado: "",
|
|
391
|
+
clicnpj: "12.345.678/0001-90",
|
|
392
|
+
agente: 1,
|
|
393
|
+
nomagente: "João Silva",
|
|
394
|
+
pedido: 789,
|
|
395
|
+
totalnota: 1500.75,
|
|
396
|
+
chave_nfe: "35200112345678000190550000001234567890123456",
|
|
397
|
+
tpamb: "1",
|
|
398
|
+
cliemail: "cliente@exemplo.com",
|
|
399
|
+
mensagem: "",
|
|
400
|
+
status: "100",
|
|
401
|
+
};
|
|
402
|
+
const sizes = ["sm", "md", "lg", "xl", "2xl"];
|
|
403
|
+
return (_jsxs(VStack, { spacing: 6, align: "stretch", children: [_jsxs(Box, { children: [_jsx(Text, { fontSize: "lg", fontWeight: "bold", mb: 3, children: "Selecione um Tamanho" }), _jsx(HStack, { spacing: 2, flexWrap: "wrap", children: sizes.map((size) => (_jsx(Button, { size: "sm", onClick: () => {
|
|
404
|
+
setCurrentSize(size);
|
|
405
|
+
setIsOpen(true);
|
|
406
|
+
}, colorScheme: currentSize === size ? "blue" : "gray", children: size.toUpperCase() }, size))) })] }), _jsx(CustomModalNfe, { isOpen: isOpen, onClose: () => setIsOpen(false), nfSelected: nfData, size: currentSize })] }));
|
|
407
|
+
},
|
|
408
|
+
parameters: {
|
|
409
|
+
docs: {
|
|
410
|
+
description: {
|
|
411
|
+
story: `
|
|
412
|
+
**Demonstração** dos diferentes tamanhos disponíveis para o modal.
|
|
413
|
+
|
|
414
|
+
**Tamanhos disponíveis:**
|
|
415
|
+
- **sm**: Pequeno - ideal para informações mínimas
|
|
416
|
+
- **md**: Médio - uso geral
|
|
417
|
+
- **lg**: Grande - mais espaço para conteúdo
|
|
418
|
+
- **xl**: Extra grande - muito espaço
|
|
419
|
+
- **2xl**: Extra extra grande (padrão) - máximo espaço para NFe
|
|
420
|
+
|
|
421
|
+
**Casos de uso por tamanho:**
|
|
422
|
+
- **sm/md**: Visualização rápida em telas pequenas
|
|
423
|
+
- **lg/xl**: Uso geral em desktop
|
|
424
|
+
- **2xl**: Padrão recomendado para NFe (mais informações)
|
|
425
|
+
|
|
426
|
+
**Dicas de implementação:**
|
|
427
|
+
- Use 2xl como padrão para NFe (mais informações)
|
|
428
|
+
- Considere responsividade em telas menores
|
|
429
|
+
- Teste em diferentes resoluções
|
|
430
|
+
`,
|
|
431
|
+
},
|
|
432
|
+
},
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
/** 🔍 Casos Extremos: Edge cases e valores inválidos */
|
|
436
|
+
export const EdgeCases = {
|
|
437
|
+
name: "Casos Extremos",
|
|
438
|
+
render: () => {
|
|
439
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
440
|
+
const [testCase, setTestCase] = useState("short");
|
|
441
|
+
const testCases = {
|
|
442
|
+
short: {
|
|
443
|
+
serie: "1",
|
|
444
|
+
nfnumero: 1,
|
|
445
|
+
modelo: 1,
|
|
446
|
+
dataemissao: "2024-01-01T00:00:00Z",
|
|
447
|
+
chave_nfe: "12345678901234567890123456789012345678901234",
|
|
448
|
+
status: "100",
|
|
449
|
+
},
|
|
450
|
+
long: {
|
|
451
|
+
serie: "999",
|
|
452
|
+
nfnumero: 999999999,
|
|
453
|
+
modelo: 999,
|
|
454
|
+
dataemissao: "2024-12-31T23:59:59Z",
|
|
455
|
+
chave_nfe: "35200112345678000190550000001234567890123456",
|
|
456
|
+
status: "100",
|
|
457
|
+
},
|
|
458
|
+
invalid: {
|
|
459
|
+
serie: "",
|
|
460
|
+
nfnumero: 0,
|
|
461
|
+
modelo: 0,
|
|
462
|
+
dataemissao: "invalid-date",
|
|
463
|
+
chave_nfe: "123", // chave inválida (menos de 44 caracteres)
|
|
464
|
+
status: "999", // status inválido
|
|
465
|
+
},
|
|
466
|
+
};
|
|
467
|
+
const nfData = Object.assign(Object.assign({}, testCases[testCase]), { datacancelado: "", clicnpj: "12.345.678/0001-90", agente: 1, nomagente: "João Silva", pedido: 789, totalnota: 1500.75, tpamb: "1", cliemail: "cliente@exemplo.com", mensagem: "" });
|
|
468
|
+
return (_jsxs(VStack, { spacing: 6, align: "stretch", children: [_jsxs(Box, { children: [_jsx(Text, { fontSize: "lg", fontWeight: "bold", mb: 3, children: "Teste Casos Extremos" }), _jsxs(HStack, { spacing: 2, flexWrap: "wrap", children: [_jsx(Button, { size: "sm", onClick: () => {
|
|
469
|
+
setTestCase("short");
|
|
470
|
+
setIsOpen(true);
|
|
471
|
+
}, colorScheme: testCase === "short" ? "blue" : "gray", children: "Valores M\u00EDnimos" }), _jsx(Button, { size: "sm", onClick: () => {
|
|
472
|
+
setTestCase("long");
|
|
473
|
+
setIsOpen(true);
|
|
474
|
+
}, colorScheme: testCase === "long" ? "blue" : "gray", children: "Valores M\u00E1ximos" }), _jsx(Button, { size: "sm", onClick: () => {
|
|
475
|
+
setTestCase("invalid");
|
|
476
|
+
setIsOpen(true);
|
|
477
|
+
}, colorScheme: testCase === "invalid" ? "blue" : "gray", children: "Valores Inv\u00E1lidos" })] })] }), _jsx(CustomModalNfe, { isOpen: isOpen, onClose: () => setIsOpen(false), nfSelected: nfData })] }));
|
|
478
|
+
},
|
|
479
|
+
parameters: {
|
|
480
|
+
docs: {
|
|
481
|
+
description: {
|
|
482
|
+
story: `
|
|
483
|
+
**Demonstração** de como o modal lida com casos extremos e valores inválidos.
|
|
484
|
+
|
|
485
|
+
**Casos testados:**
|
|
486
|
+
|
|
487
|
+
1. **Valores Mínimos:**
|
|
488
|
+
- Série, número e modelo com valores mínimos
|
|
489
|
+
- Chave de acesso válida (44 caracteres)
|
|
490
|
+
- Status válido
|
|
491
|
+
|
|
492
|
+
2. **Valores Máximos:**
|
|
493
|
+
- Série, número e modelo com valores máximos
|
|
494
|
+
- Chave de acesso válida
|
|
495
|
+
- Data no limite
|
|
496
|
+
|
|
497
|
+
3. **Valores Inválidos:**
|
|
498
|
+
- Campos vazios ou zero
|
|
499
|
+
- Chave de acesso inválida (< 44 caracteres)
|
|
500
|
+
- Status inválido (999)
|
|
501
|
+
- Data inválida
|
|
502
|
+
|
|
503
|
+
**Comportamento esperado:**
|
|
504
|
+
- Chave de acesso com menos de 44 caracteres não é formatada
|
|
505
|
+
- Status inválido usa ícone padrão (XCircle)
|
|
506
|
+
- Campos vazios são exibidos como estão
|
|
507
|
+
- Data inválida pode causar erro na formatação
|
|
508
|
+
|
|
509
|
+
**Dicas de implementação:**
|
|
510
|
+
- Valide dados antes de passar para o modal
|
|
511
|
+
- Trate casos extremos no componente pai
|
|
512
|
+
- Forneça valores padrão quando apropriado
|
|
513
|
+
`,
|
|
514
|
+
},
|
|
515
|
+
},
|
|
516
|
+
},
|
|
517
|
+
};
|
|
518
|
+
/** ♿ Acessibilidade: Demonstração de recursos de acessibilidade */
|
|
519
|
+
export const Accessibility = {
|
|
520
|
+
name: "Acessibilidade",
|
|
521
|
+
render: () => {
|
|
522
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
523
|
+
const nfData = {
|
|
524
|
+
serie: "001",
|
|
525
|
+
nfnumero: 123456,
|
|
526
|
+
modelo: 55,
|
|
527
|
+
dataemissao: "2024-01-15T10:30:00Z",
|
|
528
|
+
datacancelado: "",
|
|
529
|
+
clicnpj: "12.345.678/0001-90",
|
|
530
|
+
agente: 1,
|
|
531
|
+
nomagente: "João Silva",
|
|
532
|
+
pedido: 789,
|
|
533
|
+
totalnota: 1500.75,
|
|
534
|
+
chave_nfe: "35200112345678000190550000001234567890123456",
|
|
535
|
+
tpamb: "1",
|
|
536
|
+
cliemail: "cliente@exemplo.com",
|
|
537
|
+
mensagem: "",
|
|
538
|
+
status: "100",
|
|
539
|
+
};
|
|
540
|
+
return (_jsxs(VStack, { spacing: 4, children: [_jsxs(Box, { p: 4, bg: "blue.50", borderRadius: "md", maxW: "600px", children: [_jsx(Text, { fontSize: "sm", fontWeight: "bold", mb: 2, children: "Recursos de Acessibilidade" }), _jsxs(VStack, { align: "stretch", spacing: 2, fontSize: "xs", children: [_jsxs(Text, { children: ["\u2022 ", _jsx("strong", { children: "ARIA labels:" }), " aria-labelledby e aria-describedby configurados"] }), _jsxs(Text, { children: ["\u2022 ", _jsx("strong", { children: "Navega\u00E7\u00E3o por teclado:" }), " ESC fecha o modal, Tab navega entre elementos"] }), _jsxs(Text, { children: ["\u2022 ", _jsx("strong", { children: "Foco:" }), " Retorna ao elemento anterior ao fechar"] }), _jsxs(Text, { children: ["\u2022 ", _jsx("strong", { children: "Bot\u00E3o fechar:" }), " Acess\u00EDvel via teclado (Enter ou Espa\u00E7o)"] }), _jsxs(Text, { children: ["\u2022 ", _jsx("strong", { children: "\u00CDcone copiar:" }), " Acess\u00EDvel via teclado com aria-label"] }), _jsxs(Text, { children: ["\u2022 ", _jsx("strong", { children: "Sem\u00E2ntica:" }), " Uso correto de roles e labels"] })] })] }), _jsx(Button, { onClick: () => setIsOpen(true), children: "Abrir Modal (Teste Acessibilidade)" }), _jsx(CustomModalNfe, { isOpen: isOpen, onClose: () => setIsOpen(false), nfSelected: nfData })] }));
|
|
541
|
+
},
|
|
542
|
+
parameters: {
|
|
543
|
+
docs: {
|
|
544
|
+
description: {
|
|
545
|
+
story: `
|
|
546
|
+
**Demonstração** dos recursos de acessibilidade implementados no modal.
|
|
547
|
+
|
|
548
|
+
**Recursos de Acessibilidade:**
|
|
549
|
+
|
|
550
|
+
1. **ARIA Labels:**
|
|
551
|
+
- \`aria-labelledby="modal-nfe-title"\` - vincula título ao modal
|
|
552
|
+
- \`aria-describedby="modal-nfe-description"\` - vincula descrição ao modal
|
|
553
|
+
- \`aria-label\` nos botões de ação
|
|
554
|
+
|
|
555
|
+
2. **Navegação por Teclado:**
|
|
556
|
+
- **ESC**: Fecha o modal
|
|
557
|
+
- **Tab**: Navega entre elementos focáveis
|
|
558
|
+
- **Enter/Espaço**: Ativa botões e ações
|
|
559
|
+
|
|
560
|
+
3. **Foco:**
|
|
561
|
+
- Foco automático no primeiro elemento ao abrir
|
|
562
|
+
- Retorna foco ao elemento anterior ao fechar
|
|
563
|
+
- Gerenciamento correto de foco durante interações
|
|
564
|
+
|
|
565
|
+
4. **Semântica:**
|
|
566
|
+
- Uso correto de \`role="button"\` em elementos clicáveis
|
|
567
|
+
- \`tabIndex={0}\` em elementos interativos
|
|
568
|
+
- Labels descritivos para leitores de tela
|
|
569
|
+
|
|
570
|
+
5. **Leitores de Tela:**
|
|
571
|
+
- Anúncio correto do título e descrição
|
|
572
|
+
- Feedback ao copiar chave de acesso
|
|
573
|
+
- Navegação lógica entre elementos
|
|
574
|
+
|
|
575
|
+
**Conformidade WCAG:**
|
|
576
|
+
- ✅ Nível A: Contraste, navegação, labels
|
|
577
|
+
- ✅ Nível AA: Foco visível, teclado, semântica
|
|
578
|
+
- ✅ Boas práticas: Feedback, orientação, consistência
|
|
579
|
+
|
|
580
|
+
**Dicas de implementação:**
|
|
581
|
+
- Teste com leitores de tela (NVDA, JAWS, VoiceOver)
|
|
582
|
+
- Valide com ferramentas de acessibilidade
|
|
583
|
+
- Mantenha labels atualizados
|
|
584
|
+
- Teste navegação apenas por teclado
|
|
585
|
+
`,
|
|
586
|
+
},
|
|
587
|
+
},
|
|
588
|
+
},
|
|
589
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import { MultiSelectLikeSelect } from "../../../components/CustomMultSelect";
|
|
3
|
+
declare const meta: Meta<typeof MultiSelectLikeSelect>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof MultiSelectLikeSelect>;
|
|
6
|
+
/** 🎯 Exemplo básico do CustomMultSelect */
|
|
7
|
+
export declare const Default: Story;
|
|
8
|
+
/** 🎨 Exemplo com diferentes tamanhos e configurações */
|
|
9
|
+
export declare const SizesAndConfigurations: Story;
|
|
10
|
+
/** 🏛️ Exemplo com bancos e conversão obrigatória */
|
|
11
|
+
export declare const AllBanks: Story;
|
|
12
|
+
/** 🎯 Exemplo controlado */
|
|
13
|
+
export declare const Controlled: Story;
|
|
14
|
+
/** 🎯 Exemplo com cenários reais */
|
|
15
|
+
export declare const RealWorldScenarios: Story;
|