@react-lgpd-consent/mui 0.5.0 → 0.6.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/dist/index.cjs +8 -5
- package/dist/index.d.cts +817 -74
- package/dist/index.d.ts +817 -74
- package/dist/index.js +8 -5
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -9,70 +9,299 @@ import { SnackbarProps } from '@mui/material/Snackbar';
|
|
|
9
9
|
import { FabProps } from '@mui/material/Fab';
|
|
10
10
|
import { DialogProps } from '@mui/material/Dialog';
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Propriedades para o componente Branding.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* Define como o branding da biblioteca ("fornecido por LÉdipO.eti.br")
|
|
17
|
+
* será exibido em diferentes contextos (banner ou modal).
|
|
18
|
+
*
|
|
19
|
+
* @category Components
|
|
20
|
+
* @public
|
|
21
|
+
* @since 1.0.0
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* <Branding variant="banner" />
|
|
26
|
+
* <Branding variant="modal" hidden={true} />
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
12
29
|
interface BrandingProps {
|
|
30
|
+
/**
|
|
31
|
+
* Variante de exibição do branding.
|
|
32
|
+
*
|
|
33
|
+
* @remarks
|
|
34
|
+
* - `banner`: Estilo otimizado para o CookieBanner (menor, alinhado à direita)
|
|
35
|
+
* - `modal`: Estilo otimizado para o PreferencesModal (com padding lateral)
|
|
36
|
+
*
|
|
37
|
+
* Cada variante aplica estilos específicos de tamanho, alinhamento e espaçamento.
|
|
38
|
+
*/
|
|
13
39
|
variant: 'banner' | 'modal';
|
|
40
|
+
/**
|
|
41
|
+
* Se `true`, oculta completamente o componente.
|
|
42
|
+
*
|
|
43
|
+
* @remarks
|
|
44
|
+
* Útil para controlar a visibilidade do branding dinamicamente sem
|
|
45
|
+
* remover o componente da árvore React.
|
|
46
|
+
*
|
|
47
|
+
* @defaultValue false
|
|
48
|
+
*/
|
|
14
49
|
hidden?: boolean;
|
|
15
50
|
}
|
|
16
51
|
/**
|
|
17
|
-
* Componente de branding
|
|
18
|
-
*
|
|
52
|
+
* Componente de branding que exibe crédito "fornecido por LÉdipO.eti.br".
|
|
53
|
+
*
|
|
54
|
+
* @component
|
|
55
|
+
* @category Components
|
|
56
|
+
* @public
|
|
57
|
+
* @since 1.0.0
|
|
58
|
+
*
|
|
59
|
+
* @remarks
|
|
60
|
+
* Este componente exibe uma assinatura discreta da biblioteca em banners e modais.
|
|
61
|
+
* É open-source e gratuito - o branding é uma forma de apoiar o projeto.
|
|
62
|
+
*
|
|
63
|
+
* ### Características
|
|
64
|
+
* - **Memoizado**: Evita re-renders desnecessários (props são estáveis)
|
|
65
|
+
* - **Design tokens**: Respeita cores customizadas do contexto
|
|
66
|
+
* - **Responsivo**: Adapta-se ao tema light/dark automaticamente
|
|
67
|
+
* - **SSR-safe**: Compatível com Server-Side Rendering
|
|
68
|
+
* - **Acessibilidade**: Link com `rel="noopener noreferrer"` para segurança
|
|
69
|
+
*
|
|
70
|
+
* ### Estilos por Variante
|
|
71
|
+
* - **Banner**: Menor (0.65rem), alinhado à direita, margem superior
|
|
72
|
+
* - **Modal**: Menor (0.65rem), alinhado à direita, padding lateral e inferior
|
|
73
|
+
*
|
|
74
|
+
* ### Visibilidade
|
|
75
|
+
* Pode ser ocultado via:
|
|
76
|
+
* - Prop `hidden={true}` (controle direto)
|
|
77
|
+
* - Prop `hideBranding={true}` no ConsentProvider (afeta todos os componentes)
|
|
78
|
+
*
|
|
79
|
+
* @param props - Propriedades do componente (tipado via BrandingProps)
|
|
80
|
+
* @returns Elemento JSX do branding ou null se oculto
|
|
81
|
+
*
|
|
82
|
+
* @example Uso no banner
|
|
83
|
+
* ```tsx
|
|
84
|
+
* <Branding variant="banner" />
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @example Uso no modal
|
|
88
|
+
* ```tsx
|
|
89
|
+
* <Branding variant="modal" />
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @example Oculto dinamicamente
|
|
93
|
+
* ```tsx
|
|
94
|
+
* const [showBranding, setShowBranding] = useState(true)
|
|
95
|
+
* <Branding variant="banner" hidden={!showBranding} />
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* @example Ocultar via Provider
|
|
99
|
+
* ```tsx
|
|
100
|
+
* <ConsentProvider
|
|
101
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
102
|
+
* hideBranding={true}
|
|
103
|
+
* >
|
|
104
|
+
* <App />
|
|
105
|
+
* </ConsentProvider>
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* @see {@link BrandingProps} - Interface de propriedades
|
|
109
|
+
* @see {@link CookieBanner} - Usa este componente internamente
|
|
110
|
+
* @see {@link PreferencesModal} - Usa este componente internamente
|
|
19
111
|
*/
|
|
20
112
|
declare const Branding: React.NamedExoticComponent<Readonly<BrandingProps>>;
|
|
21
113
|
|
|
22
114
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
115
|
+
* Propriedades do ConsentProvider com suporte a componentes Material-UI integrados.
|
|
116
|
+
*
|
|
117
|
+
* @remarks
|
|
118
|
+
* Estende as props do `ConsentProviderCore` com valores padrão para componentes UI.
|
|
119
|
+
* Este Provider é o ponto de entrada principal para uso da biblioteca com Material-UI,
|
|
120
|
+
* oferecendo uma experiência "batteries included" (tudo pronto para uso).
|
|
25
121
|
*
|
|
26
|
-
*
|
|
122
|
+
* ### Diferenças do Core
|
|
123
|
+
* - ✅ Injeção automática de `PreferencesModal`, `CookieBanner` e `FloatingPreferencesButton`
|
|
124
|
+
* - ✅ Suporte a tema Material-UI via `ThemeProvider`
|
|
125
|
+
* - ✅ Props dedicadas para desabilitar componentes padrão
|
|
126
|
+
* - ✅ Não requer configuração manual de componentes UI
|
|
127
|
+
*
|
|
128
|
+
* ### Quando Usar Este Provider
|
|
129
|
+
* - Você está usando Material-UI no seu projeto
|
|
130
|
+
* - Quer começar rápido com UI pronta
|
|
131
|
+
* - Prefere defaults sensatos com possibilidade de override
|
|
132
|
+
*
|
|
133
|
+
* ### Quando Usar o Core
|
|
134
|
+
* - Você quer controle total sobre a UI
|
|
135
|
+
* - Está usando outra biblioteca de UI (Chakra, Ant Design, etc.)
|
|
136
|
+
* - Prefere implementação headless
|
|
137
|
+
*
|
|
138
|
+
* @category Components
|
|
27
139
|
* @public
|
|
28
140
|
* @since 0.5.0
|
|
141
|
+
*
|
|
142
|
+
* @example Uso básico com defaults
|
|
143
|
+
* ```tsx
|
|
144
|
+
* import { ConsentProvider } from '@react-lgpd-consent/mui'
|
|
145
|
+
*
|
|
146
|
+
* <ConsentProvider categories={{ enabledCategories: ['analytics'] }}>
|
|
147
|
+
* <App />
|
|
148
|
+
* </ConsentProvider>
|
|
149
|
+
* ```
|
|
150
|
+
*
|
|
151
|
+
* @example Com tema customizado
|
|
152
|
+
* ```tsx
|
|
153
|
+
* import { createTheme } from '@mui/material/styles'
|
|
154
|
+
* import { ConsentProvider } from '@react-lgpd-consent/mui'
|
|
155
|
+
*
|
|
156
|
+
* const theme = createTheme({
|
|
157
|
+
* palette: {
|
|
158
|
+
* primary: { main: '#1976d2' }
|
|
159
|
+
* }
|
|
160
|
+
* })
|
|
161
|
+
*
|
|
162
|
+
* <ConsentProvider
|
|
163
|
+
* theme={theme}
|
|
164
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
165
|
+
* >
|
|
166
|
+
* <App />
|
|
167
|
+
* </ConsentProvider>
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* @example Desabilitando componentes padrão
|
|
171
|
+
* ```tsx
|
|
172
|
+
* <ConsentProvider
|
|
173
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
174
|
+
* disableDefaultModal={true}
|
|
175
|
+
* disableDefaultBanner={true}
|
|
176
|
+
* disableDefaultFloatingButton={true}
|
|
177
|
+
* >
|
|
178
|
+
* <App />
|
|
179
|
+
* </ConsentProvider>
|
|
180
|
+
* ```
|
|
29
181
|
*/
|
|
30
182
|
interface ConsentProviderProps extends ConsentProviderProps$1 {
|
|
31
183
|
/**
|
|
32
184
|
* Se `true`, desabilita a injeção automática do PreferencesModal.
|
|
33
|
-
* Use isso se quiser passar seu próprio modal via `PreferencesModalComponent`.
|
|
34
185
|
*
|
|
35
|
-
* @
|
|
186
|
+
* @remarks
|
|
187
|
+
* Use isso quando quiser passar seu próprio modal via `PreferencesModalComponent`
|
|
188
|
+
* ou quando quiser implementação totalmente headless.
|
|
189
|
+
*
|
|
190
|
+
* Quando `false` (padrão), o modal padrão do MUI é renderizado automaticamente
|
|
191
|
+
* quando o usuário clica em "Preferências" ou "Gerenciar".
|
|
192
|
+
*
|
|
193
|
+
* @defaultValue false
|
|
36
194
|
* @since 0.5.0
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```tsx
|
|
198
|
+
* function MyModal() {
|
|
199
|
+
* const { closePreferences } = useConsent()
|
|
200
|
+
* return <div>Meu modal customizado</div>
|
|
201
|
+
* }
|
|
202
|
+
*
|
|
203
|
+
* <ConsentProvider
|
|
204
|
+
* disableDefaultModal={true}
|
|
205
|
+
* PreferencesModalComponent={MyModal}
|
|
206
|
+
* >
|
|
207
|
+
* <App />
|
|
208
|
+
* </ConsentProvider>
|
|
209
|
+
* ```
|
|
37
210
|
*/
|
|
38
211
|
disableDefaultModal?: boolean;
|
|
39
212
|
/**
|
|
40
|
-
* Se `true`, desabilita a injeção automática do CookieBanner
|
|
41
|
-
*
|
|
213
|
+
* Se `true`, desabilita a injeção automática do CookieBanner.
|
|
214
|
+
*
|
|
215
|
+
* @remarks
|
|
216
|
+
* Útil quando você quer uma implementação própria de banner,
|
|
217
|
+
* mantendo outras integrações (modal, botão flutuante).
|
|
42
218
|
*
|
|
43
|
-
*
|
|
219
|
+
* Quando `false` (padrão), o banner padrão do MUI é renderizado
|
|
220
|
+
* automaticamente quando o usuário ainda não consentiu.
|
|
221
|
+
*
|
|
222
|
+
* @defaultValue false
|
|
44
223
|
* @since 0.5.0
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```tsx
|
|
227
|
+
* function MyBanner() {
|
|
228
|
+
* const { acceptAll, rejectAll } = useConsent()
|
|
229
|
+
* return <div>Meu banner customizado</div>
|
|
230
|
+
* }
|
|
231
|
+
*
|
|
232
|
+
* <ConsentProvider
|
|
233
|
+
* disableDefaultBanner={true}
|
|
234
|
+
* CookieBannerComponent={MyBanner}
|
|
235
|
+
* >
|
|
236
|
+
* <App />
|
|
237
|
+
* </ConsentProvider>
|
|
238
|
+
* ```
|
|
45
239
|
*/
|
|
46
240
|
disableDefaultBanner?: boolean;
|
|
47
241
|
/**
|
|
48
242
|
* Se `true`, desabilita a injeção automática do FloatingPreferencesButton.
|
|
49
|
-
* Normalmente não é necessário — `disableFloatingPreferencesButton` já oculta o botão.
|
|
50
243
|
*
|
|
51
|
-
* @
|
|
244
|
+
* @remarks
|
|
245
|
+
* Útil quando você quer controlar completamente como usuários reacessam
|
|
246
|
+
* suas preferências (ex: link no footer, menu de configurações).
|
|
247
|
+
*
|
|
248
|
+
* **Nota**: `disableFloatingPreferencesButton` do core também oculta o botão,
|
|
249
|
+
* mas esta prop impede completamente a renderização do componente.
|
|
250
|
+
*
|
|
251
|
+
* @defaultValue false
|
|
52
252
|
* @since 0.5.0
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```tsx
|
|
256
|
+
* <ConsentProvider
|
|
257
|
+
* disableDefaultFloatingButton={true}
|
|
258
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
259
|
+
* >
|
|
260
|
+
* <App />
|
|
261
|
+
* </ConsentProvider>
|
|
262
|
+
* ```
|
|
53
263
|
*/
|
|
54
264
|
disableDefaultFloatingButton?: boolean;
|
|
55
265
|
/**
|
|
56
|
-
* Tema Material-UI a ser aplicado ao redor dos componentes
|
|
266
|
+
* Tema Material-UI a ser aplicado ao redor dos componentes padrão.
|
|
57
267
|
*
|
|
58
268
|
* @remarks
|
|
59
|
-
* O tema é aplicado apenas nesta camada de apresentação
|
|
269
|
+
* O tema é aplicado apenas nesta camada de apresentação via `ThemeProvider`.
|
|
270
|
+
* O core permanece agnóstico de UI.
|
|
271
|
+
*
|
|
272
|
+
* Se você já tem um `ThemeProvider` no seu app, os componentes
|
|
273
|
+
* herdarão automaticamente. Esta prop é opcional e útil quando você quer
|
|
274
|
+
* um tema específico apenas para os componentes de consentimento.
|
|
275
|
+
*
|
|
276
|
+
* @defaultValue undefined (herda tema do contexto pai)
|
|
277
|
+
* @since 0.5.0
|
|
60
278
|
*
|
|
61
279
|
* @example
|
|
62
280
|
* ```tsx
|
|
63
|
-
*
|
|
64
|
-
* <ConsentProvider theme={theme} />
|
|
65
|
-
* ```
|
|
281
|
+
* import { createTheme } from '@mui/material/styles'
|
|
66
282
|
*
|
|
67
|
-
*
|
|
283
|
+
* const consentTheme = createTheme({
|
|
284
|
+
* palette: {
|
|
285
|
+
* primary: { main: '#2e7d32' },
|
|
286
|
+
* background: { paper: '#fafafa' }
|
|
287
|
+
* },
|
|
288
|
+
* typography: {
|
|
289
|
+
* fontFamily: 'Inter, sans-serif'
|
|
290
|
+
* }
|
|
291
|
+
* })
|
|
292
|
+
*
|
|
293
|
+
* <ConsentProvider
|
|
294
|
+
* theme={consentTheme}
|
|
295
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
296
|
+
* >
|
|
297
|
+
* <App />
|
|
298
|
+
* </ConsentProvider>
|
|
299
|
+
* ```
|
|
68
300
|
*/
|
|
69
301
|
theme?: Theme;
|
|
70
302
|
}
|
|
71
303
|
/**
|
|
72
|
-
* Provider de consentimento com componentes Material-UI integrados.
|
|
73
|
-
*
|
|
74
|
-
* Este componente é um wrapper sobre o `ConsentProvider` do core que automaticamente
|
|
75
|
-
* fornece um `PreferencesModal` padrão, tornando o setup mais simples.
|
|
304
|
+
* Provider de consentimento com componentes Material-UI integrados ("batteries included").
|
|
76
305
|
*
|
|
77
306
|
* @component
|
|
78
307
|
* @category Components
|
|
@@ -80,32 +309,97 @@ interface ConsentProviderProps extends ConsentProviderProps$1 {
|
|
|
80
309
|
* @since 0.5.0
|
|
81
310
|
*
|
|
82
311
|
* @remarks
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* - ✅ Ideal para uso rápido com Material-UI
|
|
312
|
+
* Este componente é um wrapper sobre o `ConsentProvider` do core que automaticamente
|
|
313
|
+
* injeta `PreferencesModal`, `CookieBanner` e `FloatingPreferencesButton` com estilos MUI,
|
|
314
|
+
* tornando o setup extremamente simples e rápido.
|
|
87
315
|
*
|
|
88
|
-
*
|
|
89
|
-
* -
|
|
90
|
-
* -
|
|
91
|
-
* -
|
|
316
|
+
* ### Características Principais
|
|
317
|
+
* - ✅ **Injeção Automática**: Renderiza modal, banner e botão flutuante sem configuração
|
|
318
|
+
* - ✅ **Tema Material-UI**: Aceita `theme` prop para customização de cores e tipografia
|
|
319
|
+
* - ✅ **Override Flexível**: Permite substituir componentes padrão via props `*Component`
|
|
320
|
+
* - ✅ **Desabilitar Seletivo**: Props `disable*` para controle granular de UI
|
|
321
|
+
* - ✅ **SSR-Safe**: Compatível com NextJS e outros frameworks SSR
|
|
322
|
+
* - ✅ **Tree-shakeable**: Apenas o que você usa é incluído no bundle
|
|
92
323
|
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
324
|
+
* ### Diferenças do Core Provider
|
|
325
|
+
* | Recurso | MUI Provider | Core Provider |
|
|
326
|
+
* |---------|--------------|---------------|
|
|
327
|
+
* | Modal padrão | ✅ Automático | ❌ Manual |
|
|
328
|
+
* | Banner padrão | ✅ Automático | ❌ Manual |
|
|
329
|
+
* | Botão flutuante | ✅ Automático | ❌ Manual |
|
|
330
|
+
* | Suporte a tema MUI | ✅ Sim | ❌ Não |
|
|
331
|
+
* | Tamanho bundle | ~104KB | ~86KB |
|
|
332
|
+
* | Headless | Via `disable*` | ✅ Nativo |
|
|
333
|
+
*
|
|
334
|
+
* ### Quando Usar Este Provider
|
|
335
|
+
* - ✅ Você está usando Material-UI no projeto
|
|
336
|
+
* - ✅ Quer começar rápido sem configurar UI
|
|
337
|
+
* - ✅ Prefere defaults sensatos com possibilidade de override
|
|
338
|
+
* - ✅ Precisa de acessibilidade pronta (ARIA labels, keyboard nav)
|
|
339
|
+
*
|
|
340
|
+
* ### Quando Usar o Core Provider
|
|
341
|
+
* - ❌ Você quer controle total sobre a UI
|
|
342
|
+
* - ❌ Está usando outra biblioteca (Chakra, Ant Design, Tailwind)
|
|
343
|
+
* - ❌ Precisa de bundle mínimo (~18KB a menos)
|
|
344
|
+
* - ❌ Quer implementação 100% headless
|
|
345
|
+
*
|
|
346
|
+
* ### Estrutura de Renderização
|
|
347
|
+
* ```
|
|
348
|
+
* ConsentProviderCore
|
|
349
|
+
* └─ ThemeProvider (se theme fornecido)
|
|
350
|
+
* ├─ children (sua aplicação)
|
|
351
|
+
* ├─ CookieBanner (se não desabilitado e sem consentimento)
|
|
352
|
+
* ├─ PreferencesModal (se não desabilitado e preferências abertas)
|
|
353
|
+
* └─ FloatingPreferencesButton (se não desabilitado)
|
|
354
|
+
* ```
|
|
355
|
+
*
|
|
356
|
+
* @param props - Propriedades do provider (estende ConsentProviderCoreProps)
|
|
357
|
+
* @returns Elemento React contendo o provider de contexto e componentes UI integrados
|
|
358
|
+
*
|
|
359
|
+
* @throws {Error} Se `categories.enabledCategories` não for fornecido (validação do core)
|
|
360
|
+
*
|
|
361
|
+
* @example Uso Básico (Modal + Banner + Botão Automáticos)
|
|
95
362
|
* ```tsx
|
|
96
363
|
* import { ConsentProvider } from '@react-lgpd-consent/mui'
|
|
97
364
|
*
|
|
98
365
|
* function App() {
|
|
99
366
|
* return (
|
|
100
|
-
* <ConsentProvider
|
|
367
|
+
* <ConsentProvider
|
|
368
|
+
* categories={{
|
|
369
|
+
* enabledCategories: ['analytics', 'marketing']
|
|
370
|
+
* }}
|
|
371
|
+
* >
|
|
101
372
|
* <YourApp />
|
|
102
373
|
* </ConsentProvider>
|
|
103
374
|
* )
|
|
104
375
|
* }
|
|
105
376
|
* ```
|
|
106
377
|
*
|
|
107
|
-
* @example
|
|
108
|
-
*
|
|
378
|
+
* @example Com Tema Customizado MUI
|
|
379
|
+
* ```tsx
|
|
380
|
+
* import { createTheme } from '@mui/material/styles'
|
|
381
|
+
* import { ConsentProvider } from '@react-lgpd-consent/mui'
|
|
382
|
+
*
|
|
383
|
+
* const theme = createTheme({
|
|
384
|
+
* palette: {
|
|
385
|
+
* primary: { main: '#2e7d32' },
|
|
386
|
+
* background: { paper: '#fafafa' }
|
|
387
|
+
* }
|
|
388
|
+
* })
|
|
389
|
+
*
|
|
390
|
+
* function App() {
|
|
391
|
+
* return (
|
|
392
|
+
* <ConsentProvider
|
|
393
|
+
* theme={theme}
|
|
394
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
395
|
+
* >
|
|
396
|
+
* <YourApp />
|
|
397
|
+
* </ConsentProvider>
|
|
398
|
+
* )
|
|
399
|
+
* }
|
|
400
|
+
* ```
|
|
401
|
+
*
|
|
402
|
+
* @example Override de Componentes Padrão
|
|
109
403
|
* ```tsx
|
|
110
404
|
* import { ConsentProvider, PreferencesModal } from '@react-lgpd-consent/mui'
|
|
111
405
|
*
|
|
@@ -116,6 +410,7 @@ interface ConsentProviderProps extends ConsentProviderProps$1 {
|
|
|
116
410
|
* PreferencesModalComponent={(props) => (
|
|
117
411
|
* <PreferencesModal {...props} hideBranding={true} />
|
|
118
412
|
* )}
|
|
413
|
+
* CookieBannerComponent={() => <div>Meu banner customizado</div>}
|
|
119
414
|
* >
|
|
120
415
|
* <YourApp />
|
|
121
416
|
* </ConsentProvider>
|
|
@@ -123,28 +418,55 @@ interface ConsentProviderProps extends ConsentProviderProps$1 {
|
|
|
123
418
|
* }
|
|
124
419
|
* ```
|
|
125
420
|
*
|
|
126
|
-
* @example
|
|
127
|
-
* **Desabilitar modal padrão (headless):**
|
|
421
|
+
* @example Modo Headless (Desabilitando UI Padrão)
|
|
128
422
|
* ```tsx
|
|
129
423
|
* import { ConsentProvider } from '@react-lgpd-consent/mui'
|
|
424
|
+
* import { useConsent } from '@react-lgpd-consent/core'
|
|
425
|
+
*
|
|
426
|
+
* function CustomUI() {
|
|
427
|
+
* const { acceptAll, rejectAll } = useConsent()
|
|
428
|
+
* return <div>Minha UI totalmente customizada</div>
|
|
429
|
+
* }
|
|
130
430
|
*
|
|
131
431
|
* function App() {
|
|
132
432
|
* return (
|
|
133
433
|
* <ConsentProvider
|
|
134
434
|
* categories={{ enabledCategories: ['analytics'] }}
|
|
135
435
|
* disableDefaultModal={true}
|
|
436
|
+
* disableDefaultBanner={true}
|
|
437
|
+
* disableDefaultFloatingButton={true}
|
|
136
438
|
* >
|
|
439
|
+
* <CustomUI />
|
|
137
440
|
* <YourApp />
|
|
138
441
|
* </ConsentProvider>
|
|
139
442
|
* )
|
|
140
443
|
* }
|
|
141
444
|
* ```
|
|
142
445
|
*
|
|
143
|
-
* @
|
|
144
|
-
*
|
|
446
|
+
* @example Com Callbacks de Eventos
|
|
447
|
+
* ```tsx
|
|
448
|
+
* function App() {
|
|
449
|
+
* return (
|
|
450
|
+
* <ConsentProvider
|
|
451
|
+
* categories={{ enabledCategories: ['analytics', 'marketing'] }}
|
|
452
|
+
* onConsentChange={(newState) => {
|
|
453
|
+
* console.log('Novo estado:', newState)
|
|
454
|
+
* // Enviar evento para analytics
|
|
455
|
+
* }}
|
|
456
|
+
* onPreferencesOpen={() => console.log('Modal aberto')}
|
|
457
|
+
* onPreferencesClose={() => console.log('Modal fechado')}
|
|
458
|
+
* >
|
|
459
|
+
* <YourApp />
|
|
460
|
+
* </ConsentProvider>
|
|
461
|
+
* )
|
|
462
|
+
* }
|
|
463
|
+
* ```
|
|
145
464
|
*
|
|
146
465
|
* @see {@link ConsentProviderCore} Para a versão headless sem UI
|
|
147
466
|
* @see {@link PreferencesModal} Para o componente de modal usado por padrão
|
|
467
|
+
* @see {@link CookieBanner} Para o componente de banner usado por padrão
|
|
468
|
+
* @see {@link FloatingPreferencesButton} Para o botão flutuante usado por padrão
|
|
469
|
+
* @see {@link https://mui.com/material-ui/customization/theming/ | MUI Theming Guide} Para customização de tema
|
|
148
470
|
*/
|
|
149
471
|
declare function ConsentProvider({ disableDefaultModal, disableDefaultBanner, disableDefaultFloatingButton, PreferencesModalComponent, CookieBannerComponent, FloatingPreferencesButtonComponent, theme, hideBranding, cookieBannerProps, preferencesModalProps, floatingPreferencesButtonProps, children, ...coreProps }: ConsentProviderProps): react_jsx_runtime.JSX.Element;
|
|
150
472
|
declare namespace ConsentProvider {
|
|
@@ -382,45 +704,268 @@ interface CookieBannerProps {
|
|
|
382
704
|
declare function CookieBanner({ policyLinkUrl, termsLinkUrl, debug, blocking, hideBranding, SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
|
|
383
705
|
|
|
384
706
|
/**
|
|
385
|
-
*
|
|
707
|
+
* Propriedades para customizar o comportamento e aparência do FloatingPreferencesButton.
|
|
708
|
+
*
|
|
709
|
+
* @remarks
|
|
710
|
+
* Interface que permite controle completo sobre o botão flutuante de preferências LGPD.
|
|
711
|
+
* O botão aparece após o consentimento inicial para permitir que usuários revisitem
|
|
712
|
+
* suas escolhas a qualquer momento.
|
|
713
|
+
*
|
|
714
|
+
* ### Posicionamento
|
|
715
|
+
* Suporta 4 posições fixas na tela:
|
|
716
|
+
* - `bottom-left`: Canto inferior esquerdo
|
|
717
|
+
* - `bottom-right`: Canto inferior direito (padrão)
|
|
718
|
+
* - `top-left`: Canto superior esquerdo
|
|
719
|
+
* - `top-right`: Canto superior direito
|
|
386
720
|
*
|
|
387
|
-
*
|
|
388
|
-
*
|
|
721
|
+
* ### Customização Visual
|
|
722
|
+
* - **Ícone**: Pode ser substituído por qualquer `ReactNode`
|
|
723
|
+
* - **Tooltip**: Texto exibido ao hover (padrão vem de `useConsentTexts`)
|
|
724
|
+
* - **Cores**: Respeita design tokens ou tema MUI
|
|
725
|
+
* - **Offset**: Distância da borda em pixels
|
|
389
726
|
*
|
|
390
|
-
*
|
|
727
|
+
* ### Comportamento
|
|
728
|
+
* - **Auto-hide**: Opcional via `hideWhenConsented` (padrão: `false`)
|
|
729
|
+
* - **Z-index**: 1200 (acima de conteúdo normal, abaixo de modais MUI)
|
|
730
|
+
* - **Transições**: Suaves via tema MUI
|
|
731
|
+
*
|
|
732
|
+
* @category Components
|
|
733
|
+
* @public
|
|
734
|
+
* @since 0.3.0
|
|
735
|
+
*
|
|
736
|
+
* @example Configuração básica
|
|
737
|
+
* ```tsx
|
|
738
|
+
* <FloatingPreferencesButton
|
|
739
|
+
* position="bottom-left"
|
|
740
|
+
* offset={16}
|
|
741
|
+
* />
|
|
742
|
+
* ```
|
|
743
|
+
*
|
|
744
|
+
* @example Customização avançada
|
|
745
|
+
* ```tsx
|
|
746
|
+
* import SettingsIcon from '@mui/icons-material/Settings'
|
|
747
|
+
*
|
|
748
|
+
* <FloatingPreferencesButton
|
|
749
|
+
* position="top-right"
|
|
750
|
+
* offset={32}
|
|
751
|
+
* icon={<SettingsIcon />}
|
|
752
|
+
* tooltip="Configurações de Privacidade"
|
|
753
|
+
* hideWhenConsented={true}
|
|
754
|
+
* FabProps={{
|
|
755
|
+
* size: 'large',
|
|
756
|
+
* color: 'secondary',
|
|
757
|
+
* sx: { boxShadow: 3 }
|
|
758
|
+
* }}
|
|
759
|
+
* />
|
|
760
|
+
* ```
|
|
391
761
|
*/
|
|
392
762
|
interface FloatingPreferencesButtonProps {
|
|
393
|
-
/**
|
|
763
|
+
/**
|
|
764
|
+
* Posição do botão flutuante na tela.
|
|
765
|
+
*
|
|
766
|
+
* @remarks
|
|
767
|
+
* Define o canto da viewport onde o botão será fixado.
|
|
768
|
+
* Usa `position: fixed` e responde a scroll da página.
|
|
769
|
+
*
|
|
770
|
+
* @defaultValue 'bottom-right'
|
|
771
|
+
*/
|
|
394
772
|
position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
|
|
395
|
-
/**
|
|
773
|
+
/**
|
|
774
|
+
* Offset (distância) da borda em pixels.
|
|
775
|
+
*
|
|
776
|
+
* @remarks
|
|
777
|
+
* Aplicado tanto horizontal quanto verticalmente dependendo da posição.
|
|
778
|
+
* Exemplo: `offset={24}` em `bottom-right` = 24px da direita e 24px do fundo.
|
|
779
|
+
*
|
|
780
|
+
* @defaultValue 24
|
|
781
|
+
*/
|
|
396
782
|
offset?: number;
|
|
397
|
-
/**
|
|
783
|
+
/**
|
|
784
|
+
* Ícone customizado para o botão.
|
|
785
|
+
*
|
|
786
|
+
* @remarks
|
|
787
|
+
* Pode ser qualquer ReactNode: ícone do MUI, SVG, imagem, texto, etc.
|
|
788
|
+
* Se omitido, usa `<CookieOutlined />` do Material-UI Icons.
|
|
789
|
+
*
|
|
790
|
+
* @defaultValue `<CookieOutlined />`
|
|
791
|
+
*
|
|
792
|
+
* @example
|
|
793
|
+
* ```tsx
|
|
794
|
+
* import SettingsIcon from '@mui/icons-material/Settings'
|
|
795
|
+
* <FloatingPreferencesButton icon={<SettingsIcon />} />
|
|
796
|
+
* ```
|
|
797
|
+
*/
|
|
398
798
|
icon?: React.ReactNode;
|
|
399
|
-
/**
|
|
799
|
+
/**
|
|
800
|
+
* Tooltip customizado exibido ao passar o mouse.
|
|
801
|
+
*
|
|
802
|
+
* @remarks
|
|
803
|
+
* Se omitido, usa o valor de `texts.preferencesButton` do contexto,
|
|
804
|
+
* com fallback para "Gerenciar Preferências de Cookies".
|
|
805
|
+
*
|
|
806
|
+
* @defaultValue undefined (usa texto do contexto)
|
|
807
|
+
*
|
|
808
|
+
* @example
|
|
809
|
+
* ```tsx
|
|
810
|
+
* <FloatingPreferencesButton tooltip="Configurações de Privacidade" />
|
|
811
|
+
* ```
|
|
812
|
+
*/
|
|
400
813
|
tooltip?: string;
|
|
401
|
-
/**
|
|
814
|
+
/**
|
|
815
|
+
* Props adicionais para o componente Fab do Material-UI.
|
|
816
|
+
*
|
|
817
|
+
* @remarks
|
|
818
|
+
* Permite customização completa do botão: tamanho, cor, elevação, sx, etc.
|
|
819
|
+
* Props passadas aqui sobrescrevem os defaults internos.
|
|
820
|
+
*
|
|
821
|
+
* @defaultValue undefined
|
|
822
|
+
*
|
|
823
|
+
* @example
|
|
824
|
+
* ```tsx
|
|
825
|
+
* <FloatingPreferencesButton
|
|
826
|
+
* FabProps={{
|
|
827
|
+
* size: 'large',
|
|
828
|
+
* color: 'secondary',
|
|
829
|
+
* variant: 'extended',
|
|
830
|
+
* sx: { borderRadius: 2 }
|
|
831
|
+
* }}
|
|
832
|
+
* />
|
|
833
|
+
* ```
|
|
834
|
+
*/
|
|
402
835
|
FabProps?: Partial<FabProps>;
|
|
403
|
-
/**
|
|
836
|
+
/**
|
|
837
|
+
* Se deve esconder o botão quando consentimento já foi dado.
|
|
838
|
+
*
|
|
839
|
+
* @remarks
|
|
840
|
+
* Útil para reduzir poluição visual após decisão inicial.
|
|
841
|
+
* Quando `true`, botão só aparece se `consented === false`.
|
|
842
|
+
*
|
|
843
|
+
* **Importante**: Mesmo escondido, usuário pode reabrir preferências
|
|
844
|
+
* via outras formas (ex: link no footer, menu de configurações).
|
|
845
|
+
*
|
|
846
|
+
* @defaultValue false
|
|
847
|
+
*/
|
|
404
848
|
hideWhenConsented?: boolean;
|
|
405
849
|
}
|
|
406
850
|
/**
|
|
851
|
+
* Componente interno do botão flutuante de preferências.
|
|
852
|
+
* @internal
|
|
853
|
+
* @category Components
|
|
854
|
+
* @param {FloatingPreferencesButtonProps} props - Propriedades do componente.
|
|
855
|
+
* @returns {JSX.Element | null} Elemento JSX do botão ou null se oculto.
|
|
856
|
+
* @remarks Memoiza estilos de posição para performance. Usa design tokens defensivamente.
|
|
857
|
+
*/
|
|
858
|
+
declare function FloatingPreferencesButtonComponent({ position, offset, icon, tooltip, FabProps, hideWhenConsented, }: Readonly<FloatingPreferencesButtonProps>): react_jsx_runtime.JSX.Element | null;
|
|
859
|
+
/**
|
|
860
|
+
* Botão flutuante (FAB) para reabrir o modal de preferências de consentimento LGPD.
|
|
861
|
+
*
|
|
407
862
|
* @component
|
|
408
863
|
* @category Components
|
|
864
|
+
* @public
|
|
409
865
|
* @since 0.3.0
|
|
410
|
-
* Botão flutuante para abrir o modal de preferências de cookies.
|
|
411
866
|
*
|
|
412
867
|
* @remarks
|
|
413
|
-
* Este componente
|
|
414
|
-
*
|
|
415
|
-
*
|
|
416
|
-
*
|
|
868
|
+
* Este componente fornece acesso rápido e sempre visível às preferências de consentimento,
|
|
869
|
+
* permitindo que usuários revisem e alterem suas escolhas a qualquer momento.
|
|
870
|
+
*
|
|
871
|
+
* ### Renderização Automática
|
|
872
|
+
* O botão é renderizado automaticamente pelo `ConsentProvider` após o consentimento inicial,
|
|
873
|
+
* a menos que desabilitado via `disableFloatingPreferencesButton={true}`.
|
|
874
|
+
*
|
|
875
|
+
* ### Funcionalidades
|
|
876
|
+
* - **Posição fixa**: Permanece visível durante scroll
|
|
877
|
+
* - **Z-index 1200**: Fica acima do conteúdo normal, abaixo de modais
|
|
878
|
+
* - **Tooltip acessível**: ARIA label e tooltip ao hover
|
|
879
|
+
* - **Responsivo**: Funciona em mobile e desktop
|
|
880
|
+
* - **Transições suaves**: Animação de cor ao hover via tema MUI
|
|
881
|
+
* - **Design tokens**: Respeita cores customizadas do contexto
|
|
882
|
+
*
|
|
883
|
+
* ### Customização
|
|
884
|
+
* Você pode:
|
|
885
|
+
* - Alterar posição e offset
|
|
886
|
+
* - Trocar o ícone padrão (cookie)
|
|
887
|
+
* - Modificar tooltip
|
|
888
|
+
* - Ocultar quando já consentido
|
|
889
|
+
* - Passar props customizadas para o Fab do MUI
|
|
890
|
+
*
|
|
891
|
+
* ### Substituição Completa
|
|
892
|
+
* Para controle total, passe seu próprio componente:
|
|
893
|
+
*
|
|
894
|
+
* ```tsx
|
|
895
|
+
* function MyCustomButton() {
|
|
896
|
+
* const { openPreferences } = useConsent()
|
|
897
|
+
* return <button onClick={openPreferences}>Preferências</button>
|
|
898
|
+
* }
|
|
899
|
+
*
|
|
900
|
+
* <ConsentProvider
|
|
901
|
+
* FloatingPreferencesButtonComponent={MyCustomButton}
|
|
902
|
+
* >
|
|
903
|
+
* <App />
|
|
904
|
+
* </ConsentProvider>
|
|
905
|
+
* ```
|
|
906
|
+
*
|
|
907
|
+
* @param props - Propriedades para customizar o botão (tipado via FloatingPreferencesButtonProps)
|
|
908
|
+
* @returns Elemento JSX do botão flutuante ou null se oculto
|
|
909
|
+
*
|
|
910
|
+
* @throws {Error} Se usado fora do ConsentProvider (contexto não disponível)
|
|
911
|
+
*
|
|
912
|
+
* @example Uso básico (renderizado automaticamente)
|
|
913
|
+
* ```tsx
|
|
914
|
+
* // ConsentProvider já renderiza FloatingPreferencesButton automaticamente
|
|
915
|
+
* <ConsentProvider categories={{ enabledCategories: ['analytics'] }}>
|
|
916
|
+
* <App />
|
|
917
|
+
* </ConsentProvider>
|
|
918
|
+
* ```
|
|
919
|
+
*
|
|
920
|
+
* @example Customização via props no Provider
|
|
921
|
+
* ```tsx
|
|
922
|
+
* <ConsentProvider
|
|
923
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
924
|
+
* floatingPreferencesButtonProps={{
|
|
925
|
+
* position: 'bottom-left',
|
|
926
|
+
* offset: 16,
|
|
927
|
+
* hideWhenConsented: true
|
|
928
|
+
* }}
|
|
929
|
+
* >
|
|
930
|
+
* <App />
|
|
931
|
+
* </ConsentProvider>
|
|
932
|
+
* ```
|
|
933
|
+
*
|
|
934
|
+
* @example Uso manual com ícone customizado
|
|
935
|
+
* ```tsx
|
|
936
|
+
* import SettingsIcon from '@mui/icons-material/Settings'
|
|
417
937
|
*
|
|
418
|
-
*
|
|
938
|
+
* function App() {
|
|
939
|
+
* return (
|
|
940
|
+
* <FloatingPreferencesButton
|
|
941
|
+
* position="top-right"
|
|
942
|
+
* icon={<SettingsIcon />}
|
|
943
|
+
* tooltip="Configurações de Privacidade"
|
|
944
|
+
* FabProps={{
|
|
945
|
+
* size: 'large',
|
|
946
|
+
* color: 'secondary'
|
|
947
|
+
* }}
|
|
948
|
+
* />
|
|
949
|
+
* )
|
|
950
|
+
* }
|
|
951
|
+
* ```
|
|
419
952
|
*
|
|
420
|
-
* @
|
|
421
|
-
*
|
|
953
|
+
* @example Desabilitar completamente
|
|
954
|
+
* ```tsx
|
|
955
|
+
* <ConsentProvider
|
|
956
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
957
|
+
* disableFloatingPreferencesButton={true}
|
|
958
|
+
* >
|
|
959
|
+
* <App />
|
|
960
|
+
* </ConsentProvider>
|
|
961
|
+
* ```
|
|
962
|
+
*
|
|
963
|
+
* @see {@link ConsentProvider} - Provider que renderiza este componente automaticamente
|
|
964
|
+
* @see {@link useConsent} - Hook para acessar função openPreferences
|
|
965
|
+
* @see {@link FloatingPreferencesButtonProps} - Interface completa de propriedades
|
|
966
|
+
* @see {@link PreferencesModal} - Modal aberto ao clicar no botão
|
|
422
967
|
*/
|
|
423
|
-
declare const FloatingPreferencesButton: React.
|
|
968
|
+
declare const FloatingPreferencesButton: React.MemoExoticComponent<typeof FloatingPreferencesButtonComponent>;
|
|
424
969
|
|
|
425
970
|
declare global {
|
|
426
971
|
/**
|
|
@@ -431,38 +976,236 @@ declare global {
|
|
|
431
976
|
var __LGPD_USED_INTEGRATIONS__: string[] | undefined;
|
|
432
977
|
}
|
|
433
978
|
/**
|
|
434
|
-
*
|
|
435
|
-
*
|
|
979
|
+
* Propriedades para customizar o comportamento e aparência do componente PreferencesModal.
|
|
980
|
+
*
|
|
981
|
+
* @remarks
|
|
982
|
+
* Esta interface permite controle total sobre o modal de preferências de consentimento LGPD.
|
|
983
|
+
* O modal pode ser usado de duas formas:
|
|
984
|
+
* - **Automático**: Renderizado pelo ConsentProvider quando usuário clica em "Preferências"
|
|
985
|
+
* - **Manual**: Controlado externamente via props `isModalOpen`, `preferences`, etc.
|
|
986
|
+
*
|
|
987
|
+
* ### Integração com Material-UI
|
|
988
|
+
* - Suporte completo a theming via `ThemeProvider`
|
|
989
|
+
* - Props diretas para Dialog do MUI via `DialogProps`
|
|
990
|
+
* - Compatibilidade com design tokens customizados
|
|
991
|
+
*
|
|
992
|
+
* @category Components
|
|
993
|
+
* @public
|
|
994
|
+
* @since 0.1.0
|
|
995
|
+
*
|
|
996
|
+
* @example Uso automático (renderizado pelo Provider)
|
|
997
|
+
* ```tsx
|
|
998
|
+
* <ConsentProvider
|
|
999
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
1000
|
+
* preferencesModalProps={{ hideBranding: true }}
|
|
1001
|
+
* >
|
|
1002
|
+
* <App />
|
|
1003
|
+
* </ConsentProvider>
|
|
1004
|
+
* ```
|
|
1005
|
+
*
|
|
1006
|
+
* @example Uso manual com controle externo
|
|
1007
|
+
* ```tsx
|
|
1008
|
+
* function CustomPreferencesModal() {
|
|
1009
|
+
* const [open, setOpen] = useState(false)
|
|
1010
|
+
* const { preferences, setPreferences } = useConsent()
|
|
1011
|
+
*
|
|
1012
|
+
* return (
|
|
1013
|
+
* <PreferencesModal
|
|
1014
|
+
* isModalOpen={open}
|
|
1015
|
+
* preferences={preferences}
|
|
1016
|
+
* setPreferences={setPreferences}
|
|
1017
|
+
* closePreferences={() => setOpen(false)}
|
|
1018
|
+
* DialogProps={{ maxWidth: 'md' }}
|
|
1019
|
+
* />
|
|
1020
|
+
* )
|
|
1021
|
+
* }
|
|
1022
|
+
* ```
|
|
436
1023
|
*/
|
|
437
1024
|
interface PreferencesModalProps {
|
|
438
|
-
/**
|
|
1025
|
+
/**
|
|
1026
|
+
* Propriedades opcionais para customizar o componente `Dialog` do Material-UI.
|
|
1027
|
+
*
|
|
1028
|
+
* @remarks
|
|
1029
|
+
* Permite customização avançada do comportamento do modal: posição, transição,
|
|
1030
|
+
* largura máxima, e outros atributos do Dialog do MUI.
|
|
1031
|
+
*
|
|
1032
|
+
* @defaultValue undefined
|
|
1033
|
+
*
|
|
1034
|
+
* @example
|
|
1035
|
+
* ```tsx
|
|
1036
|
+
* <PreferencesModal
|
|
1037
|
+
* DialogProps={{
|
|
1038
|
+
* maxWidth: 'md',
|
|
1039
|
+
* fullWidth: true,
|
|
1040
|
+
* TransitionComponent: Slide
|
|
1041
|
+
* }}
|
|
1042
|
+
* />
|
|
1043
|
+
* ```
|
|
1044
|
+
*/
|
|
439
1045
|
DialogProps?: Partial<DialogProps>;
|
|
440
|
-
/**
|
|
1046
|
+
/**
|
|
1047
|
+
* Se `true`, oculta a marca "fornecido por LÉdipO.eti.br" no modal.
|
|
1048
|
+
*
|
|
1049
|
+
* @remarks
|
|
1050
|
+
* A biblioteca é open-source e gratuita. O branding é uma forma de apoiar
|
|
1051
|
+
* o projeto, mas pode ser removido se necessário para sua marca.
|
|
1052
|
+
*
|
|
1053
|
+
* @defaultValue false
|
|
1054
|
+
*/
|
|
441
1055
|
hideBranding?: boolean;
|
|
442
|
-
/**
|
|
1056
|
+
/**
|
|
1057
|
+
* Estado de abertura do modal passado pelo Provider.
|
|
1058
|
+
*
|
|
1059
|
+
* @remarks
|
|
1060
|
+
* Quando fornecido via `PreferencesModalComponent` no ConsentProvider,
|
|
1061
|
+
* substitui o valor do hook `useConsent`. Permite controle externo do estado.
|
|
1062
|
+
*
|
|
1063
|
+
* @defaultValue undefined (usa valor do contexto)
|
|
1064
|
+
*/
|
|
443
1065
|
isModalOpen?: boolean;
|
|
444
|
-
/**
|
|
1066
|
+
/**
|
|
1067
|
+
* Preferências de consentimento passadas pelo Provider.
|
|
1068
|
+
*
|
|
1069
|
+
* @remarks
|
|
1070
|
+
* Quando fornecido via `PreferencesModalComponent`, permite sincronização
|
|
1071
|
+
* externa do estado de preferências. Se omitido, usa o contexto interno.
|
|
1072
|
+
*
|
|
1073
|
+
* @defaultValue undefined (usa valor do contexto)
|
|
1074
|
+
*/
|
|
445
1075
|
preferences?: ConsentPreferences;
|
|
446
|
-
/**
|
|
1076
|
+
/**
|
|
1077
|
+
* Função para atualizar preferências passada pelo Provider.
|
|
1078
|
+
*
|
|
1079
|
+
* @remarks
|
|
1080
|
+
* Permite override da função de atualização de preferências.
|
|
1081
|
+
* Útil para integração com gerenciadores de estado externos.
|
|
1082
|
+
*
|
|
1083
|
+
* @param preferences - Novas preferências de consentimento a serem aplicadas
|
|
1084
|
+
* @defaultValue undefined (usa função do contexto)
|
|
1085
|
+
*/
|
|
447
1086
|
setPreferences?: (preferences: ConsentPreferences) => void;
|
|
448
|
-
/**
|
|
1087
|
+
/**
|
|
1088
|
+
* Função para fechar o modal passada pelo Provider.
|
|
1089
|
+
*
|
|
1090
|
+
* @remarks
|
|
1091
|
+
* Callback invocado quando usuário cancela ou após salvar preferências.
|
|
1092
|
+
* Se omitido, usa a função do contexto.
|
|
1093
|
+
*
|
|
1094
|
+
* @defaultValue undefined (usa função do contexto)
|
|
1095
|
+
*/
|
|
449
1096
|
closePreferences?: () => void;
|
|
450
1097
|
}
|
|
451
1098
|
/**
|
|
452
|
-
*
|
|
1099
|
+
* Modal de preferências de consentimento LGPD que permite ao usuário ajustar suas escolhas.
|
|
1100
|
+
*
|
|
453
1101
|
* @component
|
|
454
1102
|
* @category Components
|
|
1103
|
+
* @public
|
|
455
1104
|
* @since 0.1.0
|
|
1105
|
+
*
|
|
456
1106
|
* @remarks
|
|
457
|
-
*
|
|
458
|
-
*
|
|
459
|
-
*
|
|
460
|
-
*
|
|
461
|
-
*
|
|
462
|
-
*
|
|
1107
|
+
* O `PreferencesModal` é o componente de UI que apresenta uma interface detalhada
|
|
1108
|
+
* para o usuário gerenciar suas preferências de consentimento categoria por categoria.
|
|
1109
|
+
*
|
|
1110
|
+
* ### Funcionalidades Principais
|
|
1111
|
+
* - **Toggles por categoria**: Switch para cada categoria não-essencial configurada
|
|
1112
|
+
* - **Categoria necessária bloqueada**: Sempre marcada e desabilitada (required by LGPD)
|
|
1113
|
+
* - **Detalhes de cookies**: Accordion expansível mostrando cookies por categoria
|
|
1114
|
+
* - **Mudanças temporárias**: Edições salvas localmente até confirmar com botão "Salvar"
|
|
1115
|
+
* - **Sincronização automática**: Recarrega estado ao abrir o modal
|
|
1116
|
+
* - **Acessibilidade**: ARIA labels, keyboard navigation, screen reader support
|
|
1117
|
+
*
|
|
1118
|
+
* ### Renderização Automática
|
|
1119
|
+
* Este modal é renderizado automaticamente pelo `ConsentProvider` quando o usuário
|
|
1120
|
+
* clica para gerenciar preferências. Não é necessário renderizá-lo manualmente,
|
|
1121
|
+
* a menos que deseje controle total sobre o comportamento.
|
|
1122
|
+
*
|
|
1123
|
+
* ### Customização
|
|
1124
|
+
* Você pode substituir este componente passando seu próprio para a prop
|
|
1125
|
+
* `PreferencesModalComponent` no `ConsentProvider`:
|
|
1126
|
+
*
|
|
1127
|
+
* ```tsx
|
|
1128
|
+
* function MyCustomModal() {
|
|
1129
|
+
* const { preferences, setPreferences, closePreferences } = useConsent()
|
|
1130
|
+
* return <div>Meu modal customizado</div>
|
|
1131
|
+
* }
|
|
1132
|
+
*
|
|
1133
|
+
* <ConsentProvider
|
|
1134
|
+
* PreferencesModalComponent={MyCustomModal}
|
|
1135
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
1136
|
+
* >
|
|
1137
|
+
* <App />
|
|
1138
|
+
* </ConsentProvider>
|
|
1139
|
+
* ```
|
|
1140
|
+
*
|
|
1141
|
+
* ### Informações de Cookies
|
|
1142
|
+
* O modal exibe automaticamente:
|
|
1143
|
+
* - **Nome do cookie**: Identificador único
|
|
1144
|
+
* - **Finalidade**: Para que serve (Analytics, Marketing, etc.)
|
|
1145
|
+
* - **Duração**: Tempo de vida (sessão, 1 ano, etc.)
|
|
1146
|
+
* - **Fornecedor**: Quem criou/gerencia (Google, Facebook, próprio site)
|
|
1147
|
+
*
|
|
1148
|
+
* Estas informações vêm das integrações ativas (via `getCookiesInfoForCategory`)
|
|
1149
|
+
* e das categorias configuradas no Provider.
|
|
1150
|
+
*
|
|
1151
|
+
* @param props - Propriedades para customizar o modal (tipado via PreferencesModalProps)
|
|
1152
|
+
* @returns Elemento JSX do modal de preferências ou null se não deve ser exibido
|
|
1153
|
+
*
|
|
1154
|
+
* @throws {Error} Se usado fora do ConsentProvider (contexto não disponível)
|
|
1155
|
+
*
|
|
1156
|
+
* @example Uso básico (renderizado automaticamente)
|
|
463
1157
|
* ```tsx
|
|
464
|
-
*
|
|
1158
|
+
* // ConsentProvider já renderiza PreferencesModal automaticamente
|
|
1159
|
+
* function App() {
|
|
1160
|
+
* return (
|
|
1161
|
+
* <ConsentProvider categories={{ enabledCategories: ['analytics'] }}>
|
|
1162
|
+
* <YourApp />
|
|
1163
|
+
* </ConsentProvider>
|
|
1164
|
+
* )
|
|
1165
|
+
* }
|
|
1166
|
+
* ```
|
|
1167
|
+
*
|
|
1168
|
+
* @example Customização via props
|
|
1169
|
+
* ```tsx
|
|
1170
|
+
* <ConsentProvider
|
|
1171
|
+
* categories={{ enabledCategories: ['analytics', 'marketing'] }}
|
|
1172
|
+
* preferencesModalProps={{
|
|
1173
|
+
* hideBranding: true,
|
|
1174
|
+
* DialogProps: {
|
|
1175
|
+
* maxWidth: 'md',
|
|
1176
|
+
* fullWidth: true
|
|
1177
|
+
* }
|
|
1178
|
+
* }}
|
|
1179
|
+
* >
|
|
1180
|
+
* <App />
|
|
1181
|
+
* </ConsentProvider>
|
|
465
1182
|
* ```
|
|
1183
|
+
*
|
|
1184
|
+
* @example Controle manual completo
|
|
1185
|
+
* ```tsx
|
|
1186
|
+
* function CustomApp() {
|
|
1187
|
+
* const [open, setOpen] = useState(false)
|
|
1188
|
+
* const { preferences, setPreferences } = useConsent()
|
|
1189
|
+
*
|
|
1190
|
+
* return (
|
|
1191
|
+
* <>
|
|
1192
|
+
* <button onClick={() => setOpen(true)}>Abrir Preferências</button>
|
|
1193
|
+
* <PreferencesModal
|
|
1194
|
+
* isModalOpen={open}
|
|
1195
|
+
* preferences={preferences}
|
|
1196
|
+
* setPreferences={setPreferences}
|
|
1197
|
+
* closePreferences={() => setOpen(false)}
|
|
1198
|
+
* DialogProps={{ maxWidth: 'lg' }}
|
|
1199
|
+
* />
|
|
1200
|
+
* </>
|
|
1201
|
+
* )
|
|
1202
|
+
* }
|
|
1203
|
+
* ```
|
|
1204
|
+
*
|
|
1205
|
+
* @see {@link ConsentProvider} - Provider que renderiza este componente automaticamente
|
|
1206
|
+
* @see {@link useConsent} - Hook para acessar funções de consentimento
|
|
1207
|
+
* @see {@link PreferencesModalProps} - Interface completa de propriedades
|
|
1208
|
+
* @see {@link getCookiesInfoForCategory} - Função que retorna informações de cookies
|
|
466
1209
|
*/
|
|
467
1210
|
declare function PreferencesModal({ DialogProps, hideBranding, isModalOpen: isModalOpenProp, preferences: preferencesProp, setPreferences: setPreferencesProp, closePreferences: closePreferencesProp, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
|
|
468
1211
|
|