react-lgpd-consent 0.2.2 → 0.2.4
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 +752 -739
- package/dist/{PreferencesModal-UL552BFP.js → PreferencesModal-SOVV24DU.js} +1 -1
- package/dist/{chunk-JAX63PBG.js → chunk-UKKWGQN7.js} +62 -26
- package/dist/index.cjs +63 -26
- package/dist/index.d.cts +177 -18
- package/dist/index.d.ts +177 -18
- package/dist/index.js +2 -2
- package/package.json +109 -105
package/dist/index.d.ts
CHANGED
|
@@ -284,41 +284,198 @@ interface ConsentCookieOptions {
|
|
|
284
284
|
path: string;
|
|
285
285
|
}
|
|
286
286
|
/**
|
|
287
|
-
* Propriedades
|
|
287
|
+
* Propriedades do componente ConsentProvider - configuração principal da biblioteca.
|
|
288
|
+
*
|
|
289
|
+
* @example Uso básico (configuração mínima):
|
|
290
|
+
* ```tsx
|
|
291
|
+
* <ConsentProvider
|
|
292
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
293
|
+
* >
|
|
294
|
+
* <App />
|
|
295
|
+
* </ConsentProvider>
|
|
296
|
+
* ```
|
|
297
|
+
*
|
|
298
|
+
* @example Configuração completa com textos ANPD:
|
|
299
|
+
* ```tsx
|
|
300
|
+
* <ConsentProvider
|
|
301
|
+
* categories={{
|
|
302
|
+
* enabledCategories: ['analytics', 'functional'],
|
|
303
|
+
* customCategories: [{
|
|
304
|
+
* id: 'governo',
|
|
305
|
+
* name: 'Cookies Governamentais',
|
|
306
|
+
* description: 'Coleta para estatísticas públicas',
|
|
307
|
+
* essential: false
|
|
308
|
+
* }]
|
|
309
|
+
* }}
|
|
310
|
+
* texts={{
|
|
311
|
+
* bannerMessage: 'Utilizamos cookies conforme LGPD...',
|
|
312
|
+
* controllerInfo: 'Controlado por: Ministério XYZ - CNPJ: 00.000.000/0001-00',
|
|
313
|
+
* dataTypes: 'Coletamos: dados de navegação para análise estatística',
|
|
314
|
+
* userRights: 'Direitos: acessar, corrigir, excluir dados',
|
|
315
|
+
* contactInfo: 'DPO: dpo@ministerio.gov.br'
|
|
316
|
+
* }}
|
|
317
|
+
* onConsentGiven={(state) => console.log('Consentimento:', state)}
|
|
318
|
+
* >
|
|
319
|
+
* <App />
|
|
320
|
+
* </ConsentProvider>
|
|
321
|
+
* ```
|
|
288
322
|
*/
|
|
289
323
|
interface ConsentProviderProps {
|
|
290
|
-
/**
|
|
324
|
+
/**
|
|
325
|
+
* Estado inicial do consentimento para hidratação SSR.
|
|
326
|
+
*
|
|
327
|
+
* @example
|
|
328
|
+
* ```tsx
|
|
329
|
+
* // Em Next.js para evitar flash do banner
|
|
330
|
+
* <ConsentProvider initialState={{ consented: true, preferences: {...} }}>
|
|
331
|
+
* ```
|
|
332
|
+
*/
|
|
291
333
|
initialState?: ConsentState;
|
|
292
|
-
/**
|
|
334
|
+
/**
|
|
335
|
+
* Configuração das categorias de cookies utilizadas no projeto.
|
|
336
|
+
* Define quais categorias padrão serão habilitadas e categorias customizadas.
|
|
337
|
+
*
|
|
338
|
+
* @example Apenas analytics:
|
|
339
|
+
* ```tsx
|
|
340
|
+
* categories={{ enabledCategories: ['analytics'] }}
|
|
341
|
+
* ```
|
|
342
|
+
*
|
|
343
|
+
* @example Com categoria customizada:
|
|
344
|
+
* ```tsx
|
|
345
|
+
* categories={{
|
|
346
|
+
* enabledCategories: ['analytics', 'marketing'],
|
|
347
|
+
* customCategories: [{
|
|
348
|
+
* id: 'pesquisa',
|
|
349
|
+
* name: 'Cookies de Pesquisa',
|
|
350
|
+
* description: 'Coleta feedback e opinião dos usuários',
|
|
351
|
+
* essential: false
|
|
352
|
+
* }]
|
|
353
|
+
* }}
|
|
354
|
+
* ```
|
|
355
|
+
*/
|
|
293
356
|
categories?: ProjectCategoriesConfig;
|
|
294
|
-
/**
|
|
357
|
+
/**
|
|
358
|
+
* Textos customizados da interface (banner e modal).
|
|
359
|
+
* Todos os campos são opcionais - valores não fornecidos usam o padrão em português.
|
|
360
|
+
*
|
|
361
|
+
* @example Textos básicos:
|
|
362
|
+
* ```tsx
|
|
363
|
+
* texts={{
|
|
364
|
+
* bannerMessage: 'We use cookies...',
|
|
365
|
+
* acceptAll: 'Accept All',
|
|
366
|
+
* declineAll: 'Reject'
|
|
367
|
+
* }}
|
|
368
|
+
* ```
|
|
369
|
+
*
|
|
370
|
+
* @example Textos ANPD para compliance:
|
|
371
|
+
* ```tsx
|
|
372
|
+
* texts={{
|
|
373
|
+
* controllerInfo: 'Controlado por: Empresa XYZ - CNPJ: 12.345.678/0001-90',
|
|
374
|
+
* dataTypes: 'Coletamos: endereço IP, preferências de navegação',
|
|
375
|
+
* userRights: 'Você pode solicitar acesso, correção ou exclusão dos dados'
|
|
376
|
+
* }}
|
|
377
|
+
* ```
|
|
378
|
+
*/
|
|
295
379
|
texts?: Partial<ConsentTexts>;
|
|
296
|
-
/**
|
|
380
|
+
/**
|
|
381
|
+
* Tema customizado Material-UI aplicado aos componentes.
|
|
382
|
+
* Aceita qualquer objeto que será passado para ThemeProvider.
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* ```tsx
|
|
386
|
+
* theme={{
|
|
387
|
+
* palette: { primary: { main: '#1976d2' } },
|
|
388
|
+
* components: { MuiButton: { styleOverrides: { root: { borderRadius: 8 } } } }
|
|
389
|
+
* }}
|
|
390
|
+
* ```
|
|
391
|
+
*/
|
|
297
392
|
theme?: any;
|
|
298
393
|
/**
|
|
299
|
-
* @deprecated
|
|
300
|
-
*
|
|
394
|
+
* @deprecated Usar `categories.customCategories` em vez disso.
|
|
395
|
+
* Mantido para compatibilidade com v0.1.x
|
|
301
396
|
*/
|
|
302
397
|
customCategories?: CategoryDefinition[];
|
|
303
|
-
/**
|
|
398
|
+
/**
|
|
399
|
+
* Integrações nativas de scripts terceiros (Google Analytics, etc.).
|
|
400
|
+
* Scripts são carregados automaticamente baseado no consentimento.
|
|
401
|
+
*
|
|
402
|
+
* @example
|
|
403
|
+
* ```tsx
|
|
404
|
+
* import { createGoogleAnalyticsIntegration } from 'react-lgpd-consent'
|
|
405
|
+
*
|
|
406
|
+
* scriptIntegrations={[
|
|
407
|
+
* createGoogleAnalyticsIntegration('GA_MEASUREMENT_ID')
|
|
408
|
+
* ]}
|
|
409
|
+
* ```
|
|
410
|
+
*/
|
|
304
411
|
scriptIntegrations?: ScriptIntegration[];
|
|
305
|
-
/**
|
|
412
|
+
/**
|
|
413
|
+
* Componente customizado para substituir o modal padrão de preferências.
|
|
414
|
+
* Deve implementar a lógica de consentimento usando os hooks da biblioteca.
|
|
415
|
+
*/
|
|
306
416
|
PreferencesModalComponent?: React.ComponentType<any>;
|
|
307
|
-
/** Props adicionais para o modal customizado. */
|
|
417
|
+
/** Props adicionais passadas para o modal customizado. */
|
|
308
418
|
preferencesModalProps?: Record<string, any>;
|
|
309
|
-
/**
|
|
419
|
+
/**
|
|
420
|
+
* Desabilita o modal automático de preferências.
|
|
421
|
+
* Útil quando se quer controle total sobre quando/como exibir as opções.
|
|
422
|
+
*/
|
|
310
423
|
disableAutomaticModal?: boolean;
|
|
311
|
-
/**
|
|
424
|
+
/**
|
|
425
|
+
* Comportamento do banner de consentimento:
|
|
426
|
+
* - `false` (padrão): Banner não-intrusivo, usuário pode navegar livremente
|
|
427
|
+
* - `true`: Banner bloqueia interação até decisão (compliance rigorosa)
|
|
428
|
+
*/
|
|
312
429
|
blocking?: boolean;
|
|
313
|
-
/**
|
|
430
|
+
/** Oculta o branding "fornecido por LÉdipO.eti.br" dos componentes. */
|
|
314
431
|
hideBranding?: boolean;
|
|
315
|
-
/**
|
|
432
|
+
/**
|
|
433
|
+
* Callback executado quando usuário dá consentimento pela primeira vez.
|
|
434
|
+
* Útil para inicializar analytics, registrar evento, etc.
|
|
435
|
+
*
|
|
436
|
+
* @example
|
|
437
|
+
* ```tsx
|
|
438
|
+
* onConsentGiven={(state) => {
|
|
439
|
+
* console.log('Consentimento registrado:', state)
|
|
440
|
+
* // Inicializar Google Analytics, etc.
|
|
441
|
+
* }}
|
|
442
|
+
* ```
|
|
443
|
+
*/
|
|
316
444
|
onConsentGiven?: (state: ConsentState) => void;
|
|
317
|
-
/**
|
|
445
|
+
/**
|
|
446
|
+
* Callback executado quando usuário modifica preferências.
|
|
447
|
+
* Executado após salvar as mudanças.
|
|
448
|
+
*
|
|
449
|
+
* @example
|
|
450
|
+
* ```tsx
|
|
451
|
+
* onPreferencesSaved={(prefs) => {
|
|
452
|
+
* console.log('Novas preferências:', prefs)
|
|
453
|
+
* // Reconfigurar scripts baseado nas preferências
|
|
454
|
+
* }}
|
|
455
|
+
* ```
|
|
456
|
+
*/
|
|
318
457
|
onPreferencesSaved?: (prefs: ConsentPreferences) => void;
|
|
319
|
-
/**
|
|
458
|
+
/**
|
|
459
|
+
* Configurações do cookie de consentimento.
|
|
460
|
+
* Valores não fornecidos usam padrões seguros para LGPD.
|
|
461
|
+
*
|
|
462
|
+
* @example
|
|
463
|
+
* ```tsx
|
|
464
|
+
* cookie={{
|
|
465
|
+
* name: 'meuAppConsent',
|
|
466
|
+
* maxAgeDays: 180,
|
|
467
|
+
* sameSite: 'Strict'
|
|
468
|
+
* }}
|
|
469
|
+
* ```
|
|
470
|
+
*/
|
|
320
471
|
cookie?: Partial<ConsentCookieOptions>;
|
|
321
|
-
/**
|
|
472
|
+
/**
|
|
473
|
+
* Desabilita os avisos e sugestões para desenvolvedores no console.
|
|
474
|
+
* Útil para ambientes de produção ou quando os avisos não são desejados.
|
|
475
|
+
* Por padrão, os avisos já são desabilitados em builds de produção.
|
|
476
|
+
*/
|
|
477
|
+
disableDeveloperGuidance?: boolean;
|
|
478
|
+
/** Elementos filhos - toda a aplicação que precisa de contexto de consentimento. */
|
|
322
479
|
children: React.ReactNode;
|
|
323
480
|
}
|
|
324
481
|
/**
|
|
@@ -364,7 +521,9 @@ interface ConsentContextValue {
|
|
|
364
521
|
*/
|
|
365
522
|
declare function ConsentProvider({ initialState, categories, // NOVO: configuração completa de categorias
|
|
366
523
|
texts: textsProp, theme, customCategories, // LEGACY: compatibilidade
|
|
367
|
-
scriptIntegrations,
|
|
524
|
+
scriptIntegrations, // eslint-disable-line no-unused-vars
|
|
525
|
+
PreferencesModalComponent, preferencesModalProps, disableAutomaticModal, hideBranding, onConsentGiven, onPreferencesSaved, cookie: cookieOpts, disableDeveloperGuidance, // NOVO: desabilita avisos de dev
|
|
526
|
+
children, }: Readonly<ConsentProviderProps>): react_jsx_runtime.JSX.Element;
|
|
368
527
|
|
|
369
528
|
/**
|
|
370
529
|
* Hook principal para acessar e manipular o estado de consentimento de cookies.
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
useConsentHydration,
|
|
12
12
|
useConsentTexts,
|
|
13
13
|
useCustomCategories
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-UKKWGQN7.js";
|
|
15
15
|
|
|
16
16
|
// src/components/CookieBanner.tsx
|
|
17
17
|
import Button from "@mui/material/Button";
|
|
@@ -309,7 +309,7 @@ function createGoogleAnalyticsIntegration(config) {
|
|
|
309
309
|
init: () => {
|
|
310
310
|
if (typeof window !== "undefined") {
|
|
311
311
|
let gtag2 = function(...args) {
|
|
312
|
-
window.dataLayer.push(
|
|
312
|
+
window.dataLayer.push(...args);
|
|
313
313
|
};
|
|
314
314
|
var gtag = gtag2;
|
|
315
315
|
window.dataLayer = window.dataLayer || [];
|
package/package.json
CHANGED
|
@@ -1,105 +1,109 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "react-lgpd-consent",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Biblioteca completa de consentimento LGPD com 6 categorias ANPD, integrações nativas e sistema extensível para React.",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"lgpd",
|
|
7
|
-
"anpd",
|
|
8
|
-
"cookie",
|
|
9
|
-
"consent",
|
|
10
|
-
"react",
|
|
11
|
-
"client-side",
|
|
12
|
-
"spa",
|
|
13
|
-
"material-ui",
|
|
14
|
-
"mui",
|
|
15
|
-
"typescript",
|
|
16
|
-
"js-cookie",
|
|
17
|
-
"consentimento",
|
|
18
|
-
"privacidade",
|
|
19
|
-
"acessibilidade",
|
|
20
|
-
"google-analytics",
|
|
21
|
-
"tag-manager",
|
|
22
|
-
"userway",
|
|
23
|
-
"categorias-extensiveis"
|
|
24
|
-
],
|
|
25
|
-
"publishConfig": {
|
|
26
|
-
"access": "public"
|
|
27
|
-
},
|
|
28
|
-
"author": {
|
|
29
|
-
"name": "Luciano Édipo",
|
|
30
|
-
"email": "luciano.psilva@anpd.gov.br",
|
|
31
|
-
"url": "https://github.com/lucianoedipo"
|
|
32
|
-
},
|
|
33
|
-
"license": "MIT",
|
|
34
|
-
"type": "module",
|
|
35
|
-
"main": "dist/index.cjs",
|
|
36
|
-
"module": "dist/index.mjs",
|
|
37
|
-
"types": "dist/index.d.ts",
|
|
38
|
-
"exports": {
|
|
39
|
-
".": {
|
|
40
|
-
"types": "./dist/index.d.ts",
|
|
41
|
-
"import": "./dist/index.js",
|
|
42
|
-
"require": "./dist/index.cjs"
|
|
43
|
-
},
|
|
44
|
-
"./package.json": "./package.json"
|
|
45
|
-
},
|
|
46
|
-
"sideEffects": false,
|
|
47
|
-
"files": [
|
|
48
|
-
"dist",
|
|
49
|
-
"README.md",
|
|
50
|
-
"LICENSE",
|
|
51
|
-
"COMPLIANCE.md"
|
|
52
|
-
],
|
|
53
|
-
"engines": {
|
|
54
|
-
"node": ">=18.18"
|
|
55
|
-
},
|
|
56
|
-
"packageManager": "pnpm@9.0.0",
|
|
57
|
-
"scripts": {
|
|
58
|
-
"clean": "rimraf dist",
|
|
59
|
-
"build": "cross-env NODE_ENV=production tsup src/index.ts --format esm,cjs --dts --clean",
|
|
60
|
-
"dev": "cross-env NODE_ENV=development tsup src/index.ts --format esm,cjs --dts --watch",
|
|
61
|
-
"lint": "eslint . --ext .ts,.tsx",
|
|
62
|
-
"format": "prettier --write \"src/**/*.{ts,tsx,json,md}\"",
|
|
63
|
-
"type-check": "tsc --noEmit",
|
|
64
|
-
"prepublishOnly": "npm run build"
|
|
65
|
-
},
|
|
66
|
-
"repository": {
|
|
67
|
-
"type": "git",
|
|
68
|
-
"url": "git+https://github.com/lucianoedipo/react-lgpd-consent.git"
|
|
69
|
-
},
|
|
70
|
-
"bugs": {
|
|
71
|
-
"url": "https://github.com/lucianoedipo/react-lgpd-consent/issues"
|
|
72
|
-
},
|
|
73
|
-
"homepage": "https://github.com/lucianoedipo/react-lgpd-consent#readme",
|
|
74
|
-
"peerDependencies": {
|
|
75
|
-
"@mui/material": "^7.0.0 || ^6.0.0 || ^5.15.0",
|
|
76
|
-
"@mui/
|
|
77
|
-
"react": "^18.2.0 || ^19.0.0",
|
|
78
|
-
"react-dom": "^18.2.0 || ^19.0.0"
|
|
79
|
-
},
|
|
80
|
-
"peerDependenciesMeta": {
|
|
81
|
-
"@mui/icons-material": {
|
|
82
|
-
"optional": true
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
"dependencies": {
|
|
86
|
-
"js-cookie": "^3.0.5"
|
|
87
|
-
},
|
|
88
|
-
"devDependencies": {
|
|
89
|
-
"@
|
|
90
|
-
"@
|
|
91
|
-
"@
|
|
92
|
-
"@
|
|
93
|
-
"@
|
|
94
|
-
"react": "^19.1.
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"eslint
|
|
99
|
-
"eslint-
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
|
|
105
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "react-lgpd-consent",
|
|
3
|
+
"version": "0.2.4",
|
|
4
|
+
"description": "Biblioteca completa de consentimento LGPD com 6 categorias ANPD, integrações nativas e sistema extensível para React.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"lgpd",
|
|
7
|
+
"anpd",
|
|
8
|
+
"cookie",
|
|
9
|
+
"consent",
|
|
10
|
+
"react",
|
|
11
|
+
"client-side",
|
|
12
|
+
"spa",
|
|
13
|
+
"material-ui",
|
|
14
|
+
"mui",
|
|
15
|
+
"typescript",
|
|
16
|
+
"js-cookie",
|
|
17
|
+
"consentimento",
|
|
18
|
+
"privacidade",
|
|
19
|
+
"acessibilidade",
|
|
20
|
+
"google-analytics",
|
|
21
|
+
"tag-manager",
|
|
22
|
+
"userway",
|
|
23
|
+
"categorias-extensiveis"
|
|
24
|
+
],
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"author": {
|
|
29
|
+
"name": "Luciano Édipo",
|
|
30
|
+
"email": "luciano.psilva@anpd.gov.br",
|
|
31
|
+
"url": "https://github.com/lucianoedipo"
|
|
32
|
+
},
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"type": "module",
|
|
35
|
+
"main": "dist/index.cjs",
|
|
36
|
+
"module": "dist/index.mjs",
|
|
37
|
+
"types": "dist/index.d.ts",
|
|
38
|
+
"exports": {
|
|
39
|
+
".": {
|
|
40
|
+
"types": "./dist/index.d.ts",
|
|
41
|
+
"import": "./dist/index.js",
|
|
42
|
+
"require": "./dist/index.cjs"
|
|
43
|
+
},
|
|
44
|
+
"./package.json": "./package.json"
|
|
45
|
+
},
|
|
46
|
+
"sideEffects": false,
|
|
47
|
+
"files": [
|
|
48
|
+
"dist",
|
|
49
|
+
"README.md",
|
|
50
|
+
"LICENSE",
|
|
51
|
+
"COMPLIANCE.md"
|
|
52
|
+
],
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=18.18"
|
|
55
|
+
},
|
|
56
|
+
"packageManager": "pnpm@9.0.0",
|
|
57
|
+
"scripts": {
|
|
58
|
+
"clean": "rimraf dist",
|
|
59
|
+
"build": "cross-env NODE_ENV=production tsup src/index.ts --format esm,cjs --dts --clean",
|
|
60
|
+
"dev": "cross-env NODE_ENV=development tsup src/index.ts --format esm,cjs --dts --watch",
|
|
61
|
+
"lint": "eslint . --ext .ts,.tsx",
|
|
62
|
+
"format": "prettier --write \"src/**/*.{ts,tsx,json,md}\" \"eslint.config.js\"",
|
|
63
|
+
"type-check": "tsc --noEmit",
|
|
64
|
+
"prepublishOnly": "npm run build"
|
|
65
|
+
},
|
|
66
|
+
"repository": {
|
|
67
|
+
"type": "git",
|
|
68
|
+
"url": "git+https://github.com/lucianoedipo/react-lgpd-consent.git"
|
|
69
|
+
},
|
|
70
|
+
"bugs": {
|
|
71
|
+
"url": "https://github.com/lucianoedipo/react-lgpd-consent/issues"
|
|
72
|
+
},
|
|
73
|
+
"homepage": "https://github.com/lucianoedipo/react-lgpd-consent#readme",
|
|
74
|
+
"peerDependencies": {
|
|
75
|
+
"@mui/icons-material": "^7.0.0 || ^6.0.0 || ^5.15.0",
|
|
76
|
+
"@mui/material": "^7.0.0 || ^6.0.0 || ^5.15.0",
|
|
77
|
+
"react": "^18.2.0 || ^19.0.0",
|
|
78
|
+
"react-dom": "^18.2.0 || ^19.0.0"
|
|
79
|
+
},
|
|
80
|
+
"peerDependenciesMeta": {
|
|
81
|
+
"@mui/icons-material": {
|
|
82
|
+
"optional": true
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"dependencies": {
|
|
86
|
+
"js-cookie": "^3.0.5"
|
|
87
|
+
},
|
|
88
|
+
"devDependencies": {
|
|
89
|
+
"@eslint/compat": "^1.3.2",
|
|
90
|
+
"@mui/icons-material": "^7.3.1",
|
|
91
|
+
"@mui/material": "^7.3.1",
|
|
92
|
+
"@types/js-cookie": "^3.0.6",
|
|
93
|
+
"@types/react": "^19.1.9",
|
|
94
|
+
"@types/react-dom": "^19.1.7",
|
|
95
|
+
"@typescript-eslint/eslint-plugin": "^8.39.1",
|
|
96
|
+
"@typescript-eslint/parser": "^8.39.1",
|
|
97
|
+
"cross-env": "^10.0.0",
|
|
98
|
+
"eslint": "^9.33.0",
|
|
99
|
+
"eslint-config-prettier": "^10.1.8",
|
|
100
|
+
"eslint-plugin-react-hooks": "^5.2.0",
|
|
101
|
+
"prettier": "^3.6.2",
|
|
102
|
+
"react": "^19.1.1",
|
|
103
|
+
"react-dom": "^19.1.1",
|
|
104
|
+
"rimraf": "^6.0.1",
|
|
105
|
+
"tsup": "^8.5.0",
|
|
106
|
+
"typescript": "^5.9.2",
|
|
107
|
+
"typescript-eslint": "^8.39.1"
|
|
108
|
+
}
|
|
109
|
+
}
|