@react-lgpd-consent/mui 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,469 @@
1
+ import { ConsentProviderProps as ConsentProviderProps$1, ConsentPreferences } from '@react-lgpd-consent/core';
2
+ export * from '@react-lgpd-consent/core';
3
+ export { ConsentProvider as ConsentProviderHeadless } from '@react-lgpd-consent/core';
4
+ import * as React from 'react';
5
+ import * as react_jsx_runtime from 'react/jsx-runtime';
6
+ import { Theme } from '@mui/material/styles';
7
+ import { PaperProps } from '@mui/material/Paper';
8
+ import { SnackbarProps } from '@mui/material/Snackbar';
9
+ import { FabProps } from '@mui/material/Fab';
10
+ import { DialogProps } from '@mui/material/Dialog';
11
+
12
+ interface BrandingProps {
13
+ variant: 'banner' | 'modal';
14
+ hidden?: boolean;
15
+ }
16
+ /**
17
+ * Componente de branding - memoizado para evitar re-renders desnecessários.
18
+ * Props são estáveis (variant, hidden) e hooks são otimizados.
19
+ */
20
+ declare const Branding: React.NamedExoticComponent<Readonly<BrandingProps>>;
21
+
22
+ /**
23
+ * Props do ConsentProvider com suporte a componentes MUI.
24
+ * Estende as props do core com valores padrão para componentes UI.
25
+ *
26
+ * @category Types
27
+ * @public
28
+ * @since 0.5.0
29
+ */
30
+ interface ConsentProviderProps extends ConsentProviderProps$1 {
31
+ /**
32
+ * Se `true`, desabilita a injeção automática do PreferencesModal.
33
+ * Use isso se quiser passar seu próprio modal via `PreferencesModalComponent`.
34
+ *
35
+ * @default false
36
+ * @since 0.5.0
37
+ */
38
+ disableDefaultModal?: boolean;
39
+ /**
40
+ * Se `true`, desabilita a injeção automática do CookieBanner padrão.
41
+ * Útil quando se deseja uma implementação própria, mantendo outras integrações.
42
+ *
43
+ * @default false
44
+ * @since 0.5.0
45
+ */
46
+ disableDefaultBanner?: boolean;
47
+ /**
48
+ * Se `true`, desabilita a injeção automática do FloatingPreferencesButton.
49
+ * Normalmente não é necessário — `disableFloatingPreferencesButton` já oculta o botão.
50
+ *
51
+ * @default false
52
+ * @since 0.5.0
53
+ */
54
+ disableDefaultFloatingButton?: boolean;
55
+ /**
56
+ * Tema Material-UI a ser aplicado ao redor dos componentes padrões.
57
+ *
58
+ * @remarks
59
+ * O tema é aplicado apenas nesta camada de apresentação. O core permanece agnóstico.
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * const theme = createTheme({ palette: { primary: { main: '#1976d2' } } })
64
+ * <ConsentProvider theme={theme} />
65
+ * ```
66
+ *
67
+ * @since 0.5.0
68
+ */
69
+ theme?: Theme;
70
+ }
71
+ /**
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.
76
+ *
77
+ * @component
78
+ * @category Components
79
+ * @public
80
+ * @since 0.5.0
81
+ *
82
+ * @remarks
83
+ * **Diferenças do Core:**
84
+ * - ✅ Automaticamente renderiza `PreferencesModal` quando o usuário clica em "Preferências"
85
+ * - ✅ Não requer configuração de `PreferencesModalComponent` (mas permite override)
86
+ * - ✅ Ideal para uso rápido com Material-UI
87
+ *
88
+ * **Quando usar o Core diretamente:**
89
+ * - ❌ Se você quiser controle total sobre qual modal renderizar
90
+ * - ❌ Se você estiver usando uma biblioteca de UI diferente
91
+ * - ❌ Se você quiser implementação headless
92
+ *
93
+ * @example
94
+ * **Uso Básico (Modal automático):**
95
+ * ```tsx
96
+ * import { ConsentProvider } from '@react-lgpd-consent/mui'
97
+ *
98
+ * function App() {
99
+ * return (
100
+ * <ConsentProvider categories={{ enabledCategories: ['analytics'] }}>
101
+ * <YourApp />
102
+ * </ConsentProvider>
103
+ * )
104
+ * }
105
+ * ```
106
+ *
107
+ * @example
108
+ * **Modal customizado:**
109
+ * ```tsx
110
+ * import { ConsentProvider, PreferencesModal } from '@react-lgpd-consent/mui'
111
+ *
112
+ * function App() {
113
+ * return (
114
+ * <ConsentProvider
115
+ * categories={{ enabledCategories: ['analytics'] }}
116
+ * PreferencesModalComponent={(props) => (
117
+ * <PreferencesModal {...props} hideBranding={true} />
118
+ * )}
119
+ * >
120
+ * <YourApp />
121
+ * </ConsentProvider>
122
+ * )
123
+ * }
124
+ * ```
125
+ *
126
+ * @example
127
+ * **Desabilitar modal padrão (headless):**
128
+ * ```tsx
129
+ * import { ConsentProvider } from '@react-lgpd-consent/mui'
130
+ *
131
+ * function App() {
132
+ * return (
133
+ * <ConsentProvider
134
+ * categories={{ enabledCategories: ['analytics'] }}
135
+ * disableDefaultModal={true}
136
+ * >
137
+ * <YourApp />
138
+ * </ConsentProvider>
139
+ * )
140
+ * }
141
+ * ```
142
+ *
143
+ * @param props - Props do provider incluindo categorias, textos, callbacks, etc.
144
+ * @returns Provider React com contexto de consentimento e UI integrada
145
+ *
146
+ * @see {@link ConsentProviderCore} Para a versão headless sem UI
147
+ * @see {@link PreferencesModal} Para o componente de modal usado por padrão
148
+ */
149
+ declare function ConsentProvider({ disableDefaultModal, disableDefaultBanner, disableDefaultFloatingButton, PreferencesModalComponent, CookieBannerComponent, FloatingPreferencesButtonComponent, theme, hideBranding, cookieBannerProps, preferencesModalProps, floatingPreferencesButtonProps, children, ...coreProps }: ConsentProviderProps): react_jsx_runtime.JSX.Element;
150
+ declare namespace ConsentProvider {
151
+ var displayName: string;
152
+ }
153
+
154
+ /**
155
+ * Propriedades para customizar o comportamento e aparência do componente CookieBanner.
156
+ *
157
+ * @remarks
158
+ * Esta interface permite controle completo sobre o banner de consentimento, desde
159
+ * o comportamento de exibição até a customização visual avançada. O banner pode
160
+ * operar em dois modos principais: bloqueante (modal) ou não-bloqueante (snackbar).
161
+ *
162
+ * ### Modos de Exibição
163
+ * - **Bloqueante** (`blocking: true`): Banner como modal sobreposto, impede interação
164
+ * - **Não-bloqueante** (`blocking: false`): Banner como snackbar, permite navegação
165
+ *
166
+ * ### Integração com Material-UI
167
+ * - Suporte completo a theming via `ThemeProvider`
168
+ * - Props diretas para componentes internos (`SnackbarProps`, `PaperProps`)
169
+ * - Compatibilidade com design tokens customizados
170
+ * - Responsividade automática em diferentes viewport sizes
171
+ *
172
+ * ### Debug e Desenvolvimento
173
+ * - Prop `debug` força exibição independente do estado de consentimento
174
+ * - Logging automático de interações do usuário quando ativo
175
+ * - Suporte a React DevTools para inspecionar props
176
+ *
177
+ * @example Configuração básica
178
+ * ```tsx
179
+ * <CookieBanner
180
+ * policyLinkUrl="/privacy-policy"
181
+ * blocking={false}
182
+ * />
183
+ * ```
184
+ *
185
+ * @example Configuração avançada com customização
186
+ * ```tsx
187
+ * <CookieBanner
188
+ * policyLinkUrl="https://example.com/cookies"
189
+ * blocking={true}
190
+ * hideBranding={true}
191
+ * debug={process.env.NODE_ENV === 'development'}
192
+ * SnackbarProps={{
193
+ * anchorOrigin: { vertical: 'top', horizontal: 'center' }
194
+ * }}
195
+ * PaperProps={{
196
+ * elevation: 8,
197
+ * sx: { borderRadius: 2 }
198
+ * }}
199
+ * />
200
+ * ```
201
+ *
202
+ * @public
203
+ * @since 0.1.0
204
+ */
205
+ interface CookieBannerProps {
206
+ /**
207
+ * URL para a política de privacidade ou cookies do site.
208
+ *
209
+ * @remarks
210
+ * Quando fornecida, aparece como link "Política de Privacidade" no banner.
211
+ * Link abre em nova aba/janela (`target="_blank"`) por segurança.
212
+ *
213
+ * @example "/privacy-policy" | "https://example.com/cookies"
214
+ */
215
+ policyLinkUrl?: string;
216
+ /**
217
+ * URL para os termos de uso do site (opcional). Quando fornecida, será considerada uma rota "segura"
218
+ * para não aplicar bloqueio total (overlay) mesmo em modo bloqueante.
219
+ */
220
+ termsLinkUrl?: string;
221
+ /**
222
+ * Força exibição do banner em modo de debug, independente do consentimento.
223
+ *
224
+ * @remarks
225
+ * Útil durante desenvolvimento para testar diferentes estados visuais.
226
+ * **Nunca deixe `true` em produção** - causará exibição permanente do banner.
227
+ *
228
+ * @defaultValue false
229
+ */
230
+ debug?: boolean;
231
+ /**
232
+ * Controla se o banner bloqueia interação com o restante da página.
233
+ *
234
+ * @remarks
235
+ * - `true`: Banner como modal/overlay, bloqueia interação até decisão
236
+ * - `false`: Banner como snackbar, permite navegação normal
237
+ *
238
+ * Banner bloqueante é mais eficaz para compliance, mas pode afetar UX.
239
+ *
240
+ * @defaultValue true
241
+ */
242
+ blocking?: boolean;
243
+ /**
244
+ * Oculta a marca "fornecido por LÉdipO.eti.br" no banner.
245
+ *
246
+ * @remarks
247
+ * A biblioteca é open-source e gratuita. O branding é uma forma de apoiar
248
+ * o projeto, mas pode ser removido se necessário para sua marca.
249
+ *
250
+ * @defaultValue false
251
+ */
252
+ hideBranding?: boolean;
253
+ /**
254
+ * Propriedades personalizadas para o componente Snackbar (modo não-bloqueante).
255
+ *
256
+ * @remarks
257
+ * Aplica-se apenas quando `blocking={false}`. Permite customização completa
258
+ * da posição, animação e comportamento do snackbar do Material-UI.
259
+ *
260
+ * @example
261
+ * ```tsx
262
+ * SnackbarProps={{
263
+ * anchorOrigin: { vertical: 'top', horizontal: 'center' },
264
+ * autoHideDuration: null, // Banner fica até decisão do usuário
265
+ * TransitionComponent: Slide
266
+ * }}
267
+ * ```
268
+ */
269
+ SnackbarProps?: Partial<SnackbarProps>;
270
+ /**
271
+ * Propriedades personalizadas para o componente Paper que envolve o conteúdo.
272
+ *
273
+ * @remarks
274
+ * Permite customização avançada da aparência: elevação, bordas, cores, etc.
275
+ * Aplicado em ambos os modos (bloqueante e não-bloqueante).
276
+ *
277
+ * @example
278
+ * ```tsx
279
+ * PaperProps={{
280
+ * elevation: 12,
281
+ * sx: {
282
+ * borderRadius: '16px',
283
+ * border: '2px solid',
284
+ * borderColor: 'primary.main'
285
+ * }
286
+ * }}
287
+ * ```
288
+ */
289
+ PaperProps?: Partial<PaperProps>;
290
+ }
291
+ /**
292
+ * Banner principal de consentimento LGPD que solicita decisão do usuário sobre cookies.
293
+ * @component
294
+ * @category Components
295
+ * @remarks
296
+ * O CookieBanner é o ponto de entrada principal para interação com o sistema de consentimento.
297
+ * Aparece automaticamente quando o usuário ainda não tomou decisão sobre cookies,
298
+ * oferecendo opções claras de aceitar, rejeitar ou personalizar preferências.
299
+ *
300
+ * ### Funcionalidades Principais
301
+ * - **Exibição condicional**: Aparece apenas se usuário não deu consentimento
302
+ * - **Duas modalidades**: Bloqueante (modal) ou não-bloqueante (snackbar)
303
+ * - **Ações do usuário**: Aceitar tudo, rejeitar tudo, ou abrir preferências
304
+ * - **Link para política**: Opção de link para política de privacidade
305
+ * - **Branding opcional**: Marca discreta "fornecido por LÉdipO.eti.br"
306
+ * - **Totalmente customizável**: Via props, tokens de design ou componente próprio
307
+ *
308
+ * ### Estados de Exibição
309
+ * - **Não exibido**: Usuário já consentiu ou ainda hidratando (SSR)
310
+ * - **Snackbar**: Modo não-bloqueante, permite interação com a página
311
+ * - **Modal**: Modo bloqueante, impede interação até decisão
312
+ * - **Debug**: Sempre visível independente do estado (desenvolvimento)
313
+ *
314
+ * ### Integração com Sistema
315
+ * - Conecta automaticamente com `ConsentProvider`
316
+ * - Usa textos do `useConsentTexts()` para i18n
317
+ * - Aplica design tokens do `useDesignTokens()`
318
+ * - Registra todas as interações via sistema de logging
319
+ * - Suporte completo a SSR com hidratação segura
320
+ *
321
+ * ### Substituição Personalizada
322
+ * Para controle total, use `CookieBannerComponent` no ConsentProvider:
323
+ *
324
+ * ```tsx
325
+ * function CustomBanner() {
326
+ * const { acceptAll, rejectAll } = useConsent();
327
+ * return <div>Meu banner customizado</div>;
328
+ * }
329
+ *
330
+ * <ConsentProvider CookieBannerComponent={CustomBanner}>
331
+ * ```
332
+ *
333
+ * @param props - Propriedades para customizar comportamento e aparência do banner (tipado via CookieBannerProps)
334
+ * @returns Banner de consentimento ou `null` se não deve ser exibido
335
+ *
336
+ * @example Uso básico (renderizado automaticamente pelo ConsentProvider)
337
+ * ```typescript
338
+ * // ConsentProvider renderiza CookieBanner automaticamente
339
+ * function App() {
340
+ * return (
341
+ * // ConsentProvider envolve a aplicação
342
+ * // CookieBanner aparece quando necessário
343
+ * );
344
+ * }
345
+ * ```
346
+ *
347
+ * @example Customização via props no ConsentProvider
348
+ * ```typescript
349
+ * // Configuração com propriedades customizadas
350
+ * const bannerProps = {
351
+ * policyLinkUrl: "/privacy",
352
+ * blocking: false,
353
+ * hideBranding: true
354
+ * };
355
+ *
356
+ * // ConsentProvider com cookieBannerProps
357
+ * ```
358
+ *
359
+ * @example Uso manual com customização avançada
360
+ * ```typescript
361
+ * function App() {
362
+ * const bannerConfig = {
363
+ * policyLinkUrl: "https://example.com/cookies",
364
+ * blocking: true,
365
+ * PaperProps: { elevation: 8 },
366
+ * SnackbarProps: { anchorOrigin: { vertical: 'top' as const } }
367
+ * };
368
+ *
369
+ * // Renderização manual com config avançada
370
+ * return null; // CookieBanner com bannerConfig
371
+ * }
372
+ * ```
373
+ *
374
+ * @see {@link ConsentProvider} - Provider que renderiza este componente automaticamente
375
+ * @see {@link useConsent} - Hook para acessar funções de consentimento
376
+ * @see {@link useConsentTexts} - Hook para textos personalizáveis
377
+ * @see {@link CookieBannerProps} - Interface completa de propriedades
378
+ *
379
+ * @public
380
+ * @since 0.1.0
381
+ */
382
+ declare function CookieBanner({ policyLinkUrl, termsLinkUrl, debug, blocking, hideBranding, SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
383
+
384
+ /**
385
+ * Props para o componente FloatingPreferencesButton.
386
+ *
387
+ * Permite configurar posição, ícone, tooltip, e comportamento de exibição do botão flutuante
388
+ * para abrir o modal de preferências de cookies LGPD.
389
+ *
390
+ * Todos os campos são opcionais e possuem valores padrão.
391
+ */
392
+ interface FloatingPreferencesButtonProps {
393
+ /** Posição do botão flutuante. Padrão: 'bottom-right' */
394
+ position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
395
+ /** Offset da borda em pixels. Padrão: 24 */
396
+ offset?: number;
397
+ /** Ícone customizado. Padrão: CookieOutlined */
398
+ icon?: React.ReactNode;
399
+ /** Tooltip customizado exibido ao passar o mouse */
400
+ tooltip?: string;
401
+ /** Props adicionais para o Fab do MUI */
402
+ FabProps?: Partial<FabProps>;
403
+ /** Se deve esconder quando consentimento já foi dado. Padrão: false */
404
+ hideWhenConsented?: boolean;
405
+ }
406
+ /**
407
+ * @component
408
+ * @category Components
409
+ * @since 0.3.0
410
+ * Botão flutuante para abrir o modal de preferências de cookies.
411
+ *
412
+ * @remarks
413
+ * Este componente é renderizado automaticamente pelo `ConsentProvider` após o consentimento inicial.
414
+ * Ele permite ao usuário acessar rapidamente as configurações de consentimento LGPD a qualquer momento.
415
+ * Você pode substituí-lo passando seu próprio componente para a prop `FloatingPreferencesButtonComponent`
416
+ * no `ConsentProvider`.
417
+ *
418
+ * Componente memoizado para otimizar performance - só re-renderiza quando props mudam.
419
+ *
420
+ * @param {Readonly<FloatingPreferencesButtonProps>} props As propriedades para customizar o botão.
421
+ * @returns {JSX.Element | null} O componente do botão flutuante ou `null` se não for necessário exibi-lo.
422
+ */
423
+ declare const FloatingPreferencesButton: React.NamedExoticComponent<Readonly<FloatingPreferencesButtonProps>>;
424
+
425
+ declare global {
426
+ /**
427
+ * @internal
428
+ * Variável global para rastrear integrações usadas.
429
+ * Usado internamente para logging e análise de performance.
430
+ */
431
+ var __LGPD_USED_INTEGRATIONS__: string[] | undefined;
432
+ }
433
+ /**
434
+ * @interface PreferencesModalProps
435
+ * Propriedades para customizar o componente `PreferencesModal`.
436
+ */
437
+ interface PreferencesModalProps {
438
+ /** Propriedades opcionais para customizar o componente `Dialog` do Material-UI. */
439
+ DialogProps?: Partial<DialogProps>;
440
+ /** Se `true`, oculta a marca "fornecido por LÉdipO.eti.br" no modal. Padrão: `false`. */
441
+ hideBranding?: boolean;
442
+ /** Estado de abertura do modal passado pelo Provider. Quando fornecido via PreferencesModalComponent, substitui o valor do hook useConsent. */
443
+ isModalOpen?: boolean;
444
+ /** Preferências de consentimento passadas pelo Provider. Quando fornecido via PreferencesModalComponent. */
445
+ preferences?: ConsentPreferences;
446
+ /** Função para atualizar preferências passada pelo Provider. Quando fornecido via PreferencesModalComponent. */
447
+ setPreferences?: (preferences: ConsentPreferences) => void;
448
+ /** Função para fechar o modal passada pelo Provider. Quando fornecido via PreferencesModalComponent. */
449
+ closePreferences?: () => void;
450
+ }
451
+ /**
452
+ * O `PreferencesModal` é o componente de UI que permite ao usuário ajustar suas preferências de consentimento.
453
+ * @component
454
+ * @category Components
455
+ * @since 0.1.0
456
+ * @remarks
457
+ * Este modal é renderizado automaticamente pelo `ConsentProvider` quando o usuário clica para gerenciar as preferências.
458
+ * Você pode substituí-lo passando seu próprio componente para a prop `PreferencesModalComponent`
459
+ * no `ConsentProvider` para ter controle total sobre a aparência e o comportamento do modal.
460
+ * @param {Readonly<PreferencesModalProps>} props As propriedades para customizar o modal.
461
+ * @returns {JSX.Element} O componente do modal de preferências.
462
+ * @example
463
+ * ```tsx
464
+ * <PreferencesModal DialogProps={{ maxWidth: 'md' }} hideBranding={true} />
465
+ * ```
466
+ */
467
+ declare function PreferencesModal({ DialogProps, hideBranding, isModalOpen: isModalOpenProp, preferences: preferencesProp, setPreferences: setPreferencesProp, closePreferences: closePreferencesProp, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
468
+
469
+ export { Branding, type BrandingProps, ConsentProvider, type ConsentProviderProps, CookieBanner, type CookieBannerProps, FloatingPreferencesButton, type FloatingPreferencesButtonProps, PreferencesModal, type PreferencesModalProps };