@react-lgpd-consent/mui 0.5.1 → 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.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 - memoizado para evitar re-renders desnecessários.
18
- * Props são estáveis (variant, hidden) e hooks são otimizados.
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
- * Props do ConsentProvider com suporte a componentes MUI.
24
- * Estende as props do core com valores padrão para componentes UI.
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
- * @category Types
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
- * @default false
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 padrão.
41
- * Útil quando se deseja uma implementação própria, mantendo outras integrações.
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
- * @default false
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
- * @default false
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 padrões.
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. O core permanece agnóstico.
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
- * const theme = createTheme({ palette: { primary: { main: '#1976d2' } } })
64
- * <ConsentProvider theme={theme} />
65
- * ```
281
+ * import { createTheme } from '@mui/material/styles'
66
282
  *
67
- * @since 0.5.0
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
- * **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
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
- * **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
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
- * @example
94
- * **Uso Básico (Modal automático):**
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 categories={{ enabledCategories: ['analytics'] }}>
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
- * **Modal customizado:**
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
- * @param props - Props do provider incluindo categorias, textos, callbacks, etc.
144
- * @returns Provider React com contexto de consentimento e UI integrada
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
- * Props para o componente FloatingPreferencesButton.
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
- * 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.
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
- * Todos os campos são opcionais e possuem valores padrão.
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
- /** Posição do botão flutuante. Padrão: 'bottom-right' */
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
- /** Offset da borda em pixels. Padrão: 24 */
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
- /** Ícone customizado. Padrão: CookieOutlined */
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
- /** Tooltip customizado exibido ao passar o mouse */
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
- /** Props adicionais para o Fab do MUI */
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
- /** Se deve esconder quando consentimento já foi dado. Padrão: false */
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 é 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`.
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
- * Componente memoizado para otimizar performance - só re-renderiza quando props mudam.
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
- * @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.
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.NamedExoticComponent<Readonly<FloatingPreferencesButtonProps>>;
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
- * @interface PreferencesModalProps
435
- * Propriedades para customizar o componente `PreferencesModal`.
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
- /** Propriedades opcionais para customizar o componente `Dialog` do Material-UI. */
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
- /** Se `true`, oculta a marca "fornecido por LÉdipO.eti.br" no modal. Padrão: `false`. */
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
- /** Estado de abertura do modal passado pelo Provider. Quando fornecido via PreferencesModalComponent, substitui o valor do hook useConsent. */
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
- /** Preferências de consentimento passadas pelo Provider. Quando fornecido via PreferencesModalComponent. */
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
- /** Função para atualizar preferências passada pelo Provider. Quando fornecido via PreferencesModalComponent. */
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
- /** Função para fechar o modal passada pelo Provider. Quando fornecido via PreferencesModalComponent. */
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
- * O `PreferencesModal` é o componente de UI que permite ao usuário ajustar suas preferências de consentimento.
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
- * 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
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
- * <PreferencesModal DialogProps={{ maxWidth: 'md' }} hideBranding={true} />
1158
+ * // ConsentProvider 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