react-lgpd-consent 0.1.8 → 0.1.12

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
@@ -2,23 +2,102 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { PaperProps } from '@mui/material/Paper';
3
3
  import { SnackbarProps } from '@mui/material/Snackbar';
4
4
  import { DialogProps } from '@mui/material/Dialog';
5
+ import { FabProps } from '@mui/material/Fab';
5
6
  import * as React$1 from 'react';
6
7
  import * as _mui_material_styles from '@mui/material/styles';
7
8
 
9
+ /**
10
+ * Props para o componente CookieBanner.
11
+ *
12
+ * @property policyLinkUrl URL da política de privacidade (opcional).
13
+ * @property debug Força exibição do banner para QA/debug (opcional).
14
+ * @property blocking Se true, bloqueia interação até decisão do usuário (default: true).
15
+ * @property hideBranding Se true, oculta o branding "fornecido por LÉdipO.eti.br" (opcional).
16
+ * @property SnackbarProps Props adicionais para o componente MUI Snackbar (opcional).
17
+ * @property PaperProps Props adicionais para o componente MUI Paper (opcional).
18
+ */
8
19
  interface CookieBannerProps {
9
20
  policyLinkUrl?: string;
10
21
  debug?: boolean;
11
22
  blocking?: boolean;
23
+ hideBranding?: boolean;
12
24
  SnackbarProps?: Partial<SnackbarProps>;
13
25
  PaperProps?: Partial<PaperProps>;
14
26
  }
27
+ /**
28
+ * Banner de consentimento de cookies conforme LGPD.
29
+ *
30
+ * Exibe mensagem informativa, botões de ação e link para política de privacidade.
31
+ * Compatível com modo bloqueante (overlay) e não bloqueante (Snackbar).
32
+ *
33
+ * - Textos em pt-BR, customizáveis via contexto.
34
+ * - Acessível e responsivo.
35
+ * - Branding opcional.
36
+ *
37
+ * @param props Propriedades do banner de consentimento.
38
+ */
15
39
  declare function CookieBanner({ policyLinkUrl, debug, blocking, // Por padrão, bloqueia até decisão
16
- SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
40
+ hideBranding, SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
17
41
 
42
+ /**
43
+ * Props para o componente PreferencesModal.
44
+ *
45
+ * @property DialogProps Props opcionais para customizar o Dialog do Material-UI.
46
+ * @property hideBranding Se true, oculta o branding "fornecido por LÉdipO.eti.br".
47
+ */
18
48
  interface PreferencesModalProps {
19
49
  DialogProps?: Partial<DialogProps>;
50
+ hideBranding?: boolean;
51
+ }
52
+ /**
53
+ * Modal de preferências de cookies.
54
+ *
55
+ * Permite ao usuário ajustar suas preferências de consentimento para cookies analíticos e de marketing.
56
+ * Utiliza Material-UI Dialog, switches para cada categoria e textos customizáveis via contexto.
57
+ * Acessível, responsivo e compatível com SSR.
58
+ *
59
+ * @param props Props do modal, incluindo customização do Dialog e opção de ocultar branding.
60
+ */
61
+ declare function PreferencesModal({ DialogProps, hideBranding, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
62
+
63
+ /**
64
+ * Props para o componente FloatingPreferencesButton.
65
+ *
66
+ * Permite configurar posição, ícone, tooltip, e comportamento de exibição do botão flutuante
67
+ * para abrir o modal de preferências de cookies LGPD.
68
+ *
69
+ * Todos os campos são opcionais e possuem valores padrão.
70
+ */
71
+ interface FloatingPreferencesButtonProps {
72
+ /** Posição do botão flutuante. Padrão: 'bottom-right' */
73
+ position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
74
+ /** Offset da borda em pixels. Padrão: 24 */
75
+ offset?: number;
76
+ /** Ícone customizado. Padrão: CookieOutlined */
77
+ icon?: React.ReactNode;
78
+ /** Tooltip customizado exibido ao passar o mouse */
79
+ tooltip?: string;
80
+ /** Props adicionais para o Fab do MUI */
81
+ FabProps?: Partial<FabProps>;
82
+ /** Se deve esconder quando consentimento já foi dado. Padrão: false */
83
+ hideWhenConsented?: boolean;
20
84
  }
21
- declare function PreferencesModal({ DialogProps, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
85
+ /**
86
+ * Botão flutuante para abrir o modal de preferências de cookies.
87
+ *
88
+ * Permite ao usuário acessar rapidamente as configurações de consentimento LGPD.
89
+ * Pode ser posicionado em qualquer canto da tela e customizado via props.
90
+ *
91
+ * @param position Posição do botão na tela. Padrão: 'bottom-right'.
92
+ * @param offset Distância da borda em pixels. Padrão: 24.
93
+ * @param icon Ícone customizado para o botão. Padrão: CookieOutlined.
94
+ * @param tooltip Texto do tooltip exibido ao passar o mouse. Padrão: 'Gerenciar Preferências de Cookies'.
95
+ * @param FabProps Props adicionais para o componente Fab do MUI.
96
+ * @param hideWhenConsented Se verdadeiro, esconde o botão após consentimento. Padrão: false.
97
+ *
98
+ * @returns JSX.Element | null
99
+ */
100
+ declare function FloatingPreferencesButton({ position, offset, icon, tooltip, FabProps, hideWhenConsented, }: Readonly<FloatingPreferencesButtonProps>): react_jsx_runtime.JSX.Element | null;
22
101
 
23
102
  /**
24
103
  * Categoria de consentimento para cookies.
@@ -43,6 +122,25 @@ interface ConsentState {
43
122
  }
44
123
  /**
45
124
  * Textos utilizados na interface de consentimento.
125
+ *
126
+ * @remarks
127
+ * Esta interface define todos os textos exibidos na UI do banner e modal de consentimento.
128
+ * Os campos opcionais permitem adequação à ANPD e customização conforme necessidade do projeto.
129
+ *
130
+ * @property bannerMessage - Mensagem principal exibida no banner de consentimento.
131
+ * @property acceptAll - Texto do botão para aceitar todos os cookies.
132
+ * @property declineAll - Texto do botão para recusar todos os cookies.
133
+ * @property preferences - Texto do botão para abrir preferências.
134
+ * @property policyLink - (Opcional) Link para política de privacidade.
135
+ * @property modalTitle - Título do modal de preferências.
136
+ * @property modalIntro - Texto introdutório do modal.
137
+ * @property save - Texto do botão para salvar preferências.
138
+ * @property necessaryAlwaysOn - Texto explicativo para cookies necessários.
139
+ * @property controllerInfo - (Opcional) Informação sobre o controlador dos dados.
140
+ * @property dataTypes - (Opcional) Tipos de dados coletados.
141
+ * @property thirdPartySharing - (Opcional) Compartilhamento com terceiros.
142
+ * @property userRights - (Opcional) Direitos do titular dos dados.
143
+ * @property contactInfo - (Opcional) Informações de contato do DPO.
46
144
  */
47
145
  interface ConsentTexts {
48
146
  bannerMessage: string;
@@ -86,6 +184,8 @@ interface ConsentProviderProps {
86
184
  preferencesModalProps?: Record<string, any>;
87
185
  /** Desabilita o modal automático (para usar componente totalmente customizado). */
88
186
  disableAutomaticModal?: boolean;
187
+ /** Esconde branding "fornecido por LÉdipO.eti.br". */
188
+ hideBranding?: boolean;
89
189
  /** Callback chamado quando o consentimento é dado. */
90
190
  onConsentGiven?: (state: ConsentState) => void;
91
191
  /** Callback chamado ao salvar preferências. */
@@ -121,14 +221,55 @@ interface ConsentContextValue {
121
221
  resetConsent: () => void;
122
222
  }
123
223
 
124
- declare function ConsentProvider({ initialState, texts: textsProp, theme, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
224
+ /**
225
+ * Provider principal do contexto de consentimento LGPD.
226
+ *
227
+ * Gerencia o estado global de consentimento de cookies, preferências do usuário,
228
+ * textos customizáveis e integração com SSR. Permite customização do modal de preferências,
229
+ * callbacks externos e opções de cookie.
230
+ *
231
+ * @param props Propriedades do ConsentProvider (ver ConsentProviderProps)
232
+ * @returns JSX.Element
233
+ *
234
+ * @example
235
+ * <ConsentProvider>
236
+ * <App />
237
+ * </ConsentProvider>
238
+ */
239
+ declare function ConsentProvider({ initialState, texts: textsProp, theme, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
125
240
 
241
+ /**
242
+ * Hook principal para acessar e manipular o estado de consentimento de cookies.
243
+ *
244
+ * Retorna o estado atual do consentimento, preferências do usuário e métodos para
245
+ * aceitar, recusar, modificar ou resetar consentimentos. Ideal para integração
246
+ * com componentes customizados ou lógica de negócio.
247
+ *
248
+ * @returns {ConsentContextValue} Estado e ações do consentimento.
249
+ *
250
+ * @example
251
+ * const {
252
+ * consented,
253
+ * preferences,
254
+ * acceptAll,
255
+ * rejectAll,
256
+ * setPreference,
257
+ * openPreferences,
258
+ * closePreferences,
259
+ * resetConsent,
260
+ * } = useConsent();
261
+ */
126
262
  declare function useConsent(): ConsentContextValue;
127
263
  /**
128
264
  * Hook para acessar textos customizados do ConsentProvider.
129
265
  * Útil para componentes personalizados que precisam dos textos configurados.
130
266
  */
131
267
  declare function useConsentTexts(): ConsentTexts;
268
+ /**
269
+ * Hook para verificar se a hidratação do cookie foi concluída.
270
+ * Útil para evitar flash do banner antes de verificar cookies existentes.
271
+ */
272
+ declare function useConsentHydration(): boolean;
132
273
 
133
274
  declare function ConsentGate(props: Readonly<{
134
275
  category: Category;
@@ -136,15 +277,28 @@ declare function ConsentGate(props: Readonly<{
136
277
  }>): react_jsx_runtime.JSX.Element | null;
137
278
 
138
279
  /**
139
- * Carrega um script dinamicamente após consentimento finalizado.
140
- * Aguarda que o usuário tome uma decisão definitiva (banner fechado ou preferências salvas).
280
+ * Carrega dinamicamente um script externo após o consentimento do usuário ser finalizado.
281
+ *
282
+ * Aguarda até que o usuário tome uma decisão definitiva (banner fechado ou preferências salvas)
283
+ * antes de inserir o script na página. Permite restringir o carregamento por categoria de consentimento.
284
+ *
285
+ * @param id - Identificador único do elemento script a ser criado.
286
+ * @param src - URL do script externo.
287
+ * @param category - Categoria de consentimento exigida para o script ('analytics', 'marketing' ou null).
288
+ * @param attrs - Atributos adicionais a serem aplicados ao elemento script.
289
+ * @returns Promise que resolve quando o script é carregado ou rejeita se o consentimento não for dado.
141
290
  */
142
291
  declare function loadScript(id: string, src: string, category?: 'analytics' | 'marketing' | null, attrs?: Record<string, string>): Promise<void>;
143
292
 
144
293
  /**
145
- * Tema padrão para os componentes de consentimento.
146
- * Baseado no design system da ANPD/governo brasileiro.
294
+ * Tema padrão utilizado pelos componentes de consentimento da biblioteca.
295
+ *
296
+ * Inclui configurações de cores, tipografia e estilos para componentes Material-UI,
297
+ * garantindo aparência consistente e acessível conforme guidelines LGPD.
298
+ *
299
+ * @remarks
300
+ * Pode ser sobrescrito via ThemeProvider externo se necessário.
147
301
  */
148
302
  declare const defaultConsentTheme: _mui_material_styles.Theme;
149
303
 
150
- export { type Category, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, type ConsentState, type ConsentTexts, CookieBanner, PreferencesModal, defaultConsentTheme, loadScript, useConsent, useConsentTexts };
304
+ export { type Category, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, type ConsentState, type ConsentTexts, CookieBanner, FloatingPreferencesButton, PreferencesModal, defaultConsentTheme, loadScript, useConsent, useConsentHydration, useConsentTexts };
package/dist/index.d.ts CHANGED
@@ -2,23 +2,102 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { PaperProps } from '@mui/material/Paper';
3
3
  import { SnackbarProps } from '@mui/material/Snackbar';
4
4
  import { DialogProps } from '@mui/material/Dialog';
5
+ import { FabProps } from '@mui/material/Fab';
5
6
  import * as React$1 from 'react';
6
7
  import * as _mui_material_styles from '@mui/material/styles';
7
8
 
9
+ /**
10
+ * Props para o componente CookieBanner.
11
+ *
12
+ * @property policyLinkUrl URL da política de privacidade (opcional).
13
+ * @property debug Força exibição do banner para QA/debug (opcional).
14
+ * @property blocking Se true, bloqueia interação até decisão do usuário (default: true).
15
+ * @property hideBranding Se true, oculta o branding "fornecido por LÉdipO.eti.br" (opcional).
16
+ * @property SnackbarProps Props adicionais para o componente MUI Snackbar (opcional).
17
+ * @property PaperProps Props adicionais para o componente MUI Paper (opcional).
18
+ */
8
19
  interface CookieBannerProps {
9
20
  policyLinkUrl?: string;
10
21
  debug?: boolean;
11
22
  blocking?: boolean;
23
+ hideBranding?: boolean;
12
24
  SnackbarProps?: Partial<SnackbarProps>;
13
25
  PaperProps?: Partial<PaperProps>;
14
26
  }
27
+ /**
28
+ * Banner de consentimento de cookies conforme LGPD.
29
+ *
30
+ * Exibe mensagem informativa, botões de ação e link para política de privacidade.
31
+ * Compatível com modo bloqueante (overlay) e não bloqueante (Snackbar).
32
+ *
33
+ * - Textos em pt-BR, customizáveis via contexto.
34
+ * - Acessível e responsivo.
35
+ * - Branding opcional.
36
+ *
37
+ * @param props Propriedades do banner de consentimento.
38
+ */
15
39
  declare function CookieBanner({ policyLinkUrl, debug, blocking, // Por padrão, bloqueia até decisão
16
- SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
40
+ hideBranding, SnackbarProps, PaperProps, }: Readonly<CookieBannerProps>): react_jsx_runtime.JSX.Element | null;
17
41
 
42
+ /**
43
+ * Props para o componente PreferencesModal.
44
+ *
45
+ * @property DialogProps Props opcionais para customizar o Dialog do Material-UI.
46
+ * @property hideBranding Se true, oculta o branding "fornecido por LÉdipO.eti.br".
47
+ */
18
48
  interface PreferencesModalProps {
19
49
  DialogProps?: Partial<DialogProps>;
50
+ hideBranding?: boolean;
51
+ }
52
+ /**
53
+ * Modal de preferências de cookies.
54
+ *
55
+ * Permite ao usuário ajustar suas preferências de consentimento para cookies analíticos e de marketing.
56
+ * Utiliza Material-UI Dialog, switches para cada categoria e textos customizáveis via contexto.
57
+ * Acessível, responsivo e compatível com SSR.
58
+ *
59
+ * @param props Props do modal, incluindo customização do Dialog e opção de ocultar branding.
60
+ */
61
+ declare function PreferencesModal({ DialogProps, hideBranding, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
62
+
63
+ /**
64
+ * Props para o componente FloatingPreferencesButton.
65
+ *
66
+ * Permite configurar posição, ícone, tooltip, e comportamento de exibição do botão flutuante
67
+ * para abrir o modal de preferências de cookies LGPD.
68
+ *
69
+ * Todos os campos são opcionais e possuem valores padrão.
70
+ */
71
+ interface FloatingPreferencesButtonProps {
72
+ /** Posição do botão flutuante. Padrão: 'bottom-right' */
73
+ position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
74
+ /** Offset da borda em pixels. Padrão: 24 */
75
+ offset?: number;
76
+ /** Ícone customizado. Padrão: CookieOutlined */
77
+ icon?: React.ReactNode;
78
+ /** Tooltip customizado exibido ao passar o mouse */
79
+ tooltip?: string;
80
+ /** Props adicionais para o Fab do MUI */
81
+ FabProps?: Partial<FabProps>;
82
+ /** Se deve esconder quando consentimento já foi dado. Padrão: false */
83
+ hideWhenConsented?: boolean;
20
84
  }
21
- declare function PreferencesModal({ DialogProps, }: Readonly<PreferencesModalProps>): react_jsx_runtime.JSX.Element;
85
+ /**
86
+ * Botão flutuante para abrir o modal de preferências de cookies.
87
+ *
88
+ * Permite ao usuário acessar rapidamente as configurações de consentimento LGPD.
89
+ * Pode ser posicionado em qualquer canto da tela e customizado via props.
90
+ *
91
+ * @param position Posição do botão na tela. Padrão: 'bottom-right'.
92
+ * @param offset Distância da borda em pixels. Padrão: 24.
93
+ * @param icon Ícone customizado para o botão. Padrão: CookieOutlined.
94
+ * @param tooltip Texto do tooltip exibido ao passar o mouse. Padrão: 'Gerenciar Preferências de Cookies'.
95
+ * @param FabProps Props adicionais para o componente Fab do MUI.
96
+ * @param hideWhenConsented Se verdadeiro, esconde o botão após consentimento. Padrão: false.
97
+ *
98
+ * @returns JSX.Element | null
99
+ */
100
+ declare function FloatingPreferencesButton({ position, offset, icon, tooltip, FabProps, hideWhenConsented, }: Readonly<FloatingPreferencesButtonProps>): react_jsx_runtime.JSX.Element | null;
22
101
 
23
102
  /**
24
103
  * Categoria de consentimento para cookies.
@@ -43,6 +122,25 @@ interface ConsentState {
43
122
  }
44
123
  /**
45
124
  * Textos utilizados na interface de consentimento.
125
+ *
126
+ * @remarks
127
+ * Esta interface define todos os textos exibidos na UI do banner e modal de consentimento.
128
+ * Os campos opcionais permitem adequação à ANPD e customização conforme necessidade do projeto.
129
+ *
130
+ * @property bannerMessage - Mensagem principal exibida no banner de consentimento.
131
+ * @property acceptAll - Texto do botão para aceitar todos os cookies.
132
+ * @property declineAll - Texto do botão para recusar todos os cookies.
133
+ * @property preferences - Texto do botão para abrir preferências.
134
+ * @property policyLink - (Opcional) Link para política de privacidade.
135
+ * @property modalTitle - Título do modal de preferências.
136
+ * @property modalIntro - Texto introdutório do modal.
137
+ * @property save - Texto do botão para salvar preferências.
138
+ * @property necessaryAlwaysOn - Texto explicativo para cookies necessários.
139
+ * @property controllerInfo - (Opcional) Informação sobre o controlador dos dados.
140
+ * @property dataTypes - (Opcional) Tipos de dados coletados.
141
+ * @property thirdPartySharing - (Opcional) Compartilhamento com terceiros.
142
+ * @property userRights - (Opcional) Direitos do titular dos dados.
143
+ * @property contactInfo - (Opcional) Informações de contato do DPO.
46
144
  */
47
145
  interface ConsentTexts {
48
146
  bannerMessage: string;
@@ -86,6 +184,8 @@ interface ConsentProviderProps {
86
184
  preferencesModalProps?: Record<string, any>;
87
185
  /** Desabilita o modal automático (para usar componente totalmente customizado). */
88
186
  disableAutomaticModal?: boolean;
187
+ /** Esconde branding "fornecido por LÉdipO.eti.br". */
188
+ hideBranding?: boolean;
89
189
  /** Callback chamado quando o consentimento é dado. */
90
190
  onConsentGiven?: (state: ConsentState) => void;
91
191
  /** Callback chamado ao salvar preferências. */
@@ -121,14 +221,55 @@ interface ConsentContextValue {
121
221
  resetConsent: () => void;
122
222
  }
123
223
 
124
- declare function ConsentProvider({ initialState, texts: textsProp, theme, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
224
+ /**
225
+ * Provider principal do contexto de consentimento LGPD.
226
+ *
227
+ * Gerencia o estado global de consentimento de cookies, preferências do usuário,
228
+ * textos customizáveis e integração com SSR. Permite customização do modal de preferências,
229
+ * callbacks externos e opções de cookie.
230
+ *
231
+ * @param props Propriedades do ConsentProvider (ver ConsentProviderProps)
232
+ * @returns JSX.Element
233
+ *
234
+ * @example
235
+ * <ConsentProvider>
236
+ * <App />
237
+ * </ConsentProvider>
238
+ */
239
+ declare function ConsentProvider({ initialState, texts: textsProp, theme, PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
125
240
 
241
+ /**
242
+ * Hook principal para acessar e manipular o estado de consentimento de cookies.
243
+ *
244
+ * Retorna o estado atual do consentimento, preferências do usuário e métodos para
245
+ * aceitar, recusar, modificar ou resetar consentimentos. Ideal para integração
246
+ * com componentes customizados ou lógica de negócio.
247
+ *
248
+ * @returns {ConsentContextValue} Estado e ações do consentimento.
249
+ *
250
+ * @example
251
+ * const {
252
+ * consented,
253
+ * preferences,
254
+ * acceptAll,
255
+ * rejectAll,
256
+ * setPreference,
257
+ * openPreferences,
258
+ * closePreferences,
259
+ * resetConsent,
260
+ * } = useConsent();
261
+ */
126
262
  declare function useConsent(): ConsentContextValue;
127
263
  /**
128
264
  * Hook para acessar textos customizados do ConsentProvider.
129
265
  * Útil para componentes personalizados que precisam dos textos configurados.
130
266
  */
131
267
  declare function useConsentTexts(): ConsentTexts;
268
+ /**
269
+ * Hook para verificar se a hidratação do cookie foi concluída.
270
+ * Útil para evitar flash do banner antes de verificar cookies existentes.
271
+ */
272
+ declare function useConsentHydration(): boolean;
132
273
 
133
274
  declare function ConsentGate(props: Readonly<{
134
275
  category: Category;
@@ -136,15 +277,28 @@ declare function ConsentGate(props: Readonly<{
136
277
  }>): react_jsx_runtime.JSX.Element | null;
137
278
 
138
279
  /**
139
- * Carrega um script dinamicamente após consentimento finalizado.
140
- * Aguarda que o usuário tome uma decisão definitiva (banner fechado ou preferências salvas).
280
+ * Carrega dinamicamente um script externo após o consentimento do usuário ser finalizado.
281
+ *
282
+ * Aguarda até que o usuário tome uma decisão definitiva (banner fechado ou preferências salvas)
283
+ * antes de inserir o script na página. Permite restringir o carregamento por categoria de consentimento.
284
+ *
285
+ * @param id - Identificador único do elemento script a ser criado.
286
+ * @param src - URL do script externo.
287
+ * @param category - Categoria de consentimento exigida para o script ('analytics', 'marketing' ou null).
288
+ * @param attrs - Atributos adicionais a serem aplicados ao elemento script.
289
+ * @returns Promise que resolve quando o script é carregado ou rejeita se o consentimento não for dado.
141
290
  */
142
291
  declare function loadScript(id: string, src: string, category?: 'analytics' | 'marketing' | null, attrs?: Record<string, string>): Promise<void>;
143
292
 
144
293
  /**
145
- * Tema padrão para os componentes de consentimento.
146
- * Baseado no design system da ANPD/governo brasileiro.
294
+ * Tema padrão utilizado pelos componentes de consentimento da biblioteca.
295
+ *
296
+ * Inclui configurações de cores, tipografia e estilos para componentes Material-UI,
297
+ * garantindo aparência consistente e acessível conforme guidelines LGPD.
298
+ *
299
+ * @remarks
300
+ * Pode ser sobrescrito via ThemeProvider externo se necessário.
147
301
  */
148
302
  declare const defaultConsentTheme: _mui_material_styles.Theme;
149
303
 
150
- export { type Category, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, type ConsentState, type ConsentTexts, CookieBanner, PreferencesModal, defaultConsentTheme, loadScript, useConsent, useConsentTexts };
304
+ export { type Category, type ConsentCookieOptions, ConsentGate, type ConsentPreferences, ConsentProvider, type ConsentState, type ConsentTexts, CookieBanner, FloatingPreferencesButton, PreferencesModal, defaultConsentTheme, loadScript, useConsent, useConsentHydration, useConsentTexts };
package/dist/index.js CHANGED
@@ -1,31 +1,35 @@
1
1
  import {
2
+ Branding,
2
3
  ConsentProvider,
3
4
  PreferencesModal,
4
5
  defaultConsentTheme,
5
6
  useConsent,
7
+ useConsentHydration,
6
8
  useConsentTexts
7
- } from "./chunk-Y4XEAQXV.js";
9
+ } from "./chunk-V54LZT2Q.js";
8
10
 
9
11
  // src/components/CookieBanner.tsx
10
12
  import Button from "@mui/material/Button";
11
13
  import Box from "@mui/material/Box";
12
- import Link from "@mui/material/Link";
13
14
  import Paper from "@mui/material/Paper";
14
15
  import Snackbar from "@mui/material/Snackbar";
15
16
  import Stack from "@mui/material/Stack";
16
17
  import Typography from "@mui/material/Typography";
18
+ import Link from "@mui/material/Link";
17
19
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
18
20
  function CookieBanner({
19
21
  policyLinkUrl,
20
22
  debug,
21
23
  blocking = true,
22
24
  // Por padrão, bloqueia até decisão
25
+ hideBranding = false,
23
26
  SnackbarProps,
24
27
  PaperProps
25
28
  }) {
26
29
  const { consented, acceptAll, rejectAll, openPreferences } = useConsent();
27
30
  const texts = useConsentTexts();
28
- const open = debug ? true : !consented;
31
+ const isHydrated = useConsentHydration();
32
+ const open = debug ? true : isHydrated && !consented;
29
33
  if (!open) return null;
30
34
  const bannerContent = /* @__PURE__ */ jsx(
31
35
  Paper,
@@ -60,7 +64,8 @@ function CookieBanner({
60
64
  /* @__PURE__ */ jsx(Button, { variant: "text", onClick: openPreferences, children: texts.preferences })
61
65
  ]
62
66
  }
63
- )
67
+ ),
68
+ !hideBranding && /* @__PURE__ */ jsx(Branding, { variant: "banner" })
64
69
  ] })
65
70
  }
66
71
  );
@@ -109,12 +114,70 @@ function CookieBanner({
109
114
  );
110
115
  }
111
116
 
117
+ // src/components/FloatingPreferencesButton.tsx
118
+ import CookieOutlined from "@mui/icons-material/CookieOutlined";
119
+ import Fab from "@mui/material/Fab";
120
+ import Tooltip from "@mui/material/Tooltip";
121
+ import { useTheme } from "@mui/material/styles";
122
+ import { jsx as jsx2 } from "react/jsx-runtime";
123
+ function FloatingPreferencesButton({
124
+ position = "bottom-right",
125
+ offset = 24,
126
+ icon = /* @__PURE__ */ jsx2(CookieOutlined, {}),
127
+ tooltip,
128
+ FabProps,
129
+ hideWhenConsented = false
130
+ }) {
131
+ const { openPreferences, consented } = useConsent();
132
+ const theme = useTheme();
133
+ if (hideWhenConsented && consented) {
134
+ return null;
135
+ }
136
+ const tooltipText = tooltip ?? "Gerenciar Prefer\xEAncias de Cookies";
137
+ const getPosition = () => {
138
+ const styles = {
139
+ position: "fixed",
140
+ zIndex: 1200
141
+ };
142
+ switch (position) {
143
+ case "bottom-left":
144
+ return { ...styles, bottom: offset, left: offset };
145
+ case "bottom-right":
146
+ return { ...styles, bottom: offset, right: offset };
147
+ case "top-left":
148
+ return { ...styles, top: offset, left: offset };
149
+ case "top-right":
150
+ return { ...styles, top: offset, right: offset };
151
+ default:
152
+ return { ...styles, bottom: offset, right: offset };
153
+ }
154
+ };
155
+ return /* @__PURE__ */ jsx2(Tooltip, { title: tooltipText, placement: "top", children: /* @__PURE__ */ jsx2(
156
+ Fab,
157
+ {
158
+ size: "medium",
159
+ color: "primary",
160
+ onClick: openPreferences,
161
+ sx: {
162
+ ...getPosition(),
163
+ backgroundColor: theme.palette.primary.main,
164
+ "&:hover": {
165
+ backgroundColor: theme.palette.primary.dark
166
+ }
167
+ },
168
+ "aria-label": tooltipText,
169
+ ...FabProps,
170
+ children: icon
171
+ }
172
+ ) });
173
+ }
174
+
112
175
  // src/utils/ConsentGate.tsx
113
- import { Fragment as Fragment2, jsx as jsx2 } from "react/jsx-runtime";
176
+ import { Fragment as Fragment2, jsx as jsx3 } from "react/jsx-runtime";
114
177
  function ConsentGate(props) {
115
178
  const { preferences } = useConsent();
116
179
  if (!preferences[props.category]) return null;
117
- return /* @__PURE__ */ jsx2(Fragment2, { children: props.children });
180
+ return /* @__PURE__ */ jsx3(Fragment2, { children: props.children });
118
181
  }
119
182
 
120
183
  // src/utils/scriptLoader.ts
@@ -157,9 +220,11 @@ export {
157
220
  ConsentGate,
158
221
  ConsentProvider,
159
222
  CookieBanner,
223
+ FloatingPreferencesButton,
160
224
  PreferencesModal,
161
225
  defaultConsentTheme,
162
226
  loadScript,
163
227
  useConsent,
228
+ useConsentHydration,
164
229
  useConsentTexts
165
230
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-lgpd-consent",
3
- "version": "0.1.8",
3
+ "version": "0.1.12",
4
4
  "description": "Biblioteca de consentimento de cookies (LGPD) para React e Next.js, com contexto, banner e modal personalizáveis usando MUI.",
5
5
  "keywords": [
6
6
  "lgpd",