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/README.md +50 -9
- package/dist/{PreferencesModal-4FDYT7VE.js → PreferencesModal-IFKCHTF2.js} +1 -1
- package/dist/{chunk-Y4XEAQXV.js → chunk-V54LZT2Q.js} +109 -31
- package/dist/index.cjs +202 -50
- package/dist/index.d.cts +162 -8
- package/dist/index.d.ts +162 -8
- package/dist/index.js +71 -6
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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
|
|
140
|
-
*
|
|
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
|
|
146
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
140
|
-
*
|
|
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
|
|
146
|
-
*
|
|
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-
|
|
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
|
|
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
|
|
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__ */
|
|
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